u8-mqtt 0.5.3 → 0.6.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/cjs/basic-v4.cjs +283 -277
- package/cjs/basic-v4.cjs.map +1 -1
- package/cjs/basic-v5.cjs +297 -281
- package/cjs/basic-v5.cjs.map +1 -1
- package/cjs/full-v4.cjs +295 -289
- package/cjs/full-v4.cjs.map +1 -1
- package/cjs/full-v5.cjs +309 -293
- package/cjs/full-v5.cjs.map +1 -1
- package/cjs/index.cjs +310 -295
- package/cjs/index.cjs.map +1 -1
- package/cjs/v4.cjs +295 -289
- package/cjs/v4.cjs.map +1 -1
- package/cjs/v5.cjs +309 -293
- package/cjs/v5.cjs.map +1 -1
- package/code/_cmdid_dispatch.jsy +45 -69
- package/code/_conn.jsy +96 -72
- package/code/_dispatch.jsy +36 -28
- package/code/_utils.jsy +17 -0
- package/code/base.jsy +33 -61
- package/code/core.jsy +73 -51
- package/code/router_path.jsy +2 -1
- package/esm/basic-v4.js +283 -277
- package/esm/basic-v4.js.map +1 -1
- package/esm/basic-v5.js +297 -281
- package/esm/basic-v5.js.map +1 -1
- package/esm/deno/basic-v4.js +287 -281
- package/esm/deno/basic-v4.js.map +1 -1
- package/esm/deno/basic-v5.js +301 -285
- package/esm/deno/basic-v5.js.map +1 -1
- package/esm/deno/full-v4.js +299 -293
- package/esm/deno/full-v4.js.map +1 -1
- package/esm/deno/full-v5.js +313 -297
- package/esm/deno/full-v5.js.map +1 -1
- package/esm/deno/index.js +314 -298
- package/esm/deno/index.js.map +1 -1
- package/esm/deno/v4.js +299 -293
- package/esm/deno/v4.js.map +1 -1
- package/esm/deno/v5.js +313 -297
- package/esm/deno/v5.js.map +1 -1
- package/esm/full-v4.js +295 -289
- package/esm/full-v4.js.map +1 -1
- package/esm/full-v5.js +309 -293
- package/esm/full-v5.js.map +1 -1
- package/esm/index.js +310 -294
- package/esm/index.js.map +1 -1
- package/esm/node/basic-v4.js +283 -277
- package/esm/node/basic-v4.js.map +1 -1
- package/esm/node/basic-v4.mjs +283 -277
- package/esm/node/basic-v4.mjs.map +1 -1
- package/esm/node/basic-v5.js +297 -281
- package/esm/node/basic-v5.js.map +1 -1
- package/esm/node/basic-v5.mjs +297 -281
- package/esm/node/basic-v5.mjs.map +1 -1
- package/esm/node/full-v4.js +295 -289
- package/esm/node/full-v4.js.map +1 -1
- package/esm/node/full-v4.mjs +295 -289
- package/esm/node/full-v4.mjs.map +1 -1
- package/esm/node/full-v5.js +309 -293
- package/esm/node/full-v5.js.map +1 -1
- package/esm/node/full-v5.mjs +309 -293
- package/esm/node/full-v5.mjs.map +1 -1
- package/esm/node/index.js +310 -294
- package/esm/node/index.js.map +1 -1
- package/esm/node/index.mjs +310 -294
- package/esm/node/index.mjs.map +1 -1
- package/esm/node/v4.js +295 -289
- package/esm/node/v4.js.map +1 -1
- package/esm/node/v4.mjs +295 -289
- package/esm/node/v4.mjs.map +1 -1
- package/esm/node/v5.js +309 -293
- package/esm/node/v5.js.map +1 -1
- package/esm/node/v5.mjs +309 -293
- package/esm/node/v5.mjs.map +1 -1
- package/esm/v4.js +295 -289
- package/esm/v4.js.map +1 -1
- package/esm/v5.js +309 -293
- package/esm/v5.js.map +1 -1
- package/esm/web/basic-v4.js +283 -277
- package/esm/web/basic-v4.js.map +1 -1
- package/esm/web/basic-v4.min.js +1 -1
- package/esm/web/basic-v4.min.js.br +0 -0
- package/esm/web/basic-v4.min.js.gz +0 -0
- package/esm/web/basic-v5.js +297 -281
- package/esm/web/basic-v5.js.map +1 -1
- package/esm/web/basic-v5.min.js +1 -1
- package/esm/web/basic-v5.min.js.br +0 -0
- package/esm/web/basic-v5.min.js.gz +0 -0
- package/esm/web/full-v4.js +295 -289
- package/esm/web/full-v4.js.map +1 -1
- package/esm/web/full-v4.min.js +1 -1
- package/esm/web/full-v4.min.js.br +0 -0
- package/esm/web/full-v4.min.js.gz +0 -0
- package/esm/web/full-v5.js +309 -293
- package/esm/web/full-v5.js.map +1 -1
- package/esm/web/full-v5.min.js +1 -1
- package/esm/web/full-v5.min.js.br +0 -0
- package/esm/web/full-v5.min.js.gz +0 -0
- package/esm/web/index.js +310 -294
- package/esm/web/index.js.map +1 -1
- package/esm/web/index.min.js +1 -1
- package/esm/web/index.min.js.br +0 -0
- package/esm/web/index.min.js.gz +0 -0
- package/esm/web/v4.js +295 -289
- package/esm/web/v4.js.map +1 -1
- package/esm/web/v4.min.js +1 -1
- package/esm/web/v4.min.js.br +0 -0
- package/esm/web/v4.min.js.gz +0 -0
- package/esm/web/v5.js +309 -293
- package/esm/web/v5.js.map +1 -1
- package/esm/web/v5.min.js +1 -1
- package/esm/web/v5.min.js.br +0 -0
- package/esm/web/v5.min.js.gz +0 -0
- package/package.json +7 -8
package/code/core.jsy
CHANGED
|
@@ -1,41 +1,69 @@
|
|
|
1
1
|
import mqtt_pkt_ctx from 'u8-mqtt-packet/esm/codec_bind.js'
|
|
2
|
+
import { _isfn } from './_utils.jsy'
|
|
2
3
|
import { MQTTBase } from './base.jsy'
|
|
4
|
+
import { _mqtt_conn } from './_conn.jsy'
|
|
3
5
|
|
|
4
6
|
#IF PLAT_NODEJS
|
|
5
7
|
import {connect as tcp_connect} from 'node:net'
|
|
6
8
|
import {connect as tls_connect} from 'node:tls'
|
|
7
9
|
|
|
8
|
-
const pkt_api = {
|
|
9
|
-
utf8(u8)
|
|
10
|
-
json(u8)
|
|
11
|
-
text(u8)
|
|
12
|
-
|
|
10
|
+
const pkt_api = @{}
|
|
11
|
+
utf8(u8) :: return new TextDecoder('utf-8').decode(u8 || this.payload )
|
|
12
|
+
json(u8) :: return JSON.parse( this.utf8(u8) || null )
|
|
13
|
+
text(u8) :: return this.utf8(u8)
|
|
14
|
+
|
|
15
|
+
const opt_default = @{}
|
|
16
|
+
sess_stg: globalThis.sessionStorage
|
|
13
17
|
|
|
14
18
|
export class MQTTCore extends MQTTBase ::
|
|
19
|
+
constructor(opt) ::
|
|
20
|
+
super()
|
|
21
|
+
this.with(opt)
|
|
22
|
+
opt = @{} ...opt_default, ...opt
|
|
23
|
+
// settings for MQTTCore
|
|
24
|
+
this.sess_stg = opt.sess_stg
|
|
25
|
+
// setup connection and dispatch
|
|
26
|
+
this.conn = _mqtt_conn @ opt, this,
|
|
27
|
+
this._init_dispatch(opt)
|
|
28
|
+
|
|
29
|
+
with(fns_ns) ::
|
|
30
|
+
for let [k,v] of Object.entries(fns_ns) ::
|
|
31
|
+
if _isfn(v) :: this[k] = v
|
|
32
|
+
return this
|
|
33
|
+
|
|
34
|
+
|
|
15
35
|
static mqtt_ctx(mqtt_level, mqtt_opts, pkt_ctx=pkt_api) ::
|
|
16
|
-
let
|
|
17
|
-
|
|
36
|
+
let klass = class extends this {}
|
|
37
|
+
klass.prototype.mqtt_ctx =
|
|
18
38
|
mqtt_pkt_ctx(mqtt_level, mqtt_opts, pkt_ctx)
|
|
19
|
-
return
|
|
39
|
+
return klass
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
async conn_emit(evt, arg, err_arg) ::
|
|
43
|
+
this.log_conn?.(evt, arg, err_arg)
|
|
44
|
+
try ::
|
|
45
|
+
let fn_evt = this[await evt] // microtask break using `await evt`
|
|
46
|
+
if fn_evt ::
|
|
47
|
+
await fn_evt.call(this, this, arg, err_arg)
|
|
48
|
+
else if err_arg :: throw err_arg
|
|
49
|
+
catch err ::
|
|
50
|
+
this.on_error(err, evt)
|
|
51
|
+
|
|
52
|
+
on_error(err, evt) ::
|
|
53
|
+
console.warn @ '[[u8-mqtt error: %s]]', evt, err
|
|
54
|
+
log_conn(evt, arg, err_arg) ::
|
|
55
|
+
console.info @ '[[u8-mqtt conn: %s]]', evt, arg, err_arg
|
|
20
56
|
|
|
21
57
|
|
|
22
58
|
// automatic Client Id for connect()
|
|
23
59
|
init_client_id(parts=['u8-mqtt--','']) ::
|
|
24
|
-
let sess_stg=this.sess_stg
|
|
60
|
+
let sess_stg = this.sess_stg
|
|
25
61
|
let key, cid = sess_stg?.getItem(key=parts.join(' '))
|
|
26
62
|
if ! cid ::
|
|
27
63
|
cid = parts.join @ Math.random().toString(36).slice(2)
|
|
28
64
|
sess_stg?.setItem(key, cid)
|
|
29
65
|
return cid
|
|
30
66
|
|
|
31
|
-
get sess_stg() :: return globalThis.sessionStorage
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
//on_error(err, evt) ::
|
|
35
|
-
// console.warn @ '[[u8-mqtt error: %s]]', evt, err
|
|
36
|
-
|
|
37
|
-
//log_conn(evt, arg, err_arg) ::
|
|
38
|
-
// console.info @ '[[u8-mqtt log: %s]]', evt, arg, err_arg
|
|
39
67
|
|
|
40
68
|
on_live(client, is_reconnect) ::
|
|
41
69
|
if is_reconnect ::
|
|
@@ -61,19 +89,16 @@ export class MQTTCore extends MQTTBase ::
|
|
|
61
89
|
return new Promise @ done => setTimeout(done, ms)
|
|
62
90
|
|
|
63
91
|
with_async_iter(async_iter, write_u8_pkt) ::
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
catch err ::
|
|
75
|
-
this._conn_.reset(err)
|
|
76
|
-
|
|
92
|
+
this.conn.setup @ async_iter,
|
|
93
|
+
write_u8_pkt,
|
|
94
|
+
async (on_mqtt_chunk, conn) => ::
|
|
95
|
+
try ::
|
|
96
|
+
async_iter = await async_iter
|
|
97
|
+
for await (let chunk of async_iter)
|
|
98
|
+
on_mqtt_chunk(chunk)
|
|
99
|
+
conn.reset()
|
|
100
|
+
catch err ::
|
|
101
|
+
conn.reset(err)
|
|
77
102
|
return this
|
|
78
103
|
|
|
79
104
|
|
|
@@ -92,11 +117,11 @@ export class MQTTCore extends MQTTBase ::
|
|
|
92
117
|
this.with_deno_iter @
|
|
93
118
|
Deno.connectTls(opt)
|
|
94
119
|
|
|
95
|
-
with_deno_iter(
|
|
120
|
+
with_deno_iter(transport) ::
|
|
96
121
|
return this.with_async_iter @
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
122
|
+
transport.then(Deno.iter),
|
|
123
|
+
transport.then @ write_stream =>
|
|
124
|
+
u8_pkt => write_stream.write(u8_pkt)
|
|
100
125
|
|
|
101
126
|
_conn_opt([a0, a1, a2]) ::
|
|
102
127
|
// (port, hostname, options) or (url, options)
|
|
@@ -144,29 +169,26 @@ export class MQTTCore extends MQTTBase ::
|
|
|
144
169
|
|
|
145
170
|
websock.binaryType = 'arraybuffer'
|
|
146
171
|
|
|
147
|
-
let
|
|
172
|
+
let ws_ready, readyState = websock.readyState
|
|
148
173
|
if 1 !== readyState ::
|
|
149
174
|
if 0 !== readyState ::
|
|
150
|
-
throw new Error @ '
|
|
151
|
-
|
|
152
|
-
ready = new Promise @ fn => websock.onopen = fn
|
|
175
|
+
throw new Error @ 'WS readyState'
|
|
153
176
|
|
|
177
|
+
ws_ready = new Promise @ ready => websock.onopen = ready
|
|
154
178
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
websock.send(u8_pkt)
|
|
179
|
+
this.conn.setup @ ws_ready,
|
|
180
|
+
u8_pkt => websock.send(u8_pkt),
|
|
181
|
+
(on_mqtt_chunk, conn) => ::
|
|
182
|
+
websock.onmessage = evt => @
|
|
183
|
+
on_mqtt_chunk @ new Uint8Array(evt.data)
|
|
161
184
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
err.reason = evt.reason
|
|
185
|
+
websock.onclose = evt => ::
|
|
186
|
+
if ! evt.wasClean ::
|
|
187
|
+
var err = new Error('websocket close')
|
|
188
|
+
err.code = evt.code
|
|
189
|
+
err.reason = evt.reason
|
|
168
190
|
|
|
169
|
-
|
|
191
|
+
conn.reset(err)
|
|
170
192
|
|
|
171
193
|
return this
|
|
172
194
|
|
package/code/router_path.jsy
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// [regexparam]: https://github.com/lukeed/regexparam
|
|
3
3
|
|
|
4
4
|
import {parse as _rxp_parse} from 'regexparam'
|
|
5
|
+
import {_isfn} from './_utils.jsy'
|
|
5
6
|
import {with_topic_router} from './with_topic_router.jsy'
|
|
6
7
|
|
|
7
8
|
export const with_topic_path_router = /* #__PURE__ */
|
|
@@ -40,7 +41,7 @@ function mqtt_topic_path_router() ::
|
|
|
40
41
|
let fn = args.pop()
|
|
41
42
|
let priority = args.pop()
|
|
42
43
|
|
|
43
|
-
if
|
|
44
|
+
if ! _isfn(fn) ::
|
|
44
45
|
if fn :: throw new TypeError()
|
|
45
46
|
fn = _ignore
|
|
46
47
|
|