@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.
- package/CHANGELOG.md +8 -0
- package/dist/deserialize.d.ts +1 -1
- package/dist/deserialize.d.ts.map +1 -1
- package/dist/deserialize.js +2 -1
- package/dist/deserialize.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/serialize.d.ts.map +1 -1
- package/dist/serialize.js.map +1 -1
- package/dist/serializeToBuffer/const.d.ts +10 -0
- package/dist/serializeToBuffer/const.d.ts.map +1 -0
- package/dist/serializeToBuffer/const.js +16 -0
- package/dist/serializeToBuffer/const.js.map +1 -0
- package/dist/serializeToBuffer/serializeToBuffer.d.ts +5 -0
- package/dist/serializeToBuffer/serializeToBuffer.d.ts.map +1 -0
- package/dist/serializeToBuffer/serializeToBuffer.js +39 -0
- package/dist/serializeToBuffer/serializeToBuffer.js.map +1 -0
- package/dist/serializeToBuffer/unserializeFromBuffer.d.ts +5 -0
- package/dist/serializeToBuffer/unserializeFromBuffer.d.ts.map +1 -0
- package/dist/serializeToBuffer/unserializeFromBuffer.js +52 -0
- package/dist/serializeToBuffer/unserializeFromBuffer.js.map +1 -0
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/documents/CHANGELOG.html +68 -60
- package/docs/functions/index.cap.html +2 -2
- package/docs/functions/index.capitalize.html +2 -2
- package/docs/functions/index.coalesce.html +2 -2
- package/docs/functions/index.compareArrays.html +2 -2
- package/docs/functions/index.compareProps.html +2 -2
- package/docs/functions/index.deserialize.html +2 -2
- package/docs/functions/index.ensureArray.html +2 -2
- package/docs/functions/index.ensureDate.html +2 -2
- package/docs/functions/index.ensureError.html +2 -2
- package/docs/functions/index.ensurePrefix.html +2 -2
- package/docs/functions/index.ensureSuffix.html +2 -2
- package/docs/functions/index.ensureTimestamp.html +2 -2
- package/docs/functions/index.escapeRegExp.html +2 -2
- package/docs/functions/index.formatDate.html +2 -2
- package/docs/functions/index.get.html +2 -2
- package/docs/functions/index.getMultiple.html +2 -2
- package/docs/functions/index.insertSeparator.html +2 -2
- package/docs/functions/index.isEmpty.html +2 -2
- package/docs/functions/index.isNumericString.html +2 -2
- package/docs/functions/index.isPlainObject.html +2 -2
- package/docs/functions/index.last.html +2 -2
- package/docs/functions/index.later-1.html +2 -2
- package/docs/functions/index.mapAsync.html +2 -2
- package/docs/functions/index.mapValues.html +2 -2
- package/docs/functions/index.match.html +2 -2
- package/docs/functions/index.memoize.html +2 -2
- package/docs/functions/index.merge.html +2 -2
- package/docs/functions/index.mostFrequent.html +2 -2
- package/docs/functions/index.noop.html +2 -2
- package/docs/functions/index.occurrences.html +2 -2
- package/docs/functions/index.omit.html +2 -2
- package/docs/functions/index.pick.html +2 -2
- package/docs/functions/index.pull.html +2 -2
- package/docs/functions/index.race.html +2 -2
- package/docs/functions/index.remove.html +2 -2
- package/docs/functions/index.removeCommonProperties.html +2 -2
- package/docs/functions/index.replace.html +2 -2
- package/docs/functions/index.replaceDeep.html +2 -2
- package/docs/functions/index.rethrow.html +2 -2
- package/docs/functions/index.retry.html +2 -2
- package/docs/functions/index.round.html +2 -2
- package/docs/functions/index.safe.html +2 -2
- package/docs/functions/index.sample.html +2 -2
- package/docs/functions/index.samples.html +2 -2
- package/docs/functions/index.scale.html +2 -2
- package/docs/functions/index.seq.html +2 -2
- package/docs/functions/index.seqEarlyBreak.html +2 -2
- package/docs/functions/index.serialize.html +3 -4
- package/docs/functions/index.serializeToBuffer.html +19 -0
- package/docs/functions/index.set.html +2 -2
- package/docs/functions/index.setImmutable.html +2 -2
- package/docs/functions/index.shuffle.html +2 -2
- package/docs/functions/index.sortBy.html +2 -2
- package/docs/functions/index.sortByMultiple.html +2 -2
- package/docs/functions/index.sortProps.html +2 -2
- package/docs/functions/index.stripPrefix.html +2 -2
- package/docs/functions/index.stripSuffix.html +2 -2
- package/docs/functions/index.throttle.html +2 -2
- package/docs/functions/index.toggle.html +2 -2
- package/docs/functions/index.trim.html +2 -2
- package/docs/functions/index.trimEnd.html +2 -2
- package/docs/functions/index.trimStart.html +2 -2
- package/docs/functions/index.truthy.html +2 -2
- package/docs/functions/index.unique.html +2 -2
- package/docs/functions/index.unserializeFromBuffer.html +8 -0
- package/docs/functions/index.wait.html +2 -2
- package/docs/functions/index.waitFor.html +2 -2
- package/docs/functions/index.waitSync.html +2 -2
- package/docs/index.html +2 -2
- package/docs/interfaces/index.ComparePropsOptions.html +3 -3
- package/docs/interfaces/index.GetMultipleSource.html +2 -2
- package/docs/interfaces/index.GetSource.html +2 -2
- package/docs/interfaces/index.IsNumericStringOptions.html +2 -2
- package/docs/interfaces/index.OccurencesOptions.html +2 -2
- package/docs/interfaces/index.SetImmutableSource.html +2 -2
- package/docs/interfaces/index.SetSource.html +2 -2
- package/docs/interfaces/index.ThrottleOptions.html +3 -3
- package/docs/interfaces/index.ThrottledFunctionExtras.html +3 -3
- package/docs/modules/index.html +6 -2
- package/docs/modules.html +2 -2
- package/docs/types/index.CustomDeserializers.html +1 -1
- package/docs/types/index.CustomSerializers.html +1 -1
- package/docs/types/index.Later.html +2 -2
- package/docs/types/index.MapValuesFn.html +2 -2
- package/docs/types/index.MatchCallback.html +1 -1
- package/docs/types/index.MergeTwo.html +2 -2
- package/docs/types/index.SeqEarlyBreaker.html +2 -2
- package/docs/types/index.SeqFn.html +2 -2
- package/docs/types/index.SeqFunctions.html +2 -2
- package/docs/types/index.SetImmutablePath.html +2 -2
- package/docs/types/index.ThrottledFunction.html +1 -1
- package/docs/variables/index.mapValuesUNSET.html +2 -2
- package/docs/variables/index.mergeUNSET.html +2 -2
- package/esm/deserialize.d.ts +1 -1
- package/esm/deserialize.d.ts.map +1 -1
- package/esm/deserialize.js +1 -1
- package/esm/deserialize.js.map +1 -1
- package/esm/index.d.ts +2 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -1
- package/esm/serialize.d.ts.map +1 -1
- package/esm/serialize.js.map +1 -1
- package/esm/serializeToBuffer/const.d.ts +10 -0
- package/esm/serializeToBuffer/const.d.ts.map +1 -0
- package/esm/serializeToBuffer/const.js +10 -0
- package/esm/serializeToBuffer/const.js.map +1 -0
- package/esm/serializeToBuffer/serializeToBuffer.d.ts +5 -0
- package/esm/serializeToBuffer/serializeToBuffer.d.ts.map +1 -0
- package/esm/serializeToBuffer/serializeToBuffer.js +36 -0
- package/esm/serializeToBuffer/serializeToBuffer.js.map +1 -0
- package/esm/serializeToBuffer/unserializeFromBuffer.d.ts +5 -0
- package/esm/serializeToBuffer/unserializeFromBuffer.d.ts.map +1 -0
- package/esm/serializeToBuffer/unserializeFromBuffer.js +48 -0
- package/esm/serializeToBuffer/unserializeFromBuffer.js.map +1 -0
- package/package.json +1 -1
- package/src/deserialize.ts +1 -1
- package/src/index.ts +2 -0
- package/src/serialize.ts +1 -2
- package/src/serializeToBuffer/const.ts +16 -0
- package/src/serializeToBuffer/serialization.spec.ts +61 -0
- package/src/serializeToBuffer/serializeToBuffer.spec.ts +43 -0
- package/src/serializeToBuffer/serializeToBuffer.ts +90 -0
- package/src/serializeToBuffer/unserializeFromBuffer.spec.ts +63 -0
- package/src/serializeToBuffer/unserializeFromBuffer.ts +75 -0
package/esm/deserialize.js
CHANGED
|
@@ -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
|
package/esm/deserialize.js.map
CHANGED
|
@@ -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
package/esm/index.d.ts.map
CHANGED
|
@@ -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
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"}
|
package/esm/serialize.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/esm/serialize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
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
package/src/deserialize.ts
CHANGED
|
@@ -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.
|
|
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 };
|