@seriousme/opifex 1.7.0 → 1.8.0
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 +17 -2
- package/dist/bin/conformanceServer.d.ts +3 -0
- package/dist/bin/conformanceServer.d.ts.map +1 -0
- package/dist/bin/conformanceServer.js +98 -0
- package/dist/bin/conformanceServer.js.map +1 -0
- package/dist/bin/demoServer.d.ts +3 -0
- package/dist/bin/demoServer.d.ts.map +1 -0
- package/dist/bin/demoServer.js +97 -0
- package/dist/bin/demoServer.js.map +1 -0
- package/dist/bin/mqtt.d.ts +3 -0
- package/dist/bin/mqtt.d.ts.map +1 -0
- package/dist/bin/mqtt.js +257 -0
- package/dist/bin/mqtt.js.map +1 -0
- package/dist/client/ConnectionState.d.ts +21 -0
- package/dist/client/ConnectionState.d.ts.map +1 -0
- package/dist/client/ConnectionState.js +17 -0
- package/dist/client/ConnectionState.js.map +1 -0
- package/dist/client/client.d.ts +94 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +188 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/context.d.ts +29 -0
- package/dist/client/context.d.ts.map +1 -0
- package/dist/client/context.js +153 -0
- package/dist/client/context.js.map +1 -0
- package/dist/client/deps.d.ts +8 -0
- package/dist/client/deps.d.ts.map +1 -0
- package/dist/client/deps.js +6 -0
- package/dist/client/deps.js.map +1 -0
- package/dist/client/handlers/handleConnack.d.ts +10 -0
- package/dist/client/handlers/handleConnack.d.ts.map +1 -0
- package/dist/client/handlers/handleConnack.js +25 -0
- package/dist/client/handlers/handleConnack.js.map +1 -0
- package/dist/client/handlers/handlePacket.d.ts +11 -0
- package/dist/client/handlers/handlePacket.d.ts.map +1 -0
- package/dist/client/handlers/handlePacket.js +58 -0
- package/dist/client/handlers/handlePacket.js.map +1 -0
- package/dist/client/handlers/handlePuback.d.ts +12 -0
- package/dist/client/handlers/handlePuback.d.ts.map +1 -0
- package/dist/client/handlers/handlePuback.js +14 -0
- package/dist/client/handlers/handlePuback.js.map +1 -0
- package/dist/client/handlers/handlePubcomp.d.ts +13 -0
- package/dist/client/handlers/handlePubcomp.d.ts.map +1 -0
- package/dist/client/handlers/handlePubcomp.js +17 -0
- package/dist/client/handlers/handlePubcomp.js.map +1 -0
- package/dist/client/handlers/handlePublish.d.ts +10 -0
- package/dist/client/handlers/handlePublish.d.ts.map +1 -0
- package/dist/client/handlers/handlePublish.js +34 -0
- package/dist/client/handlers/handlePublish.js.map +1 -0
- package/dist/client/handlers/handlePubrec.d.ts +17 -0
- package/dist/client/handlers/handlePubrec.d.ts.map +1 -0
- package/dist/client/handlers/handlePubrec.js +27 -0
- package/dist/client/handlers/handlePubrec.js.map +1 -0
- package/dist/client/handlers/handlePubrel.d.ts +20 -0
- package/dist/client/handlers/handlePubrel.d.ts.map +1 -0
- package/dist/client/handlers/handlePubrel.js +32 -0
- package/dist/client/handlers/handlePubrel.js.map +1 -0
- package/dist/client/handlers/handleSuback.d.ts +13 -0
- package/dist/client/handlers/handleSuback.d.ts.map +1 -0
- package/dist/client/handlers/handleSuback.js +15 -0
- package/dist/client/handlers/handleSuback.js.map +1 -0
- package/dist/client/handlers/handleUnsuback.d.ts +14 -0
- package/dist/client/handlers/handleUnsuback.d.ts.map +1 -0
- package/dist/client/handlers/handleUnsuback.js +16 -0
- package/dist/client/handlers/handleUnsuback.js.map +1 -0
- package/dist/client/mod.d.ts +7 -0
- package/dist/client/mod.d.ts.map +1 -0
- package/dist/client/mod.js +6 -0
- package/dist/client/mod.js.map +1 -0
- package/dist/client/store/deps.d.ts +3 -0
- package/dist/client/store/deps.d.ts.map +1 -0
- package/dist/client/store/deps.js +2 -0
- package/dist/client/store/deps.js.map +1 -0
- package/dist/client/store/memoryStore.d.ts +34 -0
- package/dist/client/store/memoryStore.d.ts.map +1 -0
- package/dist/client/store/memoryStore.js +59 -0
- package/dist/client/store/memoryStore.js.map +1 -0
- package/dist/client/store/store.d.ts +46 -0
- package/dist/client/store/store.d.ts.map +1 -0
- package/dist/client/store/store.js +5 -0
- package/dist/client/store/store.js.map +1 -0
- package/dist/mqttConn/mqttConn.d.ts +79 -0
- package/dist/mqttConn/mqttConn.d.ts.map +1 -0
- package/dist/mqttConn/mqttConn.js +151 -0
- package/dist/mqttConn/mqttConn.js.map +1 -0
- package/dist/mqttPacket/AuthenticationResult.d.ts +16 -0
- package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -0
- package/dist/mqttPacket/AuthenticationResult.js +17 -0
- package/dist/mqttPacket/AuthenticationResult.js.map +1 -0
- package/dist/mqttPacket/BitMask.d.ts +11 -0
- package/dist/mqttPacket/BitMask.d.ts.map +1 -0
- package/dist/mqttPacket/BitMask.js +11 -0
- package/dist/mqttPacket/BitMask.js.map +1 -0
- package/dist/mqttPacket/PacketType.d.ts +19 -0
- package/dist/mqttPacket/PacketType.d.ts.map +1 -0
- package/dist/mqttPacket/PacketType.js +19 -0
- package/dist/mqttPacket/PacketType.js.map +1 -0
- package/dist/mqttPacket/connack.d.ts +18 -0
- package/dist/mqttPacket/connack.d.ts.map +1 -0
- package/dist/mqttPacket/connack.js +28 -0
- package/dist/mqttPacket/connack.js.map +1 -0
- package/dist/mqttPacket/connect.d.ts +28 -0
- package/dist/mqttPacket/connect.d.ts.map +1 -0
- package/dist/mqttPacket/connect.js +116 -0
- package/dist/mqttPacket/connect.js.map +1 -0
- package/dist/mqttPacket/decoder.d.ts +24 -0
- package/dist/mqttPacket/decoder.d.ts.map +1 -0
- package/dist/mqttPacket/decoder.js +90 -0
- package/dist/mqttPacket/decoder.js.map +1 -0
- package/dist/mqttPacket/disconnect.d.ts +16 -0
- package/dist/mqttPacket/disconnect.d.ts.map +1 -0
- package/dist/mqttPacket/disconnect.js +15 -0
- package/dist/mqttPacket/disconnect.js.map +1 -0
- package/dist/mqttPacket/encoder.d.ts +17 -0
- package/dist/mqttPacket/encoder.d.ts.map +1 -0
- package/dist/mqttPacket/encoder.js +57 -0
- package/dist/mqttPacket/encoder.js.map +1 -0
- package/dist/mqttPacket/length.d.ts +12 -0
- package/dist/mqttPacket/length.d.ts.map +1 -0
- package/dist/mqttPacket/length.js +44 -0
- package/dist/mqttPacket/length.js.map +1 -0
- package/dist/mqttPacket/mod.d.ts +122 -0
- package/dist/mqttPacket/mod.d.ts.map +1 -0
- package/dist/mqttPacket/mod.js +77 -0
- package/dist/mqttPacket/mod.js.map +1 -0
- package/dist/mqttPacket/pingreq.d.ts +15 -0
- package/dist/mqttPacket/pingreq.d.ts.map +1 -0
- package/dist/mqttPacket/pingreq.js +16 -0
- package/dist/mqttPacket/pingreq.js.map +1 -0
- package/dist/mqttPacket/pingres.d.ts +16 -0
- package/dist/mqttPacket/pingres.d.ts.map +1 -0
- package/dist/mqttPacket/pingres.js +15 -0
- package/dist/mqttPacket/pingres.js.map +1 -0
- package/dist/mqttPacket/puback.d.ts +16 -0
- package/dist/mqttPacket/puback.d.ts.map +1 -0
- package/dist/mqttPacket/puback.js +21 -0
- package/dist/mqttPacket/puback.js.map +1 -0
- package/dist/mqttPacket/pubcomp.d.ts +17 -0
- package/dist/mqttPacket/pubcomp.d.ts.map +1 -0
- package/dist/mqttPacket/pubcomp.js +21 -0
- package/dist/mqttPacket/pubcomp.js.map +1 -0
- package/dist/mqttPacket/publish.d.ts +22 -0
- package/dist/mqttPacket/publish.d.ts.map +1 -0
- package/dist/mqttPacket/publish.js +52 -0
- package/dist/mqttPacket/publish.js.map +1 -0
- package/dist/mqttPacket/pubrec.d.ts +17 -0
- package/dist/mqttPacket/pubrec.d.ts.map +1 -0
- package/dist/mqttPacket/pubrec.js +21 -0
- package/dist/mqttPacket/pubrec.js.map +1 -0
- package/dist/mqttPacket/pubrel.d.ts +17 -0
- package/dist/mqttPacket/pubrel.d.ts.map +1 -0
- package/dist/mqttPacket/pubrel.js +21 -0
- package/dist/mqttPacket/pubrel.js.map +1 -0
- package/dist/mqttPacket/suback.d.ts +18 -0
- package/dist/mqttPacket/suback.d.ts.map +1 -0
- package/dist/mqttPacket/suback.js +30 -0
- package/dist/mqttPacket/suback.js.map +1 -0
- package/dist/mqttPacket/subscribe.d.ts +24 -0
- package/dist/mqttPacket/subscribe.d.ts.map +1 -0
- package/dist/mqttPacket/subscribe.js +53 -0
- package/dist/mqttPacket/subscribe.js.map +1 -0
- package/dist/mqttPacket/types.d.ts +48 -0
- package/dist/mqttPacket/types.d.ts.map +1 -0
- package/dist/mqttPacket/types.js +2 -0
- package/dist/mqttPacket/types.js.map +1 -0
- package/dist/mqttPacket/unsuback.d.ts +17 -0
- package/dist/mqttPacket/unsuback.d.ts.map +1 -0
- package/dist/mqttPacket/unsuback.js +21 -0
- package/dist/mqttPacket/unsuback.js.map +1 -0
- package/dist/mqttPacket/unsubscribe.d.ts +17 -0
- package/dist/mqttPacket/unsubscribe.d.ts.map +1 -0
- package/dist/mqttPacket/unsubscribe.js +37 -0
- package/dist/mqttPacket/unsubscribe.js.map +1 -0
- package/dist/mqttPacket/validators.d.ts +5 -0
- package/dist/mqttPacket/validators.d.ts.map +1 -0
- package/dist/mqttPacket/validators.js +16 -0
- package/dist/mqttPacket/validators.js.map +1 -0
- package/dist/node/tcpClient.d.ts +18 -0
- package/dist/node/tcpClient.d.ts.map +1 -0
- package/dist/node/tcpClient.js +82 -0
- package/dist/node/tcpClient.js.map +1 -0
- package/dist/node/tcpServer.d.ts +17 -0
- package/dist/node/tcpServer.d.ts.map +1 -0
- package/dist/node/tcpServer.js +51 -0
- package/dist/node/tcpServer.js.map +1 -0
- package/dist/node/wrapNodeSocket.d.ts +12 -0
- package/dist/node/wrapNodeSocket.d.ts.map +1 -0
- package/dist/node/wrapNodeSocket.js +57 -0
- package/dist/node/wrapNodeSocket.js.map +1 -0
- package/dist/persistence/deps.d.ts +5 -0
- package/dist/persistence/deps.d.ts.map +1 -0
- package/dist/persistence/deps.js +4 -0
- package/dist/persistence/deps.js.map +1 -0
- package/dist/persistence/memory/memoryPersistence.d.ts +28 -0
- package/dist/persistence/memory/memoryPersistence.d.ts.map +1 -0
- package/dist/persistence/memory/memoryPersistence.js +119 -0
- package/dist/persistence/memory/memoryPersistence.js.map +1 -0
- package/dist/persistence/persistence.d.ts +81 -0
- package/dist/persistence/persistence.d.ts.map +1 -0
- package/dist/persistence/persistence.js +2 -0
- package/dist/persistence/persistence.js.map +1 -0
- package/dist/persistence/store.d.ts +13 -0
- package/dist/persistence/store.d.ts.map +1 -0
- package/dist/persistence/store.js +2 -0
- package/dist/persistence/store.js.map +1 -0
- package/dist/server/context.d.ts +45 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +101 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/deps.d.ts +10 -0
- package/dist/server/deps.d.ts.map +1 -0
- package/dist/server/deps.js +6 -0
- package/dist/server/deps.js.map +1 -0
- package/dist/server/handlers/handleConnect.d.ts +9 -0
- package/dist/server/handlers/handleConnect.d.ts.map +1 -0
- package/dist/server/handlers/handleConnect.js +81 -0
- package/dist/server/handlers/handleConnect.js.map +1 -0
- package/dist/server/handlers/handleDisconnect.d.ts +8 -0
- package/dist/server/handlers/handleDisconnect.d.ts.map +1 -0
- package/dist/server/handlers/handleDisconnect.js +10 -0
- package/dist/server/handlers/handleDisconnect.js.map +1 -0
- package/dist/server/handlers/handlePacket.d.ts +11 -0
- package/dist/server/handlers/handlePacket.d.ts.map +1 -0
- package/dist/server/handlers/handlePacket.js +66 -0
- package/dist/server/handlers/handlePacket.js.map +1 -0
- package/dist/server/handlers/handlePingreq.d.ts +8 -0
- package/dist/server/handlers/handlePingreq.d.ts.map +1 -0
- package/dist/server/handlers/handlePingreq.js +12 -0
- package/dist/server/handlers/handlePingreq.js.map +1 -0
- package/dist/server/handlers/handlePuback.d.ts +13 -0
- package/dist/server/handlers/handlePuback.d.ts.map +1 -0
- package/dist/server/handlers/handlePuback.js +17 -0
- package/dist/server/handlers/handlePuback.js.map +1 -0
- package/dist/server/handlers/handlePubcomp.d.ts +12 -0
- package/dist/server/handlers/handlePubcomp.d.ts.map +1 -0
- package/dist/server/handlers/handlePubcomp.js +15 -0
- package/dist/server/handlers/handlePubcomp.js.map +1 -0
- package/dist/server/handlers/handlePublish.d.ts +11 -0
- package/dist/server/handlers/handlePublish.d.ts.map +1 -0
- package/dist/server/handlers/handlePublish.js +55 -0
- package/dist/server/handlers/handlePublish.js.map +1 -0
- package/dist/server/handlers/handlePubrec.d.ts +15 -0
- package/dist/server/handlers/handlePubrec.d.ts.map +1 -0
- package/dist/server/handlers/handlePubrec.js +24 -0
- package/dist/server/handlers/handlePubrec.js.map +1 -0
- package/dist/server/handlers/handlePubrel.d.ts +16 -0
- package/dist/server/handlers/handlePubrel.d.ts.map +1 -0
- package/dist/server/handlers/handlePubrel.js +28 -0
- package/dist/server/handlers/handlePubrel.js.map +1 -0
- package/dist/server/handlers/handleSubscribe.d.ts +13 -0
- package/dist/server/handlers/handleSubscribe.d.ts.map +1 -0
- package/dist/server/handlers/handleSubscribe.js +57 -0
- package/dist/server/handlers/handleSubscribe.js.map +1 -0
- package/dist/server/handlers/handleUnsubscribe.d.ts +10 -0
- package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -0
- package/dist/server/handlers/handleUnsubscribe.js +19 -0
- package/dist/server/handlers/handleUnsubscribe.js.map +1 -0
- package/dist/server/mod.d.ts +11 -0
- package/dist/server/mod.d.ts.map +1 -0
- package/dist/server/mod.js +8 -0
- package/dist/server/mod.js.map +1 -0
- package/dist/server/server.d.ts +27 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +48 -0
- package/dist/server/server.js.map +1 -0
- package/dist/socket/socket.d.ts +29 -0
- package/dist/socket/socket.d.ts.map +1 -0
- package/dist/socket/socket.js +37 -0
- package/dist/socket/socket.js.map +1 -0
- package/dist/timer/timer.d.ts +13 -0
- package/dist/timer/timer.d.ts.map +1 -0
- package/dist/timer/timer.js +41 -0
- package/dist/timer/timer.js.map +1 -0
- package/dist/trie/trie.d.ts +21 -0
- package/dist/trie/trie.d.ts.map +1 -0
- package/dist/trie/trie.js +96 -0
- package/dist/trie/trie.js.map +1 -0
- package/dist/utils/args.d.ts +28 -0
- package/dist/utils/args.d.ts.map +1 -0
- package/dist/utils/args.js +76 -0
- package/dist/utils/args.js.map +1 -0
- package/dist/utils/assert.d.ts +10 -0
- package/dist/utils/assert.d.ts.map +1 -0
- package/dist/utils/assert.js +21 -0
- package/dist/utils/assert.js.map +1 -0
- package/dist/utils/asyncQueue.d.ts +28 -0
- package/dist/utils/asyncQueue.d.ts.map +1 -0
- package/dist/utils/asyncQueue.js +70 -0
- package/dist/utils/asyncQueue.js.map +1 -0
- package/dist/utils/deferred.d.ts +10 -0
- package/dist/utils/deferred.d.ts.map +1 -0
- package/dist/utils/deferred.js +15 -0
- package/dist/utils/deferred.js.map +1 -0
- package/dist/utils/logger.d.ts +63 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +59 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mod.d.ts +13 -0
- package/dist/utils/mod.d.ts.map +1 -0
- package/dist/utils/mod.js +12 -0
- package/dist/utils/mod.js.map +1 -0
- package/dist/utils/nextTick.d.ts +17 -0
- package/dist/utils/nextTick.d.ts.map +1 -0
- package/dist/utils/nextTick.js +19 -0
- package/dist/utils/nextTick.js.map +1 -0
- package/dist/utils/platform.d.ts +5 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +8 -0
- package/dist/utils/platform.js.map +1 -0
- package/examples/tcpServer.test.ts +149 -0
- package/mqttConn/mqttConn.ts +58 -2
- package/package.json +14 -10
- package/persistence/persistence.ts +66 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../server/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,qBAAqB,EACrB,KAAK,GACN,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module provides an MQTT Server interface see the /bin folder for examples
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
export { AuthenticationResult } from "./deps.js";
|
|
6
|
+
export { MqttServer } from "./server.js";
|
|
7
|
+
export { Context } from "./context.js";
|
|
8
|
+
//# sourceMappingURL=mod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../server/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAOjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Handlers } from "./context.ts";
|
|
2
|
+
import { type IPersistence, type SockConn } from "./deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* The options to configure the MqttServer
|
|
5
|
+
*/
|
|
6
|
+
export type MqttServerOptions = {
|
|
7
|
+
persistence?: IPersistence;
|
|
8
|
+
handlers?: Handlers;
|
|
9
|
+
};
|
|
10
|
+
/** The MqttServer class provides a MQTT server with configurable persistence and
|
|
11
|
+
* authentication/authorization handlers.
|
|
12
|
+
*
|
|
13
|
+
* The default handlers are:
|
|
14
|
+
* - isAuthenticated: always returns ok
|
|
15
|
+
* - isAuthorizedToPublish: always returns true
|
|
16
|
+
* - isAuthorizedToSubscribe: always returns true
|
|
17
|
+
*
|
|
18
|
+
* To customize the handlers, pass in a Handlers object.
|
|
19
|
+
* To customize the persistence, pass in a Persistence object.
|
|
20
|
+
*/
|
|
21
|
+
export declare class MqttServer {
|
|
22
|
+
handlers: Handlers;
|
|
23
|
+
persistence: IPersistence;
|
|
24
|
+
constructor({ persistence, handlers, }: MqttServerOptions);
|
|
25
|
+
serve(conn: SockConn): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAEL,KAAK,YAAY,EAGjB,KAAK,QAAQ,EAEd,MAAM,WAAW,CAAC;AAanB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;GAUG;AAEH,qBAAa,UAAU;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,YAAY,CAAC;gBACd,EACV,WAAW,EACX,QAAQ,GACT,EAAE,iBAAiB;IAWd,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAe3C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Context } from "./context.js";
|
|
2
|
+
import { AuthenticationResult, logger, MemoryPersistence, } from "./deps.js";
|
|
3
|
+
import { handlePacket } from "./handlers/handlePacket.js";
|
|
4
|
+
const defaultIsAuthenticated = (_ctx, _clientId, _username, _password) => AuthenticationResult.ok;
|
|
5
|
+
const defaultIsAuthorized = (_ctx, _topic) => true;
|
|
6
|
+
/** The MqttServer class provides a MQTT server with configurable persistence and
|
|
7
|
+
* authentication/authorization handlers.
|
|
8
|
+
*
|
|
9
|
+
* The default handlers are:
|
|
10
|
+
* - isAuthenticated: always returns ok
|
|
11
|
+
* - isAuthorizedToPublish: always returns true
|
|
12
|
+
* - isAuthorizedToSubscribe: always returns true
|
|
13
|
+
*
|
|
14
|
+
* To customize the handlers, pass in a Handlers object.
|
|
15
|
+
* To customize the persistence, pass in a Persistence object.
|
|
16
|
+
*/
|
|
17
|
+
export class MqttServer {
|
|
18
|
+
handlers;
|
|
19
|
+
persistence;
|
|
20
|
+
constructor({ persistence, handlers, }) {
|
|
21
|
+
this.persistence = persistence || new MemoryPersistence();
|
|
22
|
+
this.handlers = {
|
|
23
|
+
isAuthenticated: handlers?.isAuthenticated || defaultIsAuthenticated,
|
|
24
|
+
isAuthorizedToPublish: handlers?.isAuthorizedToPublish ||
|
|
25
|
+
defaultIsAuthorized,
|
|
26
|
+
isAuthorizedToSubscribe: handlers?.isAuthorizedToSubscribe ||
|
|
27
|
+
defaultIsAuthorized,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async serve(conn) {
|
|
31
|
+
const ctx = new Context(this.persistence, conn, this.handlers);
|
|
32
|
+
if (conn.remoteAddr?.transport === "tcp") {
|
|
33
|
+
logger.debug(`socket connected from ${conn.remoteAddr.hostname}`);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
for await (const packet of ctx.mqttConn) {
|
|
37
|
+
handlePacket(ctx, packet);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
logger.debug(`Error while serving:${err}`);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
ctx.close();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,oBAAoB,EAEpB,MAAM,EACN,iBAAiB,GAGlB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,sBAAsB,GAAG,CAC7B,IAAa,EACb,SAAiB,EACjB,SAAiB,EACjB,SAAqB,EACrB,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;AAE7B,MAAM,mBAAmB,GAAG,CAAC,IAAa,EAAE,MAAa,EAAE,EAAE,CAAC,IAAI,CAAC;AAUnE;;;;;;;;;;GAUG;AAEH,MAAM,OAAO,UAAU;IACrB,QAAQ,CAAW;IACnB,WAAW,CAAe;IAC1B,YAAY,EACV,WAAW,EACX,QAAQ,GACU;QAClB,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,iBAAiB,EAAE,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG;YACd,eAAe,EAAE,QAAQ,EAAE,eAAe,IAAI,sBAAsB;YACpE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB;gBACpD,mBAAmB;YACrB,uBAAuB,EAAE,QAAQ,EAAE,uBAAuB;gBACxD,mBAAmB;SACtB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAc;QACxB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACxC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;gBAAS,CAAC;YACT,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type SockAddr = NetAddr | UnixAddr | undefined;
|
|
2
|
+
export interface NetAddr {
|
|
3
|
+
transport?: "tcp" | "udp";
|
|
4
|
+
hostname: string;
|
|
5
|
+
port: number;
|
|
6
|
+
}
|
|
7
|
+
export interface UnixAddr {
|
|
8
|
+
transport: "unix" | "unixpacket";
|
|
9
|
+
path: string;
|
|
10
|
+
}
|
|
11
|
+
export type SockConn = {
|
|
12
|
+
readable: ReadableStream<Uint8Array>;
|
|
13
|
+
writable: WritableStream<Uint8Array>;
|
|
14
|
+
close: () => void;
|
|
15
|
+
localAddr?: SockAddr;
|
|
16
|
+
remoteAddr?: SockAddr;
|
|
17
|
+
};
|
|
18
|
+
export declare class Conn {
|
|
19
|
+
reader: ReadableStreamBYOBReader;
|
|
20
|
+
writer: WritableStreamDefaultWriter<Uint8Array>;
|
|
21
|
+
closed: boolean;
|
|
22
|
+
remoteAddr: SockAddr | undefined;
|
|
23
|
+
closer: () => void;
|
|
24
|
+
constructor(sockConn: SockConn);
|
|
25
|
+
read(buff: Uint8Array): Promise<number | null>;
|
|
26
|
+
write(data: Uint8Array): Promise<number>;
|
|
27
|
+
close(): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AACtD,MAAM,WAAW,OAAO;IACtB,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF,qBAAa,IAAI;IACf,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;gBAEP,QAAQ,EAAE,QAAQ;IASxB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASpD,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxC,KAAK;CAMN"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export class Conn {
|
|
2
|
+
reader;
|
|
3
|
+
writer;
|
|
4
|
+
closed;
|
|
5
|
+
remoteAddr;
|
|
6
|
+
closer;
|
|
7
|
+
constructor(sockConn) {
|
|
8
|
+
this.closed = false;
|
|
9
|
+
this.reader = sockConn.readable.getReader({ mode: "byob" });
|
|
10
|
+
this.writer = sockConn.writable.getWriter();
|
|
11
|
+
// this.writer.closed.then(() => this.closed = true);
|
|
12
|
+
this.closer = sockConn.close.bind(sockConn);
|
|
13
|
+
this.remoteAddr = sockConn.remoteAddr;
|
|
14
|
+
}
|
|
15
|
+
async read(buff) {
|
|
16
|
+
const buff2 = new Uint8Array(buff.length);
|
|
17
|
+
const result = await this.reader.read(buff2);
|
|
18
|
+
if (!result.done) {
|
|
19
|
+
buff.set(result.value);
|
|
20
|
+
}
|
|
21
|
+
return result.value?.byteLength || null;
|
|
22
|
+
}
|
|
23
|
+
write(data) {
|
|
24
|
+
if (this.closed) {
|
|
25
|
+
return Promise.reject();
|
|
26
|
+
}
|
|
27
|
+
this.writer.write(data);
|
|
28
|
+
return new Promise((resolve) => resolve(data.length));
|
|
29
|
+
}
|
|
30
|
+
close() {
|
|
31
|
+
if (!this.closed) {
|
|
32
|
+
this.closed = true;
|
|
33
|
+
this.closer();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,IAAI;IACf,MAAM,CAA2B;IACjC,MAAM,CAA0C;IAChD,MAAM,CAAU;IAChB,UAAU,CAAuB;IACjC,MAAM,CAAa;IAEnB,YAAY,QAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC5C,qDAAqD;QACrD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAgB;QACzB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,EAAE,UAAU,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAgB;QACpB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class Timer {
|
|
2
|
+
readonly delay: number;
|
|
3
|
+
private action;
|
|
4
|
+
private timer?;
|
|
5
|
+
private end;
|
|
6
|
+
private running;
|
|
7
|
+
constructor(action: Function, delay: number, wait?: boolean);
|
|
8
|
+
private startTimer;
|
|
9
|
+
private ring;
|
|
10
|
+
reset(): void;
|
|
11
|
+
clear(): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=timer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../../timer/timer.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAAC,CAAgC;IAC9C,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAAS;gBAGZ,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,UAAQ;IAQzD,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,IAAI;IAWZ,KAAK,IAAI,IAAI;IAOb,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class Timer {
|
|
2
|
+
delay; // delay in microseconds
|
|
3
|
+
// deno-lint-ignore ban-types
|
|
4
|
+
action; // function to perform when timer expires
|
|
5
|
+
timer;
|
|
6
|
+
end = 0;
|
|
7
|
+
running = false;
|
|
8
|
+
// deno-lint-ignore ban-types
|
|
9
|
+
constructor(action, delay, wait = false) {
|
|
10
|
+
this.delay = delay;
|
|
11
|
+
this.action = action;
|
|
12
|
+
if (!wait) {
|
|
13
|
+
this.reset();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
startTimer(delay) {
|
|
17
|
+
this.running = true;
|
|
18
|
+
this.timer = setTimeout(() => this.ring(), delay);
|
|
19
|
+
}
|
|
20
|
+
ring() {
|
|
21
|
+
const timeLeft = this.end - Date.now();
|
|
22
|
+
// check if delay has passed, else execute action
|
|
23
|
+
if (timeLeft > 0) {
|
|
24
|
+
this.startTimer(timeLeft);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
this.running = false;
|
|
28
|
+
this.action();
|
|
29
|
+
}
|
|
30
|
+
reset() {
|
|
31
|
+
this.end = Date.now() + this.delay;
|
|
32
|
+
if (!this.running) {
|
|
33
|
+
this.startTimer(this.delay);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
clear() {
|
|
37
|
+
clearTimeout(this.timer);
|
|
38
|
+
this.running = false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=timer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.js","sourceRoot":"","sources":["../../timer/timer.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,KAAK;IACP,KAAK,CAAS,CAAC,wBAAwB;IAChD,6BAA6B;IACrB,MAAM,CAAW,CAAC,yCAAyC;IAC3D,KAAK,CAAiC;IACtC,GAAG,GAAG,CAAC,CAAC;IACR,OAAO,GAAG,KAAK,CAAC;IAExB,6BAA6B;IAC7B,YAAY,MAAgB,EAAE,KAAa,EAAE,IAAI,GAAG,KAAK;QACvD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAEO,IAAI;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvC,iDAAiD;QACjD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK;QACH,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type Parts = string[];
|
|
2
|
+
export declare class Trie<T> {
|
|
3
|
+
#private;
|
|
4
|
+
private separator;
|
|
5
|
+
private wildcardOne;
|
|
6
|
+
private wildcardSubtree;
|
|
7
|
+
private reservedPrefix;
|
|
8
|
+
private looseCompare;
|
|
9
|
+
constructor(looseCompare?: boolean);
|
|
10
|
+
matchChild(child: string, parts: Parts): Array<T>;
|
|
11
|
+
match(key: string): T[];
|
|
12
|
+
private _matchPrefix;
|
|
13
|
+
private _match;
|
|
14
|
+
add(key: string, value: T): void;
|
|
15
|
+
private _add;
|
|
16
|
+
remove(key: string, value: T): void;
|
|
17
|
+
private _remove;
|
|
18
|
+
private filter;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=trie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trie.d.ts","sourceRoot":"","sources":["../../trie/trie.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG,MAAM,EAAE,CAAC;AAEtB,qBAAa,IAAI,CAAC,CAAC;;IAGjB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,YAAY,CAAU;gBAElB,YAAY,UAAQ;IAMhC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAKjD,KAAK,CAAC,GAAG,EAAE,MAAM;IASjB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,MAAM;IAYd,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAIzB,OAAO,CAAC,IAAI;IAiBZ,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAI5B,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,MAAM;CAaf"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export class Trie {
|
|
2
|
+
#value;
|
|
3
|
+
#children;
|
|
4
|
+
separator = "/";
|
|
5
|
+
wildcardOne = "+";
|
|
6
|
+
wildcardSubtree = "#";
|
|
7
|
+
reservedPrefix = "$";
|
|
8
|
+
looseCompare;
|
|
9
|
+
constructor(looseCompare = false) {
|
|
10
|
+
this.#value = [];
|
|
11
|
+
this.#children = new Map();
|
|
12
|
+
this.looseCompare = looseCompare;
|
|
13
|
+
}
|
|
14
|
+
matchChild(child, parts) {
|
|
15
|
+
const childNode = this.#children.get(child);
|
|
16
|
+
return childNode ? childNode._match(parts) : [];
|
|
17
|
+
}
|
|
18
|
+
match(key) {
|
|
19
|
+
const parts = key.split(this.separator);
|
|
20
|
+
// toplevel wildcards are not allowed to match toplevel reserved topics
|
|
21
|
+
if (parts.length > 0 && parts[0].charAt(0) === this.reservedPrefix) {
|
|
22
|
+
return this._matchPrefix(parts);
|
|
23
|
+
}
|
|
24
|
+
return this._match(parts);
|
|
25
|
+
}
|
|
26
|
+
_matchPrefix(parts) {
|
|
27
|
+
if (parts.length === 0) {
|
|
28
|
+
return this.#value ? this.#value : [];
|
|
29
|
+
}
|
|
30
|
+
const [first, ...rest] = parts;
|
|
31
|
+
return this.matchChild(first, rest);
|
|
32
|
+
}
|
|
33
|
+
_match(parts) {
|
|
34
|
+
if (parts.length === 0) {
|
|
35
|
+
return this.#value ? this.#value : [];
|
|
36
|
+
}
|
|
37
|
+
const [first, ...rest] = parts;
|
|
38
|
+
const exact = this.matchChild(first, rest);
|
|
39
|
+
const single = this.matchChild(this.wildcardOne, rest);
|
|
40
|
+
const subtree = this.matchChild(this.wildcardSubtree, []);
|
|
41
|
+
const results = exact.concat(single, subtree);
|
|
42
|
+
return results;
|
|
43
|
+
}
|
|
44
|
+
add(key, value) {
|
|
45
|
+
return this._add(key.split(this.separator), value);
|
|
46
|
+
}
|
|
47
|
+
_add(parts, value) {
|
|
48
|
+
if (parts.length === 0) {
|
|
49
|
+
this.#value = this.#value.concat(value);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const [first, ...rest] = parts;
|
|
53
|
+
const child = this.#children.get(first);
|
|
54
|
+
if (child instanceof Trie) {
|
|
55
|
+
child._add(rest, value);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const node = new Trie(this.looseCompare);
|
|
59
|
+
this.#children.set(first, node);
|
|
60
|
+
node._add(rest, value);
|
|
61
|
+
}
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
remove(key, value) {
|
|
65
|
+
return this._remove(key.split(this.separator), value);
|
|
66
|
+
}
|
|
67
|
+
_remove(parts, value) {
|
|
68
|
+
if (parts.length === 0) {
|
|
69
|
+
const arr = this.#value || [];
|
|
70
|
+
this.#value = arr.filter(this.filter(value));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const [first, ...rest] = parts;
|
|
74
|
+
const node = this.#children.get(first);
|
|
75
|
+
if (node) {
|
|
76
|
+
node._remove(rest, value);
|
|
77
|
+
if (node.#value.length === 0 && this.#children.size === 0) {
|
|
78
|
+
this.#children.delete(first);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
filter(value) {
|
|
83
|
+
if (this.looseCompare && typeof value === "object") {
|
|
84
|
+
return (item) => {
|
|
85
|
+
for (const key in value) {
|
|
86
|
+
if (value[key] !== item[key]) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return (item) => item !== value;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=trie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trie.js","sourceRoot":"","sources":["../../trie/trie.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,IAAI;IACf,MAAM,CAAW;IACjB,SAAS,CAAuB;IACxB,SAAS,GAAG,GAAG,CAAC;IAChB,WAAW,GAAG,GAAG,CAAC;IAClB,eAAe,GAAG,GAAG,CAAC;IACtB,cAAc,GAAG,GAAG,CAAC;IACrB,YAAY,CAAU;IAE9B,YAAY,YAAY,GAAG,KAAK;QAC9B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,KAAY;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,GAAW;QACf,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,uEAAuE;QACvE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAEO,YAAY,CAAC,KAAY;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAEO,MAAM,CAAC,KAAY;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAEO,IAAI,CAAC,KAAY,EAAE,KAAQ;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,IAAI,IAAI,CAAI,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,KAAQ;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAEO,OAAO,CAAC,KAAY,EAAE,KAAQ;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,KAAQ;QACrB,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO,CAAC,IAAI,EAAE,EAAE;gBACd,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;oBACxB,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC7B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parsed arguments as key value
|
|
3
|
+
*/
|
|
4
|
+
export type Args = Record<string, any>;
|
|
5
|
+
export type ArgsValue = string | number | boolean;
|
|
6
|
+
type ArgOpts = {
|
|
7
|
+
string?: string[];
|
|
8
|
+
boolean?: string[];
|
|
9
|
+
alias?: Record<string, string>;
|
|
10
|
+
default?: Args;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* a parser for command line arguments
|
|
14
|
+
* @param args the arguments to parse
|
|
15
|
+
* @param opts the options for the parser
|
|
16
|
+
* @returns the parsed arguments
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const args = parseArgs(args, {
|
|
20
|
+
* alias: { h: "help" },
|
|
21
|
+
* boolean: ["help"],
|
|
22
|
+
* string: ["port"],
|
|
23
|
+
* default: { port: 3000 },
|
|
24
|
+
* });
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseArgs(args: string[], opts?: ArgOpts): Args;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../utils/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACvC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAElD,KAAK,OAAO,GAAG;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,CAAC;AA+CF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,OAAY,GAAG,IAAI,CA6BlE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
function formatValue(key, value, boolean, string) {
|
|
2
|
+
if (key === "__proto__" || key === "constructor") {
|
|
3
|
+
throw new Error(`Invalid argument: ${key}`);
|
|
4
|
+
}
|
|
5
|
+
if (boolean.includes(key)) {
|
|
6
|
+
if (value !== "false") {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
if (!string.includes(key)) {
|
|
12
|
+
const num = Number(value);
|
|
13
|
+
if (!Number.isNaN(num)) {
|
|
14
|
+
return num;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
function parseKeyValue(arg, alias) {
|
|
20
|
+
if (arg.startsWith("--no-")) {
|
|
21
|
+
const key = arg.slice(5);
|
|
22
|
+
return [key, false];
|
|
23
|
+
}
|
|
24
|
+
if (arg.startsWith("--")) {
|
|
25
|
+
const [key, value] = arg.slice(2).split("=", 2);
|
|
26
|
+
return [key, value];
|
|
27
|
+
}
|
|
28
|
+
if (arg.startsWith("-")) {
|
|
29
|
+
const [flag, value] = arg.slice(1).split("=", 2);
|
|
30
|
+
const key = alias[flag] || flag;
|
|
31
|
+
return [key, value];
|
|
32
|
+
}
|
|
33
|
+
return ["_", arg];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* a parser for command line arguments
|
|
37
|
+
* @param args the arguments to parse
|
|
38
|
+
* @param opts the options for the parser
|
|
39
|
+
* @returns the parsed arguments
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* const args = parseArgs(args, {
|
|
43
|
+
* alias: { h: "help" },
|
|
44
|
+
* boolean: ["help"],
|
|
45
|
+
* string: ["port"],
|
|
46
|
+
* default: { port: 3000 },
|
|
47
|
+
* });
|
|
48
|
+
*/
|
|
49
|
+
export function parseArgs(args, opts = {}) {
|
|
50
|
+
const { alias = {}, boolean = [], string = [], default: defaults = {} } = opts;
|
|
51
|
+
const result = { ...defaults };
|
|
52
|
+
result["_"] = [];
|
|
53
|
+
for (let i = 0; i < args.length; i++) {
|
|
54
|
+
const [key, value] = parseKeyValue(args[i], alias);
|
|
55
|
+
if (key === "_") {
|
|
56
|
+
result["_"].push(formatValue(key, value, boolean, string));
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (value === undefined) {
|
|
60
|
+
const nextArg = args[i + 1];
|
|
61
|
+
if (nextArg !== undefined &&
|
|
62
|
+
!nextArg.startsWith("-") &&
|
|
63
|
+
!boolean.includes(key)) {
|
|
64
|
+
result[key] = formatValue(key, nextArg, boolean, string);
|
|
65
|
+
i++;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
result[key] = formatValue(key, value, boolean, string);
|
|
69
|
+
}
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
result[key] = formatValue(key, value, boolean, string);
|
|
73
|
+
}
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../utils/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class AssertionError extends Error {
|
|
2
|
+
/** Constructs a new instance. */
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
/** assert(expr, msg) throws AssertionError if expr is falsy. */
|
|
6
|
+
export declare function assert(expr: unknown, msg?: string): asserts expr;
|
|
7
|
+
/** An array-like object (`Array`, `Uint8Array`, `NodeList`, etc.) that is not a string */
|
|
8
|
+
export type ArrayLikeArg<T> = ArrayLike<T> & object;
|
|
9
|
+
export declare function assertArrayIncludes<T>(actual: ArrayLikeArg<T>, expected: ArrayLikeArg<T>, msg?: string): void;
|
|
10
|
+
//# sourceMappingURL=assert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../utils/assert.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;IACvC,iCAAiC;gBACrB,OAAO,EAAE,MAAM;CAI5B;AAED,gEAAgE;AAChE,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,IAAI,CAI5D;AAED,0FAA0F;AAC1F,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAEpD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EACzB,GAAG,CAAC,EAAE,MAAM,QAUb"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class AssertionError extends Error {
|
|
2
|
+
/** Constructs a new instance. */
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "AssertionError";
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/** assert(expr, msg) throws AssertionError if expr is falsy. */
|
|
9
|
+
export function assert(expr, msg = "") {
|
|
10
|
+
if (!expr) {
|
|
11
|
+
throw new AssertionError(msg);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function assertArrayIncludes(actual, expected, msg) {
|
|
15
|
+
const actualArr = Array.from(actual);
|
|
16
|
+
const expectedArr = Array.from(expected);
|
|
17
|
+
for (const item of expectedArr) {
|
|
18
|
+
assert(actualArr.includes(item), msg + `\nExpected: ${expectedArr}\nActual: ${actualArr}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=assert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.js","sourceRoot":"","sources":["../../utils/assert.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,iCAAiC;IACjC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,gEAAgE;AAChE,MAAM,UAAU,MAAM,CAAC,IAAa,EAAE,GAAG,GAAG,EAAE;IAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,mBAAmB,CACjC,MAAuB,EACvB,QAAyB,EACzB,GAAY;IAEZ,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,CACJ,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EACxB,GAAG,GAAG,eAAe,WAAW,aAAa,SAAS,EAAE,CACzD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An Async Queue is a queue that can be used to push items to it and then wait
|
|
3
|
+
* for them to be consumed.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const queue = new AsyncQueue<string>();
|
|
8
|
+
* queue.push("hello");
|
|
9
|
+
* for await (const item of queue) {
|
|
10
|
+
* console.log(item); // "hello"
|
|
11
|
+
* }
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare class AsyncQueue<T> {
|
|
15
|
+
private queue;
|
|
16
|
+
private maxQueueLength;
|
|
17
|
+
private nextResolve;
|
|
18
|
+
private nextReject;
|
|
19
|
+
private done;
|
|
20
|
+
private hasNext;
|
|
21
|
+
constructor(maxQueueLength?: number);
|
|
22
|
+
next(): Promise<T>;
|
|
23
|
+
close(reason?: string): void;
|
|
24
|
+
[Symbol.asyncIterator](): AsyncGenerator<Awaited<T>, void, unknown>;
|
|
25
|
+
push(item: T): void;
|
|
26
|
+
get isDone(): boolean;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=asyncQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncQueue.d.ts","sourceRoot":"","sources":["../../utils/asyncQueue.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAS;gBAEZ,cAAc,CAAC,EAAE,MAAM;IAM7B,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAkBxB,KAAK,CAAC,MAAM,SAAW,GAAG,IAAI;IAOvB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;IAM1E,IAAI,CAAC,IAAI,EAAE,CAAC;IAYZ,IAAI,MAAM,IAAI,OAAO,CAEpB;CACF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { nextTick } from "./nextTick.js";
|
|
2
|
+
/**
|
|
3
|
+
* An Async Queue is a queue that can be used to push items to it and then wait
|
|
4
|
+
* for them to be consumed.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* const queue = new AsyncQueue<string>();
|
|
9
|
+
* queue.push("hello");
|
|
10
|
+
* for await (const item of queue) {
|
|
11
|
+
* console.log(item); // "hello"
|
|
12
|
+
* }
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export class AsyncQueue {
|
|
16
|
+
queue = [];
|
|
17
|
+
maxQueueLength = Infinity;
|
|
18
|
+
nextResolve = (_value) => { };
|
|
19
|
+
nextReject = (_reason) => { };
|
|
20
|
+
done = false;
|
|
21
|
+
hasNext = false;
|
|
22
|
+
constructor(maxQueueLength) {
|
|
23
|
+
if (maxQueueLength) {
|
|
24
|
+
this.maxQueueLength = maxQueueLength;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async next() {
|
|
28
|
+
await nextTick();
|
|
29
|
+
if (this.done && this.queue.length === 0) {
|
|
30
|
+
return Promise.reject("Closed");
|
|
31
|
+
}
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
if (this.queue.length > 0) {
|
|
34
|
+
const item = this.queue.shift();
|
|
35
|
+
if (item) {
|
|
36
|
+
return resolve(item);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
this.nextResolve = resolve;
|
|
40
|
+
this.nextReject = reject;
|
|
41
|
+
this.hasNext = true;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
close(reason = "closed") {
|
|
45
|
+
this.done = true;
|
|
46
|
+
if (this.hasNext) {
|
|
47
|
+
this.nextReject(reason);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async *[Symbol.asyncIterator]() {
|
|
51
|
+
while (true) {
|
|
52
|
+
yield this.next();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
push(item) {
|
|
56
|
+
if (this.hasNext) {
|
|
57
|
+
this.nextResolve(item);
|
|
58
|
+
this.hasNext = false;
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (this.queue.length > this.maxQueueLength) {
|
|
62
|
+
this.queue.shift();
|
|
63
|
+
}
|
|
64
|
+
this.queue.push(item);
|
|
65
|
+
}
|
|
66
|
+
get isDone() {
|
|
67
|
+
return this.done;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=asyncQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncQueue.js","sourceRoot":"","sources":["../../utils/asyncQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,UAAU;IACb,KAAK,GAAQ,EAAE,CAAC;IAChB,cAAc,GAAG,QAAQ,CAAC;IAC1B,WAAW,GAAG,CAAC,MAAS,EAAE,EAAE,GAAE,CAAC,CAAC;IAChC,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE,GAAE,CAAC,CAAC;IACtC,IAAI,GAAG,KAAK,CAAC;IACb,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,cAAuB;QACjC,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACvC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,GAAG,QAAQ;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAO;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF"}
|