@digitaldefiance/node-express-suite 3.12.16 → 3.13.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 (53) hide show
  1. package/package.json +2 -1
  2. package/src/application-base.d.ts +50 -47
  3. package/src/application-base.d.ts.map +1 -1
  4. package/src/application-base.js +180 -229
  5. package/src/application-base.js.map +1 -1
  6. package/src/application.d.ts +2 -1
  7. package/src/application.d.ts.map +1 -1
  8. package/src/application.js +8 -4
  9. package/src/application.js.map +1 -1
  10. package/src/index.d.ts +1 -0
  11. package/src/index.d.ts.map +1 -1
  12. package/src/index.js +3 -1
  13. package/src/index.js.map +1 -1
  14. package/src/interfaces/document-store.d.ts +38 -0
  15. package/src/interfaces/document-store.d.ts.map +1 -0
  16. package/src/interfaces/document-store.js +8 -0
  17. package/src/interfaces/document-store.js.map +1 -0
  18. package/src/interfaces/failable-result.d.ts +2 -15
  19. package/src/interfaces/failable-result.d.ts.map +1 -1
  20. package/src/interfaces/failable-result.js +0 -5
  21. package/src/interfaces/failable-result.js.map +1 -1
  22. package/src/interfaces/index.d.ts +1 -0
  23. package/src/interfaces/index.d.ts.map +1 -1
  24. package/src/interfaces/index.js +1 -0
  25. package/src/interfaces/index.js.map +1 -1
  26. package/src/services/index.d.ts +4 -0
  27. package/src/services/index.d.ts.map +1 -1
  28. package/src/services/index.js +4 -0
  29. package/src/services/index.js.map +1 -1
  30. package/src/services/mongoose-collection.d.ts +52 -0
  31. package/src/services/mongoose-collection.d.ts.map +1 -0
  32. package/src/services/mongoose-collection.js +326 -0
  33. package/src/services/mongoose-collection.js.map +1 -0
  34. package/src/services/mongoose-database.d.ts +64 -0
  35. package/src/services/mongoose-database.d.ts.map +1 -0
  36. package/src/services/mongoose-database.js +121 -0
  37. package/src/services/mongoose-database.js.map +1 -0
  38. package/src/services/mongoose-document-store.d.ts +109 -0
  39. package/src/services/mongoose-document-store.d.ts.map +1 -0
  40. package/src/services/mongoose-document-store.js +264 -0
  41. package/src/services/mongoose-document-store.js.map +1 -0
  42. package/src/services/mongoose-session-adapter.d.ts +39 -0
  43. package/src/services/mongoose-session-adapter.d.ts.map +1 -0
  44. package/src/services/mongoose-session-adapter.js +63 -0
  45. package/src/services/mongoose-session-adapter.js.map +1 -0
  46. package/src/utils/default-mongo-uri-validator.d.ts +15 -0
  47. package/src/utils/default-mongo-uri-validator.d.ts.map +1 -0
  48. package/src/utils/default-mongo-uri-validator.js +46 -0
  49. package/src/utils/default-mongo-uri-validator.js.map +1 -0
  50. package/src/utils.d.ts +21 -2
  51. package/src/utils.d.ts.map +1 -1
  52. package/src/utils.js +124 -49
  53. package/src/utils.js.map +1 -1
package/src/index.d.ts CHANGED
@@ -37,4 +37,5 @@ export * from './openapi';
37
37
  export { type DEBUG_TYPE, debugLog, directLog, getValueAtPath, mapZodIssuesToValidationErrors, requireValidatedFieldsAsync, requireOneOfValidatedFieldsAsync, requireValidatedFieldsOrThrow, isValidStringObjectId as isValidStringId, DEFAULT_RETRY_ATTEMPTS, DEFAULT_TRANSACTION_TIMEOUT, DEFAULT_TRANSACTION_LOCK_REQUEST_TIMEOUT, type TransactionOptions, getDefaultBaseDelay, withTransaction, sendApiMessageResponse, sendApiErrorResponse, sendApiExpressValidationErrorResponse, sendApiMongoValidationErrorResponse, sendRawJsonResponse, handleError, locatePEMRoot, lengthEncodeData, decodeLengthEncodedData, isValidTimezone, omit, validateEnumCollection, uint8ArrayToBase64, base64ToUint8Array, uint8ArrayToHex, hexToUint8Array, crc16, stringToUint8Array, uint8ArrayToString, randomBytes, arraysEqual, concatUint8Arrays, getLengthEncodingTypeForLength, getLengthEncodingTypeFromValue, getLengthForLengthType, parseBackupCodes, isValidHostname, parseHostnames, } from './utils';
38
38
  export type { TransactionOptions as UtilsTransactionOptions } from './utils';
39
39
  export * from './validation';
