jspurefix 1.4.1 → 2.0.3

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 (879) hide show
  1. package/.eslintrc.js +6 -0
  2. package/appveyor.yml +4 -0
  3. package/dist/buffer/{ascii-chars.d.ts → ascii/ascii-chars.d.ts} +0 -0
  4. package/dist/buffer/{ascii-chars.js → ascii/ascii-chars.js} +0 -0
  5. package/dist/buffer/ascii/ascii-chars.js.map +1 -0
  6. package/dist/buffer/ascii/ascii-encoder.d.ts +4 -2
  7. package/dist/buffer/ascii/ascii-encoder.js +54 -32
  8. package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
  9. package/dist/buffer/ascii/ascii-parser-state.d.ts +3 -10
  10. package/dist/buffer/ascii/ascii-parser-state.js +37 -25
  11. package/dist/buffer/ascii/ascii-parser-state.js.map +1 -1
  12. package/dist/buffer/ascii/ascii-parser.d.ts +7 -7
  13. package/dist/buffer/ascii/ascii-parser.js +50 -24
  14. package/dist/buffer/ascii/ascii-parser.js.map +1 -1
  15. package/dist/buffer/ascii/ascii-segment-parser.d.ts +2 -2
  16. package/dist/buffer/ascii/ascii-segment-parser.js +34 -13
  17. package/dist/buffer/ascii/ascii-segment-parser.js.map +1 -1
  18. package/dist/buffer/ascii/ascii-view.d.ts +2 -4
  19. package/dist/buffer/ascii/ascii-view.js +11 -15
  20. package/dist/buffer/ascii/ascii-view.js.map +1 -1
  21. package/dist/buffer/ascii/index.d.ts +1 -0
  22. package/dist/buffer/ascii/index.js +1 -0
  23. package/dist/buffer/ascii/index.js.map +1 -1
  24. package/dist/buffer/ascii/parse-state.d.ts +8 -0
  25. package/dist/buffer/ascii/parse-state.js +13 -0
  26. package/dist/buffer/ascii/parse-state.js.map +1 -0
  27. package/dist/buffer/ascii/time-formatter.js +1 -1
  28. package/dist/buffer/ascii/time-formatter.js.map +1 -1
  29. package/dist/buffer/elastic-buffer.js +29 -8
  30. package/dist/buffer/elastic-buffer.js.map +1 -1
  31. package/dist/buffer/encode-proxy.d.ts +1 -1
  32. package/dist/buffer/encode-proxy.js +16 -17
  33. package/dist/buffer/encode-proxy.js.map +1 -1
  34. package/dist/buffer/fixml/fixml-encoder.d.ts +2 -1
  35. package/dist/buffer/fixml/fixml-encoder.js +43 -20
  36. package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
  37. package/dist/buffer/fixml/fixml-parser.js +47 -24
  38. package/dist/buffer/fixml/fixml-parser.js.map +1 -1
  39. package/dist/buffer/fixml/fixml-view.d.ts +2 -4
  40. package/dist/buffer/fixml/fixml-view.js +13 -16
  41. package/dist/buffer/fixml/fixml-view.js.map +1 -1
  42. package/dist/buffer/fixml/populated-attributes.d.ts +5 -0
  43. package/dist/buffer/fixml/populated-attributes.js +3 -0
  44. package/dist/buffer/fixml/populated-attributes.js.map +1 -0
  45. package/dist/buffer/index.d.ts +4 -8
  46. package/dist/buffer/index.js +4 -8
  47. package/dist/buffer/index.js.map +1 -1
  48. package/dist/buffer/msg-encoder.d.ts +2 -1
  49. package/dist/buffer/msg-encoder.js.map +1 -1
  50. package/dist/buffer/msg-view.d.ts +3 -5
  51. package/dist/buffer/msg-view.js +8 -5
  52. package/dist/buffer/msg-view.js.map +1 -1
  53. package/dist/buffer/{segment-description.d.ts → segment/segment-description.d.ts} +3 -10
  54. package/dist/buffer/{segment-description.js → segment/segment-description.js} +5 -13
  55. package/dist/buffer/segment/segment-description.js.map +1 -0
  56. package/dist/buffer/{segment-summary.d.ts → segment/segment-summary.d.ts} +0 -0
  57. package/dist/buffer/{segment-summary.js → segment/segment-summary.js} +0 -0
  58. package/dist/buffer/segment/segment-summary.js.map +1 -0
  59. package/dist/buffer/segment/segment-type.d.ts +8 -0
  60. package/dist/buffer/segment/segment-type.js +13 -0
  61. package/dist/buffer/segment/segment-type.js.map +1 -0
  62. package/dist/buffer/structure.d.ts +3 -3
  63. package/dist/buffer/structure.js +1 -1
  64. package/dist/buffer/structure.js.map +1 -1
  65. package/dist/buffer/{tag-pos.d.ts → tag/tag-pos.d.ts} +0 -0
  66. package/dist/buffer/{tag-pos.js → tag/tag-pos.js} +0 -0
  67. package/dist/buffer/tag/tag-pos.js.map +1 -0
  68. package/dist/buffer/tag/tag-type.d.ts +13 -0
  69. package/dist/buffer/tag/tag-type.js +18 -0
  70. package/dist/buffer/tag/tag-type.js.map +1 -0
  71. package/dist/buffer/{tags.d.ts → tag/tags.d.ts} +3 -14
  72. package/dist/buffer/{tags.js → tag/tags.js} +24 -37
  73. package/dist/buffer/tag/tags.js.map +1 -0
  74. package/dist/config/get-js-fx-logger.d.ts +4 -0
  75. package/dist/config/get-js-fx-logger.js +3 -0
  76. package/dist/config/get-js-fx-logger.js.map +1 -0
  77. package/dist/config/index.d.ts +1 -0
  78. package/dist/config/index.js +1 -0
  79. package/dist/config/index.js.map +1 -1
  80. package/dist/config/js-fix-config.d.ts +4 -1
  81. package/dist/config/js-fix-config.js +3 -3
  82. package/dist/config/js-fix-config.js.map +1 -1
  83. package/dist/config/js-fix-logger.d.ts +0 -3
  84. package/dist/config/js-fix-logger.js.map +1 -1
  85. package/dist/dict-parser.js +28 -23
  86. package/dist/dict-parser.js.map +1 -1
  87. package/dist/dictionary/compiler/compiler-type.js +7 -7
  88. package/dist/dictionary/compiler/compiler-type.js.map +1 -1
  89. package/dist/dictionary/compiler/enum-compiler.d.ts +1 -0
  90. package/dist/dictionary/compiler/enum-compiler.js +11 -1
  91. package/dist/dictionary/compiler/enum-compiler.js.map +1 -1
  92. package/dist/dictionary/compiler/msg-compiler.js +8 -6
  93. package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
  94. package/dist/dictionary/contained/contained-component-field.js +2 -1
  95. package/dist/dictionary/contained/contained-component-field.js.map +1 -1
  96. package/dist/dictionary/contained/contained-field-dispatch.d.ts +1 -14
  97. package/dist/dictionary/contained/contained-field-dispatch.js +4 -4
  98. package/dist/dictionary/contained/contained-field-dispatch.js.map +1 -1
  99. package/dist/dictionary/contained/contained-field-dispatcher.d.ts +14 -0
  100. package/dist/dictionary/contained/contained-field-dispatcher.js +3 -0
  101. package/dist/dictionary/contained/contained-field-dispatcher.js.map +1 -0
  102. package/dist/dictionary/contained/contained-field-set.d.ts +1 -1
  103. package/dist/dictionary/contained/contained-field-set.js +12 -11
  104. package/dist/dictionary/contained/contained-field-set.js.map +1 -1
  105. package/dist/dictionary/contained/contained-field-type.d.ts +5 -0
  106. package/dist/dictionary/contained/contained-field-type.js +10 -0
  107. package/dist/dictionary/contained/contained-field-type.js.map +1 -0
  108. package/dist/dictionary/contained/contained-field.d.ts +1 -5
  109. package/dist/dictionary/contained/contained-field.js +1 -7
  110. package/dist/dictionary/contained/contained-field.js.map +1 -1
  111. package/dist/dictionary/contained/contained-group-field.js +2 -1
  112. package/dist/dictionary/contained/contained-group-field.js.map +1 -1
  113. package/dist/dictionary/contained/contained-simple-field.js +2 -1
  114. package/dist/dictionary/contained/contained-simple-field.js.map +1 -1
  115. package/dist/dictionary/{fields-dispatch.d.ts → contained/field-dispatcher.d.ts} +3 -2
  116. package/dist/dictionary/contained/field-dispatcher.js +3 -0
  117. package/dist/dictionary/contained/field-dispatcher.js.map +1 -0
  118. package/dist/dictionary/contained/fields-dispatch.d.ts +6 -0
  119. package/dist/dictionary/contained/fields-dispatch.js +42 -0
  120. package/dist/dictionary/contained/fields-dispatch.js.map +1 -0
  121. package/dist/dictionary/contained/index.d.ts +2 -0
  122. package/dist/dictionary/contained/index.js +2 -0
  123. package/dist/dictionary/contained/index.js.map +1 -1
  124. package/dist/dictionary/contained-set-type.d.ts +5 -0
  125. package/dist/dictionary/contained-set-type.js +10 -0
  126. package/dist/dictionary/contained-set-type.js.map +1 -0
  127. package/dist/dictionary/definition/component-field-definition.js +2 -2
  128. package/dist/dictionary/definition/component-field-definition.js.map +1 -1
  129. package/dist/dictionary/definition/fix-definitions.d.ts +2 -1
  130. package/dist/dictionary/definition/fix-definitions.js.map +1 -1
  131. package/dist/dictionary/definition/group-field-definition.js +2 -2
  132. package/dist/dictionary/definition/group-field-definition.js.map +1 -1
  133. package/dist/dictionary/definition/index.d.ts +0 -1
  134. package/dist/dictionary/definition/index.js +0 -1
  135. package/dist/dictionary/definition/index.js.map +1 -1
  136. package/dist/dictionary/definition/message-definition.js +2 -2
  137. package/dist/dictionary/definition/message-definition.js.map +1 -1
  138. package/dist/dictionary/definition/simple-field-definition.d.ts +1 -1
  139. package/dist/dictionary/definition/simple-field-definition.js +5 -4
  140. package/dist/dictionary/definition/simple-field-definition.js.map +1 -1
  141. package/dist/dictionary/dict-primitive.d.ts +0 -11
  142. package/dist/dictionary/dict-primitive.js +0 -7
  143. package/dist/dictionary/dict-primitive.js.map +1 -1
  144. package/dist/dictionary/fix-definition-source.d.ts +6 -0
  145. package/dist/dictionary/fix-definition-source.js +11 -0
  146. package/dist/dictionary/fix-definition-source.js.map +1 -0
  147. package/dist/dictionary/fix-versions.d.ts +0 -9
  148. package/dist/dictionary/fix-versions.js +1 -39
  149. package/dist/dictionary/fix-versions.js.map +1 -1
  150. package/dist/dictionary/index.d.ts +1 -5
  151. package/dist/dictionary/index.js +1 -5
  152. package/dist/dictionary/index.js.map +1 -1
  153. package/dist/dictionary/parser/fix-repository/abbreviations-parser.d.ts +1 -3
  154. package/dist/dictionary/parser/fix-repository/abbreviations-parser.js +2 -3
  155. package/dist/dictionary/parser/fix-repository/abbreviations-parser.js.map +1 -1
  156. package/dist/dictionary/parser/fix-repository/base-parser.d.ts +2 -4
  157. package/dist/dictionary/parser/fix-repository/base-parser.js +1 -2
  158. package/dist/dictionary/parser/fix-repository/base-parser.js.map +1 -1
  159. package/dist/dictionary/parser/fix-repository/components-parser.d.ts +1 -3
  160. package/dist/dictionary/parser/fix-repository/components-parser.js +2 -3
  161. package/dist/dictionary/parser/fix-repository/components-parser.js.map +1 -1
  162. package/dist/dictionary/parser/fix-repository/data-types-parser.d.ts +1 -3
  163. package/dist/dictionary/parser/fix-repository/data-types-parser.js +2 -3
  164. package/dist/dictionary/parser/fix-repository/data-types-parser.js.map +1 -1
  165. package/dist/dictionary/parser/fix-repository/enums-parser.d.ts +1 -3
  166. package/dist/dictionary/parser/fix-repository/enums-parser.js +2 -3
  167. package/dist/dictionary/parser/fix-repository/enums-parser.js.map +1 -1
  168. package/dist/dictionary/parser/fix-repository/fields-parser.d.ts +1 -3
  169. package/dist/dictionary/parser/fix-repository/fields-parser.js +2 -3
  170. package/dist/dictionary/parser/fix-repository/fields-parser.js.map +1 -1
  171. package/dist/dictionary/parser/fix-repository/messages-parser.d.ts +1 -3
  172. package/dist/dictionary/parser/fix-repository/messages-parser.js +2 -3
  173. package/dist/dictionary/parser/fix-repository/messages-parser.js.map +1 -1
  174. package/dist/dictionary/parser/fix-repository/msg-contents-parser.d.ts +1 -3
  175. package/dist/dictionary/parser/fix-repository/msg-contents-parser.js +2 -3
  176. package/dist/dictionary/parser/fix-repository/msg-contents-parser.js.map +1 -1
  177. package/dist/dictionary/parser/fix-repository/repository-abbreviation.d.ts +5 -0
  178. package/dist/dictionary/parser/fix-repository/repository-abbreviation.js +3 -0
  179. package/dist/dictionary/parser/fix-repository/repository-abbreviation.js.map +1 -0
  180. package/dist/dictionary/parser/fix-repository/repository-component.d.ts +10 -0
  181. package/dist/dictionary/parser/fix-repository/repository-component.js +3 -0
  182. package/dist/dictionary/parser/fix-repository/repository-component.js.map +1 -0
  183. package/dist/dictionary/parser/fix-repository/repository-data-type.d.ts +6 -0
  184. package/dist/dictionary/parser/fix-repository/repository-data-type.js +3 -0
  185. package/dist/dictionary/parser/fix-repository/repository-data-type.js.map +1 -0
  186. package/dist/dictionary/parser/fix-repository/repository-enum.d.ts +7 -0
  187. package/dist/{transport/fix-msg-factory.js → dictionary/parser/fix-repository/repository-enum.js} +1 -1
  188. package/dist/dictionary/parser/fix-repository/repository-enum.js.map +1 -0
  189. package/dist/dictionary/parser/fix-repository/repository-field.d.ts +11 -0
  190. package/dist/dictionary/parser/fix-repository/repository-field.js +3 -0
  191. package/dist/dictionary/parser/fix-repository/repository-field.js.map +1 -0
  192. package/dist/dictionary/parser/fix-repository/repository-message.d.ts +11 -0
  193. package/dist/{transport/make-fixl-session.js → dictionary/parser/fix-repository/repository-message.js} +1 -1
  194. package/dist/dictionary/parser/fix-repository/repository-message.js.map +1 -0
  195. package/dist/dictionary/parser/fix-repository/repository-msg-content.d.ts +9 -0
  196. package/dist/dictionary/parser/fix-repository/repository-msg-content.js +3 -0
  197. package/dist/dictionary/parser/fix-repository/repository-msg-content.js.map +1 -0
  198. package/dist/dictionary/parser/fix-repository/repository-type.d.ts +0 -53
  199. package/dist/dictionary/parser/fix-repository/repository-type.js +0 -2
  200. package/dist/dictionary/parser/fix-repository/repository-type.js.map +1 -1
  201. package/dist/dictionary/parser/fix-repository/repository-xml-parser.js +10 -10
  202. package/dist/dictionary/parser/fix-repository/repository-xml-parser.js.map +1 -1
  203. package/dist/dictionary/parser/fix-repository/repository.d.ts +12 -1
  204. package/dist/dictionary/parser/fix-repository/repository.js +50 -28
  205. package/dist/dictionary/parser/fix-repository/repository.js.map +1 -1
  206. package/dist/dictionary/parser/fixml/components-parser.d.ts +1 -1
  207. package/dist/dictionary/parser/fixml/components-parser.js.map +1 -1
  208. package/dist/dictionary/parser/fixml/fields-parser.d.ts +1 -1
  209. package/dist/dictionary/parser/fixml/fields-parser.js.map +1 -1
  210. package/dist/dictionary/parser/fixml/fix-xsd-parser.js +3 -2
  211. package/dist/dictionary/parser/fixml/fix-xsd-parser.js.map +1 -1
  212. package/dist/dictionary/parser/fixml/include-graph.js.map +1 -1
  213. package/dist/dictionary/parser/fixml/xsd-parser.d.ts +1 -1
  214. package/dist/dictionary/parser/fixml/xsd-parser.js.map +1 -1
  215. package/dist/dictionary/parser/quickfix/field-definition-parser.d.ts +4 -4
  216. package/dist/dictionary/parser/quickfix/field-definition-parser.js +3 -3
  217. package/dist/dictionary/parser/quickfix/field-definition-parser.js.map +1 -1
  218. package/dist/dictionary/parser/quickfix/field-set-parser.d.ts +4 -4
  219. package/dist/dictionary/parser/quickfix/field-set-parser.js +3 -3
  220. package/dist/dictionary/parser/quickfix/field-set-parser.js.map +1 -1
  221. package/dist/dictionary/parser/quickfix/message-parser.d.ts +4 -4
  222. package/dist/dictionary/parser/quickfix/message-parser.js +3 -3
  223. package/dist/dictionary/parser/quickfix/message-parser.js.map +1 -1
  224. package/dist/dictionary/parser/quickfix/node-parser.d.ts +4 -5
  225. package/dist/dictionary/parser/quickfix/node-parser.js +4 -4
  226. package/dist/dictionary/parser/quickfix/node-parser.js.map +1 -1
  227. package/dist/dictionary/parser/quickfix/parse-state.d.ts +8 -0
  228. package/dist/dictionary/parser/quickfix/parse-state.js +13 -0
  229. package/dist/dictionary/parser/quickfix/parse-state.js.map +1 -0
  230. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.d.ts +1 -9
  231. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +28 -35
  232. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
  233. package/dist/dictionary/sax-node.d.ts +6 -0
  234. package/dist/{types/FIX4.4/quickfix/set/trailer.js → dictionary/sax-node.js} +1 -1
  235. package/dist/dictionary/sax-node.js.map +1 -0
  236. package/dist/dictionary/set-reduce.d.ts +5 -12
  237. package/dist/dictionary/set-reduce.js +28 -26
  238. package/dist/dictionary/set-reduce.js.map +1 -1
  239. package/dist/dictionary/type-dispatcher.d.ts +12 -0
  240. package/dist/dictionary/type-dispatcher.js +3 -0
  241. package/dist/dictionary/type-dispatcher.js.map +1 -0
  242. package/dist/dictionary/version-util.d.ts +4 -0
  243. package/dist/dictionary/version-util.js +36 -0
  244. package/dist/dictionary/version-util.js.map +1 -0
  245. package/dist/index.d.ts +1 -0
  246. package/dist/index.js +1 -0
  247. package/dist/index.js.map +1 -1
  248. package/dist/jsfix-cmd.d.ts +5 -0
  249. package/dist/jsfix-cmd.js +28 -21
  250. package/dist/jsfix-cmd.js.map +1 -1
  251. package/dist/runtime/di-tokens.d.ts +28 -0
  252. package/dist/runtime/di-tokens.js +33 -0
  253. package/dist/runtime/di-tokens.js.map +1 -0
  254. package/dist/runtime/engine-factory.d.ts +4 -0
  255. package/dist/runtime/engine-factory.js +3 -0
  256. package/dist/runtime/engine-factory.js.map +1 -0
  257. package/dist/runtime/index.d.ts +5 -0
  258. package/dist/runtime/index.js +18 -0
  259. package/dist/runtime/index.js.map +1 -0
  260. package/dist/runtime/make-config.d.ts +11 -0
  261. package/dist/runtime/make-config.js +57 -0
  262. package/dist/runtime/make-config.js.map +1 -0
  263. package/dist/runtime/session-container.d.ts +16 -0
  264. package/dist/runtime/session-container.js +168 -0
  265. package/dist/runtime/session-container.js.map +1 -0
  266. package/dist/runtime/session-launcher.d.ts +27 -0
  267. package/dist/runtime/session-launcher.js +131 -0
  268. package/dist/runtime/session-launcher.js.map +1 -0
  269. package/dist/sample/http/oms/app.d.ts +1 -1
  270. package/dist/sample/http/oms/app.js +16 -14
  271. package/dist/sample/http/oms/app.js.map +1 -1
  272. package/dist/sample/http/oms/http-client.js +22 -2
  273. package/dist/sample/http/oms/http-client.js.map +1 -1
  274. package/dist/sample/http/oms/http-server.js +21 -2
  275. package/dist/sample/http/oms/http-server.js.map +1 -1
  276. package/dist/sample/tcp/qf-md/app.d.ts +1 -1
  277. package/dist/sample/tcp/qf-md/app.js +11 -11
  278. package/dist/sample/tcp/qf-md/app.js.map +1 -1
  279. package/dist/sample/tcp/qf-md/md-client.js +21 -2
  280. package/dist/sample/tcp/qf-md/md-client.js.map +1 -1
  281. package/dist/sample/tcp/qf-md/md-server.js +20 -2
  282. package/dist/sample/tcp/qf-md/md-server.js.map +1 -1
  283. package/dist/sample/tcp/recovering-skeleton/app.d.ts +1 -1
  284. package/dist/sample/tcp/recovering-skeleton/app.js +36 -16
  285. package/dist/sample/tcp/recovering-skeleton/app.js.map +1 -1
  286. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.d.ts +3 -1
  287. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +30 -8
  288. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
  289. package/dist/sample/tcp/recovering-skeleton/skeleton-client.d.ts +1 -1
  290. package/dist/sample/tcp/recovering-skeleton/skeleton-client.js +22 -3
  291. package/dist/sample/tcp/recovering-skeleton/skeleton-client.js.map +1 -1
  292. package/dist/sample/tcp/recovering-skeleton/skeleton-server.js +21 -2
  293. package/dist/sample/tcp/recovering-skeleton/skeleton-server.js.map +1 -1
  294. package/dist/sample/tcp/skeleton/app.d.ts +1 -1
  295. package/dist/sample/tcp/skeleton/app.js +8 -13
  296. package/dist/sample/tcp/skeleton/app.js.map +1 -1
  297. package/dist/sample/tcp/skeleton/skeleton-session.d.ts +1 -1
  298. package/dist/sample/tcp/skeleton/skeleton-session.js +26 -4
  299. package/dist/sample/tcp/skeleton/skeleton-session.js.map +1 -1
  300. package/dist/sample/tcp/tls-trade-capture/app.d.ts +1 -1
  301. package/dist/sample/tcp/tls-trade-capture/app.js +4 -24
  302. package/dist/sample/tcp/tls-trade-capture/app.js.map +1 -1
  303. package/dist/sample/tcp/trade-capture/app-launcher.d.ts +6 -0
  304. package/dist/sample/tcp/trade-capture/app-launcher.js +21 -0
  305. package/dist/sample/tcp/trade-capture/app-launcher.js.map +1 -0
  306. package/dist/sample/tcp/trade-capture/app.d.ts +1 -1
  307. package/dist/sample/tcp/trade-capture/app.js +4 -21
  308. package/dist/sample/tcp/trade-capture/app.js.map +1 -1
  309. package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
  310. package/dist/sample/tcp/trade-capture/trade-capture-server.js.map +1 -1
  311. package/dist/sample/tcp/trade-capture/trade-factory.js +7 -1
  312. package/dist/sample/tcp/trade-capture/trade-factory.js.map +1 -1
  313. package/dist/store/fix-msg-ascii-store-resend.d.ts +1 -1
  314. package/dist/store/fix-msg-ascii-store-resend.js +2 -1
  315. package/dist/store/fix-msg-ascii-store-resend.js.map +1 -1
  316. package/dist/store/fix-msg-memory-store.d.ts +1 -1
  317. package/dist/store/fix-msg-memory-store.js.map +1 -1
  318. package/dist/store/fix-msg-store-record.d.ts +2 -0
  319. package/dist/store/fix-msg-store-record.js +4 -0
  320. package/dist/store/fix-msg-store-record.js.map +1 -1
  321. package/dist/store/fix-msg-store-state.d.ts +6 -0
  322. package/dist/store/fix-msg-store-state.js +3 -0
  323. package/dist/store/fix-msg-store-state.js.map +1 -0
  324. package/dist/store/fix-msg-store.d.ts +1 -6
  325. package/dist/store/fix-msg-store.js.map +1 -1
  326. package/dist/test/ascii/ascii-encoder.test.d.ts +1 -0
  327. package/dist/test/{ascii-encoder.test.js → ascii/ascii-encoder.test.js} +57 -55
  328. package/dist/test/ascii/ascii-encoder.test.js.map +1 -0
  329. package/dist/test/ascii/ascii-parser.test.d.ts +1 -0
  330. package/dist/test/{ascii-parser.test.js → ascii/ascii-parser.test.js} +33 -52
  331. package/dist/test/ascii/ascii-parser.test.js.map +1 -0
  332. package/dist/test/ascii/ascii-segment.test.d.ts +1 -0
  333. package/dist/test/{ascii-segment.test.js → ascii/ascii-segment.test.js} +20 -41
  334. package/dist/test/ascii/ascii-segment.test.js.map +1 -0
  335. package/dist/test/ascii/ascii-store-replay.test.d.ts +1 -0
  336. package/dist/test/{ascii-store-replay.test.js → ascii/ascii-store-replay.test.js} +14 -43
  337. package/dist/test/ascii/ascii-store-replay.test.js.map +1 -0
  338. package/dist/test/ascii/ascii-tag-pos.test.d.ts +1 -0
  339. package/dist/test/{ascii-tag-pos.test.js → ascii/ascii-tag-pos.test.js} +10 -10
  340. package/dist/test/ascii/ascii-tag-pos.test.js.map +1 -0
  341. package/dist/test/ascii/execution-report.test.d.ts +1 -0
  342. package/dist/test/{execution-report.test.js → ascii/execution-report.test.js} +51 -52
  343. package/dist/test/ascii/execution-report.test.js.map +1 -0
  344. package/dist/test/ascii/fix-log-replay.test.d.ts +1 -0
  345. package/dist/test/{fix-log-replay.test.js → ascii/fix-log-replay.test.js} +8 -6
  346. package/dist/test/ascii/fix-log-replay.test.js.map +1 -0
  347. package/dist/test/ascii/fix-repo-dict.test.d.ts +1 -0
  348. package/dist/test/{fix-repo-dict.test.js → ascii/fix-repo-dict.test.js} +8 -7
  349. package/dist/test/ascii/fix-repo-dict.test.js.map +1 -0
  350. package/dist/test/ascii/includes.test.d.ts +1 -0
  351. package/dist/test/{includes.test.js → ascii/includes.test.js} +3 -2
  352. package/dist/test/ascii/includes.test.js.map +1 -0
  353. package/dist/test/ascii/logon.test.d.ts +1 -0
  354. package/dist/test/{logon.test.js → ascii/logon.test.js} +11 -13
  355. package/dist/test/ascii/logon.test.js.map +1 -0
  356. package/dist/test/ascii/memory-store.test.d.ts +1 -0
  357. package/dist/test/{memory-store.test.js → ascii/memory-store.test.js} +12 -12
  358. package/dist/test/ascii/memory-store.test.js.map +1 -0
  359. package/dist/test/ascii/qf-full-msg.test.d.ts +1 -0
  360. package/dist/test/{qf-full-msg.test.js → ascii/qf-full-msg.test.js} +21 -17
  361. package/dist/test/ascii/qf-full-msg.test.js.map +1 -0
  362. package/dist/test/ascii/repo-full-ascii-msg.test.d.ts +1 -0
  363. package/dist/test/{repo-full-ascii-msg.test.js → ascii/repo-full-ascii-msg.test.js} +20 -16
  364. package/dist/test/ascii/repo-full-ascii-msg.test.js.map +1 -0
  365. package/dist/test/ascii/session-state.test.d.ts +1 -0
  366. package/dist/test/{session-state.test.js → ascii/session-state.test.js} +2 -1
  367. package/dist/test/ascii/session-state.test.js.map +1 -0
  368. package/dist/test/ascii/session.test.d.ts +1 -0
  369. package/dist/test/{session.test.js → ascii/session.test.js} +14 -145
  370. package/dist/test/ascii/session.test.js.map +1 -0
  371. package/dist/test/ascii/time-formatter.test.d.ts +1 -0
  372. package/dist/test/{time-formatter.test.js → ascii/time-formatter.test.js} +4 -2
  373. package/dist/test/ascii/time-formatter.test.js.map +1 -0
  374. package/dist/test/ascii/view-decode.test.d.ts +1 -0
  375. package/dist/test/{view-decode.test.js → ascii/view-decode.test.js} +11 -36
  376. package/dist/test/ascii/view-decode.test.js.map +1 -0
  377. package/dist/test/elastic-buffer.test.d.ts +1 -1
  378. package/dist/test/elastic-buffer.test.js +3 -1
  379. package/dist/test/elastic-buffer.test.js.map +1 -1
  380. package/dist/test/encode-proxy.test.d.ts +1 -1
  381. package/dist/test/encode-proxy.test.js +9 -9
  382. package/dist/test/encode-proxy.test.js.map +1 -1
  383. package/dist/test/env/experiment.d.ts +23 -0
  384. package/dist/test/env/experiment.js +33 -0
  385. package/dist/test/env/experiment.js.map +1 -0
  386. package/dist/test/env/parsing-result.d.ts +10 -0
  387. package/dist/test/env/parsing-result.js +14 -0
  388. package/dist/test/env/parsing-result.js.map +1 -0
  389. package/dist/test/env/setup.d.ts +39 -0
  390. package/dist/test/env/setup.js +98 -0
  391. package/dist/test/env/setup.js.map +1 -0
  392. package/dist/test/env/skeleton-runner.d.ts +15 -0
  393. package/dist/test/env/skeleton-runner.js +108 -0
  394. package/dist/test/env/skeleton-runner.js.map +1 -0
  395. package/dist/test/env/test-recovery.d.ts +13 -0
  396. package/dist/test/env/test-recovery.js +41 -0
  397. package/dist/test/env/test-recovery.js.map +1 -0
  398. package/dist/test/{to-views.d.ts → env/to-views.d.ts} +2 -2
  399. package/dist/test/{to-views.js → env/to-views.js} +8 -7
  400. package/dist/test/env/to-views.js.map +1 -0
  401. package/dist/test/fixml/fixml-alloc-parse.test.d.ts +1 -0
  402. package/dist/test/{fixml-alloc-parse.test.js → fixml/fixml-alloc-parse.test.js} +2 -1
  403. package/dist/test/fixml/fixml-alloc-parse.test.js.map +1 -0
  404. package/dist/test/fixml/fixml-mkt-data-fut-parse.test.d.ts +1 -0
  405. package/dist/test/{fixml-mkt-data-fut-parse.test.js → fixml/fixml-mkt-data-fut-parse.test.js} +2 -1
  406. package/dist/test/fixml/fixml-mkt-data-fut-parse.test.js.map +1 -0
  407. package/dist/test/fixml/fixml-mkt-data-settle-parse.test.d.ts +1 -0
  408. package/dist/test/{fixml-mkt-data-settle-parse.test.js → fixml/fixml-mkt-data-settle-parse.test.js} +2 -1
  409. package/dist/test/fixml/fixml-mkt-data-settle-parse.test.js.map +1 -0
  410. package/dist/test/fixml/fixml-tc-bi-lateral-parse.test.d.ts +1 -0
  411. package/dist/test/{fixml-tc-bi-lateral-parse.test.js → fixml/fixml-tc-bi-lateral-parse.test.js} +2 -1
  412. package/dist/test/fixml/fixml-tc-bi-lateral-parse.test.js.map +1 -0
  413. package/dist/test/fixml/repo-full-fixml-msg.test.d.ts +1 -0
  414. package/dist/test/{repo-full-fixml-msg.test.js → fixml/repo-full-fixml-msg.test.js} +17 -10
  415. package/dist/test/fixml/repo-full-fixml-msg.test.js.map +1 -0
  416. package/dist/transport/ascii/ascii-msg-transmitter.js +25 -6
  417. package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
  418. package/dist/transport/ascii/ascii-session-msg-factory.d.ts +2 -2
  419. package/dist/transport/ascii/ascii-session-msg-factory.js +1 -1
  420. package/dist/transport/ascii/ascii-session-msg-factory.js.map +1 -1
  421. package/dist/transport/ascii/ascii-session.d.ts +1 -1
  422. package/dist/transport/ascii/ascii-session.js +26 -23
  423. package/dist/transport/ascii/ascii-session.js.map +1 -1
  424. package/dist/transport/ascii/index.d.ts +0 -1
  425. package/dist/transport/ascii/index.js +0 -1
  426. package/dist/transport/ascii/index.js.map +1 -1
  427. package/dist/transport/duplex/http-duplex.d.ts +1 -1
  428. package/dist/transport/duplex/http-duplex.js.map +1 -1
  429. package/dist/transport/duplex/tcp-duplex.js +22 -2
  430. package/dist/transport/duplex/tcp-duplex.js.map +1 -1
  431. package/dist/transport/factory/index.d.ts +1 -0
  432. package/dist/transport/factory/index.js +14 -0
  433. package/dist/transport/factory/index.js.map +1 -0
  434. package/dist/transport/{msg-transport.d.ts → factory/msg-transport.d.ts} +4 -4
  435. package/dist/transport/factory/msg-transport.js +61 -0
  436. package/dist/transport/factory/msg-transport.js.map +1 -0
  437. package/dist/transport/fix-acceptor.d.ts +2 -2
  438. package/dist/transport/fix-acceptor.js.map +1 -1
  439. package/dist/transport/fix-entity.d.ts +8 -0
  440. package/dist/transport/fix-entity.js +12 -0
  441. package/dist/transport/fix-entity.js.map +1 -0
  442. package/dist/transport/fix-initiator.d.ts +2 -2
  443. package/dist/transport/fix-initiator.js.map +1 -1
  444. package/dist/transport/fixml/fixml-msg-transmitter.js +23 -5
  445. package/dist/transport/fixml/fixml-msg-transmitter.js.map +1 -1
  446. package/dist/transport/fixml/fixml-session-msg-factory.d.ts +2 -2
  447. package/dist/transport/fixml/fixml-session-msg-factory.js +1 -1
  448. package/dist/transport/fixml/fixml-session-msg-factory.js.map +1 -1
  449. package/dist/transport/fixml/fixml-session.d.ts +1 -1
  450. package/dist/transport/fixml/fixml-session.js +3 -3
  451. package/dist/transport/fixml/fixml-session.js.map +1 -1
  452. package/dist/transport/fixml/index.d.ts +0 -2
  453. package/dist/transport/fixml/index.js +0 -2
  454. package/dist/transport/fixml/index.js.map +1 -1
  455. package/dist/transport/http/html-options.d.ts +8 -0
  456. package/dist/{store/replay-record.js → transport/http/html-options.js} +1 -1
  457. package/dist/transport/http/html-options.js.map +1 -0
  458. package/dist/transport/http/html-route.d.ts +5 -0
  459. package/dist/{types/FIX4.4/quickfix/set/header.js → transport/http/html-route.js} +1 -1
  460. package/dist/transport/http/html-route.js.map +1 -0
  461. package/dist/transport/http/http-acceptor-listener.d.ts +7 -0
  462. package/dist/transport/http/http-acceptor-listener.js +68 -0
  463. package/dist/transport/http/http-acceptor-listener.js.map +1 -0
  464. package/dist/transport/http/http-acceptor.js +24 -5
  465. package/dist/transport/http/http-acceptor.js.map +1 -1
  466. package/dist/transport/http/http-adapter.d.ts +7 -0
  467. package/dist/transport/http/http-adapter.js +3 -0
  468. package/dist/transport/http/http-adapter.js.map +1 -0
  469. package/dist/transport/http/http-initiator.d.ts +9 -3
  470. package/dist/transport/http/http-initiator.js +57 -26
  471. package/dist/transport/http/http-initiator.js.map +1 -1
  472. package/dist/transport/http/http-json-sample-adapter.d.ts +2 -1
  473. package/dist/transport/http/http-json-sample-adapter.js +21 -2
  474. package/dist/transport/http/http-json-sample-adapter.js.map +1 -1
  475. package/dist/transport/http/http-transaction.d.ts +1 -1
  476. package/dist/transport/http/http-transaction.js.map +1 -1
  477. package/dist/transport/http/http-transport-description.d.ts +8 -0
  478. package/dist/transport/http/http-transport-description.js +3 -0
  479. package/dist/transport/http/http-transport-description.js.map +1 -0
  480. package/dist/transport/http/index.d.ts +1 -0
  481. package/dist/transport/http/index.js +1 -0
  482. package/dist/transport/http/index.js.map +1 -1
  483. package/dist/transport/index.d.ts +11 -10
  484. package/dist/transport/index.js +11 -10
  485. package/dist/transport/index.js.map +1 -1
  486. package/dist/transport/msg-application.d.ts +12 -0
  487. package/dist/transport/msg-application.js +3 -0
  488. package/dist/transport/msg-application.js.map +1 -0
  489. package/dist/transport/msg-transmitter.d.ts +5 -5
  490. package/dist/transport/msg-transmitter.js +2 -3
  491. package/dist/transport/msg-transmitter.js.map +1 -1
  492. package/dist/transport/{a-session-msg-factory.d.ts → session/a-session-msg-factory.d.ts} +3 -3
  493. package/dist/transport/{a-session-msg-factory.js → session/a-session-msg-factory.js} +1 -1
  494. package/dist/transport/session/a-session-msg-factory.js.map +1 -0
  495. package/dist/transport/session/fix-session-state-args.d.ts +8 -0
  496. package/dist/transport/session/fix-session-state-args.js +3 -0
  497. package/dist/transport/session/fix-session-state-args.js.map +1 -0
  498. package/dist/transport/session/fix-session-state.d.ts +32 -0
  499. package/dist/transport/{fix-session-state.js → session/fix-session-state.js} +22 -55
  500. package/dist/transport/session/fix-session-state.js.map +1 -0
  501. package/dist/transport/{fix-session.d.ts → session/fix-session.d.ts} +6 -5
  502. package/dist/transport/{fix-session.js → session/fix-session.js} +45 -43
  503. package/dist/transport/session/fix-session.js.map +1 -0
  504. package/dist/transport/{make-fixl-session.d.ts → session/make-fix-session.d.ts} +1 -1
  505. package/dist/transport/session/make-fix-session.js +3 -0
  506. package/dist/transport/session/make-fix-session.js.map +1 -0
  507. package/dist/transport/session/session-description.d.ts +17 -0
  508. package/dist/transport/{session-description.js → session/session-description.js} +0 -0
  509. package/dist/transport/session/session-description.js.map +1 -0
  510. package/dist/transport/{fix-msg-factory.d.ts → session/session-msg-factory.d.ts} +2 -2
  511. package/dist/transport/session/session-msg-factory.js +3 -0
  512. package/dist/transport/session/session-msg-factory.js.map +1 -0
  513. package/dist/transport/session/session-state.d.ts +25 -0
  514. package/dist/transport/session/session-state.js +30 -0
  515. package/dist/transport/session/session-state.js.map +1 -0
  516. package/dist/transport/tcp/index.d.ts +3 -2
  517. package/dist/transport/tcp/index.js +3 -2
  518. package/dist/transport/tcp/index.js.map +1 -1
  519. package/dist/transport/tcp/recovering-tcp-initiator.d.ts +7 -9
  520. package/dist/transport/tcp/recovering-tcp-initiator.js +41 -16
  521. package/dist/transport/tcp/recovering-tcp-initiator.js.map +1 -1
  522. package/dist/transport/tcp/tcp-acceptor-listener.d.ts +7 -0
  523. package/dist/transport/tcp/tcp-acceptor-listener.js +70 -0
  524. package/dist/transport/tcp/tcp-acceptor-listener.js.map +1 -0
  525. package/dist/transport/tcp/tcp-acceptor.js +29 -12
  526. package/dist/transport/tcp/tcp-acceptor.js.map +1 -1
  527. package/dist/transport/tcp/tcp-initiator-connector.d.ts +10 -0
  528. package/dist/transport/tcp/tcp-initiator-connector.js +97 -0
  529. package/dist/transport/tcp/tcp-initiator-connector.js.map +1 -0
  530. package/dist/transport/tcp/tcp-initiator.d.ts +2 -2
  531. package/dist/transport/tcp/tcp-initiator.js +28 -9
  532. package/dist/transport/tcp/tcp-initiator.js.map +1 -1
  533. package/dist/transport/tcp/tcp-transport-description.d.ts +6 -0
  534. package/dist/transport/tcp/tcp-transport-description.js +3 -0
  535. package/dist/transport/tcp/tcp-transport-description.js.map +1 -0
  536. package/dist/transport/tcp/tls-options-factory.d.ts +9 -0
  537. package/dist/transport/tcp/tls-options-factory.js +53 -0
  538. package/dist/transport/tcp/tls-options-factory.js.map +1 -0
  539. package/dist/transport/tcp/tls-options.d.ts +10 -5
  540. package/dist/transport/tcp/tls-options.js +0 -49
  541. package/dist/transport/tcp/tls-options.js.map +1 -1
  542. package/dist/transport/tick-action.d.ts +8 -0
  543. package/dist/transport/tick-action.js +13 -0
  544. package/dist/transport/tick-action.js.map +1 -0
  545. package/dist/util/buffer-helper.js +1 -1
  546. package/dist/util/buffer-helper.js.map +1 -1
  547. package/dist/util/definition-factory.d.ts +10 -0
  548. package/dist/util/definition-factory.js +56 -0
  549. package/dist/util/definition-factory.js.map +1 -0
  550. package/dist/util/dictionary-path.d.ts +4 -0
  551. package/dist/util/dictionary-path.js +3 -0
  552. package/dist/util/dictionary-path.js.map +1 -0
  553. package/dist/util/index.d.ts +1 -1
  554. package/dist/util/index.js +1 -1
  555. package/dist/util/index.js.map +1 -1
  556. package/dist/util/json-helper.d.ts +3 -1
  557. package/dist/util/json-helper.js +13 -12
  558. package/dist/util/json-helper.js.map +1 -1
  559. package/dist/util/message-generator.d.ts +1 -1
  560. package/dist/util/message-generator.js +16 -15
  561. package/dist/util/message-generator.js.map +1 -1
  562. package/dist/util/replay.d.ts +6 -3
  563. package/dist/util/replay.js +24 -26
  564. package/dist/util/replay.js.map +1 -1
  565. package/package.json +18 -13
  566. package/script/build.cmd +1 -0
  567. package/script/build.sh +1 -0
  568. package/script/test.cmd +3 -0
  569. package/src/buffer/{ascii-chars.ts → ascii/ascii-chars.ts} +0 -0
  570. package/src/buffer/ascii/ascii-encoder.ts +9 -6
  571. package/src/buffer/ascii/ascii-parser-state.ts +7 -12
  572. package/src/buffer/ascii/ascii-parser.ts +23 -16
  573. package/src/buffer/ascii/ascii-segment-parser.ts +14 -8
  574. package/src/buffer/ascii/ascii-view.ts +4 -9
  575. package/src/buffer/ascii/index.ts +1 -0
  576. package/src/buffer/ascii/parse-state.ts +8 -0
  577. package/src/buffer/ascii/time-formatter.ts +1 -1
  578. package/src/buffer/elastic-buffer.ts +7 -2
  579. package/src/buffer/encode-proxy.ts +9 -4
  580. package/src/buffer/fixml/fixml-encoder.ts +15 -11
  581. package/src/buffer/fixml/fixml-parser.ts +16 -6
  582. package/src/buffer/fixml/fixml-view.ts +4 -9
  583. package/src/buffer/fixml/populated-attributes.ts +6 -0
  584. package/src/buffer/index.ts +4 -8
  585. package/src/buffer/msg-encoder.ts +2 -1
  586. package/src/buffer/msg-view.ts +13 -9
  587. package/src/buffer/{segment-description.ts → segment/segment-description.ts} +4 -11
  588. package/src/buffer/{segment-summary.ts → segment/segment-summary.ts} +0 -0
  589. package/src/buffer/segment/segment-type.ts +8 -0
  590. package/src/buffer/structure.ts +3 -3
  591. package/src/buffer/{tag-pos.ts → tag/tag-pos.ts} +0 -0
  592. package/src/buffer/tag/tag-type.ts +13 -0
  593. package/src/buffer/{tags.ts → tag/tags.ts} +4 -16
  594. package/src/config/get-js-fx-logger.ts +4 -0
  595. package/src/config/index.ts +1 -0
  596. package/src/config/js-fix-config.ts +5 -2
  597. package/src/config/js-fix-logger.ts +0 -3
  598. package/src/dictionary/compiler/compiler-type.ts +3 -3
  599. package/src/dictionary/compiler/enum-compiler.ts +12 -1
  600. package/src/dictionary/compiler/msg-compiler.ts +8 -7
  601. package/src/dictionary/contained/contained-component-field.ts +2 -1
  602. package/src/dictionary/contained/contained-field-dispatch.ts +3 -7
  603. package/src/dictionary/contained/contained-field-dispatcher.ts +9 -0
  604. package/src/dictionary/contained/contained-field-set.ts +5 -3
  605. package/src/dictionary/contained/contained-field-type.ts +5 -0
  606. package/src/dictionary/contained/contained-field.ts +1 -6
  607. package/src/dictionary/contained/contained-group-field.ts +2 -1
  608. package/src/dictionary/contained/contained-simple-field.ts +2 -1
  609. package/src/dictionary/contained/field-dispatcher.ts +9 -0
  610. package/src/dictionary/contained/fields-dispatch.ts +46 -0
  611. package/src/dictionary/contained/index.ts +2 -0
  612. package/src/dictionary/contained-set-type.ts +5 -0
  613. package/src/dictionary/definition/component-field-definition.ts +1 -1
  614. package/src/dictionary/definition/fix-definitions.ts +2 -1
  615. package/src/dictionary/definition/group-field-definition.ts +1 -1
  616. package/src/dictionary/definition/index.ts +0 -1
  617. package/src/dictionary/definition/message-definition.ts +1 -1
  618. package/src/dictionary/definition/simple-field-definition.ts +3 -1
  619. package/src/dictionary/dict-primitive.ts +0 -13
  620. package/src/dictionary/fix-definition-source.ts +6 -0
  621. package/src/dictionary/fix-versions.ts +0 -32
  622. package/src/dictionary/index.ts +1 -5
  623. package/src/dictionary/parser/fix-repository/abbreviations-parser.ts +2 -3
  624. package/src/dictionary/parser/fix-repository/base-parser.ts +2 -3
  625. package/src/dictionary/parser/fix-repository/components-parser.ts +2 -3
  626. package/src/dictionary/parser/fix-repository/data-types-parser.ts +2 -3
  627. package/src/dictionary/parser/fix-repository/enums-parser.ts +2 -3
  628. package/src/dictionary/parser/fix-repository/fields-parser.ts +2 -3
  629. package/src/dictionary/parser/fix-repository/messages-parser.ts +2 -3
  630. package/src/dictionary/parser/fix-repository/msg-contents-parser.ts +2 -3
  631. package/src/dictionary/parser/fix-repository/repository-abbreviation.ts +6 -0
  632. package/src/dictionary/parser/fix-repository/repository-component.ts +11 -0
  633. package/src/dictionary/parser/fix-repository/repository-data-type.ts +7 -0
  634. package/src/dictionary/parser/fix-repository/repository-enum.ts +8 -0
  635. package/src/dictionary/parser/fix-repository/repository-field.ts +12 -0
  636. package/src/dictionary/parser/fix-repository/repository-message.ts +12 -0
  637. package/src/dictionary/parser/fix-repository/repository-msg-content.ts +10 -0
  638. package/src/dictionary/parser/fix-repository/repository-type.ts +0 -59
  639. package/src/dictionary/parser/fix-repository/repository-xml-parser.ts +10 -9
  640. package/src/dictionary/parser/fix-repository/repository.ts +69 -38
  641. package/src/dictionary/parser/fixml/components-parser.ts +6 -3
  642. package/src/dictionary/parser/fixml/fields-parser.ts +1 -1
  643. package/src/dictionary/parser/fixml/fix-xsd-parser.ts +2 -1
  644. package/src/dictionary/parser/fixml/include-graph.ts +2 -1
  645. package/src/dictionary/parser/fixml/xsd-parser.ts +2 -1
  646. package/src/dictionary/parser/quickfix/field-definition-parser.ts +4 -5
  647. package/src/dictionary/parser/quickfix/field-set-parser.ts +4 -5
  648. package/src/dictionary/parser/quickfix/message-parser.ts +4 -5
  649. package/src/dictionary/parser/quickfix/node-parser.ts +3 -6
  650. package/src/dictionary/parser/quickfix/parse-state.ts +8 -0
  651. package/src/dictionary/parser/quickfix/quick-fix-xml-file-parser.ts +9 -15
  652. package/src/dictionary/sax-node.ts +7 -0
  653. package/src/dictionary/set-reduce.ts +30 -31
  654. package/src/dictionary/type-dispatcher.ts +7 -0
  655. package/src/dictionary/version-util.ts +25 -0
  656. package/src/index.ts +1 -0
  657. package/src/jsfix-cmd.ts +31 -16
  658. package/src/runtime/di-tokens.ts +48 -0
  659. package/src/runtime/engine-factory.ts +5 -0
  660. package/src/runtime/index.ts +5 -0
  661. package/src/runtime/make-config.ts +35 -0
  662. package/src/runtime/session-container.ts +180 -0
  663. package/src/runtime/session-launcher.ts +127 -0
  664. package/src/sample/http/oms/app.ts +20 -14
  665. package/src/sample/http/oms/http-client.ts +5 -2
  666. package/src/sample/http/oms/http-server.ts +5 -1
  667. package/src/sample/tcp/qf-md/app.ts +12 -12
  668. package/src/sample/tcp/qf-md/md-client.ts +4 -1
  669. package/src/sample/tcp/qf-md/md-server.ts +3 -1
  670. package/src/sample/tcp/recovering-skeleton/app.ts +37 -15
  671. package/src/sample/tcp/recovering-skeleton/respawn-acceptor.ts +16 -9
  672. package/src/sample/tcp/recovering-skeleton/skeleton-client.ts +4 -2
  673. package/src/sample/tcp/recovering-skeleton/skeleton-server.ts +4 -2
  674. package/src/sample/tcp/skeleton/app.ts +10 -15
  675. package/src/sample/tcp/skeleton/skeleton-session.ts +8 -4
  676. package/src/sample/tcp/tls-trade-capture/app.ts +8 -31
  677. package/src/sample/tcp/trade-capture/app-launcher.ts +22 -0
  678. package/src/sample/tcp/trade-capture/app.ts +3 -26
  679. package/src/sample/tcp/trade-capture/trade-capture-client.ts +2 -1
  680. package/src/sample/tcp/trade-capture/trade-capture-server.ts +2 -1
  681. package/src/sample/tcp/trade-capture/trade-factory.ts +7 -1
  682. package/src/store/fix-msg-ascii-store-resend.ts +3 -2
  683. package/src/store/fix-msg-memory-store.ts +1 -1
  684. package/src/store/fix-msg-store-record.ts +6 -0
  685. package/src/store/fix-msg-store-state.ts +6 -0
  686. package/src/store/fix-msg-store.ts +1 -7
  687. package/src/transport/ascii/ascii-msg-transmitter.ts +9 -5
  688. package/src/transport/ascii/ascii-session-msg-factory.ts +2 -2
  689. package/src/transport/ascii/ascii-session.ts +9 -6
  690. package/src/transport/ascii/index.ts +0 -1
  691. package/src/transport/duplex/http-duplex.ts +1 -1
  692. package/src/transport/duplex/tcp-duplex.ts +4 -1
  693. package/src/transport/factory/index.ts +1 -0
  694. package/src/transport/factory/msg-transport.ts +55 -0
  695. package/src/transport/fix-acceptor.ts +2 -2
  696. package/src/transport/fix-entity.ts +9 -0
  697. package/src/transport/fix-initiator.ts +2 -2
  698. package/src/transport/fixml/fixml-msg-transmitter.ts +8 -4
  699. package/src/transport/fixml/fixml-session-msg-factory.ts +2 -2
  700. package/src/transport/fixml/fixml-session.ts +2 -2
  701. package/src/transport/fixml/index.ts +0 -2
  702. package/src/transport/http/html-options.ts +8 -0
  703. package/src/transport/http/html-route.ts +6 -0
  704. package/src/transport/http/http-acceptor-listener.ts +42 -0
  705. package/src/transport/http/http-acceptor.ts +5 -2
  706. package/src/transport/http/http-adapter.ts +7 -0
  707. package/src/transport/http/http-initiator.ts +40 -25
  708. package/src/transport/http/http-json-sample-adapter.ts +7 -2
  709. package/src/transport/http/http-transaction.ts +1 -1
  710. package/src/transport/http/http-transport-description.ts +9 -0
  711. package/src/transport/http/index.ts +1 -0
  712. package/src/transport/index.ts +11 -10
  713. package/src/transport/msg-application.ts +13 -0
  714. package/src/transport/msg-transmitter.ts +5 -5
  715. package/src/transport/{a-session-msg-factory.ts → session/a-session-msg-factory.ts} +4 -4
  716. package/src/transport/session/fix-session-state-args.ts +9 -0
  717. package/src/transport/{fix-session-state.ts → session/fix-session-state.ts} +4 -44
  718. package/src/transport/{fix-session.ts → session/fix-session.ts} +10 -7
  719. package/src/transport/{make-fixl-session.ts → session/make-fix-session.ts} +1 -1
  720. package/src/transport/session/session-description.ts +18 -0
  721. package/src/transport/{fix-msg-factory.ts → session/session-msg-factory.ts} +2 -2
  722. package/src/transport/session/session-state.ts +25 -0
  723. package/src/transport/tcp/index.ts +3 -2
  724. package/src/transport/tcp/recovering-tcp-initiator.ts +24 -13
  725. package/src/transport/tcp/tcp-acceptor-listener.ts +45 -0
  726. package/src/transport/tcp/tcp-acceptor.ts +11 -10
  727. package/src/transport/tcp/tcp-initiator-connector.ts +71 -0
  728. package/src/transport/tcp/tcp-initiator.ts +10 -6
  729. package/src/transport/tcp/tcp-transport-description.ts +7 -0
  730. package/src/transport/tcp/tls-options-factory.ts +55 -0
  731. package/src/transport/tcp/tls-options.ts +9 -51
  732. package/src/transport/tick-action.ts +8 -0
  733. package/src/util/definition-factory.ts +47 -0
  734. package/src/util/dictionary-path.ts +4 -0
  735. package/src/util/index.ts +1 -1
  736. package/src/util/json-helper.ts +14 -4
  737. package/src/util/message-generator.ts +6 -3
  738. package/src/util/replay.ts +26 -21
  739. package/tsconfig.json +2 -0
  740. package/dist/buffer/ascii-chars.js.map +0 -1
  741. package/dist/buffer/segment-description.js.map +0 -1
  742. package/dist/buffer/segment-summary.js.map +0 -1
  743. package/dist/buffer/tag-pos.js.map +0 -1
  744. package/dist/buffer/tags.js.map +0 -1
  745. package/dist/dictionary/fields-dispatch.js +0 -40
  746. package/dist/dictionary/fields-dispatch.js.map +0 -1
  747. package/dist/sample/launcher.d.ts +0 -12
  748. package/dist/sample/launcher.js +0 -63
  749. package/dist/sample/launcher.js.map +0 -1
  750. package/dist/sample/tcp/recovering-skeleton/respawn-2.d.ts +0 -2
  751. package/dist/sample/tcp/recovering-skeleton/respawn-2.js +0 -3
  752. package/dist/sample/tcp/recovering-skeleton/respawn-2.js.map +0 -1
  753. package/dist/store/fix-msg-ascii-store-recovery.d.ts +0 -12
  754. package/dist/store/fix-msg-ascii-store-recovery.js +0 -60
  755. package/dist/store/fix-msg-ascii-store-recovery.js.map +0 -1
  756. package/dist/store/fix-msg-ascii-store-replay.d.ts +0 -13
  757. package/dist/store/fix-msg-ascii-store-replay.js +0 -60
  758. package/dist/store/fix-msg-ascii-store-replay.js.map +0 -1
  759. package/dist/store/fix-replay-record.d.ts +0 -12
  760. package/dist/store/fix-replay-record.js +0 -12
  761. package/dist/store/fix-replay-record.js.map +0 -1
  762. package/dist/store/fix-resend-record.d.ts +0 -12
  763. package/dist/store/fix-resend-record.js +0 -12
  764. package/dist/store/fix-resend-record.js.map +0 -1
  765. package/dist/store/replay-record.d.ts +0 -6
  766. package/dist/store/replay-record.js.map +0 -1
  767. package/dist/store/store-replay-record.d.ts +0 -12
  768. package/dist/store/store-replay-record.js +0 -12
  769. package/dist/store/store-replay-record.js.map +0 -1
  770. package/dist/tcp/tls-options.d.ts +0 -5
  771. package/dist/tcp/tls-options.js +0 -45
  772. package/dist/tcp/tls-options.js.map +0 -1
  773. package/dist/test/ascii-encode.test.d.ts +0 -1
  774. package/dist/test/ascii-encode.test.js +0 -416
  775. package/dist/test/ascii-encode.test.js.map +0 -1
  776. package/dist/test/ascii-encoder.test.d.ts +0 -1
  777. package/dist/test/ascii-encoder.test.js.map +0 -1
  778. package/dist/test/ascii-parser.test.d.ts +0 -1
  779. package/dist/test/ascii-parser.test.js.map +0 -1
  780. package/dist/test/ascii-segment.test.d.ts +0 -1
  781. package/dist/test/ascii-segment.test.js.map +0 -1
  782. package/dist/test/ascii-store-recovery.test.d.ts +0 -1
  783. package/dist/test/ascii-store-recovery.test.js +0 -50
  784. package/dist/test/ascii-store-recovery.test.js.map +0 -1
  785. package/dist/test/ascii-store-replay.test.d.ts +0 -1
  786. package/dist/test/ascii-store-replay.test.js.map +0 -1
  787. package/dist/test/ascii-tag-pos.test.d.ts +0 -1
  788. package/dist/test/ascii-tag-pos.test.js.map +0 -1
  789. package/dist/test/execution-report.test.d.ts +0 -1
  790. package/dist/test/execution-report.test.js.map +0 -1
  791. package/dist/test/fix-log-replay.test.d.ts +0 -1
  792. package/dist/test/fix-log-replay.test.js.map +0 -1
  793. package/dist/test/fix-repo-dict.test.d.ts +0 -1
  794. package/dist/test/fix-repo-dict.test.js.map +0 -1
  795. package/dist/test/fixml-alloc-parse.test.d.ts +0 -1
  796. package/dist/test/fixml-alloc-parse.test.js.map +0 -1
  797. package/dist/test/fixml-mkt-data-fut-parse.test.d.ts +0 -1
  798. package/dist/test/fixml-mkt-data-fut-parse.test.js.map +0 -1
  799. package/dist/test/fixml-mkt-data-settle-parse.test.d.ts +0 -1
  800. package/dist/test/fixml-mkt-data-settle-parse.test.js.map +0 -1
  801. package/dist/test/fixml-tc-bi-lateral-parse.test.d.ts +0 -1
  802. package/dist/test/fixml-tc-bi-lateral-parse.test.js.map +0 -1
  803. package/dist/test/includes.test.d.ts +0 -1
  804. package/dist/test/includes.test.js.map +0 -1
  805. package/dist/test/logon.test.d.ts +0 -1
  806. package/dist/test/logon.test.js.map +0 -1
  807. package/dist/test/memory-store.test.d.ts +0 -1
  808. package/dist/test/memory-store.test.js.map +0 -1
  809. package/dist/test/qf-full-msg.test.d.ts +0 -1
  810. package/dist/test/qf-full-msg.test.js.map +0 -1
  811. package/dist/test/repo-full-ascii-msg.test.d.ts +0 -1
  812. package/dist/test/repo-full-ascii-msg.test.js.map +0 -1
  813. package/dist/test/repo-full-fixml-msg.test.d.ts +0 -1
  814. package/dist/test/repo-full-fixml-msg.test.js.map +0 -1
  815. package/dist/test/session-state.test.d.ts +0 -1
  816. package/dist/test/session-state.test.js.map +0 -1
  817. package/dist/test/session.test.d.ts +0 -1
  818. package/dist/test/session.test.js.map +0 -1
  819. package/dist/test/time-formatter.test.d.ts +0 -1
  820. package/dist/test/time-formatter.test.js.map +0 -1
  821. package/dist/test/to-views.js.map +0 -1
  822. package/dist/test/view-decode.test.d.ts +0 -1
  823. package/dist/test/view-decode.test.js.map +0 -1
  824. package/dist/transport/a-session-msg-factory.js.map +0 -1
  825. package/dist/transport/ascii-session-msg-factory.d.ts +0 -16
  826. package/dist/transport/ascii-session-msg-factory.js +0 -47
  827. package/dist/transport/ascii-session-msg-factory.js.map +0 -1
  828. package/dist/transport/fix-msg-factory.js.map +0 -1
  829. package/dist/transport/fix-session-state.d.ts +0 -70
  830. package/dist/transport/fix-session-state.js.map +0 -1
  831. package/dist/transport/fix-session.js.map +0 -1
  832. package/dist/transport/fixml/acceptor.d.ts +0 -3
  833. package/dist/transport/fixml/acceptor.js +0 -38
  834. package/dist/transport/fixml/acceptor.js.map +0 -1
  835. package/dist/transport/fixml-session-msg-factory.d.ts +0 -13
  836. package/dist/transport/fixml-session-msg-factory.js +0 -68
  837. package/dist/transport/fixml-session-msg-factory.js.map +0 -1
  838. package/dist/transport/make-config.d.ts +0 -4
  839. package/dist/transport/make-config.js +0 -31
  840. package/dist/transport/make-config.js.map +0 -1
  841. package/dist/transport/make-fixl-session.js.map +0 -1
  842. package/dist/transport/msg-transport.js +0 -57
  843. package/dist/transport/msg-transport.js.map +0 -1
  844. package/dist/transport/session-description.d.ts +0 -64
  845. package/dist/transport/session-description.js.map +0 -1
  846. package/dist/transport/session-msg-factory.d.ts +0 -28
  847. package/dist/transport/session-msg-factory.js +0 -153
  848. package/dist/transport/session-msg-factory.js.map +0 -1
  849. package/dist/transport/tcp/acceptor.d.ts +0 -3
  850. package/dist/transport/tcp/acceptor.js +0 -40
  851. package/dist/transport/tcp/acceptor.js.map +0 -1
  852. package/dist/transport/tcp/initiator.d.ts +0 -3
  853. package/dist/transport/tcp/initiator.js +0 -67
  854. package/dist/transport/tcp/initiator.js.map +0 -1
  855. package/dist/transport/tcp/recovering-initiator.d.ts +0 -17
  856. package/dist/transport/tcp/recovering-initiator.js +0 -30
  857. package/dist/transport/tcp/recovering-initiator.js.map +0 -1
  858. package/dist/transport/tcp/recovering_initiator.d.ts +0 -12
  859. package/dist/transport/tcp/recovering_initiator.js +0 -25
  860. package/dist/transport/tcp/recovering_initiator.js.map +0 -1
  861. package/dist/transport/tcp/resilient-initiator.d.ts +0 -12
  862. package/dist/transport/tcp/resilient-initiator.js +0 -41
  863. package/dist/transport/tcp/resilient-initiator.js.map +0 -1
  864. package/dist/types/FIX4.4/quickfix/set/header.d.ts +0 -31
  865. package/dist/types/FIX4.4/quickfix/set/header.js.map +0 -1
  866. package/dist/types/FIX4.4/quickfix/set/trailer.d.ts +0 -6
  867. package/dist/types/FIX4.4/quickfix/set/trailer.js.map +0 -1
  868. package/dist/util/dictionary-definitions.d.ts +0 -8
  869. package/dist/util/dictionary-definitions.js +0 -51
  870. package/dist/util/dictionary-definitions.js.map +0 -1
  871. package/src/dictionary/fields-dispatch.ts +0 -45
  872. package/src/sample/launcher.ts +0 -56
  873. package/src/transport/fixml/acceptor.ts +0 -29
  874. package/src/transport/make-config.ts +0 -19
  875. package/src/transport/msg-transport.ts +0 -67
  876. package/src/transport/session-description.ts +0 -70
  877. package/src/transport/tcp/acceptor.ts +0 -31
  878. package/src/transport/tcp/initiator.ts +0 -59
  879. package/src/util/dictionary-definitions.ts +0 -41
