couchset 0.2.7 → 0.3.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 (108) hide show
  1. package/README.md +284 -153
  2. package/dist/connection/connection.d.ts +68 -0
  3. package/dist/connection/connection.js +485 -0
  4. package/dist/connection/connection.js.map +1 -0
  5. package/dist/connection/env.d.ts +2 -0
  6. package/dist/connection/env.js +16 -0
  7. package/dist/connection/env.js.map +1 -0
  8. package/dist/connection/index.d.ts +3 -0
  9. package/dist/connection/index.js +25 -0
  10. package/dist/connection/index.js.map +1 -0
  11. package/dist/connection/types.d.ts +25 -0
  12. package/dist/connection/types.js +3 -0
  13. package/dist/connection/types.js.map +1 -0
  14. package/dist/database.d.ts +9 -0
  15. package/dist/database.js +196 -0
  16. package/dist/database.js.map +1 -0
  17. package/dist/index.d.ts +18 -6
  18. package/dist/index.js +53 -8
  19. package/dist/index.js.map +1 -1
  20. package/dist/legacy/connection.d.ts +2 -0
  21. package/dist/legacy/connection.js +24 -0
  22. package/dist/legacy/connection.js.map +1 -0
  23. package/dist/legacy/index.d.ts +10 -0
  24. package/dist/legacy/index.js +93 -0
  25. package/dist/legacy/index.js.map +1 -0
  26. package/dist/legacy/model.d.ts +55 -0
  27. package/dist/legacy/model.js +282 -0
  28. package/dist/legacy/model.js.map +1 -0
  29. package/dist/legacy/pagination/index.d.ts +1 -0
  30. package/dist/legacy/pagination/index.js +18 -0
  31. package/dist/legacy/pagination/index.js.map +1 -0
  32. package/dist/legacy/pagination/pagination.d.ts +12 -0
  33. package/dist/legacy/pagination/pagination.js +85 -0
  34. package/dist/legacy/pagination/pagination.js.map +1 -0
  35. package/dist/legacy/search/customQuery.d.ts +13 -0
  36. package/dist/legacy/search/customQuery.js +73 -0
  37. package/dist/legacy/search/customQuery.js.map +1 -0
  38. package/dist/legacy/search/index.d.ts +1 -0
  39. package/dist/legacy/search/index.js +18 -0
  40. package/dist/legacy/search/index.js.map +1 -0
  41. package/dist/model/default-scope.d.ts +10 -0
  42. package/dist/model/default-scope.js +47 -0
  43. package/dist/model/default-scope.js.map +1 -0
  44. package/dist/model/hydrated-document.d.ts +30 -0
  45. package/dist/model/hydrated-document.js +118 -0
  46. package/dist/model/hydrated-document.js.map +1 -0
  47. package/dist/model/include.d.ts +33 -0
  48. package/dist/model/include.js +250 -0
  49. package/dist/model/include.js.map +1 -0
  50. package/dist/model/index.d.ts +137 -51
  51. package/dist/model/index.js +519 -174
  52. package/dist/model/index.js.map +1 -1
  53. package/dist/model/indexes.d.ts +16 -0
  54. package/dist/model/indexes.js +155 -0
  55. package/dist/model/indexes.js.map +1 -0
  56. package/dist/model/keyspace.d.ts +9 -0
  57. package/dist/model/keyspace.js +28 -0
  58. package/dist/model/keyspace.js.map +1 -0
  59. package/dist/model/read-helpers.d.ts +36 -0
  60. package/dist/model/read-helpers.js +275 -0
  61. package/dist/model/read-helpers.js.map +1 -0
  62. package/dist/model/safe-query.d.ts +23 -0
  63. package/dist/model/safe-query.js +138 -0
  64. package/dist/model/safe-query.js.map +1 -0
  65. package/dist/model/ttl.d.ts +9 -0
  66. package/dist/model/ttl.js +73 -0
  67. package/dist/model/ttl.js.map +1 -0
  68. package/dist/model/validation.d.ts +5 -0
  69. package/dist/model/validation.js +104 -0
  70. package/dist/model/validation.js.map +1 -0
  71. package/dist/model/write-helpers.d.ts +31 -0
  72. package/dist/model/write-helpers.js +220 -0
  73. package/dist/model/write-helpers.js.map +1 -0
  74. package/dist/pagination/index.d.ts +1 -0
  75. package/dist/pagination/index.js +1 -0
  76. package/dist/pagination/index.js.map +1 -1
  77. package/dist/pagination/pagination.d.ts +1 -8
  78. package/dist/pagination/pagination.js +16 -29
  79. package/dist/pagination/pagination.js.map +1 -1
  80. package/dist/pagination/safe-pagination.d.ts +15 -0
  81. package/dist/pagination/safe-pagination.js +221 -0
  82. package/dist/pagination/safe-pagination.js.map +1 -0
  83. package/dist/pagination/types.d.ts +11 -0
  84. package/dist/pagination/types.js +3 -0
  85. package/dist/pagination/types.js.map +1 -0
  86. package/dist/search/customQuery.d.ts +10 -3
  87. package/dist/search/customQuery.js +17 -18
  88. package/dist/search/customQuery.js.map +1 -1
  89. package/dist/shared/common.model.js +2 -2
  90. package/dist/shared/common.model.js.map +1 -1
  91. package/dist/timeseries/index.d.ts +1 -0
  92. package/dist/timeseries/index.js +18 -0
  93. package/dist/timeseries/index.js.map +1 -0
  94. package/dist/timeseries/time-series-model.d.ts +60 -0
  95. package/dist/timeseries/time-series-model.js +267 -0
  96. package/dist/timeseries/time-series-model.js.map +1 -0
  97. package/dist/utils/awaitTo.d.ts +1 -1
  98. package/dist/utils/awaitTo.js +1 -1
  99. package/dist/utils/awaitTo.js.map +1 -1
  100. package/docs/beta-migration.md +175 -0
  101. package/legacy/index.js +1 -0
  102. package/legacy/package.json +4 -0
  103. package/next/index.js +1 -0
  104. package/next/package.json +4 -0
  105. package/package.json +13 -8
  106. package/dist/connection.d.ts +0 -42
  107. package/dist/connection.js +0 -156
  108. package/dist/connection.js.map +0 -1