40
+ export { defaultMongoUriValidator } from './utils/default-mongo-uri-validator';
40
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-express-suite/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,KAAK,UAAU,EACf,QAAQ,EACR,SAAS,EACT,cAAc,EACd,8BAA8B,EAC9B,2BAA2B,EAC3B,gCAAgC,EAChC,6BAA6B,EAC7B,qBAAqB,IAAI,eAAe,EACxC,sBAAsB,EACtB,2BAA2B,EAC3B,wCAAwC,EACxC,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,qCAAqC,EACrC,mCAAmC,EACnC,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,IAAI,EACJ,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,KAAK,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,8BAA8B,EAC9B,8BAA8B,EAC9B,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAC7E,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-express-suite/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,KAAK,UAAU,EACf,QAAQ,EACR,SAAS,EACT,cAAc,EACd,8BAA8B,EAC9B,2BAA2B,EAC3B,gCAAgC,EAChC,6BAA6B,EAC7B,qBAAqB,IAAI,eAAe,EACxC,sBAAsB,EACtB,2BAA2B,EAC3B,wCAAwC,EACxC,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,qCAAqC,EACrC,mCAAmC,EACnC,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,IAAI,EACJ,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,KAAK,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,8BAA8B,EAC9B,8BAA8B,EAC9B,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAC7E,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC"}
package/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseHostnames = exports.isValidHostname = exports.parseBackupCodes = exports.getLengthForLengthType = exports.getLengthEncodingTypeFromValue = exports.getLengthEncodingTypeForLength = exports.concatUint8Arrays = exports.arraysEqual = exports.randomBytes = exports.uint8ArrayToString = exports.stringToUint8Array = exports.crc16 = exports.hexToUint8Array = exports.uint8ArrayToHex = exports.base64ToUint8Array = exports.uint8ArrayToBase64 = exports.validateEnumCollection = exports.omit = exports.isValidTimezone = exports.decodeLengthEncodedData = exports.lengthEncodeData = exports.locatePEMRoot = exports.handleError = exports.sendRawJsonResponse = exports.sendApiMongoValidationErrorResponse = exports.sendApiExpressValidationErrorResponse = exports.sendApiErrorResponse = exports.sendApiMessageResponse = exports.withTransaction = exports.getDefaultBaseDelay = exports.DEFAULT_TRANSACTION_LOCK_REQUEST_TIMEOUT = exports.DEFAULT_TRANSACTION_TIMEOUT = exports.DEFAULT_RETRY_ATTEMPTS = exports.isValidStringId = exports.requireValidatedFieldsOrThrow = exports.requireOneOfValidatedFieldsAsync = exports.requireValidatedFieldsAsync = exports.mapZodIssuesToValidationErrors = exports.getValueAtPath = exports.directLog = exports.debugLog = exports.RouteBuilder = void 0;
3
+ exports.defaultMongoUriValidator = exports.parseHostnames = exports.isValidHostname = exports.parseBackupCodes = exports.getLengthForLengthType = exports.getLengthEncodingTypeFromValue = exports.getLengthEncodingTypeForLength = exports.concatUint8Arrays = exports.arraysEqual = exports.randomBytes = exports.uint8ArrayToString = exports.stringToUint8Array = exports.crc16 = exports.hexToUint8Array = exports.uint8ArrayToHex = exports.base64ToUint8Array = exports.uint8ArrayToBase64 = exports.validateEnumCollection = exports.omit = exports.isValidTimezone = exports.decodeLengthEncodedData = exports.lengthEncodeData = exports.locatePEMRoot = exports.handleError = exports.sendRawJsonResponse = exports.sendApiMongoValidationErrorResponse = exports.sendApiExpressValidationErrorResponse = exports.sendApiErrorResponse = exports.sendApiMessageResponse = exports.withTransaction = exports.getDefaultBaseDelay = exports.DEFAULT_TRANSACTION_LOCK_REQUEST_TIMEOUT = exports.DEFAULT_TRANSACTION_TIMEOUT = exports.DEFAULT_RETRY_ATTEMPTS = exports.isValidStringId = exports.requireValidatedFieldsOrThrow = exports.requireOneOfValidatedFieldsAsync = exports.requireValidatedFieldsAsync = exports.mapZodIssuesToValidationErrors = exports.getValueAtPath = exports.directLog = exports.debugLog = exports.RouteBuilder = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  require("reflect-metadata");
6
6
  tslib_1.__exportStar(require("./application"), exports);
