@squidcloud/local-backend 1.0.74 → 1.0.76

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 (193) hide show
  1. package/dist/common/src/ai-assistant.context.d.ts +13 -13
  2. package/dist/common/src/ai-assistant.context.js +19 -19
  3. package/dist/common/src/ai-assistant.schemas.d.ts +243 -243
  4. package/dist/common/src/ai-assistant.schemas.js +210 -210
  5. package/dist/common/src/ai-assistant.types.d.ts +85 -85
  6. package/dist/common/src/ai-assistant.types.js +11 -11
  7. package/dist/common/src/api-call.context.d.ts +13 -13
  8. package/dist/common/src/api-call.context.js +16 -16
  9. package/dist/common/src/api.types.d.ts +23 -23
  10. package/dist/common/src/api.types.js +2 -2
  11. package/dist/common/src/application.schemas.d.ts +1332 -1312
  12. package/dist/common/src/application.schemas.js +880 -860
  13. package/dist/common/src/application.schemas.js.map +1 -1
  14. package/dist/common/src/application.types.d.ts +189 -186
  15. package/dist/common/src/application.types.js +89 -89
  16. package/dist/common/src/application.types.js.map +1 -1
  17. package/dist/common/src/backend-function.schemas.d.ts +3 -3
  18. package/dist/common/src/backend-function.schemas.js +12 -12
  19. package/dist/common/src/backend-function.types.d.ts +6 -6
  20. package/dist/common/src/backend-function.types.js +2 -2
  21. package/dist/common/src/backend-run.types.d.ts +54 -54
  22. package/dist/common/src/backend-run.types.js +91 -91
  23. package/dist/common/src/bundle-api.types.d.ts +65 -65
  24. package/dist/common/src/bundle-api.types.js +2 -2
  25. package/dist/common/src/bundle-data.types.d.ts +60 -60
  26. package/dist/common/src/bundle-data.types.js +2 -2
  27. package/dist/common/src/communication.types.d.ts +18 -18
  28. package/dist/common/src/communication.types.js +40 -40
  29. package/dist/common/src/context.types.d.ts +24 -24
  30. package/dist/common/src/context.types.js +2 -2
  31. package/dist/common/src/distributed-lock.context.d.ts +5 -5
  32. package/dist/common/src/distributed-lock.context.js +10 -10
  33. package/dist/common/src/document.types.d.ts +32 -32
  34. package/dist/common/src/document.types.js +50 -50
  35. package/dist/common/src/graphql.context.d.ts +14 -14
  36. package/dist/common/src/graphql.context.js +12 -12
  37. package/dist/common/src/graphql.types.d.ts +11 -11
  38. package/dist/common/src/graphql.types.js +34 -34
  39. package/dist/common/src/heartbeat.types.d.ts +4 -4
  40. package/dist/common/src/heartbeat.types.js +16 -16
  41. package/dist/common/src/http-status.enum.d.ts +50 -50
  42. package/dist/common/src/http-status.enum.js +54 -54
  43. package/dist/common/src/http-status.enum.js.map +1 -1
  44. package/dist/common/src/index.d.ts +55 -55
  45. package/dist/common/src/index.js +71 -71
  46. package/dist/common/src/integrations/ai_assistant.types.d.ts +30 -26
  47. package/dist/common/src/integrations/ai_assistant.types.js +2 -2
  48. package/dist/common/src/integrations/api.types.d.ts +80 -80
  49. package/dist/common/src/integrations/api.types.js +2 -2
  50. package/dist/common/src/integrations/auth.types.d.ts +39 -39
  51. package/dist/common/src/integrations/auth.types.js +2 -2
  52. package/dist/common/src/integrations/database.types.d.ts +231 -231
  53. package/dist/common/src/integrations/database.types.js +2 -2
  54. package/dist/common/src/integrations/index.d.ts +126 -126
  55. package/dist/common/src/integrations/index.js +113 -113
  56. package/dist/common/src/integrations/index.js.map +1 -1
  57. package/dist/common/src/integrations/observability.types.d.ts +23 -23
  58. package/dist/common/src/integrations/observability.types.js +23 -23
  59. package/dist/common/src/logger.types.d.ts +21 -21
  60. package/dist/common/src/logger.types.js +11 -11
  61. package/dist/common/src/logger.types.js.map +1 -1
  62. package/dist/common/src/metrics.types.d.ts +73 -73
  63. package/dist/common/src/metrics.types.js +11 -11
  64. package/dist/common/src/mutation.context.d.ts +13 -13
  65. package/dist/common/src/mutation.context.js +26 -26
  66. package/dist/common/src/mutation.schemas.d.ts +5 -5
  67. package/dist/common/src/mutation.schemas.js +114 -114
  68. package/dist/common/src/mutation.types.d.ts +63 -63
  69. package/dist/common/src/mutation.types.js +142 -142
  70. package/dist/common/src/named-query.context.d.ts +4 -4
  71. package/dist/common/src/named-query.context.js +9 -9
  72. package/dist/common/src/named-query.schemas.d.ts +3 -3
  73. package/dist/common/src/named-query.schemas.js +13 -13
  74. package/dist/common/src/named-query.types.d.ts +8 -8
  75. package/dist/common/src/named-query.types.js +2 -2
  76. package/dist/common/src/query/base-query-builder.d.ts +37 -37
  77. package/dist/common/src/query/base-query-builder.js +36 -36
  78. package/dist/common/src/query/index.d.ts +4 -4
  79. package/dist/common/src/query/index.js +20 -20
  80. package/dist/common/src/query/pagination.d.ts +42 -42
  81. package/dist/common/src/query/pagination.js +164 -164
  82. package/dist/common/src/query/query-context.d.ts +47 -47
  83. package/dist/common/src/query/query-context.js +159 -159
  84. package/dist/common/src/query/serialized-query.types.d.ts +24 -24
  85. package/dist/common/src/query/serialized-query.types.js +2 -2
  86. package/dist/common/src/query.types.d.ts +86 -86
  87. package/dist/common/src/query.types.js +153 -153
  88. package/dist/common/src/regions.d.ts +21 -21
  89. package/dist/common/src/regions.js +46 -46
  90. package/dist/common/src/schema/schema.types.d.ts +30 -30
  91. package/dist/common/src/schema/schema.types.js +172 -172
  92. package/dist/common/src/secret.schemas.d.ts +4 -4
  93. package/dist/common/src/secret.schemas.js +17 -17
  94. package/dist/common/src/secret.types.d.ts +65 -65
  95. package/dist/common/src/secret.types.js +5 -5
  96. package/dist/common/src/security.types.d.ts +3 -3
  97. package/dist/common/src/security.types.js +2 -2
  98. package/dist/common/src/socket.schemas.d.ts +3 -3
  99. package/dist/common/src/socket.schemas.js +58 -58
  100. package/dist/common/src/socket.types.d.ts +125 -117
  101. package/dist/common/src/socket.types.js +9 -9
  102. package/dist/common/src/socket.types.js.map +1 -1
  103. package/dist/common/src/time-units.d.ts +5 -5
  104. package/dist/common/src/time-units.js +8 -8
  105. package/dist/common/src/trigger.types.d.ts +15 -15
  106. package/dist/common/src/trigger.types.js +2 -2
  107. package/dist/common/src/types.d.ts +21 -21
  108. package/dist/common/src/types.js +2 -2
  109. package/dist/common/src/utils/array.d.ts +8 -8
  110. package/dist/common/src/utils/array.js +54 -54
  111. package/dist/common/src/utils/assert.d.ts +8 -8
  112. package/dist/common/src/utils/assert.js +49 -49
  113. package/dist/common/src/utils/error.d.ts +4 -4
  114. package/dist/common/src/utils/error.js +10 -10
  115. package/dist/common/src/utils/global.utils.d.ts +11 -11
  116. package/dist/common/src/utils/global.utils.js +50 -50
  117. package/dist/common/src/utils/http.d.ts +2 -2
  118. package/dist/common/src/utils/http.js +41 -41
  119. package/dist/common/src/utils/id.d.ts +2 -2
  120. package/dist/common/src/utils/id.js +21 -21
  121. package/dist/common/src/utils/lock.manager.d.ts +9 -9
  122. package/dist/common/src/utils/lock.manager.js +39 -39
  123. package/dist/common/src/utils/nullish.d.ts +2 -2
  124. package/dist/common/src/utils/nullish.js +11 -11
  125. package/dist/common/src/utils/object.d.ts +5 -5
  126. package/dist/common/src/utils/object.js +75 -75
  127. package/dist/common/src/utils/serialization.d.ts +6 -6
  128. package/dist/common/src/utils/serialization.js +77 -77
  129. package/dist/common/src/utils/transforms.d.ts +18 -18
  130. package/dist/common/src/utils/transforms.js +92 -92
  131. package/dist/common/src/utils/url.d.ts +1 -1
  132. package/dist/common/src/utils/url.js +15 -15
  133. package/dist/common/src/utils/validation.d.ts +17 -17
  134. package/dist/common/src/utils/validation.js +209 -209
  135. package/dist/common/src/webhook-response.d.ts +6 -6
  136. package/dist/common/src/webhook-response.js +2 -2
  137. package/dist/common/src/websocket.impl.d.ts +21 -21
  138. package/dist/common/src/websocket.impl.js +76 -76
  139. package/dist/internal-common/src/async-queue.d.ts +4 -4
  140. package/dist/internal-common/src/async-queue.js +17 -17
  141. package/dist/internal-common/src/code-executor.types.d.ts +13 -13
  142. package/dist/internal-common/src/code-executor.types.js +2 -2
  143. package/dist/internal-common/src/dao.types.d.ts +49 -49
  144. package/dist/internal-common/src/dao.types.js +2 -2
  145. package/dist/internal-common/src/environment/environment.types.d.ts +74 -74
  146. package/dist/internal-common/src/environment/environment.types.js +2 -2
  147. package/dist/internal-common/src/environment/index.d.ts +6 -6
  148. package/dist/internal-common/src/environment/index.js +27 -27
  149. package/dist/internal-common/src/environment/local.environment.d.ts +2 -2
  150. package/dist/internal-common/src/environment/local.environment.js +62 -62
  151. package/dist/internal-common/src/filters/custom-exception.filter.d.ts +6 -6
  152. package/dist/internal-common/src/filters/custom-exception.filter.js +44 -44
  153. package/dist/internal-common/src/filters/custom-exception.filter.js.map +1 -1
  154. package/dist/internal-common/src/index.d.ts +14 -14
  155. package/dist/internal-common/src/index.js +32 -32
  156. package/dist/internal-common/src/interceptors/body.interceptor.d.ts +5 -5
  157. package/dist/internal-common/src/interceptors/body.interceptor.js +24 -24
  158. package/dist/internal-common/src/interceptors/body.interceptor.js.map +1 -1
  159. package/dist/internal-common/src/kafka/kafka.manager.d.ts +22 -22
  160. package/dist/internal-common/src/kafka/kafka.manager.js +116 -116
  161. package/dist/internal-common/src/kafka/kafka.types.d.ts +17 -17
  162. package/dist/internal-common/src/kafka/kafka.types.js +2 -2
  163. package/dist/internal-common/src/kafka-observability-publisher.d.ts +11 -11
  164. package/dist/internal-common/src/kafka-observability-publisher.js +20 -20
  165. package/dist/internal-common/src/local-dev.types.d.ts +35 -35
  166. package/dist/internal-common/src/local-dev.types.js +2 -2
  167. package/dist/internal-common/src/observability-publisher.d.ts +9 -9
  168. package/dist/internal-common/src/observability-publisher.js +58 -58
  169. package/dist/internal-common/src/observability.types.d.ts +17 -17
  170. package/dist/internal-common/src/observability.types.js +2 -2
  171. package/dist/internal-common/src/shutdown.manager.d.ts +20 -20
  172. package/dist/internal-common/src/shutdown.manager.js +75 -75
  173. package/dist/internal-common/src/shutdown.manager.js.map +1 -1
  174. package/dist/internal-common/src/utils.d.ts +5 -5
  175. package/dist/internal-common/src/utils.js +29 -29
  176. package/dist/local-backend/src/index.d.ts +4 -4
  177. package/dist/local-backend/src/index.js +20 -20
  178. package/dist/local-backend/src/local-backend-socket.service.d.ts +19 -19
  179. package/dist/local-backend/src/local-backend-socket.service.js +110 -110
  180. package/dist/local-backend/src/local-backend-socket.service.js.map +1 -1
  181. package/dist/local-backend/src/local-backend.app.d.ts +2 -2
  182. package/dist/local-backend/src/local-backend.app.js +19 -19
  183. package/dist/local-backend/src/local-backend.controller.d.ts +8 -8
  184. package/dist/local-backend/src/local-backend.controller.js +49 -49
  185. package/dist/local-backend/src/local-backend.controller.js.map +1 -1
  186. package/dist/local-backend/src/local-backend.module.d.ts +8 -8
  187. package/dist/local-backend/src/local-backend.module.js +53 -53
  188. package/dist/local-backend/src/local-backend.module.js.map +1 -1
  189. package/dist/local-backend/src/local-backend.service.d.ts +15 -15
  190. package/dist/local-backend/src/local-backend.service.js +170 -170
  191. package/dist/local-backend/src/local-backend.service.js.map +1 -1
  192. package/dist/tsconfig.build.tsbuildinfo +1 -1
  193. package/package.json +8 -33
