@ezez/utils 4.4.0 → 4.5.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.
Files changed (151) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/deserialize.d.ts +1 -1
  3. package/dist/deserialize.d.ts.map +1 -1
  4. package/dist/deserialize.js +2 -1
  5. package/dist/deserialize.js.map +1 -1
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +2 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/serialize.d.ts.map +1 -1
  11. package/dist/serialize.js.map +1 -1
  12. package/dist/serializeToBuffer/const.d.ts +10 -0
  13. package/dist/serializeToBuffer/const.d.ts.map +1 -0
  14. package/dist/serializeToBuffer/const.js +16 -0
  15. package/dist/serializeToBuffer/const.js.map +1 -0
  16. package/dist/serializeToBuffer/serializeToBuffer.d.ts +5 -0
  17. package/dist/serializeToBuffer/serializeToBuffer.d.ts.map +1 -0
  18. package/dist/serializeToBuffer/serializeToBuffer.js +39 -0
  19. package/dist/serializeToBuffer/serializeToBuffer.js.map +1 -0
  20. package/dist/serializeToBuffer/unserializeFromBuffer.d.ts +5 -0
  21. package/dist/serializeToBuffer/unserializeFromBuffer.d.ts.map +1 -0
  22. package/dist/serializeToBuffer/unserializeFromBuffer.js +52 -0
  23. package/dist/serializeToBuffer/unserializeFromBuffer.js.map +1 -0
  24. package/docs/assets/navigation.js +1 -1
  25. package/docs/assets/search.js +1 -1
  26. package/docs/documents/CHANGELOG.html +68 -60
  27. package/docs/functions/index.cap.html +2 -2
  28. package/docs/functions/index.capitalize.html +2 -2
  29. package/docs/functions/index.coalesce.html +2 -2
  30. package/docs/functions/index.compareArrays.html +2 -2
  31. package/docs/functions/index.compareProps.html +2 -2
  32. package/docs/functions/index.deserialize.html +2 -2
  33. package/docs/functions/index.ensureArray.html +2 -2
  34. package/docs/functions/index.ensureDate.html +2 -2
  35. package/docs/functions/index.ensureError.html +2 -2
  36. package/docs/functions/index.ensurePrefix.html +2 -2
  37. package/docs/functions/index.ensureSuffix.html +2 -2
  38. package/docs/functions/index.ensureTimestamp.html +2 -2
  39. package/docs/functions/index.escapeRegExp.html +2 -2
  40. package/docs/functions/index.formatDate.html +2 -2
  41. package/docs/functions/index.get.html +2 -2
  42. package/docs/functions/index.getMultiple.html +2 -2
  43. package/docs/functions/index.insertSeparator.html +2 -2
  44. package/docs/functions/index.isEmpty.html +2 -2
  45. package/docs/functions/index.isNumericString.html +2 -2
  46. package/docs/functions/index.isPlainObject.html +2 -2
  47. package/docs/functions/index.last.html +2 -2
  48. package/docs/functions/index.later-1.html +2 -2
  49. package/docs/functions/index.mapAsync.html +2 -2
  50. package/docs/functions/index.mapValues.html +2 -2
  51. package/docs/functions/index.match.html +2 -2
  52. package/docs/functions/index.memoize.html +2 -2
  53. package/docs/functions/index.merge.html +2 -2
  54. package/docs/functions/index.mostFrequent.html +2 -2
  55. package/docs/functions/index.noop.html +2 -2
  56. package/docs/functions/index.occurrences.html +2 -2
  57. package/docs/functions/index.omit.html +2 -2
  58. package/docs/functions/index.pick.html +2 -2
  59. package/docs/functions/index.pull.html +2 -2
  60. package/docs/functions/index.race.html +2 -2
  61. package/docs/functions/index.remove.html +2 -2
  62. package/docs/functions/index.removeCommonProperties.html +2 -2
  63. package/docs/functions/index.replace.html +2 -2
  64. package/docs/functions/index.replaceDeep.html +2 -2
  65. package/docs/functions/index.rethrow.html +2 -2
  66. package/docs/functions/index.retry.html +2 -2
  67. package/docs/functions/index.round.html +2 -2
  68. package/docs/functions/index.safe.html +2 -2
  69. package/docs/functions/index.sample.html +2 -2
  70. package/docs/functions/index.samples.html +2 -2
  71. package/docs/functions/index.scale.html +2 -2
  72. package/docs/functions/index.seq.html +2 -2
  73. package/docs/functions/index.seqEarlyBreak.html +2 -2
  74. package/docs/functions/index.serialize.html +3 -4
  75. package/docs/functions/index.serializeToBuffer.html +19 -0
  76. package/docs/functions/index.set.html +2 -2
  77. package/docs/functions/index.setImmutable.html +2 -2
  78. package/docs/functions/index.shuffle.html +2 -2
  79. package/docs/functions/index.sortBy.html +2 -2
  80. package/docs/functions/index.sortByMultiple.html +2 -2
  81. package/docs/functions/index.sortProps.html +2 -2
  82. package/docs/functions/index.stripPrefix.html +2 -2
  83. package/docs/functions/index.stripSuffix.html +2 -2
  84. package/docs/functions/index.throttle.html +2 -2
  85. package/docs/functions/index.toggle.html +2 -2
  86. package/docs/functions/index.trim.html +2 -2
  87. package/docs/functions/index.trimEnd.html +2 -2
  88. package/docs/functions/index.trimStart.html +2 -2
  89. package/docs/functions/index.truthy.html +2 -2
  90. package/docs/functions/index.unique.html +2 -2
  91. package/docs/functions/index.unserializeFromBuffer.html +8 -0
  92. package/docs/functions/index.wait.html +2 -2
  93. package/docs/functions/index.waitFor.html +2 -2
  94. package/docs/functions/index.waitSync.html +2 -2
  95. package/docs/index.html +2 -2
  96. package/docs/interfaces/index.ComparePropsOptions.html +3 -3
  97. package/docs/interfaces/index.GetMultipleSource.html +2 -2
  98. package/docs/interfaces/index.GetSource.html +2 -2
  99. package/docs/interfaces/index.IsNumericStringOptions.html +2 -2
  100. package/docs/interfaces/index.OccurencesOptions.html +2 -2
  101. package/docs/interfaces/index.SetImmutableSource.html +2 -2
  102. package/docs/interfaces/index.SetSource.html +2 -2
  103. package/docs/interfaces/index.ThrottleOptions.html +3 -3
  104. package/docs/interfaces/index.ThrottledFunctionExtras.html +3 -3
  105. package/docs/modules/index.html +6 -2
  106. package/docs/modules.html +2 -2
  107. package/docs/types/index.CustomDeserializers.html +1 -1
  108. package/docs/types/index.CustomSerializers.html +1 -1
  109. package/docs/types/index.Later.html +2 -2
  110. package/docs/types/index.MapValuesFn.html +2 -2
  111. package/docs/types/index.MatchCallback.html +1 -1
  112. package/docs/types/index.MergeTwo.html +2 -2
  113. package/docs/types/index.SeqEarlyBreaker.html +2 -2
  114. package/docs/types/index.SeqFn.html +2 -2
  115. package/docs/types/index.SeqFunctions.html +2 -2
  116. package/docs/types/index.SetImmutablePath.html +2 -2
  117. package/docs/types/index.ThrottledFunction.html +1 -1
  118. package/docs/variables/index.mapValuesUNSET.html +2 -2
  119. package/docs/variables/index.mergeUNSET.html +2 -2
  120. package/esm/deserialize.d.ts +1 -1
  121. package/esm/deserialize.d.ts.map +1 -1
  122. package/esm/deserialize.js +1 -1
  123. package/esm/deserialize.js.map +1 -1
  124. package/esm/index.d.ts +2 -0
  125. package/esm/index.d.ts.map +1 -1
  126. package/esm/index.js +2 -0
  127. package/esm/index.js.map +1 -1
  128. package/esm/serialize.d.ts.map +1 -1
  129. package/esm/serialize.js.map +1 -1
  130. package/esm/serializeToBuffer/const.d.ts +10 -0
  131. package/esm/serializeToBuffer/const.d.ts.map +1 -0
  132. package/esm/serializeToBuffer/const.js +10 -0
  133. package/esm/serializeToBuffer/const.js.map +1 -0
  134. package/esm/serializeToBuffer/serializeToBuffer.d.ts +5 -0
  135. package/esm/serializeToBuffer/serializeToBuffer.d.ts.map +1 -0
  136. package/esm/serializeToBuffer/serializeToBuffer.js +36 -0
  137. package/esm/serializeToBuffer/serializeToBuffer.js.map +1 -0
  138. package/esm/serializeToBuffer/unserializeFromBuffer.d.ts +5 -0
  139. package/esm/serializeToBuffer/unserializeFromBuffer.d.ts.map +1 -0
  140. package/esm/serializeToBuffer/unserializeFromBuffer.js +48 -0
  141. package/esm/serializeToBuffer/unserializeFromBuffer.js.map +1 -0
  142. package/package.json +1 -1
  143. package/src/deserialize.ts +1 -1
  144. package/src/index.ts +2 -0
  145. package/src/serialize.ts +1 -2
  146. package/src/serializeToBuffer/const.ts +16 -0
  147. package/src/serializeToBuffer/serialization.spec.ts +61 -0
  148. package/src/serializeToBuffer/serializeToBuffer.spec.ts +43 -0
  149. package/src/serializeToBuffer/serializeToBuffer.ts +90 -0
  150. package/src/serializeToBuffer/unserializeFromBuffer.spec.ts +63 -0
  151. package/src/serializeToBuffer/unserializeFromBuffer.ts +75 -0
