u8-mqtt 0.6.4 → 0.6.6

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 +46 -25
  4. package/cjs/full-v4.cjs.map +1 -1
  5. package/cjs/full-v5.cjs +46 -25
  6. package/cjs/full-v5.cjs.map +1 -1
  7. package/cjs/index.cjs +46 -25
  8. package/cjs/index.cjs.map +1 -1
  9. package/cjs/v4.cjs +46 -25
  10. package/cjs/v4.cjs.map +1 -1
  11. package/cjs/v5.cjs +46 -25
  12. package/cjs/v5.cjs.map +1 -1
  13. package/code/router_path.jsy +34 -21
  14. package/code/with_topic_router.jsy +3 -0
  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 +46 -25
  20. package/esm/deno/full-v4.js.map +1 -1
  21. package/esm/deno/full-v5.js +46 -25
  22. package/esm/deno/full-v5.js.map +1 -1
  23. package/esm/deno/index.js +46 -25
  24. package/esm/deno/index.js.map +1 -1
  25. package/esm/deno/v4.js +46 -25
  26. package/esm/deno/v4.js.map +1 -1
  27. package/esm/deno/v5.js +46 -25
  28. package/esm/deno/v5.js.map +1 -1
  29. package/esm/full-v4.js +46 -25
  30. package/esm/full-v4.js.map +1 -1
  31. package/esm/full-v5.js +46 -25
  32. package/esm/full-v5.js.map +1 -1
  33. package/esm/index.js +46 -25
  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 +46 -25
  40. package/esm/node/full-v4.js.map +1 -1
  41. package/esm/node/full-v4.mjs +46 -25
  42. package/esm/node/full-v4.mjs.map +1 -1
  43. package/esm/node/full-v5.js +46 -25
  44. package/esm/node/full-v5.js.map +1 -1
  45. package/esm/node/full-v5.mjs +46 -25
  46. package/esm/node/full-v5.mjs.map +1 -1
  47. package/esm/node/index.js +46 -25
  48. package/esm/node/index.js.map +1 -1
  49. package/esm/node/index.mjs +46 -25
  50. package/esm/node/index.mjs.map +1 -1
  51. package/esm/node/v4.js +46 -25
  52. package/esm/node/v4.js.map +1 -1
  53. package/esm/node/v4.mjs +46 -25
  54. package/esm/node/v4.mjs.map +1 -1
  55. package/esm/node/v5.js +46 -25
  56. package/esm/node/v5.js.map +1 -1
  57. package/esm/node/v5.mjs +46 -25
  58. package/esm/node/v5.mjs.map +1 -1
  59. package/esm/v4.js +46 -25
  60. package/esm/v4.js.map +1 -1
  61. package/esm/v5.js +46 -25
  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 +46 -25
  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 +46 -25
  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 +46 -25
  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 +46 -25
  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 +46 -25
  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 +2 -2
package/esm/full-v5.js CHANGED
@@ -841,16 +841,20 @@ const mqtt_opts_v5 =
841
841
  encode_fns: mqtt_encode_v5,
842
842
  mqtt_writer: mqtt_writer_v5, };
843
843
 
