@decaf-ts/for-couchdb 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/LICENSE.md +646 -144
  2. package/README.md +371 -1
  3. package/dist/for-couchdb.cjs +907 -326
  4. package/dist/for-couchdb.esm.cjs +910 -329
  5. package/lib/adapter.cjs +249 -41
  6. package/lib/adapter.d.ts +243 -17
  7. package/lib/constants.cjs +30 -2
  8. package/lib/constants.d.ts +28 -0
  9. package/lib/errors.cjs +19 -2
  10. package/lib/errors.d.ts +17 -0
  11. package/lib/esm/adapter.d.ts +243 -17
  12. package/lib/esm/adapter.js +249 -41
  13. package/lib/esm/constants.d.ts +28 -0
  14. package/lib/esm/constants.js +30 -2
  15. package/lib/esm/errors.d.ts +17 -0
  16. package/lib/esm/errors.js +19 -2
  17. package/lib/esm/index.d.ts +6 -13
  18. package/lib/esm/index.js +7 -14
  19. package/lib/esm/indexes/generator.d.ts +47 -0
  20. package/lib/esm/indexes/generator.js +58 -1
  21. package/lib/esm/interfaces/CouchDBRepository.d.ts +10 -0
  22. package/lib/esm/interfaces/CouchDBRepository.js +1 -1
  23. package/lib/esm/model/CouchDBSequence.d.ts +15 -9
  24. package/lib/esm/model/CouchDBSequence.js +12 -1
  25. package/lib/esm/query/Paginator.d.ts +117 -4
  26. package/lib/esm/query/Paginator.js +128 -23
  27. package/lib/esm/query/Statement.d.ts +141 -8
  28. package/lib/esm/query/Statement.js +256 -28
  29. package/lib/esm/query/constants.d.ts +43 -0
  30. package/lib/esm/query/constants.js +44 -1
  31. package/lib/esm/query/index.d.ts +4 -1
  32. package/lib/esm/query/index.js +5 -2
  33. package/lib/esm/query/translate.d.ts +31 -0
  34. package/lib/esm/query/translate.js +32 -1
  35. package/lib/esm/sequences/Sequence.d.ts +0 -2
  36. package/lib/esm/sequences/Sequence.js +5 -9
  37. package/lib/esm/types.d.ts +55 -12
  38. package/lib/esm/types.js +1 -1
  39. package/lib/esm/utils.d.ts +105 -0
  40. package/lib/esm/utils.js +106 -1
  41. package/lib/index.cjs +7 -14
  42. package/lib/index.d.ts +6 -13
  43. package/lib/indexes/generator.cjs +58 -1
  44. package/lib/indexes/generator.d.ts +47 -0
  45. package/lib/interfaces/CouchDBRepository.cjs +1 -1
  46. package/lib/interfaces/CouchDBRepository.d.ts +10 -0
  47. package/lib/model/CouchDBSequence.cjs +12 -1
  48. package/lib/model/CouchDBSequence.d.ts +15 -9
  49. package/lib/query/Paginator.cjs +126 -21
  50. package/lib/query/Paginator.d.ts +117 -4
  51. package/lib/query/Statement.cjs +255 -27
  52. package/lib/query/Statement.d.ts +141 -8
  53. package/lib/query/constants.cjs +45 -2
  54. package/lib/query/constants.d.ts +43 -0
  55. package/lib/query/index.cjs +5 -2
  56. package/lib/query/index.d.ts +4 -1
  57. package/lib/query/translate.cjs +32 -1
  58. package/lib/query/translate.d.ts +31 -0
  59. package/lib/sequences/Sequence.cjs +5 -9
  60. package/lib/sequences/Sequence.d.ts +0 -2
  61. package/lib/types.cjs +1 -1
  62. package/lib/types.d.ts +55 -12
  63. package/lib/utils.cjs +106 -1
  64. package/lib/utils.d.ts +105 -0
  65. package/package.json +2 -2
  66. package/lib/esm/query/FromClause.d.ts +0 -7
  67. package/lib/esm/query/FromClause.js +0 -20
  68. package/lib/esm/query/InsertClause.d.ts +0 -7
  69. package/lib/esm/query/InsertClause.js +0 -13
  70. package/lib/esm/query/SelectClause.d.ts +0 -7
  71. package/lib/esm/query/SelectClause.js +0 -16
  72. package/lib/esm/query/ValuesClause.d.ts +0 -7
  73. package/lib/esm/query/ValuesClause.js +0 -12
  74. package/lib/esm/query/WhereClause.d.ts +0 -7
  75. package/lib/esm/query/WhereClause.js +0 -57
  76. package/lib/esm/query/factory.d.ts +0 -25
  77. package/lib/esm/query/factory.js +0 -117
  78. package/lib/esm/sequences/utils.d.ts +0 -1
  79. package/lib/esm/sequences/utils.js +0 -16
  80. package/lib/query/FromClause.cjs +0 -24
  81. package/lib/query/FromClause.d.ts +0 -7
  82. package/lib/query/InsertClause.cjs +0 -17
  83. package/lib/query/InsertClause.d.ts +0 -7
  84. package/lib/query/SelectClause.cjs +0 -20
  85. package/lib/query/SelectClause.d.ts +0 -7
  86. package/lib/query/ValuesClause.cjs +0 -16
  87. package/lib/query/ValuesClause.d.ts +0 -7
  88. package/lib/query/WhereClause.cjs +0 -61
  89. package/lib/query/WhereClause.d.ts +0 -7
  90. package/lib/query/factory.cjs +0 -121
  91. package/lib/query/factory.d.ts +0 -25
  92. package/lib/sequences/utils.cjs +0 -19
  93. package/lib/sequences/utils.d.ts +0 -1
package/lib/esm/index.js CHANGED
@@ -8,21 +8,14 @@ export * from "./errors";
8
8
  export * from "./types";
9
9
  export * from "./utils";
10
10
  /**
11
- * @summary Module summary
12
- * @description Module description
13
- * @module ts-workspace
11
+ * @description CouchDB adapter for Decaf.ts
12
+ * @summary A TypeScript adapter for CouchDB database operations, providing a seamless integration with the Decaf.ts framework. This module includes classes, interfaces, and utilities for working with CouchDB databases, including support for Mango queries, document operations, and sequence management.
13
+ * @module for-couchdb
14
14
  */
15
15
  /**
16
- * @summary Namespace summary
17
- * @description Namespace description
18
- * @namespace Namespace
19
- * @memberOf module:ts-workspace
20
- */
21
- /**
22
- * @summary stores the current package version
23
- * @description this is how you should document a constant
16
+ * @description Stores the current package version
17
+ * @summary The version string of the for-couchdb package
24
18
  * @const VERSION
25
- * @memberOf module:ts-workspace
26
19
  */
