u8-mqtt 0.6.3 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/cjs/basic-v4.cjs +1 -1
  2. package/cjs/basic-v5.cjs +1 -1
  3. package/cjs/full-v4.cjs +61 -40
  4. package/cjs/full-v4.cjs.map +1 -1
  5. package/cjs/full-v5.cjs +61 -40
  6. package/cjs/full-v5.cjs.map +1 -1
  7. package/cjs/index.cjs +61 -40
  8. package/cjs/index.cjs.map +1 -1
  9. package/cjs/v4.cjs +61 -40
  10. package/cjs/v4.cjs.map +1 -1
  11. package/cjs/v5.cjs +61 -40
  12. package/cjs/v5.cjs.map +1 -1
  13. package/code/router_path.jsy +47 -33
  14. package/code/with_topic_router.jsy +4 -1
  15. package/esm/basic-v4.js +1 -1
  16. package/esm/basic-v5.js +1 -1
  17. package/esm/deno/basic-v4.js +1 -1
  18. package/esm/deno/basic-v5.js +1 -1
  19. package/esm/deno/full-v4.js +61 -40
  20. package/esm/deno/full-v4.js.map +1 -1
  21. package/esm/deno/full-v5.js +61 -40
  22. package/esm/deno/full-v5.js.map +1 -1
  23. package/esm/deno/index.js +61 -40
  24. package/esm/deno/index.js.map +1 -1
  25. package/esm/deno/v4.js +61 -40
  26. package/esm/deno/v4.js.map +1 -1
  27. package/esm/deno/v5.js +61 -40
  28. package/esm/deno/v5.js.map +1 -1
  29. package/esm/full-v4.js +61 -40
  30. package/esm/full-v4.js.map +1 -1
  31. package/esm/full-v5.js +61 -40
  32. package/esm/full-v5.js.map +1 -1
  33. package/esm/index.js +61 -40
  34. package/esm/index.js.map +1 -1
  35. package/esm/node/basic-v4.js +1 -1
  36. package/esm/node/basic-v4.mjs +1 -1
  37. package/esm/node/basic-v5.js +1 -1
  38. package/esm/node/basic-v5.mjs +1 -1
  39. package/esm/node/full-v4.js +61 -40
  40. package/esm/node/full-v4.js.map +1 -1
  41. package/esm/node/full-v4.mjs +61 -40
  42. package/esm/node/full-v4.mjs.map +1 -1
  43. package/esm/node/full-v5.js +61 -40
  44. package/esm/node/full-v5.js.map +1 -1
  45. package/esm/node/full-v5.mjs +61 -40
  46. package/esm/node/full-v5.mjs.map +1 -1
  47. package/esm/node/index.js +61 -40
  48. package/esm/node/index.js.map +1 -1
  49. package/esm/node/index.mjs +61 -40
  50. package/esm/node/index.mjs.map +1 -1
  51. package/esm/node/v4.js +61 -40
  52. package/esm/node/v4.js.map +1 -1
  53. package/esm/node/v4.mjs +61 -40
  54. package/esm/node/v4.mjs.map +1 -1
  55. package/esm/node/v5.js +61 -40
  56. package/esm/node/v5.js.map +1 -1
  57. package/esm/node/v5.mjs +61 -40
  58. package/esm/node/v5.mjs.map +1 -1
  59. package/esm/v4.js +61 -40
  60. package/esm/v4.js.map +1 -1
  61. package/esm/v5.js +61 -40
  62. package/esm/v5.js.map +1 -1
  63. package/esm/web/basic-v4.js +1 -1
  64. package/esm/web/basic-v4.min.js +1 -1
  65. package/esm/web/basic-v4.min.js.br +0 -0
  66. package/esm/web/basic-v4.min.js.gz +0 -0
  67. package/esm/web/basic-v5.js +1 -1
  68. package/esm/web/basic-v5.min.js +1 -1
  69. package/esm/web/basic-v5.min.js.br +0 -0
  70. package/esm/web/basic-v5.min.js.gz +0 -0
  71. package/esm/web/full-v4.js +61 -40
  72. package/esm/web/full-v4.js.map +1 -1
  73. package/esm/web/full-v4.min.js +1 -1
  74. package/esm/web/full-v4.min.js.br +0 -0
  75. package/esm/web/full-v4.min.js.gz +0 -0
  76. package/esm/web/full-v5.js +61 -40
  77. package/esm/web/full-v5.js.map +1 -1
  78. package/esm/web/full-v5.min.js +1 -1
  79. package/esm/web/full-v5.min.js.br +0 -0
  80. package/esm/web/full-v5.min.js.gz +0 -0
  81. package/esm/web/index.js +61 -40
  82. package/esm/web/index.js.map +1 -1
  83. package/esm/web/index.min.js +1 -1
  84. package/esm/web/index.min.js.br +0 -0
  85. package/esm/web/index.min.js.gz +0 -0
  86. package/esm/web/v4.js +61 -40
  87. package/esm/web/v4.js.map +1 -1
  88. package/esm/web/v4.min.js +1 -1
  89. package/esm/web/v4.min.js.br +0 -0
  90. package/esm/web/v4.min.js.gz +0 -0
  91. package/esm/web/v5.js +61 -40
  92. package/esm/web/v5.js.map +1 -1
  93. package/esm/web/v5.min.js +1 -1
  94. package/esm/web/v5.min.js.br +0 -0
  95. package/esm/web/v5.min.js.gz +0 -0
  96. package/package.json +5 -5