844
- function parse(str, loose) {
845
- if (str instanceof RegExp) return { keys:false, pattern:str };
846
- var c, o, tmp, ext, keys=[], pattern='', arr = str.split('/');
844
+ /**
845
+ * @param {string|RegExp} input The route pattern
846
+ * @param {boolean} [loose] Allow open-ended matching. Ignored with `RegExp` input.
847
+ */
848
+ function parse(input, loose) {
849
+ if (input instanceof RegExp) return { keys:false, pattern:input };
850
+ var c, o, tmp, ext, keys=[], pattern='', arr = input.split('/');
847
851
  arr[0] || arr.shift();
848
852
 
849
853
  while (tmp = arr.shift()) {
850
854
  c = tmp[0];
851
855
  if (c === '*') {
852
- keys.push('wild');
853
- pattern += '/(.*)';
856
+ keys.push(c);
857
+ pattern += tmp[1] === '?' ? '(?:/(.*))?' : '/(.*)';
854
858
  } else if (c === ':') {
855
859
  o = tmp.indexOf('?', 1);
856
860
  ext = tmp.indexOf('.', 1);
@@ -890,6 +894,7 @@ class AbstractTopicRouter ::
890
894
  async invoke(pkt, ctx) ::
891
895
  add(topic_route, ...args) ::
892
896
  remove(topic_route, priority) ::
897
+ count(topic_route) ::
893
898
  clear(priority) ::
894
899
  find(topic) :: // optional
895
900
  mqtt_topic(topic_route)
@@ -929,6 +934,8 @@ const with_topic_router = mqtt_topic_router =>
929
934
 
930
935
  let fn = args.at(-1)?.call ? args.pop() : null;
931
936
  router.remove(topic_route, true, fn);
937
+ if (0 !== router.count(topic_route) ) {
938
+ return null}
932
939
 
933
940
  let topic = router.mqtt_topic(topic_route);
934
941
  return this.unsubscribe(topic, ...args ) }// topic_prefix
@@ -997,6 +1004,17 @@ function mqtt_topic_path_router() {
997
1004
  query ={topic: query, tgt: args.pop()}; }
998
1005
  return _route_remove(lst, query)}
999
1006
 
1007
+ , count(topic_route) {
1008
+ if (! topic_route) {
1009
+ return pri_lsts.reduce((r,l) => r+l.length, 0)}
1010
+
1011
+ let count = 0;
1012
+ for (let lst of pri_lsts) {
1013
+ for (let route of lst) {
1014
+ if (topic_route === route.topic) {
1015
+ count++;} } }
1016
+ return count}
1017
+
1000
1018
  , clear(priority) {
1001
1019
  if (null == priority) {
1002
1020
  pri_lsts = [[],[]]; }// null clears both lists
@@ -1020,38 +1038,41 @@ function mqtt_topic_path_router() {
1020
1038
  await ctx.mqtt.puback(pkt);} } } }
1021
1039
 
1022
1040
 
1041
+ const _regexparam ={
1042
+ get wild() {return this['*']}
1043
+ , set wild(v) {return this['*']=wild} };
1044
+
1023
1045
  function * _routes_iter(all_route_lists, topic) {
1024
1046
  topic = topic.replace(/^[\/]*/, '/'); // ensure '/' prefix for regexparam library
1025
- for (let route_list of all_route_lists) {
1026
- for (let route of route_list) {
1027
- let match = route.pattern.exec(topic);
1028
- if (match) {
1029
- let params = route.keys
1030
- ? route.keys.reduce(
1031
- (o, k, i) => (o[k] = match[1+i], o)
1032
- , {})
1033
- : match.groups ?? match;
1034
- yield [route.tgt, params, route];} } } }
1047
+ for (let route of all_route_lists.flat()) {
1048
+ let match = route?.pattern.exec(topic);
1049
+ if (match) {
1050
+ let keys = route.keys;
1051
+ if (keys) {
1052
+ let k, i=0, params={__proto__:_regexparam};
1053
+ for (k of keys) {
1054
+ params[k] = match[++i];}
1055
+ yield [route.tgt, params, route];}
1056
+ else {
1057
+ yield [route.tgt, match.groups ?? match, route];} } } }
1035
1058
 
1036
1059
 
1037
1060
  function _route_remove(all_route_lists, query) {
1038
- let ans = false;
1061
+ let n_removed = 0;
1039
1062
  for (let lst of all_route_lists) {
1040
1063
  let idx_tip = 0;
1041
1064
  for (let route of lst) {
1042
- // skip matching routes to remove from compacted list
1043
- if (route === query) continue
1044
1065
  if (route.topic === query.topic) {
1045
- if (null == query.tgt) continue
1046
- if (route.tgt === query.tgt) continue}
1066
+ if (null == query.tgt || route.tgt === query.tgt) {
1067
+ // skip matching routes to remove from compacted list
1068
+ n_removed++;
1069
+ continue} }
1047
1070
 
1048
1071
  lst[idx_tip++] = route;}
1049
1072
 
1050
1073
  // truncate remaining list
1051
- if (lst.splice(idx_tip).length)
1052
- ans = true;}
1053
-
1054
- return ans}
1074
+ lst.length = idx_tip;}
1075
+ return n_removed}
1055
1076
 
1056
1077
  function decode_varint(u8, i0=0, invalid) {
1057
1078
  let shift=0, i=i0, b=u8[i++], n=(b & 0x7f);
@@ -1666,7 +1687,7 @@ class MQTTCore extends MQTTBase {
1666
1687
 
1667
1688
  return this} }
1668
1689
 
1669
- const version = '0.6.4';
1690
+ const version = '0.6.6';
1670
1691
 
1671
1692
  const MQTTClient_v4 = /* #__PURE__ */
1672
1693
  with_topic_path_router(