27
- export const VERSION = "0.3.0";
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFFeEI7Ozs7R0FJRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vaW5kZXhlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlcXVlbmNlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IE1vZHVsZSBzdW1tYXJ5XG4gKiBAZGVzY3JpcHRpb24gTW9kdWxlIGRlc2NyaXB0aW9uXG4gKiBAbW9kdWxlIHRzLXdvcmtzcGFjZVxuICovXG5cbi8qKlxuICogQHN1bW1hcnkgTmFtZXNwYWNlIHN1bW1hcnlcbiAqIEBkZXNjcmlwdGlvbiBOYW1lc3BhY2UgZGVzY3JpcHRpb25cbiAqIEBuYW1lc3BhY2UgTmFtZXNwYWNlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnRzLXdvcmtzcGFjZVxuICovXG5cbi8qKlxuICogQHN1bW1hcnkgc3RvcmVzIHRoZSBjdXJyZW50IHBhY2thZ2UgdmVyc2lvblxuICogQGRlc2NyaXB0aW9uIHRoaXMgaXMgaG93IHlvdSBzaG91bGQgZG9jdW1lbnQgYSBjb25zdGFudFxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dHMtd29ya3NwYWNlXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl19
20
+ export const VERSION = "0.3.2";
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFFeEI7Ozs7R0FJRztBQUVIOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vaW5kZXhlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlcXVlbmNlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb3VjaERCIGFkYXB0ZXIgZm9yIERlY2FmLnRzXG4gKiBAc3VtbWFyeSBBIFR5cGVTY3JpcHQgYWRhcHRlciBmb3IgQ291Y2hEQiBkYXRhYmFzZSBvcGVyYXRpb25zLCBwcm92aWRpbmcgYSBzZWFtbGVzcyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBEZWNhZi50cyBmcmFtZXdvcmsuIFRoaXMgbW9kdWxlIGluY2x1ZGVzIGNsYXNzZXMsIGludGVyZmFjZXMsIGFuZCB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBDb3VjaERCIGRhdGFiYXNlcywgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIE1hbmdvIHF1ZXJpZXMsIGRvY3VtZW50IG9wZXJhdGlvbnMsIGFuZCBzZXF1ZW5jZSBtYW5hZ2VtZW50LlxuICogQG1vZHVsZSBmb3ItY291Y2hkYlxuICovXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0b3JlcyB0aGUgY3VycmVudCBwYWNrYWdlIHZlcnNpb25cbiAqIEBzdW1tYXJ5IFRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgZm9yLWNvdWNoZGIgcGFja2FnZVxuICogQGNvbnN0IFZFUlNJT05cbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG4iXX0=
@@ -1,3 +1,50 @@
1
1
  import { Constructor, Model } from "@decaf-ts/decorator-validation";
2
2
  import { CreateIndexRequest } from "../types";
3
+ /**
4
+ * @description Generates CouchDB index configurations for models
5
+ * @summary Creates a set of CouchDB index configurations based on the metadata of the provided models
6
+ * @template M - The model type that extends Model
7
+ * @param models - Array of model constructors to generate indexes for
8
+ * @return {CreateIndexRequest[]} Array of CouchDB index configurations
9
+ * @function generateIndexes
10
+ * @memberOf module:for-couchdb
11
+ * @mermaid
12
+ * sequenceDiagram
13
+ * participant Caller
14
+ * participant generateIndexes
15
+ * participant generateIndexName
16
+ * participant Repository
17
+ *
18
+ * Caller->>generateIndexes: models
19
+ *
20
+ * Note over generateIndexes: Create base table index
21
+ * generateIndexes->>generateIndexName: [CouchDBKeys.TABLE]
22
+ * generateIndexName-->>generateIndexes: tableName
23
+ * generateIndexes->>generateIndexes: Create table index config
24
+ *
25
+ * loop For each model
26
+ * generateIndexes->>Repository: Get indexes metadata
27
+ * Repository-->>generateIndexes: index metadata
28
+ *
29
+ * loop For each index in metadata
30
+ * Note over generateIndexes: Extract index properties
31
+ * generateIndexes->>Repository: Get table name
32
+ * Repository-->>generateIndexes: tableName
33
+ *
34
+ * Note over generateIndexes: Define nested generate function
35
+ *
36
+ * generateIndexes->>generateIndexes: Call generate() for default order
37
+ * Note over generateIndexes: Create index name and config
38
+ *
39
+ * alt Has directions
40
+ * loop For each direction
41
+ * generateIndexes->>generateIndexes: Call generate(direction)
42
+ * Note over generateIndexes: Create ordered index config
43
+ * end
44
+ * end
45
+ * end
46
+ * end
47
+ *
48
+ * generateIndexes-->>Caller: Array of index configurations
49
+ */
3
50
  export declare function generateIndexes<M extends Model>(models: Constructor<M>[]): CreateIndexRequest[];
@@ -2,6 +2,16 @@ import { PersistenceKeys, Repository, } from "@decaf-ts/core";
2
2
  import { CouchDBKeys } from "../constants";
3
3
  import { DefaultSeparator } from "@decaf-ts/db-decorators";
4
4
  import { CouchDBOperator } from "../query/constants";