@@ -35,5 +35,5 @@ const deserialize = (serializedString, customDeserializers) => {
35
35
  const parsed = JSON.parse(serializedString, replacer);
36
36
  return hasUndefined ? replaceDeep(parsed, UNDEFINED, undefined) : parsed;
37
37
  };
38
- export { deserialize };
38
+ export { deserialize, deserialize as unserialize };
39
39
  //# sourceMappingURL=deserialize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deserialize.js","sourceRoot":"","sources":["../src/deserialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAsBtC,MAAM,WAAW,GAAG,CAAI,gBAAwB,EAAE,mBAAyC,EAAK,EAAE;IAC9F,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,KAAc,EAAE,EAAE;QAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEzB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEzB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEzB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,YAAY,GAAG,IAAI,CAAC;gBACpB,OAAO,SAAS,CAAC;YACrB,CAAC;YACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEzB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YAClC,CAAC;YAED,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAC5C,IAAI,mBAAmB,IAAI,IAAI,IAAI,mBAAmB,EAAE,CAAC;gBACrD,OAAO,mBAAmB,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAM,CAAC;IAG3D,OAAO,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7E,CAAC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"deserialize.js","sourceRoot":"","sources":["../src/deserialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAsBtC,MAAM,WAAW,GAAG,CAAI,gBAAwB,EAAE,mBAAyC,EAAK,EAAE;IAC9F,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,KAAc,EAAE,EAAE;QAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEzB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEzB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEzB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,YAAY,GAAG,IAAI,CAAC;gBACpB,OAAO,SAAS,CAAC;YACrB,CAAC;YACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAEzB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YAClC,CAAC;YAED,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAC5C,IAAI,mBAAmB,IAAI,IAAI,IAAI,mBAAmB,EAAE,CAAC;gBACrD,OAAO,mBAAmB,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAM,CAAC;IAG3D,OAAO,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7E,CAAC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,WAAW,IAAI,WAAW,EAAE,CAAC"}