package/cjs/index.cjs CHANGED
@@ -673,16 +673,20 @@ const mqtt_opts_v5 =
673
673
  encode_fns: mqtt_encode_v5,
674
674
  mqtt_writer: mqtt_writer_v5, };
675
675
 
676
- function parse(str, loose) {
677
- if (str instanceof RegExp) return { keys:false, pattern:str };
678
- var c, o, tmp, ext, keys=[], pattern='', arr = str.split('/');
676
+ /**
677
+ * @param {string|RegExp} input The route pattern
678
+ * @param {boolean} [loose] Allow open-ended matching. Ignored with `RegExp` input.
679
+ */
680
+ function parse(input, loose) {
681
+ if (input instanceof RegExp) return { keys:false, pattern:input };
682
+ var c, o, tmp, ext, keys=[], pattern='', arr = input.split('/');
679
683
  arr[0] || arr.shift();
680
684
 
681
685
  while (tmp = arr.shift()) {
682
686
  c = tmp[0];
683
687
  if (c === '*') {
684
- keys.push('wild');
685
- pattern += '/(.*)';
688
+ keys.push(c);
689
+ pattern += tmp[1] === '?' ? '(?:/(.*))?' : '/(.*)';
686
690
  } else if (c === ':') {
687
691
  o = tmp.indexOf('?', 1);
688
692
  ext = tmp.indexOf('.', 1);
@@ -758,7 +762,10 @@ const with_topic_router = mqtt_topic_router =>
758
762
  // alias: unsub_topic
759
763
  unsubscribe_topic(topic_route, ...args) {
760
764
  let router = this.router;
761
- router.remove(topic_route, true);
765
+
766
+ let fn = args.at(-1)?.call ? args.pop() : null;
767
+ router.remove(topic_route, true, fn);
768
+
762
769
  let topic = router.mqtt_topic(topic_route);
763
770
  return this.unsubscribe(topic, ...args ) }// topic_prefix
764
771
 
@@ -811,65 +818,79 @@ function mqtt_topic_path_router() {
811
818
  if (fn) {throw new TypeError()}
812
819
  fn = _ignore;}
813
820
 
814
- let rte = parse(as_topic_path(topic_route));
815
-
816
- rte.key = topic_route;
817
- rte.tgt = fn;
818
- pri_lsts[priority ? 0 : 1].push(rte);
821
+ let route = parse(as_topic_path(topic_route));
822
+ route.topic = topic_route;
823
+ route.tgt = fn;
824
+ pri_lsts[priority ? 0 : 1].push(route);
819
825
  return this}
820
826
 
821
- , remove(topic_route, priority) {
822
- let lst = pri_lsts[priority ? 0 : 1];
823
- return _route_remove([lst], topic_route)}
827
+ , remove(query, ...args) {
828
+ let lst = pri_lsts;
829
+ if ('boolean' === typeof args[0]) {
830
+ lst = [pri_lsts[args.shift() ? 0 : 1]];}
831
+
832
+ if ('string' === typeof query) {
833
+ query ={topic: query, tgt: args.pop()}; }
834
+ return _route_remove(lst, query)}
824
835
 
825
836
  , clear(priority) {
826
- pri_lsts[priority ? 0 : 1] = [];
827
837
  if (null == priority) {
828
- pri_lsts[1] = []; } }// null clears both lists
838
+ pri_lsts = [[],[]]; }// null clears both lists
839
+ else {
840
+ pri_lsts[priority ? 0 : 1] = [];} }
829
841
 
830
842
  , async invoke(pkt, ctx) {
831
843
  ctx.idx = 0;
832
844
  ctx.rm = rm;
833
845
 
834
- for (let [fn, params] of find(pkt.topic)) {
846
+ for (let [fn, params, route] of find(pkt.topic)) {
835
847
  let res = await fn(pkt, params, ctx);
836
848
 
837
849
  if (rm === res) {
838
- _route_remove(pri_lsts, fn);}
850
+ _route_remove(pri_lsts, route);}
839
851
 
840
- if (ctx.done) {
841
- break}
852
+ if (ctx.done) {break}
842
853
  else ctx.idx++;}
843
854
 
844
855
  if (1 === pkt.qos) {
845
856
  await ctx.mqtt.puback(pkt);} } } }