5
+ /**
6
+ * @description Generates a name for a CouchDB index
7
+ * @summary Creates a standardized name for a CouchDB index by combining name parts, compositions, and direction
8
+ * @param {string[]} name - Array of name parts for the index
9
+ * @param {OrderDirection} [direction] - Optional sort direction for the index
10
+ * @param {string[]} [compositions] - Optional additional attributes to include in the index name
11
+ * @param {string} [separator=DefaultSeparator] - The separator to use between parts of the index name
12
+ * @return {string} The generated index name
13
+ * @memberOf module:for-couchdb
14
+ */
5
15
  function generateIndexName(name, direction, compositions, separator = DefaultSeparator) {
6
16
  return [
7
17
  ...name.map((n) => (n === CouchDBKeys.TABLE ? "table" : n)),
@@ -10,6 +20,53 @@ function generateIndexName(name, direction, compositions, separator = DefaultSep
10
20
  CouchDBKeys.INDEX,
11
21
  ].join(separator);
12
22
  }
23
+ /**
24
+ * @description Generates CouchDB index configurations for models
25
+ * @summary Creates a set of CouchDB index configurations based on the metadata of the provided models
26
+ * @template M - The model type that extends Model
27
+ * @param models - Array of model constructors to generate indexes for
28
+ * @return {CreateIndexRequest[]} Array of CouchDB index configurations
29
+ * @function generateIndexes
30
+ * @memberOf module:for-couchdb
31
+ * @mermaid
32
+ * sequenceDiagram
33
+ * participant Caller
34
+ * participant generateIndexes
35
+ * participant generateIndexName
36
+ * participant Repository
37
+ *
38
+ * Caller->>generateIndexes: models
39
+ *
40
+ * Note over generateIndexes: Create base table index
41
+ * generateIndexes->>generateIndexName: [CouchDBKeys.TABLE]
42
+ * generateIndexName-->>generateIndexes: tableName
43
+ * generateIndexes->>generateIndexes: Create table index config
44
+ *
45
+ * loop For each model
46
+ * generateIndexes->>Repository: Get indexes metadata
47
+ * Repository-->>generateIndexes: index metadata
48
+ *
49
+ * loop For each index in metadata
50
+ * Note over generateIndexes: Extract index properties
51
+ * generateIndexes->>Repository: Get table name
52
+ * Repository-->>generateIndexes: tableName
53
+ *
54
+ * Note over generateIndexes: Define nested generate function
55
+ *
56
+ * generateIndexes->>generateIndexes: Call generate() for default order
57
+ * Note over generateIndexes: Create index name and config
58
+ *
59
+ * alt Has directions
60
+ * loop For each direction
61
+ * generateIndexes->>generateIndexes: Call generate(direction)
62
+ * Note over generateIndexes: Create ordered index config
63
+ * end
64
+ * end
65
+ * end
66
+ * end
67
+ *
68
+ * generateIndexes-->>Caller: Array of index configurations
69
+ */
13
70
  export function generateIndexes(models) {
14
71
  const tableName = generateIndexName([CouchDBKeys.TABLE]);
15
72
  const indexes = {};
@@ -68,4 +125,4 @@ export function generateIndexes(models) {
68
125
  });
69
126
  return Object.values(indexes);
70
127
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luZGV4ZXMvZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxlQUFlLEVBQ2YsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQsU0FBUyxpQkFBaUIsQ0FDeEIsSUFBYyxFQUNkLFNBQTBCLEVBQzFCLFlBQXVCLEVBQ3ZCLFNBQVMsR0FBRyxnQkFBZ0I7SUFFNUIsT0FBTztRQUNMLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUN2QixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakMsV0FBVyxDQUFDLEtBQUs7S0FDbEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQzdCLE1BQXdCO0lBRXhCLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekQsTUFBTSxPQUFPLEdBQXVDLEVBQUUsQ0FBQztJQUN2RCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUc7UUFDbkIsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztTQUM1QjtRQUNELElBQUksRUFBRSxTQUFTO1FBQ2YsSUFBSSxFQUFFLFNBQVM7UUFDZixJQUFJLEVBQUUsTUFBTTtLQUNiLENBQUM7SUFFRixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDbkIsTUFBTSxHQUFHLEdBQWtDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzNDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsd0NBQXdDO1lBQ3hDLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUksS0FBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsWUFBWSxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7WUFFbEMsU0FBUyxRQUFRLENBQUMsSUFBcUI7Z0JBQ3JDLE1BQU0sSUFBSSxHQUFHO29CQUNYLFNBQVM7b0JBQ1QsR0FBRztvQkFDSCxHQUFJLFlBQW1CO29CQUN2QixlQUFlLENBQUMsS0FBSztpQkFDdEIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFFekIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHO29CQUNkLEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBSSxZQUFtQixFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQzlELENBQUMsS0FBWSxFQUFFLEVBQUUsRUFBRSxFQUFFOzRCQUNuQixJQUFJLElBQUksRUFBRSxDQUFDO2dDQUNULE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztnQ0FDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztnQ0FDZixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNsQixDQUFDO2lDQUFNLENBQUM7Z0NBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDakIsQ0FBQzs0QkFDRCxPQUFPLEtBQUssQ0FBQzt3QkFDZixDQUFDLEVBQ0QsRUFBRSxDQUNIO3FCQUNGO29CQUNELElBQUksRUFBRSxJQUFJO29CQUNWLElBQUksRUFBRSxJQUFJO29CQUNWLElBQUksRUFBRSxNQUFNO2lCQUNiLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNWLE1BQU0sV0FBVyxHQUF3QixFQUFFLENBQUM7b0JBQzVDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNwQyxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ2xFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsV0FBVyxDQUFDO2dCQUM1RCxDQUFDO1lBQ0gsQ0FBQztZQUVELFFBQVEsRUFBRSxDQUFDO1lBQ1gsSUFBSSxVQUFVO2dCQUNYLFVBQTBDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmRleE1ldGFkYXRhLFxuICBPcmRlckRpcmVjdGlvbixcbiAgUGVyc2lzdGVuY2VLZXlzLFxuICBSZXBvc2l0b3J5LFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IENvdWNoREJLZXlzIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgRGVmYXVsdFNlcGFyYXRvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQ291Y2hEQk9wZXJhdG9yIH0gZnJvbSBcIi4uL3F1ZXJ5L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ3JlYXRlSW5kZXhSZXF1ZXN0IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlSW5kZXhOYW1lKFxuICBuYW1lOiBzdHJpbmdbXSxcbiAgZGlyZWN0aW9uPzogT3JkZXJEaXJlY3Rpb24sXG4gIGNvbXBvc2l0aW9ucz86IHN0cmluZ1tdLFxuICBzZXBhcmF0b3IgPSBEZWZhdWx0U2VwYXJhdG9yXG4pIHtcbiAgcmV0dXJuIFtcbiAgICAuLi5uYW1lLm1hcCgobikgPT4gKG4gPT09IENvdWNoREJLZXlzLlRBQkxFID8gXCJ0YWJsZVwiIDogbikpLFxuICAgIC4uLihjb21wb3NpdGlvbnMgfHwgW10pLFxuICAgIC4uLihkaXJlY3Rpb24gPyBbZGlyZWN0aW9uXSA6IFtdKSxcbiAgICBDb3VjaERCS2V5cy5JTkRFWCxcbiAgXS5qb2luKHNlcGFyYXRvcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUluZGV4ZXM8TSBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWxzOiBDb25zdHJ1Y3RvcjxNPltdXG4pOiBDcmVhdGVJbmRleFJlcXVlc3RbXSB7XG4gIGNvbnN0IHRhYmxlTmFtZSA9IGdlbmVyYXRlSW5kZXhOYW1lKFtDb3VjaERCS2V5cy5UQUJMRV0pO1xuICBjb25zdCBpbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCBDcmVhdGVJbmRleFJlcXVlc3Q+ID0ge307XG4gIGluZGV4ZXNbdGFibGVOYW1lXSA9IHtcbiAgICBpbmRleDoge1xuICAgICAgZmllbGRzOiBbQ291Y2hEQktleXMuVEFCTEVdLFxuICAgIH0sXG4gICAgbmFtZTogdGFibGVOYW1lLFxuICAgIGRkb2M6IHRhYmxlTmFtZSxcbiAgICB0eXBlOiBcImpzb25cIixcbiAgfTtcblxuICBtb2RlbHMuZm9yRWFjaCgobSkgPT4ge1xuICAgIGNvbnN0IGluZDogUmVjb3JkPHN0cmluZywgSW5kZXhNZXRhZGF0YT4gPSBSZXBvc2l0b3J5LmluZGV4ZXMobSk7XG4gICAgT2JqZWN0LmVudHJpZXMoaW5kKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGNvbnN0IGsgPSBPYmplY3Qua2V5cyh2YWx1ZSlbMF07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBsZXQgeyBkaXJlY3Rpb25zLCBjb21wb3NpdGlvbnMgfSA9ICh2YWx1ZSBhcyBhbnkpW2tdO1xuICAgICAgY29uc3QgdGFibGVOYW1lID0gUmVwb3NpdG9yeS50YWJsZShtKTtcbiAgICAgIGNvbXBvc2l0aW9ucyA9IGNvbXBvc2l0aW9ucyB8fCBbXTtcblxuICAgICAgZnVuY3Rpb24gZ2VuZXJhdGUoc29ydD86IE9yZGVyRGlyZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBbXG4gICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICAuLi4oY29tcG9zaXRpb25zIGFzIFtdKSxcbiAgICAgICAgICBQZXJzaXN0ZW5jZUtleXMuSU5ERVgsXG4gICAgICAgIF0uam9pbihEZWZhdWx0U2VwYXJhdG9yKTtcblxuICAgICAgICBpbmRleGVzW25hbWVdID0ge1xuICAgICAgICAgIGluZGV4OiB7XG4gICAgICAgICAgICBmaWVsZHM6IFtrZXksIC4uLihjb21wb3NpdGlvbnMgYXMgW10pLCBDb3VjaERCS2V5cy5UQUJMRV0ucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjdW06IGFueVtdLCBlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzb3J0KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXM6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgICAgcmVzW2VsXSA9IHNvcnQ7XG4gICAgICAgICAgICAgICAgICBhY2N1bS5wdXNoKHJlcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGFjY3VtLnB1c2goZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBkZG9jOiBuYW1lLFxuICAgICAgICAgIHR5cGU6IFwianNvblwiLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXNvcnQpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZUZpbHRlcjogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgICAgIHRhYmxlRmlsdGVyW0NvdWNoREJLZXlzLlRBQkxFXSA9IHt9O1xuICAgICAgICAgIHRhYmxlRmlsdGVyW0NvdWNoREJLZXlzLlRBQkxFXVtDb3VjaERCT3BlcmF0b3IuRVFVQUxdID0gdGFibGVOYW1lO1xuICAgICAgICAgIGluZGV4ZXNbbmFtZV0uaW5kZXgucGFydGlhbF9maWx0ZXJfc2VsZWN0b3IgPSB0YWJsZUZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBnZW5lcmF0ZSgpO1xuICAgICAgaWYgKGRpcmVjdGlvbnMpXG4gICAgICAgIChkaXJlY3Rpb25zIGFzIHVua25vd24gYXMgT3JkZXJEaXJlY3Rpb25bXSkuZm9yRWFjaCgoZCkgPT4gZ2VuZXJhdGUoZCkpO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaW5kZXhlcyk7XG59XG4iXX0=
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luZGV4ZXMvZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxlQUFlLEVBQ2YsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FDeEIsSUFBYyxFQUNkLFNBQTBCLEVBQzFCLFlBQXVCLEVBQ3ZCLFNBQVMsR0FBRyxnQkFBZ0I7SUFFNUIsT0FBTztRQUNMLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUN2QixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakMsV0FBVyxDQUFDLEtBQUs7S0FDbEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOENHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsTUFBd0I7SUFFeEIsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RCxNQUFNLE9BQU8sR0FBdUMs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XG4gIE9yZGVyRGlyZWN0aW9uLFxuICBQZXJzaXN0ZW5jZUtleXMsXG4gIFJlcG9zaXRvcnksXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ291Y2hEQktleXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBEZWZhdWx0U2VwYXJhdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBDb3VjaERCT3BlcmF0b3IgfSBmcm9tIFwiLi4vcXVlcnkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDcmVhdGVJbmRleFJlcXVlc3QgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuZXJhdGVzIGEgbmFtZSBmb3IgYSBDb3VjaERCIGluZGV4XG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgc3RhbmRhcmRpemVkIG5hbWUgZm9yIGEgQ291Y2hEQiBpbmRleCBieSBjb21iaW5pbmcgbmFtZSBwYXJ0cywgY29tcG9zaXRpb25zLCBhbmQgZGlyZWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBuYW1lIC0gQXJyYXkgb2YgbmFtZSBwYXJ0cyBmb3IgdGhlIGluZGV4XG4gKiBAcGFyYW0ge09yZGVyRGlyZWN0aW9ufSBbZGlyZWN0aW9uXSAtIE9wdGlvbmFsIHNvcnQgZGlyZWN0aW9uIGZvciB0aGUgaW5kZXhcbiAqIEBwYXJhbSB7c3RyaW5nW119IFtjb21wb3NpdGlvbnNdIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHRvIGluY2x1ZGUgaW4gdGhlIGluZGV4IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2VwYXJhdG9yPURlZmF1bHRTZXBhcmF0b3JdIC0gVGhlIHNlcGFyYXRvciB0byB1c2UgYmV0d2VlbiBwYXJ0cyBvZiB0aGUgaW5kZXggbmFtZVxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIGluZGV4IG5hbWVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWNvdWNoZGJcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVJbmRleE5hbWUoXG4gIG5hbWU6IHN0cmluZ1tdLFxuICBkaXJlY3Rpb24/OiBPcmRlckRpcmVjdGlvbixcbiAgY29tcG9zaXRpb25zPzogc3RyaW5nW10sXG4gIHNlcGFyYXRvciA9IERlZmF1bHRTZXBhcmF0b3Jcbikge1xuICByZXR1cm4gW1xuICAgIC4uLm5hbWUubWFwKChuKSA9PiAobiA9PT0gQ291Y2hEQktleXMuVEFCTEUgPyBcInRhYmxlXCIgOiBuKSksXG4gICAgLi4uKGNvbXBvc2l0aW9ucyB8fCBbXSksXG4gICAgLi4uKGRpcmVjdGlvbiA/IFtkaXJlY3Rpb25dIDogW10pLFxuICAgIENvdWNoREJLZXlzLklOREVYLFxuICBdLmpvaW4oc2VwYXJhdG9yKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuZXJhdGVzIENvdWNoREIgaW5kZXggY29uZmlndXJhdGlvbnMgZm9yIG1vZGVsc1xuICogQHN1bW1hcnkgQ3JlYXRlcyBhIHNldCBvZiBDb3VjaERCIGluZGV4IGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBvZiB0aGUgcHJvdmlkZWQgbW9kZWxzXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbFxuICogQHBhcmFtIG1vZGVscyAtIEFycmF5IG9mIG1vZGVsIGNvbnN0cnVjdG9ycyB0byBnZW5lcmF0ZSBpbmRleGVzIGZvclxuICogQHJldHVybiB7Q3JlYXRlSW5kZXhSZXF1ZXN0W119IEFycmF5IG9mIENvdWNoREIgaW5kZXggY29uZmlndXJhdGlvbnNcbiAqIEBmdW5jdGlvbiBnZW5lcmF0ZUluZGV4ZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWNvdWNoZGJcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IGdlbmVyYXRlSW5kZXhlc1xuICogICBwYXJ0aWNpcGFudCBnZW5lcmF0ZUluZGV4TmFtZVxuICogICBwYXJ0aWNpcGFudCBSZXBvc2l0b3J5XG4gKlxuICogICBDYWxsZXItPj5nZW5lcmF0ZUluZGV4ZXM6IG1vZGVsc1xuICpcbiAqICAgTm90ZSBvdmVyIGdlbmVyYXRlSW5kZXhlczogQ3JlYXRlIGJhc2UgdGFibGUgaW5kZXhcbiAqICAgZ2VuZXJhdGVJbmRleGVzLT4+Z2VuZXJhdGVJbmRleE5hbWU6IFtDb3VjaERCS2V5cy5UQUJMRV1cbiAqICAgZ2VuZXJhdGVJbmRleE5hbWUtLT4+Z2VuZXJhdGVJbmRleGVzOiB0YWJsZU5hbWVcbiAqICAgZ2VuZXJhdGVJbmRleGVzLT4+Z2VuZXJhdGVJbmRleGVzOiBDcmVhdGUgdGFibGUgaW5kZXggY29uZmlnXG4gKlxuICogICBsb29wIEZvciBlYWNoIG1vZGVsXG4gKiAgICAgZ2VuZXJhdGVJbmRleGVzLT4+UmVwb3NpdG9yeTogR2V0IGluZGV4ZXMgbWV0YWRhdGFcbiAqICAgICBSZXBvc2l0b3J5LS0+PmdlbmVyYXRlSW5kZXhlczogaW5kZXggbWV0YWRhdGFcbiAqXG4gKiAgICAgbG9vcCBGb3IgZWFjaCBpbmRleCBpbiBtZXRhZGF0YVxuICogICAgICAgTm90ZSBvdmVyIGdlbmVyYXRlSW5kZXhlczogRXh0cmFjdCBpbmRleCBwcm9wZXJ0aWVzXG4gKiAgICAgICBnZW5lcmF0ZUluZGV4ZXMtPj5SZXBvc2l0b3J5OiBHZXQgdGFibGUgbmFtZVxuICogICAgICAgUmVwb3NpdG9yeS0tPj5nZW5lcmF0ZUluZGV4ZXM6IHRhYmxlTmFtZVxuICpcbiAqICAgICAgIE5vdGUgb3ZlciBnZW5lcmF0ZUluZGV4ZXM6IERlZmluZSBuZXN0ZWQgZ2VuZXJhdGUgZnVuY3Rpb25cbiAqXG4gKiAgICAgICBnZW5lcmF0ZUluZGV4ZXMtPj5nZW5lcmF0ZUluZGV4ZXM6IENhbGwgZ2VuZXJhdGUoKSBmb3IgZGVmYXVsdCBvcmRlclxuICogICAgICAgTm90ZSBvdmVyIGdlbmVyYXRlSW5kZXhlczogQ3JlYXRlIGluZGV4IG5hbWUgYW5kIGNvbmZpZ1xuICpcbiAqICAgICAgIGFsdCBIYXMgZGlyZWN0aW9uc1xuICogICAgICAgICBsb29wIEZvciBlYWNoIGRpcmVjdGlvblxuICogICAgICAgICAgIGdlbmVyYXRlSW5kZXhlcy0+PmdlbmVyYXRlSW5kZXhlczogQ2FsbCBnZW5lcmF0ZShkaXJlY3Rpb24pXG4gKiAgICAgICAgICAgTm90ZSBvdmVyIGdlbmVyYXRlSW5kZXhlczogQ3JlYXRlIG9yZGVyZWQgaW5kZXggY29uZmlnXG4gKiAgICAgICAgIGVuZFxuICogICAgICAgZW5kXG4gKiAgICAgZW5kXG4gKiAgIGVuZFxuICpcbiAqICAgZ2VuZXJhdGVJbmRleGVzLS0+PkNhbGxlcjogQXJyYXkgb2YgaW5kZXggY29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSW5kZXhlczxNIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbHM6IENvbnN0cnVjdG9yPE0+W11cbik6IENyZWF0ZUluZGV4UmVxdWVzdFtdIHtcbiAgY29uc3QgdGFibGVOYW1lID0gZ2VuZXJhdGVJbmRleE5hbWUoW0NvdWNoREJLZXlzLlRBQkxFXSk7XG4gIGNvbnN0IGluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIENyZWF0ZUluZGV4UmVxdWVzdD4gPSB7fTtcbiAgaW5kZXhlc1t0YWJsZU5hbWVdID0ge1xuICAgIGluZGV4OiB7XG4gICAgICBmaWVsZHM6IFtDb3VjaERCS2V5cy5UQUJMRV0sXG4gICAgfSxcbiAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgZGRvYzogdGFibGVOYW1lLFxuICAgIHR5cGU6IFwianNvblwiLFxuICB9O1xuXG4gIG1vZGVscy5mb3JFYWNoKChtKSA9PiB7XG4gICAgY29uc3QgaW5kOiBSZWNvcmQ8c3RyaW5nLCBJbmRleE1ldGFkYXRhPiA9IFJlcG9zaXRvcnkuaW5kZXhlcyhtKTtcbiAgICBPYmplY3QuZW50cmllcyhpbmQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgY29uc3QgayA9IE9iamVjdC5rZXlzKHZhbHVlKVswXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGxldCB7IGRpcmVjdGlvbnMsIGNvbXBvc2l0aW9ucyB9ID0gKHZhbHVlIGFzIGFueSlba107XG4gICAgICBjb25zdCB0YWJsZU5hbWUgPSBSZXBvc2l0b3J5LnRhYmxlKG0pO1xuICAgICAgY29tcG9zaXRpb25zID0gY29tcG9zaXRpb25zIHx8IFtdO1xuXG4gICAgICBmdW5jdGlvbiBnZW5lcmF0ZShzb3J0PzogT3JkZXJEaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IFtcbiAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIC4uLihjb21wb3NpdGlvbnMgYXMgW10pLFxuICAgICAgICAgIFBlcnNpc3RlbmNlS2V5cy5JTkRFWCxcbiAgICAgICAgXS5qb2luKERlZmF1bHRTZXBhcmF0b3IpO1xuXG4gICAgICAgIGluZGV4ZXNbbmFtZV0gPSB7XG4gICAgICAgICAgaW5kZXg6IHtcbiAgICAgICAgICAgIGZpZWxkczogW2tleSwgLi4uKGNvbXBvc2l0aW9ucyBhcyBbXSksIENvdWNoREJLZXlzLlRBQkxFXS5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhY2N1bTogYW55W10sIGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNvcnQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlczogYW55ID0ge307XG4gICAgICAgICAgICAgICAgICByZXNbZWxdID0gc29ydDtcbiAgICAgICAgICAgICAgICAgIGFjY3VtLnB1c2gocmVzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYWNjdW0ucHVzaChlbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgIGRkb2M6IG5hbWUsXG4gICAgICAgICAgdHlwZTogXCJqc29uXCIsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc29ydCkge1xuICAgICAgICAgIGNvbnN0IHRhYmxlRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICAgICAgdGFibGVGaWx0ZXJbQ291Y2hEQktleXMuVEFCTEVdID0ge307XG4gICAgICAgICAgdGFibGVGaWx0ZXJbQ291Y2hEQktleXMuVEFCTEVdW0NvdWNoREJPcGVyYXRvci5FUVVBTF0gPSB0YWJsZU5hbWU7XG4gICAgICAgICAgaW5kZXhlc1tuYW1lXS5pbmRleC5wYXJ0aWFsX2ZpbHRlcl9zZWxlY3RvciA9IHRhYmxlRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGdlbmVyYXRlKCk7XG4gICAgICBpZiAoZGlyZWN0aW9ucylcbiAgICAgICAgKGRpcmVjdGlvbnMgYXMgdW5rbm93biBhcyBPcmRlckRpcmVjdGlvbltdKS5mb3JFYWNoKChkKSA9PiBnZW5lcmF0ZShkKSk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhpbmRleGVzKTtcbn1cbiJdfQ==
@@ -3,4 +3,14 @@ import { CouchDBAdapter } from "../adapter";
3
3
  import { Model } from "@decaf-ts/decorator-validation";
4
4
  import { MangoQuery } from "../types";
5
5
  import { Context, RepositoryFlags } from "@decaf-ts/db-decorators";
6
+ /**
7
+ * @description Repository type for CouchDB operations
8
+ * @summary Type definition for a repository that works with CouchDB through the CouchDBAdapter
9
+ * @template M - The model type that extends Model
10
+ * @template Y - The scope type
11
+ * @template F - The repository flags type
12
+ * @template C - The context type that extends Context<F>
13
+ * @typedef {Repository<M, MangoQuery, CouchDBAdapter<Y, F, C>>} CouchDBRepository
14
+ * @memberOf module:for-couchdb
15
+ */
6
16
  export type CouchDBRepository<M extends Model, Y, F extends RepositoryFlags, C extends Context<F>> = Repository<M, MangoQuery, CouchDBAdapter<Y, F, C>>;
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ291Y2hEQlJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50ZXJmYWNlcy9Db3VjaERCUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ291Y2hEQkFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBNYW5nb1F1ZXJ5IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBDb250ZXh0LCBSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuZXhwb3J0IHR5cGUgQ291Y2hEQlJlcG9zaXRvcnk8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgWSxcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4+ID0gUmVwb3NpdG9yeTxNLCBNYW5nb1F1ZXJ5LCBDb3VjaERCQWRhcHRlcjxZLCBGLCBDPj47XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ291Y2hEQlJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW50ZXJmYWNlcy9Db3VjaERCUmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ291Y2hEQkFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBNYW5nb1F1ZXJ5IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBDb250ZXh0LCBSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSB0eXBlIGZvciBDb3VjaERCIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IFR5cGUgZGVmaW5pdGlvbiBmb3IgYSByZXBvc2l0b3J5IHRoYXQgd29ya3Mgd2l0aCBDb3VjaERCIHRocm91Z2ggdGhlIENvdWNoREJBZGFwdGVyXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbFxuICogQHRlbXBsYXRlIFkgLSBUaGUgc2NvcGUgdHlwZVxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgdGhhdCBleHRlbmRzIENvbnRleHQ8Rj5cbiAqIEB0eXBlZGVmIHtSZXBvc2l0b3J5PE0sIE1hbmdvUXVlcnksIENvdWNoREJBZGFwdGVyPFksIEYsIEM+Pn0gQ291Y2hEQlJlcG9zaXRvcnlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWNvdWNoZGJcbiAqL1xuZXhwb3J0IHR5cGUgQ291Y2hEQlJlcG9zaXRvcnk8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgWSxcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4+ID0gUmVwb3NpdG9yeTxNLCBNYW5nb1F1ZXJ5LCBDb3VjaERCQWRhcHRlcjxZLCBGLCBDPj47XG4iXX0=
@@ -1,19 +1,25 @@
1
1
  import type { ModelArg } from "@decaf-ts/decorator-validation";
2
2
  import { BaseModel } from "@decaf-ts/core";
3
+ /**
4
+ * @description Model for CouchDB sequence records
5
+ * @summary Represents a sequence in CouchDB used for generating sequential IDs
6
+ * @param {ModelArg<Sequence>} [seq] - Optional initialization data for the sequence
7
+ * @class
8
+ * @example
9
+ * // Example of creating and using a Sequence
10
+ * const sequence = new Sequence({ id: 'user-seq', current: 1 });
11
+ * // Increment the sequence
12
+ * sequence.current = Number(sequence.current) + 1;
13
+ */
3
14
  export declare class Sequence extends BaseModel {
4
15
  /**
5
- * @summary the Primary key for the DBSequence
6
- * @prop name
7
- *
8
- * @see pk
16
+ * @description The unique identifier for the sequence
17
+ * @summary Primary key for the sequence record
9
18
  */
10
19
  id: string;
11
20
  /**
12
- * @summary the current value for the DBSequence
13
- * @prop current
14
- *
15
- * @see required
16
- * @see index
21
+ * @description The current value of the sequence
22
+ * @summary Current sequence value that can be incremented
17
23
  */
18
24
  current: string | number;
19
25
  constructor(seq?: ModelArg<Sequence>);
@@ -10,6 +10,17 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import { model, required } from "@decaf-ts/decorator-validation";
11
11
  import { BaseModel, pk, index, table } from "@decaf-ts/core";
12
12
  import { CouchDBKeys } from "../constants";
13
+ /**
14
+ * @description Model for CouchDB sequence records
15
+ * @summary Represents a sequence in CouchDB used for generating sequential IDs
16
+ * @param {ModelArg<Sequence>} [seq] - Optional initialization data for the sequence
17
+ * @class
18
+ * @example
19
+ * // Example of creating and using a Sequence
20
+ * const sequence = new Sequence({ id: 'user-seq', current: 1 });
21
+ * // Increment the sequence
22
+ * sequence.current = Number(sequence.current) + 1;
23
+ */
13
24
  let Sequence = class Sequence extends BaseModel {
14
25
  constructor(seq) {
15
26
  super(seq);
@@ -30,4 +41,4 @@ Sequence = __decorate([
30
41
  __metadata("design:paramtypes", [Object])
31
42
  ], Sequence);
32
43
  export { Sequence };
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ291Y2hEQlNlcXVlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL0NvdWNoREJTZXF1ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSXBDLElBQU0sUUFBUSxHQUFkLE1BQU0sUUFBUyxTQUFRLFNBQVM7SUFvQnJDLFlBQVksR0FBd0I7UUFDbEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztDQUNGLENBQUE7QUFmQztJQURDLEVBQUUsRUFBRTs7b0NBQ087QUFVWjtJQUZDLFFBQVEsRUFBRTtJQUNWLEtBQUssRUFBRTs7eUNBQ2tCO0FBbEJmLFFBQVE7SUFGcEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDM0IsS0FBSyxFQUFFOztHQUNLLFFBQVEsQ0F1QnBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNb2RlbEFyZyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IG1vZGVsLCByZXF1aXJlZCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEJhc2VNb2RlbCwgcGssIGluZGV4LCB0YWJsZSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ291Y2hEQktleXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbkB0YWJsZShDb3VjaERCS2V5cy5TRVFVRU5DRSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgU2VxdWVuY2UgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICAvKipcbiAgICogQHN1bW1hcnkgdGhlIFByaW1hcnkga2V5IGZvciB0aGUgREJTZXF1ZW5jZVxuICAgKiBAcHJvcCBuYW1lXG4gICAqXG4gICAqIEBzZWUgcGtcbiAgICovXG4gIEBwaygpXG4gIGlkITogc3RyaW5nO1xuICAvKipcbiAgICogQHN1bW1hcnkgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIHRoZSBEQlNlcXVlbmNlXG4gICAqIEBwcm9wIGN1cnJlbnRcbiAgICpcbiAgICogQHNlZSByZXF1aXJlZFxuICAgKiBAc2VlIGluZGV4XG4gICAqL1xuICBAcmVxdWlyZWQoKVxuICBAaW5kZXgoKVxuICBjdXJyZW50ITogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHNlcT86IE1vZGVsQXJnPFNlcXVlbmNlPikge1xuICAgIHN1cGVyKHNlcSk7XG4gIH1cbn1cbiJdfQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ291Y2hEQlNlcXVlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL0NvdWNoREJTZXF1ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTNDOzs7Ozs7Ozs7O0dBVUc7QUFHSSxJQUFNLFFBQVEsR0FBZCxNQUFNLFFBQVMsU0FBUSxTQUFTO0lBZ0JyQyxZQUFZLEdBQXdCO1FBQ2xDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDRixDQUFBO0FBYkM7SUFEQyxFQUFFLEVBQUU7O29DQUNPO0FBUVo7SUFGQyxRQUFRLEVBQUU7SUFDVixLQUFLLEVBQUU7O3lDQUNrQjtBQWRmLFFBQVE7SUFGcEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDM0IsS0FBSyxFQUFFOztHQUNLLFFBQVEsQ0FtQnBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNb2RlbEFyZyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IG1vZGVsLCByZXF1aXJlZCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEJhc2VNb2RlbCwgcGssIGluZGV4LCB0YWJsZSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ291Y2hEQktleXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1vZGVsIGZvciBDb3VjaERCIHNlcXVlbmNlIHJlY29yZHNcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSBzZXF1ZW5jZSBpbiBDb3VjaERCIHVzZWQgZm9yIGdlbmVyYXRpbmcgc2VxdWVudGlhbCBJRHNcbiAqIEBwYXJhbSB7TW9kZWxBcmc8U2VxdWVuY2U+fSBbc2VxXSAtIE9wdGlvbmFsIGluaXRpYWxpemF0aW9uIGRhdGEgZm9yIHRoZSBzZXF1ZW5jZVxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogLy8gRXhhbXBsZSBvZiBjcmVhdGluZyBhbmQgdXNpbmcgYSBTZXF1ZW5jZVxuICogY29uc3Qgc2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoeyBpZDogJ3VzZXItc2VxJywgY3VycmVudDogMSB9KTtcbiAqIC8vIEluY3JlbWVudCB0aGUgc2VxdWVuY2VcbiAqIHNlcXVlbmNlLmN1cnJlbnQgPSBOdW1iZXIoc2VxdWVuY2UuY3VycmVudCkgKyAxO1xuICovXG5AdGFibGUoQ291Y2hEQktleXMuU0VRVUVOQ0UpXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIFNlcXVlbmNlIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBzZXF1ZW5jZVxuICAgKiBAc3VtbWFyeSBQcmltYXJ5IGtleSBmb3IgdGhlIHNlcXVlbmNlIHJlY29yZFxuICAgKi9cbiAgQHBrKClcbiAgaWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc2VxdWVuY2VcbiAgICogQHN1bW1hcnkgQ3VycmVudCBzZXF1ZW5jZSB2YWx1ZSB0aGF0IGNhbiBiZSBpbmNyZW1lbnRlZFxuICAgKi9cbiAgQHJlcXVpcmVkKClcbiAgQGluZGV4KClcbiAgY3VycmVudCE6IHN0cmluZyB8IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihzZXE/OiBNb2RlbEFyZzxTZXF1ZW5jZT4pIHtcbiAgICBzdXBlcihzZXEpO1xuICB9XG59XG4iXX0=
@@ -1,10 +1,123 @@
1
- import { Paginator, Statement } from "@decaf-ts/core";
1
+ import { Paginator } from "@decaf-ts/core";
2
2
  import { MangoQuery } from "../types";
3
- export declare class CouchDBPaginator<V> extends Paginator<V, MangoQuery> {
3
+ import { Constructor, Model } from "@decaf-ts/decorator-validation";
4
+ import { CouchDBAdapter } from "../adapter";
5
+ /**
6
+ * @description Paginator for CouchDB query results
7
+ * @summary Implements pagination for CouchDB queries using bookmarks for efficient navigation through result sets
8
+ * @template M - The model type that extends Model
9
+ * @template R - The result type
10
+ * @param {CouchDBAdapter<any, any, any>} adapter - The CouchDB adapter
11
+ * @param {MangoQuery} query - The Mango query to paginate
12
+ * @param {number} size - The page size
13
+ * @param {Constructor<M>} clazz - The model constructor
14
+ * @class CouchDBPaginator
15
+ * @example
16
+ * // Example of using CouchDBPaginator
17
+ * const adapter = new MyCouchDBAdapter(scope);
18
+ * const query = { selector: { type: "user" } };
19
+ * const paginator = new CouchDBPaginator(adapter, query, 10, User);
20
+ *
21
+ * // Get the first page
22
+ * const page1 = await paginator.page(1);
23
+ *
24
+ * // Get the next page
25
+ * const page2 = await paginator.page(2);
26
+ */
27
+ export declare class CouchDBPaginator<M extends Model, R> extends Paginator<M, R, MangoQuery> {
28
+ /**
29
+ * @description Bookmark for CouchDB pagination
30
+ * @summary Stores the bookmark returned by CouchDB for continuing pagination
31
+ */
4
32
  private bookMark?;
33
+ /**
34
+ * @description Gets the total number of pages
35
+ * @summary Not supported in CouchDB - throws an error when accessed
36
+ * @return {number} Never returns as it throws an error
37
+ * @throws {InternalError} Always throws as this functionality is not available in CouchDB
38
+ */
5
39
  get total(): number;
40
+ /**
41
+ * @description Gets the total record count
42
+ * @summary Not supported in CouchDB - throws an error when accessed
43
+ * @return {number} Never returns as it throws an error
44
+ * @throws {InternalError} Always throws as this functionality is not available in CouchDB
45
+ */
6
46
  get count(): number;
7
- constructor(statement: Statement<MangoQuery>, size: number, rawStatement: MangoQuery);
47
+ /**
48
+ * @description Creates a new CouchDBPaginator instance
49
+ * @summary Initializes a paginator for CouchDB query results
50
+ * @param {CouchDBAdapter<any, any, any>} adapter - The CouchDB adapter
51
+ * @param {MangoQuery} query - The Mango query to paginate
52
+ * @param {number} size - The page size
53
+ * @param {Constructor<M>} clazz - The model constructor
54
+ */
55
+ constructor(adapter: CouchDBAdapter<any, any, any>, query: MangoQuery, size: number, clazz: Constructor<M>);
56
+ /**
57
+ * @description Prepares a query for pagination
58
+ * @summary Modifies the raw query to include pagination parameters
59
+ * @param {MangoQuery} rawStatement - The original Mango query
60
+ * @return {MangoQuery} The prepared query with pagination parameters
61
+ */
8
62
  protected prepare(rawStatement: MangoQuery): MangoQuery;
9
- page(page?: number, ...args: any[]): Promise<V[]>;
63
+ /**
64
+ * @description Retrieves a specific page of results
65
+ * @summary Executes the query with pagination and processes the results
66
+ * @param {number} [page=1] - The page number to retrieve
67
+ * @return {Promise<R[]>} A promise that resolves to an array of results
68
+ * @throws {PagingError} If trying to access a page other than the first without a bookmark, or if no class is defined
69
+ * @mermaid
70
+ * sequenceDiagram
71
+ * participant Client
72
+ * participant CouchDBPaginator
73
+ * participant Adapter
74
+ * participant CouchDB
75
+ *
76
+ * Client->>CouchDBPaginator: page(pageNumber)
77
+ * Note over CouchDBPaginator: Clone statement
78
+ * CouchDBPaginator->>CouchDBPaginator: validatePage(page)
79
+ *
80
+ * alt page !== 1
81
+ * CouchDBPaginator->>CouchDBPaginator: Check bookmark
82
+ * alt No bookmark
83
+ * CouchDBPaginator-->>Client: Throw PagingError
84
+ * else Has bookmark
85
+ * CouchDBPaginator->>CouchDBPaginator: Add bookmark to statement
86
+ * end
87
+ * end
88
+ *
89
+ * CouchDBPaginator->>Adapter: raw(statement, false)
90
+ * Adapter->>CouchDB: Execute query
91
+ * CouchDB-->>Adapter: Return results
92
+ * Adapter-->>CouchDBPaginator: Return MangoResponse
93
+ *
94
+ * Note over CouchDBPaginator: Process results
95
+ *
96
+ * alt Has warning
97
+ * CouchDBPaginator->>CouchDBPaginator: Log warning
98
+ * end
99
+ *
100
+ * CouchDBPaginator->>CouchDBPaginator: Check for clazz
101
+ *
102
+ * alt No clazz
103
+ * CouchDBPaginator-->>Client: Throw PagingError
104
+ * else Has clazz
105
+ * CouchDBPaginator->>CouchDBPaginator: Find primary key
106
+ *
107
+ * alt Has fields in statement
108
+ * CouchDBPaginator->>CouchDBPaginator: Use docs directly
109
+ * else No fields
110
+ * CouchDBPaginator->>CouchDBPaginator: Process each document
111
+ * loop For each document
112
+ * CouchDBPaginator->>CouchDBPaginator: Extract original ID
113
+ * CouchDBPaginator->>Adapter: revert(doc, clazz, pkDef.id, parsedId)
114
+ * end
115
+ * end
116
+ *
117
+ * CouchDBPaginator->>CouchDBPaginator: Store bookmark
118
+ * CouchDBPaginator->>CouchDBPaginator: Update currentPage
119
+ * CouchDBPaginator-->>Client: Return results
120
+ * end
121
+ */
122
+ page(page?: number): Promise<R[]>;
10
123
  }