@@ -0,0 +1,485 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
36
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ exports.CouchbaseConnection = void 0;
63
+ var couchbase = __importStar(require("couchbase"));
64
+ var env_1 = require("./env");
65
+ /**
66
+ * CouchbaseConnection class
67
+ * Only one CouchbaseConnection can exist that's why it's a singleton
68
+ */
69
+ var CouchbaseConnection = /** @class */ (function () {
70
+ function CouchbaseConnection() {
71
+ var _this = this;
72
+ this.bucket = null;
73
+ this.cluster = null;
74
+ this.connectionState = 'idle';
75
+ this.autoReconnectEnabled = true;
76
+ this.reconnectDelayMs = 5000;
77
+ this.manuallyClosed = false;
78
+ // Args
79
+ this.connectionString = null;
80
+ this.bucketName = null;
81
+ this.username = null;
82
+ this.password = null;
83
+ this.rawPing = function () { return __awaiter(_this, void 0, void 0, function () {
84
+ return __generator(this, function (_a) {
85
+ if (!this.cluster) {
86
+ throw new Error('couchset is not connected; call couchset(args) first');
87
+ }
88
+ if (typeof this.cluster.ping === 'function') {
89
+ return [2 /*return*/, this.cluster.ping()];
90
+ }
91
+ return [2 /*return*/, this.cluster.query('SELECT 1')];
92
+ });
93
+ }); };
94
+ this.openCluster = function (settings) {
95
+ return couchbase.connect(settings.connectionString, _this.connectionOptions(settings));
96
+ };
97
+ this.connectWithSettings = function (settings) { return __awaiter(_this, void 0, void 0, function () {
98
+ var cluster;
99
+ return __generator(this, function (_a) {
100
+ switch (_a.label) {
101
+ case 0: return [4 /*yield*/, this.openCluster(settings)];
102
+ case 1:
103
+ cluster = _a.sent();
104
+ if (!this.manuallyClosed) return [3 /*break*/, 4];
105
+ if (!(cluster && typeof cluster.close === 'function')) return [3 /*break*/, 3];
106
+ return [4 /*yield*/, cluster.close()];
107
+ case 2:
108
+ _a.sent();
109
+ _a.label = 3;
110
+ case 3: throw new Error('couchset reconnect stopped');
111
+ case 4:
112
+ this.cluster = cluster;
113
+ this.bucket = this.cluster.bucket(settings.bucketName);
114
+ this.connectionState = 'connected';
115
+ this.lastConnectionError = undefined;
116
+ this.scheduleHealthCheck();
117
+ return [2 /*return*/, this];
118
+ }
119
+ });
120
+ }); };
121
+ this.startReconnect = function () {
122
+ if (_this.reconnectPromise) {
123
+ return _this.reconnectPromise;
124
+ }
125
+ if (!_this.autoReconnectEnabled || !_this.connectionSettings || _this.manuallyClosed) {
126
+ return Promise.reject(new Error('couchset reconnect is disabled or no connection settings are available'));
127
+ }
128
+ _this.connectionState = 'reconnecting';
129
+ _this.reconnectPromise = new Promise(function (resolve, reject) {
130
+ _this.reconnectReject = reject;
131
+ var attempt = function () { return __awaiter(_this, void 0, void 0, function () {
132
+ var connection, error_1;
133
+ return __generator(this, function (_a) {
134
+ switch (_a.label) {
135
+ case 0:
136
+ if (this.manuallyClosed || !this.connectionSettings) {
137
+ reject(new Error('couchset reconnect stopped'));
138
+ return [2 /*return*/];
139
+ }
140
+ _a.label = 1;
141
+ case 1:
142
+ _a.trys.push([1, 3, , 4]);
143
+ return [4 /*yield*/, this.connectWithSettings(this.connectionSettings)];
144
+ case 2:
145
+ connection = _a.sent();
146
+ this.reconnectPromise = undefined;
147
+ this.reconnectReject = undefined;
148
+ this.clearReconnectTimer();
149
+ resolve(connection);
150
+ return [3 /*break*/, 4];
151
+ case 3:
152
+ error_1 = _a.sent();
153
+ this.lastConnectionError = error_1;
154
+ this.connectionState = 'reconnecting';
155
+ this.reconnectTimer = this.scheduleTimer(attempt, false);
156
+ return [3 /*break*/, 4];
157
+ case 4: return [2 /*return*/];
158
+ }
159
+ });
160
+ }); };
161
+ attempt();
162
+ });
163
+ return _this.reconnectPromise;
164
+ };
165
+ /**
166
+ * start
167
+ */
168
+ this.init = function (args) { return __awaiter(_this, void 0, void 0, function () {
169
+ var settings;
170
+ var _this = this;
171
+ return __generator(this, function (_a) {
172
+ switch (_a.label) {
173
+ case 0:
174
+ settings = this.normalizeArgs(args);
175
+ this.configureReconnect(args);
176
+ if (this.connectionPromise && this.sameSettings(settings)) {
177
+ return [2 /*return*/, this.connectionPromise];
178
+ }
179
+ if (this.reconnectPromise && this.sameSettings(settings)) {
180
+ return [2 /*return*/, this.reconnectPromise];
181
+ }
182
+ if (this.isConnected() && this.sameSettings(settings)) {
183
+ return [2 /*return*/, this];
184
+ }
185
+ if ((this.isConnected() || this.connectionPromise || this.reconnectPromise) &&
186
+ !args.force) {
187
+ throw this.settingsError();
188
+ }
189
+ if (!(args.force && this.connectionPromise)) return [3 /*break*/, 2];
190
+ return [4 /*yield*/, this.connectionPromise.catch(function () { return undefined; })];
191
+ case 1:
192
+ _a.sent();
193
+ _a.label = 2;
194
+ case 2:
195
+ if (!args.force) return [3 /*break*/, 4];
196
+ return [4 /*yield*/, this.shutdown()];
197
+ case 3:
198
+ _a.sent();
199
+ this.configureReconnect(args);
200
+ _a.label = 4;
201
+ case 4:
202
+ this.manuallyClosed = false;
203
+ this.clearReconnectTimer();
204
+ this.clearHealthTimer();
205
+ this.assignSettings(settings);
206
+ this.connectionState = 'connecting';
207
+ this.connectionPromise = this.connectWithSettings(settings)
208
+ .then(function (connection) {
209
+ _this.connectionPromise = undefined;
210
+ return connection;
211
+ })
212
+ .catch(function (error) {
213
+ _this.connectionPromise = undefined;
214
+ _this.connectionSettings = undefined;
215
+ _this.connectionState = 'idle';
216
+ _this.lastConnectionError = error;
217
+ throw error;
218
+ });
219
+ return [2 /*return*/, this.connectionPromise];
220
+ }
221
+ });
222
+ }); };
223
+ /**
224
+ * start serverless start
225
+ */
226
+ this.initServerless = function (args) { return __awaiter(_this, void 0, void 0, function () {
227
+ return __generator(this, function (_a) {
228
+ return [2 /*return*/, this.init(args)];
229
+ });
230
+ }); };
231
+ /**
232
+ * getCollection
233
+ */
234
+ this.getCollection = function (scopeName, collectionName) {
235
+ if (scopeName || collectionName) {
236
+ return _this.bucket
237
+ .scope(scopeName || '_default')
238
+ .collection(collectionName || '_default');
239
+ }
240
+ return _this.bucket.defaultCollection();
241
+ };
242
+ this.getCluster = function () {
243
+ return _this.cluster;
244
+ };
245
+ this.getBucket = function () {
246
+ return _this.bucketName;
247
+ };
248
+ this.isConnected = function () {
249
+ return !!_this.cluster && !!_this.bucket;
250
+ };
251
+ this.ready = function () { return __awaiter(_this, void 0, void 0, function () {
252
+ return __generator(this, function (_a) {
253
+ if (this.isConnected()) {
254
+ return [2 /*return*/, this];
255
+ }
256
+ if (this.connectionPromise) {
257
+ return [2 /*return*/, this.connectionPromise];
258
+ }
259
+ if (this.reconnectPromise) {
260
+ return [2 /*return*/, this.reconnectPromise];
261
+ }
262
+ if (this.autoReconnectEnabled && this.connectionSettings && !this.manuallyClosed) {
263
+ return [2 /*return*/, this.startReconnect()];
264
+ }
265
+ throw new Error('couchset is not connected; call couchset(args) first');
266
+ });
267
+ }); };
268
+ this.ping = function () { return __awaiter(_this, void 0, void 0, function () {
269
+ var error_2;
270
+ return __generator(this, function (_a) {
271
+ switch (_a.label) {
272
+ case 0: return [4 /*yield*/, this.ready()];
273
+ case 1:
274
+ _a.sent();
275
+ _a.label = 2;
276
+ case 2:
277
+ _a.trys.push([2, 4, , 5]);
278
+ return [4 /*yield*/, this.rawPing()];
279
+ case 3: return [2 /*return*/, _a.sent()];
280
+ case 4:
281
+ error_2 = _a.sent();
282
+ this.markDisconnected(error_2);
283
+ throw error_2;
284
+ case 5: return [2 /*return*/];
285
+ }
286
+ });
287
+ }); };
288
+ this.state = function () {
289
+ return _this.connectionState;
290
+ };
291
+ this.health = function () {
292
+ return {
293
+ autoReconnect: _this.autoReconnectEnabled,
294
+ bucketName: _this.bucketName,
295
+ lastError: _this.lastConnectionError,
296
+ reconnectIntervalMs: _this.reconnectDelayMs,
297
+ state: _this.connectionState,
298
+ };
299
+ };
300
+ this.shouldReconnect = function (error) {
301
+ var _a;
302
+ if (!_this.autoReconnectEnabled || _this.manuallyClosed) {
303
+ return false;
304
+ }
305
+ var caught = error;
306
+ var name = String((caught === null || caught === void 0 ? void 0 : caught.name) || ((_a = caught === null || caught === void 0 ? void 0 : caught.constructor) === null || _a === void 0 ? void 0 : _a.name) || '');
307
+ var message = String((caught === null || caught === void 0 ? void 0 : caught.message) || '');
308
+ var text = "".concat(name, " ").concat(message).toLowerCase();
309
+ return [
310
+ 'timeout',
311
+ 'network',
312
+ 'connect',
313
+ 'closed',
314
+ 'disconnect',
315
+ 'unavailable',
316
+ 'socket',
317
+ 'econnrefused',
318
+ 'etimedout',
319
+ 'temporary failure',
320
+ ].some(function (value) { return text.includes(value); });
321
+ };
322
+ this.markDisconnected = function (error) {
323
+ if (!_this.connectionSettings || _this.manuallyClosed) {
324
+ return;
325
+ }
326
+ var cluster = _this.cluster;
327
+ _this.lastConnectionError = error;
328
+ _this.connectionPromise = undefined;
329
+ _this.cluster = null;
330
+ _this.bucket = null;
331
+ _this.clearHealthTimer();
332
+ if (cluster && typeof cluster.close === 'function') {
333
+ cluster.close().catch(function () { return undefined; });
334
+ }
335
+ if (_this.autoReconnectEnabled) {
336
+ _this.connectionState = 'reconnecting';
337
+ _this.startReconnect().catch(function () { return undefined; });
338
+ return;
339
+ }
340
+ _this.connectionState = 'idle';
341
+ };
342
+ /**
343
+ * shutdown cluster
344
+ */
345
+ this.shutdown = function () { return __awaiter(_this, void 0, void 0, function () {
346
+ var cluster;
347
+ return __generator(this, function (_a) {
348
+ switch (_a.label) {
349
+ case 0:
350
+ cluster = this.cluster;
351
+ this.manuallyClosed = true;
352
+ this.clearReconnectTimer();
353
+ this.clearHealthTimer();
354
+ if (this.reconnectReject) {
355
+ this.reconnectReject(new Error('couchset reconnect stopped'));
356
+ }
357
+ this.reconnectPromise = undefined;
358
+ this.reconnectReject = undefined;
359
+ this.connectionPromise = undefined;
360
+ this.connectionSettings = undefined;
361
+ this.cluster = null;
362
+ this.bucket = null;
363
+ this.connectionString = null;
364
+ this.bucketName = null;
365
+ this.username = null;
366
+ this.password = null;
367
+ this.connectionState = 'closed';
368
+ this.lastConnectionError = undefined;
369
+ if (!(cluster && typeof cluster.close === 'function')) return [3 /*break*/, 2];
370
+ return [4 /*yield*/, cluster.close()];
371
+ case 1:
372
+ _a.sent();
373
+ _a.label = 2;
374
+ case 2: return [2 /*return*/];
375
+ }
376
+ });
377
+ }); };
378
+ }
379
+ Object.defineProperty(CouchbaseConnection, "Instance", {
380
+ get: function () {
381
+ return this._instance || (this._instance = new this());
382
+ },
383
+ enumerable: false,
384
+ configurable: true
385
+ });
386
+ CouchbaseConnection.prototype.configureReconnect = function (args) {
387
+ this.autoReconnectEnabled =
388
+ typeof args.autoReconnect === 'boolean'
389
+ ? args.autoReconnect
390
+ : (0, env_1.envFlag)(process.env.COUCHSET_RECONNECT, true);
391
+ this.reconnectDelayMs =
392
+ typeof args.reconnectIntervalMs === 'number' && args.reconnectIntervalMs > 0
393
+ ? args.reconnectIntervalMs
394
+ : (0, env_1.envNumber)(process.env.COUCHSET_RECONNECT_INTERVAL_MS, 5000);
395
+ };
396
+ CouchbaseConnection.prototype.normalizeArgs = function (args) {
397
+ var connectionString = args.connectionString, password = args.password, username = args.username, _a = args.bucketName, bucketName = _a === void 0 ? 'default' : _a, proxy = args.proxy;
398
+ return {
399
+ bucketName: bucketName,
400
+ connectionString: connectionString,
401
+ password: password,
402
+ proxy: proxy,
403
+ username: username,
404
+ };
405
+ };
406
+ CouchbaseConnection.prototype.sameSettings = function (next) {
407
+ var current = this.connectionSettings;
408
+ return (!!current &&
409
+ current.connectionString === next.connectionString &&
410
+ current.bucketName === next.bucketName &&
411
+ current.username === next.username &&
412
+ current.password === next.password &&
413
+ current.proxy === next.proxy);
414
+ };
415
+ CouchbaseConnection.prototype.assignSettings = function (settings) {
416
+ this.connectionString = settings.connectionString;
417
+ this.bucketName = settings.bucketName;
418
+ this.username = settings.username;
419
+ this.password = settings.password;
420
+ this.connectionSettings = settings;
421
+ };
422
+ CouchbaseConnection.prototype.settingsError = function () {
423
+ return new Error('couchset is already connected with different settings; call couchset({...args, force: true}) to reconnect');
424
+ };
425
+ CouchbaseConnection.prototype.connectionOptions = function (settings) {
426
+ var options = {
427
+ password: settings.password,
428
+ username: settings.username,
429
+ };
430
+ if (settings.proxy) {
431
+ options.proxy = settings.proxy;
432
+ }
433
+ return options;
434
+ };
435
+ CouchbaseConnection.prototype.clearReconnectTimer = function () {
436
+ if (this.reconnectTimer) {
437
+ clearTimeout(this.reconnectTimer);
438
+ this.reconnectTimer = undefined;
439
+ }
440
+ };
441
+ CouchbaseConnection.prototype.clearHealthTimer = function () {
442
+ if (this.healthTimer) {
443
+ clearTimeout(this.healthTimer);
444
+ this.healthTimer = undefined;
445
+ }
446
+ };
447
+ CouchbaseConnection.prototype.scheduleTimer = function (callback, unref) {
448
+ if (unref === void 0) { unref = true; }
449
+ var timer = setTimeout(callback, this.reconnectDelayMs);
450
+ if (unref && typeof timer.unref === 'function') {
451
+ timer.unref();
452
+ }
453
+ return timer;
454
+ };
455
+ CouchbaseConnection.prototype.scheduleHealthCheck = function () {
456
+ var _this = this;
457
+ this.clearHealthTimer();
458
+ if (!this.autoReconnectEnabled || this.manuallyClosed) {
459
+ return;
460
+ }
461
+ this.healthTimer = this.scheduleTimer(function () { return __awaiter(_this, void 0, void 0, function () {
462
+ var error_3;
463
+ return __generator(this, function (_a) {
464
+ switch (_a.label) {
465
+ case 0:
466
+ _a.trys.push([0, 2, , 3]);
467
+ return [4 /*yield*/, this.rawPing()];
468
+ case 1:
469
+ _a.sent();
470
+ this.scheduleHealthCheck();
471
+ return [3 /*break*/, 3];
472
+ case 2:
473
+ error_3 = _a.sent();
474
+ this.markDisconnected(error_3);
475
+ return [3 /*break*/, 3];
476
+ case 3: return [2 /*return*/];
477
+ }
478
+ });
479
+ }); });
480
+ };
481
+ return CouchbaseConnection;
482
+ }());
483
+ exports.CouchbaseConnection = CouchbaseConnection;
484
+ exports.default = CouchbaseConnection;
485
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/connection/connection.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Bucket, Cluster, Collection} from 'couchbase';\nimport * as couchbase from 'couchbase';\n\nimport {envFlag, envNumber} from './env';\nimport {ConnectionHealth, ConnectionSettings, ConnectionState, CouchsetArgs} from './types';\n\n/**\n * CouchbaseConnection class\n * Only one CouchbaseConnection can exist that's why it's a singleton\n */\nexport class CouchbaseConnection implements CouchsetArgs {\n private static _instance: CouchbaseConnection;\n\n bucket: Bucket = null;\n cluster: Cluster = null;\n private connectionPromise?: Promise<CouchbaseConnection>;\n private connectionSettings?: ConnectionSettings;\n private reconnectPromise?: Promise<CouchbaseConnection>;\n private reconnectReject?: (error: Error) => void;\n private reconnectTimer?: ReturnType<typeof setTimeout>;\n private healthTimer?: ReturnType<typeof setTimeout>;\n private connectionState: ConnectionState = 'idle';\n private autoReconnectEnabled = true;\n private reconnectDelayMs = 5000;\n private manuallyClosed = false;\n private lastConnectionError?: any;\n\n // Args\n connectionString: string = null;\n bucketName: string = null;\n username: string = null;\n password: string = null;\n\n public static get Instance(): CouchbaseConnection {\n return this._instance || (this._instance = new this());\n }\n\n private constructor() {}\n\n private configureReconnect(args: CouchsetArgs): void {\n this.autoReconnectEnabled =\n typeof args.autoReconnect === 'boolean'\n ? args.autoReconnect\n : envFlag(process.env.COUCHSET_RECONNECT, true);\n this.reconnectDelayMs =\n typeof args.reconnectIntervalMs === 'number' && args.reconnectIntervalMs > 0\n ? args.reconnectIntervalMs\n : envNumber(process.env.COUCHSET_RECONNECT_INTERVAL_MS, 5000);\n }\n\n private normalizeArgs(args: CouchsetArgs): ConnectionSettings {\n const {connectionString, password, username, bucketName = 'default', proxy} = args;\n\n return {\n bucketName,\n connectionString,\n password,\n proxy,\n username,\n };\n }\n\n private sameSettings(next: ConnectionSettings): boolean {\n const current = this.connectionSettings;\n\n return (\n !!current &&\n current.connectionString === next.connectionString &&\n current.bucketName === next.bucketName &&\n current.username === next.username &&\n current.password === next.password &&\n current.proxy === next.proxy\n );\n }\n\n private assignSettings(settings: ConnectionSettings): void {\n this.connectionString = settings.connectionString;\n this.bucketName = settings.bucketName;\n this.username = settings.username;\n this.password = settings.password;\n this.connectionSettings = settings;\n }\n\n private settingsError(): Error {\n return new Error(\n 'couchset is already connected with different settings; call couchset({...args, force: true}) to reconnect'\n );\n }\n\n private connectionOptions(settings: ConnectionSettings): any {\n const options: any = {\n password: settings.password,\n username: settings.username,\n };\n\n if (settings.proxy) {\n options.proxy = settings.proxy;\n }\n\n return options;\n }\n\n private clearReconnectTimer(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = undefined;\n }\n }\n\n private clearHealthTimer(): void {\n if (this.healthTimer) {\n clearTimeout(this.healthTimer);\n this.healthTimer = undefined;\n }\n }\n\n private scheduleTimer(callback: () => void, unref = true): ReturnType<typeof setTimeout> {\n const timer = setTimeout(callback, this.reconnectDelayMs);\n\n if (unref && typeof (timer as any).unref === 'function') {\n (timer as any).unref();\n }\n\n return timer;\n }\n\n private rawPing = async (): Promise<any> => {\n if (!this.cluster) {\n throw new Error('couchset is not connected; call couchset(args) first');\n }\n\n if (typeof (this.cluster as any).ping === 'function') {\n return (this.cluster as any).ping();\n }\n\n return this.cluster.query('SELECT 1');\n };\n\n private openCluster = (settings: ConnectionSettings): Promise<Cluster> => {\n return couchbase.connect(settings.connectionString, this.connectionOptions(settings));\n };\n\n private scheduleHealthCheck(): void {\n this.clearHealthTimer();\n\n if (!this.autoReconnectEnabled || this.manuallyClosed) {\n return;\n }\n\n this.healthTimer = this.scheduleTimer(async () => {\n try {\n await this.rawPing();\n this.scheduleHealthCheck();\n } catch (error) {\n this.markDisconnected(error);\n }\n });\n }\n\n private connectWithSettings = async (\n settings: ConnectionSettings\n ): Promise<CouchbaseConnection> => {\n const cluster = await this.openCluster(settings);\n\n if (this.manuallyClosed) {\n if (cluster && typeof (cluster as any).close === 'function') {\n await (cluster as any).close();\n }\n throw new Error('couchset reconnect stopped');\n }\n\n this.cluster = cluster as any;\n this.bucket = this.cluster.bucket(settings.bucketName);\n this.connectionState = 'connected';\n this.lastConnectionError = undefined;\n this.scheduleHealthCheck();\n\n return this;\n };\n\n private startReconnect = (): Promise<CouchbaseConnection> => {\n if (this.reconnectPromise) {\n return this.reconnectPromise;\n }\n\n if (!this.autoReconnectEnabled || !this.connectionSettings || this.manuallyClosed) {\n return Promise.reject(\n new Error('couchset reconnect is disabled or no connection settings are available')\n );\n }\n\n this.connectionState = 'reconnecting';\n\n this.reconnectPromise = new Promise<CouchbaseConnection>((resolve, reject) => {\n this.reconnectReject = reject;\n\n const attempt = async () => {\n if (this.manuallyClosed || !this.connectionSettings) {\n reject(new Error('couchset reconnect stopped'));\n return;\n }\n\n try {\n const connection = await this.connectWithSettings(this.connectionSettings);\n this.reconnectPromise = undefined;\n this.reconnectReject = undefined;\n this.clearReconnectTimer();\n resolve(connection);\n } catch (error) {\n this.lastConnectionError = error;\n this.connectionState = 'reconnecting';\n this.reconnectTimer = this.scheduleTimer(attempt, false);\n }\n };\n\n attempt();\n });\n\n return this.reconnectPromise;\n };\n\n /**\n * start\n */\n public init = async (args: CouchsetArgs): Promise<CouchbaseConnection> => {\n const settings = this.normalizeArgs(args);\n this.configureReconnect(args);\n\n if (this.connectionPromise && this.sameSettings(settings)) {\n return this.connectionPromise;\n }\n\n if (this.reconnectPromise && this.sameSettings(settings)) {\n return this.reconnectPromise;\n }\n\n if (this.isConnected() && this.sameSettings(settings)) {\n return this;\n }\n\n if (\n (this.isConnected() || this.connectionPromise || this.reconnectPromise) &&\n !args.force\n ) {\n throw this.settingsError();\n }\n\n if (args.force && this.connectionPromise) {\n await this.connectionPromise.catch(() => undefined);\n }\n\n if (args.force) {\n await this.shutdown();\n this.configureReconnect(args);\n }\n\n this.manuallyClosed = false;\n this.clearReconnectTimer();\n this.clearHealthTimer();\n this.assignSettings(settings);\n this.connectionState = 'connecting';\n this.connectionPromise = this.connectWithSettings(settings)\n .then((connection) => {\n this.connectionPromise = undefined;\n\n return connection;\n })\n .catch((error) => {\n this.connectionPromise = undefined;\n this.connectionSettings = undefined;\n this.connectionState = 'idle';\n this.lastConnectionError = error;\n throw error;\n });\n\n return this.connectionPromise;\n };\n\n /**\n * start serverless start\n */\n public initServerless = async (args: CouchsetArgs): Promise<CouchbaseConnection> => {\n return this.init(args);\n };\n\n /**\n * getCollection\n */\n public getCollection = (scopeName?: string, collectionName?: string): Collection => {\n if (scopeName || collectionName) {\n return this.bucket\n .scope(scopeName || '_default')\n .collection(collectionName || '_default');\n }\n\n return this.bucket.defaultCollection();\n };\n\n public getCluster = (): Cluster => {\n return this.cluster;\n };\n\n public getBucket = (): string => {\n return this.bucketName;\n };\n\n public isConnected = (): boolean => {\n return !!this.cluster && !!this.bucket;\n };\n\n public ready = async (): Promise<CouchbaseConnection> => {\n if (this.isConnected()) {\n return this;\n }\n\n if (this.connectionPromise) {\n return this.connectionPromise;\n }\n\n if (this.reconnectPromise) {\n return this.reconnectPromise;\n }\n\n if (this.autoReconnectEnabled && this.connectionSettings && !this.manuallyClosed) {\n return this.startReconnect();\n }\n\n throw new Error('couchset is not connected; call couchset(args) first');\n };\n\n public ping = async (): Promise<any> => {\n await this.ready();\n\n try {\n return await this.rawPing();\n } catch (error) {\n this.markDisconnected(error);\n throw error;\n }\n };\n\n public state = (): ConnectionState => {\n return this.connectionState;\n };\n\n public health = (): ConnectionHealth => {\n return {\n autoReconnect: this.autoReconnectEnabled,\n bucketName: this.bucketName,\n lastError: this.lastConnectionError,\n reconnectIntervalMs: this.reconnectDelayMs,\n state: this.connectionState,\n };\n };\n\n public shouldReconnect = (error: unknown): boolean => {\n if (!this.autoReconnectEnabled || this.manuallyClosed) {\n return false;\n }\n\n const caught = error as any;\n const name = String(caught?.name || caught?.constructor?.name || '');\n const message = String(caught?.message || '');\n const text = `${name} ${message}`.toLowerCase();\n\n return [\n 'timeout',\n 'network',\n 'connect',\n 'closed',\n 'disconnect',\n 'unavailable',\n 'socket',\n 'econnrefused',\n 'etimedout',\n 'temporary failure',\n ].some((value) => text.includes(value));\n };\n\n public markDisconnected = (error?: unknown): void => {\n if (!this.connectionSettings || this.manuallyClosed) {\n return;\n }\n\n const cluster = this.cluster;\n\n this.lastConnectionError = error;\n this.connectionPromise = undefined;\n this.cluster = null;\n this.bucket = null;\n this.clearHealthTimer();\n\n if (cluster && typeof (cluster as any).close === 'function') {\n (cluster as any).close().catch(() => undefined);\n }\n\n if (this.autoReconnectEnabled) {\n this.connectionState = 'reconnecting';\n this.startReconnect().catch(() => undefined);\n return;\n }\n\n this.connectionState = 'idle';\n };\n\n /**\n * shutdown cluster\n */\n public shutdown = async (): Promise<void> => {\n const cluster = this.cluster;\n\n this.manuallyClosed = true;\n this.clearReconnectTimer();\n this.clearHealthTimer();\n if (this.reconnectReject) {\n this.reconnectReject(new Error('couchset reconnect stopped'));\n }\n this.reconnectPromise = undefined;\n this.reconnectReject = undefined;\n this.connectionPromise = undefined;\n this.connectionSettings = undefined;\n this.cluster = null;\n this.bucket = null;\n this.connectionString = null;\n this.bucketName = null;\n this.username = null;\n this.password = null;\n this.connectionState = 'closed';\n this.lastConnectionError = undefined;\n\n if (cluster && typeof (cluster as any).close === 'function') {\n await (cluster as any).close();\n }\n };\n}\n\nexport default CouchbaseConnection;\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const envFlag: (value: string | undefined, fallback: boolean) => boolean;
2
+ export declare const envNumber: (value: string | undefined, fallback: number) => number;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.envNumber = exports.envFlag = void 0;
4
+ var envFlag = function (value, fallback) {
5
+ if (value === undefined) {
6
+ return fallback;
7
+ }
8
+ return !['0', 'false', 'off', 'no'].includes(value.toLowerCase());
9
+ };
10
+ exports.envFlag = envFlag;
11
+ var envNumber = function (value, fallback) {
12
+ var parsed = Number(value);
13
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
14
+ };
15
+ exports.envNumber = envNumber;
16
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/connection/env.ts"],"names":[],"mappings":";;;AAAO,IAAM,OAAO,GAAG,UAAC,KAAyB,EAAE,QAAiB;IAChE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AACtE,CAAC,CAAC;AANW,QAAA,OAAO,WAMlB;AAEK,IAAM,SAAS,GAAG,UAAC,KAAyB,EAAE,QAAgB;IACjE,IAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrE,CAAC,CAAC;AAJW,QAAA,SAAS,aAIpB","sourcesContent":["export const envFlag = (value: string | undefined, fallback: boolean): boolean => {\n if (value === undefined) {\n return fallback;\n }\n\n return !['0', 'false', 'off', 'no'].includes(value.toLowerCase());\n};\n\nexport const envNumber = (value: string | undefined, fallback: number): number => {\n const parsed = Number(value);\n\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;\n};\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './connection';
2
+ export * from './types';
3
+ export { default } from './connection';
@@ -0,0 +1,25 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.default = void 0;
21
+ __exportStar(require("./connection"), exports);
22
+ __exportStar(require("./types"), exports);
23
+ var connection_1 = require("./connection");
24
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(connection_1).default; } });
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,0CAAwB;AAExB,2CAAqC;AAA7B,sHAAA,OAAO,OAAA","sourcesContent":["export * from './connection';\nexport * from './types';\n\nexport {default} from './connection';\n"]}
@@ -0,0 +1,25 @@
1
+ export interface CouchsetArgs {
2
+ connectionString: string;
3
+ bucketName: string;
4
+ username: string;
5
+ password: string;
6
+ proxy?: string;
7
+ force?: boolean;
8
+ autoReconnect?: boolean;
9
+ reconnectIntervalMs?: number;
10
+ }
11
+ export interface ConnectionSettings {
12
+ connectionString: string;
13
+ bucketName: string;
14
+ username: string;
15
+ password: string;
16
+ proxy?: string;
17
+ }
18
+ export type ConnectionState = 'idle' | 'connecting' | 'connected' | 'reconnecting' | 'closed';
19
+ export interface ConnectionHealth {
20
+ state: ConnectionState;
21
+ autoReconnect: boolean;
22
+ reconnectIntervalMs: number;
23
+ bucketName: string;
24
+ lastError?: any;
25
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/connection/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface CouchsetArgs {\n connectionString: string;\n bucketName: string;\n username: string;\n password: string;\n proxy?: string;\n force?: boolean;\n autoReconnect?: boolean;\n reconnectIntervalMs?: number;\n}\n\nexport interface ConnectionSettings {\n connectionString: string;\n bucketName: string;\n username: string;\n password: string;\n proxy?: string;\n}\n\nexport type ConnectionState = 'idle' | 'connecting' | 'connected' | 'reconnecting' | 'closed';\n\nexport interface ConnectionHealth {\n state: ConnectionState;\n autoReconnect: boolean;\n reconnectIntervalMs: number;\n bucketName: string;\n lastError?: any;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { CouchsetArgs } from './connection';
2
+ export type CouchbaseStarterLogger = ((...args: any[]) => void) | false;
3
+ export interface StartCouchbaseOptions extends Partial<CouchsetArgs> {
4
+ logger?: CouchbaseStarterLogger;
5
+ }
6
+ export declare const getConnectionOptions: (overrides?: Partial<CouchsetArgs>) => CouchsetArgs;
7
+ export declare const connectionOptions: CouchsetArgs;
8
+ export declare const startCouchbase: (options?: StartCouchbaseOptions) => Promise<boolean>;
9
+ export declare const startCouchbaseServerless: (options?: StartCouchbaseOptions) => Promise<boolean>;