package/esm/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ export * from "./serializeToBuffer/serializeToBuffer.js";
2
+ export * from "./serializeToBuffer/unserializeFromBuffer.js";
1
3
  export * from "./ensurePrefix.js";
2
4
  export * from "./ensureSuffix.js";
3
5
  export * from "./cap.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
package/esm/index.js CHANGED
@@ -1,3 +1,5 @@
1
+ export * from "./serializeToBuffer/serializeToBuffer.js";
2
+ export * from "./serializeToBuffer/unserializeFromBuffer.js";
1
3
  export * from "./ensurePrefix.js";
2
4
  export * from "./ensureSuffix.js";
3
5
  export * from "./cap.js";
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"AAKA,KAAK,iBAAiB,GAAG;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,KAAK,CAAC;CACb,CAAC;AAEF,KAAK,OAAO,GAAG;IACX,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAoBF,QAAA,MAAM,SAAS,GAAI,MAAM,OAAO,EAAE,oBAAoB,iBAAiB,EAAE,UAAU,OAAO,WA4GzF,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"AAKA,KAAK,iBAAiB,GAAG;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,CAAC,CAAC,EAAE,KAAK,CAAC;CACb,CAAC;AAEF,KAAK,OAAO,GAAG;IACX,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAmBF,QAAA,MAAM,SAAS,GAAI,MAAM,OAAO,EAAE,oBAAoB,iBAAiB,EAAE,UAAU,OAAO,WA4GzF,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ declare const BINARY_MARK_BIN = "t";
2
+ declare const BINARY_MARK_STRING = "f";
3
+ declare const BINARY_MARK_JSON = "j";
4
+ declare const BINARY_MARK_MAP: {
5
+ t: string;
6
+ f: string;
7
+ j: string;
8
+ };
9
+ export { BINARY_MARK_BIN, BINARY_MARK_STRING, BINARY_MARK_JSON, BINARY_MARK_MAP, };
10
+ //# sourceMappingURL=const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/serializeToBuffer/const.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,eAAe,MAAM,CAAC;AAC5B,QAAA,MAAM,kBAAkB,MAAM,CAAC;AAC/B,QAAA,MAAM,gBAAgB,MAAM,CAAC;AAE7B,QAAA,MAAM,eAAe;;;;CAIpB,CAAC;AAEF,OAAO,EACH,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAClB,CAAC"}
@@ -0,0 +1,10 @@
1
+ const BINARY_MARK_BIN = "t";
2
+ const BINARY_MARK_STRING = "f";
3
+ const BINARY_MARK_JSON = "j";
4
+ const BINARY_MARK_MAP = {
5
+ [BINARY_MARK_BIN]: "binary",
6
+ [BINARY_MARK_STRING]: "string",
7
+ [BINARY_MARK_JSON]: "json",
8
+ };
9
+ export { BINARY_MARK_BIN, BINARY_MARK_STRING, BINARY_MARK_JSON, BINARY_MARK_MAP, };
10
+ //# sourceMappingURL=const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/serializeToBuffer/const.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,MAAM,eAAe,GAAG;IACpB,CAAC,eAAe,CAAC,EAAE,QAAQ;IAC3B,CAAC,kBAAkB,CAAC,EAAE,QAAQ;IAC9B,CAAC,gBAAgB,CAAC,EAAE,MAAM;CAC7B,CAAC;AAEF,OAAO,EACH,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAClB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { serialize } from "../serialize.js";
2
+ type SerializeArgs = Parameters<typeof serialize> extends [any, ...infer Rest] ? Rest : never;
3
+ declare const serializeToBuffer: (BufferImplementation: typeof Buffer, serializeArgs: SerializeArgs, ...args: unknown[]) => Buffer;
4
+ export { serializeToBuffer, };
5
+ //# sourceMappingURL=serializeToBuffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializeToBuffer.d.ts","sourceRoot":"","sources":["../../src/serializeToBuffer/serializeToBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAiC9F,QAAA,MAAM,iBAAiB,GACnB,sBAAsB,OAAO,MAAM,EAAE,eAAe,aAAa,EAAE,GAAG,MAAM,OAAO,EAAE,KACtF,MA8CF,CAAC;AAEF,OAAO,EACH,iBAAiB,GACpB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { serialize } from "../serialize.js";
2
+ import { BINARY_MARK_BIN, BINARY_MARK_JSON, BINARY_MARK_STRING } from "./const.js";
3
+ const serializeToBuffer = (BufferImplementation, serializeArgs, ...args) => {
4
+ const separator = BufferImplementation.from([0x0]);
5
+ const convertedArgs = args.map((arg) => {
6
+ if (arg instanceof BufferImplementation) {
7
+ return {
8
+ mark: BINARY_MARK_BIN,
9
+ data: arg,
10
+ };
11
+ }
12
+ if (typeof arg === "string") {
13
+ return {
14
+ mark: BINARY_MARK_STRING,
15
+ data: arg,
16
+ };
17
+ }
18
+ return {
19
+ mark: BINARY_MARK_JSON,
20
+ data: serialize(arg, ...serializeArgs),
21
+ };
22
+ });
23
+ const dataToSend = [];
24
+ let totalLength = 0;
25
+ convertedArgs.forEach((arg) => {
26
+ const len = String(arg.data.length) + arg.mark;
27
+ dataToSend.push(BufferImplementation.from(len, "utf-8"));
28
+ dataToSend.push(separator);
29
+ dataToSend.push(arg.mark === BINARY_MARK_BIN ? arg.data : BufferImplementation.from(arg.data, "utf-8"));
30
+ dataToSend.push(separator);
31
+ totalLength += len.length + separator.length + arg.data.length + separator.length;
32
+ });
33
+ return BufferImplementation.concat(dataToSend, totalLength);
34
+ };
35
+ export { serializeToBuffer, };
36
+ //# sourceMappingURL=serializeToBuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializeToBuffer.js","sourceRoot":"","sources":["../../src/serializeToBuffer/serializeToBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAmCnF,MAAM,iBAAiB,GAAG,CACtB,oBAAmC,EAAE,aAA4B,EAAE,GAAG,IAAe,EAC/E,EAAE;IACR,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAYnD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACnC,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;YACtC,OAAO;gBACH,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,GAAG;aACO,CAAC;QACzB,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO;gBACH,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,GAAG;aACO,CAAC;QACzB,CAAC;QACD,OAAO;YACH,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;SACtB,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;QAE/C,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE3B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACxG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE3B,WAAW,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF,OAAO,EACH,iBAAiB,GACpB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { deserialize } from "../deserialize.js";
2
+ type DeserializeArgs = Parameters<typeof deserialize> extends [any, ...infer Rest] ? Rest : never;
3
+ declare const unserializeFromBuffer: <RT extends any[] = unknown[]>(BufferImplementation: typeof Buffer, deserializeArgs: DeserializeArgs, rawData: Buffer | Uint8Array) => RT;
4
+ export { unserializeFromBuffer, unserializeFromBuffer as deserializeFromBuffer };
5
+ //# sourceMappingURL=unserializeFromBuffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unserializeFromBuffer.d.ts","sourceRoot":"","sources":["../../src/serializeToBuffer/unserializeFromBuffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAShD,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AAWlG,QAAA,MAAM,qBAAqB,GAAI,EAAE,SAAS,GAAG,EAAE,GAAG,OAAO,EAAE,EACvD,sBAAsB,OAAO,MAAM,EAAE,iBAAiB,eAAe,EAAE,SAAS,MAAM,GAAG,UAAU,KACpG,EAkDF,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,IAAI,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { deserialize } from "../deserialize.js";
2
+ import { BINARY_MARK_BIN, BINARY_MARK_MAP, BINARY_MARK_STRING } from "./const.js";
3
+ const MAX_DATA_PARTS = 4;
4
+ const NOT_FOUND = -1;
5
+ const LAST_CHAR = -1;
6
+ const unserializeFromBuffer = (BufferImplementation, deserializeArgs, rawData) => {
7
+ const intData = rawData instanceof Uint8Array ? rawData : new Uint8Array(rawData);
8
+ if (intData.length === 0) {
9
+ throw new Error("No data to unserialize");
10
+ }
11
+ let startPoint = 0;
12
+ const result = [];
13
+ let i = 0;
14
+ while (i++ < MAX_DATA_PARTS) {
15
+ const dataSplitPoint = intData.indexOf(0, startPoint);
16
+ if (dataSplitPoint === NOT_FOUND) {
17
+ break;
18
+ }
19
+ const lengthBytes = BufferImplementation.from(intData.slice(startPoint, dataSplitPoint)).toString("utf8");
20
+ const binaryMark = lengthBytes.slice(LAST_CHAR);
21
+ if (!Object.keys(BINARY_MARK_MAP).includes(binaryMark)) {
22
+ throw new Error(`Invalid binary mark: ${binaryMark}`);
23
+ }
24
+ const len = Number(lengthBytes.slice(0, lengthBytes.length - 1));
25
+ const dataStringFrom = dataSplitPoint + 1;
26
+ const dataStringTo = dataStringFrom + len;
27
+ const dataBytes = intData.slice(dataStringFrom, dataStringTo);
28
+ if (binaryMark === BINARY_MARK_BIN) {
29
+ result.push(dataBytes);
30
+ }
31
+ else if (binaryMark === BINARY_MARK_STRING) {
32
+ const stringData = BufferImplementation.from(dataBytes).toString("utf8");
33
+ result.push(stringData);
34
+ }
35
+ else {
36
+ const stringData = BufferImplementation.from(dataBytes).toString("utf8");
37
+ const jsonData = deserialize(stringData, ...deserializeArgs);
38
+ result.push(jsonData);
39
+ }
40
+ startPoint = dataStringTo + 1;
41
+ }
42
+ if (result.length === 0) {
43
+ throw new Error("No data found (no split points)");
44
+ }
45
+ return result;
46
+ };
47
+ export { unserializeFromBuffer, unserializeFromBuffer as deserializeFromBuffer };
48
+ //# sourceMappingURL=unserializeFromBuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unserializeFromBuffer.js","sourceRoot":"","sources":["../../src/serializeToBuffer/unserializeFromBuffer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ezez/utils",
3
- "version": "4.4.0",
3
+ "version": "4.5.0",
4
4
  "repository": "https://github.com/dzek69/bottom-line.git",
