jspurefix 1.1.2 → 1.4.1

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 (602) hide show
  1. package/.travis.yml +1 -1
  2. package/README.md +48 -2
  3. package/appveyor.yml +43 -11
  4. package/data/FIX44-MD.xml +6596 -0
  5. package/data/examples/FIX.4.4/jsfix.test_client.txt +15 -13
  6. package/data/session/test-qf44-acceptor.json +21 -0
  7. package/data/session/test-qf44-initiator.json +22 -0
  8. package/dist/buffer/ascii/ascii-encoder.d.ts +9 -2
  9. package/dist/buffer/ascii/ascii-encoder.js +72 -31
  10. package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
  11. package/dist/buffer/ascii/ascii-parser.d.ts +1 -0
  12. package/dist/buffer/ascii/ascii-parser.js +7 -1
  13. package/dist/buffer/ascii/ascii-parser.js.map +1 -1
  14. package/dist/buffer/ascii/ascii-segment-parser.d.ts +0 -2
  15. package/dist/buffer/ascii/ascii-segment-parser.js +19 -25
  16. package/dist/buffer/ascii/ascii-segment-parser.js.map +1 -1
  17. package/dist/buffer/ascii/ascii-view.d.ts +2 -0
  18. package/dist/buffer/ascii/ascii-view.js +4 -0
  19. package/dist/buffer/ascii/ascii-view.js.map +1 -1
  20. package/dist/buffer/ascii/time-formatter.js.map +1 -1
  21. package/dist/buffer/ascii-chars.d.ts +1 -0
  22. package/dist/buffer/ascii-chars.js +1 -0
  23. package/dist/buffer/ascii-chars.js.map +1 -1
  24. package/dist/buffer/elastic-buffer.d.ts +1 -0
  25. package/dist/buffer/elastic-buffer.js +8 -0
  26. package/dist/buffer/elastic-buffer.js.map +1 -1
  27. package/dist/buffer/encode-proxy.js.map +1 -1
  28. package/dist/buffer/fixml/fixml-encoder.d.ts +3 -0
  29. package/dist/buffer/fixml/fixml-encoder.js +6 -0
  30. package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
  31. package/dist/buffer/fixml/fixml-view.d.ts +2 -0
  32. package/dist/buffer/fixml/fixml-view.js +3 -0
  33. package/dist/buffer/fixml/fixml-view.js.map +1 -1
  34. package/dist/buffer/msg-encoder.d.ts +2 -0
  35. package/dist/buffer/msg-encoder.js.map +1 -1
  36. package/dist/buffer/msg-view.d.ts +2 -0
  37. package/dist/buffer/msg-view.js.map +1 -1
  38. package/dist/buffer/tags.js +5 -5
  39. package/dist/buffer/tags.js.map +1 -1
  40. package/dist/collections/dictionary.d.ts +1 -0
  41. package/dist/collections/dictionary.js +5 -0
  42. package/dist/collections/dictionary.js.map +1 -1
  43. package/dist/config/js-fix-config.d.ts +2 -0
  44. package/dist/config/js-fix-config.js +1 -0
  45. package/dist/config/js-fix-config.js.map +1 -1
  46. package/dist/dict-parser.js +2 -2
  47. package/dist/dict-parser.js.map +1 -1
  48. package/dist/dictionary/parser/quickfix/field-set-parser.js +11 -4
  49. package/dist/dictionary/parser/quickfix/field-set-parser.js.map +1 -1
  50. package/dist/dictionary/parser/quickfix/message-parser.js +4 -0
  51. package/dist/dictionary/parser/quickfix/message-parser.js.map +1 -1
  52. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.d.ts +1 -0
  53. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +15 -0
  54. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
  55. package/dist/jsfix-cmd.js +2 -1
  56. package/dist/jsfix-cmd.js.map +1 -1
  57. package/dist/sample/http/oms/app.js +2 -0
  58. package/dist/sample/http/oms/app.js.map +1 -1
  59. package/dist/sample/launcher.d.ts +3 -2
  60. package/dist/sample/launcher.js +12 -3
  61. package/dist/sample/launcher.js.map +1 -1
  62. package/dist/sample/tcp/{trade_capture → qf-md}/app.d.ts +0 -0
  63. package/dist/sample/tcp/qf-md/app.js +22 -0
  64. package/dist/sample/tcp/qf-md/app.js.map +1 -0
  65. package/dist/sample/tcp/qf-md/md-client.d.ts +15 -0
  66. package/dist/sample/tcp/qf-md/md-client.js +42 -0
  67. package/dist/sample/tcp/qf-md/md-client.js.map +1 -0
  68. package/dist/sample/tcp/qf-md/md-factory.d.ts +4 -0
  69. package/dist/sample/tcp/qf-md/md-factory.js +35 -0
  70. package/dist/sample/tcp/qf-md/md-factory.js.map +1 -0
  71. package/dist/sample/tcp/qf-md/md-server.d.ts +16 -0
  72. package/dist/sample/tcp/qf-md/md-server.js +44 -0
  73. package/dist/sample/tcp/qf-md/md-server.js.map +1 -0
  74. package/dist/sample/tcp/recovering-skeleton/app.d.ts +1 -0
  75. package/dist/sample/tcp/recovering-skeleton/app.js +27 -0
  76. package/dist/sample/tcp/recovering-skeleton/app.js.map +1 -0
  77. package/dist/sample/tcp/recovering-skeleton/respawn-2.d.ts +2 -0
  78. package/dist/sample/tcp/recovering-skeleton/respawn-2.js +3 -0
  79. package/dist/sample/tcp/recovering-skeleton/respawn-2.js.map +1 -0
  80. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.d.ts +7 -0
  81. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +52 -0
  82. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -0
  83. package/dist/sample/tcp/recovering-skeleton/skeleton-client.d.ts +16 -0
  84. package/dist/sample/tcp/recovering-skeleton/skeleton-client.js +45 -0
  85. package/dist/sample/tcp/recovering-skeleton/skeleton-client.js.map +1 -0
  86. package/dist/sample/tcp/recovering-skeleton/skeleton-server.d.ts +16 -0
  87. package/dist/sample/tcp/recovering-skeleton/skeleton-server.js +52 -0
  88. package/dist/sample/tcp/recovering-skeleton/skeleton-server.js.map +1 -0
  89. package/dist/sample/tcp/skeleton/app.js +2 -0
  90. package/dist/sample/tcp/skeleton/app.js.map +1 -1
  91. package/dist/sample/tcp/skeleton/skeleton-session.d.ts +5 -1
  92. package/dist/sample/tcp/skeleton/skeleton-session.js +22 -3
  93. package/dist/sample/tcp/skeleton/skeleton-session.js.map +1 -1
  94. package/dist/sample/tcp/tls-trade-capture/app.js +1 -1
  95. package/dist/sample/tcp/tls-trade-capture/app.js.map +1 -1
  96. package/dist/sample/tcp/trade-capture/app.d.ts +1 -0
  97. package/dist/sample/tcp/{trade_capture → trade-capture}/app.js +0 -0
  98. package/dist/sample/tcp/{trade_capture → trade-capture}/app.js.map +1 -1
  99. package/dist/sample/tcp/{trade_capture → trade-capture}/index.d.ts +0 -0
  100. package/dist/sample/tcp/{trade_capture → trade-capture}/index.js +0 -0
  101. package/dist/sample/tcp/{trade_capture → trade-capture}/index.js.map +1 -1
  102. package/dist/sample/tcp/{trade_capture → trade-capture}/trade-capture-client.d.ts +1 -0
  103. package/dist/sample/tcp/{trade_capture → trade-capture}/trade-capture-client.js +8 -4
  104. package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -0
  105. package/dist/sample/tcp/{trade_capture → trade-capture}/trade-capture-server.d.ts +0 -0
  106. package/dist/sample/tcp/{trade_capture → trade-capture}/trade-capture-server.js +1 -1
  107. package/dist/sample/tcp/trade-capture/trade-capture-server.js.map +1 -0
  108. package/dist/sample/tcp/{trade_capture → trade-capture}/trade-factory.d.ts +0 -0
  109. package/dist/sample/tcp/{trade_capture → trade-capture}/trade-factory.js +0 -0
  110. package/dist/sample/tcp/{trade_capture → trade-capture}/trade-factory.js.map +1 -1
  111. package/dist/store/fix-msg-ascii-store-resend.d.ts +6 -2
  112. package/dist/store/fix-msg-ascii-store-resend.js +49 -22
  113. package/dist/store/fix-msg-ascii-store-resend.js.map +1 -1
  114. package/dist/store/fix-msg-memory-store.d.ts +11 -8
  115. package/dist/store/fix-msg-memory-store.js +108 -42
  116. package/dist/store/fix-msg-memory-store.js.map +1 -1
  117. package/dist/store/fix-msg-store-record.d.ts +7 -3
  118. package/dist/store/fix-msg-store-record.js +5 -1
  119. package/dist/store/fix-msg-store-record.js.map +1 -1
  120. package/dist/store/fix-msg-store.d.ts +13 -9
  121. package/dist/store/fix-msg-store.js.map +1 -1
  122. package/dist/test/ascii-encode.test.js +20 -3
  123. package/dist/test/ascii-encode.test.js.map +1 -1
  124. package/dist/test/ascii-encoder.test.d.ts +1 -0
  125. package/dist/test/ascii-encoder.test.js +505 -0
  126. package/dist/test/ascii-encoder.test.js.map +1 -0
  127. package/dist/test/ascii-parser.test.js +8 -6
  128. package/dist/test/ascii-parser.test.js.map +1 -1
  129. package/dist/test/ascii-segment.test.js +6 -5
  130. package/dist/test/ascii-segment.test.js.map +1 -1
  131. package/dist/test/ascii-store-replay.test.js +59 -44
  132. package/dist/test/ascii-store-replay.test.js.map +1 -1
  133. package/dist/test/logon.test.js +1 -1
  134. package/dist/test/logon.test.js.map +1 -1
  135. package/dist/test/memory-store.test.js +24 -19
  136. package/dist/test/memory-store.test.js.map +1 -1
  137. package/dist/test/qf-full-msg.test.js +19 -14
  138. package/dist/test/qf-full-msg.test.js.map +1 -1
  139. package/dist/test/repo-full-ascii-msg.test.js +17 -15
  140. package/dist/test/repo-full-ascii-msg.test.js.map +1 -1
  141. package/dist/test/repo-full-fixml-msg.test.js +14 -14
  142. package/dist/test/repo-full-fixml-msg.test.js.map +1 -1
  143. package/dist/test/session-state.test.js +2 -2
  144. package/dist/test/session-state.test.js.map +1 -1
  145. package/dist/test/session.test.js +263 -143
  146. package/dist/test/session.test.js.map +1 -1
  147. package/dist/test/view-decode.test.js +2 -1
  148. package/dist/test/view-decode.test.js.map +1 -1
  149. package/dist/transport/a-session-msg-factory.d.ts +23 -0
  150. package/dist/transport/a-session-msg-factory.js +58 -0
  151. package/dist/transport/a-session-msg-factory.js.map +1 -0
  152. package/dist/transport/ascii/ascii-msg-transmitter.d.ts +1 -0
  153. package/dist/transport/ascii/ascii-msg-transmitter.js +39 -8
  154. package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
  155. package/dist/transport/ascii/ascii-session-msg-factory.d.ts +16 -0
  156. package/dist/transport/ascii/ascii-session-msg-factory.js +47 -0
  157. package/dist/transport/ascii/ascii-session-msg-factory.js.map +1 -0
  158. package/dist/transport/ascii/ascii-session.d.ts +10 -2
  159. package/dist/transport/ascii/ascii-session.js +86 -31
  160. package/dist/transport/ascii/ascii-session.js.map +1 -1
  161. package/dist/transport/ascii/index.d.ts +1 -0
  162. package/dist/transport/ascii/index.js +1 -0
  163. package/dist/transport/ascii/index.js.map +1 -1
  164. package/dist/transport/ascii-session-msg-factory.d.ts +16 -0
  165. package/dist/transport/ascii-session-msg-factory.js +47 -0
  166. package/dist/transport/ascii-session-msg-factory.js.map +1 -0
  167. package/dist/transport/duplex/http-duplex.js +2 -2
  168. package/dist/transport/duplex/http-duplex.js.map +1 -1
  169. package/dist/transport/fix-msg-factory.d.ts +1 -1
  170. package/dist/transport/fix-msg-factory.js.map +1 -1
  171. package/dist/transport/fix-session-state.d.ts +38 -12
  172. package/dist/transport/fix-session-state.js +49 -15
  173. package/dist/transport/fix-session-state.js.map +1 -1
  174. package/dist/transport/fix-session.d.ts +13 -6
  175. package/dist/transport/fix-session.js +143 -39
  176. package/dist/transport/fix-session.js.map +1 -1
  177. package/dist/transport/fixml/fixml-session-msg-factory.d.ts +13 -0
  178. package/dist/transport/fixml/fixml-session-msg-factory.js +68 -0
  179. package/dist/transport/fixml/fixml-session-msg-factory.js.map +1 -0
  180. package/dist/transport/fixml/fixml-session.js +1 -1
  181. package/dist/transport/fixml/fixml-session.js.map +1 -1
  182. package/dist/transport/fixml/index.d.ts +2 -1
  183. package/dist/transport/fixml/index.js +2 -1
  184. package/dist/transport/fixml/index.js.map +1 -1
  185. package/dist/transport/fixml-session-msg-factory.d.ts +13 -0
  186. package/dist/transport/fixml-session-msg-factory.js +68 -0
  187. package/dist/transport/fixml-session-msg-factory.js.map +1 -0
  188. package/dist/transport/http/http-acceptor.js +8 -7
  189. package/dist/transport/http/http-acceptor.js.map +1 -1
  190. package/dist/transport/index.d.ts +1 -1
  191. package/dist/transport/index.js +1 -1
  192. package/dist/transport/index.js.map +1 -1
  193. package/dist/transport/msg-transmitter.js +4 -3
  194. package/dist/transport/msg-transmitter.js.map +1 -1
  195. package/dist/transport/msg-transport.js +3 -2
  196. package/dist/transport/msg-transport.js.map +1 -1
  197. package/dist/transport/session-description.d.ts +1 -1
  198. package/dist/transport/session-description.js.map +1 -1
  199. package/dist/transport/session-msg-factory.d.ts +2 -2
  200. package/dist/transport/session-msg-factory.js +2 -2
  201. package/dist/transport/session-msg-factory.js.map +1 -1
  202. package/dist/transport/tcp/acceptor.js +5 -3
  203. package/dist/transport/tcp/acceptor.js.map +1 -1
  204. package/dist/transport/tcp/index.d.ts +1 -0
  205. package/dist/transport/tcp/index.js +1 -0
  206. package/dist/transport/tcp/index.js.map +1 -1
  207. package/dist/transport/tcp/initiator.js +1 -0
  208. package/dist/transport/tcp/initiator.js.map +1 -1
  209. package/dist/transport/tcp/recovering-initiator.d.ts +17 -0
  210. package/dist/transport/tcp/recovering-initiator.js +30 -0
  211. package/dist/transport/tcp/recovering-initiator.js.map +1 -0
  212. package/dist/transport/tcp/recovering-tcp-initiator.d.ts +28 -0
  213. package/dist/transport/tcp/recovering-tcp-initiator.js +120 -0
  214. package/dist/transport/tcp/recovering-tcp-initiator.js.map +1 -0
  215. package/dist/transport/tcp/tcp-acceptor.d.ts +7 -0
  216. package/dist/transport/tcp/tcp-acceptor.js +43 -11
  217. package/dist/transport/tcp/tcp-acceptor.js.map +1 -1
  218. package/dist/transport/tcp/tcp-initiator.d.ts +4 -0
  219. package/dist/transport/tcp/tcp-initiator.js +72 -35
  220. package/dist/transport/tcp/tcp-initiator.js.map +1 -1
  221. package/dist/types/FIX4.4/quickfix/advertisement.d.ts +4 -0
  222. package/dist/types/FIX4.4/quickfix/advertisement.js.map +1 -1
  223. package/dist/types/FIX4.4/quickfix/allocation_instruction.d.ts +4 -0
  224. package/dist/types/FIX4.4/quickfix/allocation_instruction.js.map +1 -1
  225. package/dist/types/FIX4.4/quickfix/allocation_instruction_ack.d.ts +4 -0
  226. package/dist/types/FIX4.4/quickfix/allocation_instruction_ack.js.map +1 -1
  227. package/dist/types/FIX4.4/quickfix/allocation_report.d.ts +4 -0
  228. package/dist/types/FIX4.4/quickfix/allocation_report.js.map +1 -1
  229. package/dist/types/FIX4.4/quickfix/allocation_report_ack.d.ts +4 -0
  230. package/dist/types/FIX4.4/quickfix/allocation_report_ack.js.map +1 -1
  231. package/dist/types/FIX4.4/quickfix/assignment_report.d.ts +4 -0
  232. package/dist/types/FIX4.4/quickfix/assignment_report.js.map +1 -1
  233. package/dist/types/FIX4.4/quickfix/bid_request.d.ts +4 -0
  234. package/dist/types/FIX4.4/quickfix/bid_request.js.map +1 -1
  235. package/dist/types/FIX4.4/quickfix/bid_response.d.ts +4 -0
  236. package/dist/types/FIX4.4/quickfix/bid_response.js.map +1 -1
  237. package/dist/types/FIX4.4/quickfix/business_message_reject.d.ts +4 -0
  238. package/dist/types/FIX4.4/quickfix/business_message_reject.js.map +1 -1
  239. package/dist/types/FIX4.4/quickfix/collateral_assignment.d.ts +4 -0
  240. package/dist/types/FIX4.4/quickfix/collateral_assignment.js.map +1 -1
  241. package/dist/types/FIX4.4/quickfix/collateral_inquiry.d.ts +4 -0
  242. package/dist/types/FIX4.4/quickfix/collateral_inquiry.js.map +1 -1
  243. package/dist/types/FIX4.4/quickfix/collateral_inquiry_ack.d.ts +4 -0
  244. package/dist/types/FIX4.4/quickfix/collateral_inquiry_ack.js.map +1 -1
  245. package/dist/types/FIX4.4/quickfix/collateral_report.d.ts +4 -0
  246. package/dist/types/FIX4.4/quickfix/collateral_report.js.map +1 -1
  247. package/dist/types/FIX4.4/quickfix/collateral_request.d.ts +4 -0
  248. package/dist/types/FIX4.4/quickfix/collateral_request.js.map +1 -1
  249. package/dist/types/FIX4.4/quickfix/collateral_response.d.ts +4 -0
  250. package/dist/types/FIX4.4/quickfix/collateral_response.js.map +1 -1
  251. package/dist/types/FIX4.4/quickfix/confirmation.d.ts +4 -0
  252. package/dist/types/FIX4.4/quickfix/confirmation.js.map +1 -1
  253. package/dist/types/FIX4.4/quickfix/confirmation_ack.d.ts +4 -0
  254. package/dist/types/FIX4.4/quickfix/confirmation_ack.js.map +1 -1
  255. package/dist/types/FIX4.4/quickfix/confirmation_request.d.ts +4 -0
  256. package/dist/types/FIX4.4/quickfix/confirmation_request.js.map +1 -1
  257. package/dist/types/FIX4.4/quickfix/cross_order_cancel_replace_request.d.ts +4 -0
  258. package/dist/types/FIX4.4/quickfix/cross_order_cancel_replace_request.js.map +1 -1
  259. package/dist/types/FIX4.4/quickfix/cross_order_cancel_request.d.ts +4 -0
  260. package/dist/types/FIX4.4/quickfix/cross_order_cancel_request.js.map +1 -1
  261. package/dist/types/FIX4.4/quickfix/derivative_security_list.d.ts +4 -0
  262. package/dist/types/FIX4.4/quickfix/derivative_security_list.js.map +1 -1
  263. package/dist/types/FIX4.4/quickfix/derivative_security_list_request.d.ts +4 -0
  264. package/dist/types/FIX4.4/quickfix/derivative_security_list_request.js.map +1 -1
  265. package/dist/types/FIX4.4/quickfix/dont_know_trade.d.ts +4 -0
  266. package/dist/types/FIX4.4/quickfix/dont_know_trade.js.map +1 -1
  267. package/dist/types/FIX4.4/quickfix/email.d.ts +4 -0
  268. package/dist/types/FIX4.4/quickfix/email.js.map +1 -1
  269. package/dist/types/FIX4.4/quickfix/execution_report.d.ts +4 -0
  270. package/dist/types/FIX4.4/quickfix/execution_report.js.map +1 -1
  271. package/dist/types/FIX4.4/quickfix/heartbeat.d.ts +4 -0
  272. package/dist/types/FIX4.4/quickfix/heartbeat.js.map +1 -1
  273. package/dist/types/FIX4.4/quickfix/index.d.ts +4 -0
  274. package/dist/types/FIX4.4/quickfix/index.js +4 -0
  275. package/dist/types/FIX4.4/quickfix/index.js.map +1 -1
  276. package/dist/types/FIX4.4/quickfix/ioi.d.ts +4 -0
  277. package/dist/types/FIX4.4/quickfix/ioi.js.map +1 -1
  278. package/dist/types/FIX4.4/quickfix/list_cancel_request.d.ts +4 -0
  279. package/dist/types/FIX4.4/quickfix/list_cancel_request.js.map +1 -1
  280. package/dist/types/FIX4.4/quickfix/list_execute.d.ts +4 -0
  281. package/dist/types/FIX4.4/quickfix/list_execute.js.map +1 -1
  282. package/dist/types/FIX4.4/quickfix/list_status.d.ts +4 -0
  283. package/dist/types/FIX4.4/quickfix/list_status.js.map +1 -1
  284. package/dist/types/FIX4.4/quickfix/list_status_request.d.ts +4 -0
  285. package/dist/types/FIX4.4/quickfix/list_status_request.js.map +1 -1
  286. package/dist/types/FIX4.4/quickfix/list_strike_price.d.ts +4 -0
  287. package/dist/types/FIX4.4/quickfix/list_strike_price.js.map +1 -1
  288. package/dist/types/FIX4.4/quickfix/logon.d.ts +4 -0
  289. package/dist/types/FIX4.4/quickfix/logon.js.map +1 -1
  290. package/dist/types/FIX4.4/quickfix/logout.d.ts +4 -0
  291. package/dist/types/FIX4.4/quickfix/logout.js.map +1 -1
  292. package/dist/types/FIX4.4/quickfix/market_data_incremental_refresh.d.ts +4 -0
  293. package/dist/types/FIX4.4/quickfix/market_data_incremental_refresh.js.map +1 -1
  294. package/dist/types/FIX4.4/quickfix/market_data_request.d.ts +4 -0
  295. package/dist/types/FIX4.4/quickfix/market_data_request.js.map +1 -1
  296. package/dist/types/FIX4.4/quickfix/market_data_request_reject.d.ts +4 -0
  297. package/dist/types/FIX4.4/quickfix/market_data_request_reject.js.map +1 -1
  298. package/dist/types/FIX4.4/quickfix/market_data_snapshot_full_refresh.d.ts +4 -0
  299. package/dist/types/FIX4.4/quickfix/market_data_snapshot_full_refresh.js.map +1 -1
  300. package/dist/types/FIX4.4/quickfix/mass_quote.d.ts +4 -0
  301. package/dist/types/FIX4.4/quickfix/mass_quote.js.map +1 -1
  302. package/dist/types/FIX4.4/quickfix/mass_quote_acknowledgement.d.ts +4 -0
  303. package/dist/types/FIX4.4/quickfix/mass_quote_acknowledgement.js.map +1 -1
  304. package/dist/types/FIX4.4/quickfix/multileg_order_cancel_replace.d.ts +4 -0
  305. package/dist/types/FIX4.4/quickfix/multileg_order_cancel_replace.js.map +1 -1
  306. package/dist/types/FIX4.4/quickfix/network_counterparty_system_status_request.d.ts +4 -0
  307. package/dist/types/FIX4.4/quickfix/network_counterparty_system_status_request.js.map +1 -1
  308. package/dist/types/FIX4.4/quickfix/network_counterparty_system_status_response.d.ts +4 -0
  309. package/dist/types/FIX4.4/quickfix/network_counterparty_system_status_response.js.map +1 -1
  310. package/dist/types/FIX4.4/quickfix/new_order_cross.d.ts +4 -0
  311. package/dist/types/FIX4.4/quickfix/new_order_cross.js.map +1 -1
  312. package/dist/types/FIX4.4/quickfix/new_order_list.d.ts +4 -0
  313. package/dist/types/FIX4.4/quickfix/new_order_list.js.map +1 -1
  314. package/dist/types/FIX4.4/quickfix/new_order_multileg.d.ts +4 -0
  315. package/dist/types/FIX4.4/quickfix/new_order_multileg.js.map +1 -1
  316. package/dist/types/FIX4.4/quickfix/new_order_single.d.ts +4 -0
  317. package/dist/types/FIX4.4/quickfix/new_order_single.js.map +1 -1
  318. package/dist/types/FIX4.4/quickfix/news.d.ts +4 -0
  319. package/dist/types/FIX4.4/quickfix/news.js.map +1 -1
  320. package/dist/types/FIX4.4/quickfix/order_cancel_reject.d.ts +4 -0
  321. package/dist/types/FIX4.4/quickfix/order_cancel_reject.js.map +1 -1
  322. package/dist/types/FIX4.4/quickfix/order_cancel_replace_request.d.ts +4 -0
  323. package/dist/types/FIX4.4/quickfix/order_cancel_replace_request.js.map +1 -1
  324. package/dist/types/FIX4.4/quickfix/order_cancel_request.d.ts +4 -0
  325. package/dist/types/FIX4.4/quickfix/order_cancel_request.js.map +1 -1
  326. package/dist/types/FIX4.4/quickfix/order_mass_cancel_report.d.ts +4 -0
  327. package/dist/types/FIX4.4/quickfix/order_mass_cancel_report.js.map +1 -1
  328. package/dist/types/FIX4.4/quickfix/order_mass_cancel_request.d.ts +4 -0
  329. package/dist/types/FIX4.4/quickfix/order_mass_cancel_request.js.map +1 -1
  330. package/dist/types/FIX4.4/quickfix/order_mass_status_request.d.ts +4 -0
  331. package/dist/types/FIX4.4/quickfix/order_mass_status_request.js.map +1 -1
  332. package/dist/types/FIX4.4/quickfix/order_status_request.d.ts +4 -0
  333. package/dist/types/FIX4.4/quickfix/order_status_request.js.map +1 -1
  334. package/dist/types/FIX4.4/quickfix/position_maintenance_report.d.ts +4 -0
  335. package/dist/types/FIX4.4/quickfix/position_maintenance_report.js.map +1 -1
  336. package/dist/types/FIX4.4/quickfix/position_maintenance_request.d.ts +4 -0
  337. package/dist/types/FIX4.4/quickfix/position_maintenance_request.js.map +1 -1
  338. package/dist/types/FIX4.4/quickfix/position_report.d.ts +4 -0
  339. package/dist/types/FIX4.4/quickfix/position_report.js.map +1 -1
  340. package/dist/types/FIX4.4/quickfix/quote.d.ts +4 -0
  341. package/dist/types/FIX4.4/quickfix/quote.js.map +1 -1
  342. package/dist/types/FIX4.4/quickfix/quote_cancel.d.ts +4 -0
  343. package/dist/types/FIX4.4/quickfix/quote_cancel.js.map +1 -1
  344. package/dist/types/FIX4.4/quickfix/quote_request.d.ts +4 -0
  345. package/dist/types/FIX4.4/quickfix/quote_request.js.map +1 -1
  346. package/dist/types/FIX4.4/quickfix/quote_request_reject.d.ts +4 -0
  347. package/dist/types/FIX4.4/quickfix/quote_request_reject.js.map +1 -1
  348. package/dist/types/FIX4.4/quickfix/quote_response.d.ts +4 -0
  349. package/dist/types/FIX4.4/quickfix/quote_response.js.map +1 -1
  350. package/dist/types/FIX4.4/quickfix/quote_status_report.d.ts +4 -0
  351. package/dist/types/FIX4.4/quickfix/quote_status_report.js.map +1 -1
  352. package/dist/types/FIX4.4/quickfix/quote_status_request.d.ts +4 -0
  353. package/dist/types/FIX4.4/quickfix/quote_status_request.js.map +1 -1
  354. package/dist/types/FIX4.4/quickfix/registration_instructions.d.ts +4 -0
  355. package/dist/types/FIX4.4/quickfix/registration_instructions.js.map +1 -1
  356. package/dist/types/FIX4.4/quickfix/registration_instructions_response.d.ts +4 -0
  357. package/dist/types/FIX4.4/quickfix/registration_instructions_response.js.map +1 -1
  358. package/dist/types/FIX4.4/quickfix/reject.d.ts +4 -0
  359. package/dist/types/FIX4.4/quickfix/reject.js.map +1 -1
  360. package/dist/types/FIX4.4/quickfix/request_for_positions.d.ts +4 -0
  361. package/dist/types/FIX4.4/quickfix/request_for_positions.js.map +1 -1
  362. package/dist/types/FIX4.4/quickfix/request_for_positions_ack.d.ts +4 -0
  363. package/dist/types/FIX4.4/quickfix/request_for_positions_ack.js.map +1 -1
  364. package/dist/types/FIX4.4/quickfix/resend_request.d.ts +4 -0
  365. package/dist/types/FIX4.4/quickfix/resend_request.js.map +1 -1
  366. package/dist/types/FIX4.4/quickfix/rfq_request.d.ts +4 -0
  367. package/dist/types/FIX4.4/quickfix/rfq_request.js.map +1 -1
  368. package/dist/types/FIX4.4/quickfix/security_definition.d.ts +4 -0
  369. package/dist/types/FIX4.4/quickfix/security_definition.js.map +1 -1
  370. package/dist/types/FIX4.4/quickfix/security_definition_request.d.ts +4 -0
  371. package/dist/types/FIX4.4/quickfix/security_definition_request.js.map +1 -1
  372. package/dist/types/FIX4.4/quickfix/security_list.d.ts +4 -0
  373. package/dist/types/FIX4.4/quickfix/security_list.js.map +1 -1
  374. package/dist/types/FIX4.4/quickfix/security_list_request.d.ts +4 -0
  375. package/dist/types/FIX4.4/quickfix/security_list_request.js.map +1 -1
  376. package/dist/types/FIX4.4/quickfix/security_status.d.ts +4 -0
  377. package/dist/types/FIX4.4/quickfix/security_status.js.map +1 -1
  378. package/dist/types/FIX4.4/quickfix/security_status_request.d.ts +4 -0
  379. package/dist/types/FIX4.4/quickfix/security_status_request.js.map +1 -1
  380. package/dist/types/FIX4.4/quickfix/security_type_request.d.ts +4 -0
  381. package/dist/types/FIX4.4/quickfix/security_type_request.js.map +1 -1
  382. package/dist/types/FIX4.4/quickfix/security_types.d.ts +4 -0
  383. package/dist/types/FIX4.4/quickfix/security_types.js.map +1 -1
  384. package/dist/types/FIX4.4/quickfix/sequence_reset.d.ts +4 -0
  385. package/dist/types/FIX4.4/quickfix/sequence_reset.js.map +1 -1
  386. package/dist/types/FIX4.4/quickfix/set/header.d.ts +31 -0
  387. package/dist/types/FIX4.4/quickfix/set/header.js +3 -0
  388. package/dist/types/FIX4.4/quickfix/set/header.js.map +1 -0
  389. package/dist/types/FIX4.4/quickfix/set/hop.d.ts +4 -0
  390. package/dist/types/FIX4.4/quickfix/set/hop.js +3 -0
  391. package/dist/types/FIX4.4/quickfix/set/hop.js.map +1 -0
  392. package/dist/types/FIX4.4/quickfix/set/hop_no_hops.d.ts +5 -0
  393. package/dist/types/FIX4.4/quickfix/set/hop_no_hops.js +3 -0
  394. package/dist/types/FIX4.4/quickfix/set/hop_no_hops.js.map +1 -0
  395. package/dist/types/FIX4.4/quickfix/set/standard_header.d.ts +31 -0
  396. package/dist/types/FIX4.4/quickfix/set/standard_header.js +3 -0
  397. package/dist/types/FIX4.4/quickfix/set/standard_header.js.map +1 -0
  398. package/dist/types/FIX4.4/quickfix/set/standard_trailer.d.ts +6 -0
  399. package/dist/types/FIX4.4/quickfix/set/standard_trailer.js +3 -0
  400. package/dist/types/FIX4.4/quickfix/set/standard_trailer.js.map +1 -0
  401. package/dist/types/FIX4.4/quickfix/set/trailer.d.ts +6 -0
  402. package/dist/types/FIX4.4/quickfix/set/trailer.js +3 -0
  403. package/dist/types/FIX4.4/quickfix/set/trailer.js.map +1 -0
  404. package/dist/types/FIX4.4/quickfix/settlement_instruction_request.d.ts +4 -0
  405. package/dist/types/FIX4.4/quickfix/settlement_instruction_request.js.map +1 -1
  406. package/dist/types/FIX4.4/quickfix/settlement_instructions.d.ts +4 -0
  407. package/dist/types/FIX4.4/quickfix/settlement_instructions.js.map +1 -1
  408. package/dist/types/FIX4.4/quickfix/test_request.d.ts +4 -0
  409. package/dist/types/FIX4.4/quickfix/test_request.js.map +1 -1
  410. package/dist/types/FIX4.4/quickfix/trade_capture_report.d.ts +4 -0
  411. package/dist/types/FIX4.4/quickfix/trade_capture_report.js.map +1 -1
  412. package/dist/types/FIX4.4/quickfix/trade_capture_report_ack.d.ts +4 -0
  413. package/dist/types/FIX4.4/quickfix/trade_capture_report_ack.js.map +1 -1
  414. package/dist/types/FIX4.4/quickfix/trade_capture_report_request.d.ts +4 -0
  415. package/dist/types/FIX4.4/quickfix/trade_capture_report_request.js.map +1 -1
  416. package/dist/types/FIX4.4/quickfix/trade_capture_report_request_ack.d.ts +4 -0
  417. package/dist/types/FIX4.4/quickfix/trade_capture_report_request_ack.js.map +1 -1
  418. package/dist/types/FIX4.4/quickfix/trading_session_status.d.ts +4 -0
  419. package/dist/types/FIX4.4/quickfix/trading_session_status.js.map +1 -1
  420. package/dist/types/FIX4.4/quickfix/trading_session_status_request.d.ts +4 -0
  421. package/dist/types/FIX4.4/quickfix/trading_session_status_request.js.map +1 -1
  422. package/dist/types/FIX4.4/quickfix/user_request.d.ts +4 -0
  423. package/dist/types/FIX4.4/quickfix/user_request.js.map +1 -1
  424. package/dist/types/FIX4.4/quickfix/user_response.d.ts +4 -0
  425. package/dist/types/FIX4.4/quickfix/user_response.js.map +1 -1
  426. package/dist/types/FIX4.4/quickfix/xm_lnon_fix.d.ts +4 -0
  427. package/dist/types/FIX4.4/quickfix/xm_lnon_fix.js.map +1 -1
  428. package/dist/types/FIX4.4/repo/enum/all-enum.js.map +1 -1
  429. package/package.json +25 -21
  430. package/script/build.sh +1 -0
  431. package/src/buffer/ascii/ascii-encoder.ts +110 -33
  432. package/src/buffer/ascii/ascii-parser.ts +8 -1
  433. package/src/buffer/ascii/ascii-segment-parser.ts +44 -38
  434. package/src/buffer/ascii/ascii-view.ts +5 -0
  435. package/src/buffer/ascii/time-formatter.ts +2 -2
  436. package/src/buffer/ascii-chars.ts +1 -0
  437. package/src/buffer/elastic-buffer.ts +9 -0
  438. package/src/buffer/encode-proxy.ts +2 -2
  439. package/src/buffer/fixml/fixml-encoder.ts +8 -0
  440. package/src/buffer/fixml/fixml-view.ts +5 -0
  441. package/src/buffer/msg-encoder.ts +2 -0
  442. package/src/buffer/msg-view.ts +3 -0
  443. package/src/buffer/tags.ts +1 -1
  444. package/src/collections/dictionary.ts +6 -0
  445. package/src/config/js-fix-config.ts +2 -0
  446. package/src/dictionary/parser/quickfix/field-set-parser.ts +11 -4
  447. package/src/dictionary/parser/quickfix/message-parser.ts +4 -0
  448. package/src/dictionary/parser/quickfix/quick-fix-xml-file-parser.ts +16 -0
  449. package/src/jsfix-cmd.ts +2 -1
  450. package/src/sample/http/oms/app.ts +2 -0
  451. package/src/sample/launcher.ts +17 -7
  452. package/src/sample/tcp/qf-md/app.ts +26 -0
  453. package/src/sample/tcp/qf-md/md-client.ts +51 -0
  454. package/src/sample/tcp/qf-md/md-factory.ts +34 -0
  455. package/src/sample/tcp/qf-md/md-server.ts +56 -0
  456. package/src/sample/tcp/recovering-skeleton/app.ts +33 -0
  457. package/src/sample/tcp/recovering-skeleton/respawn-acceptor.ts +41 -0
  458. package/src/sample/tcp/recovering-skeleton/skeleton-client.ts +54 -0
  459. package/src/sample/tcp/recovering-skeleton/skeleton-server.ts +60 -0
  460. package/src/sample/tcp/skeleton/app.ts +2 -0
  461. package/src/sample/tcp/skeleton/skeleton-session.ts +26 -4
  462. package/src/sample/tcp/tls-trade-capture/app.ts +1 -1
  463. package/src/sample/tcp/{trade_capture → trade-capture}/app.ts +0 -0
  464. package/src/sample/tcp/{trade_capture → trade-capture}/index.ts +0 -0
  465. package/src/sample/tcp/{trade_capture → trade-capture}/trade-capture-client.ts +10 -5
  466. package/src/sample/tcp/{trade_capture → trade-capture}/trade-capture-server.ts +2 -2
  467. package/src/sample/tcp/{trade_capture → trade-capture}/trade-factory.ts +0 -0
  468. package/src/store/fix-msg-ascii-store-resend.ts +87 -0
  469. package/src/store/fix-msg-memory-store.ts +171 -0
  470. package/src/store/fix-msg-store-record.ts +23 -0
  471. package/src/store/fix-msg-store.ts +23 -0
  472. package/src/store/index.ts +4 -0
  473. package/src/transport/a-session-msg-factory.ts +81 -0
  474. package/src/transport/ascii/ascii-msg-transmitter.ts +32 -11
  475. package/src/transport/ascii/ascii-session-msg-factory.ts +62 -0
  476. package/src/transport/ascii/ascii-session.ts +100 -36
  477. package/src/transport/ascii/index.ts +1 -0
  478. package/src/transport/duplex/http-duplex.ts +2 -2
  479. package/src/transport/fix-msg-factory.ts +1 -1
  480. package/src/transport/fix-session-state.ts +67 -15
  481. package/src/transport/fix-session.ts +156 -43
  482. package/src/transport/fixml/fixml-session-msg-factory.ts +76 -0
  483. package/src/transport/fixml/fixml-session.ts +1 -1
  484. package/src/transport/fixml/index.ts +2 -1
  485. package/src/transport/http/http-acceptor.ts +7 -6
  486. package/src/transport/index.ts +1 -1
  487. package/src/transport/msg-transmitter.ts +4 -3
  488. package/src/transport/msg-transport.ts +3 -2
  489. package/src/transport/session-description.ts +1 -1
  490. package/src/transport/tcp/acceptor.ts +5 -3
  491. package/src/transport/tcp/index.ts +1 -0
  492. package/src/transport/tcp/initiator.ts +1 -0
  493. package/src/transport/tcp/recovering-tcp-initiator.ts +149 -0
  494. package/src/transport/tcp/tcp-acceptor.ts +46 -11
  495. package/src/transport/tcp/tcp-initiator.ts +77 -40
  496. package/src/types/FIX4.4/quickfix/advertisement.ts +4 -0
  497. package/src/types/FIX4.4/quickfix/allocation_instruction.ts +4 -0
  498. package/src/types/FIX4.4/quickfix/allocation_instruction_ack.ts +4 -0
  499. package/src/types/FIX4.4/quickfix/allocation_report.ts +4 -0
  500. package/src/types/FIX4.4/quickfix/allocation_report_ack.ts +4 -0
  501. package/src/types/FIX4.4/quickfix/assignment_report.ts +4 -0
  502. package/src/types/FIX4.4/quickfix/bid_request.ts +4 -0
  503. package/src/types/FIX4.4/quickfix/bid_response.ts +4 -0
  504. package/src/types/FIX4.4/quickfix/business_message_reject.ts +5 -0
  505. package/src/types/FIX4.4/quickfix/collateral_assignment.ts +4 -0
  506. package/src/types/FIX4.4/quickfix/collateral_inquiry.ts +4 -0
  507. package/src/types/FIX4.4/quickfix/collateral_inquiry_ack.ts +4 -0
  508. package/src/types/FIX4.4/quickfix/collateral_report.ts +4 -0
  509. package/src/types/FIX4.4/quickfix/collateral_request.ts +4 -0
  510. package/src/types/FIX4.4/quickfix/collateral_response.ts +4 -0
  511. package/src/types/FIX4.4/quickfix/confirmation.ts +4 -0
  512. package/src/types/FIX4.4/quickfix/confirmation_ack.ts +5 -0
  513. package/src/types/FIX4.4/quickfix/confirmation_request.ts +4 -0
  514. package/src/types/FIX4.4/quickfix/cross_order_cancel_replace_request.ts +4 -0
  515. package/src/types/FIX4.4/quickfix/cross_order_cancel_request.ts +4 -0
  516. package/src/types/FIX4.4/quickfix/derivative_security_list.ts +4 -0
  517. package/src/types/FIX4.4/quickfix/derivative_security_list_request.ts +4 -0
  518. package/src/types/FIX4.4/quickfix/dont_know_trade.ts +4 -0
  519. package/src/types/FIX4.4/quickfix/email.ts +4 -0
  520. package/src/types/FIX4.4/quickfix/execution_report.ts +4 -0
  521. package/src/types/FIX4.4/quickfix/heartbeat.ts +5 -0
  522. package/src/types/FIX4.4/quickfix/index.ts +4 -0
  523. package/src/types/FIX4.4/quickfix/ioi.ts +4 -0
  524. package/src/types/FIX4.4/quickfix/list_cancel_request.ts +5 -0
  525. package/src/types/FIX4.4/quickfix/list_execute.ts +6 -1
  526. package/src/types/FIX4.4/quickfix/list_status.ts +4 -0
  527. package/src/types/FIX4.4/quickfix/list_status_request.ts +5 -0
  528. package/src/types/FIX4.4/quickfix/list_strike_price.ts +4 -0
  529. package/src/types/FIX4.4/quickfix/logon.ts +4 -0
  530. package/src/types/FIX4.4/quickfix/logout.ts +6 -1
  531. package/src/types/FIX4.4/quickfix/market_data_incremental_refresh.ts +4 -0
  532. package/src/types/FIX4.4/quickfix/market_data_request.ts +4 -0
  533. package/src/types/FIX4.4/quickfix/market_data_request_reject.ts +4 -0
  534. package/src/types/FIX4.4/quickfix/market_data_snapshot_full_refresh.ts +4 -0
  535. package/src/types/FIX4.4/quickfix/mass_quote.ts +4 -0
  536. package/src/types/FIX4.4/quickfix/mass_quote_acknowledgement.ts +4 -0
  537. package/src/types/FIX4.4/quickfix/multileg_order_cancel_replace.ts +4 -0
  538. package/src/types/FIX4.4/quickfix/network_counterparty_system_status_request.ts +4 -0
  539. package/src/types/FIX4.4/quickfix/network_counterparty_system_status_response.ts +4 -0
  540. package/src/types/FIX4.4/quickfix/new_order_cross.ts +4 -0
  541. package/src/types/FIX4.4/quickfix/new_order_list.ts +4 -0
  542. package/src/types/FIX4.4/quickfix/new_order_multileg.ts +4 -0
  543. package/src/types/FIX4.4/quickfix/new_order_single.ts +4 -0
  544. package/src/types/FIX4.4/quickfix/news.ts +4 -0
  545. package/src/types/FIX4.4/quickfix/order_cancel_reject.ts +5 -0
  546. package/src/types/FIX4.4/quickfix/order_cancel_replace_request.ts +4 -0
  547. package/src/types/FIX4.4/quickfix/order_cancel_request.ts +4 -0
  548. package/src/types/FIX4.4/quickfix/order_mass_cancel_report.ts +4 -0
  549. package/src/types/FIX4.4/quickfix/order_mass_cancel_request.ts +4 -0
  550. package/src/types/FIX4.4/quickfix/order_mass_status_request.ts +4 -0
  551. package/src/types/FIX4.4/quickfix/order_status_request.ts +4 -0
  552. package/src/types/FIX4.4/quickfix/position_maintenance_report.ts +4 -0
  553. package/src/types/FIX4.4/quickfix/position_maintenance_request.ts +4 -0
  554. package/src/types/FIX4.4/quickfix/position_report.ts +4 -0
  555. package/src/types/FIX4.4/quickfix/quote.ts +4 -0
  556. package/src/types/FIX4.4/quickfix/quote_cancel.ts +4 -0
  557. package/src/types/FIX4.4/quickfix/quote_request.ts +4 -0
  558. package/src/types/FIX4.4/quickfix/quote_request_reject.ts +4 -0
  559. package/src/types/FIX4.4/quickfix/quote_response.ts +4 -0
  560. package/src/types/FIX4.4/quickfix/quote_status_report.ts +4 -0
  561. package/src/types/FIX4.4/quickfix/quote_status_request.ts +4 -0
  562. package/src/types/FIX4.4/quickfix/registration_instructions.ts +4 -0
  563. package/src/types/FIX4.4/quickfix/registration_instructions_response.ts +4 -0
  564. package/src/types/FIX4.4/quickfix/reject.ts +6 -1
  565. package/src/types/FIX4.4/quickfix/request_for_positions.ts +4 -0
  566. package/src/types/FIX4.4/quickfix/request_for_positions_ack.ts +4 -0
  567. package/src/types/FIX4.4/quickfix/resend_request.ts +5 -0
  568. package/src/types/FIX4.4/quickfix/rfq_request.ts +4 -0
  569. package/src/types/FIX4.4/quickfix/security_definition.ts +4 -0
  570. package/src/types/FIX4.4/quickfix/security_definition_request.ts +4 -0
  571. package/src/types/FIX4.4/quickfix/security_list.ts +4 -0
  572. package/src/types/FIX4.4/quickfix/security_list_request.ts +4 -0
  573. package/src/types/FIX4.4/quickfix/security_status.ts +4 -0
  574. package/src/types/FIX4.4/quickfix/security_status_request.ts +4 -0
  575. package/src/types/FIX4.4/quickfix/security_type_request.ts +5 -0
  576. package/src/types/FIX4.4/quickfix/security_types.ts +4 -0
  577. package/src/types/FIX4.4/quickfix/sequence_reset.ts +5 -0
  578. package/src/types/FIX4.4/quickfix/set/hop.ts +5 -0
  579. package/src/types/FIX4.4/quickfix/set/hop_no_hops.ts +5 -0
  580. package/src/types/FIX4.4/quickfix/set/standard_header.ts +31 -0
  581. package/src/types/FIX4.4/quickfix/set/standard_trailer.ts +5 -0
  582. package/src/types/FIX4.4/quickfix/settlement_instruction_request.ts +4 -0
  583. package/src/types/FIX4.4/quickfix/settlement_instructions.ts +4 -0
  584. package/src/types/FIX4.4/quickfix/test_request.ts +5 -0
  585. package/src/types/FIX4.4/quickfix/trade_capture_report.ts +4 -0
  586. package/src/types/FIX4.4/quickfix/trade_capture_report_ack.ts +4 -0
  587. package/src/types/FIX4.4/quickfix/trade_capture_report_request.ts +4 -0
  588. package/src/types/FIX4.4/quickfix/trade_capture_report_request_ack.ts +4 -0
  589. package/src/types/FIX4.4/quickfix/trading_session_status.ts +5 -0
  590. package/src/types/FIX4.4/quickfix/trading_session_status_request.ts +5 -0
  591. package/src/types/FIX4.4/quickfix/user_request.ts +5 -0
  592. package/src/types/FIX4.4/quickfix/user_response.ts +5 -0
  593. package/src/types/FIX4.4/quickfix/xm_lnon_fix.ts +5 -0
  594. package/src/types/FIX4.4/repo/enum/all-enum.ts +0 -1
  595. package/dist/sample/tcp/tls-trade-capture/jsfix.test_client.txt +0 -77
  596. package/dist/sample/tcp/tls-trade-capture/jsfix.test_server.txt +0 -77
  597. package/dist/sample/tcp/trade_capture/jsfix.test_client.txt +0 -75
  598. package/dist/sample/tcp/trade_capture/jsfix.test_server.txt +0 -75
  599. package/dist/sample/tcp/trade_capture/trade-capture-client.js.map +0 -1
  600. package/dist/sample/tcp/trade_capture/trade-capture-server.js.map +0 -1
  601. package/src/transport/session-msg-factory.ts +0 -195
  602. package/src/transport/tcp/resilient-initiator.ts +0 -35
