@colyseus/schema 4.0.0 → 4.0.2

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 (241) hide show
  1. package/build/cjs/{index.js → index.cjs} +1 -1
  2. package/build/cjs/index.cjs.map +1 -0
  3. package/build/esm/index.mjs.map +1 -1
  4. package/lib/Metadata.js +54 -58
  5. package/lib/Metadata.js.map +1 -1
  6. package/lib/Reflection.js +29 -32
  7. package/lib/Reflection.js.map +1 -1
  8. package/lib/Schema.js +41 -45
  9. package/lib/Schema.js.map +1 -1
  10. package/lib/annotations.d.ts +1 -1
  11. package/lib/annotations.js +58 -69
  12. package/lib/annotations.js.map +1 -1
  13. package/lib/bench_encode.js +24 -59
  14. package/lib/bench_encode.js.map +1 -1
  15. package/lib/benchmark.d.ts +1 -0
  16. package/lib/benchmark.js +218 -0
  17. package/lib/benchmark.js.map +1 -0
  18. package/lib/codegen/api.js +10 -41
  19. package/lib/codegen/api.js.map +1 -1
  20. package/lib/codegen/argv.js +1 -3
  21. package/lib/codegen/argv.js.map +1 -1
  22. package/lib/codegen/cli.js +4 -9
  23. package/lib/codegen/cli.js.map +1 -1
  24. package/lib/codegen/languages/cpp.js +5 -8
  25. package/lib/codegen/languages/cpp.js.map +1 -1
  26. package/lib/codegen/languages/csharp.js +5 -8
  27. package/lib/codegen/languages/csharp.js.map +1 -1
  28. package/lib/codegen/languages/haxe.js +3 -6
  29. package/lib/codegen/languages/haxe.js.map +1 -1
  30. package/lib/codegen/languages/java.js +3 -6
  31. package/lib/codegen/languages/java.js.map +1 -1
  32. package/lib/codegen/languages/js.js +4 -7
  33. package/lib/codegen/languages/js.js.map +1 -1
  34. package/lib/codegen/languages/lua.js +4 -7
  35. package/lib/codegen/languages/lua.js.map +1 -1
  36. package/lib/codegen/languages/ts.js +5 -8
  37. package/lib/codegen/languages/ts.js.map +1 -1
  38. package/lib/codegen/parser.js +22 -59
  39. package/lib/codegen/parser.js.map +1 -1
  40. package/lib/codegen/types.js +12 -51
  41. package/lib/codegen/types.js.map +1 -1
  42. package/lib/decoder/DecodeOperation.js +44 -51
  43. package/lib/decoder/DecodeOperation.js.map +1 -1
  44. package/lib/decoder/Decoder.js +24 -28
  45. package/lib/decoder/Decoder.js.map +1 -1
  46. package/lib/decoder/ReferenceTracker.js +10 -14
  47. package/lib/decoder/ReferenceTracker.js.map +1 -1
  48. package/lib/decoder/strategy/Callbacks.js +39 -43
  49. package/lib/decoder/strategy/Callbacks.js.map +1 -1
  50. package/lib/decoder/strategy/RawChanges.js +1 -4
  51. package/lib/decoder/strategy/RawChanges.js.map +1 -1
  52. package/lib/decoder/strategy/getDecoderStateCallbacks.js +24 -27
  53. package/lib/decoder/strategy/getDecoderStateCallbacks.js.map +1 -1
  54. package/lib/encoder/ChangeTree.js +36 -44
  55. package/lib/encoder/ChangeTree.js.map +1 -1
  56. package/lib/encoder/EncodeOperation.js +25 -32
  57. package/lib/encoder/EncodeOperation.js.map +1 -1
  58. package/lib/encoder/Encoder.d.ts +5 -5
  59. package/lib/encoder/Encoder.js +25 -29
  60. package/lib/encoder/Encoder.js.map +1 -1
  61. package/lib/encoder/Root.js +17 -21
  62. package/lib/encoder/Root.js.map +1 -1
  63. package/lib/encoder/StateView.js +40 -45
  64. package/lib/encoder/StateView.js.map +1 -1
  65. package/lib/encoding/assert.js +3 -9
  66. package/lib/encoding/assert.js.map +1 -1
  67. package/lib/encoding/decode.js +2 -6
  68. package/lib/encoding/decode.js.map +1 -1
  69. package/lib/encoding/encode.js +1 -4
  70. package/lib/encoding/encode.js.map +1 -1
  71. package/lib/encoding/spec.js +4 -7
  72. package/lib/encoding/spec.js.map +1 -1
  73. package/lib/index.d.ts +2 -2
  74. package/lib/index.js +33 -75
  75. package/lib/index.js.map +1 -1
  76. package/lib/src/Metadata.d.ts +49 -0
  77. package/lib/src/Metadata.js +256 -0
  78. package/lib/src/Metadata.js.map +1 -0
  79. package/lib/src/Reflection.d.ts +71 -0
  80. package/lib/src/Reflection.js +179 -0
  81. package/lib/src/Reflection.js.map +1 -0
  82. package/lib/src/Schema.d.ts +86 -0
  83. package/lib/src/Schema.js +352 -0
  84. package/lib/src/Schema.js.map +1 -0
  85. package/lib/src/annotations.d.ts +109 -0
  86. package/lib/src/annotations.js +473 -0
  87. package/lib/src/annotations.js.map +1 -0
  88. package/lib/src/bench_encode.d.ts +1 -0
  89. package/lib/src/bench_encode.js +91 -0
  90. package/lib/src/bench_encode.js.map +1 -0
  91. package/lib/src/codegen/api.d.ts +7 -0
  92. package/lib/src/codegen/api.js +56 -0
  93. package/lib/src/codegen/api.js.map +1 -0
  94. package/lib/src/codegen/argv.d.ts +6 -0
  95. package/lib/src/codegen/argv.js +39 -0
  96. package/lib/src/codegen/argv.js.map +1 -0
  97. package/lib/src/codegen/cli.d.ts +1 -0
  98. package/lib/src/codegen/cli.js +58 -0
  99. package/lib/src/codegen/cli.js.map +1 -0
  100. package/lib/src/codegen/languages/cpp.d.ts +3 -0
  101. package/lib/src/codegen/languages/cpp.js +258 -0
  102. package/lib/src/codegen/languages/cpp.js.map +1 -0
  103. package/lib/src/codegen/languages/csharp.d.ts +4 -0
  104. package/lib/src/codegen/languages/csharp.js +154 -0
  105. package/lib/src/codegen/languages/csharp.js.map +1 -0
  106. package/lib/src/codegen/languages/haxe.d.ts +3 -0
  107. package/lib/src/codegen/languages/haxe.js +100 -0
  108. package/lib/src/codegen/languages/haxe.js.map +1 -0
  109. package/lib/src/codegen/languages/java.d.ts +6 -0
  110. package/lib/src/codegen/languages/java.js +100 -0
  111. package/lib/src/codegen/languages/java.js.map +1 -0
  112. package/lib/src/codegen/languages/js.d.ts +3 -0
  113. package/lib/src/codegen/languages/js.js +101 -0
  114. package/lib/src/codegen/languages/js.js.map +1 -0
  115. package/lib/src/codegen/languages/lua.d.ts +3 -0
  116. package/lib/src/codegen/languages/lua.js +103 -0
  117. package/lib/src/codegen/languages/lua.js.map +1 -0
  118. package/lib/src/codegen/languages/ts.d.ts +3 -0
  119. package/lib/src/codegen/languages/ts.js +116 -0
  120. package/lib/src/codegen/languages/ts.js.map +1 -0
  121. package/lib/src/codegen/parser.d.ts +13 -0
  122. package/lib/src/codegen/parser.js +327 -0
  123. package/lib/src/codegen/parser.js.map +1 -0
  124. package/lib/src/codegen/types.d.ts +52 -0
  125. package/lib/src/codegen/types.js +142 -0
  126. package/lib/src/codegen/types.js.map +1 -0
  127. package/lib/src/decoder/DecodeOperation.d.ts +23 -0
  128. package/lib/src/decoder/DecodeOperation.js +248 -0
  129. package/lib/src/decoder/DecodeOperation.js.map +1 -0
  130. package/lib/src/decoder/Decoder.d.ts +21 -0
  131. package/lib/src/decoder/Decoder.js +114 -0
  132. package/lib/src/decoder/Decoder.js.map +1 -0
  133. package/lib/src/decoder/ReferenceTracker.d.ts +25 -0
  134. package/lib/src/decoder/ReferenceTracker.js +135 -0
  135. package/lib/src/decoder/ReferenceTracker.js.map +1 -0
  136. package/lib/src/decoder/strategy/Callbacks.d.ts +154 -0
  137. package/lib/src/decoder/strategy/Callbacks.js +336 -0
  138. package/lib/src/decoder/strategy/Callbacks.js.map +1 -0
  139. package/lib/src/decoder/strategy/RawChanges.d.ts +3 -0
  140. package/lib/src/decoder/strategy/RawChanges.js +4 -0
  141. package/lib/src/decoder/strategy/RawChanges.js.map +1 -0
  142. package/lib/src/decoder/strategy/getDecoderStateCallbacks.d.ts +76 -0
  143. package/lib/src/decoder/strategy/getDecoderStateCallbacks.js +274 -0
  144. package/lib/src/decoder/strategy/getDecoderStateCallbacks.js.map +1 -0
  145. package/lib/src/encoder/ChangeTree.d.ts +135 -0
  146. package/lib/src/encoder/ChangeTree.js +534 -0
  147. package/lib/src/encoder/ChangeTree.js.map +1 -0
  148. package/lib/src/encoder/EncodeOperation.d.ts +22 -0
  149. package/lib/src/encoder/EncodeOperation.js +132 -0
  150. package/lib/src/encoder/EncodeOperation.js.map +1 -0
  151. package/lib/src/encoder/Encoder.d.ts +22 -0
  152. package/lib/src/encoder/Encoder.js +204 -0
  153. package/lib/src/encoder/Encoder.js.map +1 -0
  154. package/lib/src/encoder/Root.d.ts +28 -0
  155. package/lib/src/encoder/Root.js +229 -0
  156. package/lib/src/encoder/Root.js.map +1 -0
  157. package/lib/src/encoder/StateView.d.ts +34 -0
  158. package/lib/src/encoder/StateView.js +279 -0
  159. package/lib/src/encoder/StateView.js.map +1 -0
  160. package/lib/src/encoding/assert.d.ts +10 -0
  161. package/lib/src/encoding/assert.js +49 -0
  162. package/lib/src/encoding/assert.js.map +1 -0
  163. package/lib/src/encoding/decode.d.ts +67 -0
  164. package/lib/src/encoding/decode.js +217 -0
  165. package/lib/src/encoding/decode.js.map +1 -0
  166. package/lib/src/encoding/encode.d.ts +40 -0
  167. package/lib/src/encoding/encode.js +279 -0
  168. package/lib/src/encoding/encode.js.map +1 -0
  169. package/lib/src/encoding/spec.d.ts +24 -0
  170. package/lib/src/encoding/spec.js +26 -0
  171. package/lib/src/encoding/spec.js.map +1 -0
  172. package/lib/src/index.d.ts +32 -0
  173. package/lib/src/index.js +39 -0
  174. package/lib/src/index.js.map +1 -0
  175. package/lib/src/symbol.shim.d.ts +6 -0
  176. package/lib/src/symbol.shim.js +3 -0
  177. package/lib/src/symbol.shim.js.map +1 -0
  178. package/lib/src/types/HelperTypes.d.ts +77 -0
  179. package/lib/src/types/HelperTypes.js +2 -0
  180. package/lib/src/types/HelperTypes.js.map +1 -0
  181. package/lib/src/types/TypeContext.d.ts +31 -0
  182. package/lib/src/types/TypeContext.js +143 -0
  183. package/lib/src/types/TypeContext.js.map +1 -0
  184. package/lib/src/types/custom/ArraySchema.d.ts +270 -0
  185. package/lib/src/types/custom/ArraySchema.js +733 -0
  186. package/lib/src/types/custom/ArraySchema.js.map +1 -0
  187. package/lib/src/types/custom/CollectionSchema.d.ts +51 -0
  188. package/lib/src/types/custom/CollectionSchema.js +170 -0
  189. package/lib/src/types/custom/CollectionSchema.js.map +1 -0
  190. package/lib/src/types/custom/MapSchema.d.ts +51 -0
  191. package/lib/src/types/custom/MapSchema.js +222 -0
  192. package/lib/src/types/custom/MapSchema.js.map +1 -0
  193. package/lib/src/types/custom/SetSchema.d.ts +48 -0
  194. package/lib/src/types/custom/SetSchema.js +178 -0
  195. package/lib/src/types/custom/SetSchema.js.map +1 -0
  196. package/lib/src/types/registry.d.ts +16 -0
  197. package/lib/src/types/registry.js +30 -0
  198. package/lib/src/types/registry.js.map +1 -0
  199. package/lib/src/types/symbols.d.ts +33 -0
  200. package/lib/src/types/symbols.js +34 -0
  201. package/lib/src/types/symbols.js.map +1 -0
  202. package/lib/src/types/utils.d.ts +1 -0
  203. package/lib/src/types/utils.js +13 -0
  204. package/lib/src/types/utils.js.map +1 -0
  205. package/lib/src/utils.d.ts +13 -0
  206. package/lib/src/utils.js +49 -0
  207. package/lib/src/utils.js.map +1 -0
  208. package/lib/src/v3_bench.d.ts +1 -0
  209. package/lib/src/v3_bench.js +128 -0
  210. package/lib/src/v3_bench.js.map +1 -0
  211. package/lib/symbol.shim.js +1 -2
  212. package/lib/symbol.shim.js.map +1 -1
  213. package/lib/types/HelperTypes.js +1 -2
  214. package/lib/types/TypeContext.js +8 -12
  215. package/lib/types/TypeContext.js.map +1 -1
  216. package/lib/types/custom/ArraySchema.js +63 -67
  217. package/lib/types/custom/ArraySchema.js.map +1 -1
  218. package/lib/types/custom/CollectionSchema.js +27 -31
  219. package/lib/types/custom/CollectionSchema.js.map +1 -1
  220. package/lib/types/custom/MapSchema.js +37 -41
  221. package/lib/types/custom/MapSchema.js.map +1 -1
  222. package/lib/types/custom/SetSchema.js +28 -32
  223. package/lib/types/custom/SetSchema.js.map +1 -1
  224. package/lib/types/registry.js +13 -20
  225. package/lib/types/registry.js.map +1 -1
  226. package/lib/types/symbols.js +16 -19
  227. package/lib/types/symbols.js.map +1 -1
  228. package/lib/types/utils.js +1 -4
  229. package/lib/types/utils.js.map +1 -1
  230. package/lib/utils.js +9 -14
  231. package/lib/utils.js.map +1 -1
  232. package/lib/v3_bench.js +17 -19
  233. package/lib/v3_bench.js.map +1 -1
  234. package/package.json +9 -7
  235. package/src/codegen/api.ts +7 -0
  236. package/src/codegen/parser.ts +2 -2
  237. package/src/codegen/types.ts +5 -0
  238. package/src/encoder/Encoder.ts +24 -7
  239. package/src/index.ts +2 -2
  240. package/build/cjs/index.js.map +0 -1
  241. package/src/bench_encode.ts +0 -64
