@webda/core 4.0.0-beta.5 → 4.0.0-beta.7
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/README.md +6 -5
- package/lib/application/application.d.ts.map +1 -1
- package/lib/application/application.js +18 -6
- package/lib/application/application.js.map +1 -1
- package/lib/application/iconfiguration.d.ts +31 -0
- package/lib/application/iconfiguration.d.ts.map +1 -1
- package/lib/application/iconfiguration.js.map +1 -1
- package/lib/application/unpackedapplication.d.ts.map +1 -1
- package/lib/application/unpackedapplication.js +2 -1
- package/lib/application/unpackedapplication.js.map +1 -1
- package/lib/bin/cli-phase.d.ts +18 -2
- package/lib/bin/cli-phase.d.ts.map +1 -1
- package/lib/bin/cli-phase.js +25 -0
- package/lib/bin/cli-phase.js.map +1 -1
- package/lib/bin/cli.d.ts +19 -0
- package/lib/bin/cli.d.ts.map +1 -1
- package/lib/bin/cli.js +120 -41
- package/lib/bin/cli.js.map +1 -1
- package/lib/configurations/configuration.service.d.ts +7 -0
- package/lib/configurations/configuration.service.d.ts.map +1 -1
- package/lib/configurations/configuration.service.js +18 -5
- package/lib/configurations/configuration.service.js.map +1 -1
- package/lib/configurations/kubernetesconfiguration.service.d.ts.map +1 -1
- package/lib/configurations/kubernetesconfiguration.service.js +1 -4
- package/lib/configurations/kubernetesconfiguration.service.js.map +1 -1
- package/lib/contexts/httpcontext.d.ts +15 -1
- package/lib/contexts/httpcontext.d.ts.map +1 -1
- package/lib/contexts/httpcontext.js +61 -19
- package/lib/contexts/httpcontext.js.map +1 -1
- package/lib/contexts/operationcontext.d.ts +6 -0
- package/lib/contexts/operationcontext.d.ts.map +1 -1
- package/lib/contexts/operationcontext.js +16 -2
- package/lib/contexts/operationcontext.js.map +1 -1
- package/lib/contexts/restcontext.d.ts +110 -0
- package/lib/contexts/restcontext.d.ts.map +1 -0
- package/lib/contexts/restcontext.js +247 -0
- package/lib/contexts/restcontext.js.map +1 -0
- package/lib/contexts/streamingcontext.d.ts +71 -0
- package/lib/contexts/streamingcontext.d.ts.map +1 -0
- package/lib/contexts/streamingcontext.js +93 -0
- package/lib/contexts/streamingcontext.js.map +1 -0
- package/lib/contexts/webcontext.d.ts +20 -0
- package/lib/contexts/webcontext.d.ts.map +1 -1
- package/lib/contexts/webcontext.js +43 -10
- package/lib/contexts/webcontext.js.map +1 -1
- package/lib/contexts/websocketcontext.d.ts +39 -0
- package/lib/contexts/websocketcontext.d.ts.map +1 -0
- package/lib/contexts/websocketcontext.js +67 -0
- package/lib/contexts/websocketcontext.js.map +1 -0
- package/lib/core/asyncqueue.d.ts +50 -0
- package/lib/core/asyncqueue.d.ts.map +1 -0
- package/lib/core/asyncqueue.js +96 -0
- package/lib/core/asyncqueue.js.map +1 -0
- package/lib/core/core.d.ts +21 -2
- package/lib/core/core.d.ts.map +1 -1
- package/lib/core/core.js +87 -24
- package/lib/core/core.js.map +1 -1
- package/lib/core/icore.d.ts +14 -1
- package/lib/core/icore.d.ts.map +1 -1
- package/lib/core/icore.js.map +1 -1
- package/lib/core/instancestorage.d.ts +1 -0
- package/lib/core/instancestorage.d.ts.map +1 -1
- package/lib/core/instancestorage.js +1 -0
- package/lib/core/instancestorage.js.map +1 -1
- package/lib/core/operations.d.ts +49 -6
- package/lib/core/operations.d.ts.map +1 -1
- package/lib/core/operations.js +187 -24
- package/lib/core/operations.js.map +1 -1
- package/lib/deployers/git.d.ts +4 -2
- package/lib/deployers/git.d.ts.map +1 -1
- package/lib/deployers/git.js +44 -5
- package/lib/deployers/git.js.map +1 -1
- package/lib/deployers/packager.d.ts +38 -0
- package/lib/deployers/packager.d.ts.map +1 -1
- package/lib/deployers/packager.js +70 -18
- package/lib/deployers/packager.js.map +1 -1
- package/lib/deployers/packager.service.d.ts +33 -0
- package/lib/deployers/packager.service.d.ts.map +1 -0
- package/lib/deployers/packager.service.js +112 -0
- package/lib/deployers/packager.service.js.map +1 -0
- package/lib/errors/errors.d.ts +15 -0
- package/lib/errors/errors.d.ts.map +1 -1
- package/lib/errors/errors.js +20 -0
- package/lib/errors/errors.js.map +1 -1
- package/lib/index.d.ts +7 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -1
- package/lib/models/permissions.d.ts +12 -1
- package/lib/models/permissions.d.ts.map +1 -1
- package/lib/models/permissions.js +29 -2
- package/lib/models/permissions.js.map +1 -1
- package/lib/rest/restoperationstransport.service.d.ts +108 -0
- package/lib/rest/restoperationstransport.service.d.ts.map +1 -1
- package/lib/rest/restoperationstransport.service.js +348 -9
- package/lib/rest/restoperationstransport.service.js.map +1 -1
- package/lib/rest/router.service.d.ts +1 -1
- package/lib/rest/router.service.d.ts.map +1 -1
- package/lib/rest/router.service.js.map +1 -1
- package/lib/services/audit.model.d.ts.map +1 -1
- package/lib/services/audit.model.js +7 -3
- package/lib/services/audit.model.js.map +1 -1
- package/lib/services/authenticatedencryption.d.ts +25 -0
- package/lib/services/authenticatedencryption.d.ts.map +1 -0
- package/lib/services/authenticatedencryption.js +56 -0
- package/lib/services/authenticatedencryption.js.map +1 -0
- package/lib/services/cloudbinary.d.ts.map +1 -1
- package/lib/services/cloudbinary.js +3 -2
- package/lib/services/cloudbinary.js.map +1 -1
- package/lib/services/command.d.ts +7 -1
- package/lib/services/command.d.ts.map +1 -1
- package/lib/services/command.js +4 -0
- package/lib/services/command.js.map +1 -1
- package/lib/services/cryptoservice.service.d.ts +405 -25
- package/lib/services/cryptoservice.service.d.ts.map +1 -1
- package/lib/services/cryptoservice.service.js +779 -72
- package/lib/services/cryptoservice.service.js.map +1 -1
- package/lib/services/httpserver.service.d.ts.map +1 -1
- package/lib/services/httpserver.service.js +15 -9
- package/lib/services/httpserver.service.js.map +1 -1
- package/lib/services/icryptoservice.d.ts +11 -0
- package/lib/services/icryptoservice.d.ts.map +1 -1
- package/lib/services/icryptoservice.js +2 -0
- package/lib/services/icryptoservice.js.map +1 -1
- package/lib/services/mailer.service.d.ts +4 -0
- package/lib/services/mailer.service.d.ts.map +1 -1
- package/lib/services/mailer.service.js +8 -1
- package/lib/services/mailer.service.js.map +1 -1
- package/lib/services/operationstransport.d.ts +13 -0
- package/lib/services/operationstransport.d.ts.map +1 -1
- package/lib/services/operationstransport.js +28 -6
- package/lib/services/operationstransport.js.map +1 -1
- package/lib/services/pki.encrypter.d.ts +214 -0
- package/lib/services/pki.encrypter.d.ts.map +1 -0
- package/lib/services/pki.encrypter.js +350 -0
- package/lib/services/pki.encrypter.js.map +1 -0
- package/lib/services/secretscheck.d.ts +120 -0
- package/lib/services/secretscheck.d.ts.map +1 -0
- package/lib/services/secretscheck.js +322 -0
- package/lib/services/secretscheck.js.map +1 -0
- package/lib/services/servicecommands.d.ts +8 -4
- package/lib/services/servicecommands.d.ts.map +1 -1
- package/lib/services/servicecommands.js +14 -5
- package/lib/services/servicecommands.js.map +1 -1
- package/lib/session/manager.model.d.ts +3 -1
- package/lib/session/manager.model.d.ts.map +1 -1
- package/lib/session/manager.model.js +6 -3
- package/lib/session/manager.model.js.map +1 -1
- package/lib/stores/store.d.ts +20 -1
- package/lib/stores/store.d.ts.map +1 -1
- package/lib/stores/store.js +29 -1
- package/lib/stores/store.js.map +1 -1
- package/lib/test/objects.d.ts.map +1 -1
- package/lib/test/objects.js +3 -1
- package/lib/test/objects.js.map +1 -1
- package/package.json +15 -15
- package/webda.module.json +224 -50
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restcontext.js","sourceRoot":"","sources":["../../src/contexts/restcontext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { WebContext } from "./webcontext.js";
|
|
2
|
+
/**
|
|
3
|
+
* A value as clients may see it: plain JSON without `__` keys
|
|
4
|
+
* @param value - an operation result or streamed chunk
|
|
5
|
+
* @returns the copy (undefined stays undefined), or null when the value is not JSON-serializable (function, symbol)
|
|
6
|
+
*/
|
|
7
|
+
export declare function toPublicChunk(value: unknown): unknown;
|
|
8
|
+
/**
|
|
9
|
+
* The shared part of a context serving a streaming operation over a transport (gRPC, WebSocket, GraphQL
|
|
10
|
+
* subscription, ...):
|
|
11
|
+
*
|
|
12
|
+
* - a non-streamed result is buffered as usual (`writeResult()`)
|
|
13
|
+
* - a streamed chunk is sent right away (`sendChunk()`), `write()` returning false under backpressure
|
|
14
|
+
* - `drained()` waits for the transport (`waitForDrain()`) without leaving listeners behind: the signal it gets is
|
|
15
|
+
* aborted once the wait is over
|
|
16
|
+
* - once cancelled (the client went away) or once the connection is over (`connectionEnded`), `write()` and
|
|
17
|
+
* `drained()` throw `OperationCancelledError`
|
|
18
|
+
*
|
|
19
|
+
* The transport calls `cancel()` when the client leaves, and also ends the operation's input queue so its pending read
|
|
20
|
+
* returns and its `finally` blocks run.
|
|
21
|
+
*/
|
|
22
|
+
export declare abstract class StreamingOperationContext extends WebContext {
|
|
23
|
+
private cancelled;
|
|
24
|
+
/**
|
|
25
|
+
* @returns whether the client went away
|
|
26
|
+
*/
|
|
27
|
+
get isCancelled(): boolean;
|
|
28
|
+
/** The client went away: the next write or drain throws. */
|
|
29
|
+
cancel(): void;
|
|
30
|
+
/**
|
|
31
|
+
* @returns true when nothing can be sent anymore although the context was not cancelled (response or socket over)
|
|
32
|
+
*/
|
|
33
|
+
protected abstract get connectionEnded(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Send one streamed chunk now
|
|
36
|
+
* @param chunk - what the operation wrote
|
|
37
|
+
* @returns false when the transport asks the operation to wait for `drained()`
|
|
38
|
+
*/
|
|
39
|
+
protected abstract sendChunk(chunk: any): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Wait until the transport can take more output
|
|
42
|
+
* @param signal - aborted once the wait is over: listeners registered with it are removed
|
|
43
|
+
* @throws any error when the transport failed or closed (reported as `OperationCancelledError`)
|
|
44
|
+
*/
|
|
45
|
+
protected abstract waitForDrain(signal: AbortSignal): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Keep a non-streamed result
|
|
48
|
+
* @param output - the result
|
|
49
|
+
* @param encoding - the encoding to use
|
|
50
|
+
* @param cb - the callback function
|
|
51
|
+
* @returns true
|
|
52
|
+
*/
|
|
53
|
+
protected writeResult(output: any, encoding?: string, cb?: (error: Error) => void): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* @throws OperationCancelledError when the client went away or the connection is over
|
|
56
|
+
*/
|
|
57
|
+
protected assertAlive(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Streamed chunks go out immediately; a non-streamed result is buffered
|
|
60
|
+
* @override
|
|
61
|
+
* @throws OperationCancelledError when streaming and the client went away or the connection is over
|
|
62
|
+
*/
|
|
63
|
+
write(output: any, encoding?: string, cb?: (error: Error) => void): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Wait for the transport to take more output, without leaving listeners behind
|
|
66
|
+
* @override
|
|
67
|
+
* @throws OperationCancelledError when the client went away, the connection is over or the transport failed
|
|
68
|
+
*/
|
|
69
|
+
drained(): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=streamingcontext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamingcontext.d.ts","sourceRoot":"","sources":["../../src/contexts/streamingcontext.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIrD;AAED;;;;;;;;;;;;;GAaG;AACH,8BAAsB,yBAA0B,SAAQ,UAAU;IAChE,OAAO,CAAC,SAAS,CAAS;IAE1B;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,4DAA4D;IAC5D,MAAM,IAAI,IAAI,CAEb;IAED;;OAEG;IACH,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,OAAO,CAAC;IAElD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC;IAElD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;;;;OAMG;IACH,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAE1F;IAED;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI,CAI5B;IAED;;;;OAIG;IAEI,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAIjF;IAED;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAY7B;CACF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { JSONUtils } from "@webda/utils";
|
|
2
|
+
import { WebContext } from "./webcontext.js";
|
|
3
|
+
import * as WebdaError from "../errors/errors.js";
|
|
4
|
+
/**
|
|
5
|
+
* A value as clients may see it: plain JSON without `__` keys
|
|
6
|
+
* @param value - an operation result or streamed chunk
|
|
7
|
+
* @returns the copy (undefined stays undefined), or null when the value is not JSON-serializable (function, symbol)
|
|
8
|
+
*/
|
|
9
|
+
export function toPublicChunk(value) {
|
|
10
|
+
if (value === undefined)
|
|
11
|
+
return undefined;
|
|
12
|
+
const json = JSONUtils.stringify(value, undefined, 0, true);
|
|
13
|
+
return json === undefined ? null : JSON.parse(json);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The shared part of a context serving a streaming operation over a transport (gRPC, WebSocket, GraphQL
|
|
17
|
+
* subscription, ...):
|
|
18
|
+
*
|
|
19
|
+
* - a non-streamed result is buffered as usual (`writeResult()`)
|
|
20
|
+
* - a streamed chunk is sent right away (`sendChunk()`), `write()` returning false under backpressure
|
|
21
|
+
* - `drained()` waits for the transport (`waitForDrain()`) without leaving listeners behind: the signal it gets is
|
|
22
|
+
* aborted once the wait is over
|
|
23
|
+
* - once cancelled (the client went away) or once the connection is over (`connectionEnded`), `write()` and
|
|
24
|
+
* `drained()` throw `OperationCancelledError`
|
|
25
|
+
*
|
|
26
|
+
* The transport calls `cancel()` when the client leaves, and also ends the operation's input queue so its pending read
|
|
27
|
+
* returns and its `finally` blocks run.
|
|
28
|
+
*/
|
|
29
|
+
export class StreamingOperationContext extends WebContext {
|
|
30
|
+
cancelled = false;
|
|
31
|
+
/**
|
|
32
|
+
* @returns whether the client went away
|
|
33
|
+
*/
|
|
34
|
+
get isCancelled() {
|
|
35
|
+
return this.cancelled;
|
|
36
|
+
}
|
|
37
|
+
/** The client went away: the next write or drain throws. */
|
|
38
|
+
cancel() {
|
|
39
|
+
this.cancelled = true;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Keep a non-streamed result
|
|
43
|
+
* @param output - the result
|
|
44
|
+
* @param encoding - the encoding to use
|
|
45
|
+
* @param cb - the callback function
|
|
46
|
+
* @returns true
|
|
47
|
+
*/
|
|
48
|
+
writeResult(output, encoding, cb) {
|
|
49
|
+
return super.write(output, encoding, cb);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @throws OperationCancelledError when the client went away or the connection is over
|
|
53
|
+
*/
|
|
54
|
+
assertAlive() {
|
|
55
|
+
if (this.cancelled || this.connectionEnded) {
|
|
56
|
+
throw new WebdaError.OperationCancelledError();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Streamed chunks go out immediately; a non-streamed result is buffered
|
|
61
|
+
* @override
|
|
62
|
+
* @throws OperationCancelledError when streaming and the client went away or the connection is over
|
|
63
|
+
*/
|
|
64
|
+
// @ts-ignore same signature as WebContext.write
|
|
65
|
+
write(output, encoding, cb) {
|
|
66
|
+
if (!this.getExtension("operationStreaming"))
|
|
67
|
+
return this.writeResult(output, encoding, cb);
|
|
68
|
+
this.assertAlive();
|
|
69
|
+
return this.sendChunk(output);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Wait for the transport to take more output, without leaving listeners behind
|
|
73
|
+
* @override
|
|
74
|
+
* @throws OperationCancelledError when the client went away, the connection is over or the transport failed
|
|
75
|
+
*/
|
|
76
|
+
async drained() {
|
|
77
|
+
this.assertAlive();
|
|
78
|
+
const controller = new AbortController();
|
|
79
|
+
try {
|
|
80
|
+
await this.waitForDrain(controller.signal);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
if (err instanceof WebdaError.OperationCancelledError)
|
|
84
|
+
throw err;
|
|
85
|
+
throw new WebdaError.OperationCancelledError();
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
controller.abort();
|
|
89
|
+
}
|
|
90
|
+
this.assertAlive();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=streamingcontext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamingcontext.js","sourceRoot":"","sources":["../../src/contexts/streamingcontext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5D,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAgB,yBAA0B,SAAQ,UAAU;IACxD,SAAS,GAAG,KAAK,CAAC;IAE1B;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,4DAA4D;IAC5D,MAAM;QACJ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAqBD;;;;;;OAMG;IACO,WAAW,CAAC,MAAW,EAAE,QAAiB,EAAE,EAA2B;QAC/E,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACO,WAAW;QACnB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3C,MAAM,IAAI,UAAU,CAAC,uBAAuB,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,gDAAgD;IACzC,KAAK,CAAC,MAAW,EAAE,QAAiB,EAAE,EAA2B;QACtE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,UAAU,CAAC,uBAAuB;gBAAE,MAAM,GAAG,CAAC;YACjE,MAAM,IAAI,UAAU,CAAC,uBAAuB,EAAE,CAAC;QACjD,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -35,6 +35,10 @@ export declare class WebContext<T = any, P = any, U = any> extends OperationCont
|
|
|
35
35
|
headers: Map<string, string>;
|
|
36
36
|
_route: any;
|
|
37
37
|
_ended: Promise<any>;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the session was already saved
|
|
40
|
+
*/
|
|
41
|
+
protected _sessionSaved: boolean;
|
|
38
42
|
/**
|
|
39
43
|
* If headers were flushed
|
|
40
44
|
*/
|
|
@@ -51,6 +55,11 @@ export declare class WebContext<T = any, P = any, U = any> extends OperationCont
|
|
|
51
55
|
*/
|
|
52
56
|
getHttpContext(): HttpContext;
|
|
53
57
|
/**
|
|
58
|
+
* Get the raw input as string
|
|
59
|
+
*
|
|
60
|
+
* Any WHATWG Encoding Standard label is accepted as encoding (utf-8, iso-8859-1, shift_jis, ...)
|
|
61
|
+
* If no encoding is given, the charset of the Content-Type header is used, falling back to UTF-8
|
|
62
|
+
*
|
|
54
63
|
* @override
|
|
55
64
|
*/
|
|
56
65
|
getRawInputAsString(limit?: number, timeout?: number, encoding?: string): Promise<string>;
|
|
@@ -114,6 +123,11 @@ export declare class WebContext<T = any, P = any, U = any> extends OperationCont
|
|
|
114
123
|
* @returns the result map
|
|
115
124
|
*/
|
|
116
125
|
getResponseCookies(): Map<string, Cookie>;
|
|
126
|
+
/**
|
|
127
|
+
* The Set-Cookie header values of the response, one per cookie
|
|
128
|
+
* @returns the serialized cookies
|
|
129
|
+
*/
|
|
130
|
+
getSetCookieHeaders(): string[];
|
|
117
131
|
/**
|
|
118
132
|
* Whether the response has been ended
|
|
119
133
|
* @returns the result
|
|
@@ -142,6 +156,12 @@ export declare class WebContext<T = any, P = any, U = any> extends OperationCont
|
|
|
142
156
|
* @returns the result
|
|
143
157
|
*/
|
|
144
158
|
getResponseSize(): number | undefined;
|
|
159
|
+
/**
|
|
160
|
+
* Save the session through the SessionManager, once
|
|
161
|
+
*
|
|
162
|
+
* The SessionManager writes the session cookie: call it before the headers are flushed
|
|
163
|
+
*/
|
|
164
|
+
saveSession(): Promise<void>;
|
|
145
165
|
/**
|
|
146
166
|
* Flush the request
|
|
147
167
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webcontext.d.ts","sourceRoot":"","sources":["../../src/contexts/webcontext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"webcontext.d.ts","sourceRoot":"","sources":["../../src/contexts/webcontext.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { OperationContext } from "./operationcontext.js";
|
|
|
2
2
|
import acceptLanguage from "accept-language";
|
|
3
3
|
import { Readable } from "node:stream";
|
|
4
4
|
import { WritableStreamBuffer } from "stream-buffers";
|
|
5
|
+
import { serialize as cookieSerialize } from "cookie";
|
|
5
6
|
import { useCore, useDynamicService, useService } from "../core/hooks.js";
|
|
6
7
|
/**
|
|
7
8
|
* @category CoreFeatures
|
|
@@ -36,6 +37,10 @@ export class WebContext extends OperationContext {
|
|
|
36
37
|
headers;
|
|
37
38
|
_route;
|
|
38
39
|
_ended = undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Whether the session was already saved
|
|
42
|
+
*/
|
|
43
|
+
_sessionSaved = false;
|
|
39
44
|
/**
|
|
40
45
|
* If headers were flushed
|
|
41
46
|
*/
|
|
@@ -57,6 +62,11 @@ export class WebContext extends OperationContext {
|
|
|
57
62
|
return this.getExtension("http");
|
|
58
63
|
}
|
|
59
64
|
/**
|
|
65
|
+
* Get the raw input as string
|
|
66
|
+
*
|
|
67
|
+
* Any WHATWG Encoding Standard label is accepted as encoding (utf-8, iso-8859-1, shift_jis, ...)
|
|
68
|
+
* If no encoding is given, the charset of the Content-Type header is used, falling back to UTF-8
|
|
69
|
+
*
|
|
60
70
|
* @override
|
|
61
71
|
*/
|
|
62
72
|
async getRawInputAsString(limit = 1024 * 1024 * 10, timeout = 60000, encoding) {
|
|
@@ -163,6 +173,13 @@ export class WebContext extends OperationContext {
|
|
|
163
173
|
getResponseCookies() {
|
|
164
174
|
return this._cookie;
|
|
165
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* The Set-Cookie header values of the response, one per cookie
|
|
178
|
+
* @returns the serialized cookies
|
|
179
|
+
*/
|
|
180
|
+
getSetCookieHeaders() {
|
|
181
|
+
return Object.values(this._cookie ?? {}).map((c) => cookieSerialize(c.name, c.value, c.options));
|
|
182
|
+
}
|
|
166
183
|
/**
|
|
167
184
|
* Whether the response has been ended
|
|
168
185
|
* @returns the result
|
|
@@ -201,6 +218,25 @@ export class WebContext extends OperationContext {
|
|
|
201
218
|
getResponseSize() {
|
|
202
219
|
return this._body ? Buffer.byteLength(this._body, "utf8") : undefined;
|
|
203
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Save the session through the SessionManager, once
|
|
223
|
+
*
|
|
224
|
+
* The SessionManager writes the session cookie: call it before the headers are flushed
|
|
225
|
+
*/
|
|
226
|
+
async saveSession() {
|
|
227
|
+
if (this._sessionSaved || !this.getExtension("http") || !this.session) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
this._sessionSaved = true;
|
|
231
|
+
try {
|
|
232
|
+
const sm = useDynamicService("SessionManager");
|
|
233
|
+
if (sm)
|
|
234
|
+
await sm.save(this, this.session);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// SessionManager may not be available
|
|
238
|
+
}
|
|
239
|
+
}
|
|
204
240
|
/**
|
|
205
241
|
* Flush the request
|
|
206
242
|
*
|
|
@@ -214,16 +250,7 @@ export class WebContext extends OperationContext {
|
|
|
214
250
|
return this._ended;
|
|
215
251
|
}
|
|
216
252
|
this._ended = (async () => {
|
|
217
|
-
|
|
218
|
-
try {
|
|
219
|
-
const sm = useDynamicService("SessionManager");
|
|
220
|
-
if (sm)
|
|
221
|
-
await sm.save(this, this.session);
|
|
222
|
-
}
|
|
223
|
-
catch {
|
|
224
|
-
// SessionManager may not be available
|
|
225
|
-
}
|
|
226
|
-
}
|
|
253
|
+
await this.saveSession();
|
|
227
254
|
await super.end();
|
|
228
255
|
if (this._stream instanceof WritableStreamBuffer && this._stream.size()) {
|
|
229
256
|
this._body = this._stream.getContents().toString();
|
|
@@ -340,7 +367,13 @@ export class WebContext extends OperationContext {
|
|
|
340
367
|
async flushHeaders() {
|
|
341
368
|
if (this.flushed)
|
|
342
369
|
return;
|
|
370
|
+
// The SessionManager writes the session cookie: save the session before the headers leave
|
|
371
|
+
await this.saveSession();
|
|
343
372
|
const headers = this.getResponseHeaders();
|
|
373
|
+
const setCookies = this.getSetCookieHeaders();
|
|
374
|
+
if (setCookies.length) {
|
|
375
|
+
headers["Set-Cookie"] = setCookies;
|
|
376
|
+
}
|
|
344
377
|
await super.flushHeaders();
|
|
345
378
|
// Write to ServerResponse if the stream supports writeHead (not a WritableStreamBuffer)
|
|
346
379
|
if (this._stream && !(this._stream instanceof WritableStreamBuffer) && typeof this._stream.writeHead === "function") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webcontext.js","sourceRoot":"","sources":["../../src/contexts/webcontext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAY,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM;IACV,IAAI,CAAS;IACb,KAAK,CAAS;IACd,OAAO,CAAM;CACd;AAED;;;;;GAKG;AACH,MAAM,OAAO,UAAsC,SAAQ,gBAAyB;IAClF;;OAEG;IACO,cAAc,CAA2B;IAEnD;;OAEG;IACH,UAAU,CAAS;IACnB;;OAEG;IACH,OAAO,CAAsB;IAC7B;;OAEG;IACH,OAAO,CAAsB;IAC7B,MAAM,CAAM;IAEZ,MAAM,GAAiB,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"webcontext.js","sourceRoot":"","sources":["../../src/contexts/webcontext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { WebSocket } from "ws";
|
|
2
|
+
import { HttpContext } from "./httpcontext.js";
|
|
3
|
+
import { StreamingOperationContext } from "./streamingcontext.js";
|
|
4
|
+
import type { Session } from "../session/session.js";
|
|
5
|
+
/**
|
|
6
|
+
* The context of a bidirectional operation served over a WebSocket: the upgrade request's headers and session,
|
|
7
|
+
* each streamed chunk sent as one JSON text message.
|
|
8
|
+
*/
|
|
9
|
+
export declare class WebSocketOperationContext extends StreamingOperationContext {
|
|
10
|
+
private readonly socket;
|
|
11
|
+
private lastSend;
|
|
12
|
+
/**
|
|
13
|
+
* @param httpContext - the upgrade request
|
|
14
|
+
* @param socket - the accepted socket
|
|
15
|
+
* @param session - the session already loaded for the upgrade request, if any
|
|
16
|
+
*/
|
|
17
|
+
constructor(httpContext: HttpContext, socket: WebSocket, session?: Session);
|
|
18
|
+
/**
|
|
19
|
+
* The session of an authorized upgrade is reused, not loaded twice
|
|
20
|
+
* @override
|
|
21
|
+
*/
|
|
22
|
+
init(): Promise<this>;
|
|
23
|
+
/**
|
|
24
|
+
* The socket is closing or closed
|
|
25
|
+
* @override
|
|
26
|
+
*/
|
|
27
|
+
protected get connectionEnded(): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* One JSON text message per chunk
|
|
30
|
+
* @override
|
|
31
|
+
*/
|
|
32
|
+
protected sendChunk(chunk: any): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Wait for the last message to be flushed, or the socket to close
|
|
35
|
+
* @override
|
|
36
|
+
*/
|
|
37
|
+
protected waitForDrain(signal: AbortSignal): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=websocketcontext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocketcontext.d.ts","sourceRoot":"","sources":["../../src/contexts/websocketcontext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AASrD;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,yBAAyB;IAUpE,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,OAAO,CAAC,QAAQ,CAAoC;IAEpD;;;;OAIG;IACH,YACE,WAAW,EAAE,WAAW,EACP,MAAM,EAAE,SAAS,EAClC,OAAO,CAAC,EAAE,OAAO,EAIlB;IAED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;IAED;;;OAGG;IACH,SAAS,KAAK,eAAe,IAAI,OAAO,CAEvC;IAED;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAQvC;IAED;;;OAGG;IACH,UAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/D;CACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { once } from "node:events";
|
|
2
|
+
import { JSONUtils } from "@webda/utils";
|
|
3
|
+
import { StreamingOperationContext } from "./streamingcontext.js";
|
|
4
|
+
import * as WebdaError from "../errors/errors.js";
|
|
5
|
+
/** Pending output (bytes) above which write() asks the operation to wait. */
|
|
6
|
+
const HIGH_WATER = 1024 * 1024;
|
|
7
|
+
/** WebSocket readyState values after which nothing can be sent (CLOSING, CLOSED) */
|
|
8
|
+
const CLOSING = 2;
|
|
9
|
+
/**
|
|
10
|
+
* The context of a bidirectional operation served over a WebSocket: the upgrade request's headers and session,
|
|
11
|
+
* each streamed chunk sent as one JSON text message.
|
|
12
|
+
*/
|
|
13
|
+
export class WebSocketOperationContext extends StreamingOperationContext {
|
|
14
|
+
socket;
|
|
15
|
+
lastSend = Promise.resolve();
|
|
16
|
+
/**
|
|
17
|
+
* @param httpContext - the upgrade request
|
|
18
|
+
* @param socket - the accepted socket
|
|
19
|
+
* @param session - the session already loaded for the upgrade request, if any
|
|
20
|
+
*/
|
|
21
|
+
constructor(httpContext, socket, session) {
|
|
22
|
+
super(httpContext);
|
|
23
|
+
this.socket = socket;
|
|
24
|
+
if (session)
|
|
25
|
+
this.session = session;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The session of an authorized upgrade is reused, not loaded twice
|
|
29
|
+
* @override
|
|
30
|
+
*/
|
|
31
|
+
async init() {
|
|
32
|
+
return this.session ? this : super.init();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The socket is closing or closed
|
|
36
|
+
* @override
|
|
37
|
+
*/
|
|
38
|
+
get connectionEnded() {
|
|
39
|
+
return this.socket.readyState >= CLOSING;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* One JSON text message per chunk
|
|
43
|
+
* @override
|
|
44
|
+
*/
|
|
45
|
+
sendChunk(chunk) {
|
|
46
|
+
const text = JSONUtils.stringify(chunk, undefined, 0, true);
|
|
47
|
+
const sent = new Promise((resolve, reject) => this.socket.send(text, err => (err ? reject(err) : resolve())));
|
|
48
|
+
sent.catch(() => {
|
|
49
|
+
// reported through drained()
|
|
50
|
+
});
|
|
51
|
+
this.lastSend = sent;
|
|
52
|
+
return this.socket.bufferedAmount < HIGH_WATER;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Wait for the last message to be flushed, or the socket to close
|
|
56
|
+
* @override
|
|
57
|
+
*/
|
|
58
|
+
async waitForDrain(signal) {
|
|
59
|
+
await Promise.race([
|
|
60
|
+
this.lastSend,
|
|
61
|
+
once(this.socket, "close", { signal }).then(() => {
|
|
62
|
+
throw new WebdaError.OperationCancelledError();
|
|
63
|
+
})
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=websocketcontext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocketcontext.js","sourceRoot":"","sources":["../../src/contexts/websocketcontext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAElD,6EAA6E;AAC7E,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/B,oFAAoF;AACpF,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,yBAAyB;IAUnD,MAAM;IATjB,QAAQ,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpD;;;;OAIG;IACH,YACE,WAAwB,EACP,MAAiB,EAClC,OAAiB;QAEjB,KAAK,CAAC,WAAW,CAAC,CAAC;sBAHF,MAAM;QAIvB,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACH,IAAc,eAAe;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACO,SAAS,CAAC,KAAU;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACpH,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACd,6BAA6B;QAC/B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC;IACjD,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,YAAY,CAAC,MAAmB;QAC9C,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC/C,MAAM,IAAI,UAAU,CAAC,uBAAuB,EAAE,CAAC;YACjD,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A push-based async iterable: producers push, one consumer iterates. `end()` (or the consumer leaving the loop)
|
|
3
|
+
* finishes it; items pushed after the end are dropped.
|
|
4
|
+
*/
|
|
5
|
+
export declare class AsyncQueue<T> implements AsyncIterable<T> {
|
|
6
|
+
private items;
|
|
7
|
+
private waiters;
|
|
8
|
+
private done;
|
|
9
|
+
private sizes;
|
|
10
|
+
private bytes;
|
|
11
|
+
private readonly size?;
|
|
12
|
+
/**
|
|
13
|
+
* @param options - optional settings
|
|
14
|
+
* @param options.size - measures an item in bytes, to track `pendingBytes`
|
|
15
|
+
*/
|
|
16
|
+
constructor(options?: {
|
|
17
|
+
size?: (item: T) => number;
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* @returns whether the queue is finished
|
|
21
|
+
*/
|
|
22
|
+
get ended(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* @param item - the next item
|
|
25
|
+
* @param size - its size in bytes (defaults to the size function's result)
|
|
26
|
+
*/
|
|
27
|
+
push(item: T, size?: number): void;
|
|
28
|
+
/**
|
|
29
|
+
* @returns the size of the items pushed and not yet consumed (0 when no size is given)
|
|
30
|
+
*/
|
|
31
|
+
get pendingBytes(): number;
|
|
32
|
+
/**
|
|
33
|
+
* @returns the number of items pushed and not yet consumed
|
|
34
|
+
*/
|
|
35
|
+
get pending(): number;
|
|
36
|
+
/**
|
|
37
|
+
* No more items.
|
|
38
|
+
* @param discard - also drop the items not consumed yet
|
|
39
|
+
*/
|
|
40
|
+
end(discard?: boolean): void;
|
|
41
|
+
/**
|
|
42
|
+
* @returns the next item, without ending the queue (unlike breaking out of a for await)
|
|
43
|
+
*/
|
|
44
|
+
next(): Promise<IteratorResult<T>>;
|
|
45
|
+
/**
|
|
46
|
+
* @returns the iterator
|
|
47
|
+
*/
|
|
48
|
+
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=asyncqueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncqueue.d.ts","sourceRoot":"","sources":["../../src/core/asyncqueue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAsB;IAE5C;;;OAGG;IACH,YAAY,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;KAAO,EAEvD;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAUjC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;OAGG;IACH,GAAG,CAAC,OAAO,GAAE,OAAe,GAAG,IAAI,CASlC;IAED;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAQjC;IAED;;OAEG;IACH,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAQzC;CACF"}
|