package/.eslintrc.js ADDED
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ extends: 'standard-with-typescript',
3
+ parserOptions: {
4
+ project: './tsconfig.json'
5
+ }
6
+ }
package/appveyor.yml CHANGED
@@ -9,6 +9,7 @@ platform:
9
9
 
10
10
  environment:
11
11
  matrix:
12
+ - nodejs_version: "17"
12
13
  - nodejs_version: "16"
13
14
  - nodejs_version: "14"
14
15
  - nodejs_version: "12"
@@ -47,7 +48,10 @@ for:
47
48
  - sh: script/build.sh
48
49
 
49
50
  test_script:
51
+ - sh: "npm run repo44-bench-er"
50
52
  - sh: "npm run tcp-tc"
51
53
  - sh: "npm run http-oms"
54
+ - sh: "npm run tcp-qf-md"
55
+ - sh: "npm run tcp-rec-sk"
52
56
  - sh: "npm test"
53
57
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ascii-chars.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-chars.ts"],"names":[],"mappings":";;;AAAA,MAAsB,UAAU;IAsBvB,MAAM,CAAC,SAAS,CAAE,CAAS;QAChC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC;;AAxBH,gCAyBC;AAvBwB,gBAAK,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACjC,gBAAK,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACjC,uBAAY,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACxC,eAAI,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAChC,cAAG,GAAW,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAChC,gBAAK,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACjC,iBAAM,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAClC,eAAI,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAChC,gBAAK,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACjC,YAAC,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAC7B,YAAC,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAC7B,eAAI,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAChC,eAAI,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAChC,cAAG,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAC/B,aAAE,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAC9B,aAAE,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAC9B,gBAAK,GAAW,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACjC,aAAE,GAAW,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AAC/B,cAAG,GAAW,GAAG,CAAA","sourcesContent":["export abstract class AsciiChars {\r\n\r\n public static readonly Minus: number = '-'.charCodeAt(0)\r\n public static readonly Equal: number = '='.charCodeAt(0)\r\n public static readonly ForwardSlash: number = '/'.charCodeAt(0)\r\n public static readonly Plus: number = '+'.charCodeAt(0)\r\n public static readonly Tab: number = '\\t'.charCodeAt(0)\r\n public static readonly Colon: number = ':'.charCodeAt(0)\r\n public static readonly Hyphen: number = '-'.charCodeAt(0)\r\n public static readonly Pipe: number = '|'.charCodeAt(0)\r\n public static readonly Carat: number = '^'.charCodeAt(0)\r\n public static readonly N: number = 'N'.charCodeAt(0)\r\n public static readonly Y: number = 'Y'.charCodeAt(0)\r\n public static readonly Zero: number = '0'.charCodeAt(0)\r\n public static readonly Nine: number = '9'.charCodeAt(0)\r\n public static readonly Dot: number = '.'.charCodeAt(0)\r\n public static readonly Eq: number = '='.charCodeAt(0)\r\n public static readonly Dq: number = '\"'.charCodeAt(0)\r\n public static readonly Space: number = ' '.charCodeAt(0)\r\n public static readonly Cr: number = '\\n'.charCodeAt(0)\r\n public static readonly Soh: number = 0x1\r\n\r\n public static firstChar (s: string): number {\r\n return s.charCodeAt(0)\r\n }\r\n}\r\n"]}
@@ -1,10 +1,11 @@
1
1
  /// <reference types="node" />