@@ -0,0 +1,49 @@
1
+ export class EncodeSchemaError extends Error {
2
+ }
3
+ export function assertType(value, type, klass, field) {
4
+ let typeofTarget;
5
+ let allowNull = false;
6
+ switch (type) {
7
+ case "number":
8
+ case "int8":
9
+ case "uint8":
10
+ case "int16":
11
+ case "uint16":
12
+ case "int32":
13
+ case "uint32":
14
+ case "int64":
15
+ case "uint64":
16
+ case "float32":
17
+ case "float64":
18
+ typeofTarget = "number";
19
+ if (isNaN(value)) {
20
+ console.log(`trying to encode "NaN" in ${klass.constructor.name}#${field}`);
21
+ }
22
+ break;
23
+ case "bigint64":
24
+ case "biguint64":
25
+ typeofTarget = "bigint";
26
+ break;
27
+ case "string":
28
+ typeofTarget = "string";
29
+ allowNull = true;
30
+ break;
31
+ case "boolean":
32
+ // boolean is always encoded as true/false based on truthiness
33
+ return;
34
+ default:
35
+ // skip assertion for custom types
36
+ // TODO: allow custom types to define their own assertions
37
+ return;
38
+ }
39
+ if (typeof (value) !== typeofTarget && (!allowNull || (allowNull && value !== null))) {
40
+ let foundValue = `'${JSON.stringify(value)}'${(value && value.constructor && ` (${value.constructor.name})`) || ''}`;
41
+ throw new EncodeSchemaError(`a '${typeofTarget}' was expected, but ${foundValue} was provided in ${klass.constructor.name}#${field}`);
42
+ }
43
+ }
44
+ export function assertInstanceType(value, type, instance, field) {
45
+ if (!(value instanceof type)) {
46
+ throw new EncodeSchemaError(`a '${type.name}' was expected, but '${value && value.constructor.name}' was provided in ${instance.constructor.name}#${field}`);
47
+ }
48
+ }
49
+ //# sourceMappingURL=assert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../src/encoding/assert.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;CAAG;AAE/C,MAAM,UAAU,UAAU,CAAC,KAAU,EAAE,IAAY,EAAE,KAAa,EAAE,KAAsB;IACtF,IAAI,YAAoB,CAAC;IACzB,IAAI,SAAS,GAAY,KAAK,CAAC;IAE/B,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACV,YAAY,GAAG,QAAQ,CAAC;YACxB,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,MAAM;QACV,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW;YACZ,YAAY,GAAG,QAAQ,CAAC;YACxB,MAAM;QACV,KAAK,QAAQ;YACT,YAAY,GAAG,QAAQ,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACV,KAAK,SAAS;YACV,8DAA8D;YAC9D,OAAO;QACX;YACI,kCAAkC;YAClC,0DAA0D;YAC1D,OAAO;IACf,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;QACnF,IAAI,UAAU,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACrH,MAAM,IAAI,iBAAiB,CAAC,MAAM,YAAY,uBAAuB,UAAU,oBAAoB,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;IAC1I,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,KAAU,EACV,IAIsB,EACtB,QAAa,EACb,KAAsB;IAEtB,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,iBAAiB,CAAC,MAAM,IAAI,CAAC,IAAI,wBAAwB,KAAK,IAAK,KAAa,CAAC,WAAW,CAAC,IAAI,qBAAqB,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;IAC1K,CAAC;AACL,CAAC","sourcesContent":["import type { Schema } from \"../Schema\";\nimport type { CollectionSchema } from \"../types/custom/CollectionSchema\";\nimport type { MapSchema } from \"../types/custom/MapSchema\";\nimport type { SetSchema } from \"../types/custom/SetSchema\";\nimport type { ArraySchema } from \"../types/custom/ArraySchema\";\nimport type { Ref } from \"../encoder/ChangeTree\";\n\nexport class EncodeSchemaError extends Error {}\n\nexport function assertType(value: any, type: string, klass: Schema, field: string | number) {\n let typeofTarget: string;\n let allowNull: boolean = false;\n\n switch (type) {\n case \"number\":\n case \"int8\":\n case \"uint8\":\n case \"int16\":\n case \"uint16\":\n case \"int32\":\n case \"uint32\":\n case \"int64\":\n case \"uint64\":\n case \"float32\":\n case \"float64\":\n typeofTarget = \"number\";\n if (isNaN(value)) {\n console.log(`trying to encode \"NaN\" in ${klass.constructor.name}#${field}`);\n }\n break;\n case \"bigint64\":\n case \"biguint64\":\n typeofTarget = \"bigint\";\n break;\n case \"string\":\n typeofTarget = \"string\";\n allowNull = true;\n break;\n case \"boolean\":\n // boolean is always encoded as true/false based on truthiness\n return;\n default:\n // skip assertion for custom types\n // TODO: allow custom types to define their own assertions\n return;\n }\n\n if (typeof (value) !== typeofTarget && (!allowNull || (allowNull && value !== null))) {\n let foundValue = `'${JSON.stringify(value)}'${(value && value.constructor && ` (${value.constructor.name})`) || ''}`;\n throw new EncodeSchemaError(`a '${typeofTarget}' was expected, but ${foundValue} was provided in ${klass.constructor.name}#${field}`);\n }\n}\n\nexport function assertInstanceType(\n value: Ref,\n type: typeof Schema\n | typeof ArraySchema\n | typeof MapSchema\n | typeof CollectionSchema\n | typeof SetSchema,\n instance: Ref,\n field: string | number,\n) {\n if (!(value instanceof type)) {\n throw new EncodeSchemaError(`a '${type.name}' was expected, but '${value && (value as any).constructor.name}' was provided in ${instance.constructor.name}#${field}`);\n }\n}"]}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Copyright (c) 2018 Endel Dreyer
3
+ * Copyright (c) 2014 Ion Drive Software Ltd.
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to deal
7
+ * in the Software without restriction, including without limitation the rights
8
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ * copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in all
13
+ * copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE
22
+ */
23
+ import type { BufferLike } from "./encode";
24
+ /**
25
+ * msgpack implementation highly based on notepack.io
26
+ * https://github.com/darrachequesne/notepack
27
+ */
28
+ export interface Iterator {
29
+ offset: number;
30
+ }
31
+ declare function utf8Read(bytes: BufferLike, it: Iterator, length: number): string;
32
+ declare function int8(bytes: BufferLike, it: Iterator): number;
33
+ declare function uint8(bytes: BufferLike, it: Iterator): number;
34
+ declare function int16(bytes: BufferLike, it: Iterator): number;
35
+ declare function uint16(bytes: BufferLike, it: Iterator): number;
36
+ declare function int32(bytes: BufferLike, it: Iterator): number;
37
+ declare function uint32(bytes: BufferLike, it: Iterator): number;
38
+ declare function float32(bytes: BufferLike, it: Iterator): number;
39
+ declare function float64(bytes: BufferLike, it: Iterator): number;
40
+ declare function int64(bytes: BufferLike, it: Iterator): number;
41
+ declare function uint64(bytes: BufferLike, it: Iterator): number;
42
+ declare function bigint64(bytes: BufferLike, it: Iterator): bigint;
43
+ declare function biguint64(bytes: BufferLike, it: Iterator): bigint;
44
+ declare function boolean(bytes: BufferLike, it: Iterator): boolean;
45
+ declare function string(bytes: BufferLike, it: Iterator): string;
46
+ declare function number(bytes: BufferLike, it: Iterator): number;
47
+ export declare function stringCheck(bytes: BufferLike, it: Iterator): boolean;
48
+ export declare const decode: {
49
+ utf8Read: typeof utf8Read;
50
+ int8: typeof int8;
51
+ uint8: typeof uint8;
52
+ int16: typeof int16;
53
+ uint16: typeof uint16;
54
+ int32: typeof int32;
55
+ uint32: typeof uint32;
56
+ float32: typeof float32;
57
+ float64: typeof float64;
58
+ int64: typeof int64;
59
+ uint64: typeof uint64;
60
+ bigint64: typeof bigint64;
61
+ biguint64: typeof biguint64;
62
+ boolean: typeof boolean;
63
+ string: typeof string;
64
+ number: typeof number;
65
+ stringCheck: typeof stringCheck;
66
+ };
67
+ export {};
@@ -0,0 +1,217 @@
1
+ // @ts-nocheck
2
+ // force little endian to facilitate decoding on multiple implementations
3
+ const _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;
4
+ const _convoBuffer = new ArrayBuffer(8);
5
+ const _int32 = new Int32Array(_convoBuffer);
6
+ const _float32 = new Float32Array(_convoBuffer);
7
+ const _float64 = new Float64Array(_convoBuffer);
8
+ const _uint64 = new BigUint64Array(_convoBuffer);
9
+ const _int64 = new BigInt64Array(_convoBuffer);
10
+ function utf8Read(bytes, it, length) {
11
+ // boundary check
12
+ if (length > bytes.length - it.offset) {
13
+ length = bytes.length - it.offset;
14
+ }
15
+ var string = '', chr = 0;
16
+ for (var i = it.offset, end = it.offset + length; i < end; i++) {
17
+ var byte = bytes[i];
18
+ if ((byte & 0x80) === 0x00) {
19
+ string += String.fromCharCode(byte);
20
+ continue;
21
+ }
22
+ if ((byte & 0xe0) === 0xc0) {
23
+ string += String.fromCharCode(((byte & 0x1f) << 6) |
24
+ (bytes[++i] & 0x3f));
25
+ continue;
26
+ }
27
+ if ((byte & 0xf0) === 0xe0) {
28
+ string += String.fromCharCode(((byte & 0x0f) << 12) |
29
+ ((bytes[++i] & 0x3f) << 6) |
30
+ ((bytes[++i] & 0x3f) << 0));
31
+ continue;
32
+ }
33
+ if ((byte & 0xf8) === 0xf0) {
34
+ chr = ((byte & 0x07) << 18) |
35
+ ((bytes[++i] & 0x3f) << 12) |
36
+ ((bytes[++i] & 0x3f) << 6) |
37
+ ((bytes[++i] & 0x3f) << 0);
38
+ if (chr >= 0x010000) { // surrogate pair
39
+ chr -= 0x010000;
40
+ string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);
41
+ }
42
+ else {
43
+ string += String.fromCharCode(chr);
44
+ }
45
+ continue;
46
+ }
47
+ // (do not throw error to avoid server/client from crashing due to hack attemps)
48
+ // throw new Error('Invalid byte ' + byte.toString(16));
49
+ console.error('decode.utf8Read(): Invalid byte ' + byte + ' at offset ' + i + '. Skip to end of string: ' + (it.offset + length));
50
+ break;
51
+ }
52
+ it.offset += length;
53
+ return string;
54
+ }
55
+ function int8(bytes, it) {
56
+ return uint8(bytes, it) << 24 >> 24;
57
+ }
58
+ ;
59
+ function uint8(bytes, it) {
60
+ return bytes[it.offset++];
61
+ }
62
+ ;
63
+ function int16(bytes, it) {
64
+ return uint16(bytes, it) << 16 >> 16;
65
+ }
66
+ ;
67
+ function uint16(bytes, it) {
68
+ return bytes[it.offset++] | bytes[it.offset++] << 8;
69
+ }
70
+ ;
71
+ function int32(bytes, it) {
72
+ return bytes[it.offset++] | bytes[it.offset++] << 8 | bytes[it.offset++] << 16 | bytes[it.offset++] << 24;
73
+ }
74
+ ;
75
+ function uint32(bytes, it) {
76
+ return int32(bytes, it) >>> 0;
77
+ }
78
+ ;
79
+ function float32(bytes, it) {
80
+ _int32[0] = int32(bytes, it);
81
+ return _float32[0];
82
+ }
83
+ ;
84
+ function float64(bytes, it) {
85
+ _int32[_isLittleEndian ? 0 : 1] = int32(bytes, it);
86
+ _int32[_isLittleEndian ? 1 : 0] = int32(bytes, it);
87
+ return _float64[0];
88
+ }
89
+ ;
90
+ function int64(bytes, it) {
91
+ const low = uint32(bytes, it);
92
+ const high = int32(bytes, it) * Math.pow(2, 32);
93
+ return high + low;
94
+ }
95
+ ;
96
+ function uint64(bytes, it) {
97
+ const low = uint32(bytes, it);
98
+ const high = uint32(bytes, it) * Math.pow(2, 32);
99
+ return high + low;
100
+ }
101
+ ;
102
+ function bigint64(bytes, it) {
103
+ _int32[0] = int32(bytes, it);
104
+ _int32[1] = int32(bytes, it);
105
+ return _int64[0];
106
+ }
107
+ function biguint64(bytes, it) {
108
+ _int32[0] = int32(bytes, it);
109
+ _int32[1] = int32(bytes, it);
110
+ return _uint64[0];
111
+ }
112
+ function boolean(bytes, it) {
113
+ return uint8(bytes, it) > 0;
114
+ }
115
+ ;
116
+ function string(bytes, it) {
117
+ const prefix = bytes[it.offset++];
118
+ let length;
119
+ if (prefix < 0xc0) {
120
+ // fixstr
121
+ length = prefix & 0x1f;
122
+ }
123
+ else if (prefix === 0xd9) {
124
+ length = uint8(bytes, it);
125
+ }
126
+ else if (prefix === 0xda) {
127
+ length = uint16(bytes, it);
128
+ }
129
+ else if (prefix === 0xdb) {
130
+ length = uint32(bytes, it);
131
+ }
132
+ return utf8Read(bytes, it, length);
133
+ }
134
+ function number(bytes, it) {
135
+ const prefix = bytes[it.offset++];
136
+ if (prefix < 0x80) {
137
+ // positive fixint
138
+ return prefix;
139
+ }
140
+ else if (prefix === 0xca) {
141
+ // float 32
142
+ return float32(bytes, it);
143
+ }
144
+ else if (prefix === 0xcb) {
145
+ // float 64
146
+ return float64(bytes, it);
147
+ }
148
+ else if (prefix === 0xcc) {
149
+ // uint 8
150
+ return uint8(bytes, it);
151
+ }
152
+ else if (prefix === 0xcd) {
153
+ // uint 16
154
+ return uint16(bytes, it);
155
+ }
156
+ else if (prefix === 0xce) {
157
+ // uint 32
158
+ return uint32(bytes, it);
159
+ }
160
+ else if (prefix === 0xcf) {
161
+ // uint 64
162
+ return uint64(bytes, it);
163
+ }
164
+ else if (prefix === 0xd0) {
165
+ // int 8
166
+ return int8(bytes, it);
167
+ }
168
+ else if (prefix === 0xd1) {
169
+ // int 16
170
+ return int16(bytes, it);
171
+ }
172
+ else if (prefix === 0xd2) {
173
+ // int 32
174
+ return int32(bytes, it);
175
+ }
176
+ else if (prefix === 0xd3) {
177
+ // int 64
178
+ return int64(bytes, it);
179
+ }
180
+ else if (prefix > 0xdf) {
181
+ // negative fixint
182
+ return (0xff - prefix + 1) * -1;
183
+ }
184
+ }
185
+ ;
186
+ export function stringCheck(bytes, it) {
187
+ const prefix = bytes[it.offset];
188
+ return (
189
+ // fixstr
190
+ (prefix < 0xc0 && prefix > 0xa0) ||
191
+ // str 8
192
+ prefix === 0xd9 ||
193
+ // str 16
194
+ prefix === 0xda ||
195
+ // str 32
196
+ prefix === 0xdb);
197
+ }
198
+ export const decode = {
199
+ utf8Read,
200
+ int8,
201
+ uint8,
202
+ int16,
203
+ uint16,
204
+ int32,
205
+ uint32,
206
+ float32,
207
+ float64,
208
+ int64,
209
+ uint64,
210
+ bigint64,
211
+ biguint64,
212
+ boolean,
213
+ string,
214
+ number,
215
+ stringCheck,
216
+ };
217
+ //# sourceMappingURL=decode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/encoding/decode.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\n\n/**\n * Copyright (c) 2018 Endel Dreyer\n * Copyright (c) 2014 Ion Drive Software Ltd.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE\n */\n\nimport type { BufferLike } from \"./encode\";\n\n/**\n * msgpack implementation highly based on notepack.io\n * https://github.com/darrachequesne/notepack\n */\n\nexport interface Iterator { offset: number; }\n\n// force little endian to facilitate decoding on multiple implementations\nconst _isLittleEndian = true; // new Uint16Array(new Uint8Array([1, 0]).buffer)[0] === 1;\nconst _convoBuffer = new ArrayBuffer(8);\n\nconst _int32 = new Int32Array(_convoBuffer);\nconst _float32 = new Float32Array(_convoBuffer);\nconst _float64 = new Float64Array(_convoBuffer);\nconst _uint64 = new BigUint64Array(_convoBuffer);\nconst _int64 = new BigInt64Array(_convoBuffer);\n\nfunction utf8Read(bytes: BufferLike, it: Iterator, length: number) {\n // boundary check\n if (length > bytes.length - it.offset) { length = bytes.length - it.offset; }\n\n var string = '', chr = 0;\n for (var i = it.offset, end = it.offset + length; i < end; i++) {\n var byte = bytes[i];\n if ((byte & 0x80) === 0x00) {\n string += String.fromCharCode(byte);\n continue;\n }\n if ((byte & 0xe0) === 0xc0) {\n string += String.fromCharCode(\n ((byte & 0x1f) << 6) |\n (bytes[++i] & 0x3f)\n );\n continue;\n }\n if ((byte & 0xf0) === 0xe0) {\n string += String.fromCharCode(\n ((byte & 0x0f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0)\n );\n continue;\n }\n if ((byte & 0xf8) === 0xf0) {\n chr = ((byte & 0x07) << 18) |\n ((bytes[++i] & 0x3f) << 12) |\n ((bytes[++i] & 0x3f) << 6) |\n ((bytes[++i] & 0x3f) << 0);\n if (chr >= 0x010000) { // surrogate pair\n chr -= 0x010000;\n string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);\n } else {\n string += String.fromCharCode(chr);\n }\n continue;\n }\n\n // (do not throw error to avoid server/client from crashing due to hack attemps)\n // throw new Error('Invalid byte ' + byte.toString(16));\n\n console.error('decode.utf8Read(): Invalid byte ' + byte + ' at offset ' + i + '. Skip to end of string: ' + (it.offset + length));\n break;\n }\n it.offset += length;\n return string;\n}\n\nfunction int8 (bytes: BufferLike, it: Iterator) {\n return uint8(bytes, it) << 24 >> 24;\n};\n\nfunction uint8 (bytes: BufferLike, it: Iterator) {\n return bytes[it.offset++];\n};\n\nfunction int16 (bytes: BufferLike, it: Iterator) {\n return uint16(bytes, it) << 16 >> 16;\n};\n\nfunction uint16 (bytes: BufferLike, it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8;\n};\n\nfunction int32 (bytes: BufferLike, it: Iterator) {\n return bytes[it.offset++] | bytes[it.offset++] << 8 | bytes[it.offset++] << 16 | bytes[it.offset++] << 24;\n};\n\nfunction uint32 (bytes: BufferLike, it: Iterator) {\n return int32(bytes, it) >>> 0;\n};\n\nfunction float32 (bytes: BufferLike, it: Iterator) {\n _int32[0] = int32(bytes, it);\n return _float32[0];\n};\n\nfunction float64 (bytes: BufferLike, it: Iterator) {\n _int32[_isLittleEndian ? 0 : 1] = int32(bytes, it);\n _int32[_isLittleEndian ? 1 : 0] = int32(bytes, it);\n return _float64[0];\n};\n\nfunction int64(bytes: BufferLike, it: Iterator) {\n const low = uint32(bytes, it);\n const high = int32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\nfunction uint64(bytes: BufferLike, it: Iterator) {\n const low = uint32(bytes, it);\n const high = uint32(bytes, it) * Math.pow(2, 32);\n return high + low;\n};\n\nfunction bigint64(bytes: BufferLike, it: Iterator) {\n _int32[0] = int32(bytes, it);\n _int32[1] = int32(bytes, it);\n return _int64[0];\n}\n\nfunction biguint64(bytes: BufferLike, it: Iterator) {\n _int32[0] = int32(bytes, it);\n _int32[1] = int32(bytes, it);\n return _uint64[0];\n}\n\nfunction boolean (bytes: BufferLike, it: Iterator) {\n return uint8(bytes, it) > 0;\n};\n\nfunction string (bytes: BufferLike, it: Iterator) {\n const prefix = bytes[it.offset++];\n let length: number;\n\n if (prefix < 0xc0) {\n // fixstr\n length = prefix & 0x1f;\n\n } else if (prefix === 0xd9) {\n length = uint8(bytes, it);\n\n } else if (prefix === 0xda) {\n length = uint16(bytes, it);\n\n } else if (prefix === 0xdb) {\n length = uint32(bytes, it);\n }\n\n return utf8Read(bytes, it, length);\n}\n\nfunction number (bytes: BufferLike, it: Iterator) {\n const prefix = bytes[it.offset++];\n\n if (prefix < 0x80) {\n // positive fixint\n return prefix;\n\n } else if (prefix === 0xca) {\n // float 32\n return float32(bytes, it);\n\n } else if (prefix === 0xcb) {\n // float 64\n return float64(bytes, it);\n\n } else if (prefix === 0xcc) {\n // uint 8\n return uint8(bytes, it);\n\n } else if (prefix === 0xcd) {\n // uint 16\n return uint16(bytes, it);\n\n } else if (prefix === 0xce) {\n // uint 32\n return uint32(bytes, it);\n\n } else if (prefix === 0xcf) {\n // uint 64\n return uint64(bytes, it);\n\n } else if (prefix === 0xd0) {\n // int 8\n return int8(bytes, it);\n\n } else if (prefix === 0xd1) {\n // int 16\n return int16(bytes, it);\n\n } else if (prefix === 0xd2) {\n // int 32\n return int32(bytes, it);\n\n } else if (prefix === 0xd3) {\n // int 64\n return int64(bytes, it);\n\n } else if (prefix > 0xdf) {\n // negative fixint\n return (0xff - prefix + 1) * -1\n }\n};\n\nexport function stringCheck(bytes: BufferLike, it: Iterator) {\n const prefix = bytes[it.offset];\n return (\n // fixstr\n (prefix < 0xc0 && prefix > 0xa0) ||\n // str 8\n prefix === 0xd9 ||\n // str 16\n prefix === 0xda ||\n // str 32\n prefix === 0xdb\n );\n}\n\nexport const decode = {\n utf8Read,\n int8,\n uint8,\n int16,\n uint16,\n int32,\n uint32,\n float32,\n float64,\n int64,\n uint64,\n bigint64,\n biguint64,\n boolean,\n string,\n number,\n stringCheck,\n};"]}
@@ -0,0 +1,40 @@
1
+ import type { Iterator } from "./decode";
2
+ export type BufferLike = ArrayLike<number> & {
3
+ [index: number]: number;
4
+ };
5
+ declare function utf8Write(view: BufferLike, str: string, it: Iterator): void;
6
+ declare function int8(bytes: BufferLike, value: number, it: Iterator): void;
7
+ declare function uint8(bytes: BufferLike, value: number, it: Iterator): void;
8
+ declare function int16(bytes: BufferLike, value: number, it: Iterator): void;
9
+ declare function uint16(bytes: BufferLike, value: number, it: Iterator): void;
10
+ declare function int32(bytes: BufferLike, value: number, it: Iterator): void;
11
+ declare function uint32(bytes: BufferLike, value: number, it: Iterator): void;
12
+ declare function int64(bytes: BufferLike, value: number, it: Iterator): void;
13
+ declare function uint64(bytes: BufferLike, value: number, it: Iterator): void;
14
+ declare function bigint64(bytes: BufferLike, value: bigint, it: Iterator): void;
15
+ declare function biguint64(bytes: BufferLike, value: bigint, it: Iterator): void;
16
+ declare function float32(bytes: BufferLike, value: number, it: Iterator): void;
17
+ declare function float64(bytes: BufferLike, value: number, it: Iterator): void;
18
+ declare function boolean(bytes: BufferLike, value: number, it: Iterator): void;
19
+ declare function string(bytes: BufferLike, value: string, it: Iterator): number;
20
+ declare function number(bytes: BufferLike, value: number, it: Iterator): 1 | 2 | 3 | 5 | 9;
21
+ export declare const encode: {
22
+ int8: typeof int8;
23
+ uint8: typeof uint8;
24
+ int16: typeof int16;
25
+ uint16: typeof uint16;
26
+ int32: typeof int32;
27
+ uint32: typeof uint32;
28
+ int64: typeof int64;
29
+ uint64: typeof uint64;
30
+ bigint64: typeof bigint64;
31
+ biguint64: typeof biguint64;
32
+ float32: typeof float32;
33
+ float64: typeof float64;
34
+ boolean: typeof boolean;
35
+ string: typeof string;
36
+ number: typeof number;
37
+ utf8Write: typeof utf8Write;
38
+ utf8Length: (str: string, _?: any) => number;
39
+ };
40
+ export {};