@sochdb/sochdb 0.4.0

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 (78) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3349 -0
  3. package/_bin/aarch64-apple-darwin/libsochdb_storage.dylib +0 -0
  4. package/_bin/aarch64-apple-darwin/sochdb-bulk +0 -0
  5. package/_bin/aarch64-apple-darwin/sochdb-grpc-server +0 -0
  6. package/_bin/aarch64-apple-darwin/sochdb-server +0 -0
  7. package/_bin/x86_64-pc-windows-msvc/sochdb-bulk.exe +0 -0
  8. package/_bin/x86_64-pc-windows-msvc/sochdb-grpc-server.exe +0 -0
  9. package/_bin/x86_64-pc-windows-msvc/sochdb_storage.dll +0 -0
  10. package/_bin/x86_64-unknown-linux-gnu/libsochdb_storage.so +0 -0
  11. package/_bin/x86_64-unknown-linux-gnu/sochdb-bulk +0 -0
  12. package/_bin/x86_64-unknown-linux-gnu/sochdb-grpc-server +0 -0
  13. package/_bin/x86_64-unknown-linux-gnu/sochdb-server +0 -0
  14. package/bin/sochdb-bulk.js +80 -0
  15. package/bin/sochdb-grpc-server.js +80 -0
  16. package/bin/sochdb-server.js +84 -0
  17. package/dist/cjs/analytics.js +196 -0
  18. package/dist/cjs/database.js +929 -0
  19. package/dist/cjs/embedded/database.js +236 -0
  20. package/dist/cjs/embedded/ffi/bindings.js +113 -0
  21. package/dist/cjs/embedded/ffi/library-finder.js +135 -0
  22. package/dist/cjs/embedded/index.js +14 -0
  23. package/dist/cjs/embedded/transaction.js +172 -0
  24. package/dist/cjs/errors.js +71 -0
  25. package/dist/cjs/format.js +176 -0
  26. package/dist/cjs/grpc-client.js +328 -0
  27. package/dist/cjs/index.js +75 -0
  28. package/dist/cjs/ipc-client.js +504 -0
  29. package/dist/cjs/query.js +154 -0
  30. package/dist/cjs/server-manager.js +295 -0
  31. package/dist/cjs/sql-engine.js +874 -0
  32. package/dist/esm/analytics.js +196 -0
  33. package/dist/esm/database.js +931 -0
  34. package/dist/esm/embedded/database.js +239 -0
  35. package/dist/esm/embedded/ffi/bindings.js +142 -0
  36. package/dist/esm/embedded/ffi/library-finder.js +135 -0
  37. package/dist/esm/embedded/index.js +14 -0
  38. package/dist/esm/embedded/transaction.js +176 -0
  39. package/dist/esm/errors.js +71 -0
  40. package/dist/esm/format.js +179 -0
  41. package/dist/esm/grpc-client.js +333 -0
  42. package/dist/esm/index.js +75 -0
  43. package/dist/esm/ipc-client.js +505 -0
  44. package/dist/esm/query.js +159 -0
  45. package/dist/esm/server-manager.js +295 -0
  46. package/dist/esm/sql-engine.js +875 -0
  47. package/dist/types/analytics.d.ts +66 -0
  48. package/dist/types/analytics.d.ts.map +1 -0
  49. package/dist/types/database.d.ts +523 -0
  50. package/dist/types/database.d.ts.map +1 -0
  51. package/dist/types/embedded/database.d.ts +105 -0
  52. package/dist/types/embedded/database.d.ts.map +1 -0
  53. package/dist/types/embedded/ffi/bindings.d.ts +24 -0
  54. package/dist/types/embedded/ffi/bindings.d.ts.map +1 -0
  55. package/dist/types/embedded/ffi/library-finder.d.ts +17 -0
  56. package/dist/types/embedded/ffi/library-finder.d.ts.map +1 -0
  57. package/dist/types/embedded/index.d.ts +9 -0
  58. package/dist/types/embedded/index.d.ts.map +1 -0
  59. package/dist/types/embedded/transaction.d.ts +21 -0
  60. package/dist/types/embedded/transaction.d.ts.map +1 -0
  61. package/dist/types/errors.d.ts +36 -0
  62. package/dist/types/errors.d.ts.map +1 -0
  63. package/dist/types/format.d.ts +117 -0
  64. package/dist/types/format.d.ts.map +1 -0
  65. package/dist/types/grpc-client.d.ts +120 -0
  66. package/dist/types/grpc-client.d.ts.map +1 -0
  67. package/dist/types/index.d.ts +50 -0
  68. package/dist/types/index.d.ts.map +1 -0
  69. package/dist/types/ipc-client.d.ts +177 -0
  70. package/dist/types/ipc-client.d.ts.map +1 -0
  71. package/dist/types/query.d.ts +85 -0
  72. package/dist/types/query.d.ts.map +1 -0
  73. package/dist/types/server-manager.d.ts +29 -0
  74. package/dist/types/server-manager.d.ts.map +1 -0
  75. package/dist/types/sql-engine.d.ts +100 -0
  76. package/dist/types/sql-engine.d.ts.map +1 -0
  77. package/package.json +90 -0
  78. package/scripts/postinstall.js +50 -0
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.EmbeddedTransaction = void 0;
37
+ const errors_1 = require("../errors");
38
+ const bindings_1 = require("./ffi/bindings");
39
+ const koffi = __importStar(require("koffi"));
40
+ class EmbeddedTransaction {
41
+ constructor(db, dbHandle, txnHandle) {
42
+ this.committed = false;
43
+ this.aborted = false;
44
+ this.db = db;
45
+ this.dbHandle = dbHandle;
46
+ this.txnHandle = txnHandle;
47
+ this.bindings = bindings_1.NativeBindings.getInstance();
48
+ }
49
+ async put(key, value) {
50
+ this.ensureActive();
51
+ const res = this.bindings.sochdb_put(this.dbHandle, this.txnHandle, key, key.length, value, value.length);
52
+ if (res !== 0) {
53
+ throw new errors_1.DatabaseError('Failed to put value');
54
+ }
55
+ }
56
+ async get(key) {
57
+ this.ensureActive();
58
+ const outPtr = [null];
59
+ const outLen = [0];
60
+ // returns 0 on success, 1 on not found, -1 on error
61
+ const res = this.bindings.sochdb_get(this.dbHandle, this.txnHandle, key, key.length, outPtr, outLen);
62
+ if (res === 1) { // Not found
63
+ return null;
64
+ }
65
+ if (res !== 0) {
66
+ throw new errors_1.DatabaseError('Failed to get value');
67
+ }
68
+ // Copy buffer
69
+ const ptr = outPtr[0];
70
+ const len = outLen[0];
71
+ const buffer = Buffer.from(koffi.decode(ptr, 'uint8', len));
72
+ // Free native memory
73
+ this.bindings.sochdb_free_bytes(ptr, len);
74
+ return buffer;
75
+ }
76
+ async delete(key) {
77
+ this.ensureActive();
78
+ const res = this.bindings.sochdb_delete(this.dbHandle, this.txnHandle, key, key.length);
79
+ if (res !== 0) {
80
+ throw new errors_1.DatabaseError('Failed to delete value');
81
+ }
82
+ }
83
+ async putPath(path, value) {
84
+ this.ensureActive();
85
+ const res = this.bindings.sochdb_put_path(this.dbHandle, this.txnHandle, path, value, value.length);
86
+ if (res !== 0) {
87
+ throw new errors_1.DatabaseError('Failed to put path');
88
+ }
89
+ }
90
+ async getPath(path) {
91
+ this.ensureActive();
92
+ const outPtr = [null];
93
+ const outLen = [0];
94
+ const res = this.bindings.sochdb_get_path(this.dbHandle, this.txnHandle, path, outPtr, outLen);
95
+ if (res === 1) {
96
+ return null;
97
+ }
98
+ if (res !== 0) {
99
+ throw new errors_1.DatabaseError('Failed to get path');
100
+ }
101
+ const ptr = outPtr[0];
102
+ const len = outLen[0];
103
+ const buffer = Buffer.from(koffi.decode(ptr, 'uint8', len));
104
+ this.bindings.sochdb_free_bytes(ptr, len);
105
+ return buffer;
106
+ }
107
+ async *scanPrefix(prefix) {
108
+ this.ensureActive();
109
+ const iter = this.bindings.sochdb_scan_prefix(this.dbHandle, this.txnHandle, prefix, prefix.length);
110
+ if (!iter)
111
+ return;
112
+ try {
113
+ const keyPtr = [null];
114
+ const keyLen = [0];
115
+ const valPtr = [null];
116
+ const valLen = [0];
117
+ while (true) {
118
+ // Returns 0 on success, 1 on done, -1 on error
119
+ const res = this.bindings.sochdb_iterator_next(iter, keyPtr, keyLen, valPtr, valLen);
120
+ if (res === 1)
121
+ break; // Done
122
+ if (res !== 0)
123
+ throw new errors_1.DatabaseError('Scan failed');
124
+ // Decode key
125
+ const k = Buffer.from(koffi.decode(keyPtr[0], 'uint8', keyLen[0]));
126
+ // koffi automatically handles pointers, but here we received a pointer value into keyPtr[0]
127
+ // Wait, keyPtr is passed as out(pointer(uint8*)).
128
+ // So keyPtr[0] IS the pointer.
129
+ // Rust scan_next allocates new boxed slices for key and value?
130
+ // Yes: `let mut key_buf = key.into_boxed_slice();`
131
+ // So we own it and must free it?
132
+ // `let _ = Box::into_raw(key_buf);` -> leaks.
133
+ // But `sochdb_scan_next` doesn't seem to export a free function for these individual items?
134
+ // Wait, `sochdb_scan_next` returns them. Does the caller free them?
135
+ // Usually yes. `NativeBindings` has `sochdb_free_bytes`.
136
+ this.bindings.sochdb_free_bytes(keyPtr[0], keyLen[0]);
137
+ // Decode value
138
+ const v = Buffer.from(koffi.decode(valPtr[0], 'uint8', valLen[0]));
139
+ this.bindings.sochdb_free_bytes(valPtr[0], valLen[0]);
140
+ yield [k, v];
141
+ }
142
+ }
143
+ finally {
144
+ this.bindings.sochdb_iterator_close(iter);
145
+ }
146
+ }
147
+ async commit() {
148
+ this.ensureActive();
149
+ const result = this.bindings.sochdb_commit(this.dbHandle, this.txnHandle);
150
+ this.committed = true;
151
+ if (result.error_code !== 0) {
152
+ // -1 indicates error, -2 indicates SSI conflict
153
+ throw new errors_1.TransactionError(`Transaction failed to commit (Code ${result.error_code})`);
154
+ }
155
+ }
156
+ async abort() {
157
+ if (!this.isActive())
158
+ return;
159
+ this.bindings.sochdb_abort(this.dbHandle, this.txnHandle);
160
+ this.aborted = true;
161
+ }
162
+ isActive() {
163
+ return !this.committed && !this.aborted;
164
+ }
165
+ ensureActive() {
166
+ if (!this.isActive()) {
167
+ throw new errors_1.TransactionError('Transaction is no longer active');
168
+ }
169
+ }
170
+ }
171
+ exports.EmbeddedTransaction = EmbeddedTransaction;
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZW1iZWRkZWQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQTREO0FBQzVELDZDQUFnRDtBQUVoRCw2Q0FBK0I7QUFFL0IsTUFBYSxtQkFBbUI7SUFRNUIsWUFBWSxFQUFvQixFQUFFLFFBQWEsRUFBRSxTQUFjO1FBSHZELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUdwQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcseUJBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksc0JBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkIsb0RBQW9EO1FBQ3BELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFckcsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxzQkFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELGNBQWM7UUFDZCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFNUQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTFDLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hGLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLHNCQUFhLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN0RCxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDckMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxzQkFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQVk7UUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvRixJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNaLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxzQkFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUxQyxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQWM7UUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRWxCLElBQUksQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkIsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDViwrQ0FBK0M7Z0JBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNyRixJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUFFLE1BQU0sQ0FBQyxPQUFPO2dCQUM3QixJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUFFLE1BQU0sSUFBSSxzQkFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUV0RCxhQUFhO2dCQUNiLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLDRGQUE0RjtnQkFDNUYsa0RBQWtEO2dCQUNsRCwrQkFBK0I7Z0JBRS9CLCtEQUErRDtnQkFDL0QsbURBQW1EO2dCQUNuRCxpQ0FBaUM7Z0JBQ2pDLDhDQUE4QztnQkFDOUMsNEZBQTRGO2dCQUM1RixvRUFBb0U7Z0JBQ3BFLHlEQUF5RDtnQkFFekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXRELGdCQUFnQjtnQkFDaEIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXRELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakIsQ0FBQztRQUNMLENBQUM7Z0JBQVMsQ0FBQztZQUNQLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTTtRQUNSLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0QixJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsZ0RBQWdEO1lBQ2hELE1BQU0sSUFBSSx5QkFBZ0IsQ0FBQyxzQ0FBc0MsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDM0YsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQUUsT0FBTztRQUU3QixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRU8sUUFBUTtRQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM1QyxDQUFDO0lBRU8sWUFBWTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLHlCQUFnQixDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQWxLRCxrREFrS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvbkVycm9yLCBEYXRhYmFzZUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7IE5hdGl2ZUJpbmRpbmdzIH0gZnJvbSAnLi9mZmkvYmluZGluZ3MnO1xuaW1wb3J0IHsgRW1iZWRkZWREYXRhYmFzZSB9IGZyb20gJy4vZGF0YWJhc2UnO1xuaW1wb3J0ICogYXMga29mZmkgZnJvbSAna29mZmknO1xuXG5leHBvcnQgY2xhc3MgRW1iZWRkZWRUcmFuc2FjdGlvbiB7XG4gICAgcHJpdmF0ZSBkYjogRW1iZWRkZWREYXRhYmFzZTtcbiAgICBwcml2YXRlIGRiSGFuZGxlOiBhbnk7XG4gICAgcHJpdmF0ZSB0eG5IYW5kbGU6IGFueTsgLy8gTm93IGEgU3RydWN0IG9iamVjdCAoQ19UeG5IYW5kbGUpXG4gICAgcHJpdmF0ZSBiaW5kaW5nczogTmF0aXZlQmluZGluZ3M7XG4gICAgcHJpdmF0ZSBjb21taXR0ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGFib3J0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKGRiOiBFbWJlZGRlZERhdGFiYXNlLCBkYkhhbmRsZTogYW55LCB0eG5IYW5kbGU6IGFueSkge1xuICAgICAgICB0aGlzLmRiID0gZGI7XG4gICAgICAgIHRoaXMuZGJIYW5kbGUgPSBkYkhhbmRsZTtcbiAgICAgICAgdGhpcy50eG5IYW5kbGUgPSB0eG5IYW5kbGU7XG4gICAgICAgIHRoaXMuYmluZGluZ3MgPSBOYXRpdmVCaW5kaW5ncy5nZXRJbnN0YW5jZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIHB1dChrZXk6IEJ1ZmZlciwgdmFsdWU6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmVuc3VyZUFjdGl2ZSgpO1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmJpbmRpbmdzLnNvY2hkYl9wdXQodGhpcy5kYkhhbmRsZSwgdGhpcy50eG5IYW5kbGUsIGtleSwga2V5Lmxlbmd0aCwgdmFsdWUsIHZhbHVlLmxlbmd0aCk7XG4gICAgICAgIGlmIChyZXMgIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhYmFzZUVycm9yKCdGYWlsZWQgdG8gcHV0IHZhbHVlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXQoa2V5OiBCdWZmZXIpOiBQcm9taXNlPEJ1ZmZlciB8IG51bGw+IHtcbiAgICAgICAgdGhpcy5lbnN1cmVBY3RpdmUoKTtcblxuICAgICAgICBjb25zdCBvdXRQdHIgPSBbbnVsbF07XG4gICAgICAgIGNvbnN0IG91dExlbiA9IFswXTtcblxuICAgICAgICAvLyByZXR1cm5zIDAgb24gc3VjY2VzcywgMSBvbiBub3QgZm91bmQsIC0xIG9uIGVycm9yXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuYmluZGluZ3Muc29jaGRiX2dldCh0aGlzLmRiSGFuZGxlLCB0aGlzLnR4bkhhbmRsZSwga2V5LCBrZXkubGVuZ3RoLCBvdXRQdHIsIG91dExlbik7XG5cbiAgICAgICAgaWYgKHJlcyA9PT0gMSkgeyAvLyBOb3QgZm91bmRcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMgIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhYmFzZUVycm9yKCdGYWlsZWQgdG8gZ2V0IHZhbHVlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb3B5IGJ1ZmZlclxuICAgICAgICBjb25zdCBwdHIgPSBvdXRQdHJbMF07XG4gICAgICAgIGNvbnN0IGxlbiA9IG91dExlblswXTtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oa29mZmkuZGVjb2RlKHB0ciwgJ3VpbnQ4JywgbGVuKSk7XG5cbiAgICAgICAgLy8gRnJlZSBuYXRpdmUgbWVtb3J5XG4gICAgICAgIHRoaXMuYmluZGluZ3Muc29jaGRiX2ZyZWVfYnl0ZXMocHRyLCBsZW4pO1xuXG4gICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlKGtleTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZW5zdXJlQWN0aXZlKCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuYmluZGluZ3Muc29jaGRiX2RlbGV0ZSh0aGlzLmRiSGFuZGxlLCB0aGlzLnR4bkhhbmRsZSwga2V5LCBrZXkubGVuZ3RoKTtcbiAgICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IERhdGFiYXNlRXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgdmFsdWUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHB1dFBhdGgocGF0aDogc3RyaW5nLCB2YWx1ZTogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZW5zdXJlQWN0aXZlKCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuYmluZGluZ3Muc29jaGRiX3B1dF9wYXRoKHRoaXMuZGJIYW5kbGUsIHRoaXMudHhuSGFuZGxlLCBwYXRoLCB2YWx1ZSwgdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgaWYgKHJlcyAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IERhdGFiYXNlRXJyb3IoJ0ZhaWxlZCB0byBwdXQgcGF0aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlciB8IG51bGw+IHtcbiAgICAgICAgdGhpcy5lbnN1cmVBY3RpdmUoKTtcblxuICAgICAgICBjb25zdCBvdXRQdHIgPSBbbnVsbF07XG4gICAgICAgIGNvbnN0IG91dExlbiA9IFswXTtcblxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmJpbmRpbmdzLnNvY2hkYl9nZXRfcGF0aCh0aGlzLmRiSGFuZGxlLCB0aGlzLnR4bkhhbmRsZSwgcGF0aCwgb3V0UHRyLCBvdXRMZW4pO1xuXG4gICAgICAgIGlmIChyZXMgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMgIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBEYXRhYmFzZUVycm9yKCdGYWlsZWQgdG8gZ2V0IHBhdGgnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHB0ciA9IG91dFB0clswXTtcbiAgICAgICAgY29uc3QgbGVuID0gb3V0TGVuWzBdO1xuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShrb2ZmaS5kZWNvZGUocHRyLCAndWludDgnLCBsZW4pKTtcbiAgICAgICAgdGhpcy5iaW5kaW5ncy5zb2NoZGJfZnJlZV9ieXRlcyhwdHIsIGxlbik7XG5cbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG5cbiAgICBhc3luYyAqc2NhblByZWZpeChwcmVmaXg6IEJ1ZmZlcik6IEFzeW5jR2VuZXJhdG9yPFtCdWZmZXIsIEJ1ZmZlcl0+IHtcbiAgICAgICAgdGhpcy5lbnN1cmVBY3RpdmUoKTtcblxuICAgICAgICBjb25zdCBpdGVyID0gdGhpcy5iaW5kaW5ncy5zb2NoZGJfc2Nhbl9wcmVmaXgodGhpcy5kYkhhbmRsZSwgdGhpcy50eG5IYW5kbGUsIHByZWZpeCwgcHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIGlmICghaXRlcikgcmV0dXJuO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBrZXlQdHIgPSBbbnVsbF07XG4gICAgICAgICAgICBjb25zdCBrZXlMZW4gPSBbMF07XG4gICAgICAgICAgICBjb25zdCB2YWxQdHIgPSBbbnVsbF07XG4gICAgICAgICAgICBjb25zdCB2YWxMZW4gPSBbMF07XG5cbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgb24gZG9uZSwgLTEgb24gZXJyb3JcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmJpbmRpbmdzLnNvY2hkYl9pdGVyYXRvcl9uZXh0KGl0ZXIsIGtleVB0ciwga2V5TGVuLCB2YWxQdHIsIHZhbExlbik7XG4gICAgICAgICAgICAgICAgaWYgKHJlcyA9PT0gMSkgYnJlYWs7IC8vIERvbmVcbiAgICAgICAgICAgICAgICBpZiAocmVzICE9PSAwKSB0aHJvdyBuZXcgRGF0YWJhc2VFcnJvcignU2NhbiBmYWlsZWQnKTtcblxuICAgICAgICAgICAgICAgIC8vIERlY29kZSBrZXlcbiAgICAgICAgICAgICAgICBjb25zdCBrID0gQnVmZmVyLmZyb20oa29mZmkuZGVjb2RlKGtleVB0clswXSwgJ3VpbnQ4Jywga2V5TGVuWzBdKSk7XG4gICAgICAgICAgICAgICAgLy8ga29mZmkgYXV0b21hdGljYWxseSBoYW5kbGVzIHBvaW50ZXJzLCBidXQgaGVyZSB3ZSByZWNlaXZlZCBhIHBvaW50ZXIgdmFsdWUgaW50byBrZXlQdHJbMF1cbiAgICAgICAgICAgICAgICAvLyBXYWl0LCBrZXlQdHIgaXMgcGFzc2VkIGFzIG91dChwb2ludGVyKHVpbnQ4KikpLlxuICAgICAgICAgICAgICAgIC8vIFNvIGtleVB0clswXSBJUyB0aGUgcG9pbnRlci5cblxuICAgICAgICAgICAgICAgIC8vIFJ1c3Qgc2Nhbl9uZXh0IGFsbG9jYXRlcyBuZXcgYm94ZWQgc2xpY2VzIGZvciBrZXkgYW5kIHZhbHVlP1xuICAgICAgICAgICAgICAgIC8vIFllczogYGxldCBtdXQga2V5X2J1ZiA9IGtleS5pbnRvX2JveGVkX3NsaWNlKCk7YFxuICAgICAgICAgICAgICAgIC8vIFNvIHdlIG93biBpdCBhbmQgbXVzdCBmcmVlIGl0P1xuICAgICAgICAgICAgICAgIC8vIGBsZXQgXyA9IEJveDo6aW50b19yYXcoa2V5X2J1Zik7YCAtPiBsZWFrcy5cbiAgICAgICAgICAgICAgICAvLyBCdXQgYHNvY2hkYl9zY2FuX25leHRgIGRvZXNuJ3Qgc2VlbSB0byBleHBvcnQgYSBmcmVlIGZ1bmN0aW9uIGZvciB0aGVzZSBpbmRpdmlkdWFsIGl0ZW1zP1xuICAgICAgICAgICAgICAgIC8vIFdhaXQsIGBzb2NoZGJfc2Nhbl9uZXh0YCByZXR1cm5zIHRoZW0uIERvZXMgdGhlIGNhbGxlciBmcmVlIHRoZW0/XG4gICAgICAgICAgICAgICAgLy8gVXN1YWxseSB5ZXMuIGBOYXRpdmVCaW5kaW5nc2AgaGFzIGBzb2NoZGJfZnJlZV9ieXRlc2AuXG5cbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRpbmdzLnNvY2hkYl9mcmVlX2J5dGVzKGtleVB0clswXSwga2V5TGVuWzBdKTtcblxuICAgICAgICAgICAgICAgIC8vIERlY29kZSB2YWx1ZSBcbiAgICAgICAgICAgICAgICBjb25zdCB2ID0gQnVmZmVyLmZyb20oa29mZmkuZGVjb2RlKHZhbFB0clswXSwgJ3VpbnQ4JywgdmFsTGVuWzBdKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kaW5ncy5zb2NoZGJfZnJlZV9ieXRlcyh2YWxQdHJbMF0sIHZhbExlblswXSk7XG5cbiAgICAgICAgICAgICAgICB5aWVsZCBbaywgdl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzLnNvY2hkYl9pdGVyYXRvcl9jbG9zZShpdGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNvbW1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5lbnN1cmVBY3RpdmUoKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmJpbmRpbmdzLnNvY2hkYl9jb21taXQodGhpcy5kYkhhbmRsZSwgdGhpcy50eG5IYW5kbGUpO1xuICAgICAgICB0aGlzLmNvbW1pdHRlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5lcnJvcl9jb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAvLyAtMSBpbmRpY2F0ZXMgZXJyb3IsIC0yIGluZGljYXRlcyBTU0kgY29uZmxpY3RcbiAgICAgICAgICAgIHRocm93IG5ldyBUcmFuc2FjdGlvbkVycm9yKGBUcmFuc2FjdGlvbiBmYWlsZWQgdG8gY29tbWl0IChDb2RlICR7cmVzdWx0LmVycm9yX2NvZGV9KWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgYWJvcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5iaW5kaW5ncy5zb2NoZGJfYWJvcnQodGhpcy5kYkhhbmRsZSwgdGhpcy50eG5IYW5kbGUpO1xuICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb21taXR0ZWQgJiYgIXRoaXMuYWJvcnRlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuc3VyZUFjdGl2ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBpcyBubyBsb25nZXIgYWN0aXZlJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ /**
3
+ * SochDB Error Classes
4
+ *
5
+ * @packageDocumentation
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.DatabaseError = exports.ProtocolError = exports.TransactionError = exports.ConnectionError = exports.SochDBError = void 0;
9
+ // Copyright 2025 Sushanth (https://github.com/sushanthpy)
10
+ //
11
+ // Licensed under the Apache License, Version 2.0 (the "License");
12
+ // you may not use this file except in compliance with the License.
13
+ // You may obtain a copy of the License at
14
+ //
15
+ // http://www.apache.org/licenses/LICENSE-2.0
16
+ /**
17
+ * Base error class for all SochDB errors.
18
+ */
19
+ class SochDBError extends Error {
20
+ constructor(message) {
21
+ super(message);
22
+ this.name = 'SochDBError';
23
+ Object.setPrototypeOf(this, SochDBError.prototype);
24
+ }
25
+ }
26
+ exports.SochDBError = SochDBError;
27
+ /**
28
+ * Error thrown when connection to the database fails.
29
+ */
30
+ class ConnectionError extends SochDBError {
31
+ constructor(message) {
32
+ super(message);
33
+ this.name = 'ConnectionError';
34
+ Object.setPrototypeOf(this, ConnectionError.prototype);
35
+ }
36
+ }
37
+ exports.ConnectionError = ConnectionError;
38
+ /**
39
+ * Error thrown when a transaction operation fails.
40
+ */
41
+ class TransactionError extends SochDBError {
42
+ constructor(message) {
43
+ super(message);
44
+ this.name = 'TransactionError';
45
+ Object.setPrototypeOf(this, TransactionError.prototype);
46
+ }
47
+ }
48
+ exports.TransactionError = TransactionError;
49
+ /**
50
+ * Error thrown when there's a protocol error in IPC communication.
51
+ */
52
+ class ProtocolError extends SochDBError {
53
+ constructor(message) {
54
+ super(message);
55
+ this.name = 'ProtocolError';
56
+ Object.setPrototypeOf(this, ProtocolError.prototype);
57
+ }
58
+ }
59
+ exports.ProtocolError = ProtocolError;
60
+ /**
61
+ * Error thrown when a database operation fails.
62
+ */
63
+ class DatabaseError extends SochDBError {
64
+ constructor(message) {
65
+ super(message);
66
+ this.name = 'DatabaseError';
67
+ Object.setPrototypeOf(this, DatabaseError.prototype);
68
+ }
69
+ }
70
+ exports.DatabaseError = DatabaseError;
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBRUgsMERBQTBEO0FBQzFELEVBQUU7QUFDRixrRUFBa0U7QUFDbEUsbUVBQW1FO0FBQ25FLDBDQUEwQztBQUMxQyxFQUFFO0FBQ0YsaURBQWlEO0FBRWpEOztHQUVHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsS0FBSztJQUNwQyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7UUFDMUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDRjtBQU5ELGtDQU1DO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsV0FBVztJQUM5QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztRQUM5QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUNGO0FBTkQsMENBTUM7QUFFRDs7R0FFRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsV0FBVztJQUMvQyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztRQUMvQixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0Y7QUFORCw0Q0FNQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsV0FBVztJQUM1QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7UUFDNUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRjtBQU5ELHNDQU1DO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxXQUFXO0lBQzVDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztRQUM1QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNGO0FBTkQsc0NBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNvY2hEQiBFcnJvciBDbGFzc2VzXG4gKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKi9cblxuLy8gQ29weXJpZ2h0IDIwMjUgU3VzaGFudGggKGh0dHBzOi8vZ2l0aHViLmNvbS9zdXNoYW50aHB5KVxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbi8qKlxuICogQmFzZSBlcnJvciBjbGFzcyBmb3IgYWxsIFNvY2hEQiBlcnJvcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTb2NoREJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1NvY2hEQkVycm9yJztcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgU29jaERCRXJyb3IucHJvdG90eXBlKTtcbiAgfVxufVxuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIGNvbm5lY3Rpb24gdG8gdGhlIGRhdGFiYXNlIGZhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbkVycm9yIGV4dGVuZHMgU29jaERCRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29ubmVjdGlvbkVycm9yJztcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgQ29ubmVjdGlvbkVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBhIHRyYW5zYWN0aW9uIG9wZXJhdGlvbiBmYWlscy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uRXJyb3IgZXh0ZW5kcyBTb2NoREJFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdUcmFuc2FjdGlvbkVycm9yJztcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVHJhbnNhY3Rpb25FcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG5cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gdGhlcmUncyBhIHByb3RvY29sIGVycm9yIGluIElQQyBjb21tdW5pY2F0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUHJvdG9jb2xFcnJvciBleHRlbmRzIFNvY2hEQkVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1Byb3RvY29sRXJyb3InO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBQcm90b2NvbEVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBhIGRhdGFiYXNlIG9wZXJhdGlvbiBmYWlscy5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFiYXNlRXJyb3IgZXh0ZW5kcyBTb2NoREJFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdEYXRhYmFzZUVycm9yJztcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgRGF0YWJhc2VFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright 2025 Sushanth (https://github.com/sushanthpy)
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.FormatCapabilities = exports.CanonicalFormat = exports.ContextFormat = exports.WireFormat = exports.FormatConversionError = void 0;
19
+ /**
20
+ * Unified Output Format Semantics
21
+ *
22
+ * Provides format enums for query results and LLM context packaging.
23
+ * This mirrors the Rust sochdb-client format module for consistency.
24
+ */
25
+ /**
26
+ * Error when format conversion fails.
27
+ */
28
+ class FormatConversionError extends Error {
29
+ constructor(fromFormat, toFormat, reason) {
30
+ super(`Cannot convert ${fromFormat} to ${toFormat}: ${reason}`);
31
+ this.fromFormat = fromFormat;
32
+ this.toFormat = toFormat;
33
+ this.reason = reason;
34
+ this.name = 'FormatConversionError';
35
+ }
36
+ }
37
+ exports.FormatConversionError = FormatConversionError;
38
+ /**
39
+ * Output format for query results sent to clients.
40
+ *
41
+ * These formats are optimized for transmission efficiency and
42
+ * client-side processing.
43
+ */
44
+ var WireFormat;
45
+ (function (WireFormat) {
46
+ /**
47
+ * TOON format (default, 40-66% fewer tokens than JSON).
48
+ * Optimized for LLM consumption.
49
+ */
50
+ WireFormat["TOON"] = "toon";
51
+ /**
52
+ * Standard JSON for compatibility.
53
+ */
54
+ WireFormat["JSON"] = "json";
55
+ /**
56
+ * Raw columnar format for analytics.
57
+ * More efficient for large result sets with projection pushdown.
58
+ */
59
+ WireFormat["COLUMNAR"] = "columnar";
60
+ })(WireFormat || (exports.WireFormat = WireFormat = {}));
61
+ (function (WireFormat) {
62
+ /**
63
+ * Parse format from string.
64
+ */
65
+ function fromString(s) {
66
+ const lower = s.toLowerCase();
67
+ switch (lower) {
68
+ case 'toon':
69
+ return WireFormat.TOON;
70
+ case 'json':
71
+ return WireFormat.JSON;
72
+ case 'columnar':
73
+ case 'column':
74
+ return WireFormat.COLUMNAR;
75
+ default:
76
+ throw new FormatConversionError(s, 'WireFormat', `Unknown format '${s}'. Valid: toon, json, columnar`);
77
+ }
78
+ }
79
+ WireFormat.fromString = fromString;
80
+ })(WireFormat || (exports.WireFormat = WireFormat = {}));
81
+ /**
82
+ * Output format for LLM context packaging.
83
+ *
84
+ * These formats are optimized for readability and token efficiency
85
+ * when constructing prompts for language models.
86
+ */
87
+ var ContextFormat;
88
+ (function (ContextFormat) {
89
+ /**
90
+ * TOON format (default, token-efficient).
91
+ * Structured data with minimal syntax overhead.
92
+ */
93
+ ContextFormat["TOON"] = "toon";
94
+ /**
95
+ * JSON format.
96
+ * Widely understood by LLMs, good for structured data.
97
+ */
98
+ ContextFormat["JSON"] = "json";
99
+ /**
100
+ * Markdown format.
101
+ * Best for human-readable context with formatting.
102
+ */
103
+ ContextFormat["MARKDOWN"] = "markdown";
104
+ })(ContextFormat || (exports.ContextFormat = ContextFormat = {}));
105
+ (function (ContextFormat) {
106
+ /**
107
+ * Parse format from string.
108
+ */
109
+ function fromString(s) {
110
+ const lower = s.toLowerCase();
111
+ switch (lower) {
112
+ case 'toon':
113
+ return ContextFormat.TOON;
114
+ case 'json':
115
+ return ContextFormat.JSON;
116
+ case 'markdown':
117
+ case 'md':
118
+ return ContextFormat.MARKDOWN;
119
+ default:
120
+ throw new FormatConversionError(s, 'ContextFormat', `Unknown format '${s}'. Valid: toon, json, markdown`);
121
+ }
122
+ }
123
+ ContextFormat.fromString = fromString;
124
+ })(ContextFormat || (exports.ContextFormat = ContextFormat = {}));
125
+ /**
126
+ * Canonical storage format (server-side only).
127
+ *
128
+ * This is the format used for internal storage and is optimized
129
+ * for storage efficiency and query performance.
130
+ */
131
+ var CanonicalFormat;
132
+ (function (CanonicalFormat) {
133
+ /**
134
+ * TOON canonical format.
135
+ */
136
+ CanonicalFormat["TOON"] = "toon";
137
+ })(CanonicalFormat || (exports.CanonicalFormat = CanonicalFormat = {}));
138
+ /**
139
+ * Helper to check format capabilities and conversions.
140
+ */
141
+ class FormatCapabilities {
142
+ /**
143
+ * Convert WireFormat to ContextFormat if compatible.
144
+ */
145
+ static wireToContext(wire) {
146
+ switch (wire) {
147
+ case WireFormat.TOON:
148
+ return ContextFormat.TOON;
149
+ case WireFormat.JSON:
150
+ return ContextFormat.JSON;
151
+ default:
152
+ return null;
153
+ }
154
+ }
155
+ /**
156
+ * Convert ContextFormat to WireFormat if compatible.
157
+ */
158
+ static contextToWire(ctx) {
159
+ switch (ctx) {
160
+ case ContextFormat.TOON:
161
+ return WireFormat.TOON;
162
+ case ContextFormat.JSON:
163
+ return WireFormat.JSON;
164
+ default:
165
+ return null;
166
+ }
167
+ }
168
+ /**
169
+ * Check if format supports round-trip: decode(encode(x)) = x.
170
+ */
171
+ static supportsRoundTrip(fmt) {
172
+ return fmt === WireFormat.TOON || fmt === WireFormat.JSON;
173
+ }
174
+ }
175
+ exports.FormatCapabilities = FormatCapabilities;
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zvcm1hdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7OztBQUVIOzs7OztHQUtHO0FBRUg7O0dBRUc7QUFDSCxNQUFhLHFCQUFzQixTQUFRLEtBQUs7SUFDOUMsWUFDUyxVQUFrQixFQUNsQixRQUFnQixFQUNoQixNQUFjO1FBRXJCLEtBQUssQ0FBQyxrQkFBa0IsVUFBVSxPQUFPLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBSnpELGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBR3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBVEQsc0RBU0M7QUFFRDs7Ozs7R0FLRztBQUNILElBQVksVUFpQlg7QUFqQkQsV0FBWSxVQUFVO0lBQ3BCOzs7T0FHRztJQUNILDJCQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILDJCQUFhLENBQUE7SUFFYjs7O09BR0c7SUFDSCxtQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBakJXLFVBQVUsMEJBQVYsVUFBVSxRQWlCckI7QUFFRCxXQUFpQixVQUFVO0lBQ3pCOztPQUVHO0lBQ0gsU0FBZ0IsVUFBVSxDQUFDLENBQVM7UUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlCLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3pCLEtBQUssTUFBTTtnQkFDVCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDekIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM3QjtnQkFDRSxNQUFNLElBQUkscUJBQXFCLENBQzdCLENBQUMsRUFDRCxZQUFZLEVBQ1osbUJBQW1CLENBQUMsZ0NBQWdDLENBQ3JELENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQWpCZSxxQkFBVSxhQWlCekIsQ0FBQTtBQUNILENBQUMsRUF0QmdCLFVBQVUsMEJBQVYsVUFBVSxRQXNCMUI7QUFFRDs7Ozs7R0FLRztBQUNILElBQVksYUFrQlg7QUFsQkQsV0FBWSxhQUFhO0lBQ3ZCOzs7T0FHRztJQUNILDhCQUFhLENBQUE7SUFFYjs7O09BR0c7SUFDSCw4QkFBYSxDQUFBO0lBRWI7OztPQUdHO0lBQ0gsc0NBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQWxCVyxhQUFhLDZCQUFiLGFBQWEsUUFrQnhCO0FBRUQsV0FBaUIsYUFBYTtJQUM1Qjs7T0FFRztJQUNILFNBQWdCLFVBQVUsQ0FBQyxDQUFTO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixRQUFRLEtBQUssRUFBRSxDQUFDO1lBQ2QsS0FBSyxNQUFNO2dCQUNULE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztZQUM1QixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQzVCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssSUFBSTtnQkFDUCxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDaEM7Z0JBQ0UsTUFBTSxJQUFJLHFCQUFxQixDQUM3QixDQUFDLEVBQ0QsZUFBZSxFQUNmLG1CQUFtQixDQUFDLGdDQUFnQyxDQUNyRCxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUM7SUFqQmUsd0JBQVUsYUFpQnpCLENBQUE7QUFDSCxDQUFDLEVBdEJnQixhQUFhLDZCQUFiLGFBQWEsUUFzQjdCO0FBRUQ7Ozs7O0dBS0c7QUFDSCxJQUFZLGVBS1g7QUFMRCxXQUFZLGVBQWU7SUFDekI7O09BRUc7SUFDSCxnQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxXLGVBQWUsK0JBQWYsZUFBZSxRQUsxQjtBQUVEOztHQUVHO0FBQ0gsTUFBYSxrQkFBa0I7SUFDN0I7O09BRUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQWdCO1FBQ25DLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLFVBQVUsQ0FBQyxJQUFJO2dCQUNsQixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDNUIsS0FBSyxVQUFVLENBQUMsSUFBSTtnQkFDbEIsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQzVCO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQWtCO1FBQ3JDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDWixLQUFLLGFBQWEsQ0FBQyxJQUFJO2dCQUNyQixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDekIsS0FBSyxhQUFhLENBQUMsSUFBSTtnQkFDckIsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3pCO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBZTtRQUN0QyxPQUFPLEdBQUcsS0FBSyxVQUFVLENBQUMsSUFBSSxJQUFJLEdBQUcsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQzVELENBQUM7Q0FDRjtBQW5DRCxnREFtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAyMDI1IFN1c2hhbnRoIChodHRwczovL2dpdGh1Yi5jb20vc3VzaGFudGhweSlcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyoqXG4gKiBVbmlmaWVkIE91dHB1dCBGb3JtYXQgU2VtYW50aWNzXG4gKiBcbiAqIFByb3ZpZGVzIGZvcm1hdCBlbnVtcyBmb3IgcXVlcnkgcmVzdWx0cyBhbmQgTExNIGNvbnRleHQgcGFja2FnaW5nLlxuICogVGhpcyBtaXJyb3JzIHRoZSBSdXN0IHNvY2hkYi1jbGllbnQgZm9ybWF0IG1vZHVsZSBmb3IgY29uc2lzdGVuY3kuXG4gKi9cblxuLyoqXG4gKiBFcnJvciB3aGVuIGZvcm1hdCBjb252ZXJzaW9uIGZhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgRm9ybWF0Q29udmVyc2lvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZnJvbUZvcm1hdDogc3RyaW5nLFxuICAgIHB1YmxpYyB0b0Zvcm1hdDogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFzb246IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihgQ2Fubm90IGNvbnZlcnQgJHtmcm9tRm9ybWF0fSB0byAke3RvRm9ybWF0fTogJHtyZWFzb259YCk7XG4gICAgdGhpcy5uYW1lID0gJ0Zvcm1hdENvbnZlcnNpb25FcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBPdXRwdXQgZm9ybWF0IGZvciBxdWVyeSByZXN1bHRzIHNlbnQgdG8gY2xpZW50cy5cbiAqIFxuICogVGhlc2UgZm9ybWF0cyBhcmUgb3B0aW1pemVkIGZvciB0cmFuc21pc3Npb24gZWZmaWNpZW5jeSBhbmRcbiAqIGNsaWVudC1zaWRlIHByb2Nlc3NpbmcuXG4gKi9cbmV4cG9ydCBlbnVtIFdpcmVGb3JtYXQge1xuICAvKipcbiAgICogVE9PTiBmb3JtYXQgKGRlZmF1bHQsIDQwLTY2JSBmZXdlciB0b2tlbnMgdGhhbiBKU09OKS5cbiAgICogT3B0aW1pemVkIGZvciBMTE0gY29uc3VtcHRpb24uXG4gICAqL1xuICBUT09OID0gJ3Rvb24nLFxuXG4gIC8qKlxuICAgKiBTdGFuZGFyZCBKU09OIGZvciBjb21wYXRpYmlsaXR5LlxuICAgKi9cbiAgSlNPTiA9ICdqc29uJyxcblxuICAvKipcbiAgICogUmF3IGNvbHVtbmFyIGZvcm1hdCBmb3IgYW5hbHl0aWNzLlxuICAgKiBNb3JlIGVmZmljaWVudCBmb3IgbGFyZ2UgcmVzdWx0IHNldHMgd2l0aCBwcm9qZWN0aW9uIHB1c2hkb3duLlxuICAgKi9cbiAgQ09MVU1OQVIgPSAnY29sdW1uYXInLFxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFdpcmVGb3JtYXQge1xuICAvKipcbiAgICogUGFyc2UgZm9ybWF0IGZyb20gc3RyaW5nLlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGZyb21TdHJpbmcoczogc3RyaW5nKTogV2lyZUZvcm1hdCB7XG4gICAgY29uc3QgbG93ZXIgPSBzLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoIChsb3dlcikge1xuICAgICAgY2FzZSAndG9vbic6XG4gICAgICAgIHJldHVybiBXaXJlRm9ybWF0LlRPT047XG4gICAgICBjYXNlICdqc29uJzpcbiAgICAgICAgcmV0dXJuIFdpcmVGb3JtYXQuSlNPTjtcbiAgICAgIGNhc2UgJ2NvbHVtbmFyJzpcbiAgICAgIGNhc2UgJ2NvbHVtbic6XG4gICAgICAgIHJldHVybiBXaXJlRm9ybWF0LkNPTFVNTkFSO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdENvbnZlcnNpb25FcnJvcihcbiAgICAgICAgICBzLFxuICAgICAgICAgICdXaXJlRm9ybWF0JyxcbiAgICAgICAgICBgVW5rbm93biBmb3JtYXQgJyR7c30nLiBWYWxpZDogdG9vbiwganNvbiwgY29sdW1uYXJgXG4gICAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogT3V0cHV0IGZvcm1hdCBmb3IgTExNIGNvbnRleHQgcGFja2FnaW5nLlxuICogXG4gKiBUaGVzZSBmb3JtYXRzIGFyZSBvcHRpbWl6ZWQgZm9yIHJlYWRhYmlsaXR5IGFuZCB0b2tlbiBlZmZpY2llbmN5XG4gKiB3aGVuIGNvbnN0cnVjdGluZyBwcm9tcHRzIGZvciBsYW5ndWFnZSBtb2RlbHMuXG4gKi9cbmV4cG9ydCBlbnVtIENvbnRleHRGb3JtYXQge1xuICAvKipcbiAgICogVE9PTiBmb3JtYXQgKGRlZmF1bHQsIHRva2VuLWVmZmljaWVudCkuXG4gICAqIFN0cnVjdHVyZWQgZGF0YSB3aXRoIG1pbmltYWwgc3ludGF4IG92ZXJoZWFkLlxuICAgKi9cbiAgVE9PTiA9ICd0b29uJyxcblxuICAvKipcbiAgICogSlNPTiBmb3JtYXQuXG4gICAqIFdpZGVseSB1bmRlcnN0b29kIGJ5IExMTXMsIGdvb2QgZm9yIHN0cnVjdHVyZWQgZGF0YS5cbiAgICovXG4gIEpTT04gPSAnanNvbicsXG5cbiAgLyoqXG4gICAqIE1hcmtkb3duIGZvcm1hdC5cbiAgICogQmVzdCBmb3IgaHVtYW4tcmVhZGFibGUgY29udGV4dCB3aXRoIGZvcm1hdHRpbmcuXG4gICAqL1xuICBNQVJLRE9XTiA9ICdtYXJrZG93bicsXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGV4dEZvcm1hdCB7XG4gIC8qKlxuICAgKiBQYXJzZSBmb3JtYXQgZnJvbSBzdHJpbmcuXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZnJvbVN0cmluZyhzOiBzdHJpbmcpOiBDb250ZXh0Rm9ybWF0IHtcbiAgICBjb25zdCBsb3dlciA9IHMudG9Mb3dlckNhc2UoKTtcbiAgICBzd2l0Y2ggKGxvd2VyKSB7XG4gICAgICBjYXNlICd0b29uJzpcbiAgICAgICAgcmV0dXJuIENvbnRleHRGb3JtYXQuVE9PTjtcbiAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICByZXR1cm4gQ29udGV4dEZvcm1hdC5KU09OO1xuICAgICAgY2FzZSAnbWFya2Rvd24nOlxuICAgICAgY2FzZSAnbWQnOlxuICAgICAgICByZXR1cm4gQ29udGV4dEZvcm1hdC5NQVJLRE9XTjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBGb3JtYXRDb252ZXJzaW9uRXJyb3IoXG4gICAgICAgICAgcyxcbiAgICAgICAgICAnQ29udGV4dEZvcm1hdCcsXG4gICAgICAgICAgYFVua25vd24gZm9ybWF0ICcke3N9Jy4gVmFsaWQ6IHRvb24sIGpzb24sIG1hcmtkb3duYFxuICAgICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENhbm9uaWNhbCBzdG9yYWdlIGZvcm1hdCAoc2VydmVyLXNpZGUgb25seSkuXG4gKiBcbiAqIFRoaXMgaXMgdGhlIGZvcm1hdCB1c2VkIGZvciBpbnRlcm5hbCBzdG9yYWdlIGFuZCBpcyBvcHRpbWl6ZWRcbiAqIGZvciBzdG9yYWdlIGVmZmljaWVuY3kgYW5kIHF1ZXJ5IHBlcmZvcm1hbmNlLlxuICovXG5leHBvcnQgZW51bSBDYW5vbmljYWxGb3JtYXQge1xuICAvKipcbiAgICogVE9PTiBjYW5vbmljYWwgZm9ybWF0LlxuICAgKi9cbiAgVE9PTiA9ICd0b29uJyxcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gY2hlY2sgZm9ybWF0IGNhcGFiaWxpdGllcyBhbmQgY29udmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBGb3JtYXRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogQ29udmVydCBXaXJlRm9ybWF0IHRvIENvbnRleHRGb3JtYXQgaWYgY29tcGF0aWJsZS5cbiAgICovXG4gIHN0YXRpYyB3aXJlVG9Db250ZXh0KHdpcmU6IFdpcmVGb3JtYXQpOiBDb250ZXh0Rm9ybWF0IHwgbnVsbCB7XG4gICAgc3dpdGNoICh3aXJlKSB7XG4gICAgICBjYXNlIFdpcmVGb3JtYXQuVE9PTjpcbiAgICAgICAgcmV0dXJuIENvbnRleHRGb3JtYXQuVE9PTjtcbiAgICAgIGNhc2UgV2lyZUZvcm1hdC5KU09OOlxuICAgICAgICByZXR1cm4gQ29udGV4dEZvcm1hdC5KU09OO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgQ29udGV4dEZvcm1hdCB0byBXaXJlRm9ybWF0IGlmIGNvbXBhdGlibGUuXG4gICAqL1xuICBzdGF0aWMgY29udGV4dFRvV2lyZShjdHg6IENvbnRleHRGb3JtYXQpOiBXaXJlRm9ybWF0IHwgbnVsbCB7XG4gICAgc3dpdGNoIChjdHgpIHtcbiAgICAgIGNhc2UgQ29udGV4dEZvcm1hdC5UT09OOlxuICAgICAgICByZXR1cm4gV2lyZUZvcm1hdC5UT09OO1xuICAgICAgY2FzZSBDb250ZXh0Rm9ybWF0LkpTT046XG4gICAgICAgIHJldHVybiBXaXJlRm9ybWF0LkpTT047XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZm9ybWF0IHN1cHBvcnRzIHJvdW5kLXRyaXA6IGRlY29kZShlbmNvZGUoeCkpID0geC5cbiAgICovXG4gIHN0YXRpYyBzdXBwb3J0c1JvdW5kVHJpcChmbXQ6IFdpcmVGb3JtYXQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZm10ID09PSBXaXJlRm9ybWF0LlRPT04gfHwgZm10ID09PSBXaXJlRm9ybWF0LkpTT047XG4gIH1cbn1cbiJdfQ==