@@ -1,42 +1,42 @@
1
- import { SnapshotEmitter } from './base-query-builder';
2
- import { Observable } from 'rxjs';
3
- export interface PaginationState<ReturnType> {
4
- data: Array<ReturnType>;
5
- hasNext: boolean;
6
- hasPrev: boolean;
7
- }
8
- export interface PaginationOptions {
9
- subscribe: boolean;
10
- pageSize: number;
11
- }
12
- interface InternalState<ReturnType> {
13
- data: ReturnType[];
14
- extractedData: any[];
15
- numBefore: number;
16
- numAfter: number;
17
- }
18
- export declare class Pagination<ReturnType> {
19
- private readonly options;
20
- private internalStateObserver;
21
- private firstElement;
22
- private lastElement;
23
- private readonly isDestroyed;
24
- private templateSnapshotEmitter;
25
- private snapshotSubject;
26
- private onFirstPage;
27
- constructor(snapshotEmitter: SnapshotEmitter<ReturnType>, options?: Partial<PaginationOptions>);
28
- private goToFirstPage;
29
- private static compareValues;
30
- private compare;
31
- dataReceived(data: Array<ReturnType>): Promise<void>;
32
- private doNewQuery;
33
- private waitForInternalState;
34
- private internalStateToState;
35
- unsubscribe(): void;
36
- prevInternal(internalState: InternalState<ReturnType>): void;
37
- prev(): Promise<PaginationState<ReturnType>>;
38
- next(): Promise<PaginationState<ReturnType>>;
39
- waitForData(): Promise<PaginationState<ReturnType>>;
40
- observeState(): Observable<PaginationState<ReturnType>>;
41
- }
42
- export {};
1
+ import { SnapshotEmitter } from './base-query-builder';
2
+ import { Observable } from 'rxjs';
3
+ export interface PaginationState<ReturnType> {
4
+ data: Array<ReturnType>;
5
+ hasNext: boolean;
6
+ hasPrev: boolean;
7
+ }
8
+ export interface PaginationOptions {
9
+ subscribe: boolean;
10
+ pageSize: number;
11
+ }
12
+ interface InternalState<ReturnType> {
13
+ data: ReturnType[];
14
+ extractedData: any[];
15
+ numBefore: number;
16
+ numAfter: number;
17
+ }
18
+ export declare class Pagination<ReturnType> {
19
+ private readonly options;
20
+ private internalStateObserver;
21
+ private firstElement;
22
+ private lastElement;
23
+ private readonly isDestroyed;
24
+ private templateSnapshotEmitter;
25
+ private snapshotSubject;
26
+ private onFirstPage;
27
+ constructor(snapshotEmitter: SnapshotEmitter<ReturnType>, options?: Partial<PaginationOptions>);
28
+ private goToFirstPage;
29
+ private static compareValues;
30
+ private compare;
31
+ dataReceived(data: Array<ReturnType>): Promise<void>;
32
+ private doNewQuery;
33
+ private waitForInternalState;
34
+ private internalStateToState;
35
+ unsubscribe(): void;
36
+ prevInternal(internalState: InternalState<ReturnType>): void;
37
+ prev(): Promise<PaginationState<ReturnType>>;
38
+ next(): Promise<PaginationState<ReturnType>>;
39
+ waitForData(): Promise<PaginationState<ReturnType>>;
40
+ observeState(): Observable<PaginationState<ReturnType>>;
41
+ }
42
+ export {};
@@ -1,165 +1,165 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Pagination = void 0;
4
- const rxjs_1 = require("rxjs");
5
- const object_1 = require("../utils/object");
6
- class Pagination {
7
- constructor(snapshotEmitter, options = {}) {
8
- this.internalStateObserver = new rxjs_1.BehaviorSubject(null);
9
- this.firstElement = null;
10
- this.lastElement = null;
11
- this.isDestroyed = new rxjs_1.BehaviorSubject(false);
12
- this.snapshotSubject = new rxjs_1.Subject();
13
- this.onFirstPage = true;
14
- this.snapshotSubject.pipe((0, rxjs_1.switchAll)()).subscribe((data) => this.dataReceived(data));
15
- this.templateSnapshotEmitter = snapshotEmitter.clone();
16
- this.options = Object.assign({ pageSize: 100, subscribe: true }, options);
17
- this.goToFirstPage();
18
- }
19
- goToFirstPage() {
20
- this.onFirstPage = true;
21
- const firstPageSnapshot = this.templateSnapshotEmitter
22
- .clone()
23
- .limit(this.options.pageSize * 3)
24
- .snapshots(this.options.subscribe);
25
- this.snapshotSubject.next(firstPageSnapshot);
26
- }
27
- static compareValues(a, b) {
28
- if (a > b) {
29
- return 1;
30
- }
31
- else if (a < b) {
32
- return -1;
33
- }
34
- else {
35
- return 0;
36
- }
37
- }
38
- compare(doc1, doc2) {
39
- if (doc2 === null) {
40
- return 1;
41
- }
42
- for (const so of this.templateSnapshotEmitter.getSortOrders()) {
43
- const currentComparison = Pagination.compareValues((0, object_1.getInPath)(doc1, so.fieldName), (0, object_1.getInPath)(doc2, so.fieldName));
44
- if (currentComparison !== 0) {
45
- if (so.asc) {
46
- return currentComparison;
47
- }
48
- else {
49
- return -currentComparison;
50
- }
51
- }
52
- }
53
- return 0;
54
- }
55
- async dataReceived(data) {
56
- const extractedData = data.map((s) => this.templateSnapshotEmitter.extractData(s));
57
- if (data.length === 0) {
58
- if (this.onFirstPage) {
59
- this.internalStateObserver.next({ numBefore: 0, numAfter: 0, data, extractedData });
60
- }
61
- else {
62
- this.goToFirstPage();
63
- }
64
- return;
65
- }
66
- if (this.firstElement === null && this.lastElement !== null) {
67
- const numAfter = extractedData.filter((s) => this.compare(s, this.lastElement) === 1).length;
68
- this.firstElement = extractedData[data.length - numAfter - this.options.pageSize];
69
- this.lastElement = null;
70
- }
71
- const numBefore = extractedData.filter((s) => this.compare(s, this.firstElement) === -1).length;
72
- const numAfter = Math.max(0, data.length - numBefore - this.options.pageSize);
73
- if (numBefore === data.length) {
74
- this.prevInternal({ numBefore, numAfter, data, extractedData });
75
- return;
76
- }
77
- this.internalStateObserver.next({ numBefore, numAfter, data, extractedData });
78
- }
79
- doNewQuery(startingDoc, reverseOrder) {
80
- this.onFirstPage = false;
81
- if (reverseOrder) {
82
- const newSnapshotEmitter = this.templateSnapshotEmitter
83
- .clone()
84
- .limit(this.options.pageSize * 3)
85
- .flipSortOrder()
86
- .addCompositeCondition(this.templateSnapshotEmitter.getSortOrders().map((sortOrder) => {
87
- return {
88
- fieldName: sortOrder.fieldName,
89
- operator: sortOrder.asc ? '<=' : '>=',
90
- value: (0, object_1.getInPath)(startingDoc, sortOrder.fieldName),
91
- };
92
- }));
93
- this.snapshotSubject.next(newSnapshotEmitter.snapshots(this.options.subscribe).pipe((0, rxjs_1.map)((s) => s.reverse())));
94
- }
95
- else {
96
- const newSnapshotEmitter = this.templateSnapshotEmitter
97
- .clone()
98
- .limit(this.options.pageSize * 3)
99
- .addCompositeCondition(this.templateSnapshotEmitter.getSortOrders().map((sortOrder) => {
100
- return {
101
- fieldName: sortOrder.fieldName,
102
- operator: sortOrder.asc ? '>=' : '<=',
103
- value: (0, object_1.getInPath)(startingDoc, sortOrder.fieldName),
104
- };
105
- }));
106
- this.snapshotSubject.next(newSnapshotEmitter.snapshots(this.options.subscribe));
107
- }
108
- }
109
- async waitForInternalState() {
110
- const internalState = this.internalStateObserver.value;
111
- if (internalState !== null) {
112
- return internalState;
113
- }
114
- return await (0, rxjs_1.firstValueFrom)((0, rxjs_1.race)(this.isDestroyed.pipe((0, rxjs_1.filter)(Boolean), (0, rxjs_1.map)((_) => ({
115
- data: [],
116
- extractedData: [],
117
- numBefore: 0,
118
- numAfter: 0,
119
- }))), this.internalStateObserver.pipe((0, rxjs_1.filter)((state) => state !== null), (0, rxjs_1.take)(1))));
120
- }
121
- internalStateToState(internalState) {
122
- const { data, numBefore, numAfter, extractedData } = internalState;
123
- return {
124
- data: data
125
- .filter((_, i) => this.compare(extractedData[i], this.firstElement) !== -1)
126
- .slice(0, this.options.pageSize),
127
- hasNext: numAfter > 0,
128
- hasPrev: numBefore > 0,
129
- };
130
- }
131
- unsubscribe() {
132
- this.isDestroyed.next(true);
133
- this.isDestroyed.complete();
134
- this.internalStateObserver.complete();
135
- this.snapshotSubject.complete();
136
- }
137
- prevInternal(internalState) {
138
- const { numBefore, numAfter, data, extractedData } = internalState;
139
- this.firstElement = null;
140
- this.lastElement = extractedData[numBefore - 1];
141
- this.internalStateObserver.next(null);
142
- this.doNewQuery(extractedData[extractedData.length - numAfter - 1], true);
143
- }
144
- async prev() {
145
- this.prevInternal(await this.waitForInternalState());
146
- return await this.waitForData();
147
- }
148
- async next() {
149
- const { numBefore, extractedData } = await this.waitForInternalState();
150
- this.firstElement = extractedData[numBefore + this.options.pageSize];
151
- this.internalStateObserver.next(null);
152
- this.doNewQuery(extractedData[numBefore], false);
153
- return await this.waitForData();
154
- }
155
- async waitForData() {
156
- return this.internalStateToState(await this.waitForInternalState());
157
- }
158
- observeState() {
159
- return this.internalStateObserver.pipe((0, rxjs_1.filter)((state) => state !== null), (0, rxjs_1.map)((state) => {
160
- return this.internalStateToState(state);
161
- }));
162
- }
163
- }
164
- exports.Pagination = Pagination;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Pagination = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const object_1 = require("../utils/object");
6
+ class Pagination {
7
+ constructor(snapshotEmitter, options = {}) {
8
+ this.internalStateObserver = new rxjs_1.BehaviorSubject(null);
9
+ this.firstElement = null;
10
+ this.lastElement = null;
11
+ this.isDestroyed = new rxjs_1.BehaviorSubject(false);
12
+ this.snapshotSubject = new rxjs_1.Subject();
13
+ this.onFirstPage = true;
14
+ this.snapshotSubject.pipe((0, rxjs_1.switchAll)()).subscribe((data) => this.dataReceived(data));
15
+ this.templateSnapshotEmitter = snapshotEmitter.clone();
16
+ this.options = Object.assign({ pageSize: 100, subscribe: true }, options);
17
+ this.goToFirstPage();
18
+ }
19
+ goToFirstPage() {
20
+ this.onFirstPage = true;
21
+ const firstPageSnapshot = this.templateSnapshotEmitter
22
+ .clone()
23
+ .limit(this.options.pageSize * 3)
24
+ .snapshots(this.options.subscribe);
25
+ this.snapshotSubject.next(firstPageSnapshot);
26
+ }
27
+ static compareValues(a, b) {
28
+ if (a > b) {
29
+ return 1;
30
+ }
31
+ else if (a < b) {
32
+ return -1;
33
+ }
34
+ else {
35
+ return 0;
36
+ }
37
+ }
38
+ compare(doc1, doc2) {
39
+ if (doc2 === null) {
40
+ return 1;
41
+ }
42
+ for (const so of this.templateSnapshotEmitter.getSortOrders()) {
43
+ const currentComparison = Pagination.compareValues((0, object_1.getInPath)(doc1, so.fieldName), (0, object_1.getInPath)(doc2, so.fieldName));
44
+ if (currentComparison !== 0) {
45
+ if (so.asc) {
46
+ return currentComparison;
47
+ }
48
+ else {
49
+ return -currentComparison;
50
+ }
51
+ }
52
+ }
53
+ return 0;
54
+ }
55
+ async dataReceived(data) {
56
+ const extractedData = data.map((s) => this.templateSnapshotEmitter.extractData(s));
57
+ if (data.length === 0) {
58
+ if (this.onFirstPage) {
59
+ this.internalStateObserver.next({ numBefore: 0, numAfter: 0, data, extractedData });
60
+ }
61
+ else {
62
+ this.goToFirstPage();
63
+ }
64
+ return;
65
+ }
66
+ if (this.firstElement === null && this.lastElement !== null) {
67
+ const numAfter = extractedData.filter((s) => this.compare(s, this.lastElement) === 1).length;
68
+ this.firstElement = extractedData[data.length - numAfter - this.options.pageSize];
69
+ this.lastElement = null;
70
+ }
71
+ const numBefore = extractedData.filter((s) => this.compare(s, this.firstElement) === -1).length;
72
+ const numAfter = Math.max(0, data.length - numBefore - this.options.pageSize);
73
+ if (numBefore === data.length) {
74
+ this.prevInternal({ numBefore, numAfter, data, extractedData });
75
+ return;
76
+ }
77
+ this.internalStateObserver.next({ numBefore, numAfter, data, extractedData });
78
+ }
79
+ doNewQuery(startingDoc, reverseOrder) {
80
+ this.onFirstPage = false;
81
+ if (reverseOrder) {
82
+ const newSnapshotEmitter = this.templateSnapshotEmitter
83
+ .clone()
84
+ .limit(this.options.pageSize * 3)
85
+ .flipSortOrder()
86
+ .addCompositeCondition(this.templateSnapshotEmitter.getSortOrders().map((sortOrder) => {
87
+ return {
88
+ fieldName: sortOrder.fieldName,
89
+ operator: sortOrder.asc ? '<=' : '>=',
90
+ value: (0, object_1.getInPath)(startingDoc, sortOrder.fieldName),
91
+ };
92
+ }));
93
+ this.snapshotSubject.next(newSnapshotEmitter.snapshots(this.options.subscribe).pipe((0, rxjs_1.map)((s) => s.reverse())));
94
+ }
95
+ else {
96
+ const newSnapshotEmitter = this.templateSnapshotEmitter
97
+ .clone()
98
+ .limit(this.options.pageSize * 3)
99
+ .addCompositeCondition(this.templateSnapshotEmitter.getSortOrders().map((sortOrder) => {
100
+ return {
101
+ fieldName: sortOrder.fieldName,
102
+ operator: sortOrder.asc ? '>=' : '<=',
103
+ value: (0, object_1.getInPath)(startingDoc, sortOrder.fieldName),
104
+ };
105
+ }));
106
+ this.snapshotSubject.next(newSnapshotEmitter.snapshots(this.options.subscribe));
107
+ }
108
+ }
109
+ async waitForInternalState() {
110
+ const internalState = this.internalStateObserver.value;
111
+ if (internalState !== null) {
112
+ return internalState;
113
+ }
114
+ return await (0, rxjs_1.firstValueFrom)((0, rxjs_1.race)(this.isDestroyed.pipe((0, rxjs_1.filter)(Boolean), (0, rxjs_1.map)((_) => ({
115
+ data: [],
116
+ extractedData: [],
117
+ numBefore: 0,
118
+ numAfter: 0,
119
+ }))), this.internalStateObserver.pipe((0, rxjs_1.filter)((state) => state !== null), (0, rxjs_1.take)(1))));
120
+ }
121
+ internalStateToState(internalState) {
122
+ const { data, numBefore, numAfter, extractedData } = internalState;
123
+ return {
124
+ data: data
125
+ .filter((_, i) => this.compare(extractedData[i], this.firstElement) !== -1)
126
+ .slice(0, this.options.pageSize),
127
+ hasNext: numAfter > 0,
128
+ hasPrev: numBefore > 0,
129
+ };
130
+ }
131
+ unsubscribe() {
132
+ this.isDestroyed.next(true);
133
+ this.isDestroyed.complete();
134
+ this.internalStateObserver.complete();
135
+ this.snapshotSubject.complete();
136
+ }
137
+ prevInternal(internalState) {
138
+ const { numBefore, numAfter, data, extractedData } = internalState;
139
+ this.firstElement = null;
140
+ this.lastElement = extractedData[numBefore - 1];
141
+ this.internalStateObserver.next(null);
142
+ this.doNewQuery(extractedData[extractedData.length - numAfter - 1], true);
143
+ }
144
+ async prev() {
145
+ this.prevInternal(await this.waitForInternalState());
146
+ return await this.waitForData();
147
+ }
148
+ async next() {
149
+ const { numBefore, extractedData } = await this.waitForInternalState();
150
+ this.firstElement = extractedData[numBefore + this.options.pageSize];
151
+ this.internalStateObserver.next(null);
152
+ this.doNewQuery(extractedData[numBefore], false);
153
+ return await this.waitForData();
154
+ }
155
+ async waitForData() {
156
+ return this.internalStateToState(await this.waitForInternalState());
157
+ }
158
+ observeState() {
159
+ return this.internalStateObserver.pipe((0, rxjs_1.filter)((state) => state !== null), (0, rxjs_1.map)((state) => {
160
+ return this.internalStateToState(state);
161
+ }));
162
+ }
163
+ }
164
+ exports.Pagination = Pagination;
165
165
  //# sourceMappingURL=pagination.js.map
