jspurefix 3.5.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/appveyor.yml +1 -1
  2. package/dist/buffer/ascii/ascii-encoder.d.ts +2 -2
  3. package/dist/buffer/ascii/ascii-encoder.js +1 -1
  4. package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
  5. package/dist/buffer/ascii/ascii-parser-state.d.ts +3 -2
  6. package/dist/buffer/ascii/ascii-parser-state.js +1 -2
  7. package/dist/buffer/ascii/ascii-parser-state.js.map +1 -1
  8. package/dist/buffer/ascii/ascii-parser.d.ts +1 -1
  9. package/dist/buffer/ascii/ascii-parser.js +5 -4
  10. package/dist/buffer/ascii/ascii-parser.js.map +1 -1
  11. package/dist/buffer/ascii/ascii-segment-parser.js.map +1 -1
  12. package/dist/buffer/ascii/ascii-view.d.ts +4 -3
  13. package/dist/buffer/ascii/ascii-view.js +8 -5
  14. package/dist/buffer/ascii/ascii-view.js.map +1 -1
  15. package/dist/buffer/encode-proxy.js +1 -1
  16. package/dist/buffer/encode-proxy.js.map +1 -1
  17. package/dist/buffer/fixml/fixml-encoder.d.ts +2 -2
  18. package/dist/buffer/fixml/fixml-encoder.js +1 -1
  19. package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
  20. package/dist/buffer/fixml/fixml-parser.js +2 -2
  21. package/dist/buffer/fixml/fixml-parser.js.map +1 -1
  22. package/dist/buffer/fixml/fixml-view.d.ts +3 -2
  23. package/dist/buffer/fixml/fixml-view.js +5 -4
  24. package/dist/buffer/fixml/fixml-view.js.map +1 -1
  25. package/dist/buffer/msg-encoder.d.ts +2 -2
  26. package/dist/buffer/msg-encoder.js.map +1 -1
  27. package/dist/buffer/msg-view.d.ts +8 -6
  28. package/dist/buffer/msg-view.js +10 -8
  29. package/dist/buffer/msg-view.js.map +1 -1
  30. package/dist/buffer/segment/segment-description.d.ts +3 -3
  31. package/dist/buffer/segment/segment-description.js.map +1 -1
  32. package/dist/buffer/tag/tags.d.ts +2 -5
  33. package/dist/buffer/tag/tags.js +4 -5
  34. package/dist/buffer/tag/tags.js.map +1 -1
  35. package/dist/collections/collection.d.ts +0 -1
  36. package/dist/collections/collection.js.map +1 -1
  37. package/dist/collections/index.d.ts +0 -1
  38. package/dist/collections/index.js +0 -17
  39. package/dist/collections/index.js.map +1 -1
  40. package/dist/config/js-fix-config.d.ts +2 -1
  41. package/dist/config/js-fix-config.js +3 -3
  42. package/dist/config/js-fix-config.js.map +1 -1
  43. package/dist/dictionary/compiler/compiler-type.d.ts +3 -3
  44. package/dist/dictionary/compiler/compiler-type.js.map +1 -1
  45. package/dist/dictionary/compiler/enum-compiler.js +2 -2
  46. package/dist/dictionary/compiler/enum-compiler.js.map +1 -1
  47. package/dist/dictionary/compiler/msg-compiler.d.ts +1 -2
  48. package/dist/dictionary/compiler/msg-compiler.js +6 -7
  49. package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
  50. package/dist/dictionary/contained/contained-component-field.d.ts +1 -1
  51. package/dist/dictionary/contained/contained-component-field.js.map +1 -1
  52. package/dist/dictionary/contained/contained-field-set.d.ts +9 -20
  53. package/dist/dictionary/contained/contained-field-set.js +16 -149
  54. package/dist/dictionary/contained/contained-field-set.js.map +1 -1
  55. package/dist/dictionary/contained/contained-group-field.d.ts +1 -1
  56. package/dist/dictionary/contained/contained-group-field.js.map +1 -1
  57. package/dist/dictionary/contained/contained-set-builder.d.ts +15 -0
  58. package/dist/dictionary/contained/contained-set-builder.js +142 -0
  59. package/dist/dictionary/contained/contained-set-builder.js.map +1 -0
  60. package/dist/dictionary/contained/contained-set.d.ts +32 -0
  61. package/dist/{types/FIX.5.0SP2/quickfix/xm_lnon_fix.js → dictionary/contained/contained-set.js} +1 -1
  62. package/dist/dictionary/contained/contained-set.js.map +1 -0
  63. package/dist/dictionary/contained/contained-simple-field.d.ts +1 -1
  64. package/dist/dictionary/contained/contained-simple-field.js.map +1 -1
  65. package/dist/dictionary/contained/index.d.ts +4 -1
  66. package/dist/dictionary/contained/index.js +4 -1
  67. package/dist/dictionary/contained/index.js.map +1 -1
  68. package/dist/dictionary/definition/category-simple-set.d.ts +1 -2
  69. package/dist/dictionary/definition/category-simple-set.js +1 -2
  70. package/dist/dictionary/definition/category-simple-set.js.map +1 -1
  71. package/dist/dictionary/definition/component-field-definition.d.ts +1 -1
  72. package/dist/dictionary/definition/component-field-definition.js +2 -2
  73. package/dist/dictionary/definition/component-field-definition.js.map +1 -1
  74. package/dist/dictionary/definition/fix-definitions.d.ts +8 -9
  75. package/dist/dictionary/definition/fix-definitions.js +22 -20
  76. package/dist/dictionary/definition/fix-definitions.js.map +1 -1
  77. package/dist/dictionary/definition/group-field-definition.d.ts +1 -1
  78. package/dist/dictionary/definition/group-field-definition.js +2 -2
  79. package/dist/dictionary/definition/group-field-definition.js.map +1 -1
  80. package/dist/dictionary/definition/message-definition.d.ts +1 -1
  81. package/dist/dictionary/definition/message-definition.js +2 -2
  82. package/dist/dictionary/definition/message-definition.js.map +1 -1
  83. package/dist/dictionary/definition/simple-field-definition.d.ts +2 -3
  84. package/dist/dictionary/definition/simple-field-definition.js +6 -7
  85. package/dist/dictionary/definition/simple-field-definition.js.map +1 -1
  86. package/dist/dictionary/parser/fix-repository/repository.js +20 -20
  87. package/dist/dictionary/parser/fix-repository/repository.js.map +1 -1
  88. package/dist/dictionary/parser/fixml/components-parser.js +18 -16
  89. package/dist/dictionary/parser/fixml/components-parser.js.map +1 -1
  90. package/dist/dictionary/parser/fixml/fields-parser.js +2 -3
  91. package/dist/dictionary/parser/fixml/fields-parser.js.map +1 -1
  92. package/dist/dictionary/parser/fixml/include-graph.js +8 -9
  93. package/dist/dictionary/parser/fixml/include-graph.js.map +1 -1
  94. package/dist/dictionary/parser/quickfix/field-definition-parser.js.map +1 -1
  95. package/dist/dictionary/parser/quickfix/message-parser.js +2 -1
  96. package/dist/dictionary/parser/quickfix/message-parser.js.map +1 -1
  97. package/dist/dictionary/parser/quickfix/node-parser.js +3 -2
  98. package/dist/dictionary/parser/quickfix/node-parser.js.map +1 -1
  99. package/dist/dictionary/parser/quickfix/parse-context.d.ts +3 -3
  100. package/dist/dictionary/parser/quickfix/parse-context.js.map +1 -1
  101. package/dist/dictionary/parser/quickfix/parse-progress.d.ts +1 -2
  102. package/dist/dictionary/parser/quickfix/parse-progress.js +2 -3
  103. package/dist/dictionary/parser/quickfix/parse-progress.js.map +1 -1
  104. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-builder.js +4 -5
  105. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-builder.js.map +1 -1
  106. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +6 -6
  107. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
  108. package/dist/dictionary/parser/quickfix/quick-fix-xml-formatter.d.ts +1 -1
  109. package/dist/dictionary/parser/quickfix/quick-fix-xml-formatter.js.map +1 -1
  110. package/dist/dictionary/set-reduce.d.ts +2 -2
  111. package/dist/dictionary/set-reduce.js.map +1 -1
  112. package/dist/index.d.ts +0 -1
  113. package/dist/index.js +0 -1
  114. package/dist/index.js.map +1 -1
  115. package/dist/jsfix-cmd.js +4 -5
  116. package/dist/jsfix-cmd.js.map +1 -1
  117. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +7 -8
  118. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
  119. package/dist/sample/tcp/trade-capture/trade-capture-client.js +3 -4
  120. package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
  121. package/dist/sample/tcp/trade-capture/trade-capture-server.js.map +1 -1
  122. package/dist/store/fix-msg-memory-store.js +3 -4
  123. package/dist/store/fix-msg-memory-store.js.map +1 -1
  124. package/dist/store/fix-msg-store-record.js.map +1 -1
  125. package/dist/test/ascii/ascii-encoder.test.js.map +1 -1
  126. package/dist/test/ascii/fix-log-replay.test.js.map +1 -1
  127. package/dist/test/ascii/fix-repo-dict.test.js.map +1 -1
  128. package/dist/test/ascii/qf-50sp0-dict.test.js +7 -7
  129. package/dist/test/ascii/qf-50sp0-dict.test.js.map +1 -1
  130. package/dist/test/ascii/qf-50sp2-dict.test.js +5 -2
  131. package/dist/test/ascii/qf-50sp2-dict.test.js.map +1 -1
  132. package/dist/test/env/encoder-test.d.ts +3 -3
  133. package/dist/test/env/encoder-test.js.map +1 -1
  134. package/dist/test/env/set-constraint-helper.d.ts +4 -4
  135. package/dist/test/env/set-constraint-helper.js.map +1 -1
  136. package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
  137. package/dist/transport/ascii/ascii-session.js +1 -1
  138. package/dist/transport/ascii/ascii-session.js.map +1 -1
  139. package/dist/transport/fixml/fixml-session.js.map +1 -1
  140. package/dist/transport/http/http-acceptor.js +3 -4
  141. package/dist/transport/http/http-acceptor.js.map +1 -1
  142. package/dist/transport/http/http-json-sample-adapter.js +3 -4
  143. package/dist/transport/http/http-json-sample-adapter.js.map +1 -1
  144. package/dist/transport/session/dynamic-session-manager.d.ts +8 -0
  145. package/dist/transport/session/dynamic-session-manager.js +15 -0
  146. package/dist/transport/session/dynamic-session-manager.js.map +1 -0
  147. package/dist/transport/session/session-description.d.ts +9 -7
  148. package/dist/transport/session/session-description.js.map +1 -1
  149. package/dist/util/json-helper.d.ts +2 -2
  150. package/dist/util/json-helper.js.map +1 -1
  151. package/dist/util/message-generator.js +1 -1
  152. package/dist/util/message-generator.js.map +1 -1
  153. package/package.json +16 -16
  154. package/src/buffer/ascii/ascii-encoder.ts +7 -7
  155. package/src/buffer/ascii/ascii-parser-state.ts +4 -4
  156. package/src/buffer/ascii/ascii-parser.ts +6 -5
  157. package/src/buffer/ascii/ascii-segment-parser.ts +2 -2
  158. package/src/buffer/ascii/ascii-view.ts +9 -7
  159. package/src/buffer/encode-proxy.ts +9 -9
  160. package/src/buffer/fixml/fixml-encoder.ts +14 -10
  161. package/src/buffer/fixml/fixml-parser.ts +5 -5
  162. package/src/buffer/fixml/fixml-view.ts +5 -5
  163. package/src/buffer/msg-encoder.ts +3 -3
  164. package/src/buffer/msg-view.ts +18 -18
  165. package/src/buffer/segment/segment-description.ts +2 -2
  166. package/src/buffer/tag/tags.ts +4 -6
  167. package/src/collections/collection.ts +0 -1
  168. package/src/collections/index.ts +1 -1
  169. package/src/config/js-fix-config.ts +3 -2
  170. package/src/dictionary/compiler/compiler-type.ts +8 -2
  171. package/src/dictionary/compiler/enum-compiler.ts +2 -2
  172. package/src/dictionary/compiler/msg-compiler.ts +11 -12
  173. package/src/dictionary/contained/contained-component-field.ts +1 -1
  174. package/src/dictionary/contained/contained-field-set.ts +21 -176
  175. package/src/dictionary/contained/contained-group-field.ts +1 -1
  176. package/src/dictionary/contained/contained-set-builder.ts +164 -0
  177. package/src/dictionary/contained/contained-set.ts +83 -0
  178. package/src/dictionary/contained/contained-simple-field.ts +1 -1
  179. package/src/dictionary/contained/index.ts +4 -1
  180. package/src/dictionary/definition/category-simple-set.ts +1 -2
  181. package/src/dictionary/definition/component-field-definition.ts +1 -1
  182. package/src/dictionary/definition/fix-definitions.ts +28 -26
  183. package/src/dictionary/definition/group-field-definition.ts +1 -1
  184. package/src/dictionary/definition/message-definition.ts +6 -6
  185. package/src/dictionary/definition/simple-field-definition.ts +9 -10
  186. package/src/dictionary/parser/fix-repository/repository.ts +47 -40
  187. package/src/dictionary/parser/fixml/components-parser.ts +41 -38
  188. package/src/dictionary/parser/fixml/fields-parser.ts +3 -4
  189. package/src/dictionary/parser/fixml/include-graph.ts +13 -14
  190. package/src/dictionary/parser/quickfix/field-definition-parser.ts +5 -5
  191. package/src/dictionary/parser/quickfix/message-parser.ts +7 -5
  192. package/src/dictionary/parser/quickfix/node-parser.ts +13 -6
  193. package/src/dictionary/parser/quickfix/parse-context.ts +2 -2
  194. package/src/dictionary/parser/quickfix/parse-progress.ts +2 -3
  195. package/src/dictionary/parser/quickfix/quick-fix-xml-file-builder.ts +4 -5
  196. package/src/dictionary/parser/quickfix/quick-fix-xml-file-parser.ts +10 -12
  197. package/src/dictionary/parser/quickfix/quick-fix-xml-formatter.ts +1 -1
  198. package/src/dictionary/set-reduce.ts +3 -3
  199. package/src/index.ts +0 -1
  200. package/src/jsfix-cmd.ts +5 -6
  201. package/src/sample/tcp/recovering-skeleton/respawn-acceptor.ts +7 -8
  202. package/src/sample/tcp/trade-capture/trade-capture-client.ts +4 -5
  203. package/src/sample/tcp/trade-capture/trade-capture-server.ts +1 -1
  204. package/src/store/fix-msg-memory-store.ts +3 -4
  205. package/src/store/fix-msg-store-record.ts +1 -1
  206. package/src/transport/ascii/ascii-msg-transmitter.ts +6 -6
  207. package/src/transport/ascii/ascii-session.ts +6 -6
  208. package/src/transport/fixml/fixml-session.ts +3 -3
  209. package/src/transport/http/http-acceptor.ts +4 -5
  210. package/src/transport/http/http-json-sample-adapter.ts +3 -4
  211. package/src/transport/session/dynamic-session-manager.ts +16 -0
  212. package/src/transport/session/session-description.ts +10 -7
  213. package/src/util/json-helper.ts +3 -3
  214. package/src/util/message-generator.ts +4 -4
  215. package/dist/collections/dictionary.d.ts +0 -15
  216. package/dist/collections/dictionary.js +0 -57
  217. package/dist/collections/dictionary.js.map +0 -1
  218. package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.d.ts +0 -31
  219. package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.js +0 -3
  220. package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.js.map +0 -1
  221. package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.d.ts +0 -26
  222. package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.js +0 -3
  223. package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.js.map +0 -1
  224. package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.d.ts +0 -5
  225. package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.js +0 -3
  226. package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.js.map +0 -1
  227. package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.d.ts +0 -8
  228. package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.js +0 -3
  229. package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.js.map +0 -1
  230. package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.d.ts +0 -4
  231. package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.js +0 -3
  232. package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.js.map +0 -1
  233. package/dist/types/FIX.5.0SP2/quickfix/xm_lnon_fix.d.ts +0 -6
  234. package/dist/types/FIX.5.0SP2/quickfix/xm_lnon_fix.js.map +0 -1
  235. package/src/collections/dictionary.ts +0 -62