@@ -1 +1 @@
1
- {"version":3,"file":"ascii-segment-parser.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-segment-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { ContainedComponentField, ContainedFieldType, ContainedGroupField, ContainedSimpleField, ComponentFieldDefinition, FixDefinitions, MessageDefinition } from '../..'\r\nimport { SegmentDescription, SegmentType } from '../segment-description'\r\nimport { Structure } from '../structure'\r\nimport { Tags } from '../tags'\r\nimport { MsgTag } from '../../types'\r\n\r\nexport class AsciiSegmentParser {\r\n\r\n private readonly headerDefinition: ComponentFieldDefinition\r\n private readonly trailerDefinition: ComponentFieldDefinition\r\n\r\n constructor (public readonly definitions: FixDefinitions) {\r\n this.headerDefinition = definitions.component.get('header')\r\n this.trailerDefinition = definitions.component.get('trailer')\r\n }\r\n\r\n public parse (msgType: string, tags: Tags, last: number): Structure {\r\n const segments: SegmentDescription[] = []\r\n const tr = this.trailerDefinition\r\n const hd = this.headerDefinition\r\n const msgDefinition: MessageDefinition = this.definitions.message.get(msgType)\r\n if (!msgDefinition) {\r\n return null\r\n }\r\n const structureStack: SegmentDescription[] = []\r\n let currentTagPosition: number = 0\r\n // let currentContainedField: ContainedField;\r\n let peek: SegmentDescription\r\n\r\n function init (): void {\r\n const firstTag: number = tags.tagPos[0].tag\r\n structureStack[structureStack.length] = new SegmentDescription(tr.name, tags.tagPos[last].tag, tr,\r\n currentTagPosition, structureStack.length, SegmentType.Component)\r\n structureStack[structureStack.length] = new SegmentDescription(msgDefinition.name, firstTag, msgDefinition,\r\n currentTagPosition, structureStack.length, SegmentType.Msg)\r\n structureStack[structureStack.length] = new SegmentDescription(hd.name, firstTag, hd,\r\n currentTagPosition, structureStack.length, SegmentType.Component)\r\n }\r\n\r\n // having finished one segments keep unwinding until tag matches further up stack\r\n function unwind (tag: number): void {\r\n while (structureStack.length > 1) {\r\n const done: SegmentDescription = structureStack.pop()\r\n done.end(segments.length, currentTagPosition - 1, tags.tagPos[currentTagPosition - 1].tag)\r\n segments[segments.length] = done\r\n peek = structureStack[structureStack.length - 1]\r\n if (peek.set.containedTag[tag]) {\r\n // unwound to point this tag lives in this set.\r\n break\r\n }\r\n if (peek.type === SegmentType.Msg && !tr.localTag[tag]) {\r\n // this is unknown tag and it is not part of trailer so raise unknown\r\n break\r\n }\r\n }\r\n }\r\n\r\n function examine (tag: number): void {\r\n switch (peek.currentField.type) {\r\n\r\n case ContainedFieldType.Simple: {\r\n const sf: ContainedSimpleField = peek.currentField as ContainedSimpleField\r\n if (sf.definition.tag === tag) {\r\n currentTagPosition = currentTagPosition + 1\r\n }\r\n break\r\n }\r\n // moving deeper into structure, start a new context\r\n case ContainedFieldType.Component: {\r\n const cf: ContainedComponentField = peek.currentField as ContainedComponentField\r\n structureStack[structureStack.length] = new SegmentDescription(cf.name, tag, cf.definition,\r\n currentTagPosition, structureStack.length - 1, SegmentType.Component)\r\n break\r\n }\r\n\r\n case ContainedFieldType.Group: {\r\n const gf: ContainedComponentField = peek.currentField as ContainedGroupField\r\n const structure: SegmentDescription = new SegmentDescription(gf.name, tag, gf.definition,\r\n currentTagPosition, structureStack.length - 1, SegmentType.Group)\r\n structureStack[structureStack.length] = structure\r\n currentTagPosition = currentTagPosition + 1\r\n structure.startGroup(tags.tagPos[currentTagPosition].tag)\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(`unknown tag type ${tag}`)\r\n }\r\n }\r\n\r\n function groupDelimiter (tag: number): boolean {\r\n let delimiter: boolean = false\r\n if (tag === peek.delimiterTag) {\r\n peek.addDelimiterPosition(currentTagPosition)\r\n } else if (structureStack.length > 1) {\r\n // if a group is represented by a repeated component, then the tag representing delimiter\r\n // needs to be added further up stack to group itself.\r\n delimiter = structureStack[structureStack.length - 2].groupAddDelimiter(tag, currentTagPosition)\r\n }\r\n return delimiter\r\n }\r\n\r\n function gap (tag: number): void {\r\n const gap = new SegmentDescription('.undefined', tag, peek.set,\r\n currentTagPosition, structureStack.length, SegmentType.Gap)\r\n gap.end(segments.length, currentTagPosition, tag)\r\n segments[segments.length] = gap\r\n currentTagPosition++\r\n }\r\n\r\n function discover (): void {\r\n while (currentTagPosition <= last) {\r\n const tag: number = tags.tagPos[currentTagPosition].tag\r\n peek = structureStack[structureStack.length - 1]\r\n peek.setCurrentField(tag)\r\n if (!peek.set.containedTag[tag] || groupDelimiter(tag)) {\r\n const unknown = peek.type === SegmentType.Msg && tag !== MsgTag.CheckSum\r\n if (unknown) {\r\n gap(tag)\r\n } else if (structureStack.length > 1) {\r\n // move back up the segments and save the finished group / component\r\n unwind(tag)\r\n }\r\n continue\r\n }\r\n examine(tag)\r\n }\r\n }\r\n\r\n function clean (): void {\r\n while (structureStack.length > 0) {\r\n const done: SegmentDescription = structureStack.pop()\r\n done.end(segments.length, currentTagPosition - 1, tags.tagPos[currentTagPosition - 1].tag)\r\n segments[segments.length] = done\r\n }\r\n const msg: SegmentDescription = segments[segments.length - 2]\r\n const trl: SegmentDescription = segments[segments.length - 1]\r\n msg.startTag = tags.tagPos[msg.startPosition].tag\r\n trl.startPosition = msg.endPosition + 1\r\n msg.endPosition = trl.endPosition\r\n }\r\n\r\n init()\r\n discover()\r\n clean()\r\n\r\n return new Structure(tags, segments)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ascii-segment-parser.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-segment-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n ContainedComponentField,\r\n ContainedFieldType,\r\n ContainedGroupField,\r\n ContainedSimpleField,\r\n FixDefinitions,\r\n MessageDefinition\r\n} from '../..'\r\nimport { SegmentDescription, SegmentType } from '../segment-description'\r\nimport { Structure } from '../structure'\r\nimport { Tags } from '../tags'\r\n\r\n// this takes linear time i.e. it constantly makes forward progress\r\n// one tag at a time\r\n\r\nexport class AsciiSegmentParser {\r\n\r\n constructor (public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n public parse (msgType: string, tags: Tags, last: number): Structure {\r\n // completed segments in that they are fully parsed\r\n const segments: SegmentDescription[] = []\r\n const msgDefinition: MessageDefinition = this.definitions.message.get(msgType)\r\n if (!msgDefinition) {\r\n return null\r\n }\r\n // in process of being discovered and may have any amount of depth\r\n // i.e. a component containing a repeated group of components\r\n // with sub-groups of components\r\n const structureStack: SegmentDescription[] = []\r\n let currentTagPosition: number = 0\r\n let peek: SegmentDescription\r\n\r\n // having finished one segments keep unwinding until tag matches further up stack\r\n function unwind (tag: number): void {\r\n while (structureStack.length > 1) {\r\n const done: SegmentDescription = structureStack.pop()\r\n done.end(segments.length, currentTagPosition - 1, tags.tagPos[currentTagPosition - 1].tag)\r\n segments.push(done)\r\n peek = structureStack[structureStack.length - 1]\r\n if (peek.set.containedTag[tag]) {\r\n // unwound to point this tag lives in this set.\r\n break\r\n }\r\n if (peek.type === SegmentType.Msg) {\r\n // this is unknown tag and it is not part of trailer so raise unknown\r\n break\r\n }\r\n }\r\n }\r\n\r\n function examine (tag: number): SegmentDescription {\r\n let structure: SegmentDescription = null\r\n switch (peek.currentField.type) {\r\n\r\n case ContainedFieldType.Simple: {\r\n const sf: ContainedSimpleField = peek.currentField as ContainedSimpleField\r\n if (sf.definition.tag === tag) {\r\n currentTagPosition = currentTagPosition + 1\r\n }\r\n break\r\n }\r\n // moving deeper into structure, start a new context\r\n case ContainedFieldType.Component: {\r\n const cf: ContainedComponentField = peek.currentField as ContainedComponentField\r\n structure = new SegmentDescription(cf.name, tag, cf.definition,\r\n currentTagPosition, structureStack.length, SegmentType.Component)\r\n break\r\n }\r\n // for a group also need to know where all delimiters are positioned\r\n case ContainedFieldType.Group: {\r\n const gf: ContainedComponentField = peek.currentField as ContainedGroupField\r\n structure = new SegmentDescription(gf.name, tag, gf.definition,\r\n currentTagPosition, structureStack.length, SegmentType.Group)\r\n currentTagPosition = currentTagPosition + 1\r\n structure.startGroup(tags.tagPos[currentTagPosition].tag)\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(`unknown tag type ${tag}`)\r\n }\r\n\r\n return structure\r\n }\r\n\r\n function groupDelimiter (tag: number): boolean {\r\n let delimiter: boolean = false\r\n if (tag === peek.delimiterTag) {\r\n peek.addDelimiterPosition(currentTagPosition)\r\n } else if (structureStack.length > 1) {\r\n // if a group is represented by a repeated component, then the tag representing delimiter\r\n // needs to be added further up stack to group itself.\r\n delimiter = structureStack[structureStack.length - 2].groupAddDelimiter(tag, currentTagPosition)\r\n }\r\n return delimiter\r\n }\r\n\r\n function gap (tag: number): void {\r\n const gap = new SegmentDescription('.undefined', tag, peek.set,\r\n currentTagPosition, structureStack.length, SegmentType.Gap)\r\n gap.end(segments.length, currentTagPosition, tag)\r\n segments.push(gap)\r\n currentTagPosition++\r\n }\r\n\r\n function discover (): void {\r\n while (currentTagPosition <= last) {\r\n const tag: number = tags.tagPos[currentTagPosition].tag\r\n peek = structureStack[structureStack.length - 1]\r\n peek.setCurrentField(tag)\r\n if (!peek.set.containedTag[tag] || groupDelimiter(tag)) {\r\n // unravelled all way back to root hence this is not recognised\r\n const unknown = peek.type === SegmentType.Msg\r\n if (unknown) {\r\n gap(tag)\r\n } else if (structureStack.length > 1) {\r\n // move back up the segments and save the finished group / component\r\n unwind(tag)\r\n }\r\n continue\r\n }\r\n const structure = examine(tag)\r\n if (structure) {\r\n structureStack.push(structure)\r\n }\r\n }\r\n }\r\n\r\n function clean (): void {\r\n // any remainder components can be closed.\r\n while (structureStack.length > 0) {\r\n const done: SegmentDescription = structureStack.pop()\r\n done.end(segments.length, currentTagPosition - 1, tags.tagPos[currentTagPosition - 1].tag)\r\n segments[segments.length] = done\r\n }\r\n // logically reverse the trailer and message so trailer is last in list.\r\n const m1 = segments.length - 1\r\n const m2 = segments.length - 2\r\n const tmp = segments[m1]\r\n segments[m1] = segments[m2]\r\n segments[m2] = tmp\r\n }\r\n\r\n const msgStructure = new SegmentDescription(msgDefinition.name, tags.tagPos[0].tag, msgDefinition,\r\n currentTagPosition, structureStack.length, SegmentType.Msg)\r\n structureStack.push(msgStructure)\r\n discover()\r\n clean()\r\n\r\n // now know where all components and groups are positioned within message\r\n return new Structure(tags, segments)\r\n }\r\n}\r\n"]}
@@ -3,6 +3,7 @@ import { SegmentDescription } from '../segment-description';
3
3
  import { Structure } from '../structure';
