jspurefix 5.10.1 → 5.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ATDL_PLAN.md +109 -0
- package/WORKLOG.md +108 -13
- package/dist/dictionary/compiler/standard-snippet.js +2 -2
- package/dist/dictionary/compiler/standard-snippet.js.map +1 -1
- package/dist/jsfix-cmd.js +2 -2
- package/dist/jsfix-cmd.js.map +1 -1
- package/dist/runtime/session-container.js +11 -8
- package/dist/runtime/session-container.js.map +1 -1
- package/dist/runtime/session-launcher.d.ts +2 -0
- package/dist/runtime/session-launcher.js +10 -1
- package/dist/runtime/session-launcher.js.map +1 -1
- package/dist/transport/duplex/http-duplex.d.ts +1 -1
- package/dist/transport/duplex/http-duplex.js +2 -5
- package/dist/transport/duplex/http-duplex.js.map +1 -1
- package/docs/acceptor.md +32 -0
- package/jsfix.test_client.txt +62 -62
- package/jsfix.test_server.txt +72 -72
- package/package.json +1 -3
- package/src/dictionary/compiler/standard-snippet.ts +2 -2
- package/src/jsfix-cmd.ts +2 -2
- package/src/runtime/session-container.ts +12 -4
- package/src/runtime/session-launcher.ts +29 -1
- package/src/transport/duplex/http-duplex.ts +4 -2
package/ATDL_PLAN.md
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# FIXatdl renderer and end-to-end test harness
|
|
2
|
+
|
|
3
|
+
Design notes from 2026-08-08. Nothing is built yet. This exists so the next session
|
|
4
|
+
can start from the thinking rather than redo it.
|
|
5
|
+
|
|
6
|
+
**First decision to settle:** this is not jspurefix work and should almost certainly
|
|
7
|
+
live in its own repository (`jspf-atdl`, or similar). The plan is parked here because
|
|
8
|
+
it is where the conversation happened and because the back-end half does use the
|
|
9
|
+
engine. Move it when the code starts.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## The problem
|
|
14
|
+
|
|
15
|
+
A broker publishes a FIXatdl document per algorithm: an XML definition of its
|
|
16
|
+
parameters and the order ticket used to fill them in. An EMS — Bloomberg EMSX,
|
|
17
|
+
Flextrade, Portware, Fidessa, ITG Triton — renders the ticket from that document, and
|
|
18
|
+
the values map onto FIX tags, usually the `NoStrategyParameters` group.
|
|
19
|
+
|
|
20
|
+
The observed pain, in more than one shop: getting a definition rendered is cobbled
|
|
21
|
+
together, and **you cannot tell whether a definition is sound until a vendor renders
|
|
22
|
+
it**. The loop is write it, send it, wait, discover it renders differently in EMSX
|
|
23
|
+
than in Triton, repeat. Nothing good and open exists to shorten that.
|
|
24
|
+
|
|
25
|
+
The goal is to close the loop locally, and then go one step further than any renderer
|
|
26
|
+
does — send the resulting order to a back end that answers, so a definition can be
|
|
27
|
+
proved end to end before it goes to clients.
|
|
28
|
+
|
|
29
|
+
## What it actually is
|
|
30
|
+
|
|
31
|
+
**An interpreter, not an application.** The UI is entirely data driven: you never
|
|
32
|
+
hand-write a component per algorithm, you walk the layout tree. That single
|
|
33
|
+
observation drives every technology choice below.
|
|
34
|
+
|
|
35
|
+
The state is a flat map of control id to value. There is no routing, no server state,
|
|
36
|
+
no virtualised list, no async rendering. Almost nothing a UI framework is good at is
|
|
37
|
+
in play.
|
|
38
|
+
|
|
39
|
+
## Technology
|
|
40
|
+
|
|
41
|
+
Deliberately small. FIXatdl is *already* a declarative UI description — wrapping it in
|
|
42
|
+
React means writing a compiler from one declarative tree into another and inheriting a
|
|
43
|
+
second lifecycle model, build chain and version churn, for a form with thirty
|
|
44
|
+
controls.
|
|
45
|
+
|
|
46
|
+
- **`DOMParser` for the XML.** ATDL is split across several namespaces — core,
|
|
47
|
+
layout, validation, flow control — and `getElementsByTagNameNS` is exactly the tool
|
|
48
|
+
for that. Built into every browser, zero dependencies.
|
|
49
|
+
- **Plain DOM for rendering.** Walk the layout tree, emit a label and an input per
|
|
50
|
+
control. On any change, re-evaluate every state rule and edit, then toggle
|
|
51
|
+
`disabled` / `hidden`. Tens of rules, not thousands — a full re-evaluation is
|
|
52
|
+
microseconds, so the machinery that exists to avoid one is dead weight.
|
|
53
|
+
- **TypeScript for the model and interpreter**, built to a single ESM module. A build
|
|
54
|
+
step for the author, not for anyone using it.
|
|
55
|
+
- **Static hosting, dynamic page.** One HTML file plus one module, opening from
|
|
56
|
+
`file://` if need be. Drag an ATDL file on, see it render, edit the XML, drop it
|
|
57
|
+
again.
|
|
58
|
+
|
|
59
|
+
Note the distinction that matters: static **hosting**, not static **generation**.
|
|
60
|
+
Generating HTML at build time would need a rebuild per edit, and the tight edit loop
|
|
61
|
+
is the entire product.
|
|
62
|
+
|
|
63
|
+
## Build order
|
|
64
|
+
|
|
65
|
+
**The expression engine first, headless, with tests.** `StateRule` and `StrategyEdit`
|
|
66
|
+
form a small expression language — operators, logical combinators, references to other
|
|
67
|
+
controls — and that is where the time will go and where correctness actually matters.
|
|
68
|
+
Unit-test it against real broker ATDL documents before drawing a single widget. If
|
|
69
|
+
that engine is right the tool is good; if it is approximate, it is one more
|
|
70
|
+
cobbled-together thing.
|
|
71
|
+
|
|
72
|
+
Controls are the easy half and should come second.
|
|
73
|
+
|
|
74
|
+
## Pluggable skins
|
|
75
|
+
|
|
76
|
+
Part of the value is answering "roughly how will EMSX lay this out, versus Fidessa" —
|
|
77
|
+
the question people genuinely cannot answer today. Keep layout strategy and CSS behind
|
|
78
|
+
an adapter so the same definition can render two ways side by side. CSS custom
|
|
79
|
+
properties cover it; still no framework.
|
|
80
|
+
|
|
81
|
+
## The back end
|
|
82
|
+
|
|
83
|
+
A browser cannot open a TCP FIX session, so:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
page --(WebSocket, composed order as JSON)--> bridge --(FIX)--> test acceptor
|
|
87
|
+
<--(ExecutionReports)---------------------
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The bridge owns a jspurefix initiator; the acceptor validates the strategy parameters
|
|
91
|
+
against the same ATDL definition and answers. This keeps the page genuinely static and
|
|
92
|
+
the FIX where it belongs.
|
|
93
|
+
|
|
94
|
+
A thin WebSocket server is the right shape here — the engine's existing HTTP acceptor
|
|
95
|
+
is FIXML-shaped and is not a good fit for this.
|
|
96
|
+
|
|
97
|
+
## Rough size
|
|
98
|
+
|
|
99
|
+
~1,500 lines of interpreter, zero runtime dependencies.
|
|
100
|
+
|
|
101
|
+
## Open questions for next session
|
|
102
|
+
|
|
103
|
+
1. Own repository or a folder here? (Recommendation: own repository.)
|
|
104
|
+
2. Which real ATDL documents can be used as test fixtures? The expression engine is
|
|
105
|
+
only as good as what it is tested against, and broker-published files vary a lot.
|
|
106
|
+
3. Which FIXatdl version to target. 1.1 is the one in widespread use; confirm before
|
|
107
|
+
writing the parser rather than after.
|
|
108
|
+
4. How strategy parameters map onto the outbound order — the `NoStrategyParameters`
|
|
109
|
+
group versus direct custom tags — likely needs to be configurable per broker.
|
package/WORKLOG.md
CHANGED
|
@@ -2,7 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
Running notes on what has been done and what is worth doing next, so a session can
|
|
4
4
|
be resumed cold. The long-form plans live in `BACKPORT_PLAN.md` (engine, cspurefix →
|
|
5
|
-
jspurefix)
|
|
5
|
+
jspurefix), `DEMO_PORT_PLAN.md` (the jspf-demo reference app) and `ATDL_PLAN.md` (a
|
|
6
|
+
FIXatdl renderer and test harness — a prospective sibling project, not engine work).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 2026-08-08 — closing the acceptor's listener
|
|
11
|
+
|
|
12
|
+
Reported from jspf-demo: `npm run custom-logon` never exits. The logs say everything
|
|
13
|
+
shut down — sessions logged out, transports harvested, registry empty, `.. done` —
|
|
14
|
+
and the node process sits there.
|
|
15
|
+
|
|
16
|
+
Diagnosed by dumping `process._getActiveHandles()` after the run. Session and
|
|
17
|
+
transport teardown is complete; the only handle left is the listening `net.Server`.
|
|
18
|
+
A listening socket keeps node alive by itself, and nothing ever closed it.
|
|
19
|
+
|
|
20
|
+
`TcpAcceptorListener.stop()` has always existed and does the right thing. What was
|
|
21
|
+
missing was any way to *call* it: `SessionLauncher.stopAcceptor()` was private and
|
|
22
|
+
reached only from the branch where one launcher holds both roles. An application that
|
|
23
|
+
gives its acceptor a launcher of its own — which jspf-demo started doing on 2026-08-01
|
|
24
|
+
so the acceptor would survive any one client — could not close its listener at all.
|
|
25
|
+
|
|
26
|
+
**Changed:** `SessionLauncher.stop()`, public. Remembers a stop that arrives before
|
|
27
|
+
the acceptor has started (`makeSystem` is async, so that window is real) and never
|
|
28
|
+
opens the listener in that case. `run()` resolves once the listener has closed.
|
|
29
|
+
Pinned by `src/test/session/launcher-stop.test.ts`.
|
|
30
|
+
|
|
31
|
+
Worth checking against
|
|
32
|
+
[#72](https://github.com/TimelordUK/jspurefix/issues/72) ("`session-launcher.run()`
|
|
33
|
+
never resolves when connection established") before that issue is next looked at —
|
|
34
|
+
for an acceptor, run() not resolving was the designed behaviour with no way out, and
|
|
35
|
+
now there is one.
|
|
36
|
+
|
|
37
|
+
`docs/acceptor.md` gained a "Closing the listener" section, because from the outside
|
|
38
|
+
this reads as a hang rather than as a decision.
|
|
6
39
|
|
|
7
40
|
---
|
|
8
41
|
|
|
@@ -37,6 +70,62 @@ confirmation — see below).
|
|
|
37
70
|
|
|
38
71
|
---
|
|
39
72
|
|
|
73
|
+
## 2026-08-08 — customising the Logon, and making silent drops visible, released as 5.10.0
|
|
74
|
+
|
|
75
|
+
Started from [#93](https://github.com/TimelordUK/jspurefix/issues/93), open since
|
|
76
|
+
December 2024, and ended up somewhere broader. Two issues that look unrelated turned
|
|
77
|
+
out to share a theme: **the engine failed quietly in several places, and nobody could
|
|
78
|
+
see it.**
|
|
79
|
+
|
|
80
|
+
**Merged (PR #164):**
|
|
81
|
+
|
|
82
|
+
- a `Logon` block in the session description, merged over the fields the engine
|
|
83
|
+
derives. `AsciiSessionMsgFactory.logon()` had read exactly five values off the
|
|
84
|
+
description and ignored everything else, so an `"Account"` in the config was never
|
|
85
|
+
looked at. A null in the block suppresses a field.
|
|
86
|
+
- `AsciiEncoder` now reports a key it cannot resolve, via
|
|
87
|
+
`MsgEncoder.onUnknownField`. This was the real cause of the confusion: `Account` is
|
|
88
|
+
tag 1 but is not a field of FIX 4.4 `Logon`, so it was discarded with no error and
|
|
89
|
+
no log line. Only runs on the miss path — a key that resolves costs nothing.
|
|
90
|
+
- `SessionContainer(provider)` and `SessionLauncher.makeSessionMsgFactory()`, so
|
|
91
|
+
supplying a factory no longer needs a `SessionContainer` subclass
|
|
92
|
+
- `AsciiSessionMsgFactory` / `FixmlSessionMsgFactory` exported from the package root.
|
|
93
|
+
Extending the ascii factory — the thing every previous answer to these issues told
|
|
94
|
+
people to do — used to require importing through `dist/transport/ascii/...`.
|
|
95
|
+
- an optional callback on `send`, giving back the stamped `StandardHeader` (and so
|
|
96
|
+
the sequence number) or an error. Writing it exposed three drops that told nobody:
|
|
97
|
+
`encodeMessage` returning null for an unknown msgType, a session in state
|
|
98
|
+
`Stopped`, and no transport at all. All three still reach the error channel; the
|
|
99
|
+
callback is additive.
|
|
100
|
+
|
|
101
|
+
**Issues resolved:** #93, #86, #39, #96 (all commented with the full explanation).
|
|
102
|
+
#69 verified fixed — `SenderSubID` has been in the header since `dd9a540` — and left
|
|
103
|
+
open pending the reporter, since their actual complaint was "no response from the
|
|
104
|
+
server".
|
|
105
|
+
|
|
106
|
+
**Docs:** `docs/custom-logon.md`, plus README sections on the `Logon` block and on
|
|
107
|
+
send callbacks.
|
|
108
|
+
|
|
109
|
+
**Perf:** flat. Parse benchmarks moved inside the noise floor; Logon encode 2.26
|
|
110
|
+
µs/msg against the 2.3 in the README table. The encoder change is genuinely off the
|
|
111
|
+
hot path.
|
|
112
|
+
|
|
113
|
+
**Demos:** `jspf-demo` gained a `custom-logon` mode (config block + generated
|
|
114
|
+
dictionary + run-time factory, and one field deliberately left undeclared so the new
|
|
115
|
+
warning is visible). `jspf-md-demo`'s `Msg44Fact` had a `logon()` that was a verbatim
|
|
116
|
+
copy of the stock one — it showed the hook and never the point — and now sends a real
|
|
117
|
+
bespoke tag; its generated types were regenerated in a separate commit, having
|
|
118
|
+
drifted a long way behind the generator.
|
|
119
|
+
|
|
120
|
+
**Found along the way:** jspf-demo had been sending every `TradeCaptureReportRequest`
|
|
121
|
+
without its dates for as long as the demo has existed. `TrdCapDtGrp` was built as a
|
|
122
|
+
flat array, which is how the FIX repository models it, but those sessions load the
|
|
123
|
+
QuickFIX dictionary where it is a component wrapping `NoDates`. The encoder dropped
|
|
124
|
+
it silently. The new warning is what caught it, about an hour after it existed — a
|
|
125
|
+
fair advertisement for the feature.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
40
129
|
## Next up
|
|
41
130
|
|
|
42
131
|
### 1. Toolchain major bumps
|
|
@@ -49,10 +138,9 @@ acceptor work:
|
|
|
49
138
|
- `eslint-config-love` 151 → 154
|
|
50
139
|
- `@types/node` 25 → 26
|
|
51
140
|
|
|
52
|
-
Expect lint churn.
|
|
53
|
-
`
|
|
54
|
-
|
|
55
|
-
currently clean.
|
|
141
|
+
Expect lint churn. The 17 pre-existing lint errors noted here were cleared in
|
|
142
|
+
`1d2f267` — `npx eslint src/` is clean on master as of 5.10.0, so any churn from the
|
|
143
|
+
bump is genuinely new and worth reading. `npm audit` is clean.
|
|
56
144
|
|
|
57
145
|
### 2. #77 — confirm or close
|
|
58
146
|
|
|
@@ -76,14 +164,21 @@ reproduced.
|
|
|
76
164
|
|
|
77
165
|
### 3. Other open issues worth a look
|
|
78
166
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
|
|
167
|
+
Most of this list was cleared in 5.10.0. What remains:
|
|
168
|
+
|
|
169
|
+
- **#69** — verified fixed and commented; awaiting the reporter before closing. Their
|
|
170
|
+
literal question (`SenderSubID`) works; their real complaint was silence from
|
|
171
|
+
cServer, which is a different problem.
|
|
172
|
+
- **#85** — `ASessionMsgFactory` types patch. Possibly superseded twice over now, by
|
|
173
|
+
`cloneFor` and by the root exports added in 5.10.0. Worth reading the patch against
|
|
174
|
+
current master before doing anything.
|
|
175
|
+
- **#72** — `session-launcher.run()` never resolves when the connection is
|
|
176
|
+
established. Not looked at. Given how #140 and #77 went, verify against 5.10.0
|
|
177
|
+
before trusting the thread.
|
|
178
|
+
|
|
179
|
+
The lesson from this batch, worth repeating: **several of these were already fixed,
|
|
180
|
+
or were one line plus a docs gap.** Reading the thread is a poor substitute for
|
|
181
|
+
running the reporter's config.
|
|
87
182
|
|
|
88
183
|
### 4. Small things noticed, none urgent
|
|
89
184
|
|
|
@@ -40,8 +40,8 @@ class StandardSnippet {
|
|
|
40
40
|
this.settings = settings;
|
|
41
41
|
}
|
|
42
42
|
static rhsJustify(txt, width) {
|
|
43
|
-
const
|
|
44
|
-
return
|
|
43
|
+
const pad = ' '.repeat(Math.max(0, width));
|
|
44
|
+
return txt.split(/\r\n|\n/).map(line => pad + line).join('\n');
|
|
45
45
|
}
|
|
46
46
|
import(name, isMsg, indent) {
|
|
47
47
|
const spaces = this.spaces(indent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-snippet.js","sourceRoot":"","sources":["../../../src/dictionary/compiler/standard-snippet.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0CAA2B;AAE3B,MAAa,eAAe;IAC1B,YAA6B,QAA2B;QAA3B,aAAQ,GAAR,QAAQ,CAAmB;IACxD,CAAC;IAEO,MAAM,CAAC,UAAU,CAAE,GAAW,EAAE,KAAa;QACnD,MAAM,
|
|
1
|
+
{"version":3,"file":"standard-snippet.js","sourceRoot":"","sources":["../../../src/dictionary/compiler/standard-snippet.ts"],"names":[],"mappings":"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","sourcesContent":["import { ICompilerSettings } from './compiler-settings'\nimport * as _ from 'lodash'\n\nexport class StandardSnippet {\n constructor (public readonly settings: ICompilerSettings) {\n }\n\n private static rhsJustify (txt: string, width: number): string {\n const pad = ' '.repeat(Math.max(0, width))\n return txt.split(/\\r\\n|\\n/).map(line => pad + line).join('\\n')\n }\n\n // import { camelName } from './component/name_underscore'\n public import (name: string, isMsg: boolean, indent: number): string {\n const spaces: string = this.spaces(indent)\n const fileName = _.snakeCase(name)\n const path = isMsg ? `./set/${fileName}` : `./${fileName}`\n return `${spaces}import { I${name} } from '${path}'`\n }\n\n public interface (name: string, indent: number): string {\n const spaces: string = this.spaces(indent)\n return `${spaces}export interface I${name}`\n }\n\n public startBlockComment (indent: number): string {\n const spaces: string = this.spaces(indent)\n return `${spaces}/*`\n }\n\n public endBlockComment (indent: number): string {\n const spaces: string = this.spaces(indent)\n return `${spaces}*/`\n }\n\n public startBlock (indent: number): string {\n const spaces: string = this.spaces(indent)\n return `${spaces}{`\n }\n\n public endBlock (indent: number): string {\n const spaces: string = this.spaces(indent)\n return `${spaces}}`\n }\n\n public group (name: string, type: string, required: boolean, indent: number): string {\n const spaces: string = this.spaces(indent)\n return `${spaces}${name}${required ? '' : '?'}: I${type}[]`\n }\n\n public component (name: string, required: boolean, indent: number): string {\n const spaces: string = this.spaces(indent)\n return `${spaces}${name}${required ? '' : '?'}: I${name}`\n }\n\n public simple (name: string, type: string, required: boolean, indent: number): string {\n const spaces: string = this.spaces(indent)\n return `${spaces}${name}${required ? '' : '?'}: ${type}`\n }\n\n public enum (name: string, indent: number): string {\n const spaces: string = this.spaces(indent)\n return `export ${spaces}enum ${name}`\n }\n\n public enumValue (name: string, val: any, indent: number): string {\n const spaces: string = this.spaces(indent)\n if (typeof (val) === 'string') {\n return `${spaces}${name} = '${val}'`\n }\n return `${spaces}${name} = ${val}`\n }\n\n public spaces (indent: number): string {\n return ' '.repeat(this.settings.spaces * indent)\n }\n\n public commentLine (line: string, justify: number): string {\n return StandardSnippet.rhsJustify(`// ${line}`, justify)\n }\n\n public commentBox (str: string): string {\n const wrap = require('word-wrap')\n const text = wrap(str, {\n width: 60,\n indent: ' '\n }\n )\n let lines = text.split('\\n').map((a: string) => a.trim())\n const max = this.longest(lines).length + 2\n const newLine: string = require('os').EOL\n lines = lines.map(function (line: string) {\n line = ` ${line} `\n const diff = max - line.length\n return '*' + line + ' '.repeat(diff) + '*'\n })\n const stars: string = '*'.repeat(lines[0].length)\n const joined: string = lines.join(newLine)\n return stars + newLine +\n joined +\n newLine +\n stars\n }\n\n private longest (arr: string[]): string {\n return arr.reduce(function (a, b) {\n return a.length > b.length ? a : b\n })\n }\n}\n"]}
|
package/dist/jsfix-cmd.js
CHANGED
|
@@ -61,7 +61,7 @@ const runtime_1 = require("./runtime");
|
|
|
61
61
|
const di_tokens_1 = require("./runtime/di-tokens");
|
|
62
62
|
const minimist_options_1 = __importDefault(require("minimist-options"));
|
|
63
63
|
const quick_fix_xml_file_builder_1 = require("./dictionary/parser/quickfix/quick-fix-xml-file-builder");
|
|
64
|
-
const fs = require('
|
|
64
|
+
const fs = require('fs');
|
|
65
65
|
const options = (0, minimist_options_1.default)({
|
|
66
66
|
dict: {
|
|
67
67
|
type: 'string',
|
|
@@ -436,7 +436,7 @@ class JsfixCmd {
|
|
|
436
436
|
ensureExists(path) {
|
|
437
437
|
return __awaiter(this, void 0, void 0, function* () {
|
|
438
438
|
return yield new Promise((resolve, reject) => {
|
|
439
|
-
fs.
|
|
439
|
+
fs.mkdir(path, { recursive: true }, (err) => {
|
|
440
440
|
if (err) {
|
|
441
441
|
reject(err);
|
|
442
442
|
}
|
package/dist/jsfix-cmd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsfix-cmd.js","sourceRoot":"","sources":["../src/jsfix-cmd.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata'\n\nimport { ElasticBuffer, MsgView, MsgParser } from './buffer'\nimport { AsciiParser, AsciiView, AsciiChars } from './buffer/ascii'\nimport { ILooseObject } from './collections/collection'\nimport { SimpleFieldDefinition, FixDefinitions } from './dictionary/definition'\nimport { MessageGenerator, JsonHelper, getWords, DefinitionFactory } from './util'\nimport { ISessionDescription, FileDuplex, StringDuplex } from './transport'\n\nimport { MsgTag } from './types'\nimport { IJsFixConfig } from './config'\n\nimport * as util from 'util'\nimport minimist = require('minimist')\nimport * as path from 'path'\nimport { MsgTransport } from './transport/factory'\nimport { EnumCompiler, ICompilerSettings, MsgCompiler } from './dictionary/compiler'\nimport { AsciiMsgTransmitter } from './transport/ascii/ascii-msg-transmitter'\nimport { SessionContainer } from './runtime'\nimport { DITokens } from './runtime/di-tokens'\nimport buildOptions from 'minimist-options'\nimport { QuickFixXmlFileBuilder } from './dictionary/parser/quickfix/quick-fix-xml-file-builder'\n\nconst fs = require('node-fs-extra')\n\nconst options = buildOptions({\n dict: {\n type: 'string',\n alias: 'd',\n default: 'data/FIX44.xml'\n },\n\n type: {\n type: 'string-array',\n alias: 't'\n },\n\n fix: {\n type: 'string',\n alias: 'f',\n default: 'data/FIX44.xml'\n },\n\n session: {\n type: 'string',\n alias: 's'\n },\n\n delimiter: {\n type: 'string',\n alias: 'l',\n default: '|'\n },\n\n help: {\n type: 'boolean',\n alias: ['h'],\n default: false\n },\n\n unit: {\n type: 'boolean',\n alias: ['u'],\n default: false\n },\n\n generate: {\n type: 'boolean',\n alias: ['g'],\n default: false\n },\n\n stats: {\n type: 'boolean',\n alias: ['st'],\n default: false\n },\n\n tokens: {\n type: 'boolean',\n alias: ['t'],\n default: false\n },\n\n objects: {\n type: 'boolean',\n alias: ['o'],\n default: true\n },\n\n structures: {\n type: 'boolean',\n alias: ['r'],\n default: false\n },\n\n script: {\n type: 'boolean',\n alias: ['i'],\n default: false\n },\n\n compile: {\n type: 'boolean',\n alias: ['c'],\n default: false\n },\n\n groups: {\n type: 'boolean',\n alias: ['g'],\n default: true\n },\n\n density: {\n type: 'number',\n alias: 'd',\n default: 0.8\n },\n\n repeats: {\n type: 'number',\n alias: 'r',\n default: 1\n },\n\n arr: {\n type: 'array',\n alias: 'a',\n default: []\n }\n\n /*\n booleans: {\n type: 'boolean-array',\n alias: 'b',\n default: [true, false]\n },\n\n numbers: {\n type: 'number-array',\n alias: 'n',\n default: [0, 1]\n },\n\n published: 'boolean',\n\n // Special option for positional arguments (`_` in minimist)\n arguments: 'string'\n */\n})\n\nconst argv: any = minimist(process.argv.slice(2), options)\n\nenum PrintMode {\n Structure = 1,\n Object = 2,\n Verbose = 3,\n Stats = 4,\n Token = 5,\n Encoded = 6\n}\n\nenum Command {\n Generate = 1,\n Replay = 2,\n Lookup = 3,\n Encode = 4,\n Benchmark = 5,\n Compile = 6,\n Trim,\n Unknown = 8\n}\n\nclass ParseSummary {\n public readonly micros_per_msg: number\n public readonly chars_per_second: number\n public readonly fields_per_second: number\n public readonly content_length: number\n\n constructor (\n public readonly content: string,\n public readonly view: string,\n public readonly msg_type: string,\n public readonly iterations: number,\n public readonly elapsed_ms: number,\n public readonly fields: number\n ) {\n this.content_length = this.content.length\n this.micros_per_msg = (this.elapsed_ms / this.iterations) * 1000\n this.chars_per_second = Math.round(this.content_length * this.iterations / this.elapsed_ms * 1000)\n this.fields_per_second = Math.round(this.fields * this.iterations / this.elapsed_ms * 1000)\n }\n}\n\nexport class JsfixCmd {\n private readonly root: string = path.join(__dirname, '../')\n private definitions: FixDefinitions\n private jsonHelper: JsonHelper\n private session: AsciiMsgTransmitter\n private sessionDescription: ISessionDescription\n private delimiter: number = AsciiChars.Soh\n private stats: ILooseObject = {}\n private readonly filter: Map<string, boolean> = new Map<string, boolean>()\n private messages: number = 0\n private print: boolean = true\n\n private static getCommand (): Command {\n let command: Command = Command.Unknown\n if (argv.trim) {\n command = Command.Trim\n } else if (argv.compile) {\n command = Command.Compile\n } else if (argv.generate) {\n command = Command.Generate\n } else if (argv.fix) {\n command = argv.benchmark ? Command.Benchmark : Command.Replay\n } else if (argv.field) {\n command = Command.Lookup\n } else if (argv.json) {\n command = Command.Encode\n } else if (argv.msg) {\n command = Command.Lookup\n }\n return command\n }\n\n private static getPrintMode (): PrintMode {\n let mode: PrintMode = PrintMode.Stats\n if (argv.tokens) {\n mode = PrintMode.Token\n } else if (argv.stats) {\n mode = PrintMode.Stats\n } else if (argv.objects) {\n mode = PrintMode.Object\n } else if (argv.verbose) {\n mode = PrintMode.Verbose\n } else if (argv.structures) {\n mode = PrintMode.Structure\n } else if (argv.encoded) {\n mode = PrintMode.Encoded\n } else if (argv.trim) {\n mode = PrintMode.Object\n }\n return mode\n }\n\n private static async writeFile (name: string, api: string): Promise<void> {\n const writer = util.promisify(fs.writeFile)\n await writer(name, api, { encoding: 'utf8' }\n ).catch((e: Error) => {\n throw e\n })\n }\n\n public async exec (): Promise<any> {\n return await new Promise<any>((resolve, reject) => {\n this.init().then(async () => {\n let actioned: boolean = true\n const command = JsfixCmd.getCommand()\n\n switch (command) {\n case Command.Generate: {\n // produce a test message or a valid fix log of n messages\n await this.generate()\n break\n }\n\n case Command.Encode: {\n // encode a json message back to fix\n this.encode()\n break\n }\n\n case Command.Replay: {\n // parse a file into either objects, tokens, structures or stats\n const repeats: number = !isNaN(argv.repeats) ? argv.repeats : 1\n try {\n for (let i: number = 0; i < repeats; ++i) {\n await this.replay()\n }\n } catch (e) {\n reject(e)\n }\n break\n }\n\n case Command.Benchmark: {\n // time how long to parse 10000 repeats of contents of file\n const repeats: number = !isNaN(argv.repeats) ? argv.repeats : 10000\n try {\n const summary = await this.benchmark(repeats)\n console.log(JSON.stringify(summary, null, 4))\n } catch (e) {\n reject(e)\n }\n break\n }\n\n case Command.Lookup: {\n // lookup a field\n if (argv.field) {\n this.field()\n } else {\n this.msg()\n }\n break\n }\n\n case Command.Compile: {\n await this.compile()\n break\n }\n\n case Command.Trim: {\n const xml = this.trim()\n console.log(xml)\n break\n }\n\n case Command.Unknown:\n default: {\n actioned = false\n }\n }\n resolve(actioned)\n }).catch((e) => {\n reject(e)\n })\n })\n }\n\n private async firstMessage (t: MsgTransport): Promise<MsgView> {\n return await new Promise<MsgView>((resolve, reject) => {\n t.receiver.on('msg', (msgType: string, msgView: MsgView) => {\n resolve(msgView.clone())\n })\n t.receiver.on('error', (e) => {\n reject(e)\n })\n })\n }\n\n protected async generate (): Promise<void> {\n const lipPath: string = path.join(this.root, 'data/examples/lipsum.txt')\n const words: string[] = await getWords(lipPath)\n const generator = new MessageGenerator(words, this.definitions)\n let density = 1\n if (argv.density) {\n density = parseFloat(argv.density)\n }\n if (isNaN(density)) {\n console.log('density must be numeric in range > 0 density <= 1.0')\n return\n }\n\n if (argv.script) {\n await this.script(generator, density)\n } else {\n await this.single(generator, density)\n }\n }\n\n private async single (generator: MessageGenerator, density: number): Promise<void> {\n if (!argv.type) {\n console.log('specify type to generate e.g. --type = AE')\n return\n }\n const msgType: string = `${argv.type}`\n let makeGroups: boolean = true\n if (argv.groups) {\n makeGroups = argv.groups === 'true'\n }\n const obj: ILooseObject = generator.generate(msgType, density, makeGroups)\n console.log(JSON.stringify(obj, null, 4))\n const fix: string = this.encodeObject(msgType, obj)\n const ft: MsgTransport = new MsgTransport(1, this.session.config, new StringDuplex(fix))\n if (argv.unit) {\n await this.unitTest(fix, obj, ft)\n } else {\n this.subscribe(ft)\n }\n }\n\n private async script (generator: MessageGenerator, density: number): Promise<void> {\n const buffer: ElasticBuffer = new ElasticBuffer()\n const repeats: number = argv.repeats || 50\n const key: string = MsgTag.MsgType.toString()\n const sf = this.definitions.simple.get(key)\n const session: AsciiMsgTransmitter = this.session\n for (let i = 0; i < repeats; ++i) {\n const msgType: string = sf ? MessageGenerator.getRandomEnum(sf).toString() : ''\n console.log(`i = ${i} ${msgType}`)\n const obj: ILooseObject = generator.generate(msgType, density)\n session.encodeMessage(msgType, obj)\n buffer.writeBuffer(session.buffer.slice())\n buffer.writeString(require('os').EOL)\n }\n await JsfixCmd.writeFile('./fix.txt', buffer.slice().toString('utf8'))\n }\n\n private async unitTest (fix: string, obj: ILooseObject, ft: MsgTransport): Promise<void> {\n const view: MsgView = await this.firstMessage(ft)\n const summary = view?.structure?.summary()\n\n await JsfixCmd.writeFile('./fix.txt', fix)\n await JsfixCmd.writeFile('./object.json', JSON.stringify(obj, null, 4))\n await JsfixCmd.writeFile('./token.txt', view.toString())\n await JsfixCmd.writeFile('./structure.json', JSON.stringify(summary, null, 4))\n }\n\n private encodeObject (msgType: string, object: ILooseObject): string {\n const session: AsciiMsgTransmitter = this.session\n session.encodeMessage(msgType, object)\n return session.buffer.toString()\n }\n\n private msg (): void {\n const definitions = this.definitions\n const m = definitions.message.get(argv.msg)\n if (m) {\n console.log(m.toString())\n }\n }\n\n private field (): void {\n let sf: SimpleFieldDefinition | undefined\n const tag: number = parseInt(argv.field, 10)\n const definitions = this.definitions\n if (!isNaN(tag)) {\n sf = definitions.tagToSimple[tag]\n } else {\n sf = definitions.simple.get(argv.field)\n }\n if (sf) {\n console.log(sf.toString())\n }\n }\n\n async ensureExists (path: string): Promise<any> {\n return await new Promise<any>((resolve, reject) => {\n fs.mkdirp(path, (err: Error) => {\n if (err) {\n reject(err)\n } else {\n resolve(true)\n }\n })\n })\n }\n\n private async compileDefinitions (outputPath: string): Promise<void> {\n await this.ensureExists(path.join(outputPath, 'set'))\n await this.ensureExists(path.join(outputPath, 'enum'))\n const definitions = this.definitions\n const compilerSettings: ICompilerSettings = require('../data/compiler.json')\n compilerSettings.output = outputPath\n const msgCompiler: MsgCompiler = new MsgCompiler(definitions, compilerSettings)\n await msgCompiler.generate()\n const enumCompiler: EnumCompiler = new EnumCompiler(definitions, compilerSettings)\n const writeFile = path.join(compilerSettings.output, './enum/all-enum.ts')\n await enumCompiler.generate(writeFile)\n }\n\n private trim (): string {\n this.setFilter()\n const types = this.filter.size > 0 ? Array.from(this.filter.keys()) : Array.from(this.definitions.simple.get('MsgType')?.enums.keys() ?? [])\n const qfb = new QuickFixXmlFileBuilder(this.definitions)\n qfb.write(types)\n return qfb.elasticBuffer.toString()\n }\n\n private async compile (): Promise<void> {\n let output = argv.output\n const dp = new DefinitionFactory().getDictPath(argv.dict)\n if (dp) {\n output = dp.output\n }\n output = path.join(this.root, output)\n await this.compileDefinitions(output)\n }\n\n sys: SessionContainer\n config: IJsFixConfig\n\n private async init (): Promise<any> {\n let session: string = argv.session || 'data/session/test-initiator.json'\n this.sys = new SessionContainer()\n this.sys.registerGlobal('error')\n session = this.norm(session)\n this.sessionDescription = require(session)\n const container = await this.sys.makeSystem(this.sessionDescription)\n this.config = container.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n this.definitions = this.config.definitions\n let dict: string\n if (argv.dict) {\n dict = argv.dict\n const df = await new DefinitionFactory().getDefinitions(dict)\n this.config.definitions = df\n this.definitions = df\n }\n const definitions = this.definitions\n if (argv.delimiter) {\n this.delimiter = AsciiChars.firstChar(argv.delimiter)\n this.config.delimiter = this.delimiter\n }\n this.jsonHelper = new JsonHelper(definitions)\n if (argv.session) {\n this.session = container.resolve<AsciiMsgTransmitter>(DITokens.MsgTransmitter)\n }\n }\n\n private setFilter (): void {\n const types: string[] = []\n if (argv.type != null) {\n if (Array.isArray(argv.type)) {\n argv.type.forEach((mt: any) => {\n types.push(mt)\n })\n } else {\n argv.type.split(',').forEach((mt: string) => {\n types.push(mt)\n })\n }\n types.forEach((mt: any) => {\n this.filter.set(mt, true)\n })\n }\n }\n\n private async dispatch (ft: MsgTransport): Promise<any> {\n this.setFilter()\n let time: boolean = false\n if (argv.time || argv.stats) {\n this.print = false\n time = true\n }\n this.subscribe(ft)\n const startsAt: Date = new Date()\n await ft.wait()\n const elapsed: number = new Date().getTime() - startsAt.getTime()\n if (time) {\n console.log(`messages ${this.messages} elapsed ms ${elapsed}`)\n }\n if (argv.stats) {\n console.log(JSON.stringify(this.stats, null, 4))\n }\n }\n\n private subscribe (ft: MsgTransport): void {\n this.messages = 0\n this.stats = {}\n const filter = this.filter\n // the receiver is message parser which is piped from an input stream - file, socket\n ft.receiver.on('msg', (msgType: string, m: AsciiView) => {\n if (filter) {\n if (filter.has(msgType)) {\n return\n }\n }\n ++this.messages\n this.onMsg(msgType, m)\n })\n }\n\n private onMsg (msgType: string, m: MsgView): void {\n const mode: PrintMode = JsfixCmd.getPrintMode()\n const print = this.print\n const stats = this.stats\n switch (mode) {\n case PrintMode.Stats: {\n let i: number = 0\n if (!stats[msgType]) {\n i = 1\n } else {\n i = stats[msgType] as number + 1\n }\n stats[msgType] = i\n break\n }\n\n case PrintMode.Verbose: {\n const verbose = m.toVerbose()\n if (verbose) {\n console.log(verbose)\n }\n break\n }\n\n case PrintMode.Object: {\n const asObject: ILooseObject = m.toObject() as ILooseObject\n if (print) {\n const def = this.definitions.message.get(msgType)\n console.log(`${msgType} [${def?.name}] = ${JSON.stringify(asObject, null, 4)}`)\n console.log()\n }\n break\n }\n\n case PrintMode.Structure: {\n const summary = m?.structure?.summary()\n if (print) {\n console.log(JSON.stringify(summary, null, 4))\n }\n break\n }\n\n case PrintMode.Token: {\n const tokens = m.toString()\n if (print) {\n console.log(tokens)\n }\n break\n }\n\n case PrintMode.Encoded: {\n const fix: string = this.encodeObject(msgType, m.toObject() as ILooseObject)\n console.log(fix)\n break\n }\n\n default:\n throw new Error(`unknown mode ${mode}`)\n }\n }\n\n private async replay (): Promise<any> {\n if (!argv.fix) {\n console.log('provide a path to fix file i.e. --fix=data/examples/execution-report/fix.txt')\n return\n }\n const fix: string = this.norm(argv.fix)\n const config = this.config\n const ft: MsgTransport = new MsgTransport(1, config, new FileDuplex(fix))\n await this.dispatch(ft)\n }\n\n private async promisedRead (f: string): Promise<string> {\n return new Promise((resolve, reject) => {\n fs.readFile(f, 'utf8', async (err: Error, contents: string) => {\n if (err) {\n reject(err)\n }\n resolve(contents)\n })\n })\n }\n\n async benchParse (contents: string, iterations: number): Promise<ParseSummary> {\n return new Promise((resolve, reject) => {\n const toParse = new StringDuplex(contents.repeat(iterations))\n const startsAt: Date = new Date()\n let i = 0\n const config = this.config\n const buffer = config.sessionContainer.resolve<ElasticBuffer>(DITokens.ParseBuffer)\n const asciiParser: MsgParser = new AsciiParser(config, toParse.readable, buffer)\n asciiParser.on('msg', (msgType: string, v: MsgView) => {\n ++i\n if (i === iterations) {\n const elapsed: number = new Date().getTime() - startsAt.getTime()\n const fields = v?.structure?.tags.nextTagPos ?? 0\n const summary = new ParseSummary(contents, v.toString(), msgType, iterations, elapsed, fields)\n resolve(summary)\n }\n })\n asciiParser.on('error', e => {\n reject(e)\n })\n })\n }\n\n private async benchmark (repeats: number): Promise<(ParseSummary | null)> {\n if (!argv.fix) {\n console.log('provide a path to fix file i.e. --fix=data/examples/execution-report/fix.txt')\n return null\n }\n return await new Promise<any>((resolve, reject) => {\n const fix: string = this.norm(argv.fix)\n this.promisedRead(fix)\n .then(contents => {\n this.benchParse(contents, repeats)\n .then((a: ParseSummary) => {\n resolve(a)\n })\n .catch(e => { reject(e) })\n }).catch(e => {\n reject(e)\n })\n })\n }\n\n private encode (): void {\n const session: AsciiMsgTransmitter = this.session\n if (!session) {\n console.log('provide a session json file e.g. --session=data/session/test-initiator.json')\n return\n }\n if (!argv.type) {\n console.log('provide a message type e.g. --type=8')\n return\n }\n if (!argv.json) {\n console.log('provide a json representation e.g. data/examples/execution-report/object.json')\n return\n }\n const ts: string = argv.type.toString()\n const msg: ILooseObject = this.jsonHelper.fromJson(path.join(this.root, argv.json), ts)\n session.encodeMessage(ts, msg)\n const fix: string = session.buffer.toString()\n console.log(fix)\n }\n\n private norm (p: string): string {\n let f: string = p\n if (!path.isAbsolute(p)) {\n f = path.join(this.root, f)\n }\n return f\n }\n}\n\nfunction showHelp (): void {\n console.log('this help page')\n console.log('npm run cmd')\n console.log('npm run cmd -- --help')\n console.log()\n\n console.log('print to console a trim quickfix format xml only including given message types')\n console.log('node dist/jsfix-cmd --dict=qf44 --trim --type=\"0,1,2,3,4,5,AE\"')\n\n console.log('token format i.e. [602] 687 (LegQty) = 33589')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/quickfix/FIX.4.4/execution-report/fix.txt --delimiter=\"|\" --tokens')\n console.log()\n\n console.log('token format use fix repo dictionary')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --fix=data/examples/quickfix/FIX.4.4/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens')\n console.log()\n\n console.log('structure format i.e. show locations of components etc.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --structures')\n console.log()\n\n console.log('full JS object in JSON format.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --objects')\n console.log()\n\n console.log('full JS object in JSON format - filter only type messages.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --type=8 --objects')\n console.log()\n\n console.log('timing stats and message counts. Structured parsing of all messages.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt --stats')\n console.log()\n\n console.log('encode a json object to fix format')\n console.log('node dist/jsfix-cmd --json=data/examples/FIX.4.4/quickfix/execution-report/object.json' +\n ' --session=data/session.json --type=8 --delimiter=\"|\"')\n console.log()\n\n console.log('display field definition')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --field=MsgType|35')\n console.log()\n\n console.log('display field use fix repo dictionary e.g. 271 MDEntrySize QTY Quantity or volume represented by the Market Data Entry.')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --field=MsgType')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --field=35')\n console.log()\n\n console.log('script to describe field in repository version 4.4')\n console.log('npm run repo44 -- --field=8')\n console.log()\n\n console.log('script to describe field in fixml')\n console.log('npm run fixml -- --field=50')\n console.log()\n\n console.log('generate unit test set of files - i.e. randomly generate an object, encode to fix. density 1 is all fields')\n console.log('node dist/jsfix-cmd --generate --type=AE --density=0.8 --unit --delimiter=\"|\" --session=data/session/test-initiator.json')\n console.log('npm run repo44-unit -- --type=AE')\n console.log('test script with no repeat groups')\n console.log('npm run repo44-unit -- --type=AE --groups=false')\n console.log()\n\n console.log('generate a fix log of randomly generated but syntactically correct messages')\n console.log('node dist/jsfix-cmd --generate --density=0.8 --repeats=50 --script --delimiter=\"|\" --session=data/session/test-initiator.json')\n console.log('npm run repo44-script')\n console.log('parse above generated script')\n console.log('npm run repo44-repscr')\n console.log()\n\n console.log('replay example repo fix file of 50 messages.')\n console.log('node dist/jsfix-cmd --session=data/session/test-initiator.json --fix=data/examples/FIX.4.4/fix.txt --delimiter=\"|\" --stats')\n console.log('npm run repo44-replay -- --stats')\n console.log('npm run repo44-replay -- --objects')\n console.log('npm run repo44-replay -- --tokens')\n console.log('npm run repo44-replay -- --structures')\n console.log()\n\n console.log('benchmark parse a message')\n console.log('node dist/jsfix-cmd --delimiter=\"|\" --session=data/session/test-initiator.json --fix=data/examples/FIX.4.4/repo/trade-capture-no-groups/fix.txt --benchmark')\n console.log('npm run repo44-bench -- --fix=data/examples/FIX.4.4/repo/trade-capture-no-groups/fix.txt')\n console.log()\n\n console.log('compile typescript interfaces - i.e. outputs to src/types/FIX4.4 - requires set and enum sub folders')\n console.log('npm run cmd -- --dict=repo40 --compile')\n console.log('npm run cmd -- --dict=repo41 --compile')\n console.log('npm run cmd -- --dict=repo42 --compile')\n console.log('npm run cmd -- --dict=repo43 --compile')\n console.log('npm run cmd -- --dict=repo44 --compile')\n console.log('npm run cmd -- --dict=repo50 --compile')\n console.log('npm run cmd -- --dict=repo50sp1 --compile')\n console.log('npm run cmd -- --dict=repo50sp2 --compile')\n console.log('npm run cmd -- --dict=repofixml --compile')\n console.log('npm run cmd -- --dict=qf44 --compile')\n console.log('npm run cmd -- --dict=data/handmade.xml --compile --output=src/types/handmade')\n\n console.log()\n}\n\nconst help: boolean = argv.h || argv.help\nif (help) {\n showHelp()\n} else {\n const cmd: JsfixCmd = new JsfixCmd()\n cmd.exec().then((res: boolean) => {\n if (!res) {\n showHelp()\n }\n }).catch((e: Error) => {\n console.error(e)\n })\n}\n"]}
|
|
1
|
+
{"version":3,"file":"jsfix-cmd.js","sourceRoot":"","sources":["../src/jsfix-cmd.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata'\n\nimport { ElasticBuffer, MsgView, MsgParser } from './buffer'\nimport { AsciiParser, AsciiView, AsciiChars } from './buffer/ascii'\nimport { ILooseObject } from './collections/collection'\nimport { SimpleFieldDefinition, FixDefinitions } from './dictionary/definition'\nimport { MessageGenerator, JsonHelper, getWords, DefinitionFactory } from './util'\nimport { ISessionDescription, FileDuplex, StringDuplex } from './transport'\n\nimport { MsgTag } from './types'\nimport { IJsFixConfig } from './config'\n\nimport * as util from 'util'\nimport minimist = require('minimist')\nimport * as path from 'path'\nimport { MsgTransport } from './transport/factory'\nimport { EnumCompiler, ICompilerSettings, MsgCompiler } from './dictionary/compiler'\nimport { AsciiMsgTransmitter } from './transport/ascii/ascii-msg-transmitter'\nimport { SessionContainer } from './runtime'\nimport { DITokens } from './runtime/di-tokens'\nimport buildOptions from 'minimist-options'\nimport { QuickFixXmlFileBuilder } from './dictionary/parser/quickfix/quick-fix-xml-file-builder'\n\nconst fs = require('fs')\n\nconst options = buildOptions({\n dict: {\n type: 'string',\n alias: 'd',\n default: 'data/FIX44.xml'\n },\n\n type: {\n type: 'string-array',\n alias: 't'\n },\n\n fix: {\n type: 'string',\n alias: 'f',\n default: 'data/FIX44.xml'\n },\n\n session: {\n type: 'string',\n alias: 's'\n },\n\n delimiter: {\n type: 'string',\n alias: 'l',\n default: '|'\n },\n\n help: {\n type: 'boolean',\n alias: ['h'],\n default: false\n },\n\n unit: {\n type: 'boolean',\n alias: ['u'],\n default: false\n },\n\n generate: {\n type: 'boolean',\n alias: ['g'],\n default: false\n },\n\n stats: {\n type: 'boolean',\n alias: ['st'],\n default: false\n },\n\n tokens: {\n type: 'boolean',\n alias: ['t'],\n default: false\n },\n\n objects: {\n type: 'boolean',\n alias: ['o'],\n default: true\n },\n\n structures: {\n type: 'boolean',\n alias: ['r'],\n default: false\n },\n\n script: {\n type: 'boolean',\n alias: ['i'],\n default: false\n },\n\n compile: {\n type: 'boolean',\n alias: ['c'],\n default: false\n },\n\n groups: {\n type: 'boolean',\n alias: ['g'],\n default: true\n },\n\n density: {\n type: 'number',\n alias: 'd',\n default: 0.8\n },\n\n repeats: {\n type: 'number',\n alias: 'r',\n default: 1\n },\n\n arr: {\n type: 'array',\n alias: 'a',\n default: []\n }\n\n /*\n booleans: {\n type: 'boolean-array',\n alias: 'b',\n default: [true, false]\n },\n\n numbers: {\n type: 'number-array',\n alias: 'n',\n default: [0, 1]\n },\n\n published: 'boolean',\n\n // Special option for positional arguments (`_` in minimist)\n arguments: 'string'\n */\n})\n\nconst argv: any = minimist(process.argv.slice(2), options)\n\nenum PrintMode {\n Structure = 1,\n Object = 2,\n Verbose = 3,\n Stats = 4,\n Token = 5,\n Encoded = 6\n}\n\nenum Command {\n Generate = 1,\n Replay = 2,\n Lookup = 3,\n Encode = 4,\n Benchmark = 5,\n Compile = 6,\n Trim,\n Unknown = 8\n}\n\nclass ParseSummary {\n public readonly micros_per_msg: number\n public readonly chars_per_second: number\n public readonly fields_per_second: number\n public readonly content_length: number\n\n constructor (\n public readonly content: string,\n public readonly view: string,\n public readonly msg_type: string,\n public readonly iterations: number,\n public readonly elapsed_ms: number,\n public readonly fields: number\n ) {\n this.content_length = this.content.length\n this.micros_per_msg = (this.elapsed_ms / this.iterations) * 1000\n this.chars_per_second = Math.round(this.content_length * this.iterations / this.elapsed_ms * 1000)\n this.fields_per_second = Math.round(this.fields * this.iterations / this.elapsed_ms * 1000)\n }\n}\n\nexport class JsfixCmd {\n private readonly root: string = path.join(__dirname, '../')\n private definitions: FixDefinitions\n private jsonHelper: JsonHelper\n private session: AsciiMsgTransmitter\n private sessionDescription: ISessionDescription\n private delimiter: number = AsciiChars.Soh\n private stats: ILooseObject = {}\n private readonly filter: Map<string, boolean> = new Map<string, boolean>()\n private messages: number = 0\n private print: boolean = true\n\n private static getCommand (): Command {\n let command: Command = Command.Unknown\n if (argv.trim) {\n command = Command.Trim\n } else if (argv.compile) {\n command = Command.Compile\n } else if (argv.generate) {\n command = Command.Generate\n } else if (argv.fix) {\n command = argv.benchmark ? Command.Benchmark : Command.Replay\n } else if (argv.field) {\n command = Command.Lookup\n } else if (argv.json) {\n command = Command.Encode\n } else if (argv.msg) {\n command = Command.Lookup\n }\n return command\n }\n\n private static getPrintMode (): PrintMode {\n let mode: PrintMode = PrintMode.Stats\n if (argv.tokens) {\n mode = PrintMode.Token\n } else if (argv.stats) {\n mode = PrintMode.Stats\n } else if (argv.objects) {\n mode = PrintMode.Object\n } else if (argv.verbose) {\n mode = PrintMode.Verbose\n } else if (argv.structures) {\n mode = PrintMode.Structure\n } else if (argv.encoded) {\n mode = PrintMode.Encoded\n } else if (argv.trim) {\n mode = PrintMode.Object\n }\n return mode\n }\n\n private static async writeFile (name: string, api: string): Promise<void> {\n const writer = util.promisify(fs.writeFile)\n await writer(name, api, { encoding: 'utf8' }\n ).catch((e: Error) => {\n throw e\n })\n }\n\n public async exec (): Promise<any> {\n return await new Promise<any>((resolve, reject) => {\n this.init().then(async () => {\n let actioned: boolean = true\n const command = JsfixCmd.getCommand()\n\n switch (command) {\n case Command.Generate: {\n // produce a test message or a valid fix log of n messages\n await this.generate()\n break\n }\n\n case Command.Encode: {\n // encode a json message back to fix\n this.encode()\n break\n }\n\n case Command.Replay: {\n // parse a file into either objects, tokens, structures or stats\n const repeats: number = !isNaN(argv.repeats) ? argv.repeats : 1\n try {\n for (let i: number = 0; i < repeats; ++i) {\n await this.replay()\n }\n } catch (e) {\n reject(e)\n }\n break\n }\n\n case Command.Benchmark: {\n // time how long to parse 10000 repeats of contents of file\n const repeats: number = !isNaN(argv.repeats) ? argv.repeats : 10000\n try {\n const summary = await this.benchmark(repeats)\n console.log(JSON.stringify(summary, null, 4))\n } catch (e) {\n reject(e)\n }\n break\n }\n\n case Command.Lookup: {\n // lookup a field\n if (argv.field) {\n this.field()\n } else {\n this.msg()\n }\n break\n }\n\n case Command.Compile: {\n await this.compile()\n break\n }\n\n case Command.Trim: {\n const xml = this.trim()\n console.log(xml)\n break\n }\n\n case Command.Unknown:\n default: {\n actioned = false\n }\n }\n resolve(actioned)\n }).catch((e) => {\n reject(e)\n })\n })\n }\n\n private async firstMessage (t: MsgTransport): Promise<MsgView> {\n return await new Promise<MsgView>((resolve, reject) => {\n t.receiver.on('msg', (msgType: string, msgView: MsgView) => {\n resolve(msgView.clone())\n })\n t.receiver.on('error', (e) => {\n reject(e)\n })\n })\n }\n\n protected async generate (): Promise<void> {\n const lipPath: string = path.join(this.root, 'data/examples/lipsum.txt')\n const words: string[] = await getWords(lipPath)\n const generator = new MessageGenerator(words, this.definitions)\n let density = 1\n if (argv.density) {\n density = parseFloat(argv.density)\n }\n if (isNaN(density)) {\n console.log('density must be numeric in range > 0 density <= 1.0')\n return\n }\n\n if (argv.script) {\n await this.script(generator, density)\n } else {\n await this.single(generator, density)\n }\n }\n\n private async single (generator: MessageGenerator, density: number): Promise<void> {\n if (!argv.type) {\n console.log('specify type to generate e.g. --type = AE')\n return\n }\n const msgType: string = `${argv.type}`\n let makeGroups: boolean = true\n if (argv.groups) {\n makeGroups = argv.groups === 'true'\n }\n const obj: ILooseObject = generator.generate(msgType, density, makeGroups)\n console.log(JSON.stringify(obj, null, 4))\n const fix: string = this.encodeObject(msgType, obj)\n const ft: MsgTransport = new MsgTransport(1, this.session.config, new StringDuplex(fix))\n if (argv.unit) {\n await this.unitTest(fix, obj, ft)\n } else {\n this.subscribe(ft)\n }\n }\n\n private async script (generator: MessageGenerator, density: number): Promise<void> {\n const buffer: ElasticBuffer = new ElasticBuffer()\n const repeats: number = argv.repeats || 50\n const key: string = MsgTag.MsgType.toString()\n const sf = this.definitions.simple.get(key)\n const session: AsciiMsgTransmitter = this.session\n for (let i = 0; i < repeats; ++i) {\n const msgType: string = sf ? MessageGenerator.getRandomEnum(sf).toString() : ''\n console.log(`i = ${i} ${msgType}`)\n const obj: ILooseObject = generator.generate(msgType, density)\n session.encodeMessage(msgType, obj)\n buffer.writeBuffer(session.buffer.slice())\n buffer.writeString(require('os').EOL)\n }\n await JsfixCmd.writeFile('./fix.txt', buffer.slice().toString('utf8'))\n }\n\n private async unitTest (fix: string, obj: ILooseObject, ft: MsgTransport): Promise<void> {\n const view: MsgView = await this.firstMessage(ft)\n const summary = view?.structure?.summary()\n\n await JsfixCmd.writeFile('./fix.txt', fix)\n await JsfixCmd.writeFile('./object.json', JSON.stringify(obj, null, 4))\n await JsfixCmd.writeFile('./token.txt', view.toString())\n await JsfixCmd.writeFile('./structure.json', JSON.stringify(summary, null, 4))\n }\n\n private encodeObject (msgType: string, object: ILooseObject): string {\n const session: AsciiMsgTransmitter = this.session\n session.encodeMessage(msgType, object)\n return session.buffer.toString()\n }\n\n private msg (): void {\n const definitions = this.definitions\n const m = definitions.message.get(argv.msg)\n if (m) {\n console.log(m.toString())\n }\n }\n\n private field (): void {\n let sf: SimpleFieldDefinition | undefined\n const tag: number = parseInt(argv.field, 10)\n const definitions = this.definitions\n if (!isNaN(tag)) {\n sf = definitions.tagToSimple[tag]\n } else {\n sf = definitions.simple.get(argv.field)\n }\n if (sf) {\n console.log(sf.toString())\n }\n }\n\n async ensureExists (path: string): Promise<any> {\n return await new Promise<any>((resolve, reject) => {\n fs.mkdir(path, { recursive: true }, (err: Error) => {\n if (err) {\n reject(err)\n } else {\n resolve(true)\n }\n })\n })\n }\n\n private async compileDefinitions (outputPath: string): Promise<void> {\n await this.ensureExists(path.join(outputPath, 'set'))\n await this.ensureExists(path.join(outputPath, 'enum'))\n const definitions = this.definitions\n const compilerSettings: ICompilerSettings = require('../data/compiler.json')\n compilerSettings.output = outputPath\n const msgCompiler: MsgCompiler = new MsgCompiler(definitions, compilerSettings)\n await msgCompiler.generate()\n const enumCompiler: EnumCompiler = new EnumCompiler(definitions, compilerSettings)\n const writeFile = path.join(compilerSettings.output, './enum/all-enum.ts')\n await enumCompiler.generate(writeFile)\n }\n\n private trim (): string {\n this.setFilter()\n const types = this.filter.size > 0 ? Array.from(this.filter.keys()) : Array.from(this.definitions.simple.get('MsgType')?.enums.keys() ?? [])\n const qfb = new QuickFixXmlFileBuilder(this.definitions)\n qfb.write(types)\n return qfb.elasticBuffer.toString()\n }\n\n private async compile (): Promise<void> {\n let output = argv.output\n const dp = new DefinitionFactory().getDictPath(argv.dict)\n if (dp) {\n output = dp.output\n }\n output = path.join(this.root, output)\n await this.compileDefinitions(output)\n }\n\n sys: SessionContainer\n config: IJsFixConfig\n\n private async init (): Promise<any> {\n let session: string = argv.session || 'data/session/test-initiator.json'\n this.sys = new SessionContainer()\n this.sys.registerGlobal('error')\n session = this.norm(session)\n this.sessionDescription = require(session)\n const container = await this.sys.makeSystem(this.sessionDescription)\n this.config = container.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n this.definitions = this.config.definitions\n let dict: string\n if (argv.dict) {\n dict = argv.dict\n const df = await new DefinitionFactory().getDefinitions(dict)\n this.config.definitions = df\n this.definitions = df\n }\n const definitions = this.definitions\n if (argv.delimiter) {\n this.delimiter = AsciiChars.firstChar(argv.delimiter)\n this.config.delimiter = this.delimiter\n }\n this.jsonHelper = new JsonHelper(definitions)\n if (argv.session) {\n this.session = container.resolve<AsciiMsgTransmitter>(DITokens.MsgTransmitter)\n }\n }\n\n private setFilter (): void {\n const types: string[] = []\n if (argv.type != null) {\n if (Array.isArray(argv.type)) {\n argv.type.forEach((mt: any) => {\n types.push(mt)\n })\n } else {\n argv.type.split(',').forEach((mt: string) => {\n types.push(mt)\n })\n }\n types.forEach((mt: any) => {\n this.filter.set(mt, true)\n })\n }\n }\n\n private async dispatch (ft: MsgTransport): Promise<any> {\n this.setFilter()\n let time: boolean = false\n if (argv.time || argv.stats) {\n this.print = false\n time = true\n }\n this.subscribe(ft)\n const startsAt: Date = new Date()\n await ft.wait()\n const elapsed: number = new Date().getTime() - startsAt.getTime()\n if (time) {\n console.log(`messages ${this.messages} elapsed ms ${elapsed}`)\n }\n if (argv.stats) {\n console.log(JSON.stringify(this.stats, null, 4))\n }\n }\n\n private subscribe (ft: MsgTransport): void {\n this.messages = 0\n this.stats = {}\n const filter = this.filter\n // the receiver is message parser which is piped from an input stream - file, socket\n ft.receiver.on('msg', (msgType: string, m: AsciiView) => {\n if (filter) {\n if (filter.has(msgType)) {\n return\n }\n }\n ++this.messages\n this.onMsg(msgType, m)\n })\n }\n\n private onMsg (msgType: string, m: MsgView): void {\n const mode: PrintMode = JsfixCmd.getPrintMode()\n const print = this.print\n const stats = this.stats\n switch (mode) {\n case PrintMode.Stats: {\n let i: number = 0\n if (!stats[msgType]) {\n i = 1\n } else {\n i = stats[msgType] as number + 1\n }\n stats[msgType] = i\n break\n }\n\n case PrintMode.Verbose: {\n const verbose = m.toVerbose()\n if (verbose) {\n console.log(verbose)\n }\n break\n }\n\n case PrintMode.Object: {\n const asObject: ILooseObject = m.toObject() as ILooseObject\n if (print) {\n const def = this.definitions.message.get(msgType)\n console.log(`${msgType} [${def?.name}] = ${JSON.stringify(asObject, null, 4)}`)\n console.log()\n }\n break\n }\n\n case PrintMode.Structure: {\n const summary = m?.structure?.summary()\n if (print) {\n console.log(JSON.stringify(summary, null, 4))\n }\n break\n }\n\n case PrintMode.Token: {\n const tokens = m.toString()\n if (print) {\n console.log(tokens)\n }\n break\n }\n\n case PrintMode.Encoded: {\n const fix: string = this.encodeObject(msgType, m.toObject() as ILooseObject)\n console.log(fix)\n break\n }\n\n default:\n throw new Error(`unknown mode ${mode}`)\n }\n }\n\n private async replay (): Promise<any> {\n if (!argv.fix) {\n console.log('provide a path to fix file i.e. --fix=data/examples/execution-report/fix.txt')\n return\n }\n const fix: string = this.norm(argv.fix)\n const config = this.config\n const ft: MsgTransport = new MsgTransport(1, config, new FileDuplex(fix))\n await this.dispatch(ft)\n }\n\n private async promisedRead (f: string): Promise<string> {\n return new Promise((resolve, reject) => {\n fs.readFile(f, 'utf8', async (err: Error, contents: string) => {\n if (err) {\n reject(err)\n }\n resolve(contents)\n })\n })\n }\n\n async benchParse (contents: string, iterations: number): Promise<ParseSummary> {\n return new Promise((resolve, reject) => {\n const toParse = new StringDuplex(contents.repeat(iterations))\n const startsAt: Date = new Date()\n let i = 0\n const config = this.config\n const buffer = config.sessionContainer.resolve<ElasticBuffer>(DITokens.ParseBuffer)\n const asciiParser: MsgParser = new AsciiParser(config, toParse.readable, buffer)\n asciiParser.on('msg', (msgType: string, v: MsgView) => {\n ++i\n if (i === iterations) {\n const elapsed: number = new Date().getTime() - startsAt.getTime()\n const fields = v?.structure?.tags.nextTagPos ?? 0\n const summary = new ParseSummary(contents, v.toString(), msgType, iterations, elapsed, fields)\n resolve(summary)\n }\n })\n asciiParser.on('error', e => {\n reject(e)\n })\n })\n }\n\n private async benchmark (repeats: number): Promise<(ParseSummary | null)> {\n if (!argv.fix) {\n console.log('provide a path to fix file i.e. --fix=data/examples/execution-report/fix.txt')\n return null\n }\n return await new Promise<any>((resolve, reject) => {\n const fix: string = this.norm(argv.fix)\n this.promisedRead(fix)\n .then(contents => {\n this.benchParse(contents, repeats)\n .then((a: ParseSummary) => {\n resolve(a)\n })\n .catch(e => { reject(e) })\n }).catch(e => {\n reject(e)\n })\n })\n }\n\n private encode (): void {\n const session: AsciiMsgTransmitter = this.session\n if (!session) {\n console.log('provide a session json file e.g. --session=data/session/test-initiator.json')\n return\n }\n if (!argv.type) {\n console.log('provide a message type e.g. --type=8')\n return\n }\n if (!argv.json) {\n console.log('provide a json representation e.g. data/examples/execution-report/object.json')\n return\n }\n const ts: string = argv.type.toString()\n const msg: ILooseObject = this.jsonHelper.fromJson(path.join(this.root, argv.json), ts)\n session.encodeMessage(ts, msg)\n const fix: string = session.buffer.toString()\n console.log(fix)\n }\n\n private norm (p: string): string {\n let f: string = p\n if (!path.isAbsolute(p)) {\n f = path.join(this.root, f)\n }\n return f\n }\n}\n\nfunction showHelp (): void {\n console.log('this help page')\n console.log('npm run cmd')\n console.log('npm run cmd -- --help')\n console.log()\n\n console.log('print to console a trim quickfix format xml only including given message types')\n console.log('node dist/jsfix-cmd --dict=qf44 --trim --type=\"0,1,2,3,4,5,AE\"')\n\n console.log('token format i.e. [602] 687 (LegQty) = 33589')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/quickfix/FIX.4.4/execution-report/fix.txt --delimiter=\"|\" --tokens')\n console.log()\n\n console.log('token format use fix repo dictionary')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --fix=data/examples/quickfix/FIX.4.4/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens')\n console.log()\n\n console.log('structure format i.e. show locations of components etc.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --structures')\n console.log()\n\n console.log('full JS object in JSON format.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --objects')\n console.log()\n\n console.log('full JS object in JSON format - filter only type messages.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --type=8 --objects')\n console.log()\n\n console.log('timing stats and message counts. Structured parsing of all messages.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt --stats')\n console.log()\n\n console.log('encode a json object to fix format')\n console.log('node dist/jsfix-cmd --json=data/examples/FIX.4.4/quickfix/execution-report/object.json' +\n ' --session=data/session.json --type=8 --delimiter=\"|\"')\n console.log()\n\n console.log('display field definition')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --field=MsgType|35')\n console.log()\n\n console.log('display field use fix repo dictionary e.g. 271 MDEntrySize QTY Quantity or volume represented by the Market Data Entry.')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --field=MsgType')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --field=35')\n console.log()\n\n console.log('script to describe field in repository version 4.4')\n console.log('npm run repo44 -- --field=8')\n console.log()\n\n console.log('script to describe field in fixml')\n console.log('npm run fixml -- --field=50')\n console.log()\n\n console.log('generate unit test set of files - i.e. randomly generate an object, encode to fix. density 1 is all fields')\n console.log('node dist/jsfix-cmd --generate --type=AE --density=0.8 --unit --delimiter=\"|\" --session=data/session/test-initiator.json')\n console.log('npm run repo44-unit -- --type=AE')\n console.log('test script with no repeat groups')\n console.log('npm run repo44-unit -- --type=AE --groups=false')\n console.log()\n\n console.log('generate a fix log of randomly generated but syntactically correct messages')\n console.log('node dist/jsfix-cmd --generate --density=0.8 --repeats=50 --script --delimiter=\"|\" --session=data/session/test-initiator.json')\n console.log('npm run repo44-script')\n console.log('parse above generated script')\n console.log('npm run repo44-repscr')\n console.log()\n\n console.log('replay example repo fix file of 50 messages.')\n console.log('node dist/jsfix-cmd --session=data/session/test-initiator.json --fix=data/examples/FIX.4.4/fix.txt --delimiter=\"|\" --stats')\n console.log('npm run repo44-replay -- --stats')\n console.log('npm run repo44-replay -- --objects')\n console.log('npm run repo44-replay -- --tokens')\n console.log('npm run repo44-replay -- --structures')\n console.log()\n\n console.log('benchmark parse a message')\n console.log('node dist/jsfix-cmd --delimiter=\"|\" --session=data/session/test-initiator.json --fix=data/examples/FIX.4.4/repo/trade-capture-no-groups/fix.txt --benchmark')\n console.log('npm run repo44-bench -- --fix=data/examples/FIX.4.4/repo/trade-capture-no-groups/fix.txt')\n console.log()\n\n console.log('compile typescript interfaces - i.e. outputs to src/types/FIX4.4 - requires set and enum sub folders')\n console.log('npm run cmd -- --dict=repo40 --compile')\n console.log('npm run cmd -- --dict=repo41 --compile')\n console.log('npm run cmd -- --dict=repo42 --compile')\n console.log('npm run cmd -- --dict=repo43 --compile')\n console.log('npm run cmd -- --dict=repo44 --compile')\n console.log('npm run cmd -- --dict=repo50 --compile')\n console.log('npm run cmd -- --dict=repo50sp1 --compile')\n console.log('npm run cmd -- --dict=repo50sp2 --compile')\n console.log('npm run cmd -- --dict=repofixml --compile')\n console.log('npm run cmd -- --dict=qf44 --compile')\n console.log('npm run cmd -- --dict=data/handmade.xml --compile --output=src/types/handmade')\n\n console.log()\n}\n\nconst help: boolean = argv.h || argv.help\nif (help) {\n showHelp()\n} else {\n const cmd: JsfixCmd = new JsfixCmd()\n cmd.exec().then((res: boolean) => {\n if (!res) {\n showHelp()\n }\n }).catch((e: Error) => {\n console.error(e)\n })\n}\n"]}
|
|
@@ -16,7 +16,6 @@ const config_1 = require("../config");
|
|
|
16
16
|
const di_tokens_1 = require("./di-tokens");
|
|
17
17
|
const make_config_1 = require("./make-config");
|
|
18
18
|
const tcp_1 = require("../transport/tcp");
|
|
19
|
-
const http_1 = require("../transport/http");
|
|
20
19
|
const ascii_msg_transmitter_1 = require("../transport/ascii/ascii-msg-transmitter");
|
|
21
20
|
const fixml_msg_transmitter_1 = require("../transport/fixml/fixml-msg-transmitter");
|
|
22
21
|
const fixml_1 = require("../transport/fixml");
|
|
@@ -24,6 +23,9 @@ const ascii_1 = require("../transport/ascii");
|
|
|
24
23
|
const buffer_1 = require("../buffer");
|
|
25
24
|
const ascii_2 = require("../buffer/ascii");
|
|
26
25
|
const fixml_2 = require("../buffer/fixml");
|
|
26
|
+
function httpTransport() {
|
|
27
|
+
return require('../transport/http');
|
|
28
|
+
}
|
|
27
29
|
class SessionContainer {
|
|
28
30
|
constructor(msgFactoryProvider = null) {
|
|
29
31
|
this.msgFactoryProvider = msgFactoryProvider;
|
|
@@ -151,23 +153,24 @@ class SessionContainer {
|
|
|
151
153
|
useClass: fixml_2.FixmlEncoder
|
|
152
154
|
});
|
|
153
155
|
sessionContainer.registerInstance(di_tokens_1.DITokens.TransmitBuffer, new buffer_1.ElasticBuffer(sendSize));
|
|
154
|
-
|
|
155
|
-
|
|
156
|
+
const { HttpInitiator, HttpAcceptorListener, HttpJsonSampleAdapter } = httpTransport();
|
|
157
|
+
sessionContainer.register(HttpAcceptorListener, {
|
|
158
|
+
useClass: HttpAcceptorListener
|
|
156
159
|
});
|
|
157
|
-
sessionContainer.register(
|
|
158
|
-
useClass:
|
|
160
|
+
sessionContainer.register(HttpInitiator, {
|
|
161
|
+
useClass: HttpInitiator
|
|
159
162
|
});
|
|
160
163
|
if (this.isInitiator(description)) {
|
|
161
164
|
sessionContainer.register(di_tokens_1.DITokens.FixEntity, {
|
|
162
|
-
useClass:
|
|
165
|
+
useClass: HttpInitiator
|
|
163
166
|
});
|
|
164
167
|
sessionContainer.register(di_tokens_1.DITokens.IHttpAdapter, {
|
|
165
|
-
useClass:
|
|
168
|
+
useClass: HttpJsonSampleAdapter
|
|
166
169
|
});
|
|
167
170
|
}
|
|
168
171
|
else {
|
|
169
172
|
sessionContainer.register(di_tokens_1.DITokens.FixEntity, {
|
|
170
|
-
useClass:
|
|
173
|
+
useClass: HttpAcceptorListener
|
|
171
174
|
});
|
|
172
175
|
}
|
|
173
176
|
}
|