@@ -81,4 +81,6 @@ Object.defineProperty(exports, "parseBackupCodes", { enumerable: true, get: func
81
81
  Object.defineProperty(exports, "isValidHostname", { enumerable: true, get: function () { return utils_1.isValidHostname; } });
82
82
  Object.defineProperty(exports, "parseHostnames", { enumerable: true, get: function () { return utils_1.parseHostnames; } });
83
83
  tslib_1.__exportStar(require("./validation"), exports);
84
+ var default_mongo_uri_validator_1 = require("./utils/default-mongo-uri-validator");
85
+ Object.defineProperty(exports, "defaultMongoUriValidator", { enumerable: true, get: function () { return default_mongo_uri_validator_1.defaultMongoUriValidator; } });
84
86
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-express-suite/src/index.ts"],"names":[],"mappings":";;;;AAAA,4BAA0B;AAE1B,wDAA8B;AAC9B,6DAAmC;AACnC,iEAAuC;AACvC,wDAA8B;AAC9B,qDAA2B;AAC3B,sDAA4B;AAC5B,sDAA4B;AAC5B,wDAA8B;AAC9B,qDAA2B;AAC3B,uDAA6B;AAC7B,qDAA2B;AAC3B,sDAA4B;AAC5B,yDAA+B;AAC/B,wDAA8B;AAC9B,mDAAyB;AACzB,yDAA+B;AAC/B,8DAAoC;AACpC,yDAA+B;AAC/B,uDAA6B;AAC7B,wDAA8B;AAC9B,6DAAmC;AACnC,2DAAiC;AACjC,mDAAyB;AACzB,qDAA2B;AAC3B,oDAA0B;AAC1B,qDAA2B;AAC3B,sDAA4B;AAC5B,oDAA0B;AAC1B,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AAErB,oDAA0B;AAC1B,qDAA2B;AAC3B,yDAA+B;AAC/B,kDAAwB;AACxB,oDAA0B;AAC1B,iCA4CiB;AA1Cf,iGAAA,QAAQ,OAAA;AACR,kGAAA,SAAS,OAAA;AACT,uGAAA,cAAc,OAAA;AACd,uHAAA,8BAA8B,OAAA;AAC9B,oHAAA,2BAA2B,OAAA;AAC3B,yHAAA,gCAAgC,OAAA;AAChC,sHAAA,6BAA6B,OAAA;AAC7B,wGAAA,qBAAqB,OAAmB;AACxC,+GAAA,sBAAsB,OAAA;AACtB,oHAAA,2BAA2B,OAAA;AAC3B,iIAAA,wCAAwC,OAAA;AAExC,4GAAA,mBAAmB,OAAA;AACnB,wGAAA,eAAe,OAAA;AACf,+GAAA,sBAAsB,OAAA;AACtB,6GAAA,oBAAoB,OAAA;AACpB,8HAAA,qCAAqC,OAAA;AACrC,4HAAA,mCAAmC,OAAA;AACnC,4GAAA,mBAAmB,OAAA;AACnB,oGAAA,WAAW,OAAA;AACX,sGAAA,aAAa,OAAA;AACb,yGAAA,gBAAgB,OAAA;AAChB,gHAAA,uBAAuB,OAAA;AACvB,wGAAA,eAAe,OAAA;AACf,6FAAA,IAAI,OAAA;AACJ,+GAAA,sBAAsB,OAAA;AACtB,2GAAA,kBAAkB,OAAA;AAClB,2GAAA,kBAAkB,OAAA;AAClB,wGAAA,eAAe,OAAA;AACf,wGAAA,eAAe,OAAA;AACf,8FAAA,KAAK,OAAA;AACL,2GAAA,kBAAkB,OAAA;AAClB,2GAAA,kBAAkB,OAAA;AAClB,oGAAA,WAAW,OAAA;AACX,oGAAA,WAAW,OAAA;AACX,0GAAA,iBAAiB,OAAA;AACjB,uHAAA,8BAA8B,OAAA;AAC9B,uHAAA,8BAA8B,OAAA;AAC9B,+GAAA,sBAAsB,OAAA;AACtB,yGAAA,gBAAgB,OAAA;AAChB,wGAAA,eAAe,OAAA;AACf,uGAAA,cAAc,OAAA;AAGhB,uDAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/digitaldefiance-node-express-suite/src/index.ts"],"names":[],"mappings":";;;;AAAA,4BAA0B;AAE1B,wDAA8B;AAC9B,6DAAmC;AACnC,iEAAuC;AACvC,wDAA8B;AAC9B,qDAA2B;AAC3B,sDAA4B;AAC5B,sDAA4B;AAC5B,wDAA8B;AAC9B,qDAA2B;AAC3B,uDAA6B;AAC7B,qDAA2B;AAC3B,sDAA4B;AAC5B,yDAA+B;AAC/B,wDAA8B;AAC9B,mDAAyB;AACzB,yDAA+B;AAC/B,8DAAoC;AACpC,yDAA+B;AAC/B,uDAA6B;AAC7B,wDAA8B;AAC9B,6DAAmC;AACnC,2DAAiC;AACjC,mDAAyB;AACzB,qDAA2B;AAC3B,oDAA0B;AAC1B,qDAA2B;AAC3B,sDAA4B;AAC5B,oDAA0B;AAC1B,qCAAyC;AAAhC,uGAAA,YAAY,OAAA;AAErB,oDAA0B;AAC1B,qDAA2B;AAC3B,yDAA+B;AAC/B,kDAAwB;AACxB,oDAA0B;AAC1B,iCA4CiB;AA1Cf,iGAAA,QAAQ,OAAA;AACR,kGAAA,SAAS,OAAA;AACT,uGAAA,cAAc,OAAA;AACd,uHAAA,8BAA8B,OAAA;AAC9B,oHAAA,2BAA2B,OAAA;AAC3B,yHAAA,gCAAgC,OAAA;AAChC,sHAAA,6BAA6B,OAAA;AAC7B,wGAAA,qBAAqB,OAAmB;AACxC,+GAAA,sBAAsB,OAAA;AACtB,oHAAA,2BAA2B,OAAA;AAC3B,iIAAA,wCAAwC,OAAA;AAExC,4GAAA,mBAAmB,OAAA;AACnB,wGAAA,eAAe,OAAA;AACf,+GAAA,sBAAsB,OAAA;AACtB,6GAAA,oBAAoB,OAAA;AACpB,8HAAA,qCAAqC,OAAA;AACrC,4HAAA,mCAAmC,OAAA;AACnC,4GAAA,mBAAmB,OAAA;AACnB,oGAAA,WAAW,OAAA;AACX,sGAAA,aAAa,OAAA;AACb,yGAAA,gBAAgB,OAAA;AAChB,gHAAA,uBAAuB,OAAA;AACvB,wGAAA,eAAe,OAAA;AACf,6FAAA,IAAI,OAAA;AACJ,+GAAA,sBAAsB,OAAA;AACtB,2GAAA,kBAAkB,OAAA;AAClB,2GAAA,kBAAkB,OAAA;AAClB,wGAAA,eAAe,OAAA;AACf,wGAAA,eAAe,OAAA;AACf,8FAAA,KAAK,OAAA;AACL,2GAAA,kBAAkB,OAAA;AAClB,2GAAA,kBAAkB,OAAA;AAClB,oGAAA,WAAW,OAAA;AACX,oGAAA,WAAW,OAAA;AACX,0GAAA,iBAAiB,OAAA;AACjB,uHAAA,8BAA8B,OAAA;AAC9B,uHAAA,8BAA8B,OAAA;AAC9B,+GAAA,sBAAsB,OAAA;AACtB,yGAAA,gBAAgB,OAAA;AAChB,wGAAA,eAAe,OAAA;AACf,uGAAA,cAAc,OAAA;AAGhB,uDAA6B;AAC7B,mFAA+E;AAAtE,uIAAA,wBAAwB,OAAA"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @fileoverview Storage-agnostic interface for database operations.
3
+ * Implementations wrap specific database technologies (mongoose, BrightChainDb, etc.).
4
+ * @module interfaces/document-store
5
+ */
6
+ import { Model } from '@digitaldefiance/mongoose-types';
7
+ import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
8
+ import { MongoMemoryReplSet } from 'mongodb-memory-server';
9
+ import { IBaseDocument } from '../documents/base';
10
+ import { ISchema } from './schema';
11
+ import { IApplication } from './application';
12
+ /**
13
+ * Storage-agnostic interface for database operations.
14
+ * Implementations wrap specific database technologies (mongoose, BrightChainDb, etc.).
15
+ * @template TID - Platform-specific ID type extending PlatformID
16
+ * @template TModelDocs - Record mapping model names to their document types
17
+ */
18
+ export interface IDocumentStore<TID extends PlatformID = Buffer, TModelDocs extends Record<string, IBaseDocument<any, TID>> = Record<string, IBaseDocument<any, TID>>> {
19
+ /** Connect to the backing store. URI may be ignored by non-network stores. */
20
+ connect(uri?: string): Promise<void>;
21
+ /** Disconnect from the backing store. */
22
+ disconnect(): Promise<void>;
23
+ /** Whether the store is currently connected and ready for operations. */
24
+ isConnected(): boolean;
25
+ /** Retrieve a model/collection handle by name. */
26
+ getModel<T extends IBaseDocument<any, TID>>(modelName: string): Model<T>;
27
+ /** The schema map, if available (populated after connect). */
28
+ readonly schemaMap?: {
29
+ [K in keyof TModelDocs]: ISchema<TID, TModelDocs[K]>;
30
+ };
31
+ /** The dev database instance, if any (for cleanup on stop). */
32
+ readonly devDatabase?: MongoMemoryReplSet;
33
+ /** Optional: provision a dev/test database, returning its connection URI. */
34
+ setupDevStore?(): Promise<string | void>;
35
+ /** Optional: seed the dev database with initial data. */
36
+ initializeDevStore?<TInitResults>(app: IApplication<TID>): Promise<TInitResults>;
37
+ }
38
+ //# sourceMappingURL=document-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-store.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/document-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;GAKG;AAEH,MAAM,WAAW,cAAc,CAC7B,GAAG,SAAS,UAAU,GAAG,MAAM,EAC/B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CACjE,MAAM,EACN,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CACxB;IAED,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,yCAAyC;IACzC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,yEAAyE;IACzE,WAAW,IAAI,OAAO,CAAC;IAEvB,kDAAkD;IAClD,QAAQ,CAAC,CAAC,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEzE,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE;SAAG,CAAC,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;KAAE,CAAC;IAE9E,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAE1C,6EAA6E;IAC7E,aAAa,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEzC,yDAAyD;IACzD,kBAAkB,CAAC,CAAC,YAAY,EAC9B,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,GACrB,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1B"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Storage-agnostic interface for database operations.
4
+ * Implementations wrap specific database technologies (mongoose, BrightChainDb, etc.).
5
+ * @module interfaces/document-store
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=document-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-store.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/document-store.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
@@ -1,20 +1,7 @@
1
1
  /**
2
2
  * @fileoverview Failable result interface for operation outcomes.
3
- * Generic interface for operations that can succeed or fail.
3
+ * Re-exported from @brightchain/brightchain-lib for backward compatibility.
4
4
  * @module interfaces/failable-result
5
5
  */
6
- /**
7
- * Result of an operation that can succeed or fail.
8
- * @template T - Result data type
9
- * @property {boolean} success - True if operation succeeded
10
- * @property {T} [data] - Result data if successful
11
- * @property {string} [message] - Success or informational message
12
- * @property {string | Error} [error] - Error message or object if failed
13
- */
14
- export interface IFailableResult<T> {
15
- success: boolean;
16
- data?: T;
17
- message?: string;
18
- error?: string | Error;
19
- }
6
+ export type { IFailableResult } from '@brightchain/brightchain-lib';
20
7
  //# sourceMappingURL=failable-result.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"failable-result.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/failable-result.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACxB"}
1
+ {"version":3,"file":"failable-result.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/failable-result.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC"}
@@ -1,8 +1,3 @@
1
1
  "use strict";
2
- /**
3
- * @fileoverview Failable result interface for operation outcomes.
4
- * Generic interface for operations that can succeed or fail.
5
- * @module interfaces/failable-result
6
- */
7
2
  Object.defineProperty(exports, "__esModule", { value: true });
8
3
  //# sourceMappingURL=failable-result.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"failable-result.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/failable-result.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
1
+ {"version":3,"file":"failable-result.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/failable-result.ts"],"names":[],"mappings":""}
@@ -1,3 +1,4 @@
1
+ export * from './document-store';
1
2
  export * from './api-error-response';
2
3
  export * from './api-express-validation-error-response';
3
4
  export * from './api-message-response';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,yCAAyC,CAAC;AACxD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AAEjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yCAAyC,CAAC;AACxD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./document-store"), exports);
4
5
  tslib_1.__exportStar(require("./api-error-response"), exports);
5
6
  tslib_1.__exportStar(require("./api-express-validation-error-response"), exports);
6
7
  tslib_1.__exportStar(require("./api-message-response"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/index.ts"],"names":[],"mappings":";;;AAAA,+DAAqC;AACrC,kFAAwD;AACxD,iEAAuC;AACvC,gFAAsD;AACtD,0DAAgC;AAChC,wDAA8B;AAC9B,4DAAkC;AAClC,4DAAkC;AAClC,4DAAkC;AAClC,sDAA4B;AAC5B,8DAAoC;AACpC,+DAAqC;AACrC,uDAA6B;AAC7B,2DAAiC;AACjC,2DAAiC;AACjC,sEAA4C;AAC5C,0DAAgC;AAChC,wDAA8B;AAC9B,8DAAoC;AACpC,4DAAkC;AAClC,uDAA6B;AAC7B,yDAA+B;AAC/B,qEAA2C;AAC3C,uDAA6B;AAC7B,8DAAoC;AACpC,mDAAyB;AACzB,yDAA+B;AAC/B,oDAA0B;AAC1B,oDAA0B;AAC1B,yDAA+B;AAC/B,iEAAuC;AACvC,mDAAyB;AACzB,+DAAqC;AACrC,iEAAuC;AACvC,yEAA+C;AAC/C,2DAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/index.ts"],"names":[],"mappings":";;;AAAA,2DAAiC;AAEjC,+DAAqC;AACrC,kFAAwD;AACxD,iEAAuC;AACvC,gFAAsD;AACtD,0DAAgC;AAChC,wDAA8B;AAC9B,4DAAkC;AAClC,4DAAkC;AAClC,4DAAkC;AAClC,sDAA4B;AAC5B,8DAAoC;AACpC,+DAAqC;AACrC,uDAA6B;AAC7B,2DAAiC;AACjC,2DAAiC;AACjC,sEAA4C;AAC5C,0DAAgC;AAChC,wDAA8B;AAC9B,8DAAoC;AACpC,4DAAkC;AAClC,uDAA6B;AAC7B,yDAA+B;AAC/B,qEAA2C;AAC3C,uDAA6B;AAC7B,8DAAoC;AACpC,mDAAyB;AACzB,yDAA+B;AAC/B,oDAA0B;AAC1B,oDAA0B;AAC1B,yDAA+B;AAC/B,iEAAuC;AACvC,mDAAyB;AACzB,+DAAqC;AACrC,iEAAuC;AACvC,yEAA+C;AAC/C,2DAAiC"}
@@ -19,4 +19,8 @@ export * from './xor';
19
19
  export * from './upnp';
20
20
  export * from './upnp-config';
21
21
  export * from './upnp-manager';
22
+ export * from './mongoose-document-store';
23
+ export * from './mongoose-session-adapter';
24
+ export * from './mongoose-collection';
25
+ export * from './mongoose-database';
22
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,OAAO,CAAC;AACtB,cAAc,qBAAqB,CAAC;AACpC,cAAc,OAAO,CAAC;AACtB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,OAAO,CAAC;AACtB,cAAc,qBAAqB,CAAC;AACpC,cAAc,OAAO,CAAC;AACtB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
@@ -22,4 +22,8 @@ tslib_1.__exportStar(require("./xor"), exports);
22
22
  tslib_1.__exportStar(require("./upnp"), exports);
23
23
  tslib_1.__exportStar(require("./upnp-config"), exports);
24
24
  tslib_1.__exportStar(require("./upnp-manager"), exports);
25
+ tslib_1.__exportStar(require("./mongoose-document-store"), exports);
26
+ tslib_1.__exportStar(require("./mongoose-session-adapter"), exports);
27
+ tslib_1.__exportStar(require("./mongoose-collection"), exports);
28
+ tslib_1.__exportStar(require("./mongoose-database"), exports);
25
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,iDAAuB;AACvB,qDAA2B;AAC3B,oEAA0C;AAC1C,0DAAgC;AAChC,+DAAqC;AACrC,gEAAsC;AACtC,gDAAsB;AACtB,8DAAoC;AACpC,gDAAsB;AACtB,yDAA+B;AAC/B,qDAA2B;AAC3B,yDAA+B;AAC/B,iDAAuB;AACvB,sDAA4B;AAC5B,wDAA8B;AAC9B,iDAAuB;AACvB,gDAAsB;AACtB,iDAAuB;AACvB,wDAA8B;AAC9B,yDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,iDAAuB;AACvB,qDAA2B;AAC3B,oEAA0C;AAC1C,0DAAgC;AAChC,+DAAqC;AACrC,gEAAsC;AACtC,gDAAsB;AACtB,8DAAoC;AACpC,gDAAsB;AACtB,yDAA+B;AAC/B,qDAA2B;AAC3B,yDAA+B;AAC/B,iDAAuB;AACvB,sDAA4B;AAC5B,wDAA8B;AAC9B,iDAAuB;AACvB,gDAAsB;AACtB,iDAAuB;AACvB,wDAA8B;AAC9B,yDAA+B;AAC/B,oEAA0C;AAC1C,qEAA2C;AAC3C,gEAAsC;AACtC,8DAAoC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @fileoverview Mongoose collection adapter implementing ICollection.
3
+ * Wraps a mongoose Model to conform to the shared ICollection interface
4
+ * from brightchain-lib.
5
+ * @module services/mongoose-collection
6
+ */
7
+ import type { AggregationStage, BsonDocument, BulkWriteOperation, BulkWriteOptions, BulkWriteResult, ChangeListener, CollectionSchema, DeleteResult, DocumentId, FilterQuery, FindOptions, ICollection, IndexOptions, IndexSpec, InsertManyResult, InsertOneResult, ReadPreference, ReplaceResult, TextIndexOptions, UpdateOptions, UpdateQuery, UpdateResult, ValidationFieldError, WriteConcern, WriteOptions } from '@brightchain/brightchain-lib';
8
+ import type { Connection } from '@digitaldefiance/mongoose-types';
9
+ /**
10
+ * Adapts a mongoose Model to the ICollection<T> interface.
11
+ * Delegates CRUD, query, index, and bulk operations to the underlying
12
+ * mongoose model. Schema validation methods are no-ops since mongoose
13
+ * handles schema validation internally.
14
+ */
15
+ export declare class MongooseCollection<T extends BsonDocument = BsonDocument> implements ICollection<T> {
16
+ private _model;
17
+ private _writeConcern;
18
+ private _readPreference;
19
+ constructor(connection: Connection, collectionName: string);
20
+ insertOne(doc: T, options?: WriteOptions): Promise<InsertOneResult>;
21
+ insertMany(docs: T[], options?: WriteOptions): Promise<InsertManyResult>;
22
+ findOne(filter?: FilterQuery<T>, options?: FindOptions<T>): Promise<T | null>;
23
+ find(filter?: FilterQuery<T>, options?: FindOptions<T>): Promise<T[]>;
24
+ findById(id: DocumentId): Promise<T | null>;
25
+ updateOne(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: UpdateOptions): Promise<UpdateResult>;
26
+ updateMany(filter: FilterQuery<T>, update: UpdateQuery<T>, options?: UpdateOptions): Promise<UpdateResult>;
27
+ deleteOne(filter: FilterQuery<T>, options?: WriteOptions): Promise<DeleteResult>;
28
+ deleteMany(filter: FilterQuery<T>, options?: WriteOptions): Promise<DeleteResult>;
29
+ replaceOne(filter: FilterQuery<T>, doc: T, options?: UpdateOptions): Promise<ReplaceResult>;
30
+ countDocuments(filter?: FilterQuery<T>): Promise<number>;
31
+ estimatedDocumentCount(): Promise<number>;
32
+ distinct<K extends keyof T>(field: K, filter?: FilterQuery<T>): Promise<Array<T[K]>>;
33
+ aggregate(pipeline: AggregationStage[]): Promise<BsonDocument[]>;
34
+ createIndex(spec: IndexSpec, options?: IndexOptions): Promise<string>;
35
+ dropIndex(name: string): Promise<void>;
36
+ listIndexes(): string[];
37
+ bulkWrite(operations: BulkWriteOperation<T>[], options?: BulkWriteOptions): Promise<BulkWriteResult>;
38
+ watch(listener: ChangeListener<T>): () => void;
39
+ setSchema(_schema: CollectionSchema): void;
40
+ getSchema(): CollectionSchema | undefined;
41
+ removeSchema(): void;
42
+ validateDoc(_doc: T): ValidationFieldError[];
43
+ getWriteConcern(): WriteConcern;
44
+ setWriteConcern(wc: WriteConcern): void;
45
+ getReadPreference(): ReadPreference;
46
+ setReadPreference(rp: ReadPreference): void;
47
+ createTextIndex(options: TextIndexOptions): string;
48
+ dropTextIndex(): void;
49
+ hasTextIndex(): boolean;
50
+ drop(): Promise<void>;
51
+ }
52
+ //# sourceMappingURL=mongoose-collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose-collection.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/mongoose-collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Mongoose collection adapter implementing ICollection.
4
+ * Wraps a mongoose Model to conform to the shared ICollection interface
5
+ * from brightchain-lib.
6
+ * @module services/mongoose-collection
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MongooseCollection = void 0;
10
+ const mongoose_types_1 = require("@digitaldefiance/mongoose-types");
11
+ const mongoose_session_adapter_1 = require("./mongoose-session-adapter");
12
+ /**
13
+ * Extract the native mongodb ClientSession from WriteOptions if present.
14
+ * The IClientSession in options may be a MongooseSessionAdapter wrapping
15
+ * a native session.
16
+ */
17
+ function extractNativeSession(options) {
18
+ if (!options?.session)
19
+ return undefined;
20
+ if (options.session instanceof mongoose_session_adapter_1.MongooseSessionAdapter) {
21
+ return options.session.nativeSession;
22
+ }
23
+ return undefined;
24
+ }
25
+ /**
26
+ * Adapts a mongoose Model to the ICollection<T> interface.
27
+ * Delegates CRUD, query, index, and bulk operations to the underlying
28
+ * mongoose model. Schema validation methods are no-ops since mongoose
29
+ * handles schema validation internally.
30
+ */
31
+ class MongooseCollection {
32
+ _model;
33
+ _writeConcern = { w: 1 };
34
+ _readPreference = 'primary';
35
+ constructor(connection, collectionName) {
36
+ // Get existing model or create a permissive one with a flexible schema
37
+ try {
38
+ this._model = connection.model(collectionName);
39
+ }
40
+ catch {
41
+ // Model doesn't exist yet — create with a permissive schema
42
+ const schema = new mongoose_types_1.Schema({}, { strict: false, versionKey: false });
43
+ this._model = connection.model(collectionName, schema);
44
+ }
45
+ }
46
+ // ── CRUD ──
47
+ async insertOne(doc, options) {
48
+ const session = extractNativeSession(options);
49
+ const created = await this._model.create([doc], { session });
50
+ const first = created[0];
51
+ return {
52
+ acknowledged: true,
53
+ insertedId: String(first._id),
54
+ };
55
+ }
56
+ async insertMany(docs, options) {
57
+ const session = extractNativeSession(options);
58
+ const created = await this._model.create(docs, { session });
59
+ const insertedIds = {};
60
+ for (let i = 0; i < created.length; i++) {
61
+ insertedIds[i] = String(created[i]._id);
62
+ }
63
+ return {
64
+ acknowledged: true,
65
+ insertedCount: created.length,
66
+ insertedIds,
67
+ };
68
+ }
69
+ async findOne(filter, options) {
70
+ const session = extractNativeSession(options);
71
+ const query = this._model.findOne((filter ?? {}), options?.projection, { session, lean: true });
72
+ if (options?.sort) {
73
+ query.sort(options.sort);
74
+ }
75
+ const result = await query.exec();
76
+ return result ?? null;
77
+ }
78
+ async find(filter, options) {
79
+ const session = extractNativeSession(options);
80
+ const query = this._model.find((filter ?? {}), options?.projection, { session, lean: true });
81
+ if (options?.sort) {
82
+ query.sort(options.sort);
83
+ }
84
+ if (options?.skip !== undefined) {
85
+ query.skip(options.skip);
86
+ }
87
+ if (options?.limit !== undefined) {
88
+ query.limit(options.limit);
89
+ }
90
+ const results = await query.exec();
91
+ return results;
92
+ }
93
+ async findById(id) {
94
+ const result = await this._model.findById(id).lean().exec();
95
+ return result ?? null;
96
+ }
97
+ async updateOne(filter, update, options) {
98
+ const session = extractNativeSession(options);
99
+ const result = await this._model.updateOne(filter, update, { session, upsert: options?.upsert });
100
+ return {
101
+ acknowledged: result.acknowledged,
102
+ matchedCount: result.matchedCount,
103
+ modifiedCount: result.modifiedCount,
104
+ upsertedCount: result.upsertedCount,
105
+ upsertedId: result.upsertedId ? String(result.upsertedId) : undefined,
106
+ };
107
+ }
108
+ async updateMany(filter, update, options) {
109
+ const session = extractNativeSession(options);
110
+ const result = await this._model.updateMany(filter, update, { session, upsert: options?.upsert });
111
+ return {
112
+ acknowledged: result.acknowledged,
113
+ matchedCount: result.matchedCount,
114
+ modifiedCount: result.modifiedCount,
115
+ upsertedCount: result.upsertedCount,
116
+ upsertedId: result.upsertedId ? String(result.upsertedId) : undefined,
117
+ };
118
+ }
119
+ async deleteOne(filter, options) {
120
+ const session = extractNativeSession(options);
121
+ const result = await this._model.deleteOne(filter, { session });
122
+ return {
123
+ acknowledged: result.acknowledged,
124
+ deletedCount: result.deletedCount,
125
+ };
126
+ }
127
+ async deleteMany(filter, options) {
128
+ const session = extractNativeSession(options);
129
+ const result = await this._model.deleteMany(filter, { session });
130
+ return {
131
+ acknowledged: result.acknowledged,
132
+ deletedCount: result.deletedCount,
133
+ };
134
+ }
135
+ async replaceOne(filter, doc, options) {
136
+ const session = extractNativeSession(options);
137
+ const result = await this._model.replaceOne(filter, doc, { session, upsert: options?.upsert });
138
+ return {
139
+ acknowledged: result.acknowledged,
140
+ matchedCount: result.matchedCount,
141
+ modifiedCount: result.modifiedCount,
142
+ upsertedCount: result.upsertedCount,
143
+ upsertedId: result.upsertedId ? String(result.upsertedId) : undefined,
144
+ };
145
+ }
146
+ // ── Query ──
147
+ async countDocuments(filter) {
148
+ return this._model
149
+ .countDocuments((filter ?? {}))
150
+ .exec();
151
+ }
152
+ async estimatedDocumentCount() {
153
+ return this._model.estimatedDocumentCount().exec();
154
+ }
155
+ async distinct(field, filter) {
156
+ const result = await this._model
157
+ .distinct(String(field), (filter ?? {}))
158
+ .exec();
159
+ return result;
160
+ }
161
+ async aggregate(pipeline) {
162
+ // Use the native collection's aggregate to avoid mongoose PipelineStage type constraints
163
+ const cursor = this._model.collection.aggregate(pipeline);
164
+ const result = await cursor.toArray();
165
+ return result;
166
+ }
167
+ // ── Indexes ──
168
+ async createIndex(spec, options) {
169
+ const indexName = await this._model.collection.createIndex(spec, {
170
+ unique: options?.unique,
171
+ name: options?.name,
172
+ sparse: options?.sparse,
173
+ background: options?.background,
174
+ expireAfterSeconds: options?.expireAfterSeconds,
175
+ });
176
+ return indexName;
177
+ }
178
+ async dropIndex(name) {
179
+ await this._model.collection.dropIndex(name);
180
+ }
181
+ listIndexes() {
182
+ // Synchronous listing is not directly supported by mongoose.
183
+ // Return an empty array; callers needing async index listing
184
+ // should use the native collection directly.
185
+ return [];
186
+ }
187
+ // ── Bulk operations ──
188
+ async bulkWrite(operations, options) {
189
+ const session = extractNativeSession(options);
190
+ const mongooseOps = operations.map((op) => {
191
+ if ('insertOne' in op) {
192
+ return {
193
+ insertOne: {
194
+ document: op.insertOne.document,
195
+ },
196
+ };
197
+ }
198
+ if ('updateOne' in op) {
199
+ return {
200
+ updateOne: {
201
+ filter: op.updateOne.filter,
202
+ update: op.updateOne.update,
203
+ upsert: op.updateOne.upsert,
204
+ },
205
+ };
206
+ }
207
+ if ('updateMany' in op) {
208
+ return {
209
+ updateMany: {
210
+ filter: op.updateMany.filter,
211
+ update: op.updateMany.update,
212
+ },
213
+ };
214
+ }
215
+ if ('deleteOne' in op) {
216
+ return {
217
+ deleteOne: { filter: op.deleteOne.filter },
218
+ };
219
+ }
220
+ if ('deleteMany' in op) {
221
+ return {
222
+ deleteMany: {
223
+ filter: op.deleteMany.filter,
224
+ },
225
+ };
226
+ }
227
+ if ('replaceOne' in op) {
228
+ return {
229
+ replaceOne: {
230
+ filter: op.replaceOne.filter,
231
+ replacement: op.replaceOne.replacement,
232
+ upsert: op.replaceOne.upsert,
233
+ },
234
+ };
235
+ }
236
+ return op;
237
+ });
238
+ const result = await this._model.bulkWrite(mongooseOps, { session, ordered: options?.ordered });
239
+ return {
240
+ acknowledged: true,
241
+ insertedCount: result.insertedCount,
242
+ matchedCount: result.matchedCount,
243
+ modifiedCount: result.modifiedCount,
244
+ deletedCount: result.deletedCount,
245
+ upsertedCount: result.upsertedCount,
246
+ insertedIds: {},
247
+ upsertedIds: {},
248
+ };
249
+ }
250
+ // ── Change streams ──
251
+ watch(listener) {
252
+ const changeStream = this._model.watch();
253
+ changeStream.on('change', (change) => {
254
+ listener({
255
+ operationType: change['operationType'],
256
+ documentKey: change['documentKey'],
257
+ fullDocument: change['fullDocument'],
258
+ updateDescription: change['updateDescription'],
259
+ ns: change['ns'],
260
+ timestamp: new Date(),
261
+ });
262
+ });
263
+ return () => {
264
+ void changeStream.close();
265
+ };
266
+ }
267
+ // ── Schema validation (no-ops for mongoose) ──
268
+ setSchema(_schema) {
269
+ // No-op: mongoose handles schema validation internally
270
+ }
271
+ getSchema() {
272
+ // No-op: mongoose handles schema validation internally
273
+ return undefined;
274
+ }
275
+ removeSchema() {
276
+ // No-op: mongoose handles schema validation internally
277
+ }
278
+ validateDoc(_doc) {
279
+ // No validation errors — mongoose handles validation internally
280
+ return [];
281
+ }
282
+ // ── Write concern / Read preference ──
283
+ getWriteConcern() {
284
+ return this._writeConcern;
285
+ }
286
+ setWriteConcern(wc) {
287
+ this._writeConcern = wc;
288
+ }
289
+ getReadPreference() {
290
+ return this._readPreference;
291
+ }
292
+ setReadPreference(rp) {
293
+ this._readPreference = rp;
294
+ }
295
+ // ── Text index ──
296
+ createTextIndex(options) {
297
+ const indexSpec = {};
298
+ for (const field of Object.keys(options.fields)) {
299
+ indexSpec[field] = 'text';
300
+ }
301
+ const indexName = options.name ?? 'text_index';
302
+ void this._model.collection.createIndex(indexSpec, {
303
+ name: indexName,
304
+ weights: options.fields,
305
+ default_language: options.defaultLanguage,
306
+ });
307
+ return indexName;
308
+ }
309
+ dropTextIndex() {
310
+ // Attempt to drop the text index; best-effort
311
+ void this._model.collection.dropIndex('text_index').catch(() => {
312
+ // Ignore errors if the index doesn't exist
313
+ });
314
+ }
315
+ hasTextIndex() {
316
+ // Synchronous check is not possible with mongoose.
317
+ // Return false; callers needing accurate info should check asynchronously.
318
+ return false;
319
+ }
320
+ // ── Lifecycle ──
321
+ async drop() {
322
+ await this._model.collection.drop();
323
+ }
324
+ }
325
+ exports.MongooseCollection = MongooseCollection;
326
+ //# sourceMappingURL=mongoose-collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose-collection.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/services/mongoose-collection.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA8BH,oEAAyD;AAEzD,yEAAoE;AAEpE;;;;GAIG;AACH,SAAS,oBAAoB,CAC3B,OAAkE;IAElE,IAAI,CAAC,OAAO,EAAE,OAAO;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,OAAO,CAAC,OAAO,YAAY,iDAAsB,EAAE,CAAC;QACtD,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;IACvC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAa,kBAAkB;IAGrB,MAAM,CAAW;IACjB,aAAa,GAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACvC,eAAe,GAAmB,SAAS,CAAC;IAEpD,YAAY,UAAsB,EAAE,cAAsB;QACxD,uEAAuE;QACvE,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAI,cAAc,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;YAC5D,MAAM,MAAM,GAAG,IAAI,uBAAM,CAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAI,cAAc,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,aAAa;IAEb,KAAK,CAAC,SAAS,CAAC,GAAM,EAAE,OAAsB;QAC5C,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,IAAS,EACT,OAAsB;QAEtB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,MAAM,WAAW,GAA+B,EAAE,CAAC;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,OAAO,CAAC,MAAM;YAC7B,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAAuB,EACvB,OAAwB;QAExB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAC/B,CAAC,MAAM,IAAI,EAAE,CAA4B,EACzC,OAAO,EAAE,UAAgD,EACzD,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CACxB,CAAC;QACF,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAA8B,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAClC,OAAQ,MAAmB,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAuB,EAAE,OAAwB;QAC1D,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC5B,CAAC,MAAM,IAAI,EAAE,CAA4B,EACzC,OAAO,EAAE,UAAgD,EACzD,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CACxB,CAAC;QACF,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAA8B,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,OAAO,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,OAAc,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAc;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QAC5D,OAAQ,MAAmB,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,SAAS,CACb,MAAsB,EACtB,MAAsB,EACtB,OAAuB;QAEvB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CACxC,MAAiC,EACjC,MAAiC,EACjC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CACrC,CAAC;QACF,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,MAAsB,EACtB,MAAsB,EACtB,OAAuB;QAEvB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CACzC,MAAiC,EACjC,MAAiC,EACjC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CACrC,CAAC;QACF,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,MAAsB,EACtB,OAAsB;QAEtB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CACxC,MAAiC,EACjC,EAAE,OAAO,EAAE,CACZ,CAAC;QACF,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,MAAsB,EACtB,OAAsB;QAEtB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CACzC,MAAiC,EACjC,EAAE,OAAO,EAAE,CACZ,CAAC;QACF,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,MAAsB,EACtB,GAAM,EACN,OAAuB;QAEvB,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CACzC,MAAiC,EACjC,GAA8B,EAC9B,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CACrC,CAAC;QACF,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC;IACJ,CAAC;IAED,cAAc;IAEd,KAAK,CAAC,cAAc,CAAC,MAAuB;QAC1C,OAAO,IAAI,CAAC,MAAM;aACf,cAAc,CAAC,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;aACzD,IAAI,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,KAAQ,EACR,MAAuB;QAEvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM;aAC7B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;aAClE,IAAI,EAAE,CAAC;QACV,OAAO,MAAqB,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAA4B;QAC1C,yFAAyF;QACzF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAC7C,QAAqC,CACtC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACtC,OAAO,MAAwB,CAAC;IAClC,CAAC;IAED,gBAAgB;IAEhB,KAAK,CAAC,WAAW,CAAC,IAAe,EAAE,OAAsB;QACvD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE;YAC/D,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,IAAI,EAAE,OAAO,EAAE,IAAI;YACnB,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,UAAU,EAAE,OAAO,EAAE,UAAU;YAC/B,kBAAkB,EAAE,OAAO,EAAE,kBAAkB;SAChD,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW;QACT,6DAA6D;QAC7D,6DAA6D;QAC7D,6CAA6C;QAC7C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,wBAAwB;IAExB,KAAK,CAAC,SAAS,CACb,UAAmC,EACnC,OAA0B;QAE1B,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACxC,IAAI,WAAW,IAAI,EAAE,EAAE,CAAC;gBACtB,OAAO;oBACL,SAAS,EAAE;wBACT,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,QAAmC;qBAC3D;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,WAAW,IAAI,EAAE,EAAE,CAAC;gBACtB,OAAO;oBACL,SAAS,EAAE;wBACT,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAiC;wBACtD,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAiC;wBACtD,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM;qBAC5B;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;gBACvB,OAAO;oBACL,UAAU,EAAE;wBACV,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAiC;wBACvD,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAiC;qBACxD;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,WAAW,IAAI,EAAE,EAAE,CAAC;gBACtB,OAAO;oBACL,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAiC,EAAE;iBACtE,CAAC;YACJ,CAAC;YACD,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;gBACvB,OAAO;oBACL,UAAU,EAAE;wBACV,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAiC;qBACxD;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;gBACvB,OAAO;oBACL,UAAU,EAAE;wBACV,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAiC;wBACvD,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC,WAAsC;wBACjE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM;qBAC7B;iBACF,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CACxC,WAA0D,EAC1D,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CACvC,CAAC;QAEF,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,uBAAuB;IAEvB,KAAK,CAAC,QAA2B;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAA+B,EAAE,EAAE;YAC5D,QAAQ,CAAC;gBACP,aAAa,EAAE,MAAM,CAAC,eAAe,CAIzB;gBACZ,WAAW,EAAE,MAAM,CAAC,aAAa,CAAwB;gBACzD,YAAY,EAAE,MAAM,CAAC,cAAc,CAAkB;gBACrD,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,CAEhC;gBACb,EAAE,EAAE,MAAM,CAAC,IAAI,CAAiC;gBAChD,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,KAAK,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC;IAED,gDAAgD;IAEhD,SAAS,CAAC,OAAyB;QACjC,uDAAuD;IACzD,CAAC;IAED,SAAS;QACP,uDAAuD;QACvD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,YAAY;QACV,uDAAuD;IACzD,CAAC;IAED,WAAW,CAAC,IAAO;QACjB,gEAAgE;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,wCAAwC;IAExC,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,eAAe,CAAC,EAAgB;QAC9B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,iBAAiB,CAAC,EAAkB;QAClC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED,mBAAmB;IAEnB,eAAe,CAAC,OAAyB;QACvC,MAAM,SAAS,GAAoC,EAAE,CAAC;QACtD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAChD,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QAC5B,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;QAC/C,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CACrC,SAA4C,EAC5C;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,gBAAgB,EAAE,OAAO,CAAC,eAAe;SAC1C,CACF,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,aAAa;QACX,8CAA8C;QAC9C,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC7D,2CAA2C;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY;QACV,mDAAmD;QACnD,2EAA2E;QAC3E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;IAElB,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;CACF;AAvZD,gDAuZC"}