2
2
  import { ILooseObject } from '../../collections/collection';
3
- import { ContainedFieldSet, FixDefinitions } from '../../dictionary';
3
+ import { ContainedFieldSet } from '../../dictionary/contained';
4
+ import { FixDefinitions } from '../../dictionary/definition';
4
5
  import { MsgEncoder } from '../msg-encoder';
5
6
  import { ElasticBuffer } from '../elastic-buffer';
6
7
  import { ITimeFormatter } from './itime-formatter';
7
- import { Tags } from '../tags';
8
+ import { Tags } from '../tag/tags';
8
9
  export declare class AsciiEncoder extends MsgEncoder {
9
10
  readonly buffer: ElasticBuffer;
10
11
  readonly definitions: FixDefinitions;
@@ -14,6 +15,7 @@ export declare class AsciiEncoder extends MsgEncoder {
14
15
  bodyLengthPos: number;
15
16
  msgTypePos: number;
16
17
  tags: Tags;
18
+ checkGroups: boolean;
17
19
  constructor(buffer: ElasticBuffer, definitions: FixDefinitions, timeFormatter?: ITimeFormatter, delimiter?: number, logDelimiter?: number);
18
20
  trim(): Buffer;
19
21
  reset(): void;
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AsciiEncoder = void 0;
4
- const dictionary_1 = require("../../dictionary");
4
+ const contained_1 = require("../../dictionary/contained");
5
5
  const msg_encoder_1 = require("../msg-encoder");
6
6
  const time_formatter_1 = require("./time-formatter");
7
- const ascii_chars_1 = require("../ascii-chars");
8
- const tags_1 = require("../tags");
7
+ const ascii_chars_1 = require("./ascii-chars");
8
+ const tags_1 = require("../tag/tags");
9
+ const tag_type_1 = require("../tag/tag-type");
9
10
  class AsciiEncoder extends msg_encoder_1.MsgEncoder {
10
11
  constructor(buffer, definitions, timeFormatter = new time_formatter_1.TimeFormatter(buffer), delimiter = ascii_chars_1.AsciiChars.Soh, logDelimiter = ascii_chars_1.AsciiChars.Pipe) {
11
12
  super(definitions);
@@ -14,6 +15,7 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
14
15
  this.timeFormatter = timeFormatter;
15
16
  this.delimiter = delimiter;
16
17
  this.logDelimiter = logDelimiter;
18
+ this.checkGroups = true;
17
19
  this.tags = new tags_1.Tags(definitions);
18
20
  }
19
21
  trim() {
@@ -39,7 +41,7 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
39
41
  }
40
42
  encodeObject(objectToEncode, set, state) {
41
43
  const fields = this.getFields(set, objectToEncode);
42
- dictionary_1.dispatchFields(fields, {
44
+ new contained_1.FieldsDispatch().dispatchFields(fields, {
43
45
  simple: (sf) => {
44
46
  const val = objectToEncode[sf.name];
45
47
  if (val != null && val !== '') {
@@ -78,13 +80,13 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
78
80
  encodeInstances(o, gf) {
79
81
  const noOfField = gf.definition.noOfField;
80
82
  const instances = o[gf.name] || o[noOfField.name];
81
- const first = new AsciiEncodeSetSummary();
82
- const test = new AsciiEncodeSetSummary();
83
83
  const buffer = this.buffer;
84
84
  if (!Array.isArray(instances)) {
85
85
  throw new Error(`expected array instance for group ${noOfField.name}`);
86
86
  }
87
87
  if (instances) {
88
+ const validator = new GroupValidator(gf);
89
+ const test = validator.test;
88
90
  this.WriteTagEquals(noOfField.tag);
89
91
  const posValBegin = buffer.getPos();
90
92
  buffer.writeWholeNumber(instances.length);
@@ -92,20 +94,10 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
92
94
  for (let field = 0; field < instances.length; ++field) {
93
95
  const instance = instances[field];
94
96
  test.reset();
95
- const summary = field === 0 ? first : test;
97
+ const summary = validator.getSummary(field);
96
98
  this.encodeObject(instance, gf.definition, summary);
97
- if (field === 0 && (first.firstSimple === null || first.count === 0)) {
98
- throw new Error(`first group instance has no delimeter present ${gf.name}`);
99
- }
100
- if (field > 0 && (test.firstSimple == null || test.count === 0)) {
101
- throw new Error(`group instance [${field}] has no delimeter present ${gf.name}`);
102
- }
103
- if (field > 0) {
104
- const firstTag = first.firstSimple.definition.tag;
105
- const tag = test.firstSimple.definition.tag;
106
- if (firstTag !== tag) {
107
- throw new Error(`group instance [${field}] inconsisent delimeter ${firstTag} expected tag ${tag}`);
108
- }
99
+ if (this.checkGroups) {
100
+ validator.assertInstanceValid(field);
109
101
  }
110
102
  }
111
103
  }
@@ -132,7 +124,7 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
132
124
  let tagType;
133
125
  if (typeof val === 'string') {
134
126
  switch (definition.tagType) {
135
- case tags_1.TagType.Boolean: {
127
+ case tag_type_1.TagType.Boolean: {
136
128
  tagType = definition.tagType;
137
129
  const vs = val;
138
130
  const first = vs.length > 0 ? vs.charAt(0) : 'N';
@@ -140,7 +132,7 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
140
132
  break;
141
133
  }
142
134
  default: {
143
- tagType = tags_1.TagType.String;
135
+ tagType = tag_type_1.TagType.String;
144
136
  }
145
137
  }
146
138
  }
@@ -148,7 +140,7 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
148
140
  tagType = definition.tagType;
149
141
  }
150
142
  switch (tagType) {
151
- case tags_1.TagType.RawData: {
143
+ case tag_type_1.TagType.RawData: {
152
144
  break;
153
145
  }
154
146
  default: {
@@ -158,40 +150,40 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
158
150
  }
159
151
  }
160
152
  switch (tagType) {
161
- case tags_1.TagType.String: {
153
+ case tag_type_1.TagType.String: {
162
154
  buffer.writeString(val);
163
155
  break;
164
156
  }
165
- case tags_1.TagType.Float: {
157
+ case tag_type_1.TagType.Float: {
166
158
  buffer.writeNumber(val);
167
159
  break;
168
160
  }
169
- case tags_1.TagType.Int:
170
- case tags_1.TagType.Length: {
161
+ case tag_type_1.TagType.Int:
162
+ case tag_type_1.TagType.Length: {
171
163
  buffer.writeWholeNumber(val);
172
164
  break;
173
165
  }
174
- case tags_1.TagType.Boolean: {
166
+ case tag_type_1.TagType.Boolean: {
175
167
  buffer.writeBoolean(val);
176
168
  break;
177
169
  }
178
- case tags_1.TagType.UtcTimestamp: {
170
+ case tag_type_1.TagType.UtcTimestamp: {
179
171
  tf.writeUtcTimestamp(val);
180
172
  break;
181
173
  }
182
- case tags_1.TagType.UtcTimeOnly: {
174
+ case tag_type_1.TagType.UtcTimeOnly: {
183
175
  tf.writeUtcTime(val);
184
176
  break;
185
177
  }
186
- case tags_1.TagType.UtcDateOnly: {
178
+ case tag_type_1.TagType.UtcDateOnly: {
187
179
  tf.writeUtcDate(val);
188
180
  break;
189
181
  }
190
- case tags_1.TagType.LocalDate: {
182
+ case tag_type_1.TagType.LocalDate: {
191
183
  tf.writeLocalDate(val);
192
184
  break;
193
185
  }
194
- case tags_1.TagType.RawData: {
186
+ case tag_type_1.TagType.RawData: {
195
187
  const b = val;
196
188
  const lenField = set.fields[sf.position - 1];
197
189
  if (o[lenField.name] == null) {
@@ -221,6 +213,33 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
221
213
  }
222
214
  }
223
215
  exports.AsciiEncoder = AsciiEncoder;
216
+ class GroupValidator {
217
+ constructor(gf, first = new AsciiEncodeSetSummary(), test = new AsciiEncodeSetSummary()) {
218
+ this.gf = gf;
219
+ this.first = first;
220
+ this.test = test;
221
+ }
222
+ getSummary(field) {
223
+ return field === 0 ? this.first : this.test;
224
+ }
225
+ assertInstanceValid(field) {
226
+ const first = this.first;
227
+ const test = this.test;
228
+ if (field === 0 && first.empty()) {
229
+ throw new Error(`first group instance has no delimeter present ${this.gf.name}`);
230
+ }
231
+ if (field > 0 && test.empty()) {
232
+ throw new Error(`group instance [${field}] has no delimeter present ${this.gf.name}`);
233
+ }
234
+ if (field > 0) {
235
+ const firstTag = first.firstSimple.definition.tag;
236
+ const tag = test.firstSimple.definition.tag;
237
+ if (firstTag !== tag) {
238
+ throw new Error(`group instance [${field}] inconsisent delimeter ${tag} expected tag ${firstTag}`);
239
+ }
240
+ }
241
+ }
242
+ }
224
243
  class AsciiEncodeSetSummary {
225
244
  constructor(firstSimple = null, lastSimple = null, count = 0) {
226
245
  this.firstSimple = firstSimple;
@@ -232,5 +251,8 @@ class AsciiEncodeSetSummary {
232
251
  this.lastSimple = null;
233
252
  this.count = 0;
234
253
  }
254
+ empty() {
255
+ return this.firstSimple === null || this.count === 0;
256
+ }
235
257
  }
236
258
  //# sourceMappingURL=ascii-encoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ascii-encoder.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../../collections/collection'\r\nimport { ContainedGroupField, ContainedSimpleField,\r\n ContainedFieldSet, ContainedField,\r\n ContainedComponentField, SimpleFieldDefinition,\r\n FixDefinitions, dispatchFields } from '../../dictionary'\r\nimport { MsgEncoder } from '../msg-encoder'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { TimeFormatter } from './time-formatter'\r\nimport { ITimeFormatter } from './itime-formatter'\r\nimport { AsciiChars } from '../ascii-chars'\r\nimport { Tags, TagType } from '../tags'\r\n\r\nexport class AsciiEncoder extends MsgEncoder {\r\n\r\n public bodyLengthPos: number\r\n public msgTypePos: number\r\n public tags: Tags\r\n\r\n constructor (public readonly buffer: ElasticBuffer,\r\n public readonly definitions: FixDefinitions,\r\n public readonly timeFormatter: ITimeFormatter = new TimeFormatter(buffer),\r\n public readonly delimiter: number = AsciiChars.Soh,\r\n public readonly logDelimiter: number = AsciiChars.Pipe) {\r\n super(definitions)\r\n this.tags = new Tags(definitions)\r\n }\r\n\r\n public trim (): Buffer {\r\n const b = this.buffer.copy()\r\n const delimiter = this.delimiter\r\n const logDelimiter = this.logDelimiter\r\n const tags = this.tags\r\n if (delimiter !== logDelimiter) {\r\n for (let p = 0; p < tags.nextTagPos; ++p) {\r\n const tagPos = tags.tagPos[p]\r\n b.writeUInt8(delimiter, tagPos.start + tagPos.len)\r\n }\r\n }\r\n\r\n return b\r\n }\r\n\r\n // only reset tags after entire message is encoded - <hdr>body<trl>\r\n\r\n public reset (): void {\r\n this.buffer.reset()\r\n this.tags.reset()\r\n }\r\n\r\n public encodeSet (objectToEncode: ILooseObject, set: ContainedFieldSet): void {\r\n const summary: AsciiEncodeSetSummary = new AsciiEncodeSetSummary()\r\n this.encodeObject(objectToEncode, set, summary)\r\n }\r\n\r\n private encodeObject (objectToEncode: ILooseObject, set: ContainedFieldSet, state: AsciiEncodeSetSummary): void {\r\n const fields: ContainedField[] = this.getFields(set, objectToEncode)\r\n dispatchFields(fields, {\r\n simple: (sf: ContainedSimpleField) => {\r\n const val: any = objectToEncode[sf.name]\r\n // Empty strings are omitted as they result in empty values for tags, which are considered malformed.\r\n if (val != null && val !== '') {\r\n if (state.count === 0) {\r\n state.firstSimple = sf\r\n }\r\n state.lastSimple = sf\r\n state.count++\r\n this.encodeSimple(objectToEncode, set, sf, val)\r\n }\r\n },\r\n component: (cf: ContainedComponentField) => {\r\n const instance: ILooseObject = objectToEncode[cf.definition.name]\r\n if (instance) {\r\n this.encodeObject(instance, cf.definition, state)\r\n }\r\n },\r\n group: (gf: ContainedGroupField) => {\r\n this.encodeInstances(objectToEncode, gf)\r\n }\r\n })\r\n }\r\n\r\n private getFields (set: ContainedFieldSet, o: ILooseObject): ContainedField[] {\r\n const keys: string[] = Object.keys(o)\r\n let j: number = 0\r\n const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {\r\n const field: ContainedField = set.localNameToField.get(current)\r\n if (field) {\r\n a[j++] = field\r\n }\r\n return a\r\n }, new Array(keys.length))\r\n fields.sort((a: ContainedField, b: ContainedField) => a.position - b.position)\r\n return fields\r\n }\r\n\r\n private encodeInstances (o: ILooseObject, gf: ContainedGroupField): void {\r\n const noOfField: SimpleFieldDefinition = gf.definition.noOfField\r\n const instances: ILooseObject[] = o[gf.name] || o[noOfField.name]\r\n const first: AsciiEncodeSetSummary = new AsciiEncodeSetSummary()\r\n const test: AsciiEncodeSetSummary = new AsciiEncodeSetSummary()\r\n\r\n const buffer = this.buffer\r\n if (!Array.isArray(instances)) {\r\n throw new Error(`expected array instance for group ${noOfField.name}`)\r\n }\r\n if (instances) {\r\n // a repeated group has number of instances at the start of group\r\n this.WriteTagEquals(noOfField.tag)\r\n const posValBegin = buffer.getPos()\r\n buffer.writeWholeNumber(instances.length)\r\n this.writeDelimiter(posValBegin, noOfField.tag)\r\n for (let field = 0; field < instances.length; ++field) {\r\n const instance: ILooseObject = instances[field]\r\n test.reset()\r\n const summary = field === 0 ? first : test\r\n this.encodeObject(instance, gf.definition, summary)\r\n if (field === 0 && (first.firstSimple === null || first.count === 0)) {\r\n throw new Error(`first group instance has no delimeter present ${gf.name}`)\r\n }\r\n if (field > 0 && (test.firstSimple == null || test.count === 0)) {\r\n throw new Error(`group instance [${field}] has no delimeter present ${gf.name}`)\r\n }\r\n if (field > 0) {\r\n const firstTag = first.firstSimple.definition.tag\r\n const tag = test.firstSimple.definition.tag\r\n if (firstTag !== tag) {\r\n throw new Error(`group instance [${field}] inconsisent delimeter ${firstTag} expected tag ${tag}`)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private WriteTagEquals (tag: number): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(tag)\r\n buffer.writeChar(AsciiChars.Equal)\r\n }\r\n\r\n private writeDelimiter (posValBegin: number, tag: number): void {\r\n const delimiter = this.logDelimiter\r\n const buffer = this.buffer\r\n this.tags.store(posValBegin, buffer.getPos() - posValBegin, tag)\r\n buffer.writeChar(delimiter)\r\n }\r\n\r\n private encodeSimple (o: ILooseObject, set: ContainedFieldSet, sf: ContainedSimpleField, val: any): void {\r\n const definition = sf.definition\r\n const tag: number = definition.tag\r\n const buffer = this.buffer\r\n const delimiter = this.logDelimiter\r\n const tf = this.timeFormatter\r\n const pos = buffer.getPos()\r\n let posValBegin = 0\r\n\r\n let tagType: TagType\r\n if (typeof val === 'string') {\r\n switch (definition.tagType) {\r\n case TagType.Boolean: {\r\n tagType = definition.tagType\r\n const vs: string = val\r\n const first: string = vs.length > 0 ? vs.charAt(0) : 'N'\r\n val = first === 'Y' || first === 'T'\r\n break\r\n }\r\n default: {\r\n tagType = TagType.String\r\n }\r\n }\r\n } else {\r\n tagType = definition.tagType\r\n }\r\n\r\n switch (tagType) {\r\n\r\n case TagType.RawData: {\r\n // may need to first write raw message length (see below)\r\n break\r\n }\r\n\r\n default: {\r\n this.WriteTagEquals(tag)\r\n posValBegin = buffer.getPos()\r\n break\r\n }\r\n }\r\n\r\n switch (tagType) {\r\n case TagType.String: {\r\n buffer.writeString(val as string)\r\n break\r\n }\r\n\r\n case TagType.Float: {\r\n buffer.writeNumber(val as number)\r\n break\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n buffer.writeWholeNumber(val as number)\r\n break\r\n }\r\n\r\n case TagType.Boolean: {\r\n buffer.writeBoolean(val as boolean)\r\n break\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n tf.writeUtcTimestamp(val as Date)\r\n break\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n tf.writeUtcTime(val as Date)\r\n break\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n tf.writeUtcDate(val as Date)\r\n break\r\n }\r\n\r\n case TagType.LocalDate: {\r\n tf.writeLocalDate(val as Date)\r\n break\r\n }\r\n\r\n case TagType.RawData: {\r\n const b = val as Buffer\r\n const lenField: ContainedSimpleField = set.fields[sf.position - 1] as ContainedSimpleField\r\n if (o[lenField.name] == null) {\r\n this.WriteTagEquals(lenField.definition.tag)\r\n buffer.writeWholeNumber(b.length)\r\n buffer.writeChar(delimiter)\r\n }\r\n this.WriteTagEquals(tag)\r\n buffer.writeBuffer(b)\r\n posValBegin = buffer.getPos()\r\n break\r\n }\r\n\r\n default: {\r\n buffer.writeString(val as string)\r\n break\r\n }\r\n }\r\n\r\n this.writeDelimiter(posValBegin, tag)\r\n\r\n switch (tag) {\r\n case Tags.BodyLengthTag:\r\n this.bodyLengthPos = pos + 2\r\n break\r\n\r\n case Tags.MsgTag:\r\n this.msgTypePos = pos\r\n break\r\n }\r\n }\r\n}\r\n\r\nclass AsciiEncodeSetSummary {\r\n constructor (public firstSimple: ContainedSimpleField = null,\r\n public lastSimple: ContainedSimpleField = null,\r\n public count: number = 0) {\r\n }\r\n public reset (): void {\r\n this.firstSimple = null\r\n this.lastSimple = null\r\n this.count = 0\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ascii-encoder.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../../collections/collection'\r\nimport {\r\n ContainedGroupField, ContainedSimpleField,\r\n ContainedFieldSet, ContainedField,\r\n ContainedComponentField, FieldsDispatch\r\n} from '../../dictionary/contained'\r\nimport { SimpleFieldDefinition, FixDefinitions } from '../../dictionary/definition'\r\nimport { MsgEncoder } from '../msg-encoder'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { TimeFormatter } from './time-formatter'\r\nimport { ITimeFormatter } from './itime-formatter'\r\nimport { AsciiChars } from './ascii-chars'\r\nimport { Tags } from '../tag/tags'\r\nimport { TagType } from '../tag/tag-type'\r\n\r\nexport class AsciiEncoder extends MsgEncoder {\r\n\r\n public bodyLengthPos: number\r\n public msgTypePos: number\r\n public tags: Tags\r\n public checkGroups: boolean = true\r\n\r\n constructor (public readonly buffer: ElasticBuffer,\r\n public readonly definitions: FixDefinitions,\r\n public readonly timeFormatter: ITimeFormatter = new TimeFormatter(buffer),\r\n public readonly delimiter: number = AsciiChars.Soh,\r\n public readonly logDelimiter: number = AsciiChars.Pipe) {\r\n super(definitions)\r\n this.tags = new Tags(definitions)\r\n }\r\n\r\n public trim (): Buffer {\r\n const b = this.buffer.copy()\r\n const delimiter = this.delimiter\r\n const logDelimiter = this.logDelimiter\r\n const tags = this.tags\r\n if (delimiter !== logDelimiter) {\r\n for (let p = 0; p < tags.nextTagPos; ++p) {\r\n const tagPos = tags.tagPos[p]\r\n b.writeUInt8(delimiter, tagPos.start + tagPos.len)\r\n }\r\n }\r\n\r\n return b\r\n }\r\n\r\n // only reset tags after entire message is encoded - <hdr>body<trl>\r\n\r\n public reset (): void {\r\n this.buffer.reset()\r\n this.tags.reset()\r\n }\r\n\r\n public encodeSet (objectToEncode: ILooseObject, set: ContainedFieldSet): void {\r\n const summary: AsciiEncodeSetSummary = new AsciiEncodeSetSummary()\r\n this.encodeObject(objectToEncode, set, summary)\r\n }\r\n\r\n private encodeObject (objectToEncode: ILooseObject, set: ContainedFieldSet, state: AsciiEncodeSetSummary): void {\r\n const fields: ContainedField[] = this.getFields(set, objectToEncode)\r\n new FieldsDispatch().dispatchFields(fields, {\r\n simple: (sf: ContainedSimpleField) => {\r\n const val: any = objectToEncode[sf.name]\r\n // Empty strings are omitted as they result in empty values for tags, which are considered malformed.\r\n if (val != null && val !== '') {\r\n if (state.count === 0) {\r\n state.firstSimple = sf\r\n }\r\n state.lastSimple = sf\r\n state.count++\r\n this.encodeSimple(objectToEncode, set, sf, val)\r\n }\r\n },\r\n component: (cf: ContainedComponentField) => {\r\n const instance: ILooseObject = objectToEncode[cf.definition.name]\r\n if (instance) {\r\n this.encodeObject(instance, cf.definition, state)\r\n }\r\n },\r\n group: (gf: ContainedGroupField) => {\r\n this.encodeInstances(objectToEncode, gf)\r\n }\r\n })\r\n }\r\n\r\n private getFields (set: ContainedFieldSet, o: ILooseObject): ContainedField[] {\r\n const keys: string[] = Object.keys(o)\r\n let j: number = 0\r\n const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {\r\n const field: ContainedField = set.localNameToField.get(current)\r\n if (field) {\r\n a[j++] = field\r\n }\r\n return a\r\n }, new Array(keys.length))\r\n fields.sort((a: ContainedField, b: ContainedField) => a.position - b.position)\r\n return fields\r\n }\r\n\r\n private encodeInstances (o: ILooseObject, gf: ContainedGroupField): void {\r\n const noOfField: SimpleFieldDefinition = gf.definition.noOfField\r\n const instances: ILooseObject[] = o[gf.name] || o[noOfField.name]\r\n\r\n const buffer = this.buffer\r\n if (!Array.isArray(instances)) {\r\n throw new Error(`expected array instance for group ${noOfField.name}`)\r\n }\r\n if (instances) {\r\n const validator = new GroupValidator(gf)\r\n const test: AsciiEncodeSetSummary = validator.test\r\n\r\n // a repeated group has number of instances at the start of group\r\n this.WriteTagEquals(noOfField.tag)\r\n const posValBegin = buffer.getPos()\r\n buffer.writeWholeNumber(instances.length)\r\n this.writeDelimiter(posValBegin, noOfField.tag)\r\n for (let field = 0; field < instances.length; ++field) {\r\n const instance: ILooseObject = instances[field]\r\n test.reset()\r\n const summary = validator.getSummary(field)\r\n this.encodeObject(instance, gf.definition, summary)\r\n if (this.checkGroups) {\r\n validator.assertInstanceValid(field)\r\n }\r\n }\r\n }\r\n }\r\n\r\n private WriteTagEquals (tag: number): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(tag)\r\n buffer.writeChar(AsciiChars.Equal)\r\n }\r\n\r\n private writeDelimiter (posValBegin: number, tag: number): void {\r\n const delimiter = this.logDelimiter\r\n const buffer = this.buffer\r\n this.tags.store(posValBegin, buffer.getPos() - posValBegin, tag)\r\n buffer.writeChar(delimiter)\r\n }\r\n\r\n private encodeSimple (o: ILooseObject, set: ContainedFieldSet, sf: ContainedSimpleField, val: any): void {\r\n const definition = sf.definition\r\n const tag: number = definition.tag\r\n const buffer = this.buffer\r\n const delimiter = this.logDelimiter\r\n const tf = this.timeFormatter\r\n const pos = buffer.getPos()\r\n let posValBegin = 0\r\n\r\n let tagType: TagType\r\n if (typeof val === 'string') {\r\n switch (definition.tagType) {\r\n case TagType.Boolean: {\r\n tagType = definition.tagType\r\n const vs: string = val\r\n const first: string = vs.length > 0 ? vs.charAt(0) : 'N'\r\n val = first === 'Y' || first === 'T'\r\n break\r\n }\r\n default: {\r\n tagType = TagType.String\r\n }\r\n }\r\n } else {\r\n tagType = definition.tagType\r\n }\r\n\r\n switch (tagType) {\r\n\r\n case TagType.RawData: {\r\n // may need to first write raw message length (see below)\r\n break\r\n }\r\n\r\n default: {\r\n this.WriteTagEquals(tag)\r\n posValBegin = buffer.getPos()\r\n break\r\n }\r\n }\r\n\r\n switch (tagType) {\r\n case TagType.String: {\r\n buffer.writeString(val as string)\r\n break\r\n }\r\n\r\n case TagType.Float: {\r\n buffer.writeNumber(val as number)\r\n break\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n buffer.writeWholeNumber(val as number)\r\n break\r\n }\r\n\r\n case TagType.Boolean: {\r\n buffer.writeBoolean(val as boolean)\r\n break\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n tf.writeUtcTimestamp(val as Date)\r\n break\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n tf.writeUtcTime(val as Date)\r\n break\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n tf.writeUtcDate(val as Date)\r\n break\r\n }\r\n\r\n case TagType.LocalDate: {\r\n tf.writeLocalDate(val as Date)\r\n break\r\n }\r\n\r\n case TagType.RawData: {\r\n const b = val as Buffer\r\n const lenField: ContainedSimpleField = set.fields[sf.position - 1] as ContainedSimpleField\r\n if (o[lenField.name] == null) {\r\n this.WriteTagEquals(lenField.definition.tag)\r\n buffer.writeWholeNumber(b.length)\r\n buffer.writeChar(delimiter)\r\n }\r\n this.WriteTagEquals(tag)\r\n buffer.writeBuffer(b)\r\n posValBegin = buffer.getPos()\r\n break\r\n }\r\n\r\n default: {\r\n buffer.writeString(val as string)\r\n break\r\n }\r\n }\r\n\r\n this.writeDelimiter(posValBegin, tag)\r\n\r\n switch (tag) {\r\n case Tags.BodyLengthTag:\r\n this.bodyLengthPos = pos + 2\r\n break\r\n\r\n case Tags.MsgTag:\r\n this.msgTypePos = pos\r\n break\r\n }\r\n }\r\n}\r\n\r\nclass GroupValidator {\r\n constructor (public readonly gf: ContainedGroupField,\r\n public readonly first: AsciiEncodeSetSummary = new AsciiEncodeSetSummary(),\r\n public readonly test: AsciiEncodeSetSummary = new AsciiEncodeSetSummary()) {\r\n }\r\n\r\n getSummary (field: number) {\r\n return field === 0 ? this.first : this.test\r\n }\r\n\r\n assertInstanceValid (field: number): void {\r\n const first = this.first\r\n const test = this.test\r\n if (field === 0 && first.empty()) {\r\n throw new Error(`first group instance has no delimeter present ${this.gf.name}`)\r\n }\r\n if (field > 0 && test.empty()) {\r\n throw new Error(`group instance [${field}] has no delimeter present ${this.gf.name}`)\r\n }\r\n if (field > 0) {\r\n const firstTag = first.firstSimple.definition.tag\r\n const tag = test.firstSimple.definition.tag\r\n if (firstTag !== tag) {\r\n throw new Error(`group instance [${field}] inconsisent delimeter ${tag} expected tag ${firstTag}`)\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass AsciiEncodeSetSummary {\r\n constructor (public firstSimple: ContainedSimpleField = null,\r\n public lastSimple: ContainedSimpleField = null,\r\n public count: number = 0) {\r\n }\r\n public reset (): void {\r\n this.firstSimple = null\r\n this.lastSimple = null\r\n this.count = 0\r\n }\r\n public empty (): boolean {\r\n return this.firstSimple === null || this.count === 0\r\n }\r\n}\r\n"]}
@@ -1,14 +1,7 @@
1
- import { Tags } from '../tags';
2
- import { MessageDefinition } from '../../dictionary';
1
+ import { Tags } from '../tag/tags';
2
+ import { MessageDefinition } from '../../dictionary/definition';
3
3
  import { ElasticBuffer } from '../elastic-buffer';
4
- export declare enum ParseState {
5
- BeginField = 1,
6
- ParsingTag = 2,
7
- ParsingValue = 3,
8
- ParsingRawDataLength = 4,
9
- ParsingRawData = 5,
10
- MsgComplete = 6
11
- }
4
+ import { ParseState } from './parse-state';
12
5
  export declare class AsciiParserState {
13
6
  readonly elasticBuffer: ElasticBuffer;
14
7
  message: MessageDefinition;
@@ -1,22 +1,29 @@
1
1
  "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
2
14
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AsciiParserState = exports.ParseState = void 0;
4
- const tags_1 = require("../tags");
5
- var ParseState;
6
- (function (ParseState) {
7
- ParseState[ParseState["BeginField"] = 1] = "BeginField";
8
- ParseState[ParseState["ParsingTag"] = 2] = "ParsingTag";
9
- ParseState[ParseState["ParsingValue"] = 3] = "ParsingValue";
10
- ParseState[ParseState["ParsingRawDataLength"] = 4] = "ParsingRawDataLength";
11
- ParseState[ParseState["ParsingRawData"] = 5] = "ParsingRawData";
12
- ParseState[ParseState["MsgComplete"] = 6] = "MsgComplete";
13
- })(ParseState = exports.ParseState || (exports.ParseState = {}));
14
- class AsciiParserState {
15
+ exports.AsciiParserState = void 0;
16
+ const tags_1 = require("../tag/tags");
17
+ const elastic_buffer_1 = require("../elastic-buffer");
18
+ const parse_state_1 = require("./parse-state");
19
+ const tsyringe_1 = require("tsyringe");
20
+ const di_tokens_1 = require("../../runtime/di-tokens");
21
+ let AsciiParserState = class AsciiParserState {
15
22
  constructor(elasticBuffer) {
16
23
  this.elasticBuffer = elasticBuffer;
17
24
  }
18
25
  beginTag(pos) {
19
- this.parseState = ParseState.ParsingTag;
26
+ this.parseState = parse_state_1.ParseState.ParsingTag;
20
27
  this.tagStartPos = pos;
21
28
  this.equalPos = this.valueEndPos = -1;
22
29
  this.currentTag = 0;
@@ -25,7 +32,7 @@ class AsciiParserState {
25
32
  this.equalPos = pos;
26
33
  const state = this.parseState;
27
34
  switch (state) {
28
- case ParseState.ParsingTag: {
35
+ case parse_state_1.ParseState.ParsingTag: {
29
36
  this.currentTag = this.elasticBuffer.getWholeNumber(this.tagStartPos, pos - 1);
30
37
  break;
31
38
  }
@@ -41,21 +48,21 @@ class AsciiParserState {
41
48
  checkRawTag() {
42
49
  const msg = this.message;
43
50
  if (!msg || !msg.containsRaw) {
44
- this.parseState = ParseState.ParsingValue;
51
+ this.parseState = parse_state_1.ParseState.ParsingValue;
45
52
  return;
46
53
  }
47
54
  const isDataLength = msg.containedLength[this.currentTag];
48
55
  if (isDataLength) {
49
- this.parseState = ParseState.ParsingRawDataLength;
56
+ this.parseState = parse_state_1.ParseState.ParsingRawDataLength;
50
57
  }
51
58
  else {
52
59
  this.rawDataRead = 0;
53
60
  const isData = this.rawDataLen > 0;
54
61
  if (isData) {
55
- this.parseState = ParseState.ParsingRawData;
62
+ this.parseState = parse_state_1.ParseState.ParsingRawData;
56
63
  }
57
64
  else {
58
- this.parseState = ParseState.ParsingValue;
65
+ this.parseState = parse_state_1.ParseState.ParsingValue;
59
66
  }
60
67
  }
61
68
  }
@@ -68,19 +75,19 @@ class AsciiParserState {
68
75
  const buffer = this.elasticBuffer;
69
76
  const terminates = this.checksumExpectedPos;
70
77
  switch (this.parseState) {
71
- case ParseState.ParsingValue:
72
- case ParseState.ParsingRawData: {
78
+ case parse_state_1.ParseState.ParsingValue:
79
+ case parse_state_1.ParseState.ParsingRawData: {
73
80
  this.rawDataLen = 0;
74
81
  locations.store(equalPos + 1, valueEndPos - equalPos - 1, tag);
75
82
  break;
76
83
  }
77
- case ParseState.ParsingRawDataLength: {
84
+ case parse_state_1.ParseState.ParsingRawDataLength: {
78
85
  this.rawDataLen = buffer.getWholeNumber(equalPos + 1, valueEndPos - 1);
79
86
  locations.store(equalPos + 1, valueEndPos - equalPos - 1, tag);
80
87
  break;
81
88
  }
82
89
  }
83
- this.parseState = ParseState.BeginField;
90
+ this.parseState = parse_state_1.ParseState.BeginField;
84
91
  this.count++;
85
92
  const nextTagPos = locations.nextTagPos;
86
93
  switch (tag) {
@@ -111,7 +118,7 @@ class AsciiParserState {
111
118
  if (valueEndPos < this.bodyLen) {
112
119
  throw new Error(`CheckSumTag: [${valueEndPos}] expected after ${this.bodyLen}`);
113
120
  }
114
- this.parseState = ParseState.MsgComplete;
121
+ this.parseState = parse_state_1.ParseState.MsgComplete;
115
122
  break;
116
123
  }
117
124
  default: {
@@ -146,7 +153,7 @@ class AsciiParserState {
146
153
  this.elasticBuffer.reset();
147
154
  this.locations.reset();
148
155
  this.checksumExpectedPos = 0;
149
- this.parseState = ParseState.BeginField;
156
+ this.parseState = parse_state_1.ParseState.BeginField;
150
157
  this.count = 0;
151
158
  this.currentTag = 0;
152
159
  this.tagStartPos = 0;
@@ -158,6 +165,11 @@ class AsciiParserState {
158
165
  this.message = null;
159
166
  this.msgType = null;
160
167
  }
161
- }
168
+ };
169
+ AsciiParserState = __decorate([
170
+ (0, tsyringe_1.injectable)(),
171
+ __param(0, (0, tsyringe_1.inject)(di_tokens_1.DITokens.ParseBuffer)),
172
+ __metadata("design:paramtypes", [elastic_buffer_1.ElasticBuffer])
173
+ ], AsciiParserState);
162
174
  exports.AsciiParserState = AsciiParserState;
163
175
  //# sourceMappingURL=ascii-parser-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ascii-parser-state.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-parser-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tags } from '../tags'\r\nimport { MessageDefinition } from '../../dictionary'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\n\r\nexport enum ParseState {\r\n BeginField = 1,\r\n ParsingTag = 2,\r\n ParsingValue = 3,\r\n ParsingRawDataLength = 4,\r\n ParsingRawData = 5,\r\n MsgComplete = 6\r\n}\r\n\r\nexport class AsciiParserState {\r\n public message: MessageDefinition\r\n public locations: Tags\r\n public parseState: ParseState\r\n public bodyLen: number\r\n public checksumExpectedPos: number\r\n public tagStartPos: number\r\n public equalPos: number\r\n public valueEndPos: number\r\n public count: number\r\n public currentTag: number\r\n public rawDataLen: number\r\n public rawDataRead: number\r\n public msgType: string\r\n\r\n constructor (public readonly elasticBuffer: ElasticBuffer) {\r\n }\r\n\r\n public beginTag (pos: number) {\r\n this.parseState = ParseState.ParsingTag\r\n this.tagStartPos = pos\r\n this.equalPos = this.valueEndPos = -1\r\n this.currentTag = 0\r\n }\r\n\r\n public endTag (pos: number): void {\r\n this.equalPos = pos\r\n const state = this.parseState\r\n switch (state) {\r\n case ParseState.ParsingTag: {\r\n this.currentTag = this.elasticBuffer.getWholeNumber(this.tagStartPos, pos - 1)\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(`EndTag: unexpected state ${state}`)\r\n }\r\n // if a raw tag, then need length to skip that many bytes\r\n this.checkRawTag()\r\n }\r\n\r\n public incRaw (): boolean {\r\n ++this.rawDataRead\r\n return this.rawDataRead === this.rawDataLen + 1\r\n }\r\n\r\n public checkRawTag (): void {\r\n const msg = this.message\r\n if (!msg || !msg.containsRaw) {\r\n // optimisation as will never hit raw data\r\n this.parseState = ParseState.ParsingValue\r\n return\r\n }\r\n // if this is a raw data tag then need to keep track of the length\r\n // on this field to skip that many bytes.\r\n const isDataLength: boolean = msg.containedLength[this.currentTag]\r\n if (isDataLength) {\r\n this.parseState = ParseState.ParsingRawDataLength\r\n } else {\r\n this.rawDataRead = 0\r\n const isData: boolean = this.rawDataLen > 0\r\n if (isData) {\r\n this.parseState = ParseState.ParsingRawData\r\n } else {\r\n this.parseState = ParseState.ParsingValue\r\n }\r\n }\r\n }\r\n\r\n public store (): void {\r\n const valueEndPos: number = this.elasticBuffer.getPos() - 1\r\n this.valueEndPos = valueEndPos\r\n const equalPos: number = this.equalPos\r\n const tag: number = this.currentTag\r\n const locations: Tags = this.locations\r\n const buffer = this.elasticBuffer\r\n const terminates = this.checksumExpectedPos\r\n\r\n switch (this.parseState) {\r\n case ParseState.ParsingValue:\r\n case ParseState.ParsingRawData: {\r\n this.rawDataLen = 0\r\n locations.store(equalPos + 1, valueEndPos - equalPos - 1, tag)\r\n break\r\n }\r\n\r\n case ParseState.ParsingRawDataLength: {\r\n this.rawDataLen = buffer.getWholeNumber(equalPos + 1, valueEndPos - 1)\r\n locations.store(equalPos + 1, valueEndPos - equalPos - 1, tag)\r\n break\r\n }\r\n }\r\n\r\n this.parseState = ParseState.BeginField\r\n this.count++\r\n const nextTagPos = locations.nextTagPos\r\n\r\n switch (tag) {\r\n case Tags.BeginString: {\r\n if (nextTagPos !== 1) {\r\n throw new Error(`BeginString: not expected at position [${nextTagPos}]`)\r\n }\r\n break\r\n }\r\n\r\n case Tags.BodyLengthTag: {\r\n if (nextTagPos !== 2) {\r\n throw new Error(`BodyLengthTag: not expected at position [${nextTagPos}]`)\r\n }\r\n this.bodyLen = buffer.getWholeNumber(equalPos + 1, valueEndPos - 1)\r\n this.checksumExpectedPos = this.bodyLen + valueEndPos\r\n this.elasticBuffer.checkGrowBuffer(this.bodyLen)\r\n break\r\n }\r\n\r\n case Tags.MsgTag: {\r\n if (nextTagPos !== 3) {\r\n throw new Error(`MsgTag: not expected at position [${nextTagPos}]`)\r\n }\r\n this.msgType = buffer.getString(equalPos + 1, valueEndPos)\r\n this.message = locations.definitions.message.get(this.msgType)\r\n break\r\n }\r\n\r\n case Tags.CheckSumTag: {\r\n if (valueEndPos < this.bodyLen) {\r\n throw new Error(`CheckSumTag: [${valueEndPos}] expected after ${this.bodyLen}`)\r\n }\r\n this.parseState = ParseState.MsgComplete\r\n break\r\n }\r\n\r\n default: {\r\n if (terminates && valueEndPos > terminates) {\r\n throw new Error(`Tag: [${tag}] cant be after ${terminates}`)\r\n }\r\n break\r\n }\r\n }\r\n\r\n switch (nextTagPos) {\r\n case 1: {\r\n if (tag !== Tags.BeginString) {\r\n throw new Error(`position 1 [${tag}] must be BeginString: 8=`)\r\n }\r\n break\r\n }\r\n case 2: {\r\n if (tag !== Tags.BodyLengthTag) {\r\n throw new Error(`position 2 [${tag}] must be BodyLengthTag: 9=`)\r\n }\r\n break\r\n }\r\n case 3: {\r\n if (tag !== Tags.MsgTag) {\r\n throw new Error(`position 3 [${tag}] must be MsgTag: 35=`)\r\n }\r\n break\r\n }\r\n }\r\n }\r\n\r\n public beginMessage (): void {\r\n this.elasticBuffer.reset()\r\n this.locations.reset()\r\n this.checksumExpectedPos = 0\r\n this.parseState = ParseState.BeginField\r\n this.count = 0\r\n this.currentTag = 0\r\n this.tagStartPos = 0\r\n this.valueEndPos = 0\r\n this.equalPos = 0\r\n this.rawDataRead = 0\r\n this.rawDataLen = 0\r\n this.bodyLen = 0\r\n this.message = null\r\n this.msgType = null\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ascii-parser-state.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-parser-state.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tags } from '../tag/tags'\r\nimport { MessageDefinition } from '../../dictionary/definition'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { ParseState } from './parse-state'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\n\r\n@injectable()\r\nexport class AsciiParserState {\r\n public message: MessageDefinition\r\n public locations: Tags\r\n public parseState: ParseState\r\n public bodyLen: number\r\n public checksumExpectedPos: number\r\n public tagStartPos: number\r\n public equalPos: number\r\n public valueEndPos: number\r\n public count: number\r\n public currentTag: number\r\n public rawDataLen: number\r\n public rawDataRead: number\r\n public msgType: string\r\n\r\n constructor (@inject(DITokens.ParseBuffer) public readonly elasticBuffer: ElasticBuffer) {\r\n }\r\n\r\n public beginTag (pos: number) {\r\n this.parseState = ParseState.ParsingTag\r\n this.tagStartPos = pos\r\n this.equalPos = this.valueEndPos = -1\r\n this.currentTag = 0\r\n }\r\n\r\n public endTag (pos: number): void {\r\n this.equalPos = pos\r\n const state = this.parseState\r\n switch (state) {\r\n case ParseState.ParsingTag: {\r\n this.currentTag = this.elasticBuffer.getWholeNumber(this.tagStartPos, pos - 1)\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(`EndTag: unexpected state ${state}`)\r\n }\r\n // if a raw tag, then need length to skip that many bytes\r\n this.checkRawTag()\r\n }\r\n\r\n public incRaw (): boolean {\r\n ++this.rawDataRead\r\n return this.rawDataRead === this.rawDataLen + 1\r\n }\r\n\r\n public checkRawTag (): void {\r\n const msg = this.message\r\n if (!msg || !msg.containsRaw) {\r\n // optimisation as will never hit raw data\r\n this.parseState = ParseState.ParsingValue\r\n return\r\n }\r\n // if this is a raw data tag then need to keep track of the length\r\n // on this field to skip that many bytes.\r\n const isDataLength: boolean = msg.containedLength[this.currentTag]\r\n if (isDataLength) {\r\n this.parseState = ParseState.ParsingRawDataLength\r\n } else {\r\n this.rawDataRead = 0\r\n const isData: boolean = this.rawDataLen > 0\r\n if (isData) {\r\n this.parseState = ParseState.ParsingRawData\r\n } else {\r\n this.parseState = ParseState.ParsingValue\r\n }\r\n }\r\n }\r\n\r\n public store (): void {\r\n const valueEndPos: number = this.elasticBuffer.getPos() - 1\r\n this.valueEndPos = valueEndPos\r\n const equalPos: number = this.equalPos\r\n const tag: number = this.currentTag\r\n const locations: Tags = this.locations\r\n const buffer = this.elasticBuffer\r\n const terminates = this.checksumExpectedPos\r\n\r\n switch (this.parseState) {\r\n case ParseState.ParsingValue:\r\n case ParseState.ParsingRawData: {\r\n this.rawDataLen = 0\r\n locations.store(equalPos + 1, valueEndPos - equalPos - 1, tag)\r\n break\r\n }\r\n\r\n case ParseState.ParsingRawDataLength: {\r\n this.rawDataLen = buffer.getWholeNumber(equalPos + 1, valueEndPos - 1)\r\n locations.store(equalPos + 1, valueEndPos - equalPos - 1, tag)\r\n break\r\n }\r\n }\r\n\r\n this.parseState = ParseState.BeginField\r\n this.count++\r\n const nextTagPos = locations.nextTagPos\r\n\r\n switch (tag) {\r\n case Tags.BeginString: {\r\n if (nextTagPos !== 1) {\r\n throw new Error(`BeginString: not expected at position [${nextTagPos}]`)\r\n }\r\n break\r\n }\r\n\r\n case Tags.BodyLengthTag: {\r\n if (nextTagPos !== 2) {\r\n throw new Error(`BodyLengthTag: not expected at position [${nextTagPos}]`)\r\n }\r\n this.bodyLen = buffer.getWholeNumber(equalPos + 1, valueEndPos - 1)\r\n this.checksumExpectedPos = this.bodyLen + valueEndPos\r\n this.elasticBuffer.checkGrowBuffer(this.bodyLen)\r\n break\r\n }\r\n\r\n case Tags.MsgTag: {\r\n if (nextTagPos !== 3) {\r\n throw new Error(`MsgTag: not expected at position [${nextTagPos}]`)\r\n }\r\n this.msgType = buffer.getString(equalPos + 1, valueEndPos)\r\n this.message = locations.definitions.message.get(this.msgType)\r\n break\r\n }\r\n\r\n case Tags.CheckSumTag: {\r\n if (valueEndPos < this.bodyLen) {\r\n throw new Error(`CheckSumTag: [${valueEndPos}] expected after ${this.bodyLen}`)\r\n }\r\n this.parseState = ParseState.MsgComplete\r\n break\r\n }\r\n\r\n default: {\r\n if (terminates && valueEndPos > terminates) {\r\n throw new Error(`Tag: [${tag}] cant be after ${terminates}`)\r\n }\r\n break\r\n }\r\n }\r\n\r\n switch (nextTagPos) {\r\n case 1: {\r\n if (tag !== Tags.BeginString) {\r\n throw new Error(`position 1 [${tag}] must be BeginString: 8=`)\r\n }\r\n break\r\n }\r\n case 2: {\r\n if (tag !== Tags.BodyLengthTag) {\r\n throw new Error(`position 2 [${tag}] must be BodyLengthTag: 9=`)\r\n }\r\n break\r\n }\r\n case 3: {\r\n if (tag !== Tags.MsgTag) {\r\n throw new Error(`position 3 [${tag}] must be MsgTag: 35=`)\r\n }\r\n break\r\n }\r\n }\r\n }\r\n\r\n public beginMessage (): void {\r\n this.elasticBuffer.reset()\r\n this.locations.reset()\r\n this.checksumExpectedPos = 0\r\n this.parseState = ParseState.BeginField\r\n this.count = 0\r\n this.currentTag = 0\r\n this.tagStartPos = 0\r\n this.valueEndPos = 0\r\n this.equalPos = 0\r\n this.rawDataRead = 0\r\n this.rawDataLen = 0\r\n this.bodyLen = 0\r\n this.message = null\r\n this.msgType = null\r\n }\r\n}\r\n"]}
@@ -1,20 +1,20 @@
1
1
  /// <reference types="node" />
2
- import { FixDefinitions } from '../../dictionary';
3
2
  import { AsciiParserState } from './ascii-parser-state';
4
3
  import { MsgParser } from '../msg-parser';
5
4
  import { Readable } from 'stream';
5
+ import { ElasticBuffer } from '../elastic-buffer';
6
+ import { IJsFixConfig } from '../../config';
6
7
  export declare class AsciiParser extends MsgParser {
7
- readonly definitions: FixDefinitions;
8
+ readonly config: IJsFixConfig;
8
9
  readonly readStream: Readable;
9
- readonly delimiter: number;
10
- readonly writeDelimiter: number;
11
- readonly maxMessageLen: number;
10
+ protected readonly receivingBuffer: ElasticBuffer;
12
11
  private static nextId;
13
12
  readonly id: number;
14
13
  readonly state: AsciiParserState;
15
- private readonly receivingBuffer;
16
14
  private readonly segmentParser;
17
- constructor(definitions: FixDefinitions, readStream: Readable, delimiter: number, writeDelimiter?: number, maxMessageLen?: number);
15
+ readonly delimiter: number;
16
+ readonly writeDelimiter: number;
17
+ constructor(config: IJsFixConfig, readStream: Readable, receivingBuffer: ElasticBuffer);
18
18
  private subscribe;
19
19
  private msg;
20
20
  parseText(text: string): void;