@squidcloud/local-backend 1.0.62 → 1.0.63

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 (185) 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 +90 -90
  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 +1312 -1312
  12. package/dist/common/src/application.schemas.js +860 -860
  13. package/dist/common/src/application.types.d.ts +186 -186
  14. package/dist/common/src/application.types.js +89 -89
  15. package/dist/common/src/backend-function.schemas.d.ts +3 -3
  16. package/dist/common/src/backend-function.schemas.js +12 -12
  17. package/dist/common/src/backend-function.types.d.ts +6 -6
  18. package/dist/common/src/backend-function.types.js +2 -2
  19. package/dist/common/src/backend-run.types.d.ts +54 -54
  20. package/dist/common/src/backend-run.types.js +96 -96
  21. package/dist/common/src/bundle-api.types.d.ts +63 -63
  22. package/dist/common/src/bundle-api.types.js +2 -2
  23. package/dist/common/src/bundle-data.types.d.ts +59 -59
  24. package/dist/common/src/bundle-data.types.js +2 -2
  25. package/dist/common/src/communication.types.d.ts +18 -18
  26. package/dist/common/src/communication.types.js +40 -40
  27. package/dist/common/src/context.types.d.ts +24 -24
  28. package/dist/common/src/context.types.js +2 -2
  29. package/dist/common/src/distributed-lock.context.d.ts +5 -5
  30. package/dist/common/src/distributed-lock.context.js +10 -10
  31. package/dist/common/src/document.types.d.ts +32 -32
  32. package/dist/common/src/document.types.js +50 -50
  33. package/dist/common/src/graphql.context.d.ts +14 -14
  34. package/dist/common/src/graphql.context.js +12 -12
  35. package/dist/common/src/graphql.types.d.ts +11 -11
  36. package/dist/common/src/graphql.types.js +34 -34
  37. package/dist/common/src/heartbeat.types.d.ts +4 -4
  38. package/dist/common/src/heartbeat.types.js +16 -16
  39. package/dist/common/src/http-status.enum.d.ts +50 -50
  40. package/dist/common/src/http-status.enum.js +54 -54
  41. package/dist/common/src/index.d.ts +55 -53
  42. package/dist/common/src/index.js +71 -69
  43. package/dist/common/src/index.js.map +1 -1
  44. package/dist/common/src/integrations/ai_assistant.types.d.ts +24 -24
  45. package/dist/common/src/integrations/ai_assistant.types.js +2 -2
  46. package/dist/common/src/integrations/api.types.d.ts +80 -80
  47. package/dist/common/src/integrations/api.types.js +2 -2
  48. package/dist/common/src/integrations/auth.types.d.ts +39 -39
  49. package/dist/common/src/integrations/auth.types.js +2 -2
  50. package/dist/common/src/integrations/database.types.d.ts +231 -231
  51. package/dist/common/src/integrations/database.types.js +2 -2
  52. package/dist/common/src/integrations/index.d.ts +124 -124
  53. package/dist/common/src/integrations/index.js +111 -111
  54. package/dist/common/src/integrations/observability.types.d.ts +23 -23
  55. package/dist/common/src/integrations/observability.types.js +23 -23
  56. package/dist/common/src/logger.types.d.ts +21 -21
  57. package/dist/common/src/logger.types.js +11 -11
  58. package/dist/common/src/metrics.types.d.ts +73 -73
  59. package/dist/common/src/metrics.types.js +11 -11
  60. package/dist/common/src/mutation.context.d.ts +13 -13
  61. package/dist/common/src/mutation.context.js +26 -26
  62. package/dist/common/src/mutation.schemas.d.ts +5 -5
  63. package/dist/common/src/mutation.schemas.js +114 -114
  64. package/dist/common/src/mutation.types.d.ts +63 -63
  65. package/dist/common/src/mutation.types.js +142 -142
  66. package/dist/common/src/named-query.context.d.ts +4 -4
  67. package/dist/common/src/named-query.context.js +9 -9
  68. package/dist/common/src/named-query.schemas.d.ts +3 -3
  69. package/dist/common/src/named-query.schemas.js +13 -13
  70. package/dist/common/src/named-query.types.d.ts +8 -8
  71. package/dist/common/src/named-query.types.js +2 -2
  72. package/dist/common/src/query/base-query-builder.d.ts +37 -37
  73. package/dist/common/src/query/base-query-builder.js +36 -36
  74. package/dist/common/src/query/index.d.ts +4 -4
  75. package/dist/common/src/query/index.js +20 -20
  76. package/dist/common/src/query/pagination.d.ts +42 -42
  77. package/dist/common/src/query/pagination.js +164 -164
  78. package/dist/common/src/query/query-context.d.ts +47 -47
  79. package/dist/common/src/query/query-context.js +159 -159
  80. package/dist/common/src/query/serialized-query.types.d.ts +24 -24
  81. package/dist/common/src/query/serialized-query.types.js +2 -2
  82. package/dist/common/src/query.types.d.ts +86 -86
  83. package/dist/common/src/query.types.js +153 -153
  84. package/dist/common/src/regions.d.ts +21 -21
  85. package/dist/common/src/regions.js +46 -46
  86. package/dist/common/src/schema/schema.types.d.ts +30 -30
  87. package/dist/common/src/schema/schema.types.js +172 -172
  88. package/dist/common/src/secret.schemas.d.ts +6 -6
  89. package/dist/common/src/secret.schemas.js +32 -32
  90. package/dist/common/src/secret.types.d.ts +49 -49
  91. package/dist/common/src/secret.types.js +5 -5
  92. package/dist/common/src/security.types.d.ts +3 -3
  93. package/dist/common/src/security.types.js +2 -2
  94. package/dist/common/src/socket.schemas.d.ts +3 -3
  95. package/dist/common/src/socket.schemas.js +58 -58
  96. package/dist/common/src/socket.types.d.ts +112 -108
  97. package/dist/common/src/socket.types.js +2 -2
  98. package/dist/common/src/time-units.d.ts +5 -5
  99. package/dist/common/src/time-units.js +8 -8
  100. package/dist/common/src/trigger.types.d.ts +15 -15
  101. package/dist/common/src/trigger.types.js +2 -2
  102. package/dist/common/src/types.d.ts +21 -21
  103. package/dist/common/src/types.js +2 -2
  104. package/dist/common/src/utils/array.d.ts +8 -8
  105. package/dist/common/src/utils/array.js +54 -54
  106. package/dist/common/src/utils/assert.d.ts +8 -8
  107. package/dist/common/src/utils/assert.js +49 -49
  108. package/dist/common/src/utils/error.d.ts +4 -4
  109. package/dist/common/src/utils/error.js +10 -10
  110. package/dist/common/src/utils/global.utils.d.ts +10 -0
  111. package/dist/common/src/utils/global.utils.js +47 -0
  112. package/dist/common/src/utils/global.utils.js.map +1 -0
  113. package/dist/common/src/utils/http.d.ts +2 -2
  114. package/dist/common/src/utils/http.js +40 -40
  115. package/dist/common/src/utils/http.js.map +1 -1
  116. package/dist/common/src/utils/id.d.ts +2 -2
  117. package/dist/common/src/utils/id.js +21 -21
  118. package/dist/common/src/utils/lock.manager.d.ts +9 -9
  119. package/dist/common/src/utils/lock.manager.js +39 -39
  120. package/dist/common/src/utils/nullish.d.ts +2 -2
  121. package/dist/common/src/utils/nullish.js +11 -11
  122. package/dist/common/src/utils/object.d.ts +5 -5
  123. package/dist/common/src/utils/object.js +75 -75
  124. package/dist/common/src/utils/serialization.d.ts +6 -6
  125. package/dist/common/src/utils/serialization.js +77 -77
  126. package/dist/common/src/utils/transforms.d.ts +18 -18
  127. package/dist/common/src/utils/transforms.js +92 -92
  128. package/dist/common/src/utils/url.d.ts +1 -1
  129. package/dist/common/src/utils/url.js +15 -15
  130. package/dist/common/src/utils/validation.d.ts +17 -17
  131. package/dist/common/src/utils/validation.js +209 -209
  132. package/dist/common/src/webhook-response.d.ts +6 -6
  133. package/dist/common/src/webhook-response.js +2 -2
  134. package/dist/common/src/websocket.impl.d.ts +21 -0
  135. package/dist/common/src/websocket.impl.js +75 -0
  136. package/dist/common/src/websocket.impl.js.map +1 -0
  137. package/dist/internal-common/src/async-queue.d.ts +4 -4
  138. package/dist/internal-common/src/async-queue.js +17 -17
  139. package/dist/internal-common/src/code-executor.types.d.ts +13 -13
  140. package/dist/internal-common/src/code-executor.types.js +2 -2
  141. package/dist/internal-common/src/dao.types.d.ts +46 -46
  142. package/dist/internal-common/src/dao.types.js +2 -2
  143. package/dist/internal-common/src/environment/environment.types.d.ts +74 -74
  144. package/dist/internal-common/src/environment/environment.types.js +2 -2
  145. package/dist/internal-common/src/environment/index.d.ts +6 -6
  146. package/dist/internal-common/src/environment/index.js +27 -27
  147. package/dist/internal-common/src/environment/local.environment.d.ts +2 -2
  148. package/dist/internal-common/src/environment/local.environment.js +62 -62
  149. package/dist/internal-common/src/filters/custom-exception.filter.d.ts +6 -6
  150. package/dist/internal-common/src/filters/custom-exception.filter.js +44 -44
  151. package/dist/internal-common/src/index.d.ts +14 -14
  152. package/dist/internal-common/src/index.js +32 -32
  153. package/dist/internal-common/src/interceptors/body.interceptor.d.ts +5 -5
  154. package/dist/internal-common/src/interceptors/body.interceptor.js +24 -24
  155. package/dist/internal-common/src/kafka/kafka.manager.d.ts +22 -22
  156. package/dist/internal-common/src/kafka/kafka.manager.js +129 -129
  157. package/dist/internal-common/src/kafka/kafka.types.d.ts +17 -17
  158. package/dist/internal-common/src/kafka/kafka.types.js +2 -2
  159. package/dist/internal-common/src/kafka-observability-publisher.d.ts +11 -11
  160. package/dist/internal-common/src/kafka-observability-publisher.js +20 -20
  161. package/dist/internal-common/src/local-dev.types.d.ts +35 -31
  162. package/dist/internal-common/src/local-dev.types.js +2 -2
  163. package/dist/internal-common/src/observability-publisher.d.ts +9 -9
  164. package/dist/internal-common/src/observability-publisher.js +58 -58
  165. package/dist/internal-common/src/observability.types.d.ts +17 -17
  166. package/dist/internal-common/src/observability.types.js +2 -2
  167. package/dist/internal-common/src/shutdown.manager.d.ts +20 -20
  168. package/dist/internal-common/src/shutdown.manager.js +75 -75
  169. package/dist/internal-common/src/utils.d.ts +5 -5
  170. package/dist/internal-common/src/utils.js +29 -29
  171. package/dist/local-backend/src/index.d.ts +4 -4
  172. package/dist/local-backend/src/index.js +20 -20
  173. package/dist/local-backend/src/local-backend-socket.service.d.ts +19 -18
  174. package/dist/local-backend/src/local-backend-socket.service.js +110 -107
  175. package/dist/local-backend/src/local-backend-socket.service.js.map +1 -1
  176. package/dist/local-backend/src/local-backend.app.d.ts +2 -2
  177. package/dist/local-backend/src/local-backend.app.js +19 -19
  178. package/dist/local-backend/src/local-backend.controller.d.ts +8 -8
  179. package/dist/local-backend/src/local-backend.controller.js +49 -49
  180. package/dist/local-backend/src/local-backend.module.d.ts +8 -8
  181. package/dist/local-backend/src/local-backend.module.js +53 -53
  182. package/dist/local-backend/src/local-backend.service.d.ts +15 -15
  183. package/dist/local-backend/src/local-backend.service.js +165 -165
  184. package/dist/tsconfig.build.tsbuildinfo +1 -1
  185. package/package.json +2 -2
@@ -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 {};