@verdant-web/store 5.4.2 → 5.4.3
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.
- package/dist/bundle/index.js +7 -7
- package/dist/bundle/index.js.map +3 -3
- package/dist/esm/queries/BaseQuery.d.ts +2 -0
- package/dist/esm/queries/BaseQuery.js +11 -1
- package/dist/esm/queries/BaseQuery.js.map +1 -1
- package/dist/esm/queries/diagnostics.d.ts +5 -0
- package/dist/esm/queries/diagnostics.js.map +1 -1
- package/package.json +1 -1
- package/src/queries/BaseQuery.ts +16 -6
- package/src/queries/diagnostics.ts +6 -0
|
@@ -24,6 +24,8 @@ export declare abstract class BaseQuery<T> extends Disposable {
|
|
|
24
24
|
private _status;
|
|
25
25
|
private _executionPromise;
|
|
26
26
|
private _timing;
|
|
27
|
+
private _startedAt;
|
|
28
|
+
private _timingHistory;
|
|
27
29
|
protected context: Context;
|
|
28
30
|
readonly collection: string;
|
|
29
31
|
readonly key: string;
|
|
@@ -2,7 +2,7 @@ var _a;
|
|
|
2
2
|
import { EventSubscriber } from '@verdant-web/common';
|
|
3
3
|
import { Entity } from '../entities/Entity.js';
|
|
4
4
|
import { Disposable } from '../utils/Disposable.js';
|
|
5
|
-
import { getDiagnosticResult } from './diagnostics.js';
|
|
5
|
+
import { getDiagnosticResult, } from './diagnostics.js';
|
|
6
6
|
import { filterResultSet } from './utils.js';
|
|
7
7
|
export const ON_ALL_UNSUBSCRIBED = Symbol('ON_ALL_UNSUBSCRIBED');
|
|
8
8
|
export const UPDATE = Symbol('UPDATE');
|
|
@@ -22,6 +22,8 @@ export class BaseQuery extends Disposable {
|
|
|
22
22
|
hydration: null,
|
|
23
23
|
total: null,
|
|
24
24
|
};
|
|
25
|
+
this._startedAt = null;
|
|
26
|
+
this._timingHistory = [];
|
|
25
27
|
this.setValue = (value) => {
|
|
26
28
|
this._rawValue = value;
|
|
27
29
|
this.subscribeToDeleteAndRestore(this._rawValue);
|
|
@@ -81,6 +83,7 @@ export class BaseQuery extends Disposable {
|
|
|
81
83
|
};
|
|
82
84
|
this.execute = () => {
|
|
83
85
|
const startTime = performance.now();
|
|
86
|
+
this._startedAt = Date.now();
|
|
84
87
|
this.context.log('debug', 'Executing query', this.key);
|
|
85
88
|
if (this.status === 'initial') {
|
|
86
89
|
this.status = 'initializing';
|
|
@@ -105,8 +108,13 @@ export class BaseQuery extends Disposable {
|
|
|
105
108
|
}
|
|
106
109
|
})
|
|
107
110
|
.finally(() => {
|
|
111
|
+
var _b;
|
|
108
112
|
const duration = performance.now() - startTime;
|
|
109
113
|
this._timing.total = duration;
|
|
114
|
+
this._timingHistory = [
|
|
115
|
+
...this._timingHistory,
|
|
116
|
+
Object.assign({ startedAt: (_b = this._startedAt) !== null && _b !== void 0 ? _b : Date.now() }, this._timing),
|
|
117
|
+
].slice(-100);
|
|
110
118
|
this.context.log('debug', 'Query executed', this.key, `Duration: ${duration}ms`);
|
|
111
119
|
});
|
|
112
120
|
return this._executionPromise;
|
|
@@ -131,12 +139,14 @@ export class BaseQuery extends Disposable {
|
|
|
131
139
|
};
|
|
132
140
|
this.getDiagnostic = (active) => ({
|
|
133
141
|
key: this.key,
|
|
142
|
+
startedAt: this._startedAt,
|
|
134
143
|
collection: this.collection,
|
|
135
144
|
type: this.type,
|
|
136
145
|
status: this.status,
|
|
137
146
|
active,
|
|
138
147
|
result: getDiagnosticResult(this.current),
|
|
139
148
|
timing: Object.assign({}, this._timing),
|
|
149
|
+
runs: this._timingHistory.map((run) => (Object.assign({}, run))),
|
|
140
150
|
});
|
|
141
151
|
this[_a] = (handler) => {
|
|
142
152
|
this._allUnsubscribedHandler = handler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseQuery.js","sourceRoot":"","sources":["../../../src/queries/BaseQuery.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"BaseQuery.js","sourceRoot":"","sources":["../../../src/queries/BaseQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,19 @@ export type QueryTiming = {
|
|
|
4
4
|
hydration: number | null;
|
|
5
5
|
total: number | null;
|
|
6
6
|
};
|
|
7
|
+
export type QueryRun = QueryTiming & {
|
|
8
|
+
startedAt: number;
|
|
9
|
+
};
|
|
7
10
|
export type QueryDiagnostic = {
|
|
8
11
|
key: string;
|
|
12
|
+
startedAt: number | null;
|
|
9
13
|
collection: string;
|
|
10
14
|
type: string;
|
|
11
15
|
status: QueryStatus;
|
|
12
16
|
active: boolean;
|
|
13
17
|
result: unknown;
|
|
14
18
|
timing: QueryTiming;
|
|
19
|
+
runs: QueryRun[];
|
|
15
20
|
};
|
|
16
21
|
export type QueryDiagnostics = {
|
|
17
22
|
queries: QueryDiagnostic[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/queries/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/queries/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AA6B/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAW,EAAE;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}
|
package/package.json
CHANGED
package/src/queries/BaseQuery.ts
CHANGED
|
@@ -2,7 +2,12 @@ import { EventSubscriber } from '@verdant-web/common';
|
|
|
2
2
|
import { Context } from '../context/context.js';
|
|
3
3
|
import { Entity } from '../entities/Entity.js';
|
|
4
4
|
import { Disposable } from '../utils/Disposable.js';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
getDiagnosticResult,
|
|
7
|
+
QueryDiagnostic,
|
|
8
|
+
QueryRun,
|
|
9
|
+
QueryTiming,
|
|
10
|
+
} from './diagnostics.js';
|
|
6
11
|
import { filterResultSet } from './utils.js';
|
|
7
12
|
|
|
8
13
|
export type BaseQueryEvents = {
|
|
@@ -43,6 +48,8 @@ export abstract class BaseQuery<T> extends Disposable {
|
|
|
43
48
|
hydration: null,
|
|
44
49
|
total: null,
|
|
45
50
|
};
|
|
51
|
+
private _startedAt: number | null = null;
|
|
52
|
+
private _timingHistory: QueryRun[] = [];
|
|
46
53
|
|
|
47
54
|
protected context;
|
|
48
55
|
|
|
@@ -232,11 +239,8 @@ export abstract class BaseQuery<T> extends Disposable {
|
|
|
232
239
|
|
|
233
240
|
execute = () => {
|
|
234
241
|
const startTime = performance.now();
|
|
235
|
-
this.
|
|
236
|
-
|
|
237
|
-
'Executing query',
|
|
238
|
-
this.key,
|
|
239
|
-
);
|
|
242
|
+
this._startedAt = Date.now();
|
|
243
|
+
this.context.log('debug', 'Executing query', this.key);
|
|
240
244
|
|
|
241
245
|
if (this.status === 'initial') {
|
|
242
246
|
this.status = 'initializing';
|
|
@@ -264,6 +268,10 @@ export abstract class BaseQuery<T> extends Disposable {
|
|
|
264
268
|
.finally(() => {
|
|
265
269
|
const duration = performance.now() - startTime;
|
|
266
270
|
this._timing.total = duration;
|
|
271
|
+
this._timingHistory = [
|
|
272
|
+
...this._timingHistory,
|
|
273
|
+
{ startedAt: this._startedAt ?? Date.now(), ...this._timing },
|
|
274
|
+
].slice(-100);
|
|
267
275
|
this.context.log(
|
|
268
276
|
'debug',
|
|
269
277
|
'Query executed',
|
|
@@ -296,12 +304,14 @@ export abstract class BaseQuery<T> extends Disposable {
|
|
|
296
304
|
|
|
297
305
|
getDiagnostic = (active: boolean): QueryDiagnostic => ({
|
|
298
306
|
key: this.key,
|
|
307
|
+
startedAt: this._startedAt,
|
|
299
308
|
collection: this.collection,
|
|
300
309
|
type: this.type,
|
|
301
310
|
status: this.status,
|
|
302
311
|
active,
|
|
303
312
|
result: getDiagnosticResult(this.current),
|
|
304
313
|
timing: { ...this._timing },
|
|
314
|
+
runs: this._timingHistory.map((run) => ({ ...run })),
|
|
305
315
|
});
|
|
306
316
|
protected abstract run(): Promise<void>;
|
|
307
317
|
|
|
@@ -7,14 +7,20 @@ export type QueryTiming = {
|
|
|
7
7
|
total: number | null;
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
+
export type QueryRun = QueryTiming & {
|
|
11
|
+
startedAt: number;
|
|
12
|
+
};
|
|
13
|
+
|
|
10
14
|
export type QueryDiagnostic = {
|
|
11
15
|
key: string;
|
|
16
|
+
startedAt: number | null;
|
|
12
17
|
collection: string;
|
|
13
18
|
type: string;
|
|
14
19
|
status: QueryStatus;
|
|
15
20
|
active: boolean;
|
|
16
21
|
result: unknown;
|
|
17
22
|
timing: QueryTiming;
|
|
23
|
+
runs: QueryRun[];
|
|
18
24
|
};
|
|
19
25
|
|
|
20
26
|
export type QueryDiagnostics = {
|