846
857
 
847
858
 
859
+ const _regexparam ={
860
+ get wild() {return this['*']}
861
+ , set wild(v) {return this['*']=wild} };
862
+
848
863
  function * _routes_iter(all_route_lists, topic) {
849
864
  topic = topic.replace(/^[\/]*/, '/'); // ensure '/' prefix for regexparam library
850
- for (let route_list of all_route_lists) {
851
- for (let {keys, pattern, tgt} of route_list) {
852
- let match = pattern.exec(topic);
853
- if (match) {
854
- let params = keys
855
- ? keys.reduce(
856
- (o, k, i) => (o[k] = match[1+i], o)
857
- , {})
858
- : match.groups ?? match;
859
- yield [tgt, params];} } } }
865
+ for (let route of all_route_lists.flat()) {
866
+ let match = route?.pattern.exec(topic);
867
+ if (match) {
868
+ let keys = route.keys;
869
+ if (keys) {
870
+ let k, i=0, params={__proto__:_regexparam};
871
+ for (k of keys) {
872
+ params[k] = match[++i];}
873
+ yield [route.tgt, params, route];}
874
+ else {
875
+ yield [route.tgt, match.groups ?? match, route];} } } }
860
876
 
861
877
 
862
878
  function _route_remove(all_route_lists, query) {
863
- let fn_match = route =>(
864
- route===query
865
- || route.tgt===query
866
- || route.key===query);
879
+ let ans = false;
867
880
  for (let lst of all_route_lists) {
868
- let i = lst.findIndex(fn_match);
869
- if (0 <= i) {
870
- lst.splice(i,1);
871
- return true} }
872
- return false}
881
+ let idx_tip = 0;
882
+ for (let route of lst) {
883
+ // skip matching routes to remove from compacted list
884
+ let skip = route === query;
885
+ if (!skip && route.topic === query.topic)
886
+ skip = (null == query.tgt) || (route.tgt === query.tgt);
887
+
888
+ if (!skip) lst[idx_tip++] = route;}
889
+
890
+ // truncate remaining list
891
+ lst.length = idx_tip;}
892
+
893
+ return ans}
873
894
 
874
895
  function decode_varint(u8, i0=0, invalid) {
875
896
  let shift=0, i=i0, b=u8[i++], n=(b & 0x7f);
@@ -1484,7 +1505,7 @@ class MQTTCore extends MQTTBase {
1484
1505
 
1485
1506
  return this} }
1486
1507
 
1487
- const version = '0.6.3-node';
1508
+ const version = '0.6.5-node';
1488
1509
 
1489
1510
  const MQTTClient_v4 = /* #__PURE__ */
1490
1511
  with_topic_path_router(