@@ -1,47 +1,47 @@
1
- import { IntegrationId } from '../communication.types';
2
- import { CollectionName, DocumentData } from '../document.types';
3
- import { FieldSort, Operator, Query, SimpleCondition } from '../query.types';
4
- import { DeepRecord, FieldOf, PartialBy, Paths } from '../types';
5
- export declare class QueryContext<T extends DocumentData = any> {
6
- readonly query: Query<T>;
7
- private readonly parsedConditions;
8
- constructor(query: Query<T>);
9
- get integrationId(): IntegrationId;
10
- get collectionName(): CollectionName;
11
- get limit(): number;
12
- sortedBy(sorts: Array<PartialBy<FieldSort<T>, 'asc'>>): boolean;
13
- sortedByExact(sorts: Array<PartialBy<FieldSort<T>, 'asc'>>): boolean;
14
- isSubqueryOf<F extends Paths<T>, O extends AllOperators>(fieldName: F, operator: O, value: GenericValue<T, F, O> | null): boolean;
15
- isSubqueryOfCondition(condition: GeneralCondition<T>): boolean;
16
- isSubqueryOfConditions(conditions: GeneralConditions<T>): boolean;
17
- isSubqueryOfQuery(query: Query<T>): boolean;
18
- getConditionsFor<K extends Paths<T>>(...fieldNames: Array<K>): ContextConditions<T, K>;
19
- getConditionsForField<K extends Paths<T>>(fieldName: K): ContextConditions<T>;
20
- documentMatchesQuery(doc: DocumentData): boolean;
21
- private evaluateSubset;
22
- private evaluateIncludes;
23
- private parseConditions;
24
- }
25
- type ContextConditions<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> = Array<ContextCondition<Doc, F>>;
26
- type ContextCondition<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> = InContextCondition<Doc, F> | NotInContextCondition<Doc, F> | OtherContextCondition<Doc, F>;
27
- interface InContextCondition<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> extends SimpleCondition<Doc, F, 'in'> {
28
- operator: 'in';
29
- value: Array<FieldOf<DeepRecord<Doc>, Paths<Doc>> | any>;
30
- }
31
- interface NotInContextCondition<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> extends SimpleCondition<Doc, F, 'not in'> {
32
- operator: 'not in';
33
- value: Array<FieldOf<DeepRecord<Doc>, Paths<Doc>> | any>;
34
- }
35
- interface OtherContextCondition<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> extends SimpleCondition<Doc, F, Exclude<ContextOperator, 'in' | 'not in'>> {
36
- operator: Exclude<ContextOperator, 'in' | 'not in'>;
37
- value: FieldOf<DeepRecord<Doc>, Paths<Doc>> | any;
38
- }
39
- interface GeneralCondition<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> extends SimpleCondition<Doc, F, AllOperators> {
40
- operator: AllOperators;
41
- value: any;
42
- }
43
- type GeneralConditions<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> = Array<GeneralCondition<Doc, F>>;
44
- type ContextOperator = Exclude<Operator, '==' | '!='> | 'in' | 'not in';
45
- type AllOperators = Operator | 'in' | 'not in';
46
- type GenericValue<Doc = any, F extends Paths<Doc> = Paths<Doc>, O extends AllOperators = any> = O extends 'in' ? Array<DeepRecord<Doc>[F]> | null : O extends 'not in' ? Array<DeepRecord<Doc>[F]> | null : DeepRecord<Doc>[F] | null;
47
- export {};
1
+ import { IntegrationId } from '../communication.types';
2
+ import { CollectionName, DocumentData } from '../document.types';
3
+ import { FieldSort, Operator, Query, SimpleCondition } from '../query.types';
4
+ import { DeepRecord, FieldOf, PartialBy, Paths } from '../types';
5
+ export declare class QueryContext<T extends DocumentData = any> {
6
+ readonly query: Query<T>;
7
+ private readonly parsedConditions;
8
+ constructor(query: Query<T>);
9
+ get integrationId(): IntegrationId;
10
+ get collectionName(): CollectionName;
11
+ get limit(): number;
12
+ sortedBy(sorts: Array<PartialBy<FieldSort<T>, 'asc'>>): boolean;
13
+ sortedByExact(sorts: Array<PartialBy<FieldSort<T>, 'asc'>>): boolean;
14
+ isSubqueryOf<F extends Paths<T>, O extends AllOperators>(fieldName: F, operator: O, value: GenericValue<T, F, O> | null): boolean;
15
+ isSubqueryOfCondition(condition: GeneralCondition<T>): boolean;
16
+ isSubqueryOfConditions(conditions: GeneralConditions<T>): boolean;
17
+ isSubqueryOfQuery(query: Query<T>): boolean;
18
+ getConditionsFor<K extends Paths<T>>(...fieldNames: Array<K>): ContextConditions<T, K>;
19
+ getConditionsForField<K extends Paths<T>>(fieldName: K): ContextConditions<T>;
20
+ documentMatchesQuery(doc: DocumentData): boolean;
21
+ private evaluateSubset;
22
+ private evaluateIncludes;
23
+ private parseConditions;
24
+ }
25
+ type ContextConditions<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> = Array<ContextCondition<Doc, F>>;
26
+ type ContextCondition<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> = InContextCondition<Doc, F> | NotInContextCondition<Doc, F> | OtherContextCondition<Doc, F>;
27
+ interface InContextCondition<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> extends SimpleCondition<Doc, F, 'in'> {
28
+ operator: 'in';
29
+ value: Array<FieldOf<DeepRecord<Doc>, Paths<Doc>> | any>;
30
+ }
31
+ interface NotInContextCondition<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> extends SimpleCondition<Doc, F, 'not in'> {
32
+ operator: 'not in';
33
+ value: Array<FieldOf<DeepRecord<Doc>, Paths<Doc>> | any>;
34
+ }
35
+ interface OtherContextCondition<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> extends SimpleCondition<Doc, F, Exclude<ContextOperator, 'in' | 'not in'>> {
36
+ operator: Exclude<ContextOperator, 'in' | 'not in'>;
37
+ value: FieldOf<DeepRecord<Doc>, Paths<Doc>> | any;
38
+ }
39
+ interface GeneralCondition<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> extends SimpleCondition<Doc, F, AllOperators> {
40
+ operator: AllOperators;
41
+ value: any;
42
+ }
43
+ type GeneralConditions<Doc extends DocumentData = any, F extends Paths<Doc> = Paths<Doc>> = Array<GeneralCondition<Doc, F>>;
44
+ type ContextOperator = Exclude<Operator, '==' | '!='> | 'in' | 'not in';
45
+ type AllOperators = Operator | 'in' | 'not in';
46
+ type GenericValue<Doc = any, F extends Paths<Doc> = Paths<Doc>, O extends AllOperators = any> = O extends 'in' ? Array<DeepRecord<Doc>[F]> | null : O extends 'not in' ? Array<DeepRecord<Doc>[F]> | null : DeepRecord<Doc>[F] | null;
47
+ export {};