@@ -1 +1 @@
1
- {"version":3,"file":"http-acceptor.js","sourceRoot":"","sources":["../../../src/transport/http/http-acceptor.ts"],"names":[],"mappings":"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","sourcesContent":["import { MsgTransport } from '../factory'\r\nimport { FixAcceptor } from '../fix-acceptor'\r\nimport { IJsFixConfig, IJsFixLogger } from '../../config'\r\nimport { IFixmlRequest } from '../fixml'\r\nimport { FixDuplex, StringDuplex, StringDuplexTraits } from '../duplex'\r\nimport { Dictionary } from '../../collections'\r\n\r\nimport * as express from 'express'\r\nimport * as bodyParser from 'body-parser'\r\nimport * as http from 'http'\r\nimport { v4 as uuidv4 } from 'uuid'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\n\r\n@injectable()\r\nexport class HttpAcceptor extends FixAcceptor {\r\n private readonly app: express.Express = express()\r\n private server: http.Server\r\n private readonly logger: IJsFixLogger\r\n private readonly router: express.Router\r\n private nextId: number = 0\r\n private readonly keys: Dictionary<MsgTransport> = new Dictionary<MsgTransport>()\r\n\r\n constructor (@inject(DITokens.IJsFixConfig) public readonly config: IJsFixConfig) {\r\n super(config?.description?.application ?? null)\r\n this.logger = config.logFactory.logger(`${config?.description?.application?.name}:HttpAcceptor`)\r\n this.logger.info('creating http server')\r\n this.router = express.Router()\r\n this.router.use(bodyParser.json())\r\n this.subscribe()\r\n this.app.use('/', this.router)\r\n }\r\n\r\n public listen (): void {\r\n const app = this.config.description.application\r\n const port = app?.http?.port ?? 0\r\n const logger = this.logger\r\n logger.info(`start to listen ${port}`)\r\n this.server = this.app.listen(port, () => {\r\n logger.info(`app listening at http://localhost:${port}${app?.http?.uri}`)\r\n })\r\n this.server.on('error', (err: Error) => {\r\n logger.error(err)\r\n this.emit('error', err)\r\n })\r\n }\r\n\r\n public close (callback?: (err?: Error) => void): void {\r\n const app = this.config.description.application\r\n const port = app?.http?.port\r\n this.logger.info(`close listener on port ${port}`)\r\n this.server.close(callback)\r\n }\r\n\r\n private saveTransport (tid: number, transport: MsgTransport): string {\r\n this.transports[tid] = transport\r\n const keys: string[] = Object.keys(this.transports)\r\n const a = uuidv4()\r\n this.keys.addUpdate(a, transport)\r\n this.logger.info(`new transport id = ${tid} token = ${a} created total transports = ${keys.length}`)\r\n this.emit('transport', transport)\r\n return a\r\n }\r\n\r\n private harvestTransport (token: string, tid: number): void {\r\n delete this.transports[tid]\r\n this.keys.remove(token)\r\n const keys: string[] = Object.keys(this.transports)\r\n this.logger.info(`transport ${tid} ends total transports = ${keys.length}`)\r\n }\r\n\r\n private async respond (duplex: FixDuplex, response: express.Response, token: string | null = null): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n response.setHeader('Content-Type', 'application/json')\r\n const timer = setTimeout(() => {\r\n const businessReject = '<FIXML><BizMsgRej BizRejRsn=\"4\" Txt=\"no response from application\"/></FIXML>'\r\n const b = Buffer.from(businessReject, 'utf-8')\r\n duplex.writable.removeListener('data', transmit)\r\n response.send(b)\r\n reject(new Error('no response'))\r\n }, 5000)\r\n\r\n const transmit = (d: Buffer): void => {\r\n this.logger.info('responding to request')\r\n clearTimeout(timer)\r\n if (token) {\r\n response.setHeader('authorization', token)\r\n }\r\n duplex.writable.removeListener('data', transmit)\r\n response.send(d)\r\n resolve(true)\r\n }\r\n\r\n duplex.writable.on('data', transmit)\r\n })\r\n }\r\n\r\n private async logon (req: express.Request, res: express.Response): Promise<void> {\r\n const body: IFixmlRequest = req.body\r\n const id = this.nextId++\r\n this.logger.info(JSON.stringify(body, null, 4))\r\n // check hand back session key\r\n const d = new StringDuplex('', StringDuplexTraits.None)\r\n const transport = new MsgTransport(id, this.config, d)\r\n const token = this.saveTransport(id, transport)\r\n this.respond(d, res, token).then(() => {\r\n this.logger.info('responded to logon')\r\n }).catch((e: Error) => {\r\n this.logger.error(e)\r\n })\r\n d.readable.push(body.fixml)\r\n }\r\n\r\n private async logout (req: express.Request, res: express.Response): Promise<void> {\r\n const headers = req.headers\r\n const body: IFixmlRequest = req.body\r\n const t: MsgTransport | null = this.keys.get(headers?.authorization ?? '')\r\n if (t) {\r\n const token = req.headers.authorization\r\n if (token) {\r\n this.harvestTransport(token, t.id)\r\n const d = t.duplex\r\n this.respond(d, res, token).then(() => {\r\n this.logger.info('responded to logout')\r\n t.end()\r\n }).catch((e: Error) => {\r\n this.logger.error(e)\r\n })\r\n d.readable.push(body.fixml)\r\n }\r\n }\r\n }\r\n\r\n private subscribe (): void {\r\n const router = this.router\r\n const app = this.config.description.application\r\n const root = app?.http?.uri\r\n const authorise = `${root}authorise`\r\n const query = `${root}query`\r\n this.logger.info(`uri: authorise ${authorise}, query ${query}`)\r\n router.post(authorise, async (req: express.Request, res: express.Response) => {\r\n if (!req.headers.authorization) {\r\n this.logger.info('logon')\r\n await this.logon(req, res)\r\n } else {\r\n this.logger.info('logout')\r\n await this.logout(req, res)\r\n }\r\n })\r\n\r\n router.get(query, async (req: express.Request, res: express.Response) => {\r\n const headers = req.headers\r\n const body: IFixmlRequest = req.body\r\n const t: MsgTransport | null = this.keys.get(headers.authorization ?? '') ?? null\r\n if (!t) {\r\n this.logger.info('received request with no token')\r\n res.send({\r\n error: 'no key with query'\r\n })\r\n } else {\r\n const d = t.duplex\r\n this.respond(d, res).then(() => {\r\n this.logger.info(`responded to ${req.url}`)\r\n }).catch(e => {\r\n res.send(e)\r\n })\r\n d.readable.push(body.fixml)\r\n }\r\n })\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"http-acceptor.js","sourceRoot":"","sources":["../../../src/transport/http/http-acceptor.ts"],"names":[],"mappings":"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","sourcesContent":["import { MsgTransport } from '../factory'\r\nimport { FixAcceptor } from '../fix-acceptor'\r\nimport { IJsFixConfig, IJsFixLogger } from '../../config'\r\nimport { IFixmlRequest } from '../fixml'\r\nimport { FixDuplex, StringDuplex, StringDuplexTraits } from '../duplex'\r\n\r\nimport * as express from 'express'\r\nimport * as bodyParser from 'body-parser'\r\nimport * as http from 'http'\r\nimport { v4 as uuidv4 } from 'uuid'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\n\r\n@injectable()\r\nexport class HttpAcceptor extends FixAcceptor {\r\n private readonly app: express.Express = express()\r\n private server: http.Server\r\n private readonly logger: IJsFixLogger\r\n private readonly router: express.Router\r\n private nextId: number = 0\r\n private readonly keys: Map<string, MsgTransport> = new Map<string, MsgTransport>()\r\n\r\n constructor (@inject(DITokens.IJsFixConfig) public readonly config: IJsFixConfig) {\r\n super(config?.description?.application ?? null)\r\n this.logger = config.logFactory.logger(`${config?.description?.application?.name}:HttpAcceptor`)\r\n this.logger.info('creating http server')\r\n this.router = express.Router()\r\n this.router.use(bodyParser.json())\r\n this.subscribe()\r\n this.app.use('/', this.router)\r\n }\r\n\r\n public listen (): void {\r\n const app = this.config.description.application\r\n const port = app?.http?.port ?? 0\r\n const logger = this.logger\r\n logger.info(`start to listen ${port}`)\r\n this.server = this.app.listen(port, () => {\r\n logger.info(`app listening at http://localhost:${port}${app?.http?.uri}`)\r\n })\r\n this.server.on('error', (err: Error) => {\r\n logger.error(err)\r\n this.emit('error', err)\r\n })\r\n }\r\n\r\n public close (callback?: (err?: Error) => void): void {\r\n const app = this.config.description.application\r\n const port = app?.http?.port\r\n this.logger.info(`close listener on port ${port}`)\r\n this.server.close(callback)\r\n }\r\n\r\n private saveTransport (tid: number, transport: MsgTransport): string {\r\n this.transports[tid] = transport\r\n const keys: string[] = Object.keys(this.transports)\r\n const a = uuidv4()\r\n this.keys.set(a, transport)\r\n this.logger.info(`new transport id = ${tid} token = ${a} created total transports = ${keys.length}`)\r\n this.emit('transport', transport)\r\n return a\r\n }\r\n\r\n private harvestTransport (token: string, tid: number): void {\r\n delete this.transports[tid]\r\n this.keys.delete(token)\r\n const keys: string[] = Object.keys(this.transports)\r\n this.logger.info(`transport ${tid} ends total transports = ${keys.length}`)\r\n }\r\n\r\n private async respond (duplex: FixDuplex, response: express.Response, token: string | null = null): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n response.setHeader('Content-Type', 'application/json')\r\n const timer = setTimeout(() => {\r\n const businessReject = '<FIXML><BizMsgRej BizRejRsn=\"4\" Txt=\"no response from application\"/></FIXML>'\r\n const b = Buffer.from(businessReject, 'utf-8')\r\n duplex.writable.removeListener('data', transmit)\r\n response.send(b)\r\n reject(new Error('no response'))\r\n }, 5000)\r\n\r\n const transmit = (d: Buffer): void => {\r\n this.logger.info('responding to request')\r\n clearTimeout(timer)\r\n if (token) {\r\n response.setHeader('authorization', token)\r\n }\r\n duplex.writable.removeListener('data', transmit)\r\n response.send(d)\r\n resolve(true)\r\n }\r\n\r\n duplex.writable.on('data', transmit)\r\n })\r\n }\r\n\r\n private async logon (req: express.Request, res: express.Response): Promise<void> {\r\n const body: IFixmlRequest = req.body\r\n const id = this.nextId++\r\n this.logger.info(JSON.stringify(body, null, 4))\r\n // check hand back session key\r\n const d = new StringDuplex('', StringDuplexTraits.None)\r\n const transport = new MsgTransport(id, this.config, d)\r\n const token = this.saveTransport(id, transport)\r\n this.respond(d, res, token).then(() => {\r\n this.logger.info('responded to logon')\r\n }).catch((e: Error) => {\r\n this.logger.error(e)\r\n })\r\n d.readable.push(body.fixml)\r\n }\r\n\r\n private async logout (req: express.Request, res: express.Response): Promise<void> {\r\n const headers = req.headers\r\n const body: IFixmlRequest = req.body\r\n const t: MsgTransport | undefined = this.keys.get(headers?.authorization ?? '')\r\n if (t) {\r\n const token = req.headers.authorization\r\n if (token) {\r\n this.harvestTransport(token, t.id)\r\n const d = t.duplex\r\n this.respond(d, res, token).then(() => {\r\n this.logger.info('responded to logout')\r\n t.end()\r\n }).catch((e: Error) => {\r\n this.logger.error(e)\r\n })\r\n d.readable.push(body.fixml)\r\n }\r\n }\r\n }\r\n\r\n private subscribe (): void {\r\n const router = this.router\r\n const app = this.config.description.application\r\n const root = app?.http?.uri\r\n const authorise = `${root}authorise`\r\n const query = `${root}query`\r\n this.logger.info(`uri: authorise ${authorise}, query ${query}`)\r\n router.post(authorise, async (req: express.Request, res: express.Response) => {\r\n if (!req.headers.authorization) {\r\n this.logger.info('logon')\r\n await this.logon(req, res)\r\n } else {\r\n this.logger.info('logout')\r\n await this.logout(req, res)\r\n }\r\n })\r\n\r\n router.get(query, async (req: express.Request, res: express.Response) => {\r\n const headers = req.headers\r\n const body: IFixmlRequest = req.body\r\n const t: MsgTransport | null = this.keys.get(headers.authorization ?? '') ?? null\r\n if (!t) {\r\n this.logger.info('received request with no token')\r\n res.send({\r\n error: 'no key with query'\r\n })\r\n } else {\r\n const d = t.duplex\r\n this.respond(d, res).then(() => {\r\n this.logger.info(`responded to ${req.url}`)\r\n }).catch(e => {\r\n res.send(e)\r\n })\r\n d.readable.push(body.fixml)\r\n }\r\n })\r\n }\r\n}\r\n"]}
@@ -14,7 +14,6 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.HttpJsonSampleAdapter = void 0;
16
16
  const http_transaction_1 = require("./http-transaction");
17
- const collections_1 = require("../../collections");
18
17
  const tsyringe_1 = require("tsyringe");
19
18
  const di_tokens_1 = require("../../runtime/di-tokens");
20
19
  let HttpJsonSampleAdapter = class HttpJsonSampleAdapter {
@@ -23,7 +22,7 @@ let HttpJsonSampleAdapter = class HttpJsonSampleAdapter {
23
22
  this.config = config;
24
23
  this.queue = [];
25
24
  this.token = null;
26
- this.routes = new collections_1.Dictionary();
25
+ this.routes = new Map();
27
26
  this.logger = config.logFactory.logger('http.adapter');
28
27
  const routes = this.routes;
29
28
  const options = (_c = (_b = (_a = config === null || config === void 0 ? void 0 : config.description) === null || _a === void 0 ? void 0 : _a.application) === null || _b === void 0 ? void 0 : _b.http) === null || _c === void 0 ? void 0 : _c.options;
@@ -31,9 +30,9 @@ let HttpJsonSampleAdapter = class HttpJsonSampleAdapter {
31
30
  return;
32
31
  }
33
32
  options.forEach((o) => {
34
- routes.addUpdate(o.name, o);
33
+ routes.set(o.name, o);
35
34
  });
36
- this.logger.info(`instance created routes ${routes.count()}`);
35
+ this.logger.info(`instance created routes ${routes.size}`);
37
36
  }
38
37
  getOptions(data) {
39
38
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"http-json-sample-adapter.js","sourceRoot":"","sources":["../../../src/transport/http/http-json-sample-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { IJsFixConfig, IJsFixLogger } from '../../config'\r\nimport { HttpTransaction } from './http-transaction'\r\nimport { Dictionary } from '../../collections'\r\nimport { IHttpAdapter } from './http-adapter'\r\nimport { IHtmlRoute } from './html-route'\r\nimport { IHtmlOptions } from './html-options'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\n\r\n@injectable()\r\nexport class HttpJsonSampleAdapter implements IHttpAdapter {\r\n private readonly logger: IJsFixLogger\r\n private readonly queue: HttpTransaction[] = []\r\n private token: string | null = null\r\n private readonly routes: Dictionary<IHtmlRoute> = new Dictionary<IHtmlRoute>()\r\n constructor (@inject(DITokens.IJsFixConfig) public readonly config: IJsFixConfig) {\r\n this.logger = config.logFactory.logger('http.adapter')\r\n const routes = this.routes\r\n const options = config?.description?.application?.http?.options\r\n if (!options) {\r\n return\r\n }\r\n options.forEach((o: IHtmlRoute) => {\r\n routes.addUpdate(o.name, o)\r\n })\r\n this.logger.info(`instance created routes ${routes.count()}`)\r\n }\r\n\r\n public getOptions (data: Buffer): IHtmlOptions | null {\r\n const q = this.queue\r\n if (q.length === 0) {\r\n return null\r\n }\r\n const next: HttpTransaction | null = q.shift() ?? null\r\n if (next == null) return null\r\n const options = next.options\r\n options.data = {\r\n fixml: data.toString()\r\n }\r\n this.logger.info(`${next.msgType}: ${next.options.method} ${next.options.url} ${data.length}`)\r\n return options\r\n }\r\n\r\n endMessage (m: any): Buffer {\r\n // grab token if not yet received\r\n if (!this.token) {\r\n const headers = m.headers\r\n this.token = headers.authorization\r\n this.logger.info(`receive token ${this.token}`)\r\n }\r\n return m.data\r\n }\r\n\r\n beginMessage (msgType: string): void {\r\n // build options based on type\r\n const routes = this.routes\r\n const route = routes.get(msgType) ?? routes.get('default')\r\n const options = {\r\n method: route?.value.method,\r\n url: route?.value.url,\r\n json: route?.value.json,\r\n resolveWithFullResponse: route?.value.resolveWithFullResponse,\r\n headers: route?.value.headers\r\n } as IHtmlOptions\r\n const headers = options.headers\r\n if (headers) {\r\n if (this.token) {\r\n headers.authorization = this.token\r\n } else if (msgType === 'UserReq') {\r\n delete headers.authorization\r\n }\r\n }\r\n this.queue.push(new HttpTransaction(msgType, options))\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"http-json-sample-adapter.js","sourceRoot":"","sources":["../../../src/transport/http/http-json-sample-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { IJsFixConfig, IJsFixLogger } from '../../config'\r\nimport { HttpTransaction } from './http-transaction'\r\nimport { IHttpAdapter } from './http-adapter'\r\nimport { IHtmlRoute } from './html-route'\r\nimport { IHtmlOptions } from './html-options'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\n\r\n@injectable()\r\nexport class HttpJsonSampleAdapter implements IHttpAdapter {\r\n private readonly logger: IJsFixLogger\r\n private readonly queue: HttpTransaction[] = []\r\n private token: string | null = null\r\n private readonly routes: Map<string, IHtmlRoute> = new Map<string, IHtmlRoute>()\r\n constructor (@inject(DITokens.IJsFixConfig) public readonly config: IJsFixConfig) {\r\n this.logger = config.logFactory.logger('http.adapter')\r\n const routes = this.routes\r\n const options = config?.description?.application?.http?.options\r\n if (!options) {\r\n return\r\n }\r\n options.forEach((o: IHtmlRoute) => {\r\n routes.set(o.name, o)\r\n })\r\n this.logger.info(`instance created routes ${routes.size}`)\r\n }\r\n\r\n public getOptions (data: Buffer): IHtmlOptions | null {\r\n const q = this.queue\r\n if (q.length === 0) {\r\n return null\r\n }\r\n const next: HttpTransaction | null = q.shift() ?? null\r\n if (next == null) return null\r\n const options = next.options\r\n options.data = {\r\n fixml: data.toString()\r\n }\r\n this.logger.info(`${next.msgType}: ${next.options.method} ${next.options.url} ${data.length}`)\r\n return options\r\n }\r\n\r\n endMessage (m: any): Buffer {\r\n // grab token if not yet received\r\n if (!this.token) {\r\n const headers = m.headers\r\n this.token = headers.authorization\r\n this.logger.info(`receive token ${this.token}`)\r\n }\r\n return m.data\r\n }\r\n\r\n beginMessage (msgType: string): void {\r\n // build options based on type\r\n const routes = this.routes\r\n const route = routes.get(msgType) ?? routes.get('default')\r\n const options = {\r\n method: route?.value.method,\r\n url: route?.value.url,\r\n json: route?.value.json,\r\n resolveWithFullResponse: route?.value.resolveWithFullResponse,\r\n headers: route?.value.headers\r\n } as IHtmlOptions\r\n const headers = options.headers\r\n if (headers) {\r\n if (this.token) {\r\n headers.authorization = this.token\r\n } else if (msgType === 'UserReq') {\r\n delete headers.authorization\r\n }\r\n }\r\n this.queue.push(new HttpTransaction(msgType, options))\r\n }\r\n}\r\n"]}
@@ -0,0 +1,8 @@
1
+ import { IJsFixConfig } from '../../config';
2
+ import { IDynamicSessionParams, ISessionDescription } from './session-description';
3
+ export declare class DynamicSessionManager {
4
+ readonly config: IJsFixConfig;
5
+ constructor(config: IJsFixConfig);
6
+ register(dynamicSession: IDynamicSessionParams): void;
7
+ match(dynamicSession: IDynamicSessionParams): (ISessionDescription | null);
8
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DynamicSessionManager = void 0;
4
+ class DynamicSessionManager {
5
+ constructor(config) {
6
+ this.config = config;
7
+ }
8
+ register(dynamicSession) {
9
+ }
10
+ match(dynamicSession) {
11
+ return null;
12
+ }
13
+ }
14
+ exports.DynamicSessionManager = DynamicSessionManager;
15
+ //# sourceMappingURL=dynamic-session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-session-manager.js","sourceRoot":"","sources":["../../../src/transport/session/dynamic-session-manager.ts"],"names":[],"mappings":";;;AAGA,MAAa,qBAAqB;IAChC,YAA6B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAEjD,CAAC;IAED,QAAQ,CAAE,cAAqC;IAE/C,CAAC;IAED,KAAK,CAAE,cAAqC;QAC1C,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAZD,sDAYC","sourcesContent":["import { IJsFixConfig } from '../../config'\r\nimport { IDynamicSessionParams, ISessionDescription } from './session-description'\r\n\r\nexport class DynamicSessionManager {\r\n constructor (public readonly config: IJsFixConfig) {\r\n\r\n }\r\n\r\n register (dynamicSession: IDynamicSessionParams): void {\r\n\r\n }\r\n\r\n match (dynamicSession: IDynamicSessionParams): (ISessionDescription | null) {\r\n return null\r\n }\r\n}\r\n"]}
@@ -1,17 +1,19 @@
1
1
  import { IMsgApplication } from '../msg-application';
2
- export interface ISessionDescription {
3
- readonly application?: IMsgApplication;
2
+ export interface IDynamicSessionParams {
4
3
  readonly Name: string;
5
- readonly Username: string;
6
- readonly Password: string;
7
- HeartBtInt: number;
8
4
  readonly SenderCompId: string;
9
5
  readonly TargetCompID: string;
10
6
  readonly ResetSeqNumFlag: boolean;
11
- LastSentSeqNum?: number;
12
- readonly LastReceivedSeqNum?: number;
13
7
  readonly SenderSubID: string;
14
8
  readonly TargetSubID: string;
15
9
  readonly BeginString: string;
10
+ readonly Username: string;
11
+ readonly Password: string;
12
+ }
13
+ export interface ISessionDescription extends IDynamicSessionParams {
14
+ readonly application?: IMsgApplication;
15
+ HeartBtInt: number;
16
+ LastSentSeqNum?: number;
17
+ readonly LastReceivedSeqNum?: number;
16
18
  readonly BodyLengthChars?: number;
17
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session-description.js","sourceRoot":"","sources":["../../../src/transport/session/session-description.ts"],"names":[],"mappings":"","sourcesContent":["import { IMsgApplication } from '../msg-application'\r\n\r\nexport interface ISessionDescription {\r\n readonly application?: IMsgApplication\r\n readonly Name: string\r\n readonly Username: string\r\n readonly Password: string\r\n HeartBtInt: number\r\n readonly SenderCompId: string\r\n readonly TargetCompID: string\r\n readonly ResetSeqNumFlag: boolean\r\n LastSentSeqNum?: number\r\n readonly LastReceivedSeqNum?: number\r\n readonly SenderSubID: string\r\n readonly TargetSubID: string\r\n readonly BeginString: string\r\n readonly BodyLengthChars?: number\r\n}\r\n"]}
1
+ {"version":3,"file":"session-description.js","sourceRoot":"","sources":["../../../src/transport/session/session-description.ts"],"names":[],"mappings":"","sourcesContent":["import { IMsgApplication } from '../msg-application'\r\n\r\nexport interface IDynamicSessionParams {\r\n readonly Name: string\r\n readonly SenderCompId: string\r\n readonly TargetCompID: string\r\n readonly ResetSeqNumFlag: boolean\r\n readonly SenderSubID: string\r\n readonly TargetSubID: string\r\n readonly BeginString: string\r\n readonly Username: string\r\n readonly Password: string\r\n}\r\n\r\nexport interface ISessionDescription extends IDynamicSessionParams {\r\n readonly application?: IMsgApplication\r\n HeartBtInt: number\r\n LastSentSeqNum?: number\r\n readonly LastReceivedSeqNum?: number\r\n readonly BodyLengthChars?: number\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { ILooseObject } from '../collections/collection';
2
- import { ContainedFieldSet, FieldsDispatch } from '../dictionary/contained';
2
+ import { IContainedSet, FieldsDispatch } from '../dictionary/contained';
3
3
  import { FixDefinitions } from '../dictionary/definition';
4
4
  export declare class JsonHelper {
5
5
  readonly definitions: FixDefinitions;
@@ -7,7 +7,7 @@ export declare class JsonHelper {
7
7
  constructor(definitions: FixDefinitions);
8
8
  private static patchSimple;
9
9
  fromJson(fileName: string, msgType: string): ILooseObject;
10
- patchJsonFields(set: ContainedFieldSet, object: ILooseObject): void;
10
+ patchJsonFields(set: IContainedSet, object: ILooseObject): void;
11
11
  private patchComponent;
12
12
  private patchGroup;
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"json-helper.js","sourceRoot":"","sources":["../../src/util/json-helper.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../collections/collection'\r\nimport {\r\n ContainedSimpleField,\r\n ContainedFieldSet,\r\n ContainedGroupField,\r\n ContainedComponentField,\r\n FieldsDispatch\r\n} from '../dictionary/contained'\r\nimport { FixDefinitions, MessageDefinition } from '../dictionary/definition'\r\n\r\nimport moment = require('moment')\r\nimport { IFieldDispatcher } from '../dictionary/contained/field-dispatcher'\r\nimport { TagType } from '../buffer/tag/tag-type'\r\n\r\nexport class JsonHelper {\r\n dispatcher: FieldsDispatch = new FieldsDispatch()\r\n constructor (public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n private static patchSimple (object: ILooseObject, field: ContainedSimpleField): void {\r\n let name: string = field.definition.name\r\n let v: any = object[name]\r\n if (v == null) {\r\n v = object[field.name]\r\n if (v !== null) {\r\n name = field.name\r\n }\r\n }\r\n if (v == null) {\r\n return\r\n }\r\n switch (field.definition.tagType) {\r\n case TagType.RawData: {\r\n object[name] = Buffer.from(v, 'utf8')\r\n break\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n const m = moment(v)\r\n const d = m.toDate()\r\n object[name] = d\r\n break\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n const m = moment(v)\r\n object[name] = m.toDate()\r\n break\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n const m = moment(v)\r\n object[name] = m.toDate()\r\n break\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const m = moment(v)\r\n object[name] = m.toDate()\r\n break\r\n }\r\n\r\n case TagType.Float: {\r\n object[name] = parseFloat(v)\r\n break\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n object[name] = parseInt(v, 10)\r\n break\r\n }\r\n }\r\n }\r\n\r\n public fromJson (fileName: string, msgType: string): ILooseObject {\r\n const msg: ILooseObject = require(fileName)\r\n const def: MessageDefinition | null = this.definitions.message.get(msgType)\r\n if (!def) {\r\n return msg\r\n }\r\n if (msg.Batch) {\r\n msg.Batch.forEach((m: ILooseObject) => {\r\n this.patchJsonFields(def, m)\r\n })\r\n } else {\r\n this.patchJsonFields(def, msg)\r\n }\r\n return msg\r\n }\r\n\r\n public patchJsonFields (set: ContainedFieldSet, object: ILooseObject): void {\r\n if (!object) {\r\n return\r\n }\r\n\r\n const dispatcher: IFieldDispatcher = {\r\n simple: (field: ContainedSimpleField) => { JsonHelper.patchSimple(object, field) },\r\n group: (gf: ContainedGroupField) => { this.patchGroup(object, gf) },\r\n component: (cf: ContainedComponentField) => { this.patchComponent(object, cf) }\r\n }\r\n\r\n this.dispatcher.dispatchFields(set.localAttribute, dispatcher)\r\n this.dispatcher.dispatchFields(set.fields, dispatcher)\r\n }\r\n\r\n private patchComponent (object: ILooseObject, cf: ContainedComponentField): void {\r\n const c = object[cf.name] || object[cf.definition.name]\r\n if (c) {\r\n this.patchJsonFields(cf.definition, c)\r\n }\r\n }\r\n\r\n private patchGroup (object: ILooseObject, gf: ContainedGroupField): void {\r\n const arr: ILooseObject[] = object[gf.definition.name] || object[gf.name]\r\n if (arr) {\r\n arr.forEach((o) => {\r\n this.patchJsonFields(gf.definition, o)\r\n })\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"json-helper.js","sourceRoot":"","sources":["../../src/util/json-helper.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../collections/collection'\r\nimport {\r\n ContainedSimpleField,\r\n IContainedSet,\r\n ContainedGroupField,\r\n ContainedComponentField,\r\n FieldsDispatch\r\n} from '../dictionary/contained'\r\nimport { FixDefinitions, MessageDefinition } from '../dictionary/definition'\r\n\r\nimport moment = require('moment')\r\nimport { IFieldDispatcher } from '../dictionary/contained/field-dispatcher'\r\nimport { TagType } from '../buffer/tag/tag-type'\r\n\r\nexport class JsonHelper {\r\n dispatcher: FieldsDispatch = new FieldsDispatch()\r\n constructor (public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n private static patchSimple (object: ILooseObject, field: ContainedSimpleField): void {\r\n let name: string = field.definition.name\r\n let v: any = object[name]\r\n if (v == null) {\r\n v = object[field.name]\r\n if (v !== null) {\r\n name = field.name\r\n }\r\n }\r\n if (v == null) {\r\n return\r\n }\r\n switch (field.definition.tagType) {\r\n case TagType.RawData: {\r\n object[name] = Buffer.from(v, 'utf8')\r\n break\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n const m = moment(v)\r\n const d = m.toDate()\r\n object[name] = d\r\n break\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n const m = moment(v)\r\n object[name] = m.toDate()\r\n break\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n const m = moment(v)\r\n object[name] = m.toDate()\r\n break\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const m = moment(v)\r\n object[name] = m.toDate()\r\n break\r\n }\r\n\r\n case TagType.Float: {\r\n object[name] = parseFloat(v)\r\n break\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n object[name] = parseInt(v, 10)\r\n break\r\n }\r\n }\r\n }\r\n\r\n public fromJson (fileName: string, msgType: string): ILooseObject {\r\n const msg: ILooseObject = require(fileName)\r\n const def: MessageDefinition | undefined = this.definitions.message.get(msgType)\r\n if (!def) {\r\n return msg\r\n }\r\n if (msg.Batch) {\r\n msg.Batch.forEach((m: ILooseObject) => {\r\n this.patchJsonFields(def, m)\r\n })\r\n } else {\r\n this.patchJsonFields(def, msg)\r\n }\r\n return msg\r\n }\r\n\r\n public patchJsonFields (set: IContainedSet, object: ILooseObject): void {\r\n if (!object) {\r\n return\r\n }\r\n\r\n const dispatcher: IFieldDispatcher = {\r\n simple: (field: ContainedSimpleField) => { JsonHelper.patchSimple(object, field) },\r\n group: (gf: ContainedGroupField) => { this.patchGroup(object, gf) },\r\n component: (cf: ContainedComponentField) => { this.patchComponent(object, cf) }\r\n }\r\n\r\n this.dispatcher.dispatchFields(set.localAttribute, dispatcher)\r\n this.dispatcher.dispatchFields(set.fields, dispatcher)\r\n }\r\n\r\n private patchComponent (object: ILooseObject, cf: ContainedComponentField): void {\r\n const c = object[cf.name] || object[cf.definition.name]\r\n if (c) {\r\n this.patchJsonFields(cf.definition, c)\r\n }\r\n }\r\n\r\n private patchGroup (object: ILooseObject, gf: ContainedGroupField): void {\r\n const arr: ILooseObject[] = object[gf.definition.name] || object[gf.name]\r\n if (arr) {\r\n arr.forEach((o) => {\r\n this.patchJsonFields(gf.definition, o)\r\n })\r\n }\r\n }\r\n}\r\n"]}
@@ -12,7 +12,7 @@ class MessageGenerator {
12
12
  }
13
13
  static getRandomEnum(field) {
14
14
  const tagType = field.tagType;
15
- const keys = field.enums.keys();
15
+ const keys = Array.from(field.enums.keys());
16
16
  const choice = keys[Math.floor(Math.random() * keys.length)];
17
17
  switch (tagType) {
18
18
  case tag_type_1.TagType.Int: {
@@ -1 +1 @@
1
- {"version":3,"file":"message-generator.js","sourceRoot":"","sources":["../../src/util/message-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../collections/collection'\r\nimport { ContainedComponentField, ContainedGroupField, ContainedFieldSet, ContainedSimpleField } from '../dictionary/contained'\r\nimport { FixDefinitions, MessageDefinition, SimpleFieldDefinition } from '../dictionary/definition'\r\nimport { SetReduce } from '../dictionary'\r\nimport { TagType } from '../buffer/tag/tag-type'\r\n\r\nexport class MessageGenerator {\r\n private word: number = 0\r\n private length: number = 0\r\n\r\n constructor (public readonly words: string[], public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n public static getRandomEnum (field: SimpleFieldDefinition): any {\r\n const tagType: TagType = field.tagType\r\n const keys: string[] = field.enums.keys()\r\n const choice: string = keys[Math.floor(Math.random() * keys.length)]\r\n switch (tagType) {\r\n case TagType.Int: {\r\n return parseInt(choice, 10)\r\n }\r\n case TagType.Float: {\r\n return parseFloat(choice)\r\n }\r\n case TagType.Boolean: {\r\n return choice === 'Y'\r\n }\r\n default: {\r\n return choice\r\n }\r\n }\r\n }\r\n\r\n private static randomIntFromInterval (min: number, max: number): number {\r\n return Math.floor(Math.random() * (max - min + 1) + min)\r\n }\r\n\r\n private static makeRandomString (len: number): string {\r\n let text: string = ''\r\n const possible: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\r\n\r\n for (let i: number = 0; i < len; i++) {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length))\r\n }\r\n\r\n return text\r\n }\r\n\r\n private static makeBuffer (len: number): Buffer {\r\n return Buffer.from(MessageGenerator.makeRandomString(len))\r\n }\r\n\r\n public generate (msgType: string, density?: number, repeatGroups: boolean = true): ILooseObject {\r\n if (!density) {\r\n density = 1.0\r\n }\r\n density = Math.max(0.2, density)\r\n density = Math.min(1.0, density)\r\n const def: MessageDefinition | null = this.definitions.message.get(msgType)\r\n if (!def) {\r\n throw new Error(`definitions do not contain type ${msgType}`)\r\n }\r\n return this.toObject(def, density, repeatGroups)\r\n }\r\n\r\n private toObject (set: ContainedFieldSet, density: number, repeatGroups: boolean): ILooseObject {\r\n const reducer = new SetReduce<ILooseObject>()\r\n return reducer.reduce(set, {\r\n simple: (a: ILooseObject, sf: ContainedSimpleField) => {\r\n const tag: number = sf.definition.tag\r\n const include = tag === set.firstSimple?.definition.tag || this.length > 0 || Math.random() <= density\r\n if (include) {\r\n const val: any = sf.definition.isEnum() ? MessageGenerator.getRandomEnum(sf.definition) : this.createSimple(sf)\r\n if (val != null) {\r\n a[sf.name] = val\r\n }\r\n }\r\n },\r\n component: (a: ILooseObject, cf: ContainedComponentField) => {\r\n if (cf.name !== 'StandardHeader' && cf.name !== 'StandardTrailer') {\r\n a[cf.name] = this.toObject(cf.definition, density, repeatGroups)\r\n }\r\n },\r\n group: (a: ILooseObject, gf: ContainedGroupField) => {\r\n if (repeatGroups) {\r\n const numberGroups: number = MessageGenerator.randomIntFromInterval(1, 3)\r\n const arr: ILooseObject[] = new Array(numberGroups)\r\n a[gf.name] = arr\r\n for (let j: number = 0; j < numberGroups; ++j) {\r\n arr[j] = this.toObject(gf.definition, density, repeatGroups)\r\n }\r\n }\r\n }\r\n }, {})\r\n }\r\n\r\n private createSimple (field: ContainedSimpleField): any {\r\n const tagType: TagType = field.definition.tagType\r\n switch (tagType) {\r\n case TagType.String: {\r\n return this.nextString()\r\n }\r\n\r\n case TagType.Float: {\r\n this.length = 0\r\n const sign = MessageGenerator.randomIntFromInterval(1, 10) <= 5 ? 1 : -1\r\n const num = sign * MessageGenerator.randomIntFromInterval(1, 100000)\r\n const raised = MessageGenerator.randomIntFromInterval(1, 8)\r\n const r = num * Math.pow(10, -1 * raised)\r\n // console.log(`sign = ${sign} num = ${num} raised = ${raised} r = ${r} ret = ${ret}`)\r\n return Math.round(r * 1e7) / 1e7\r\n }\r\n\r\n case TagType.Int: {\r\n this.length = 0\r\n return MessageGenerator.randomIntFromInterval(1, 100000)\r\n }\r\n\r\n case TagType.Length: {\r\n this.length = MessageGenerator.randomIntFromInterval(5, 20)\r\n return this.length\r\n }\r\n\r\n case TagType.Boolean: {\r\n this.length = 0\r\n return MessageGenerator.randomIntFromInterval(1, 2) === 1\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n this.length = 0\r\n const now: Date = new Date()\r\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()\r\n , 0, 0, 0, 0))\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n this.length = 0\r\n const s: Date = new Date()\r\n return new Date(Date.UTC(0, 0, 0, s.getUTCHours(), s.getUTCMinutes(),\r\n s.getUTCSeconds(), s.getUTCMilliseconds()))\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n this.length = 0\r\n const now: Date = new Date()\r\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\r\n now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()))\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const now = new Date()\r\n return new Date(now.getFullYear(), now.getMonth(), now.getDate()\r\n , 0, 0, 0, 0)\r\n }\r\n\r\n case TagType.RawData: {\r\n const length = this.length\r\n this.length = 0\r\n return length > 0 ? MessageGenerator.makeBuffer(length) : null\r\n }\r\n\r\n default: {\r\n throw new Error(`cannot manage type ${tagType}`)\r\n }\r\n }\r\n }\r\n\r\n private nextString (): string {\r\n const words: string[] = this.words\r\n const w: string = words[this.word++]\r\n if (this.word === words.length) {\r\n this.word = 0\r\n }\r\n return w\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"message-generator.js","sourceRoot":"","sources":["../../src/util/message-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../collections/collection'\r\nimport { ContainedComponentField, ContainedGroupField, IContainedSet, ContainedSimpleField } from '../dictionary/contained'\r\nimport { FixDefinitions, MessageDefinition, SimpleFieldDefinition } from '../dictionary/definition'\r\nimport { SetReduce } from '../dictionary'\r\nimport { TagType } from '../buffer/tag/tag-type'\r\n\r\nexport class MessageGenerator {\r\n private word: number = 0\r\n private length: number = 0\r\n\r\n constructor (public readonly words: string[], public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n public static getRandomEnum (field: SimpleFieldDefinition): any {\r\n const tagType: TagType = field.tagType\r\n const keys: string[] = Array.from(field.enums.keys())\r\n const choice: string = keys[Math.floor(Math.random() * keys.length)]\r\n switch (tagType) {\r\n case TagType.Int: {\r\n return parseInt(choice, 10)\r\n }\r\n case TagType.Float: {\r\n return parseFloat(choice)\r\n }\r\n case TagType.Boolean: {\r\n return choice === 'Y'\r\n }\r\n default: {\r\n return choice\r\n }\r\n }\r\n }\r\n\r\n private static randomIntFromInterval (min: number, max: number): number {\r\n return Math.floor(Math.random() * (max - min + 1) + min)\r\n }\r\n\r\n private static makeRandomString (len: number): string {\r\n let text: string = ''\r\n const possible: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\r\n\r\n for (let i: number = 0; i < len; i++) {\r\n text += possible.charAt(Math.floor(Math.random() * possible.length))\r\n }\r\n\r\n return text\r\n }\r\n\r\n private static makeBuffer (len: number): Buffer {\r\n return Buffer.from(MessageGenerator.makeRandomString(len))\r\n }\r\n\r\n public generate (msgType: string, density?: number, repeatGroups: boolean = true): ILooseObject {\r\n if (!density) {\r\n density = 1.0\r\n }\r\n density = Math.max(0.2, density)\r\n density = Math.min(1.0, density)\r\n const def: MessageDefinition | undefined = this.definitions.message.get(msgType)\r\n if (!def) {\r\n throw new Error(`definitions do not contain type ${msgType}`)\r\n }\r\n return this.toObject(def, density, repeatGroups)\r\n }\r\n\r\n private toObject (set: IContainedSet, density: number, repeatGroups: boolean): ILooseObject {\r\n const reducer = new SetReduce<ILooseObject>()\r\n return reducer.reduce(set, {\r\n simple: (a: ILooseObject, sf: ContainedSimpleField) => {\r\n const tag: number = sf.definition.tag\r\n const include = tag === set.firstSimple?.definition.tag || this.length > 0 || Math.random() <= density\r\n if (include) {\r\n const val: any = sf.definition.isEnum() ? MessageGenerator.getRandomEnum(sf.definition) : this.createSimple(sf)\r\n if (val != null) {\r\n a[sf.name] = val\r\n }\r\n }\r\n },\r\n component: (a: ILooseObject, cf: ContainedComponentField) => {\r\n if (cf.name !== 'StandardHeader' && cf.name !== 'StandardTrailer') {\r\n a[cf.name] = this.toObject(cf.definition, density, repeatGroups)\r\n }\r\n },\r\n group: (a: ILooseObject, gf: ContainedGroupField) => {\r\n if (repeatGroups) {\r\n const numberGroups: number = MessageGenerator.randomIntFromInterval(1, 3)\r\n const arr: ILooseObject[] = new Array(numberGroups)\r\n a[gf.name] = arr\r\n for (let j: number = 0; j < numberGroups; ++j) {\r\n arr[j] = this.toObject(gf.definition, density, repeatGroups)\r\n }\r\n }\r\n }\r\n }, {})\r\n }\r\n\r\n private createSimple (field: ContainedSimpleField): any {\r\n const tagType: TagType = field.definition.tagType\r\n switch (tagType) {\r\n case TagType.String: {\r\n return this.nextString()\r\n }\r\n\r\n case TagType.Float: {\r\n this.length = 0\r\n const sign = MessageGenerator.randomIntFromInterval(1, 10) <= 5 ? 1 : -1\r\n const num = sign * MessageGenerator.randomIntFromInterval(1, 100000)\r\n const raised = MessageGenerator.randomIntFromInterval(1, 8)\r\n const r = num * Math.pow(10, -1 * raised)\r\n // console.log(`sign = ${sign} num = ${num} raised = ${raised} r = ${r} ret = ${ret}`)\r\n return Math.round(r * 1e7) / 1e7\r\n }\r\n\r\n case TagType.Int: {\r\n this.length = 0\r\n return MessageGenerator.randomIntFromInterval(1, 100000)\r\n }\r\n\r\n case TagType.Length: {\r\n this.length = MessageGenerator.randomIntFromInterval(5, 20)\r\n return this.length\r\n }\r\n\r\n case TagType.Boolean: {\r\n this.length = 0\r\n return MessageGenerator.randomIntFromInterval(1, 2) === 1\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n this.length = 0\r\n const now: Date = new Date()\r\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()\r\n , 0, 0, 0, 0))\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n this.length = 0\r\n const s: Date = new Date()\r\n return new Date(Date.UTC(0, 0, 0, s.getUTCHours(), s.getUTCMinutes(),\r\n s.getUTCSeconds(), s.getUTCMilliseconds()))\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n this.length = 0\r\n const now: Date = new Date()\r\n return new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),\r\n now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()))\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const now = new Date()\r\n return new Date(now.getFullYear(), now.getMonth(), now.getDate()\r\n , 0, 0, 0, 0)\r\n }\r\n\r\n case TagType.RawData: {\r\n const length = this.length\r\n this.length = 0\r\n return length > 0 ? MessageGenerator.makeBuffer(length) : null\r\n }\r\n\r\n default: {\r\n throw new Error(`cannot manage type ${tagType}`)\r\n }\r\n }\r\n }\r\n\r\n private nextString (): string {\r\n const words: string[] = this.words\r\n const w: string = words[this.word++]\r\n if (this.word === words.length) {\r\n this.word = 0\r\n }\r\n return w\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jspurefix",
3
- "version": "3.5.0",
3
+ "version": "4.0.0",
4
4
  "description": "pure node js fix engine",
5
5
  "keywords": [
6
6
  "typescript",
@@ -75,30 +75,30 @@
75
75
  "license": "MIT",
76
76
  "dependencies": {
77
77
  "align-text": "^1.0.2",
78
- "axios": "^1.6.5",
79
- "express": "^4.18.2",
78
+ "axios": "^1.7.5",
79
+ "express": "^4.19.2",
80
80
  "lodash": "^4.17.21",
81
- "mathjs": "^12.3.0",
81
+ "mathjs": "^13.0.3",
82
82
  "minimist": "^1.2.8",
83
83
  "minimist-options": "^4.1.0",
84
84
  "moment": "^2.30.1",
85
85
  "node-fs-extra": "^0.8.2",
86
- "reflect-metadata": "^0.2.1",
87
- "sax": "^1.3.0",
86
+ "reflect-metadata": "^0.2.2",
87
+ "sax": "^1.4.1",
88
88
  "tsyringe": "^4.8.0",
89
89
  "uuid": "^9.0.1",
90
- "winston": "^3.11.0",
90
+ "winston": "^3.14.2",
91
91
  "word-wrap": "^1.2.5",
92
- "yauzl": "^2.10.0"
92
+ "yauzl": "^3.1.3"
93
93
  },
94
94
  "devDependencies": {
95
95
  "@types/express": "^4.17.21",
96
- "@types/express-serve-static-core": "^4.17.41",
97
- "@types/jest": "^29.5.11",
98
- "@types/lodash": "^4.14.202",
99
- "@types/mathjs": "^9.4.1",
96
+ "@types/express-serve-static-core": "^4.19.5",
97
+ "@types/jest": "^29.5.12",
98
+ "@types/lodash": "^4.17.7",
99
+ "@types/mathjs": "^9.4.2",
100
100
  "@types/minimist": "^1.2.5",
101
- "@types/node": "^20.11.5",
101
+ "@types/node": "^22.5.0",
102
102
  "@types/request-promise-native": "^1.0.21",
103
103
  "@types/sax": "^1.2.7",
104
104
  "@types/uuid": "^9.0.7",
@@ -108,9 +108,9 @@
108
108
  "eslint": "^8.56.0",
109
109
  "eslint-config-standard-with-typescript": "^43.0.1",
110
110
  "jest": "^29.7.0",
111
- "madge": "^6.1.0",
111
+ "madge": "^8.0.0",
112
112
  "standard": "^17.1.0",
113
- "ts-jest": "^29.1.1",
114
- "typescript": "^5.3.3"
113
+ "ts-jest": "^29.2.5",
114
+ "typescript": "^5.5.4"
115
115
  }
116
116
  }
@@ -1,7 +1,7 @@
1
1
  import { ILooseObject } from '../../collections/collection'
2
2
  import {
3
3
  ContainedGroupField, ContainedSimpleField,
4
- ContainedFieldSet, ContainedField,
4
+ IContainedSet, ContainedField,
5
5
  ContainedComponentField, FieldsDispatch
6
6
  } from '../../dictionary/contained'
7
7
  import { SimpleFieldDefinition, FixDefinitions } from '../../dictionary/definition'
@@ -26,7 +26,7 @@ export class AsciiEncoder extends MsgEncoder {
26
26
  public readonly delimiter: number = AsciiChars.Soh,
27
27
  public readonly logDelimiter: number = AsciiChars.Pipe) {
28
28
  super(definitions)
29
- this.tags = new Tags(definitions)
29
+ this.tags = new Tags()
30
30
  }
31
31
 
32
32
  public trim (): Buffer {
@@ -51,12 +51,12 @@ export class AsciiEncoder extends MsgEncoder {
51
51
  this.tags.reset()
52
52
  }
53
53
 
54
- public encodeSet (objectToEncode: ILooseObject, set: ContainedFieldSet): void {
54
+ public encodeSet (objectToEncode: ILooseObject, set: IContainedSet): void {
55
55
  const summary: AsciiEncodeSetSummary = new AsciiEncodeSetSummary()
56
56
  this.encodeObject(objectToEncode, set, summary)
57
57
  }
58
58
 
59
- private encodeObject (objectToEncode: ILooseObject, set: ContainedFieldSet, state: AsciiEncodeSetSummary): void {
59
+ private encodeObject (objectToEncode: ILooseObject, set: IContainedSet, state: AsciiEncodeSetSummary): void {
60
60
  const fields: ContainedField[] = this.getFields(set, objectToEncode)
61
61
  this.dispatcher.dispatchFields(fields, {
62
62
  simple: (sf: ContainedSimpleField) => {
@@ -83,11 +83,11 @@ export class AsciiEncoder extends MsgEncoder {
83
83
  })
84
84
  }
85
85
 
86
- private getFields (set: ContainedFieldSet, o: ILooseObject): ContainedField[] {
86
+ private getFields (set: IContainedSet, o: ILooseObject): ContainedField[] {
87
87
  const keys: string[] = Object.keys(o)
88
88
  let j: number = 0
89
89
  const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {
90
- const field: ContainedField | null = set.localNameToField.get(current)
90
+ const field = set.localNameToField.get(current)
91
91
  if (field) {
92
92
  a[j++] = field
93
93
  }
@@ -140,7 +140,7 @@ export class AsciiEncoder extends MsgEncoder {
140
140
  buffer.writeChar(delimiter)
141
141
  }
142
142
 
143
- private encodeSimple (o: ILooseObject, set: ContainedFieldSet, sf: ContainedSimpleField, val: any): void {
143
+ private encodeSimple (o: ILooseObject, set: IContainedSet, sf: ContainedSimpleField, val: any): void {
144
144
  const definition = sf.definition
145
145
  const tag: number = definition.tag
146
146
  const buffer = this.buffer
@@ -1,5 +1,5 @@
1
1
  import { Tags } from '../tag/tags'
2
- import { MessageDefinition } from '../../dictionary/definition'
2
+ import { FixDefinitions, MessageDefinition } from '../../dictionary/definition'
3
3
  import { ElasticBuffer } from '../elastic-buffer'
4
4
  import { ParseState } from './parse-state'
5
5
  import { inject, injectable } from 'tsyringe'
@@ -7,7 +7,7 @@ import { DITokens } from '../../runtime/di-tokens'
7
7
 
8
8
  @injectable()
9
9
  export class AsciiParserState {
10
- public message: MessageDefinition | null
10
+ public message: MessageDefinition | undefined
11
11
  public locations: Tags
12
12
  public parseState: ParseState
13
13
  public bodyLen: number
@@ -19,6 +19,7 @@ export class AsciiParserState {
19
19
  public currentTag: number
20
20
  public rawDataLen: number
21
21
  public rawDataRead: number
22
+ public definitions: FixDefinitions
22
23
  public msgType: string | null
23
24
 
24
25
  constructor (@inject(DITokens.ParseBuffer) public readonly elasticBuffer: ElasticBuffer) {
@@ -126,7 +127,7 @@ export class AsciiParserState {
126
127
  throw new Error(`MsgTag: not expected at position [${nextTagPos}]`)
127
128
  }
128
129
  this.msgType = buffer.getString(equalPos + 1, valueEndPos)
129
- this.message = locations.definitions.message.get(this.msgType)
130
+ this.message = this.definitions.message.get(this.msgType)
130
131
  break
131
132
  }
132
133
 
@@ -181,7 +182,6 @@ export class AsciiParserState {
181
182
  this.rawDataRead = 0
182
183
  this.rawDataLen = 0
183
184
  this.bodyLen = 0
184
- this.message = null
185
185
  this.msgType = null
186
186
  }
187
187
  }
@@ -10,7 +10,7 @@ import { Readable } from 'stream'
10
10
  import { ElasticBuffer } from '../elastic-buffer'
11
11
  import { SegmentDescription } from '../segment/segment-description'
12
12
  import { ParseState } from './parse-state'
13
- import { IJsFixConfig } from '../../config'
13
+ import { IJsFixConfig } from '../../config/js-fix-config'
14
14
  import { inject, injectable } from 'tsyringe'
15
15
  import { DITokens } from '../../runtime/di-tokens'
16
16
  import { SegmentType } from '../segment/segment-type'
@@ -35,11 +35,11 @@ export class AsciiParser extends MsgParser {
35
35
 
36
36
  this.delimiter = config.delimiter ?? AsciiChars.Soh
37
37
  this.writeDelimiter = config.logDelimiter ?? AsciiChars.Pipe
38
- const definitions = config.definitions
39
38
  this.id = AsciiParser.nextId++
40
39
  this.segmentParser = config.sessionContainer.resolve<AsciiSegmentParser>(AsciiSegmentParser)
41
40
  this.state = config.sessionContainer.resolve<AsciiParserState>(AsciiParserState)
42
- this.state.locations = new Tags(definitions, this.receivingBuffer.size / 10)
41
+ this.state.locations = new Tags(this.receivingBuffer.size / 10)
42
+ this.state.definitions = this.config.definitions
43
43
  this.state.beginMessage()
44
44
  if (readStream !== null) {
45
45
  this.subscribe()
@@ -181,6 +181,7 @@ export class AsciiParser extends MsgParser {
181
181
  const locations = state.locations
182
182
  const source = this.receivingBuffer
183
183
  const delimiter = this.delimiter
184
+ const definitions = this.config.definitions
184
185
  const replace = this.writeDelimiter
185
186
  const msgType = state.msgType ?? null
186
187
  if (!msgType) return null
@@ -189,7 +190,7 @@ export class AsciiParser extends MsgParser {
189
190
  const structure: Structure | null = this.segmentParser.parse(msgType, locations,
190
191
  locations.nextTagPos - 1)
191
192
  if (!structure) return null
192
- return new AsciiView(structure.msg(),
193
+ return new AsciiView(definitions, structure.msg(),
193
194
  source,
194
195
  structure,
195
196
  ptr,
@@ -207,6 +208,6 @@ export class AsciiParser extends MsgParser {
207
208
  const structure = new Structure(locations, [])
208
209
  const segment = new SegmentDescription('unknown', locations.tagPos[0].tag, null, 0, 1, SegmentType.Unknown)
209
210
  segment.endPosition = locations.nextTagPos - 1
210
- return new AsciiView(segment, source, structure, ptr, delimiter, replace)
211
+ return new AsciiView(this.config.definitions, segment, source, structure, ptr, delimiter, replace)
211
212
  }
212
213
  }
@@ -28,7 +28,7 @@ export class AsciiSegmentParser {
28
28
  public parse (msgType: string, tags: Tags, last: number): Structure | null {
29
29
  // completed segments in that they are fully parsed
30
30
  const segments: SegmentDescription[] = []
31
- const msgDefinition: MessageDefinition | null = this.definitions.message.get(msgType)
31
+ const msgDefinition: MessageDefinition | undefined = this.definitions.message.get(msgType)
32
32
  if (!msgDefinition) {
33
33
  return null
34
34
  }
@@ -58,7 +58,7 @@ export class AsciiSegmentParser {
58
58
  }
59
59
  }
60
60
 
61
- function summarise (): any {
61
+ function summarise (): AsciiSegmentParserSummary {
62
62
  return <AsciiSegmentParserSummary>{
63
63
  msgType,
64
64
  tags: tags.clone().tagPos,
@@ -1,4 +1,4 @@
1
- import { SimpleFieldDefinition } from '../../dictionary/definition'
1
+ import { FixDefinitions, SimpleFieldDefinition } from '../../dictionary/definition'
2
2
  import { SegmentDescription } from '../segment/segment-description'
3
3
  import { Structure } from '../structure'
4
4
  import { MsgView } from '../msg-view'
@@ -11,13 +11,13 @@ import { TagType } from '../tag/tag-type'
11
11
 
12
12
  export class AsciiView extends MsgView {
13
13
  private readonly timeFormatter: ITimeFormatter = new TimeFormatter(this.buffer)
14
- constructor (public readonly segment: SegmentDescription,
14
+ constructor (public readonly definitions: FixDefinitions, public readonly segment: SegmentDescription,
15
15
  public readonly buffer: ElasticBuffer,
16
16
  public readonly structure: Structure | null,
17
17
  public readonly ptr: number,
18
18
  public readonly delimiter: number,
19
19
  public readonly writeDelimiter: number) {
20
- super(segment, structure)
20
+ super(definitions, segment, structure)
21
21
  }
22
22
 
23
23
  // if the view is to be kept beyond the event on which it arrives, must be cloned
@@ -26,11 +26,12 @@ export class AsciiView extends MsgView {
26
26
  const buffer = this.buffer.clone()
27
27
  const segment = this.segment
28
28
  const delimiter = this.delimiter
29
+ const definitions = this.definitions
29
30
  const writeDelimiter = this.writeDelimiter
30
31
  if (structure) {
31
- return new AsciiView(segment, buffer, new Structure(structure.tags.clone(), structure.segments), this.ptr, delimiter, writeDelimiter)
32
+ return new AsciiView(definitions, segment, buffer, new Structure(structure.tags.clone(), structure.segments), this.ptr, delimiter, writeDelimiter)
32
33
  }
33
- return new AsciiView(segment, buffer, null, this.ptr, delimiter, writeDelimiter)
34
+ return new AsciiView(definitions, segment, buffer, null, this.ptr, delimiter, writeDelimiter)
34
35
  }
35
36
 
36
37
  private replaceDelimiter (viewBuffer: Buffer, replaceDelimiter?: number): void {
@@ -71,7 +72,7 @@ export class AsciiView extends MsgView {
71
72
  return cs % 256
72
73
  }
73
74
 
74
- protected toTyped (field: SimpleFieldDefinition): any {
75
+ protected toTyped (field: SimpleFieldDefinition): (boolean | string | number | Date | Buffer | null) {
75
76
  const position: number = this.getPosition(field.tag)
76
77
  if (position >= 0) {
77
78
  switch (field.tagType) {
@@ -117,10 +118,11 @@ export class AsciiView extends MsgView {
117
118
  }
118
119
  }
119
120
  }
121
+ return null
120
122
  }
121
123
 
122
124
  protected create (singleton: SegmentDescription): MsgView {
123
- return new AsciiView(singleton,
125
+ return new AsciiView(this.definitions, singleton,
124
126
  this.buffer,
125
127
  this.structure,
126
128
  this.ptr,