4
4
  import { MsgView } from '../msg-view';
5
5
  import { ElasticBuffer } from '../elastic-buffer';
6
+ import { IFixMsgStoreRecord } from '../../store';
6
7
  export declare class AsciiView extends MsgView {
7
8
  readonly segment: SegmentDescription;
8
9
  readonly buffer: ElasticBuffer;
@@ -13,6 +14,7 @@ export declare class AsciiView extends MsgView {
13
14
  private readonly timeFormatter;
14
15
  constructor(segment: SegmentDescription, buffer: ElasticBuffer, structure: Structure, ptr: number, delimiter: number, writeDelimiter: number);
15
16
  clone(): MsgView;
17
+ toMsgStoreRecord(): IFixMsgStoreRecord;
16
18
  checksum(): number;
17
19
  protected toTyped(field: SimpleFieldDefinition): any;
18
20
  protected create(singleton: SegmentDescription): MsgView;
@@ -6,6 +6,7 @@ const tags_1 = require("../tags");
6
6
  const msg_view_1 = require("../msg-view");
7
7
  const time_formatter_1 = require("./time-formatter");
8
8
  const types_1 = require("../../types");
9
+ const store_1 = require("../../store");
9
10
  class AsciiView extends msg_view_1.MsgView {
10
11
  constructor(segment, buffer, structure, ptr, delimiter, writeDelimiter) {
11
12
  super(segment, structure);
@@ -28,6 +29,9 @@ class AsciiView extends msg_view_1.MsgView {
28
29
  }
29
30
  return new AsciiView(segment, buffer, null, this.ptr, delimiter, writeDelimiter);
30
31
  }
32
+ toMsgStoreRecord() {
33
+ return new store_1.FixMsgStoreRecord(this.getString(types_1.MsgTag.MsgType), this.getTyped(types_1.MsgTag.SendingTime), this.getTyped(types_1.MsgTag.MsgSeqNum), this.toObject());
34
+ }
31
35
  checksum() {
32
36
  const t = this.getPosition(types_1.MsgTag.CheckSum);
33
37
  const structure = this.structure;
@@ -1 +1 @@
1
- {"version":3,"file":"ascii-view.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { SimpleFieldDefinition } from '../../dictionary'\r\nimport { SegmentDescription } from '../segment-description'\r\nimport { Structure } from '../structure'\r\nimport { TagType } from '../tags'\r\nimport { MsgView } from '../msg-view'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { ITimeFormatter } from './itime-formatter'\r\nimport { TimeFormatter } from './time-formatter'\r\nimport { TagPos } from '../tag-pos'\r\nimport { MsgTag } from '../../types'\r\n\r\nexport class AsciiView extends MsgView {\r\n private readonly timeFormatter: ITimeFormatter = new TimeFormatter(this.buffer)\r\n constructor (public readonly segment: SegmentDescription,\r\n public readonly buffer: ElasticBuffer,\r\n public readonly structure: Structure,\r\n public readonly ptr: number,\r\n public readonly delimiter: number,\r\n public readonly writeDelimiter: number) {\r\n\r\n super(segment, structure)\r\n }\r\n\r\n // if the view is to be kept beyond the event on which it arrives, must be cloned\r\n public clone (): MsgView {\r\n const structure = this.structure\r\n const buffer = this.buffer.clone()\r\n const segment = this.segment\r\n const delimiter = this.delimiter\r\n const writeDelimiter = this.writeDelimiter\r\n if (structure) {\r\n return new AsciiView(segment, buffer, new Structure(structure.tags.clone(), structure.segments), this.ptr, delimiter, writeDelimiter)\r\n }\r\n return new AsciiView(segment, buffer, null, this.ptr, delimiter, writeDelimiter)\r\n }\r\n\r\n public checksum (): number {\r\n const t = this.getPosition(MsgTag.CheckSum)\r\n const structure = this.structure\r\n const prev = structure.tags.tagPos[t - 1]\r\n const tp = prev.start + prev.len + 1\r\n let cs = this.buffer.sum(tp)\r\n const delimiter = this.delimiter\r\n const writeDelimiter = this.writeDelimiter\r\n if (writeDelimiter !== delimiter) {\r\n const changes = structure.tags.nextTagPos - 1\r\n cs -= changes * writeDelimiter\r\n cs += changes * delimiter\r\n }\r\n return cs % 256\r\n }\r\n\r\n protected toTyped (field: SimpleFieldDefinition): any {\r\n const position: number = this.getPosition(field.tag)\r\n if (position >= 0) {\r\n switch (field.tagType) {\r\n case TagType.String : {\r\n return this.stringAtPosition(position)\r\n }\r\n\r\n case TagType.Float: {\r\n return this.getNumber(position, true)\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n return this.getNumber(position)\r\n }\r\n\r\n case TagType.Boolean: {\r\n return this.getBoolean(field.tag)\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n return this.getDateTime(field.tag, true)\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n return this.getTime(field.tag, true)\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n return this.getDate(field.tag, true)\r\n }\r\n\r\n case TagType.LocalDate: {\r\n return this.getDate(field.tag, true)\r\n }\r\n\r\n case TagType.RawData: {\r\n return this.getBuffer(position)\r\n }\r\n\r\n default: {\r\n return this.stringAtPosition(position)\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected create (singleton: SegmentDescription): MsgView {\r\n return new AsciiView(singleton,\r\n this.buffer,\r\n this.structure,\r\n this.ptr,\r\n this.delimiter,\r\n this.writeDelimiter)\r\n }\r\n\r\n protected stringAtPosition (position: number): string {\r\n const tags = this.structure.tags\r\n if (position < 0 || position >= tags.nextTagPos) {\r\n return null\r\n }\r\n const tag: TagPos = tags.tagPos[position]\r\n return this.buffer.getString(tag.start, tag.start + tag.len)\r\n }\r\n\r\n private getBuffer (position: number): Buffer {\r\n const tag: TagPos = this.structure.tags.tagPos[position]\r\n return this.buffer.getBuffer(tag.start, tag.start + tag.len)\r\n }\r\n\r\n private getNumber (position: number, isFloat: boolean = false): number {\r\n const buffer = this.buffer\r\n const tag: TagPos = this.structure.tags.tagPos[position]\r\n if (isFloat) {\r\n return buffer.getFloat(tag.start, tag.start + tag.len - 1)\r\n } else {\r\n return buffer.getWholeNumber(tag.start, tag.start + tag.len - 1)\r\n }\r\n }\r\n\r\n private getTime (tag: number, useUtc: boolean): Date {\r\n const formatter = this.timeFormatter\r\n const position: number = this.getPosition(tag)\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n if (position < 0) {\r\n return null\r\n }\r\n if (useUtc) {\r\n return formatter.getUtcTime(tagPos.start)\r\n } else {\r\n return formatter.getLocalTime(tagPos.start)\r\n }\r\n }\r\n\r\n private getDate (tag: number, useUtc: boolean): Date {\r\n const formatter = this.timeFormatter\r\n const position: number = this.getPosition(tag)\r\n if (position < 0) {\r\n return null\r\n }\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n // (SendingTime) = 20150417-01:00:08.201\r\n if (tagPos.len < 8) {\r\n return null\r\n }\r\n if (useUtc) {\r\n return formatter.getUtcDate(tagPos.start)\r\n } else {\r\n return formatter.getLocalDate(tagPos.start)\r\n }\r\n }\r\n\r\n private getDateTime (tag: number, useUtc: boolean): Date {\r\n const position: number = this.getPosition(tag)\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n const formatter = this.timeFormatter\r\n if (position < 0) {\r\n return null\r\n }\r\n // (SendingTime) = 20150417-01:00:08.201\r\n if (tagPos.len < 8) {\r\n return null\r\n }\r\n\r\n if (useUtc) {\r\n return formatter.getUtcTimestamp(tagPos.start, tagPos.start + tagPos.len)\r\n } else {\r\n return formatter.getLocalTimestamp(tagPos.start, tagPos.start + tagPos.len)\r\n }\r\n }\r\n\r\n private getBoolean (tag: number): boolean {\r\n const position: number = this.getPosition(tag)\r\n if (position < 0) {\r\n return null\r\n }\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n return this.buffer.getBoolean(tagPos.start)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ascii-view.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { SimpleFieldDefinition } from '../../dictionary'\r\nimport { SegmentDescription } from '../segment-description'\r\nimport { Structure } from '../structure'\r\nimport { TagType } from '../tags'\r\nimport { MsgView } from '../msg-view'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { ITimeFormatter } from './itime-formatter'\r\nimport { TimeFormatter } from './time-formatter'\r\nimport { TagPos } from '../tag-pos'\r\nimport { MsgTag } from '../../types'\r\nimport { FixMsgStoreRecord, IFixMsgStoreRecord } from '../../store'\r\n\r\nexport class AsciiView extends MsgView {\r\n private readonly timeFormatter: ITimeFormatter = new TimeFormatter(this.buffer)\r\n constructor (public readonly segment: SegmentDescription,\r\n public readonly buffer: ElasticBuffer,\r\n public readonly structure: Structure,\r\n public readonly ptr: number,\r\n public readonly delimiter: number,\r\n public readonly writeDelimiter: number) {\r\n\r\n super(segment, structure)\r\n }\r\n\r\n // if the view is to be kept beyond the event on which it arrives, must be cloned\r\n public clone (): MsgView {\r\n const structure = this.structure\r\n const buffer = this.buffer.clone()\r\n const segment = this.segment\r\n const delimiter = this.delimiter\r\n const writeDelimiter = this.writeDelimiter\r\n if (structure) {\r\n return new AsciiView(segment, buffer, new Structure(structure.tags.clone(), structure.segments), this.ptr, delimiter, writeDelimiter)\r\n }\r\n return new AsciiView(segment, buffer, null, this.ptr, delimiter, writeDelimiter)\r\n }\r\n\r\n public toMsgStoreRecord (): IFixMsgStoreRecord {\r\n return new FixMsgStoreRecord(this.getString(MsgTag.MsgType), this.getTyped(MsgTag.SendingTime), this.getTyped(MsgTag.MsgSeqNum), this.toObject())\r\n }\r\n\r\n public checksum (): number {\r\n const t = this.getPosition(MsgTag.CheckSum)\r\n const structure = this.structure\r\n const prev = structure.tags.tagPos[t - 1]\r\n const tp = prev.start + prev.len + 1\r\n let cs = this.buffer.sum(tp)\r\n const delimiter = this.delimiter\r\n const writeDelimiter = this.writeDelimiter\r\n if (writeDelimiter !== delimiter) {\r\n const changes = structure.tags.nextTagPos - 1\r\n cs -= changes * writeDelimiter\r\n cs += changes * delimiter\r\n }\r\n return cs % 256\r\n }\r\n\r\n protected toTyped (field: SimpleFieldDefinition): any {\r\n const position: number = this.getPosition(field.tag)\r\n if (position >= 0) {\r\n switch (field.tagType) {\r\n case TagType.String : {\r\n return this.stringAtPosition(position)\r\n }\r\n\r\n case TagType.Float: {\r\n return this.getNumber(position, true)\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n return this.getNumber(position)\r\n }\r\n\r\n case TagType.Boolean: {\r\n return this.getBoolean(field.tag)\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n return this.getDateTime(field.tag, true)\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n return this.getTime(field.tag, true)\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n return this.getDate(field.tag, true)\r\n }\r\n\r\n case TagType.LocalDate: {\r\n return this.getDate(field.tag, true)\r\n }\r\n\r\n case TagType.RawData: {\r\n return this.getBuffer(position)\r\n }\r\n\r\n default: {\r\n return this.stringAtPosition(position)\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected create (singleton: SegmentDescription): MsgView {\r\n return new AsciiView(singleton,\r\n this.buffer,\r\n this.structure,\r\n this.ptr,\r\n this.delimiter,\r\n this.writeDelimiter)\r\n }\r\n\r\n protected stringAtPosition (position: number): string {\r\n const tags = this.structure.tags\r\n if (position < 0 || position >= tags.nextTagPos) {\r\n return null\r\n }\r\n const tag: TagPos = tags.tagPos[position]\r\n return this.buffer.getString(tag.start, tag.start + tag.len)\r\n }\r\n\r\n private getBuffer (position: number): Buffer {\r\n const tag: TagPos = this.structure.tags.tagPos[position]\r\n return this.buffer.getBuffer(tag.start, tag.start + tag.len)\r\n }\r\n\r\n private getNumber (position: number, isFloat: boolean = false): number {\r\n const buffer = this.buffer\r\n const tag: TagPos = this.structure.tags.tagPos[position]\r\n if (isFloat) {\r\n return buffer.getFloat(tag.start, tag.start + tag.len - 1)\r\n } else {\r\n return buffer.getWholeNumber(tag.start, tag.start + tag.len - 1)\r\n }\r\n }\r\n\r\n private getTime (tag: number, useUtc: boolean): Date {\r\n const formatter = this.timeFormatter\r\n const position: number = this.getPosition(tag)\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n if (position < 0) {\r\n return null\r\n }\r\n if (useUtc) {\r\n return formatter.getUtcTime(tagPos.start)\r\n } else {\r\n return formatter.getLocalTime(tagPos.start)\r\n }\r\n }\r\n\r\n private getDate (tag: number, useUtc: boolean): Date {\r\n const formatter = this.timeFormatter\r\n const position: number = this.getPosition(tag)\r\n if (position < 0) {\r\n return null\r\n }\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n // (SendingTime) = 20150417-01:00:08.201\r\n if (tagPos.len < 8) {\r\n return null\r\n }\r\n if (useUtc) {\r\n return formatter.getUtcDate(tagPos.start)\r\n } else {\r\n return formatter.getLocalDate(tagPos.start)\r\n }\r\n }\r\n\r\n private getDateTime (tag: number, useUtc: boolean): Date {\r\n const position: number = this.getPosition(tag)\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n const formatter = this.timeFormatter\r\n if (position < 0) {\r\n return null\r\n }\r\n // (SendingTime) = 20150417-01:00:08.201\r\n if (tagPos.len < 8) {\r\n return null\r\n }\r\n\r\n if (useUtc) {\r\n return formatter.getUtcTimestamp(tagPos.start, tagPos.start + tagPos.len)\r\n } else {\r\n return formatter.getLocalTimestamp(tagPos.start, tagPos.start + tagPos.len)\r\n }\r\n }\r\n\r\n private getBoolean (tag: number): boolean {\r\n const position: number = this.getPosition(tag)\r\n if (position < 0) {\r\n return null\r\n }\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n return this.buffer.getBoolean(tagPos.start)\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"time-formatter.js","sourceRoot":"","sources":["../../../src/buffer/ascii/time-formatter.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from '../ascii-chars'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { ITimeFormatter } from './itime-formatter'\r\n\r\nexport class TimeFormatter implements ITimeFormatter {\r\n constructor (public readonly buffer: ElasticBuffer, public readonly adjustLocal: boolean = false) {\r\n }\r\n\r\n public writeLocalDate (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(v.getFullYear())\r\n buffer.writePaddedTensUnits(v.getMonth() + 1)\r\n buffer.writePaddedTensUnits(v.getDate())\r\n }\r\n\r\n public writeUtcDate (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(v.getUTCFullYear())\r\n buffer.writePaddedTensUnits(v.getUTCMonth() + 1)\r\n buffer.writePaddedTensUnits(v.getUTCDate())\r\n }\r\n\r\n public writeUtcTimestamp (v: Date): void {\r\n this.writeUtcDate(v)\r\n this.buffer.writeChar(AsciiChars.Hyphen)\r\n this.writeUtcTime(v as Date)\r\n }\r\n\r\n public writeLocalTimestamp (v: Date): void {\r\n this.writeLocalDate(v)\r\n this.buffer.writeChar(AsciiChars.Hyphen)\r\n this.writeLocalTime(v as Date)\r\n }\r\n\r\n public writeUtcTime (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writePaddedTensUnits(v.getUTCHours())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getUTCMinutes())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getUTCSeconds())\r\n const ms: number = v.getUTCMilliseconds()\r\n buffer.writeChar(AsciiChars.Dot)\r\n buffer.writePaddedHundreds(ms)\r\n }\r\n\r\n public writeLocalTime (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writePaddedTensUnits(v.getHours())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getMinutes())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getSeconds())\r\n const ms: number = v.getMilliseconds()\r\n buffer.writeChar(AsciiChars.Dot)\r\n buffer.writePaddedHundreds(ms)\r\n }\r\n\r\n public getLocalTime (start: number): Date {\r\n return this.getTime(start, false)\r\n }\r\n\r\n public getUtcTime (start: number): Date {\r\n return this.getTime(start, true)\r\n }\r\n\r\n public getUtcDate (start: number): Date {\r\n return this.getDate(start, true)\r\n }\r\n\r\n public getLocalDate (start: number): Date {\r\n return this.getDate(start, false)\r\n }\r\n\r\n public getUtcTimestamp (start: number, end: number): Date {\r\n return this.getTimestamp(start, end,true)\r\n }\r\n\r\n public getLocalTimestamp (start: number, end: number): Date {\r\n return this.getTimestamp(start, end,false)\r\n }\r\n\r\n private getTimestamp (start: number, end: number, useUtc: boolean): Date {\r\n const buffer = this.buffer\r\n const n: number = buffer.getWholeNumber(start, start + 7)\r\n if (n == null) {\r\n return null\r\n }\r\n const monthDay: number = n % 10000\r\n const month: number = Math.round(monthDay / 100)\r\n const day: number = monthDay % 100\r\n const year: number = Math.round(n / 10000)\r\n const len = end - start\r\n if (len === 8) {\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0))\r\n } else {\r\n t = new Date(year, month - 1, day, 0, 0, 0, 0)\r\n }\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n return t\r\n }\r\n\r\n let offset: number = 8\r\n if (buffer.get(start + offset) !== AsciiChars.Hyphen) {\r\n return null\r\n }\r\n\r\n if (len < 17) {\r\n return null\r\n }\r\n\r\n offset += 1\r\n const hh: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const mm: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const ss: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n let ms: number = 0\r\n if (buffer.get(start + offset) === AsciiChars.Dot) {\r\n offset += 1\r\n ms = buffer.getWholeNumber(start + offset, start + offset + 2)\r\n }\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, hh, mm, ss, ms))\r\n } else {\r\n t = new Date(year, month - 1, day, hh, mm, ss, ms)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n\r\n private getTime (start: number, useUtc: boolean): Date {\r\n const buffer = this.buffer\r\n let offset = 0\r\n const hh: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const mm: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const ss: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n let ms: number = 0\r\n if (buffer.get(start + offset) === AsciiChars.Dot) {\r\n offset += 1\r\n ms = buffer.getWholeNumber(start + offset, start + offset + 2)\r\n }\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(0, 0, 0, hh, mm, ss, ms))\r\n } else {\r\n t = new Date(0, 0, 0, hh, mm, ss, ms)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n\r\n private getDate (start: number, useUtc: boolean): Date {\r\n\r\n // = 20150417\r\n\r\n const n: number = this.buffer.getWholeNumber(start, start + 7)\r\n if (n == null) {\r\n return null\r\n }\r\n const monthDay: number = n % 10000\r\n const month: number = Math.round(monthDay / 100)\r\n const day: number = monthDay % 100\r\n const year: number = Math.round(n / 10000)\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0))\r\n } else {\r\n t = new Date(year, month - 1, day, 0, 0, 0, 0)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"time-formatter.js","sourceRoot":"","sources":["../../../src/buffer/ascii/time-formatter.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from '../ascii-chars'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { ITimeFormatter } from './itime-formatter'\r\n\r\nexport class TimeFormatter implements ITimeFormatter {\r\n constructor (public readonly buffer: ElasticBuffer, public readonly adjustLocal: boolean = false) {\r\n }\r\n\r\n public writeLocalDate (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(v.getFullYear())\r\n buffer.writePaddedTensUnits(v.getMonth() + 1)\r\n buffer.writePaddedTensUnits(v.getDate())\r\n }\r\n\r\n public writeUtcDate (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(v.getUTCFullYear())\r\n buffer.writePaddedTensUnits(v.getUTCMonth() + 1)\r\n buffer.writePaddedTensUnits(v.getUTCDate())\r\n }\r\n\r\n public writeUtcTimestamp (v: Date): void {\r\n this.writeUtcDate(v)\r\n this.buffer.writeChar(AsciiChars.Hyphen)\r\n this.writeUtcTime(v)\r\n }\r\n\r\n public writeLocalTimestamp (v: Date): void {\r\n this.writeLocalDate(v)\r\n this.buffer.writeChar(AsciiChars.Hyphen)\r\n this.writeLocalTime(v)\r\n }\r\n\r\n public writeUtcTime (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writePaddedTensUnits(v.getUTCHours())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getUTCMinutes())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getUTCSeconds())\r\n const ms: number = v.getUTCMilliseconds()\r\n buffer.writeChar(AsciiChars.Dot)\r\n buffer.writePaddedHundreds(ms)\r\n }\r\n\r\n public writeLocalTime (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writePaddedTensUnits(v.getHours())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getMinutes())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getSeconds())\r\n const ms: number = v.getMilliseconds()\r\n buffer.writeChar(AsciiChars.Dot)\r\n buffer.writePaddedHundreds(ms)\r\n }\r\n\r\n public getLocalTime (start: number): Date {\r\n return this.getTime(start, false)\r\n }\r\n\r\n public getUtcTime (start: number): Date {\r\n return this.getTime(start, true)\r\n }\r\n\r\n public getUtcDate (start: number): Date {\r\n return this.getDate(start, true)\r\n }\r\n\r\n public getLocalDate (start: number): Date {\r\n return this.getDate(start, false)\r\n }\r\n\r\n public getUtcTimestamp (start: number, end: number): Date {\r\n return this.getTimestamp(start, end,true)\r\n }\r\n\r\n public getLocalTimestamp (start: number, end: number): Date {\r\n return this.getTimestamp(start, end,false)\r\n }\r\n\r\n private getTimestamp (start: number, end: number, useUtc: boolean): Date {\r\n const buffer = this.buffer\r\n const n: number = buffer.getWholeNumber(start, start + 7)\r\n if (n == null) {\r\n return null\r\n }\r\n const monthDay: number = n % 10000\r\n const month: number = Math.round(monthDay / 100)\r\n const day: number = monthDay % 100\r\n const year: number = Math.round(n / 10000)\r\n const len = end - start\r\n if (len === 8) {\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0))\r\n } else {\r\n t = new Date(year, month - 1, day, 0, 0, 0, 0)\r\n }\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n return t\r\n }\r\n\r\n let offset: number = 8\r\n if (buffer.get(start + offset) !== AsciiChars.Hyphen) {\r\n return null\r\n }\r\n\r\n if (len < 17) {\r\n return null\r\n }\r\n\r\n offset += 1\r\n const hh: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const mm: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const ss: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n let ms: number = 0\r\n if (buffer.get(start + offset) === AsciiChars.Dot) {\r\n offset += 1\r\n ms = buffer.getWholeNumber(start + offset, start + offset + 2)\r\n }\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, hh, mm, ss, ms))\r\n } else {\r\n t = new Date(year, month - 1, day, hh, mm, ss, ms)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n\r\n private getTime (start: number, useUtc: boolean): Date {\r\n const buffer = this.buffer\r\n let offset = 0\r\n const hh: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const mm: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const ss: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n let ms: number = 0\r\n if (buffer.get(start + offset) === AsciiChars.Dot) {\r\n offset += 1\r\n ms = buffer.getWholeNumber(start + offset, start + offset + 2)\r\n }\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(0, 0, 0, hh, mm, ss, ms))\r\n } else {\r\n t = new Date(0, 0, 0, hh, mm, ss, ms)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n\r\n private getDate (start: number, useUtc: boolean): Date {\r\n\r\n // = 20150417\r\n\r\n const n: number = this.buffer.getWholeNumber(start, start + 7)\r\n if (n == null) {\r\n return null\r\n }\r\n const monthDay: number = n % 10000\r\n const month: number = Math.round(monthDay / 100)\r\n const day: number = monthDay % 100\r\n const year: number = Math.round(n / 10000)\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0))\r\n } else {\r\n t = new Date(year, month - 1, day, 0, 0, 0, 0)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n}\r\n"]}
@@ -7,6 +7,7 @@ export declare abstract class AsciiChars {
7
7
  static readonly Colon: number;
8
8
  static readonly Hyphen: number;
9
9
  static readonly Pipe: number;
10
+ static readonly Carat: number;
10
11
  static readonly N: number;
11
12
  static readonly Y: number;
12
13
  static readonly Zero: number;
@@ -15,6 +15,7 @@ AsciiChars.Tab = '\t'.charCodeAt(0);
15
15
  AsciiChars.Colon = ':'.charCodeAt(0);
16
16
  AsciiChars.Hyphen = '-'.charCodeAt(0);
17
17
  AsciiChars.Pipe = '|'.charCodeAt(0);
18
+ AsciiChars.Carat = '^'.charCodeAt(0);
18
19
  AsciiChars.N = 'N'.charCodeAt(0);
19
20
  AsciiChars.Y = 'Y'.charCodeAt(0);
20
21
  AsciiChars.Zero = '0'.charCodeAt(0);
@@ -1 +1 @@
1
- {"version":3,"file":"ascii-chars.js","sourceRoot":"","sources":["../../src/buffer/ascii-chars.ts"],"names":[],"mappings":";;;AAAA,MAAsB,UAAU;IAqBvB,MAAM,CAAC,SAAS,CAAE,CAAS;QAChC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC;;AAvBH,gCAwBC;AAtBwB,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,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 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
+ {"version":3,"file":"ascii-chars.js","sourceRoot":"","sources":["../../src/buffer/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"]}
@@ -10,6 +10,7 @@ export declare class ElasticBuffer {
10
10
  private static HowManyDigits;
11
11
  currentSize(): number;
12
12
  getPos(): number;
13
+ setPos(ptr: number): number;
13
14
  get(pos: number): number;
14
15
  writeBoolean(v: boolean): number;
15
16
  switchChar(c: number): number;
@@ -33,6 +33,13 @@ class ElasticBuffer {
33
33
  getPos() {
34
34
  return this.ptr;
35
35
  }
36
+ setPos(ptr) {
37
+ const r = this.ptr;
38
+ if (ptr >= 0 && ptr < this.size) {
39
+ this.ptr = ptr;
40
+ }
41
+ return r;
42
+ }
36
43
  get(pos) {
37
44
  return this.buffer[pos];
38
45
  }
@@ -123,6 +130,7 @@ class ElasticBuffer {
123
130
  clone() {
124
131
  const cloned = new ElasticBuffer(this.ptr);
125
132
  this.buffer.copy(cloned.buffer, 0, 0, this.ptr);
133
+ cloned.setPos(this.ptr);
126
134
  return cloned;
127
135
  }
128
136
  writePaddedHundreds(v) {
@@ -1 +1 @@
1
- {"version":3,"file":"elastic-buffer.js","sourceRoot":"","sources":["../../src/buffer/elastic-buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from './ascii-chars'\r\nimport { format } from 'mathjs'\r\n\r\nexport class ElasticBuffer {\r\n private buffer: Buffer\r\n private ptr: number = 0\r\n private stretched: number\r\n\r\n constructor (public readonly size: number = 6 * 1024, public readonly returnTo: number = 6 * 1024) {\r\n this.size = Math.max(1, this.size)\r\n this.buffer = Buffer.allocUnsafe(this.size)\r\n this.returnTo = Math.max(this.size, this.returnTo)\r\n this.stretched = this.size\r\n }\r\n\r\n private static precisionRound (n: number, precision: number): number {\r\n const factor: number = Math.pow(10, precision)\r\n return Math.round(n * factor) / factor\r\n }\r\n\r\n private static HowManyDigits (v: number): number {\r\n v = Math.abs(v)\r\n let digits: number = 0\r\n let w: number = v\r\n while (w > 0) {\r\n ++digits\r\n w = Math.floor(w / 10)\r\n }\r\n return Math.max(digits, 1)\r\n }\r\n\r\n public currentSize (): number {\r\n return this.stretched\r\n }\r\n\r\n public getPos (): number {\r\n return this.ptr\r\n }\r\n\r\n public get (pos: number): number {\r\n return this.buffer[pos]\r\n }\r\n\r\n public writeBoolean (v: boolean): number {\r\n this.writeChar(v ? AsciiChars.Y : AsciiChars.N)\r\n return this.ptr\r\n }\r\n\r\n public switchChar (c: number): number {\r\n this.buffer[this.ptr - 1] = c\r\n return this.ptr\r\n }\r\n\r\n public saveChar (c: number): number {\r\n this.buffer[this.ptr++] = c\r\n return this.ptr\r\n }\r\n\r\n public writeChar (c: number): number {\r\n if (c > 255) throw new Error(`can't write ${c} to a byte`)\r\n this.checkGrowBuffer(1)\r\n this.buffer[this.ptr++] = c\r\n return this.ptr\r\n }\r\n\r\n public writeString (s: string): number {\r\n const begin = this.ptr\r\n this.checkGrowBuffer(s.length)\r\n const buffer = this.buffer\r\n this.ptr += buffer.write(s, begin, s.length, 'ascii')\r\n return this.ptr\r\n }\r\n\r\n public writeBuffer (v: Buffer): number {\r\n const begin = this.ptr\r\n this.checkGrowBuffer(v.length)\r\n const buffer = this.buffer\r\n const srcLen: number = v.length\r\n this.ptr += v.copy(buffer, begin, 0, srcLen)\r\n return this.ptr\r\n }\r\n\r\n public writeWholeNumber (n: number): number {\r\n const digits: number = ElasticBuffer.HowManyDigits(n)\r\n let reserve = digits\r\n const sign: number = Math.sign(n)\r\n let p: number = Math.pow(10, digits - 1)\r\n let v: number = Math.abs(n)\r\n if (sign < 0) {\r\n reserve++\r\n }\r\n this.checkGrowBuffer(reserve)\r\n const buffer = this.buffer\r\n if (sign < 0) {\r\n buffer[this.ptr++] = AsciiChars.Minus\r\n }\r\n while (p >= 1) {\r\n const d: number = Math.floor(v / p)\r\n v -= d * p\r\n p /= 10\r\n buffer[this.ptr++] = AsciiChars.Zero + d\r\n }\r\n\r\n return this.ptr\r\n }\r\n\r\n public writeNumber (v: number, places: number = 13) {\r\n const rounded: number = Math.floor(v)\r\n const fraction: number = ElasticBuffer.precisionRound(v - rounded, places)\r\n if (fraction === 0) {\r\n // integer\r\n return this.writeWholeNumber(v)\r\n } else {\r\n // decimal with fraction turn to string\r\n const s: string = format(v, { notation: 'fixed' })\r\n return this.writeString(s)\r\n }\r\n }\r\n\r\n public reset (): boolean {\r\n this.ptr = 0\r\n const shrink = this.stretched > this.returnTo\r\n if (shrink) {\r\n this.buffer = Buffer.allocUnsafe(this.returnTo)\r\n this.stretched = this.size\r\n }\r\n return shrink\r\n }\r\n\r\n public slice (): Buffer {\r\n return this.buffer.slice(0, this.ptr)\r\n }\r\n\r\n public copy (): Buffer {\r\n const m = Buffer.alloc(this.ptr)\r\n this.buffer.copy(m, 0, 0, this.ptr)\r\n return m\r\n }\r\n\r\n public clone (): ElasticBuffer {\r\n const cloned = new ElasticBuffer(this.ptr)\r\n this.buffer.copy(cloned.buffer, 0, 0, this.ptr)\r\n return cloned\r\n }\r\n\r\n public writePaddedHundreds (v: number): number {\r\n if (v > 999) throw new Error(`can't write ${v} as hundreds padding`)\r\n this.checkGrowBuffer(3)\r\n const buffer = this.buffer\r\n const zero: number = AsciiChars.Zero\r\n const units: number = v % 10 + zero\r\n v = v / 10\r\n const tens: number = v % 10 + zero\r\n v = v / 10\r\n buffer[this.ptr++] = v % 10 + zero\r\n buffer[this.ptr++] = tens\r\n buffer[this.ptr++] = units\r\n return this.ptr\r\n }\r\n\r\n public writePaddedTensUnits (v: number): number {\r\n if (v > 99) throw new Error(`can't write ${v} as hundreds padding`)\r\n this.checkGrowBuffer(2)\r\n const buffer = this.buffer\r\n const zero: number = AsciiChars.Zero\r\n const units: number = v % 10 + zero\r\n v = v / 10\r\n buffer[this.ptr++] = v % 10 + zero\r\n buffer[this.ptr++] = units\r\n return this.ptr\r\n }\r\n\r\n public patchPaddedNumberAtPos (ptr: number, numToWrite: number, padding: number): void {\r\n let digits: number = ElasticBuffer.HowManyDigits(numToWrite)\r\n const saved: number = this.ptr\r\n this.ptr = ptr\r\n const buffer = this.buffer\r\n while (digits++ < padding) {\r\n buffer[this.ptr++] = AsciiChars.Zero\r\n }\r\n this.writeWholeNumber(numToWrite)\r\n this.ptr = saved\r\n }\r\n\r\n public toString (ptr: number = this.ptr): string {\r\n return this.buffer.toString('ascii', 0, ptr)\r\n }\r\n\r\n public checksum (ptr: number = this.ptr): number {\r\n const cks: number = this.sum(ptr)\r\n return cks % 256\r\n }\r\n\r\n public sum (ptr: number = this.ptr): number {\r\n let total: number = 0\r\n ptr = Math.min(ptr, this.ptr)\r\n const buffer = this.buffer\r\n for (let idx: number = 0; idx < ptr; idx++) {\r\n total += buffer[idx]\r\n }\r\n return total\r\n }\r\n\r\n public getWholeNumber (start: number, vend: number): number {\r\n const buffer = this.buffer\r\n let sign = 1\r\n let raised = vend - start\r\n switch (buffer[start]) {\r\n case AsciiChars.Minus: {\r\n --raised\r\n sign = -1\r\n ++start\r\n break\r\n }\r\n case AsciiChars.Plus: {\r\n --raised\r\n ++start\r\n break\r\n }\r\n }\r\n let i: number = Math.pow(10, raised)\r\n let num: number = 0\r\n let scan: number = start\r\n\r\n while (scan <= vend) {\r\n const p: number = buffer[scan++]\r\n const d: number = p - AsciiChars.Zero\r\n num += d * i\r\n i /= 10\r\n }\r\n\r\n return num * sign\r\n }\r\n\r\n public getString (start: number, end: number): string {\r\n return this.buffer.toString('ascii', start, end)\r\n }\r\n\r\n public getBuffer (start: number, end: number): Buffer {\r\n return this.buffer.slice(start, end)\r\n }\r\n\r\n public getBoolean (start: number): boolean {\r\n const b: number = this.buffer[start]\r\n return b === AsciiChars.Y\r\n }\r\n\r\n public getFloat (start: number, vend: number): number {\r\n let n: number = 0\r\n let digits: number = 0\r\n let dotPosition: number = 0\r\n const buffer = this.buffer\r\n let sign = 1\r\n switch (buffer[start]) {\r\n case AsciiChars.Minus: {\r\n sign = -1\r\n start++\r\n break\r\n }\r\n case AsciiChars.Plus: {\r\n start++\r\n break\r\n }\r\n }\r\n const len = vend - start\r\n let i: number = Math.pow(10, len - 1)\r\n for (let j: number = start; j <= vend; ++j) {\r\n const p: number = buffer[j]\r\n if (p >= AsciiChars.Zero && p <= AsciiChars.Nine) {\r\n const d: number = p - AsciiChars.Zero\r\n ++digits\r\n n += d * i\r\n i /= 10\r\n } else if (p === AsciiChars.Dot) {\r\n if (dotPosition > 0) {\r\n return null\r\n }\r\n dotPosition = j - start\r\n } else if (digits > 0) {\r\n return null\r\n }\r\n }\r\n const power: number = dotPosition === 0 ? 0 : len - dotPosition\r\n const raised = dotPosition === 0 ? 10 : Math.pow(10, -1 * power)\r\n const round = dotPosition === 0 ? 1 : Math.pow(10, power)\r\n const val = n * raised * sign\r\n return Math.round(val * round) / round\r\n }\r\n\r\n public checkGrowBuffer (required: number): void {\r\n let buffer = this.buffer\r\n let size = buffer.length\r\n const ptr = this.ptr\r\n if (size - ptr >= required) {\r\n return\r\n }\r\n while (size - ptr < required) {\r\n size *= 2\r\n }\r\n const old = buffer\r\n buffer = Buffer.allocUnsafe(size)\r\n old.copy(buffer, 0, 0, this.ptr)\r\n this.buffer = buffer\r\n this.stretched = size\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"elastic-buffer.js","sourceRoot":"","sources":["../../src/buffer/elastic-buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from './ascii-chars'\r\nimport { format } from 'mathjs'\r\n\r\nexport class ElasticBuffer {\r\n private buffer: Buffer\r\n private ptr: number = 0\r\n private stretched: number\r\n\r\n constructor (public readonly size: number = 6 * 1024, public readonly returnTo: number = 6 * 1024) {\r\n this.size = Math.max(1, this.size)\r\n this.buffer = Buffer.allocUnsafe(this.size)\r\n this.returnTo = Math.max(this.size, this.returnTo)\r\n this.stretched = this.size\r\n }\r\n\r\n private static precisionRound (n: number, precision: number): number {\r\n const factor: number = Math.pow(10, precision)\r\n return Math.round(n * factor) / factor\r\n }\r\n\r\n private static HowManyDigits (v: number): number {\r\n v = Math.abs(v)\r\n let digits: number = 0\r\n let w: number = v\r\n while (w > 0) {\r\n ++digits\r\n w = Math.floor(w / 10)\r\n }\r\n return Math.max(digits, 1)\r\n }\r\n\r\n public currentSize (): number {\r\n return this.stretched\r\n }\r\n\r\n public getPos (): number {\r\n return this.ptr\r\n }\r\n\r\n public setPos (ptr: number): number {\r\n const r = this.ptr\r\n if (ptr >= 0 && ptr < this.size) {\r\n this.ptr = ptr\r\n }\r\n return r\r\n }\r\n\r\n public get (pos: number): number {\r\n return this.buffer[pos]\r\n }\r\n\r\n public writeBoolean (v: boolean): number {\r\n this.writeChar(v ? AsciiChars.Y : AsciiChars.N)\r\n return this.ptr\r\n }\r\n\r\n public switchChar (c: number): number {\r\n this.buffer[this.ptr - 1] = c\r\n return this.ptr\r\n }\r\n\r\n public saveChar (c: number): number {\r\n this.buffer[this.ptr++] = c\r\n return this.ptr\r\n }\r\n\r\n public writeChar (c: number): number {\r\n if (c > 255) throw new Error(`can't write ${c} to a byte`)\r\n this.checkGrowBuffer(1)\r\n this.buffer[this.ptr++] = c\r\n return this.ptr\r\n }\r\n\r\n public writeString (s: string): number {\r\n const begin = this.ptr\r\n this.checkGrowBuffer(s.length)\r\n const buffer = this.buffer\r\n this.ptr += buffer.write(s, begin, s.length, 'ascii')\r\n return this.ptr\r\n }\r\n\r\n public writeBuffer (v: Buffer): number {\r\n const begin = this.ptr\r\n this.checkGrowBuffer(v.length)\r\n const buffer = this.buffer\r\n const srcLen: number = v.length\r\n this.ptr += v.copy(buffer, begin, 0, srcLen)\r\n return this.ptr\r\n }\r\n\r\n public writeWholeNumber (n: number): number {\r\n const digits: number = ElasticBuffer.HowManyDigits(n)\r\n let reserve = digits\r\n const sign: number = Math.sign(n)\r\n let p: number = Math.pow(10, digits - 1)\r\n let v: number = Math.abs(n)\r\n if (sign < 0) {\r\n reserve++\r\n }\r\n this.checkGrowBuffer(reserve)\r\n const buffer = this.buffer\r\n if (sign < 0) {\r\n buffer[this.ptr++] = AsciiChars.Minus\r\n }\r\n while (p >= 1) {\r\n const d: number = Math.floor(v / p)\r\n v -= d * p\r\n p /= 10\r\n buffer[this.ptr++] = AsciiChars.Zero + d\r\n }\r\n\r\n return this.ptr\r\n }\r\n\r\n public writeNumber (v: number, places: number = 13) {\r\n const rounded: number = Math.floor(v)\r\n const fraction: number = ElasticBuffer.precisionRound(v - rounded, places)\r\n if (fraction === 0) {\r\n // integer\r\n return this.writeWholeNumber(v)\r\n } else {\r\n // decimal with fraction turn to string\r\n const s: string = format(v, { notation: 'fixed' })\r\n return this.writeString(s)\r\n }\r\n }\r\n\r\n public reset (): boolean {\r\n this.ptr = 0\r\n const shrink = this.stretched > this.returnTo\r\n if (shrink) {\r\n this.buffer = Buffer.allocUnsafe(this.returnTo)\r\n this.stretched = this.size\r\n }\r\n return shrink\r\n }\r\n\r\n public slice (): Buffer {\r\n return this.buffer.slice(0, this.ptr)\r\n }\r\n\r\n public copy (): Buffer {\r\n const m = Buffer.alloc(this.ptr)\r\n this.buffer.copy(m, 0, 0, this.ptr)\r\n return m\r\n }\r\n\r\n public clone (): ElasticBuffer {\r\n const cloned = new ElasticBuffer(this.ptr)\r\n this.buffer.copy(cloned.buffer, 0, 0, this.ptr)\r\n cloned.setPos(this.ptr)\r\n return cloned\r\n }\r\n\r\n public writePaddedHundreds (v: number): number {\r\n if (v > 999) throw new Error(`can't write ${v} as hundreds padding`)\r\n this.checkGrowBuffer(3)\r\n const buffer = this.buffer\r\n const zero: number = AsciiChars.Zero\r\n const units: number = v % 10 + zero\r\n v = v / 10\r\n const tens: number = v % 10 + zero\r\n v = v / 10\r\n buffer[this.ptr++] = v % 10 + zero\r\n buffer[this.ptr++] = tens\r\n buffer[this.ptr++] = units\r\n return this.ptr\r\n }\r\n\r\n public writePaddedTensUnits (v: number): number {\r\n if (v > 99) throw new Error(`can't write ${v} as hundreds padding`)\r\n this.checkGrowBuffer(2)\r\n const buffer = this.buffer\r\n const zero: number = AsciiChars.Zero\r\n const units: number = v % 10 + zero\r\n v = v / 10\r\n buffer[this.ptr++] = v % 10 + zero\r\n buffer[this.ptr++] = units\r\n return this.ptr\r\n }\r\n\r\n public patchPaddedNumberAtPos (ptr: number, numToWrite: number, padding: number): void {\r\n let digits: number = ElasticBuffer.HowManyDigits(numToWrite)\r\n const saved: number = this.ptr\r\n this.ptr = ptr\r\n const buffer = this.buffer\r\n while (digits++ < padding) {\r\n buffer[this.ptr++] = AsciiChars.Zero\r\n }\r\n this.writeWholeNumber(numToWrite)\r\n this.ptr = saved\r\n }\r\n\r\n public toString (ptr: number = this.ptr): string {\r\n return this.buffer.toString('ascii', 0, ptr)\r\n }\r\n\r\n public checksum (ptr: number = this.ptr): number {\r\n const cks: number = this.sum(ptr)\r\n return cks % 256\r\n }\r\n\r\n public sum (ptr: number = this.ptr): number {\r\n let total: number = 0\r\n ptr = Math.min(ptr, this.ptr)\r\n const buffer = this.buffer\r\n for (let idx: number = 0; idx < ptr; idx++) {\r\n total += buffer[idx]\r\n }\r\n return total\r\n }\r\n\r\n public getWholeNumber (start: number, vend: number): number {\r\n const buffer = this.buffer\r\n let sign = 1\r\n let raised = vend - start\r\n switch (buffer[start]) {\r\n case AsciiChars.Minus: {\r\n --raised\r\n sign = -1\r\n ++start\r\n break\r\n }\r\n case AsciiChars.Plus: {\r\n --raised\r\n ++start\r\n break\r\n }\r\n }\r\n let i: number = Math.pow(10, raised)\r\n let num: number = 0\r\n let scan: number = start\r\n\r\n while (scan <= vend) {\r\n const p: number = buffer[scan++]\r\n const d: number = p - AsciiChars.Zero\r\n num += d * i\r\n i /= 10\r\n }\r\n\r\n return num * sign\r\n }\r\n\r\n public getString (start: number, end: number): string {\r\n return this.buffer.toString('ascii', start, end)\r\n }\r\n\r\n public getBuffer (start: number, end: number): Buffer {\r\n return this.buffer.slice(start, end)\r\n }\r\n\r\n public getBoolean (start: number): boolean {\r\n const b: number = this.buffer[start]\r\n return b === AsciiChars.Y\r\n }\r\n\r\n public getFloat (start: number, vend: number): number {\r\n let n: number = 0\r\n let digits: number = 0\r\n let dotPosition: number = 0\r\n const buffer = this.buffer\r\n let sign = 1\r\n switch (buffer[start]) {\r\n case AsciiChars.Minus: {\r\n sign = -1\r\n start++\r\n break\r\n }\r\n case AsciiChars.Plus: {\r\n start++\r\n break\r\n }\r\n }\r\n const len = vend - start\r\n let i: number = Math.pow(10, len - 1)\r\n for (let j: number = start; j <= vend; ++j) {\r\n const p: number = buffer[j]\r\n if (p >= AsciiChars.Zero && p <= AsciiChars.Nine) {\r\n const d: number = p - AsciiChars.Zero\r\n ++digits\r\n n += d * i\r\n i /= 10\r\n } else if (p === AsciiChars.Dot) {\r\n if (dotPosition > 0) {\r\n return null\r\n }\r\n dotPosition = j - start\r\n } else if (digits > 0) {\r\n return null\r\n }\r\n }\r\n const power: number = dotPosition === 0 ? 0 : len - dotPosition\r\n const raised = dotPosition === 0 ? 10 : Math.pow(10, -1 * power)\r\n const round = dotPosition === 0 ? 1 : Math.pow(10, power)\r\n const val = n * raised * sign\r\n return Math.round(val * round) / round\r\n }\r\n\r\n public checkGrowBuffer (required: number): void {\r\n let buffer = this.buffer\r\n let size = buffer.length\r\n const ptr = this.ptr\r\n if (size - ptr >= required) {\r\n return\r\n }\r\n while (size - ptr < required) {\r\n size *= 2\r\n }\r\n const old = buffer\r\n buffer = Buffer.allocUnsafe(size)\r\n old.copy(buffer, 0, 0, this.ptr)\r\n this.buffer = buffer\r\n this.stretched = size\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"encode-proxy.js","sourceRoot":"","sources":["../../src/buffer/encode-proxy.ts"],"names":[],"mappings":"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","sourcesContent":["import { FixDefinitions, MessageDefinition, SimpleFieldDefinition, ContainedField, ContainedFieldType, ContainedSimpleField, ContainedComponentField, ContainedGroupField, ContainedFieldSet } from '..'\r\nimport { ILooseObject } from '../collections/collection'\r\nimport { TagType } from './tags'\r\n\r\nexport class EncodeProxy {\r\n constructor (public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n private static SimpleFieldCheck (field: ContainedSimpleField, val: any): void {\r\n const sf: ContainedSimpleField = field as ContainedSimpleField\r\n const definition: SimpleFieldDefinition = sf.definition\r\n if (definition.isEnum()) {\r\n const resolved: boolean = definition.containsEnum(val)\r\n if (!resolved) {\r\n throw new Error(`enum field ${field.name} does not support \"${val}\"`)\r\n }\r\n }\r\n switch (definition.tagType) {\r\n case TagType.LocalDate:\r\n case TagType.UtcTimeOnly:\r\n case TagType.UtcDateOnly:\r\n case TagType.UtcTimestamp: {\r\n const isDate: boolean = val instanceof Date\r\n if (!isDate) {\r\n throw new Error(`field ${field.name} expects Date but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.Boolean: {\r\n if (typeof(val) !== typeof(true)) {\r\n throw new Error(`field ${field.name} expects boolean but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.String: {\r\n if (typeof(val) !== 'string') {\r\n throw new Error(`field ${field.name} expects string but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.RawData: {\r\n const isBuffer: boolean = val instanceof Buffer\r\n if (!isBuffer) {\r\n throw new Error(`field ${field.name} expects Buffer but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Float:\r\n case TagType.Length: {\r\n if (isNaN(val)) {\r\n throw new Error(`field ${field.name} expects number but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n }\r\n }\r\n\r\n private static checkProperties (wrapped: ILooseObject, val: ILooseObject): ILooseObject {\r\n const keys: string[] = Object.keys(val)\r\n for (let k of keys) {\r\n wrapped[k] = val[k]\r\n }\r\n return wrapped\r\n }\r\n\r\n private static ComponentFieldCheck (field: ContainedComponentField, val: any): object {\r\n const isComplex: boolean = typeof val === 'object'\r\n if (!isComplex) {\r\n throw new Error(`type ${field.name} is a component but is given type \"${typeof val}\"`)\r\n }\r\n const cf: ContainedComponentField = field as ContainedComponentField\r\n return EncodeProxy.checkProperties(new Proxy({}, EncodeProxy.handler(cf.definition)), val)\r\n }\r\n\r\n private static GroupFieldCheck (field: ContainedGroupField, val: any): object {\r\n const accepted: boolean = Array.isArray(val) || !isNaN(val)\r\n if (!accepted) {\r\n throw new Error(`type ${field.name} is a group and needs array or number, not \"${typeof val}\"`)\r\n }\r\n const gf: ContainedComponentField = field as ContainedComponentField\r\n const j: number = val\r\n const isNumber: boolean = !isNaN(val)\r\n if (isNumber) {\r\n const arr: ILooseObject[] = new Array(j)\r\n for (let i: number = 0; i < j; ++i) {\r\n arr[i] = new Proxy({}, EncodeProxy.handler(gf.definition))\r\n }\r\n return arr\r\n } else {\r\n const arr: ILooseObject[] = val\r\n for (let i: number = 0; i < arr.length; ++i) {\r\n arr[i] = EncodeProxy.checkProperties(new Proxy({}, EncodeProxy.handler(gf.definition)), arr[i])\r\n }\r\n return arr\r\n }\r\n }\r\n\r\n private static handler (set: ContainedFieldSet): Object {\r\n return {\r\n set (target: ILooseObject, prop: string, val: any): boolean {\r\n const field: ContainedField = set.localNameToField.get(prop)\r\n if (!field) {\r\n throw new Error(`type ${set.name} has no field named ${prop}`)\r\n }\r\n target[prop] = EncodeProxy.examine(field, val)\r\n return true\r\n }\r\n }\r\n }\r\n\r\n private static examine (field: ContainedField, val: any): any {\r\n switch (field.type) {\r\n case ContainedFieldType.Simple: {\r\n EncodeProxy.SimpleFieldCheck(field as ContainedSimpleField, val)\r\n break\r\n }\r\n\r\n case ContainedFieldType.Component: {\r\n val = EncodeProxy.ComponentFieldCheck(field as ContainedComponentField, val)\r\n break\r\n }\r\n\r\n case ContainedFieldType.Group: {\r\n val = EncodeProxy.GroupFieldCheck(field as ContainedGroupField, val)\r\n break\r\n }\r\n }\r\n return val\r\n }\r\n public wrap (msgName: string): ILooseObject {\r\n const msg: MessageDefinition = this.definitions.message.get(msgName)\r\n if (!msg) {\r\n throw new Error(`no message defined for type ${msgName}`)\r\n }\r\n\r\n return new Proxy({}, EncodeProxy.handler(msg))\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"encode-proxy.js","sourceRoot":"","sources":["../../src/buffer/encode-proxy.ts"],"names":[],"mappings":"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","sourcesContent":["import { FixDefinitions, MessageDefinition, SimpleFieldDefinition, ContainedField, ContainedFieldType, ContainedSimpleField, ContainedComponentField, ContainedGroupField, ContainedFieldSet } from '..'\r\nimport { ILooseObject } from '../collections/collection'\r\nimport { TagType } from './tags'\r\n\r\nexport class EncodeProxy {\r\n constructor (public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n private static SimpleFieldCheck (field: ContainedSimpleField, val: any): void {\r\n const sf: ContainedSimpleField = field\r\n const definition: SimpleFieldDefinition = sf.definition\r\n if (definition.isEnum()) {\r\n const resolved: boolean = definition.containsEnum(val)\r\n if (!resolved) {\r\n throw new Error(`enum field ${field.name} does not support \"${val}\"`)\r\n }\r\n }\r\n switch (definition.tagType) {\r\n case TagType.LocalDate:\r\n case TagType.UtcTimeOnly:\r\n case TagType.UtcDateOnly:\r\n case TagType.UtcTimestamp: {\r\n const isDate: boolean = val instanceof Date\r\n if (!isDate) {\r\n throw new Error(`field ${field.name} expects Date but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.Boolean: {\r\n if (typeof(val) !== typeof(true)) {\r\n throw new Error(`field ${field.name} expects boolean but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.String: {\r\n if (typeof(val) !== 'string') {\r\n throw new Error(`field ${field.name} expects string but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.RawData: {\r\n const isBuffer: boolean = val instanceof Buffer\r\n if (!isBuffer) {\r\n throw new Error(`field ${field.name} expects Buffer but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Float:\r\n case TagType.Length: {\r\n if (isNaN(val)) {\r\n throw new Error(`field ${field.name} expects number but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n }\r\n }\r\n\r\n private static checkProperties (wrapped: ILooseObject, val: ILooseObject): ILooseObject {\r\n const keys: string[] = Object.keys(val)\r\n for (let k of keys) {\r\n wrapped[k] = val[k]\r\n }\r\n return wrapped\r\n }\r\n\r\n private static ComponentFieldCheck (field: ContainedComponentField, val: any): object {\r\n const isComplex: boolean = typeof val === 'object'\r\n if (!isComplex) {\r\n throw new Error(`type ${field.name} is a component but is given type \"${typeof val}\"`)\r\n }\r\n const cf: ContainedComponentField = field\r\n return EncodeProxy.checkProperties(new Proxy({}, EncodeProxy.handler(cf.definition)), val)\r\n }\r\n\r\n private static GroupFieldCheck (field: ContainedGroupField, val: any): object {\r\n const accepted: boolean = Array.isArray(val) || !isNaN(val)\r\n if (!accepted) {\r\n throw new Error(`type ${field.name} is a group and needs array or number, not \"${typeof val}\"`)\r\n }\r\n const gf: ContainedComponentField = field as ContainedComponentField\r\n const j: number = val\r\n const isNumber: boolean = !isNaN(val)\r\n if (isNumber) {\r\n const arr: ILooseObject[] = new Array(j)\r\n for (let i: number = 0; i < j; ++i) {\r\n arr[i] = new Proxy({}, EncodeProxy.handler(gf.definition))\r\n }\r\n return arr\r\n } else {\r\n const arr: ILooseObject[] = val\r\n for (let i: number = 0; i < arr.length; ++i) {\r\n arr[i] = EncodeProxy.checkProperties(new Proxy({}, EncodeProxy.handler(gf.definition)), arr[i])\r\n }\r\n return arr\r\n }\r\n }\r\n\r\n private static handler (set: ContainedFieldSet): Object {\r\n return {\r\n set (target: ILooseObject, prop: string, val: any): boolean {\r\n const field: ContainedField = set.localNameToField.get(prop)\r\n if (!field) {\r\n throw new Error(`type ${set.name} has no field named ${prop}`)\r\n }\r\n target[prop] = EncodeProxy.examine(field, val)\r\n return true\r\n }\r\n }\r\n }\r\n\r\n private static examine (field: ContainedField, val: any): any {\r\n switch (field.type) {\r\n case ContainedFieldType.Simple: {\r\n EncodeProxy.SimpleFieldCheck(field as ContainedSimpleField, val)\r\n break\r\n }\r\n\r\n case ContainedFieldType.Component: {\r\n val = EncodeProxy.ComponentFieldCheck(field as ContainedComponentField, val)\r\n break\r\n }\r\n\r\n case ContainedFieldType.Group: {\r\n val = EncodeProxy.GroupFieldCheck(field as ContainedGroupField, val)\r\n break\r\n }\r\n }\r\n return val\r\n }\r\n public wrap (msgName: string): ILooseObject {\r\n const msg: MessageDefinition = this.definitions.message.get(msgName)\r\n if (!msg) {\r\n throw new Error(`no message defined for type ${msgName}`)\r\n }\r\n\r\n return new Proxy({}, EncodeProxy.handler(msg))\r\n }\r\n}\r\n"]}
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import { ILooseObject } from '../../collections/collection';
2
3
  import { ContainedFieldSet, FixDefinitions } from '../../dictionary';
3
4
  import { MsgEncoder } from '../msg-encoder';
@@ -22,4 +23,6 @@ export declare class FixmlEncoder extends MsgEncoder {
22
23
  private getPopulatedAttributes;
23
24
  private complexGroup;
24
25
  private complexComponent;
26
+ reset(): void;
27
+ trim(): Buffer;
25
28
  }
@@ -192,6 +192,12 @@ class FixmlEncoder extends msg_encoder_1.MsgEncoder {
192
192
  this.toXml(instance, cf.name, def, depth + 1);
193
193
  }
194
194
  }
195
+ reset() {
196
+ this.buffer.reset();
197
+ }
198
+ trim() {
199
+ return this.buffer.copy();
200
+ }
195
201
  }
196
202
  exports.FixmlEncoder = FixmlEncoder;
197
203
  //# sourceMappingURL=fixml-encoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixml-encoder.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../../collections/collection'\r\nimport { ContainedFieldSet, ContainedField, ContainedGroupField, ContainedComponentField, ContainedSimpleField, FixDefinitions, dispatchFields, IFieldDispatcher } from '../../dictionary'\r\nimport { AsciiChars } from '../ascii-chars'\r\nimport { TagType } from '../tags'\r\nimport { MsgEncoder } from '../msg-encoder'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport moment = require('moment')\r\n\r\ninterface IPopulatedAttributes {\r\n fields: ContainedSimpleField[],\r\n values: any[]\r\n}\r\n\r\nexport class FixmlEncoder extends MsgEncoder {\r\n public attributePerLine: boolean = false\r\n public readonly eol: string = require('os').EOL\r\n private readonly beginDoc: string = `<FIXML>${this.eol}`\r\n private readonly endDoc: string = '</FIXML>'\r\n private readonly beginBatch: string = `<Batch>${this.eol}`\r\n private readonly endBatch: string = '</Batch>'\r\n\r\n public constructor (public readonly buffer: ElasticBuffer, public readonly definitions: FixDefinitions) {\r\n super(definitions)\r\n }\r\n\r\n private static asString (sf: ContainedSimpleField, v: any): string {\r\n switch (sf.definition.tagType) {\r\n case TagType.String: {\r\n return v as string\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Float:\r\n case TagType.Length: {\r\n return v.toString()\r\n }\r\n\r\n case TagType.Boolean: {\r\n return v ? 'Y' : 'N'\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n const d: Date = v as Date\r\n return moment(d).utc().format('YYYY-MM-DDTHH:mm:ss.SSS')\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n const d: Date = v as Date\r\n return moment.utc(d).format('HH:mm:ss.SSS')\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const d: Date = v as Date\r\n return moment(d).format('YYYY-MM-DD')\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n const d: Date = v as Date\r\n return moment(d).utc(true).format('YYYY-MM-DD')\r\n }\r\n }\r\n }\r\n\r\n public encodeSet (o: ILooseObject, set: ContainedFieldSet): void {\r\n const batch: ILooseObject[] = o.Batch\r\n const toWrite: ILooseObject[] = batch || [o]\r\n let depth = batch ? 1 : 0\r\n const buffer = this.buffer\r\n const begin = this.beginDoc\r\n const indent: string = '\\t'\r\n const endBatch = batch ? this.endBatch : ''\r\n const eol = this.eol\r\n buffer.reset()\r\n buffer.writeString(begin)\r\n if (batch) {\r\n this.batchStart(o, set, depth)\r\n }\r\n toWrite.forEach((next: ILooseObject) => {\r\n this.toXml(next, set.abbreviation, set, depth + 1)\r\n buffer.writeString(eol)\r\n })\r\n if (batch) {\r\n buffer.writeString(`${indent}${endBatch}`)\r\n }\r\n\r\n buffer.writeString(this.endDoc)\r\n }\r\n\r\n private batchStart (o: ILooseObject, set: ContainedFieldSet, depth: number) {\r\n const buffer = this.buffer\r\n const indent: string = '\\t'\r\n const beginBatch = this.beginBatch\r\n const hdr = o.StandardHeader\r\n const eol = this.eol\r\n buffer.writeString(`${indent}${beginBatch}`)\r\n if (hdr) {\r\n const h = set.fields[0] as ContainedComponentField\r\n this.toXml(hdr, h.name, h.definition, depth + 1)\r\n buffer.writeString(eol)\r\n }\r\n }\r\n\r\n private toXml (o: ILooseObject, name: string, set: ContainedFieldSet, depth: number): void {\r\n\r\n const buffer = this.buffer\r\n const selfClose: string = '/>'\r\n const close: string = '>'\r\n const open: string = '<'\r\n const indent: string = '\\t'.repeat(depth)\r\n const newLine = this.eol\r\n const fields: ContainedField[] = this.getPopulatedFields(set, o)\r\n const eol: string = fields.length === 0 ? selfClose : close\r\n buffer.writeString(`${indent}${open}`)\r\n buffer.writeString(`${name} `)\r\n this.attributes(o, set, depth, this.attributePerLine)\r\n buffer.writeString(`${eol}`)\r\n dispatchFields(fields, {\r\n group: (g: ContainedGroupField) => this.complexGroup(o, g, depth),\r\n component: (c: ContainedComponentField) => this.complexComponent(o, c, depth)\r\n } as IFieldDispatcher)\r\n if (fields.length) {\r\n const end: string = `${newLine}${indent}</${name}>`\r\n buffer.writeString(`${end}`)\r\n }\r\n }\r\n\r\n private getPopulatedFields (set: ContainedFieldSet, o: ILooseObject): ContainedField[] {\r\n const keys: string[] = Object.keys(o)\r\n const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {\r\n const field: ContainedField = set.localNameToField.get(current)\r\n if (field && !set.nameToLocalAttribute.containsKey(current)) {\r\n a.push(field)\r\n }\r\n return a\r\n }, [])\r\n fields.sort((a: ContainedField, b: ContainedField) => a.position - b.position)\r\n return fields\r\n }\r\n\r\n private encodeAttribute (name: string, val: string): void {\r\n if (val == null) {\r\n return\r\n }\r\n const buffer = this.buffer\r\n buffer.writeString(name)\r\n buffer.writeChar(AsciiChars.Equal)\r\n buffer.writeChar(AsciiChars.Dq)\r\n buffer.writeString(val)\r\n buffer.writeChar(AsciiChars.Dq)\r\n }\r\n\r\n private attributes (o: ILooseObject, set: ContainedFieldSet, depth: number, attributePerLine: boolean): void {\r\n const newLine = this.eol\r\n const indent: string = '\\t'.repeat(depth + 1)\r\n const attributes = set.localAttribute\r\n const buffer = this.buffer\r\n if (attributes.length && attributePerLine) {\r\n buffer.writeString(newLine)\r\n buffer.writeString(indent)\r\n }\r\n const populatedAttributes: IPopulatedAttributes = this.getPopulatedAttributes(o, attributes)\r\n for (let a = 0; a < populatedAttributes.values.length; ++a) {\r\n const last = a === populatedAttributes.values.length - 1\r\n const f = populatedAttributes.fields[a]\r\n if (a || this.attributePerLine) buffer.writeChar(AsciiChars.Space)\r\n this.encodeAttribute(f.name, FixmlEncoder.asString(f, populatedAttributes.values[a]))\r\n if (!last && attributePerLine) {\r\n buffer.writeString(newLine)\r\n buffer.writeString(indent)\r\n }\r\n }\r\n }\r\n\r\n private getPopulatedAttributes (o: ILooseObject, attributes: ContainedSimpleField[]): IPopulatedAttributes {\r\n return attributes.reduce((a: IPopulatedAttributes, f: ContainedSimpleField) => {\r\n let v: any = o[f.definition.name]\r\n if (v == null) {\r\n v = o[f.name]\r\n }\r\n if (v != null) {\r\n a.values.push(v)\r\n a.fields.push(f)\r\n }\r\n return a\r\n }, {\r\n values: [],\r\n fields: []\r\n } as IPopulatedAttributes)\r\n }\r\n\r\n private complexGroup (o: ILooseObject, field: ContainedField, depth: number) {\r\n const gf: ContainedGroupField = field as ContainedGroupField\r\n const elements: ILooseObject[] = o[gf.definition.name]\r\n if (elements) {\r\n if (Array.isArray(elements)) {\r\n for (const e of elements) {\r\n this.buffer.writeString(this.eol)\r\n this.toXml(e, gf.name, gf.definition,depth + 1)\r\n }\r\n } else {\r\n throw new Error(`expected array for member ${gf.definition.name}`)\r\n }\r\n }\r\n }\r\n\r\n private complexComponent (o: ILooseObject, field: ContainedField, depth: number) {\r\n const cf: ContainedComponentField = field as ContainedComponentField\r\n const def = cf.definition\r\n const instance: ILooseObject = o[def.name]\r\n if (instance) {\r\n this.buffer.writeString(this.eol)\r\n this.toXml(instance, cf.name, def, depth + 1)\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fixml-encoder.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../../collections/collection'\r\nimport { ContainedFieldSet, ContainedField, ContainedGroupField, ContainedComponentField, ContainedSimpleField, FixDefinitions, dispatchFields, IFieldDispatcher } from '../../dictionary'\r\nimport { AsciiChars } from '../ascii-chars'\r\nimport { TagType } from '../tags'\r\nimport { MsgEncoder } from '../msg-encoder'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport moment = require('moment')\r\n\r\ninterface IPopulatedAttributes {\r\n fields: ContainedSimpleField[],\r\n values: any[]\r\n}\r\n\r\nexport class FixmlEncoder extends MsgEncoder {\r\n public attributePerLine: boolean = false\r\n public readonly eol: string = require('os').EOL\r\n private readonly beginDoc: string = `<FIXML>${this.eol}`\r\n private readonly endDoc: string = '</FIXML>'\r\n private readonly beginBatch: string = `<Batch>${this.eol}`\r\n private readonly endBatch: string = '</Batch>'\r\n\r\n public constructor (public readonly buffer: ElasticBuffer, public readonly definitions: FixDefinitions) {\r\n super(definitions)\r\n }\r\n\r\n private static asString (sf: ContainedSimpleField, v: any): string {\r\n switch (sf.definition.tagType) {\r\n case TagType.String: {\r\n return v as string\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Float:\r\n case TagType.Length: {\r\n return v.toString()\r\n }\r\n\r\n case TagType.Boolean: {\r\n return v ? 'Y' : 'N'\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n const d: Date = v as Date\r\n return moment(d).utc().format('YYYY-MM-DDTHH:mm:ss.SSS')\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n const d: Date = v as Date\r\n return moment.utc(d).format('HH:mm:ss.SSS')\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const d: Date = v as Date\r\n return moment(d).format('YYYY-MM-DD')\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n const d: Date = v as Date\r\n return moment(d).utc(true).format('YYYY-MM-DD')\r\n }\r\n }\r\n }\r\n\r\n public encodeSet (o: ILooseObject, set: ContainedFieldSet): void {\r\n const batch: ILooseObject[] = o.Batch\r\n const toWrite: ILooseObject[] = batch || [o]\r\n let depth = batch ? 1 : 0\r\n const buffer = this.buffer\r\n const begin = this.beginDoc\r\n const indent: string = '\\t'\r\n const endBatch = batch ? this.endBatch : ''\r\n const eol = this.eol\r\n buffer.reset()\r\n buffer.writeString(begin)\r\n if (batch) {\r\n this.batchStart(o, set, depth)\r\n }\r\n toWrite.forEach((next: ILooseObject) => {\r\n this.toXml(next, set.abbreviation, set, depth + 1)\r\n buffer.writeString(eol)\r\n })\r\n if (batch) {\r\n buffer.writeString(`${indent}${endBatch}`)\r\n }\r\n\r\n buffer.writeString(this.endDoc)\r\n }\r\n\r\n private batchStart (o: ILooseObject, set: ContainedFieldSet, depth: number) {\r\n const buffer = this.buffer\r\n const indent: string = '\\t'\r\n const beginBatch = this.beginBatch\r\n const hdr = o.StandardHeader\r\n const eol = this.eol\r\n buffer.writeString(`${indent}${beginBatch}`)\r\n if (hdr) {\r\n const h = set.fields[0] as ContainedComponentField\r\n this.toXml(hdr, h.name, h.definition, depth + 1)\r\n buffer.writeString(eol)\r\n }\r\n }\r\n\r\n private toXml (o: ILooseObject, name: string, set: ContainedFieldSet, depth: number): void {\r\n\r\n const buffer = this.buffer\r\n const selfClose: string = '/>'\r\n const close: string = '>'\r\n const open: string = '<'\r\n const indent: string = '\\t'.repeat(depth)\r\n const newLine = this.eol\r\n const fields: ContainedField[] = this.getPopulatedFields(set, o)\r\n const eol: string = fields.length === 0 ? selfClose : close\r\n buffer.writeString(`${indent}${open}`)\r\n buffer.writeString(`${name} `)\r\n this.attributes(o, set, depth, this.attributePerLine)\r\n buffer.writeString(`${eol}`)\r\n dispatchFields(fields, {\r\n group: (g: ContainedGroupField) => this.complexGroup(o, g, depth),\r\n component: (c: ContainedComponentField) => this.complexComponent(o, c, depth)\r\n } as IFieldDispatcher)\r\n if (fields.length) {\r\n const end: string = `${newLine}${indent}</${name}>`\r\n buffer.writeString(`${end}`)\r\n }\r\n }\r\n\r\n private getPopulatedFields (set: ContainedFieldSet, o: ILooseObject): ContainedField[] {\r\n const keys: string[] = Object.keys(o)\r\n const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {\r\n const field: ContainedField = set.localNameToField.get(current)\r\n if (field && !set.nameToLocalAttribute.containsKey(current)) {\r\n a.push(field)\r\n }\r\n return a\r\n }, [])\r\n fields.sort((a: ContainedField, b: ContainedField) => a.position - b.position)\r\n return fields\r\n }\r\n\r\n private encodeAttribute (name: string, val: string): void {\r\n if (val == null) {\r\n return\r\n }\r\n const buffer = this.buffer\r\n buffer.writeString(name)\r\n buffer.writeChar(AsciiChars.Equal)\r\n buffer.writeChar(AsciiChars.Dq)\r\n buffer.writeString(val)\r\n buffer.writeChar(AsciiChars.Dq)\r\n }\r\n\r\n private attributes (o: ILooseObject, set: ContainedFieldSet, depth: number, attributePerLine: boolean): void {\r\n const newLine = this.eol\r\n const indent: string = '\\t'.repeat(depth + 1)\r\n const attributes = set.localAttribute\r\n const buffer = this.buffer\r\n if (attributes.length && attributePerLine) {\r\n buffer.writeString(newLine)\r\n buffer.writeString(indent)\r\n }\r\n const populatedAttributes: IPopulatedAttributes = this.getPopulatedAttributes(o, attributes)\r\n for (let a = 0; a < populatedAttributes.values.length; ++a) {\r\n const last = a === populatedAttributes.values.length - 1\r\n const f = populatedAttributes.fields[a]\r\n if (a || this.attributePerLine) buffer.writeChar(AsciiChars.Space)\r\n this.encodeAttribute(f.name, FixmlEncoder.asString(f, populatedAttributes.values[a]))\r\n if (!last && attributePerLine) {\r\n buffer.writeString(newLine)\r\n buffer.writeString(indent)\r\n }\r\n }\r\n }\r\n\r\n private getPopulatedAttributes (o: ILooseObject, attributes: ContainedSimpleField[]): IPopulatedAttributes {\r\n return attributes.reduce((a: IPopulatedAttributes, f: ContainedSimpleField) => {\r\n let v: any = o[f.definition.name]\r\n if (v == null) {\r\n v = o[f.name]\r\n }\r\n if (v != null) {\r\n a.values.push(v)\r\n a.fields.push(f)\r\n }\r\n return a\r\n }, {\r\n values: [],\r\n fields: []\r\n } as IPopulatedAttributes)\r\n }\r\n\r\n private complexGroup (o: ILooseObject, field: ContainedField, depth: number) {\r\n const gf: ContainedGroupField = field as ContainedGroupField\r\n const elements: ILooseObject[] = o[gf.definition.name]\r\n if (elements) {\r\n if (Array.isArray(elements)) {\r\n for (const e of elements) {\r\n this.buffer.writeString(this.eol)\r\n this.toXml(e, gf.name, gf.definition,depth + 1)\r\n }\r\n } else {\r\n throw new Error(`expected array for member ${gf.definition.name}`)\r\n }\r\n }\r\n }\r\n\r\n private complexComponent (o: ILooseObject, field: ContainedField, depth: number) {\r\n const cf: ContainedComponentField = field as ContainedComponentField\r\n const def = cf.definition\r\n const instance: ILooseObject = o[def.name]\r\n if (instance) {\r\n this.buffer.writeString(this.eol)\r\n this.toXml(instance, cf.name, def, depth + 1)\r\n }\r\n }\r\n\r\n reset (): void {\r\n this.buffer.reset()\r\n }\r\n\r\n trim (): Buffer {\r\n return this.buffer.copy()\r\n }\r\n}\r\n"]}
@@ -2,6 +2,7 @@ import { MsgView } from '../msg-view';
2
2
  import { SimpleFieldDefinition } from '../../dictionary';
3
3
  import { Structure } from '../structure';
4
4
  import { SegmentDescription } from '../segment-description';
5
+ import { IFixMsgStoreRecord } from '../../store';
5
6
  export declare class FixmlView extends MsgView {
6
7
  readonly segment: SegmentDescription;
7
8
  readonly values: string[];
@@ -15,4 +16,5 @@ export declare class FixmlView extends MsgView {
15
16
  protected create(singleton: SegmentDescription): FixmlView;
16
17
  protected stringAtPosition(position: number): string;
17
18
  protected toTyped(field: SimpleFieldDefinition): any;
19
+ toMsgStoreRecord(): IFixMsgStoreRecord;
18
20
  }
@@ -87,6 +87,9 @@ class FixmlView extends msg_view_1.MsgView {
87
87
  }
88
88
  return this.stringAtPosition(position);
89
89
  }
90
+ toMsgStoreRecord() {
91
+ return null;
92
+ }
90
93
  }
91
94
  exports.FixmlView = FixmlView;
92
95
  //# sourceMappingURL=fixml-view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fixml-view.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { MsgView } from '../msg-view'\r\nimport { SimpleFieldDefinition } from '../../dictionary'\r\nimport { Structure } from '../structure'\r\nimport { SegmentDescription } from '../segment-description'\r\nimport { TagType } from '../tags'\r\nimport { AsciiChars } from '../ascii-chars'\r\nimport * as moment from 'moment'\r\n\r\nexport class FixmlView extends MsgView {\r\n\r\n constructor (public readonly segment: SegmentDescription,\r\n public readonly values: string[],\r\n public readonly structure: Structure) {\r\n super(segment, structure)\r\n }\r\n\r\n private static getTimestamp (s: string, useUtc: boolean): Date {\r\n let m = moment(s)\r\n return useUtc ? m.utc(true).toDate() : m.toDate()\r\n }\r\n\r\n // 01:00:08.201\r\n private static getTimeOnly (s: string, useUtc: boolean): Date {\r\n let m = moment(s, [moment.HTML5_FMT.TIME_MS, moment.HTML5_FMT.TIME_SECONDS])\r\n return useUtc ? m.utc(true).toDate() : m.toDate()\r\n }\r\n\r\n private static getDateOnly (s: string, useUtc: boolean): Date {\r\n let m = moment(s)\r\n let d: Date\r\n if (useUtc) {\r\n d = m.utc(true).toDate()\r\n } else {\r\n d = m.toDate()\r\n }\r\n return d\r\n }\r\n\r\n // if the view is to be kept beyond the event on which it arrives, must be cloned\r\n public clone (): MsgView {\r\n return new FixmlView(this.segment, this.values, new Structure(this.structure.tags.clone(), this.structure.segments))\r\n }\r\n\r\n public checksum (): number {\r\n return 0\r\n }\r\n\r\n protected create (singleton: SegmentDescription) {\r\n return new FixmlView(singleton,\r\n this.values,\r\n this.structure)\r\n }\r\n\r\n protected stringAtPosition (position: number): string {\r\n if (position < 0 || position >= this.values.length) {\r\n throw new Error(`illegal position ${position}`)\r\n }\r\n return this.values[position]\r\n }\r\n\r\n protected toTyped (field: SimpleFieldDefinition): any {\r\n const position: number = this.getPosition(field.tag)\r\n if (position >= 0) {\r\n const s: string = this.values[position]\r\n switch (field.tagType) {\r\n case TagType.String : {\r\n return this.stringAtPosition(position)\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n return parseInt(s, 10)\r\n }\r\n\r\n case TagType.Float: {\r\n return parseFloat(s)\r\n }\r\n\r\n case TagType.Boolean: {\r\n return s && s.length > 0 && AsciiChars.firstChar(s) === AsciiChars.Y\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n // 20150417-01:00:08.201\r\n return FixmlView.getTimestamp(s, true)\r\n }\r\n // 01:00:08.201\r\n case TagType.UtcTimeOnly: {\r\n return FixmlView.getTimeOnly(s, true)\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n return FixmlView.getDateOnly(s, true)\r\n }\r\n\r\n case TagType.LocalDate: {\r\n return FixmlView.getDateOnly(s, true)\r\n }\r\n\r\n case TagType.RawData: {\r\n return Buffer.alloc(s.length, s, 'utf8')\r\n }\r\n\r\n default: {\r\n return this.stringAtPosition(position)\r\n }\r\n }\r\n }\r\n return this.stringAtPosition(position)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"fixml-view.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { MsgView } from '../msg-view'\r\nimport { SimpleFieldDefinition } from '../../dictionary'\r\nimport { Structure } from '../structure'\r\nimport { SegmentDescription } from '../segment-description'\r\nimport { TagType } from '../tags'\r\nimport { AsciiChars } from '../ascii-chars'\r\nimport * as moment from 'moment'\r\nimport { IFixMsgStoreRecord } from '../../store'\r\n\r\nexport class FixmlView extends MsgView {\r\n\r\n constructor (public readonly segment: SegmentDescription,\r\n public readonly values: string[],\r\n public readonly structure: Structure) {\r\n super(segment, structure)\r\n }\r\n\r\n private static getTimestamp (s: string, useUtc: boolean): Date {\r\n let m = moment(s)\r\n return useUtc ? m.utc(true).toDate() : m.toDate()\r\n }\r\n\r\n // 01:00:08.201\r\n private static getTimeOnly (s: string, useUtc: boolean): Date {\r\n let m = moment(s, [moment.HTML5_FMT.TIME_MS, moment.HTML5_FMT.TIME_SECONDS])\r\n return useUtc ? m.utc(true).toDate() : m.toDate()\r\n }\r\n\r\n private static getDateOnly (s: string, useUtc: boolean): Date {\r\n let m = moment(s)\r\n let d: Date\r\n if (useUtc) {\r\n d = m.utc(true).toDate()\r\n } else {\r\n d = m.toDate()\r\n }\r\n return d\r\n }\r\n\r\n // if the view is to be kept beyond the event on which it arrives, must be cloned\r\n public clone (): MsgView {\r\n return new FixmlView(this.segment, this.values, new Structure(this.structure.tags.clone(), this.structure.segments))\r\n }\r\n\r\n public checksum (): number {\r\n return 0\r\n }\r\n\r\n protected create (singleton: SegmentDescription) {\r\n return new FixmlView(singleton,\r\n this.values,\r\n this.structure)\r\n }\r\n\r\n protected stringAtPosition (position: number): string {\r\n if (position < 0 || position >= this.values.length) {\r\n throw new Error(`illegal position ${position}`)\r\n }\r\n return this.values[position]\r\n }\r\n\r\n protected toTyped (field: SimpleFieldDefinition): any {\r\n const position: number = this.getPosition(field.tag)\r\n if (position >= 0) {\r\n const s: string = this.values[position]\r\n switch (field.tagType) {\r\n case TagType.String : {\r\n return this.stringAtPosition(position)\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n return parseInt(s, 10)\r\n }\r\n\r\n case TagType.Float: {\r\n return parseFloat(s)\r\n }\r\n\r\n case TagType.Boolean: {\r\n return s && s.length > 0 && AsciiChars.firstChar(s) === AsciiChars.Y\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n // 20150417-01:00:08.201\r\n return FixmlView.getTimestamp(s, true)\r\n }\r\n // 01:00:08.201\r\n case TagType.UtcTimeOnly: {\r\n return FixmlView.getTimeOnly(s, true)\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n return FixmlView.getDateOnly(s, true)\r\n }\r\n\r\n case TagType.LocalDate: {\r\n return FixmlView.getDateOnly(s, true)\r\n }\r\n\r\n case TagType.RawData: {\r\n return Buffer.alloc(s.length, s, 'utf8')\r\n }\r\n\r\n default: {\r\n return this.stringAtPosition(position)\r\n }\r\n }\r\n }\r\n return this.stringAtPosition(position)\r\n }\r\n\r\n public toMsgStoreRecord (): IFixMsgStoreRecord {\r\n return null\r\n }\r\n}\r\n"]}
@@ -6,5 +6,7 @@ export declare abstract class MsgEncoder extends events.EventEmitter {
6
6
  readonly definitions: FixDefinitions;
7
7
  protected constructor(definitions: FixDefinitions);
8
8
  encode(o: ILooseObject, name: string): void;
9
+ abstract reset(): void;
10
+ abstract trim(): Buffer;
9
11
  abstract encodeSet(o: ILooseObject, set: ContainedFieldSet): void;
10
12
  }