5
5
  "author": "Jacek Nowacki @dzek69 <git-public@dzek.eu>",
6
6
  "license": "MIT",
@@ -69,6 +69,6 @@ const deserialize = <T>(serializedString: string, customDeserializers?: CustomDe
69
69
  return hasUndefined ? replaceDeep(parsed, UNDEFINED, undefined) : parsed;
70
70
  };
71
71
 
72
- export { deserialize };
72
+ export { deserialize, deserialize as unserialize };
73
73
 
74
74
  export type { CustomDeserializers };
package/src/index.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  /* eslint-disable import/max-dependencies */
2
+ export * from "./serializeToBuffer/serializeToBuffer.js";
3
+ export * from "./serializeToBuffer/unserializeFromBuffer.js";
2
4
  export * from "./ensurePrefix.js";
3
5
  export * from "./ensureSuffix.js";
4
6
  export * from "./cap.js";
package/src/serialize.ts CHANGED
@@ -23,8 +23,7 @@ type Options = {
23
23
  *
24
24
  * It also supports custom serializers, which can be used to serialize custom data types. Each value has a prefix which
25
25
  * specifies the type of the value, custom serializers is a map of these prefixes to functions which can serialize the
26
- * value into a string. IMPORTANT: Because this is using JSON.serialize under the hood if a value to serialize includes
27
- * `toJSON` it won't trigger custom serializer but will be serialized as string. `Date` class defines `toJSON` method!
26
+ * value into a string.
28
27
  *
29
28
  * The extra aim of this function is to produce the same output for "the same" data, regardless of the order of the keys
30
29
  * (which is not guaranteed by JS spec, but in practice it is guaranteed by current implementations of all JS engines),
@@ -0,0 +1,16 @@
1
+ const BINARY_MARK_BIN = "t";
2
+ const BINARY_MARK_STRING = "f";
3
+ const BINARY_MARK_JSON = "j";
4
+
5
+ const BINARY_MARK_MAP = {
6
+ [BINARY_MARK_BIN]: "binary",
7
+ [BINARY_MARK_STRING]: "string",
8
+ [BINARY_MARK_JSON]: "json",
9
+ };
10
+
11
+ export {
12
+ BINARY_MARK_BIN,
13
+ BINARY_MARK_STRING,
14
+ BINARY_MARK_JSON,
15
+ BINARY_MARK_MAP,
16
+ };
@@ -0,0 +1,61 @@
1
+ import must from "must"; // eslint-disable-line @typescript-eslint/no-shadow
2
+
3
+ import { unserializeFromBuffer } from "./unserializeFromBuffer";
4
+ import { serializeToBuffer } from "./serializeToBuffer";
5
+
6
+ const serialize = serializeToBuffer.bind(null, Buffer, []);
7
+ const unserialize = unserializeFromBuffer.bind(null, Buffer, []);
8
+
9
+ describe("serialization", () => {
10
+ it("serializes basic string", async () => {
11
+ const data = ["TEST"];
12
+ must(unserialize(serialize(...data))).eql(data);
13
+ });
14
+
15
+ it("serializes json", async () => {
16
+ const data = [
17
+ { a: 1, b: 2 },
18
+ ];
19
+ must(unserialize(serialize(...data))).eql(data);
20
+ });
21
+
22
+ it("serializes multiple data", async () => {
23
+ const data = [
24
+ "hey",
25
+ 3,
26
+ { a: 1 },
27
+ Buffer.from("test"),
28
+ ];
29
+ const result = unserialize(serialize(...data));
30
+ const buffer = result.pop() as Buffer;
31
+ must(result).eql(data.slice(0, 3));
32
+ must(buffer).be.instanceof(Buffer);
33
+ must(buffer.toString()).equal("test");
34
+ });
35
+
36
+ it("serializes undefined", async () => {
37
+ const data = [undefined];
38
+ const result = unserialize(serialize(...data));
39
+ must(result).have.length(1);
40
+ must(result[0]).be.undefined();
41
+ });
42
+
43
+ it("serializes JSON-looking string", async () => {
44
+ const data = [`"TEST"`];
45
+ must(unserialize(serialize(...data))).eql(data);
46
+ });
47
+
48
+ it("serializes huge object", async () => {
49
+ const data = [{
50
+ a: 1,
51
+ b: false,
52
+ c: true,
53
+ d: "test",
54
+ e: null,
55
+ f: undefined,
56
+ g: [1, 2, 3],
57
+ h: { a: 1, b: [2] },
58
+ }];
59
+ must(unserialize(serialize(...data))).eql(data);
60
+ });
61
+ });
@@ -0,0 +1,43 @@
1
+ import must from "must"; // eslint-disable-line @typescript-eslint/no-shadow
2
+
3
+ import { serializeToBuffer } from "./serializeToBuffer";
4
+
5
+ const serialize = serializeToBuffer.bind(null, Buffer, []);
6
+
7
+ describe("serialize", () => {
8
+ it("serializes basic string", async () => {
9
+ // len 4, type string, data "test", separator
10
+ must(serialize("test").toString("hex")).equal("3466007465737400");
11
+ });
12
+
13
+ it("serializes multiple strings", async () => {
14
+ // len 4, type string, data "test", separator
15
+ must(serialize("test", "test").toString("hex")).equal("34660074657374003466007465737400");
16
+ });
17
+
18
+ it("serializes basic buffer", async () => {
19
+ // len 4, type bin, data "test", separator
20
+ must(serialize(Buffer.from("test")).toString("hex")).equal("3474007465737400");
21
+ });
22
+
23
+ it("serializes both buffer and string", async () => {
24
+ // len 4, type bin, data "test", separator, len 4, bin false, data "test", separator
25
+ must(serialize(Buffer.from("test"), "test").toString("hex")).equal("34740074657374003466007465737400");
26
+ });
27
+
28
+ it("serializes JSON-looking string", async () => {
29
+ // len 6, type string, data "test", separator
30
+ must(serialize(`"test"`).toString("hex")).equal("36660022746573742200");
31
+ });
32
+
33
+ it("serializes JSON-serialized string", async () => {
34
+ // len 8, type string, data "test", separator
35
+ must(serialize(`"s:test"`).toString("hex")).equal("38660022733a746573742200");
36
+ });
37
+
38
+ it("serializes number", async () => {
39
+ // len 5, type json, data "n:1", separator
40
+ must(serialize(1).toString("hex")).equal("356a00226e3a312200");
41
+ });
42
+ // TODO more tests
43
+ });
@@ -0,0 +1,90 @@
1
+ import { serialize } from "../serialize.js";
2
+
3
+ import { BINARY_MARK_BIN, BINARY_MARK_JSON, BINARY_MARK_STRING } from "./const.js";
4
+
5
+ type SerializeArgs = Parameters<typeof serialize> extends [any, ...infer Rest] ? Rest : never; // eslint-disable-line @typescript-eslint/no-explicit-any
6
+
7
+ /**
8
+ * Serialize any data to a Buffer, useful when working with web sockets or other binary protocols.
9
+ * Make sure to understand how {@link serialize} works before using this function.
10
+ *
11
+ * To make this function work in browsers it accepts a BufferImplementation parameter.
12
+ * To make the serialization customizable it accepts a serializeArgs parameter.
13
+ * It's therefore recommended to first prepare the function with bind, like:
14
+ * @example
15
+ * ```ts
16
+ * import { serializeToBuffer as serializeRaw } from "@ezez/utils";
17
+ * import { Buffer } from "buffer/"; // skip import in Node.js
18
+ *
19
+ * // prepare the function:
20
+ * const serializeToBuffer = serializeRaw.bind(null, Buffer, []); // array is customization params for serialize
21
+ *
22
+ * const serialized = serializeToBuffer("test", 1, { test: "test" });
23
+ * ```
24
+ *
25
+ * Otherwise pass the params each time:
26
+ * ```typescript
27
+ * import { serializeToBuffer as serializeRaw } from "@ezez/utils";
28
+ * const serialized = serializeToBuffer(Buffer, [], "test", 1, { test: "test" });
29
+ * const otherSerialized = serializeToBuffer(Buffer, [], any, other, data);
30
+ * ```
31
+ * @param BufferImplementation - Buffer implementation, in browsers use `buffer` npm package
32
+ * and import it from `buffer/`, in Node.js simply pass `Buffer`.
33
+ * @param serializeArgs - [customSerializers, options] - optional arguments if you need to serialize custom data types,
34
+ * see: {@link serialize}
35
+ * @param args - any data to serialize, can be a Buffer, string or any other data type
36
+ * @returns Buffer - serialized data
37
+ */
38
+ const serializeToBuffer = (
39
+ BufferImplementation: typeof Buffer, serializeArgs: SerializeArgs, ...args: unknown[]
40
+ ): Buffer => {
41
+ const separator = BufferImplementation.from([0x0]);
42
+ type DataType = {
43
+ mark: typeof BINARY_MARK_BIN;
44
+ data: Buffer;
45
+ } | {
46
+ mark: typeof BINARY_MARK_STRING;
47
+ data: string;
48
+ } | {
49
+ mark: typeof BINARY_MARK_JSON;
50
+ data: unknown;
51
+ };
52
+
53
+ const convertedArgs = args.map((arg) => {
54
+ if (arg instanceof BufferImplementation) {
55
+ return {
56
+ mark: BINARY_MARK_BIN,
57
+ data: arg,
58
+ } satisfies DataType;
59
+ }
60
+ if (typeof arg === "string") {
61
+ return {
62
+ mark: BINARY_MARK_STRING,
63
+ data: arg,
64
+ } satisfies DataType;
65
+ }
66
+ return {
67
+ mark: BINARY_MARK_JSON,
68
+ data: serialize(arg, ...serializeArgs),
69
+ } satisfies DataType;
70
+ });
71
+ const dataToSend: Buffer[] = [];
72
+ let totalLength = 0;
73
+ convertedArgs.forEach((arg) => {
74
+ const len = String(arg.data.length) + arg.mark;
75
+
76
+ dataToSend.push(BufferImplementation.from(len, "utf-8"));
77
+ dataToSend.push(separator);
78
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
79
+ dataToSend.push(arg.mark === BINARY_MARK_BIN ? arg.data : BufferImplementation.from(arg.data, "utf-8"));
80
+ dataToSend.push(separator);
81
+
82
+ totalLength += len.length + separator.length + arg.data.length + separator.length;
83
+ });
84
+
85
+ return BufferImplementation.concat(dataToSend, totalLength);
86
+ };
87
+
88
+ export {
89
+ serializeToBuffer,
90
+ };
@@ -0,0 +1,63 @@
1
+ import must from "must"; // eslint-disable-line @typescript-eslint/no-shadow
2
+
3
+ import { unserializeFromBuffer } from "./unserializeFromBuffer";
4
+
5
+ const unserialize = unserializeFromBuffer.bind(null, Buffer, []);
6
+
7
+ describe("unserialize", () => {
8
+ it("unserializes basic string", async () => {
9
+ must(unserialize(Buffer.from([0x34, 0x66, 0x00, 0x74, 0x65, 0x73, 0x74, 0x00]))).eql(["test"]);
10
+ });
11
+
12
+ it("unserializes multiple strings", async () => {
13
+ must(unserialize(Buffer.from([
14
+ 0x34, 0x66, 0x00, 0x74, 0x65, 0x73, 0x74, 0x00,
15
+ 0x34, 0x66, 0x00, 0x74, 0x65, 0x73, 0x74, 0x00,
16
+ ]))).eql(["test", "test"]);
17
+ });
18
+
19
+ it("unserializes buffer", async () => {
20
+ const result = unserialize(Buffer.from([0x34, 0x74, 0x00, 0x74, 0x65, 0x73, 0x74, 0x00]));
21
+ must(result.length).equal(1);
22
+ must(result[0]).instanceof(Buffer);
23
+ must((result[0] as Buffer).toString()).equal("test");
24
+ });
25
+
26
+ it("unserializes both buffer and string", async () => {
27
+ const result = unserialize(Buffer.from([
28
+ 0x34, 0x74, 0x00, 0x74, 0x65, 0x73, 0x74, 0x00,
29
+ 0x34, 0x66, 0x00, 0x74, 0x65, 0x73, 0x74, 0x00,
30
+ ]));
31
+
32
+ must(result.length).equal(2);
33
+
34
+ must(result[0]).instanceof(Buffer);
35
+ must((result[0] as Buffer).toString()).equal("test");
36
+
37
+ must(result[1]).equal("test");
38
+ });
39
+
40
+ it("unserializes JSON-looking string as string", async () => {
41
+ must(unserialize(
42
+ Buffer.from([0x36, 0x66, 0x00, 0x22, 0x74, 0x65, 0x73, 0x74, 0x22, 0x00]),
43
+ )).eql([`"test"`]);
44
+ });
45
+
46
+ it("unserializes JSON-serialized string as string", async () => {
47
+ must(unserialize(Buffer.from([
48
+ 0x38, 0x66, 0x00, 0x22, 0x73, 0x3a, 0x74, 0x65, 0x73, 0x74, 0x22, 0x00,
49
+ ]))).eql([`"s:test"`]);
50
+ });
51
+
52
+ it("unserializes JSON-serialized json as string", async () => {
53
+ must(unserialize(Buffer.from([
54
+ 0x38, 0x6a, 0x00, 0x22, 0x73, 0x3a, 0x74, 0x65, 0x73, 0x74, 0x22, 0x00,
55
+ ]))).eql(["test"]);
56
+ });
57
+
58
+ it("unserializes number as number", async () => {
59
+ must(unserialize(Buffer.from([
60
+ 0x35, 0x6a, 0x00, 0x22, 0x6e, 0x3a, 0x31, 0x22, 0x00,
61
+ ]))).eql([1]);
62
+ });
63
+ });
@@ -0,0 +1,75 @@
1
+ import { deserialize } from "../deserialize.js";
2
+
3
+ import { BINARY_MARK_BIN, BINARY_MARK_MAP, BINARY_MARK_STRING } from "./const.js";
4
+
5
+ const MAX_DATA_PARTS = 4;
6
+
7
+ const NOT_FOUND = -1;
8
+ const LAST_CHAR = -1;
9
+
10
+ type DeserializeArgs = Parameters<typeof deserialize> extends [any, ...infer Rest] ? Rest : never; // eslint-disable-line @typescript-eslint/no-explicit-any
11
+
12
+ /**
13
+ * Unserialize data from a Buffer serialized with {@link serializeToBuffer}, useful when working with web sockets or
14
+ * other binary protocols. Make sure to understand how {@link deserialize} works before using this function.
15
+ * @param BufferImplementation - Buffer implementation, in browsers use `buffer` npm package
16
+ * and import it from `buffer/`, in Node.js simply pass `Buffer`.
17
+ * @param deserializeArgs - [customDeserializers] - optional arguments if you need to unserialize custom data types,
18
+ * @param rawData - Buffer to unserialize
19
+ * @returns unserialized data
20
+ */
21
+ const unserializeFromBuffer = <RT extends any[] = unknown[]>( // eslint-disable-line @typescript-eslint/no-explicit-any,max-statements
22
+ BufferImplementation: typeof Buffer, deserializeArgs: DeserializeArgs, rawData: Buffer | Uint8Array,
23
+ ): RT => {
24
+ const intData: Uint8Array = rawData instanceof Uint8Array ? rawData : new Uint8Array(rawData);
25
+
26
+ if (intData.length === 0) {
27
+ throw new Error("No data to unserialize");
28
+ }
29
+
30
+ let startPoint = 0;
31
+ const result = [];
32
+
33
+ let i = 0;
34
+ while (i++ < MAX_DATA_PARTS) {
35
+ const dataSplitPoint = intData.indexOf(0, startPoint); // find null
36
+ if (dataSplitPoint === NOT_FOUND) { // no null found = no data
37
+ break;
38
+ }
39
+
40
+ const lengthBytes = BufferImplementation.from(intData.slice(startPoint, dataSplitPoint)).toString("utf8");
41
+ const binaryMark = lengthBytes.slice(LAST_CHAR) as keyof typeof BINARY_MARK_MAP;
42
+ if (!Object.keys(BINARY_MARK_MAP).includes(binaryMark)) {
43
+ throw new Error(`Invalid binary mark: ${binaryMark}`);
44
+ }
45
+
46
+ const len = Number(lengthBytes.slice(0, lengthBytes.length - 1));
47
+
48
+ const dataStringFrom = dataSplitPoint + 1;
49
+ const dataStringTo = dataStringFrom + len;
50
+ const dataBytes = intData.slice(dataStringFrom, dataStringTo);
51
+
52
+ if (binaryMark === BINARY_MARK_BIN) {
53
+ result.push(dataBytes);
54
+ }
55
+ else if (binaryMark === BINARY_MARK_STRING) {
56
+ const stringData = BufferImplementation.from(dataBytes).toString("utf8");
57
+ result.push(stringData);
58
+ }
59
+ else {
60
+ const stringData = BufferImplementation.from(dataBytes).toString("utf8");
61
+ const jsonData = deserialize(stringData, ...deserializeArgs);
62
+ result.push(jsonData);
63
+ }
64
+
65
+ startPoint = dataStringTo + 1; // skip separating null
66
+ }
67
+
68
+ if (result.length === 0) {
69
+ throw new Error("No data found (no split points)");
70
+ }
71
+
72
+ return result as RT;
73
+ };
74
+
75
+ export { unserializeFromBuffer, unserializeFromBuffer as deserializeFromBuffer };