jspurefix 5.10.3 → 5.10.5
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 +82 -14
- package/dist/buffer/elastic-buffer.js +3 -3
- package/dist/buffer/elastic-buffer.js.map +1 -1
- package/dist/buffer/encode-proxy.js.map +1 -1
- package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
- package/dist/buffer/msg-view.js.map +1 -1
- package/dist/config/winston-logger.js.map +1 -1
- package/dist/dictionary/parser/fixml/components-parser.js.map +1 -1
- package/dist/dictionary/parser/fixml/fields-parser.js.map +1 -1
- package/dist/dictionary/parser/fixml/include-graph.js.map +1 -1
- package/dist/jsfix-bench.js.map +1 -1
- package/dist/sample/http/oms/app.js.map +1 -1
- package/dist/sample/http/oms/oms-factory.js.map +1 -1
- package/dist/sample/tcp/qf-md/app.js.map +1 -1
- package/dist/sample/tcp/skeleton/app.js.map +1 -1
- package/dist/sample/tcp/trade-capture/app-launcher.js.map +1 -1
- package/dist/store/fix-msg-memory-store.js.map +1 -1
- package/dist/transport/fixml/fixml-session-msg-factory.js.map +1 -1
- package/dist/transport/session/clone-session-description.js.map +1 -1
- package/dist/transport/tcp/tls-options-factory.js.map +1 -1
- package/jsfix.test_client.txt +62 -62
- package/jsfix.test_server.txt +72 -72
- package/package.json +5 -3
- package/src/buffer/elastic-buffer.ts +13 -3
- package/src/buffer/encode-proxy.ts +1 -1
- package/src/buffer/fixml/fixml-encoder.ts +1 -1
- package/src/buffer/msg-view.ts +1 -1
- package/src/config/winston-logger.ts +1 -1
- package/src/dictionary/parser/fixml/components-parser.ts +2 -2
- package/src/dictionary/parser/fixml/fields-parser.ts +1 -1
- package/src/dictionary/parser/fixml/include-graph.ts +1 -1
- package/src/jsfix-bench.ts +1 -1
- package/src/sample/http/oms/app.ts +1 -1
- package/src/sample/http/oms/oms-factory.ts +4 -4
- package/src/sample/tcp/qf-md/app.ts +1 -1
- package/src/sample/tcp/skeleton/app.ts +1 -1
- package/src/sample/tcp/trade-capture/app-launcher.ts +1 -1
- package/src/store/fix-msg-memory-store.ts +1 -1
- package/src/transport/fixml/fixml-session-msg-factory.ts +5 -5
- package/src/transport/session/clone-session-description.ts +1 -1
- package/src/transport/tcp/tls-options-factory.ts +2 -2
package/ATDL_PLAN.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# FIXatdl renderer and end-to-end test harness
|
|
2
2
|
|
|
3
|
-
Design notes from 2026-08-08. Nothing is built yet. This
|
|
4
|
-
can start from the thinking rather than redo it.
|
|
3
|
+
Design notes from 2026-08-08, fixtures added 2026-08-09. Nothing is built yet. This
|
|
4
|
+
exists so the next session can start from the thinking rather than redo it.
|
|
5
5
|
|
|
6
|
-
**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
**Where this lives:** staying in jspurefix for now (decided 2026-08-09). It is not
|
|
7
|
+
engine work and will want its own repository once there is code, but the back-end half
|
|
8
|
+
is a jspurefix acceptor and there is no benefit to a second repository holding only a
|
|
9
|
+
markdown file.
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ engine. Move it when the code starts.
|
|
|
15
15
|
A broker publishes a FIXatdl document per algorithm: an XML definition of its
|
|
16
16
|
parameters and the order ticket used to fill them in. An EMS — Bloomberg EMSX,
|
|
17
17
|
Flextrade, Portware, Fidessa, ITG Triton — renders the ticket from that document, and
|
|
18
|
-
the values map onto FIX tags
|
|
18
|
+
the values map onto FIX tags.
|
|
19
19
|
|
|
20
20
|
The observed pain, in more than one shop: getting a definition rendered is cobbled
|
|
21
21
|
together, and **you cannot tell whether a definition is sound until a vendor renders
|
|
@@ -98,12 +98,80 @@ is FIXML-shaped and is not a good fit for this.
|
|
|
98
98
|
|
|
99
99
|
~1,500 lines of interpreter, zero runtime dependencies.
|
|
100
100
|
|
|
101
|
+
## Fixtures
|
|
102
|
+
|
|
103
|
+
The expression engine is only as good as what it is tested against, and this is the
|
|
104
|
+
part most likely to be underestimated. Real broker documents vary enormously and most
|
|
105
|
+
are proprietary — the user has worked at a bank where every algo was defined in ATDL,
|
|
106
|
+
none of it publishable.
|
|
107
|
+
|
|
108
|
+
### routefire/rf-fix-atdl
|
|
109
|
+
|
|
110
|
+
`rf_strategies-v1.1.xml` — the first public fixture, 184 lines, 7 strategies (TWAP,
|
|
111
|
+
VWAP, PVOL, ISO, FAST, ULMT, RLMT).
|
|
112
|
+
|
|
113
|
+
What it settles:
|
|
114
|
+
|
|
115
|
+
- **Version is 1.1.** Namespaces are `.../FIXatdl-1-1/Core`, `/Validation`, `/Layout`,
|
|
116
|
+
`/Flow`, `/Timezones`. Target 1.1 and stop worrying about it.
|
|
117
|
+
- **Strategy identification is an attribute of `<Strategies>`:**
|
|
118
|
+
`strategyIdentifierTag="847"` and `versionIdentifierTag="7621"`, with each
|
|
119
|
+
`<Strategy>` carrying `wireValue`. So the algorithm is named on the wire in tag 847
|
|
120
|
+
and the parameters go elsewhere.
|
|
121
|
+
- **Parameters carry their own `fixTag`** — `126`, `168`, and customs `8001`–`8004`
|
|
122
|
+
here. This resolves the earlier open question about `NoStrategyParameters`: the
|
|
123
|
+
mapping is *data driven per parameter*, not a per-broker configuration switch. Build
|
|
124
|
+
it from the `fixTag` attribute; treat the strategy-parameters group as a second
|
|
125
|
+
mode for documents that omit `fixTag`, not as the default.
|
|
126
|
+
- Useful attributes in the wild: `use="required|optional"`, `minValue`/`maxValue`,
|
|
127
|
+
`localMktTz`, `initValue`, `initValueMode`, `increment`.
|
|
128
|
+
|
|
129
|
+
**What it does not exercise, which matters more.** This file is a skeleton — good for
|
|
130
|
+
proving the parser, nearly useless for proving the interpreter:
|
|
131
|
+
|
|
132
|
+
| | |
|
|
133
|
+
|---|---|
|
|
134
|
+
| `StateRule` | **none at all** — zero occurrences |
|
|
135
|
+
| Control types | only `Clock_t`, `SingleSpinner_t`, `TextField_t` |
|
|
136
|
+
| Parameter types | only `Float_t`, `Int_t`, `UTCTimestamp_t` |
|
|
137
|
+
| `EnumPair` | none — so no dropdowns, no radio groups, no checkboxes |
|
|
138
|
+
| Validation | two `val:StrategyEdit`, each a single `val:Edit`, operator `GT` only |
|
|
139
|
+
| `logicOperator` / `editRef` | none — no AND/OR, no reusable named edits |
|
|
140
|
+
| `flow:` | namespace declared, never used |
|
|
141
|
+
|
|
142
|
+
So it will not tell us whether the hard half is right. Enable/disable/visibility logic
|
|
143
|
+
is entirely absent, and validation never gets beyond one field-to-field comparison.
|
|
144
|
+
|
|
145
|
+
### What a representative fixture needs
|
|
146
|
+
|
|
147
|
+
Worth building by hand from experience rather than waiting to find one. Aim to cover:
|
|
148
|
+
|
|
149
|
+
- `StateRule` driving `enabled`, `visible` and value assignment, keyed off another
|
|
150
|
+
control's value
|
|
151
|
+
- a `StateRule` chain — B depends on A, C depends on B — to prove evaluation order and
|
|
152
|
+
catch cycles
|
|
153
|
+
- `DropDownList_t` and `RadioButtonList_t` with `EnumPair` (`wireValue` distinct from
|
|
154
|
+
`uiRep`, which is where renderers commonly go wrong)
|
|
155
|
+
- `CheckBox_t` and its `checkedEnumRef` / `uncheckedEnumRef`
|
|
156
|
+
- `val:Edit` with `logicOperator="AND"` / `"OR"` and nested edits
|
|
157
|
+
- `val:Edit` comparing against a literal `value=` as well as `field2=`
|
|
158
|
+
- a named `<val:Edit id="...">` referenced by `editRef`, since reuse is where scoping
|
|
159
|
+
bugs live
|
|
160
|
+
- `use="required"` interacting with a control that a `StateRule` has disabled — what
|
|
161
|
+
should validation do then? Real documents disagree, and vendors disagree with each
|
|
162
|
+
other
|
|
163
|
+
- a deliberately broken document, so the tool's error reporting is exercised too
|
|
164
|
+
|
|
101
165
|
## Open questions for next session
|
|
102
166
|
|
|
103
|
-
1. Own repository or a folder here
|
|
104
|
-
2. Which
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
167
|
+
1. ~~Own repository or a folder here?~~ Settled: stays here for now.
|
|
168
|
+
2. ~~Which FIXatdl version?~~ Settled: 1.1.
|
|
169
|
+
3. ~~How do parameters map onto the order?~~ Settled: per-parameter `fixTag`, with the
|
|
170
|
+
strategy-parameters group as a fallback mode.
|
|
171
|
+
4. Can any further public documents be found, or is the hand-built fixture above the
|
|
172
|
+
realistic path? The user has significant algo trading experience and can produce
|
|
173
|
+
something representative — that is likely to be worth more than another public file
|
|
174
|
+
of the routefire kind.
|
|
175
|
+
5. What does the harness do when a `StateRule` disables a `required` parameter? Decide
|
|
176
|
+
deliberately and document it, because it is the sort of thing that differs between
|
|
177
|
+
EMSs and is exactly what the tool exists to surface.
|
|
@@ -19,7 +19,7 @@ const mathjs_1 = require("mathjs");
|
|
|
19
19
|
const tsyringe_1 = require("tsyringe");
|
|
20
20
|
const di_tokens_1 = require("../runtime/di-tokens");
|
|
21
21
|
let ElasticBuffer = ElasticBuffer_1 = class ElasticBuffer {
|
|
22
|
-
constructor(size = 6 * 1024, returnTo =
|
|
22
|
+
constructor(size = 6 * 1024, returnTo = 64 * 1024) {
|
|
23
23
|
this.size = size;
|
|
24
24
|
this.returnTo = returnTo;
|
|
25
25
|
this.ptr = 0;
|
|
@@ -50,7 +50,7 @@ let ElasticBuffer = ElasticBuffer_1 = class ElasticBuffer {
|
|
|
50
50
|
}
|
|
51
51
|
setPos(ptr) {
|
|
52
52
|
const r = this.ptr;
|
|
53
|
-
if (ptr >= 0 && ptr <= this.
|
|
53
|
+
if (ptr >= 0 && ptr <= this.buffer.length) {
|
|
54
54
|
this.ptr = ptr;
|
|
55
55
|
}
|
|
56
56
|
return r;
|
|
@@ -130,7 +130,7 @@ let ElasticBuffer = ElasticBuffer_1 = class ElasticBuffer {
|
|
|
130
130
|
const shrink = this.stretched > this.returnTo;
|
|
131
131
|
if (shrink) {
|
|
132
132
|
this.buffer = Buffer.allocUnsafe(this.returnTo);
|
|
133
|
-
this.stretched = this.
|
|
133
|
+
this.stretched = this.returnTo;
|
|
134
134
|
}
|
|
135
135
|
return shrink;
|
|
136
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elastic-buffer.js","sourceRoot":"","sources":["../../src/buffer/elastic-buffer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from './ascii/ascii-chars'\nimport { format } from 'mathjs'\nimport { inject, injectable } from 'tsyringe'\nimport { DITokens } from '../runtime/di-tokens'\n\n@injectable()\nexport class ElasticBuffer {\n private buffer: Buffer\n private ptr: number = 0\n private stretched: number\n\n constructor (@inject(DITokens.elasticBufferSize) public readonly size: number = 6 * 1024,\n @inject(DITokens.elasticBufferReturnSize) public readonly returnTo: number = 6 * 1024) {\n this.size = Math.max(1, this.size)\n this.buffer = Buffer.allocUnsafe(this.size)\n this.returnTo = Math.max(this.size, this.returnTo)\n this.stretched = this.size\n }\n\n private static precisionRound (n: number, precision: number): number {\n const factor: number = Math.pow(10, precision)\n return Math.round(n * factor) / factor\n }\n\n private static HowManyDigits (v: number): number {\n v = Math.abs(v)\n let digits: number = 0\n let w: number = v\n while (w > 0) {\n ++digits\n w = Math.floor(w / 10)\n }\n return Math.max(digits, 1)\n }\n\n public currentSize (): number {\n return this.stretched\n }\n\n public getPos (): number {\n return this.ptr\n }\n\n public setPos (ptr: number): number {\n const r = this.ptr\n if (ptr >= 0 && ptr <= this.size) {\n this.ptr = ptr\n }\n return r\n }\n\n public get (pos: number): number {\n return this.buffer[pos]\n }\n\n public writeBoolean (v: boolean): number {\n this.writeChar(v ? AsciiChars.Y : AsciiChars.N)\n return this.ptr\n }\n\n public switchChar (c: number): number {\n this.buffer[this.ptr - 1] = c\n return this.ptr\n }\n\n public saveChar (c: number): number {\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeChar (c: number): number {\n if (c > 255) throw new Error(`can't write ${c} to a byte`)\n this.checkGrowBuffer(1)\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeString (s: string): number {\n const begin = this.ptr\n this.checkGrowBuffer(s.length)\n const buffer = this.buffer\n this.ptr += buffer.write(s, begin, s.length, 'ascii')\n return this.ptr\n }\n\n public writeBuffer (v: Buffer): number {\n const begin = this.ptr\n this.checkGrowBuffer(v.length)\n const buffer = this.buffer\n const srcLen: number = v.length\n this.ptr += v.copy(buffer, begin, 0, srcLen)\n return this.ptr\n }\n\n public writeWholeNumber (n: number): number {\n const digits: number = ElasticBuffer.HowManyDigits(n)\n let reserve = digits\n const sign: number = Math.sign(n)\n let p: number = Math.pow(10, digits - 1)\n let v: number = Math.abs(n)\n if (sign < 0) {\n reserve++\n }\n this.checkGrowBuffer(reserve)\n const buffer = this.buffer\n if (sign < 0) {\n buffer[this.ptr++] = AsciiChars.Minus\n }\n while (p >= 1) {\n const d: number = Math.floor(v / p)\n v -= d * p\n p /= 10\n buffer[this.ptr++] = AsciiChars.Zero + d\n }\n\n return this.ptr\n }\n\n public writeNumber (v: number, places: number = 13): number {\n const rounded: number = Math.floor(v)\n const fraction: number = ElasticBuffer.precisionRound(v - rounded, places)\n if (fraction === 0) {\n // integer\n return this.writeWholeNumber(v)\n } else {\n // decimal with fraction turn to string\n const s: string = format(v, { notation: 'fixed' })\n return this.writeString(s)\n }\n }\n\n public reset (): boolean {\n this.ptr = 0\n const shrink = this.stretched > this.returnTo\n if (shrink) {\n this.buffer = Buffer.allocUnsafe(this.returnTo)\n this.stretched = this.size\n }\n return shrink\n }\n\n public slice (): Buffer {\n return this.buffer.subarray(0, this.ptr)\n }\n\n public copy (): Buffer {\n const m = Buffer.alloc(this.ptr)\n this.buffer.copy(m, 0, 0, this.ptr)\n return m\n }\n\n public clone (): ElasticBuffer {\n const cloned = new ElasticBuffer(this.ptr)\n this.buffer.copy(cloned.buffer, 0, 0, this.ptr)\n cloned.setPos(this.ptr)\n return cloned\n }\n\n public writePaddedHundreds (v: number): number {\n if (v > 999) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(3)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n const tens: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = tens\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public writePaddedTensUnits (v: number): number {\n if (v > 99) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(2)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public patchPaddedNumberAtPos (ptr: number, numToWrite: number, padding: number): void {\n let digits: number = ElasticBuffer.HowManyDigits(numToWrite)\n const saved: number = this.ptr\n this.ptr = ptr\n const buffer = this.buffer\n while (digits++ < padding) {\n buffer[this.ptr++] = AsciiChars.Zero\n }\n this.writeWholeNumber(numToWrite)\n this.ptr = saved\n }\n\n public toString (ptr: number = this.ptr): string {\n return this.buffer.toString('ascii', 0, ptr)\n }\n\n public checksum (ptr: number = this.ptr): number {\n const cks: number = this.sum(ptr)\n return cks % 256\n }\n\n public sum (ptr: number = this.ptr): number {\n let total: number = 0\n ptr = Math.min(ptr, this.ptr)\n const buffer = this.buffer\n for (let idx: number = 0; idx < ptr; idx++) {\n total += buffer[idx]\n }\n return total\n }\n\n public getWholeNumber (start: number, vend: number): number {\n const buffer = this.buffer\n let sign = 1\n let raised = vend - start\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n --raised\n sign = -1\n ++start\n break\n }\n case AsciiChars.Plus: {\n --raised\n ++start\n break\n }\n }\n let i: number = Math.pow(10, raised)\n let num: number = 0\n let scan: number = start\n\n while (scan <= vend) {\n const p: number = buffer[scan++]\n const d: number = p - AsciiChars.Zero\n num += d * i\n i /= 10\n }\n\n return num * sign\n }\n\n public getString (start: number, end: number): string {\n return this.buffer.toString('ascii', start, end)\n }\n\n public getBuffer (start: number, end: number): Buffer {\n return this.buffer.subarray(start, end)\n }\n\n public getBoolean (start: number): boolean {\n const b: number = this.buffer[start]\n return b === AsciiChars.Y\n }\n\n public getFloat (start: number, vend: number): number | null {\n let n: number = 0\n let digits: number = 0\n let dotPosition: number = 0\n const buffer = this.buffer\n let sign = 1\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n sign = -1\n start++\n break\n }\n case AsciiChars.Plus: {\n start++\n break\n }\n }\n const len = vend - start\n let i: number = Math.pow(10, len - 1)\n for (let j: number = start; j <= vend; ++j) {\n const p: number = buffer[j]\n if (p >= AsciiChars.Zero && p <= AsciiChars.Nine) {\n const d: number = p - AsciiChars.Zero\n ++digits\n n += d * i\n i /= 10\n } else if (p === AsciiChars.Dot) {\n if (dotPosition > 0) {\n return null\n }\n dotPosition = j - start\n } else if (digits > 0) {\n return null\n }\n }\n const power: number = dotPosition === 0 ? 0 : len - dotPosition\n const raised = dotPosition === 0 ? 10 : Math.pow(10, -1 * power)\n const round = dotPosition === 0 ? 1 : Math.pow(10, power)\n const val = n * raised * sign\n return Math.round(val * round) / round\n }\n\n public checkGrowBuffer (required: number): void {\n let buffer = this.buffer\n let size = buffer.length\n const ptr = this.ptr\n if (size - ptr >= required) {\n return\n }\n while (size - ptr < required) {\n size *= 2\n }\n const old = buffer\n buffer = Buffer.allocUnsafe(size)\n old.copy(buffer, 0, 0, this.ptr)\n this.buffer = buffer\n this.stretched = size\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"elastic-buffer.js","sourceRoot":"","sources":["../../src/buffer/elastic-buffer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAgD;AAChD,mCAA+B;AAC/B,uCAA6C;AAC7C,oDAA+C;AAGxC,IAAM,aAAa,qBAAnB,MAAM,aAAa;IAexB,YAAiD,OAA+B,CAAC,GAAG,IAAI,EAC5C,WAAmC,EAAE,GAAG,IAAI;QADvB,SAAI,GAAJ,IAAI,CAAmB;QAC5B,aAAQ,GAAR,QAAQ,CAAoB;QAdhF,QAAG,GAAW,CAAC,CAAA;QAerB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAA;IAC5B,CAAC;IAEO,MAAM,CAAC,cAAc,CAAE,CAAS,EAAE,SAAiB;QACzD,MAAM,MAAM,GAAW,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAA;IACxC,CAAC;IAEO,MAAM,CAAC,aAAa,CAAE,CAAS;QACrC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACf,IAAI,MAAM,GAAW,CAAC,CAAA;QACtB,IAAI,CAAC,GAAW,CAAC,CAAA;QACjB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,EAAE,MAAM,CAAA;YACR,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;QACxB,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5B,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,MAAM,CAAE,GAAW;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAA;QAClB,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QAChB,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;IAEM,GAAG,CAAE,GAAW;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IAEM,YAAY,CAAE,CAAU;QAC7B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAU,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAU,CAAC,CAAC,CAAC,CAAA;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,UAAU,CAAE,CAAS;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,QAAQ,CAAE,CAAS;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,SAAS,CAAE,CAAS;QACzB,IAAI,CAAC,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAC1D,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,WAAW,CAAE,CAAS;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAA;QACtB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACrD,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,WAAW,CAAE,CAAS;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAA;QACtB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,MAAM,GAAW,CAAC,CAAC,MAAM,CAAA;QAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,gBAAgB,CAAE,CAAS;QAChC,MAAM,MAAM,GAAW,eAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QACrD,IAAI,OAAO,GAAG,MAAM,CAAA;QACpB,MAAM,IAAI,GAAW,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAA;QACxC,IAAI,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,OAAO,EAAE,CAAA;QACX,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,wBAAU,CAAC,KAAK,CAAA;QACvC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACnC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACV,CAAC,IAAI,EAAE,CAAA;YACP,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,wBAAU,CAAC,IAAI,GAAG,CAAC,CAAA;QAC1C,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,WAAW,CAAE,CAAS,EAAE,SAAiB,EAAE;QAChD,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAW,eAAa,CAAC,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAA;QAC1E,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YAEnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACjC,CAAC;aAAM,CAAC;YAEN,MAAM,CAAC,GAAW,IAAA,eAAM,EAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;YAClD,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,GAAG,GAAG,CAAC,CAAA;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAA;QAChC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC;IAEM,IAAI;QACT,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QACnC,OAAO,CAAC,CAAA;IACV,CAAC;IAEM,KAAK;QACV,MAAM,MAAM,GAAG,IAAI,eAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvB,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,mBAAmB,CAAE,CAAS;QACnC,IAAI,CAAC,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAA;QACpE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,IAAI,GAAW,wBAAU,CAAC,IAAI,CAAA;QACpC,MAAM,KAAK,GAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;QACnC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QACV,MAAM,IAAI,GAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;QAClC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QACV,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAA;QACzB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAA;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,oBAAoB,CAAE,CAAS;QACpC,IAAI,CAAC,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAA;QACnE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,IAAI,GAAW,wBAAU,CAAC,IAAI,CAAA;QACpC,MAAM,KAAK,GAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;QACnC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QACV,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAA;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,sBAAsB,CAAE,GAAW,EAAE,UAAkB,EAAE,OAAe;QAC7E,IAAI,MAAM,GAAW,eAAa,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAC5D,MAAM,KAAK,GAAW,IAAI,CAAC,GAAG,CAAA;QAC9B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,OAAO,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,wBAAU,CAAC,IAAI,CAAA;QACtC,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAA;IAClB,CAAC;IAEM,QAAQ,CAAE,MAAc,IAAI,CAAC,GAAG;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC9C,CAAC;IAEM,QAAQ,CAAE,MAAc,IAAI,CAAC,GAAG;QACrC,MAAM,GAAG,GAAW,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACjC,OAAO,GAAG,GAAG,GAAG,CAAA;IAClB,CAAC;IAEM,GAAG,CAAE,MAAc,IAAI,CAAC,GAAG;QAChC,IAAI,KAAK,GAAW,CAAC,CAAA;QACrB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,KAAK,IAAI,GAAG,GAAW,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;YAC3C,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEM,cAAc,CAAE,KAAa,EAAE,IAAY;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,MAAM,GAAG,IAAI,GAAG,KAAK,CAAA;QACzB,QAAQ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,wBAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB,EAAE,MAAM,CAAA;gBACR,IAAI,GAAG,CAAC,CAAC,CAAA;gBACT,EAAE,KAAK,CAAA;gBACP,MAAK;YACP,CAAC;YACD,KAAK,wBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrB,EAAE,MAAM,CAAA;gBACR,EAAE,KAAK,CAAA;gBACP,MAAK;YACP,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACpC,IAAI,GAAG,GAAW,CAAC,CAAA;QACnB,IAAI,IAAI,GAAW,KAAK,CAAA;QAExB,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC;YACpB,MAAM,CAAC,GAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YAChC,MAAM,CAAC,GAAW,CAAC,GAAG,wBAAU,CAAC,IAAI,CAAA;YACrC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;YACZ,CAAC,IAAI,EAAE,CAAA;QACT,CAAC;QAED,OAAO,GAAG,GAAG,IAAI,CAAA;IACnB,CAAC;IAEM,SAAS,CAAE,KAAa,EAAE,GAAW;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAClD,CAAC;IAEM,SAAS,CAAE,KAAa,EAAE,GAAW;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACzC,CAAC;IAEM,UAAU,CAAE,KAAa;QAC9B,MAAM,CAAC,GAAW,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACpC,OAAO,CAAC,KAAK,wBAAU,CAAC,CAAC,CAAA;IAC3B,CAAC;IAEM,QAAQ,CAAE,KAAa,EAAE,IAAY;QAC1C,IAAI,CAAC,GAAW,CAAC,CAAA;QACjB,IAAI,MAAM,GAAW,CAAC,CAAA;QACtB,IAAI,WAAW,GAAW,CAAC,CAAA;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,QAAQ,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,wBAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB,IAAI,GAAG,CAAC,CAAC,CAAA;gBACT,KAAK,EAAE,CAAA;gBACP,MAAK;YACP,CAAC;YACD,KAAK,wBAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrB,KAAK,EAAE,CAAA;gBACP,MAAK;YACP,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,KAAK,CAAA;QACxB,IAAI,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;QACrC,KAAK,IAAI,CAAC,GAAW,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAW,MAAM,CAAC,CAAC,CAAC,CAAA;YAC3B,IAAI,CAAC,IAAI,wBAAU,CAAC,IAAI,IAAI,CAAC,IAAI,wBAAU,CAAC,IAAI,EAAE,CAAC;gBACjD,MAAM,CAAC,GAAW,CAAC,GAAG,wBAAU,CAAC,IAAI,CAAA;gBACrC,EAAE,MAAM,CAAA;gBACR,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACV,CAAC,IAAI,EAAE,CAAA;YACT,CAAC;iBAAM,IAAI,CAAC,KAAK,wBAAU,CAAC,GAAG,EAAE,CAAC;gBAChC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;oBACpB,OAAO,IAAI,CAAA;gBACb,CAAC;gBACD,WAAW,GAAG,CAAC,GAAG,KAAK,CAAA;YACzB,CAAC;iBAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAW,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAA;QAC/D,MAAM,MAAM,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA;QAChE,MAAM,KAAK,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACzD,MAAM,GAAG,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAAA;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;IACxC,CAAC;IAEM,eAAe,CAAE,QAAgB;QACtC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACxB,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QACpB,IAAI,IAAI,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,OAAM;QACR,CAAC;QACD,OAAO,IAAI,GAAG,GAAG,GAAG,QAAQ,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,CAAA;QACX,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAA;QAClB,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACjC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACvB,CAAC;CACF,CAAA;AAlUY,sCAAa;wBAAb,aAAa;IADzB,IAAA,qBAAU,GAAE;IAgBG,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,iBAAiB,CAAC,CAAA;IAC7C,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,uBAAuB,CAAC,CAAA;;GAhBhC,aAAa,CAkUzB","sourcesContent":["import { AsciiChars } from './ascii/ascii-chars'\nimport { format } from 'mathjs'\nimport { inject, injectable } from 'tsyringe'\nimport { DITokens } from '../runtime/di-tokens'\n\n@injectable()\nexport class ElasticBuffer {\n private buffer: Buffer\n private ptr: number = 0\n private stretched: number\n\n /**\n * A buffer grown to serve a large message keeps that capacity across reset, so a\n * steady stream of similarly sized messages does not re-grow (and re-allocate) on\n * every single message. Only a buffer that has ballooned past returnTo is handed\n * back, so one pathological message cannot pin a large allocation for the life of\n * the session. Unlike cspurefix - where the discarded array goes to a shared\n * ArrayPool - the retained bytes are held by this instance, so an acceptor with\n * many connections holds up to this much per connection. Tune with\n * DITokens.elasticBufferReturnSize.\n */\n constructor (@inject(DITokens.elasticBufferSize) public readonly size: number = 6 * 1024,\n @inject(DITokens.elasticBufferReturnSize) public readonly returnTo: number = 64 * 1024) {\n this.size = Math.max(1, this.size)\n this.buffer = Buffer.allocUnsafe(this.size)\n this.returnTo = Math.max(this.size, this.returnTo)\n this.stretched = this.size\n }\n\n private static precisionRound (n: number, precision: number): number {\n const factor: number = Math.pow(10, precision)\n return Math.round(n * factor) / factor\n }\n\n private static HowManyDigits (v: number): number {\n v = Math.abs(v)\n let digits: number = 0\n let w: number = v\n while (w > 0) {\n ++digits\n w = Math.floor(w / 10)\n }\n return Math.max(digits, 1)\n }\n\n public currentSize (): number {\n return this.stretched\n }\n\n public getPos (): number {\n return this.ptr\n }\n\n public setPos (ptr: number): number {\n const r = this.ptr\n if (ptr >= 0 && ptr <= this.buffer.length) {\n this.ptr = ptr\n }\n return r\n }\n\n public get (pos: number): number {\n return this.buffer[pos]\n }\n\n public writeBoolean (v: boolean): number {\n this.writeChar(v ? AsciiChars.Y : AsciiChars.N)\n return this.ptr\n }\n\n public switchChar (c: number): number {\n this.buffer[this.ptr - 1] = c\n return this.ptr\n }\n\n public saveChar (c: number): number {\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeChar (c: number): number {\n if (c > 255) throw new Error(`can't write ${c} to a byte`)\n this.checkGrowBuffer(1)\n this.buffer[this.ptr++] = c\n return this.ptr\n }\n\n public writeString (s: string): number {\n const begin = this.ptr\n this.checkGrowBuffer(s.length)\n const buffer = this.buffer\n this.ptr += buffer.write(s, begin, s.length, 'ascii')\n return this.ptr\n }\n\n public writeBuffer (v: Buffer): number {\n const begin = this.ptr\n this.checkGrowBuffer(v.length)\n const buffer = this.buffer\n const srcLen: number = v.length\n this.ptr += v.copy(buffer, begin, 0, srcLen)\n return this.ptr\n }\n\n public writeWholeNumber (n: number): number {\n const digits: number = ElasticBuffer.HowManyDigits(n)\n let reserve = digits\n const sign: number = Math.sign(n)\n let p: number = Math.pow(10, digits - 1)\n let v: number = Math.abs(n)\n if (sign < 0) {\n reserve++\n }\n this.checkGrowBuffer(reserve)\n const buffer = this.buffer\n if (sign < 0) {\n buffer[this.ptr++] = AsciiChars.Minus\n }\n while (p >= 1) {\n const d: number = Math.floor(v / p)\n v -= d * p\n p /= 10\n buffer[this.ptr++] = AsciiChars.Zero + d\n }\n\n return this.ptr\n }\n\n public writeNumber (v: number, places: number = 13): number {\n const rounded: number = Math.floor(v)\n const fraction: number = ElasticBuffer.precisionRound(v - rounded, places)\n if (fraction === 0) {\n // integer\n return this.writeWholeNumber(v)\n } else {\n // decimal with fraction turn to string\n const s: string = format(v, { notation: 'fixed' })\n return this.writeString(s)\n }\n }\n\n public reset (): boolean {\n this.ptr = 0\n const shrink = this.stretched > this.returnTo\n if (shrink) {\n this.buffer = Buffer.allocUnsafe(this.returnTo)\n this.stretched = this.returnTo\n }\n return shrink\n }\n\n public slice (): Buffer {\n return this.buffer.subarray(0, this.ptr)\n }\n\n public copy (): Buffer {\n const m = Buffer.alloc(this.ptr)\n this.buffer.copy(m, 0, 0, this.ptr)\n return m\n }\n\n public clone (): ElasticBuffer {\n const cloned = new ElasticBuffer(this.ptr)\n this.buffer.copy(cloned.buffer, 0, 0, this.ptr)\n cloned.setPos(this.ptr)\n return cloned\n }\n\n public writePaddedHundreds (v: number): number {\n if (v > 999) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(3)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n const tens: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = tens\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public writePaddedTensUnits (v: number): number {\n if (v > 99) throw new Error(`can't write ${v} as hundreds padding`)\n this.checkGrowBuffer(2)\n const buffer = this.buffer\n const zero: number = AsciiChars.Zero\n const units: number = v % 10 + zero\n v = v / 10\n buffer[this.ptr++] = v % 10 + zero\n buffer[this.ptr++] = units\n return this.ptr\n }\n\n public patchPaddedNumberAtPos (ptr: number, numToWrite: number, padding: number): void {\n let digits: number = ElasticBuffer.HowManyDigits(numToWrite)\n const saved: number = this.ptr\n this.ptr = ptr\n const buffer = this.buffer\n while (digits++ < padding) {\n buffer[this.ptr++] = AsciiChars.Zero\n }\n this.writeWholeNumber(numToWrite)\n this.ptr = saved\n }\n\n public toString (ptr: number = this.ptr): string {\n return this.buffer.toString('ascii', 0, ptr)\n }\n\n public checksum (ptr: number = this.ptr): number {\n const cks: number = this.sum(ptr)\n return cks % 256\n }\n\n public sum (ptr: number = this.ptr): number {\n let total: number = 0\n ptr = Math.min(ptr, this.ptr)\n const buffer = this.buffer\n for (let idx: number = 0; idx < ptr; idx++) {\n total += buffer[idx]\n }\n return total\n }\n\n public getWholeNumber (start: number, vend: number): number {\n const buffer = this.buffer\n let sign = 1\n let raised = vend - start\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n --raised\n sign = -1\n ++start\n break\n }\n case AsciiChars.Plus: {\n --raised\n ++start\n break\n }\n }\n let i: number = Math.pow(10, raised)\n let num: number = 0\n let scan: number = start\n\n while (scan <= vend) {\n const p: number = buffer[scan++]\n const d: number = p - AsciiChars.Zero\n num += d * i\n i /= 10\n }\n\n return num * sign\n }\n\n public getString (start: number, end: number): string {\n return this.buffer.toString('ascii', start, end)\n }\n\n public getBuffer (start: number, end: number): Buffer {\n return this.buffer.subarray(start, end)\n }\n\n public getBoolean (start: number): boolean {\n const b: number = this.buffer[start]\n return b === AsciiChars.Y\n }\n\n public getFloat (start: number, vend: number): number | null {\n let n: number = 0\n let digits: number = 0\n let dotPosition: number = 0\n const buffer = this.buffer\n let sign = 1\n switch (buffer[start]) {\n case AsciiChars.Minus: {\n sign = -1\n start++\n break\n }\n case AsciiChars.Plus: {\n start++\n break\n }\n }\n const len = vend - start\n let i: number = Math.pow(10, len - 1)\n for (let j: number = start; j <= vend; ++j) {\n const p: number = buffer[j]\n if (p >= AsciiChars.Zero && p <= AsciiChars.Nine) {\n const d: number = p - AsciiChars.Zero\n ++digits\n n += d * i\n i /= 10\n } else if (p === AsciiChars.Dot) {\n if (dotPosition > 0) {\n return null\n }\n dotPosition = j - start\n } else if (digits > 0) {\n return null\n }\n }\n const power: number = dotPosition === 0 ? 0 : len - dotPosition\n const raised = dotPosition === 0 ? 10 : Math.pow(10, -1 * power)\n const round = dotPosition === 0 ? 1 : Math.pow(10, power)\n const val = n * raised * sign\n return Math.round(val * round) / round\n }\n\n public checkGrowBuffer (required: number): void {\n let buffer = this.buffer\n let size = buffer.length\n const ptr = this.ptr\n if (size - ptr >= required) {\n return\n }\n while (size - ptr < required) {\n size *= 2\n }\n const old = buffer\n buffer = Buffer.allocUnsafe(size)\n old.copy(buffer, 0, 0, this.ptr)\n this.buffer = buffer\n this.stretched = size\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode-proxy.js","sourceRoot":"","sources":["../../src/buffer/encode-proxy.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"encode-proxy.js","sourceRoot":"","sources":["../../src/buffer/encode-proxy.ts"],"names":[],"mappings":";;;AAEA,uDAOgC;AAChC,6CAAwC;AAExC,MAAa,WAAW;IACtB,YAA6B,WAA2B;QAA3B,gBAAW,GAAX,WAAW,CAAgB;IACxD,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAE,KAA2B,EAAE,GAAQ;QACpE,MAAM,UAAU,GAA0B,KAAK,CAAC,UAAU,CAAA;QAC1D,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAY,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAC9D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,IAAI,sBAAsB,GAAG,GAAG,CAAC,CAAA;YACvE,CAAC;QACH,CAAC;QACD,QAAQ,UAAU,CAAC,OAAO,EAAE,CAAC;YAC3B,KAAK,kBAAO,CAAC,SAAS,CAAC;YACvB,KAAK,kBAAO,CAAC,WAAW,CAAC;YACzB,KAAK,kBAAO,CAAC,WAAW,CAAC;YACzB,KAAK,kBAAO,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC1B,MAAM,MAAM,GAAY,GAAG,YAAY,IAAI,CAAA;gBAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,+BAA+B,OAAO,GAAG,GAAG,CAAC,CAAA;gBAClF,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,kBAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,kCAAkC,OAAO,GAAG,GAAG,CAAC,CAAA;gBACrF,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,kBAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,iCAAiC,OAAO,GAAG,GAAG,CAAC,CAAA;gBACpF,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,kBAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrB,MAAM,QAAQ,GAAY,GAAG,YAAY,MAAM,CAAA;gBAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,iCAAiC,OAAO,GAAG,GAAG,CAAC,CAAA;gBACpF,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,kBAAO,CAAC,GAAG,CAAC;YACjB,KAAK,kBAAO,CAAC,KAAK,CAAC;YACnB,KAAK,kBAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpB,IAAI,KAAK,CAAC,GAAa,CAAC,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,iCAAiC,OAAO,GAAG,GAAG,CAAC,CAAA;gBACpF,CAAC;gBACD,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,eAAe,CAAE,OAAqB,EAAE,GAAiB;QACtE,MAAM,IAAI,GAAa,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAAE,KAA8B,EAAE,GAAQ;QAC1E,MAAM,SAAS,GAAY,OAAO,GAAG,KAAK,QAAQ,CAAA;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,sCAAsC,OAAO,GAAG,GAAG,CAAC,CAAA;QACxF,CAAC;QACD,OAAO,WAAW,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,GAAmB,CAAC,CAAA;IAC/G,CAAC;IAEO,MAAM,CAAC,eAAe,CAAE,KAA0B,EAAE,GAAQ;QAClE,MAAM,QAAQ,GAAY,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAa,CAAC,CAAA;QACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,+CAA+C,OAAO,GAAG,GAAG,CAAC,CAAA;QACjG,CAAC;QACD,MAAM,EAAE,GAA4B,KAAK,CAAA;QACzC,MAAM,CAAC,GAAW,GAAG,CAAA;QACrB,MAAM,QAAQ,GAAY,CAAC,KAAK,CAAC,GAAa,CAAC,CAAA;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,GAAmB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;YACxC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBACnC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;YAC5D,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAmB,GAAG,CAAA;YAC/B,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACjG,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,OAAO,CAAE,GAAkB;QACxC,OAAO;YACL,GAAG,CAAE,MAAoB,EAAE,IAAY,EAAE,GAAQ;gBAC/C,MAAM,KAAK,GAA+B,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBACxE,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,uBAAuB,IAAI,EAAE,CAAC,CAAA;gBAChE,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;gBAC9C,OAAO,IAAI,CAAA;YACb,CAAC;SACF,CAAA;IACH,CAAC;IAEO,MAAM,CAAC,OAAO,CAAE,KAAqB,EAAE,GAAQ;QACrD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,8BAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/B,WAAW,CAAC,gBAAgB,CAAC,KAA6B,EAAE,GAAG,CAAC,CAAA;gBAChE,MAAK;YACP,CAAC;YAED,KAAK,8BAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;gBAClC,GAAG,GAAG,WAAW,CAAC,mBAAmB,CAAC,KAAgC,EAAE,GAAG,CAAC,CAAA;gBAC5E,MAAK;YACP,CAAC;YAED,KAAK,8BAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9B,GAAG,GAAG,WAAW,CAAC,eAAe,CAAC,KAA4B,EAAE,GAAG,CAAC,CAAA;gBACpE,MAAK;YACP,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAEM,IAAI,CAAE,OAAe;QAC1B,MAAM,GAAG,GAAkC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAChF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;IAChD,CAAC;CACF;AAzID,kCAyIC","sourcesContent":["import { ILooseObject } from '../collections/collection'\nimport { FixDefinitions, MessageDefinition, SimpleFieldDefinition } from '../dictionary/definition'\nimport {\n ContainedComponentField,\n ContainedField,\n IContainedSet,\n ContainedFieldType,\n ContainedGroupField,\n ContainedSimpleField\n} from '../dictionary/contained'\nimport { TagType } from './tag/tag-type'\n\nexport class EncodeProxy {\n constructor (public readonly definitions: FixDefinitions) {\n }\n\n private static SimpleFieldCheck (field: ContainedSimpleField, val: any): void {\n const definition: SimpleFieldDefinition = field.definition\n if (definition.isEnum()) {\n const resolved: boolean = definition.containsEnum(String(val))\n if (!resolved) {\n throw new Error(`enum field ${field.name} does not support \"${val}\"`)\n }\n }\n switch (definition.tagType) {\n case TagType.LocalDate:\n case TagType.UtcTimeOnly:\n case TagType.UtcDateOnly:\n case TagType.UtcTimestamp: {\n const isDate: boolean = val instanceof Date\n if (!isDate) {\n throw new Error(`field ${field.name} expects Date but receives \"${typeof val}\"`)\n }\n break\n }\n\n case TagType.Boolean: {\n if (typeof (val) !== typeof true) {\n throw new Error(`field ${field.name} expects boolean but receives \"${typeof val}\"`)\n }\n break\n }\n\n case TagType.String: {\n if (typeof (val) !== 'string') {\n throw new Error(`field ${field.name} expects string but receives \"${typeof val}\"`)\n }\n break\n }\n\n case TagType.RawData: {\n const isBuffer: boolean = val instanceof Buffer\n if (!isBuffer) {\n throw new Error(`field ${field.name} expects Buffer but receives \"${typeof val}\"`)\n }\n break\n }\n\n case TagType.Int:\n case TagType.Float:\n case TagType.Length: {\n if (isNaN(val as number)) {\n throw new Error(`field ${field.name} expects number but receives \"${typeof val}\"`)\n }\n break\n }\n }\n }\n\n private static checkProperties (wrapped: ILooseObject, val: ILooseObject): ILooseObject {\n const keys: string[] = Object.keys(val)\n for (const k of keys) {\n wrapped[k] = val[k]\n }\n return wrapped\n }\n\n private static ComponentFieldCheck (field: ContainedComponentField, val: any): object {\n const isComplex: boolean = typeof val === 'object'\n if (!isComplex) {\n throw new Error(`type ${field.name} is a component but is given type \"${typeof val}\"`)\n }\n return EncodeProxy.checkProperties(new Proxy({}, EncodeProxy.handler(field.definition)), val as ILooseObject)\n }\n\n private static GroupFieldCheck (field: ContainedGroupField, val: any): object {\n const accepted: boolean = Array.isArray(val) || !isNaN(val as number)\n if (!accepted) {\n throw new Error(`type ${field.name} is a group and needs array or number, not \"${typeof val}\"`)\n }\n const gf: ContainedComponentField = field\n const j: number = val\n const isNumber: boolean = !isNaN(val as number)\n if (isNumber) {\n const arr: ILooseObject[] = new Array(j)\n for (let i: number = 0; i < j; ++i) {\n arr[i] = new Proxy({}, EncodeProxy.handler(gf.definition))\n }\n return arr\n } else {\n const arr: ILooseObject[] = val\n for (let i: number = 0; i < arr.length; ++i) {\n arr[i] = EncodeProxy.checkProperties(new Proxy({}, EncodeProxy.handler(gf.definition)), arr[i])\n }\n return arr\n }\n }\n\n private static handler (set: IContainedSet): Object {\n return {\n set (target: ILooseObject, prop: string, val: any): boolean {\n const field: ContainedField | undefined = set.localNameToField.get(prop)\n if (!field) {\n throw new Error(`type ${set.name} has no field named ${prop}`)\n }\n target[prop] = EncodeProxy.examine(field, val)\n return true\n }\n }\n }\n\n private static examine (field: ContainedField, val: any): any {\n switch (field.type) {\n case ContainedFieldType.Simple: {\n EncodeProxy.SimpleFieldCheck(field as ContainedSimpleField, val)\n break\n }\n\n case ContainedFieldType.Component: {\n val = EncodeProxy.ComponentFieldCheck(field as ContainedComponentField, val)\n break\n }\n\n case ContainedFieldType.Group: {\n val = EncodeProxy.GroupFieldCheck(field as ContainedGroupField, val)\n break\n }\n }\n return val\n }\n\n public wrap (msgName: string): ILooseObject {\n const msg: MessageDefinition | undefined = this.definitions.message.get(msgName)\n if (!msg) {\n throw new Error(`no message defined for type ${msgName}`)\n }\n\n return new Proxy({}, EncodeProxy.handler(msg))\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixml-encoder.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../../collections/collection'\nimport {\n IContainedSet,\n ContainedField,\n ContainedGroupField,\n ContainedComponentField,\n ContainedSimpleField,\n FieldsDispatch\n} from '../../dictionary/contained'\nimport { AsciiChars } from '../ascii'\nimport { MsgEncoder } from '../msg-encoder'\nimport { ElasticBuffer } from '../elastic-buffer'\nimport moment = require('moment')\nimport { FixDefinitions } from '../../dictionary/definition'\nimport { IFieldDispatcher } from '../../dictionary/contained/field-dispatcher'\nimport { TagType } from '../tag/tag-type'\nimport { IPopulatedAttributes } from './populated-attributes'\nimport { inject, injectable } from 'tsyringe'\nimport { DITokens } from '../../runtime/di-tokens'\n\n@injectable()\nexport class FixmlEncoder extends MsgEncoder {\n public attributePerLine: boolean = false\n public readonly eol: string = require('os').EOL\n private readonly beginDoc: string = `<FIXML>${this.eol}`\n private readonly endDoc: string = '</FIXML>'\n private readonly beginBatch: string = `<Batch>${this.eol}`\n private readonly endBatch: string = '</Batch>'\n\n public constructor (@inject(DITokens.TransmitBuffer) public readonly buffer: ElasticBuffer, @inject(DITokens.Definitions) public readonly definitions: FixDefinitions) {\n super(definitions)\n }\n\n private static asString (sf: ContainedSimpleField, v: any): string {\n switch (sf.definition.tagType) {\n case TagType.String: {\n return v as string\n }\n\n case TagType.Int:\n case TagType.Float:\n case TagType.Length: {\n return v.toString()\n }\n\n case TagType.Boolean: {\n return v ? 'Y' : 'N'\n }\n\n case TagType.UtcTimestamp: {\n const d: Date = v as Date\n return moment(d).utc().format('YYYY-MM-DDTHH:mm:ss.SSS')\n }\n\n case TagType.UtcTimeOnly: {\n const d: Date = v as Date\n return moment.utc(d).format('HH:mm:ss.SSS')\n }\n\n case TagType.LocalDate: {\n const d: Date = v as Date\n return moment(d).format('YYYY-MM-DD')\n }\n\n case TagType.UtcDateOnly: {\n const d: Date = v as Date\n return moment(d).utc(true).format('YYYY-MM-DD')\n }\n }\n return ''\n }\n\n public encodeSet (o: ILooseObject, set: IContainedSet): void {\n const batch: ILooseObject[] = o.Batch\n const toWrite: ILooseObject[] = batch || [o]\n const depth = batch ? 1 : 0\n const buffer = this.buffer\n const begin = this.beginDoc\n const indent: string = '\\t'\n const endBatch = batch ? this.endBatch : ''\n const eol = this.eol\n buffer.reset()\n buffer.writeString(begin)\n if (batch) {\n this.batchStart(o, set, depth)\n }\n toWrite.forEach((next: ILooseObject) => {\n this.toXml(next, set.abbreviation ?? '', set, depth + 1)\n buffer.writeString(eol)\n })\n if (batch) {\n buffer.writeString(`${indent}${endBatch}`)\n }\n\n buffer.writeString(this.endDoc)\n }\n\n private batchStart (o: ILooseObject, set: IContainedSet, depth: number): void {\n const buffer = this.buffer\n const indent: string = '\\t'\n const beginBatch = this.beginBatch\n const hdr: ILooseObject = o.StandardHeader\n const eol = this.eol\n buffer.writeString(`${indent}${beginBatch}`)\n if (hdr) {\n const h = set.fields[0] as ContainedComponentField\n this.toXml(hdr, h.name, h.definition, depth + 1)\n buffer.writeString(eol)\n }\n }\n\n private toXml (o: ILooseObject, name: string, set: IContainedSet, depth: number): void {\n const buffer = this.buffer\n const selfClose: string = '/>'\n const close: string = '>'\n const open: string = '<'\n const indent: string = '\\t'.repeat(depth)\n const newLine = this.eol\n const fields: ContainedField[] = this.getPopulatedFields(set, o)\n const eol: string = fields.length === 0 ? selfClose : close\n buffer.writeString(`${indent}${open}`)\n buffer.writeString(`${name} `)\n this.attributes(o, set, depth, this.attributePerLine)\n buffer.writeString(`${eol}`)\n new FieldsDispatch().dispatchFields(fields, {\n group: (g: ContainedGroupField) => { this.complexGroup(o, g, depth) },\n component: (c: ContainedComponentField) => { this.complexComponent(o, c, depth) }\n } as IFieldDispatcher)\n if (fields.length) {\n const end: string = `${newLine}${indent}</${name}>`\n buffer.writeString(`${end}`)\n }\n }\n\n private getPopulatedFields (set: IContainedSet, o: ILooseObject): ContainedField[] {\n const keys: string[] = Object.keys(o)\n const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {\n const field: ContainedField | undefined = set.localNameToField.get(current)\n if (field && !set.nameToLocalAttribute.has(current)) {\n a.push(field)\n }\n return a\n }, [])\n fields.sort((a: ContainedField, b: ContainedField) => a.position - b.position)\n return fields\n }\n\n private encodeAttribute (name: string, val: string): void {\n if (val == null) {\n return\n }\n const buffer = this.buffer\n buffer.writeString(name)\n buffer.writeChar(AsciiChars.Equal)\n buffer.writeChar(AsciiChars.Dq)\n buffer.writeString(val)\n buffer.writeChar(AsciiChars.Dq)\n }\n\n private attributes (o: ILooseObject, set: IContainedSet, depth: number, attributePerLine: boolean): void {\n const newLine = this.eol\n const indent: string = '\\t'.repeat(depth + 1)\n const attributes = set.localAttribute\n const buffer = this.buffer\n if (attributes.length && attributePerLine) {\n buffer.writeString(newLine)\n buffer.writeString(indent)\n }\n const populatedAttributes: IPopulatedAttributes = this.getPopulatedAttributes(o, attributes)\n for (let a = 0; a < populatedAttributes.values.length; ++a) {\n const last = a === populatedAttributes.values.length - 1\n const f = populatedAttributes.fields[a]\n if (a || this.attributePerLine) buffer.writeChar(AsciiChars.Space)\n this.encodeAttribute(f.name, FixmlEncoder.asString(f, populatedAttributes.values[a]))\n if (!last && attributePerLine) {\n buffer.writeString(newLine)\n buffer.writeString(indent)\n }\n }\n }\n\n private getPopulatedAttributes (o: ILooseObject, attributes: ContainedSimpleField[]): IPopulatedAttributes {\n return attributes.reduce<IPopulatedAttributes>((a: IPopulatedAttributes, f: ContainedSimpleField) => {\n let v: any = o[f.definition.name]\n if (v == null) {\n v = o[f.name]\n }\n if (v != null) {\n a.values.push(v)\n a.fields.push(f)\n }\n return a\n }, {\n values: [],\n fields: []\n })\n }\n\n private complexGroup (o: ILooseObject, field: ContainedField, depth: number): void {\n const gf: ContainedGroupField = field as ContainedGroupField\n const elements: ILooseObject[] = o[gf.definition.name]\n if (elements) {\n if (Array.isArray(elements)) {\n for (const e of elements) {\n this.buffer.writeString(this.eol)\n this.toXml(e, gf.name, gf.definition, depth + 1)\n }\n } else {\n throw new Error(`expected array for member ${gf.definition.name}`)\n }\n }\n }\n\n private complexComponent (o: ILooseObject, field: ContainedField, depth: number): void {\n const cf: ContainedComponentField = field as ContainedComponentField\n const def = cf.definition\n const instance: ILooseObject = o[def.name]\n if (instance) {\n this.buffer.writeString(this.eol)\n this.toXml(instance, cf.name, def, depth + 1)\n }\n }\n\n reset (): void {\n this.buffer.reset()\n }\n\n trim (): Buffer {\n return this.buffer.copy()\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fixml-encoder.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../../collections/collection'\nimport {\n IContainedSet,\n ContainedField,\n ContainedGroupField,\n ContainedComponentField,\n ContainedSimpleField,\n FieldsDispatch\n} from '../../dictionary/contained'\nimport { AsciiChars } from '../ascii'\nimport { MsgEncoder } from '../msg-encoder'\nimport { ElasticBuffer } from '../elastic-buffer'\nimport moment = require('moment')\nimport { FixDefinitions } from '../../dictionary/definition'\nimport { IFieldDispatcher } from '../../dictionary/contained/field-dispatcher'\nimport { TagType } from '../tag/tag-type'\nimport { IPopulatedAttributes } from './populated-attributes'\nimport { inject, injectable } from 'tsyringe'\nimport { DITokens } from '../../runtime/di-tokens'\n\n@injectable()\nexport class FixmlEncoder extends MsgEncoder {\n public attributePerLine: boolean = false\n public readonly eol: string = require('os').EOL\n private readonly beginDoc: string = `<FIXML>${this.eol}`\n private readonly endDoc: string = '</FIXML>'\n private readonly beginBatch: string = `<Batch>${this.eol}`\n private readonly endBatch: string = '</Batch>'\n\n public constructor (@inject(DITokens.TransmitBuffer) public readonly buffer: ElasticBuffer, @inject(DITokens.Definitions) public readonly definitions: FixDefinitions) {\n super(definitions)\n }\n\n private static asString (sf: ContainedSimpleField, v: any): string {\n switch (sf.definition.tagType) {\n case TagType.String: {\n return v as string\n }\n\n case TagType.Int:\n case TagType.Float:\n case TagType.Length: {\n return v.toString()\n }\n\n case TagType.Boolean: {\n return v ? 'Y' : 'N'\n }\n\n case TagType.UtcTimestamp: {\n const d: Date = v as Date\n return moment(d).utc().format('YYYY-MM-DDTHH:mm:ss.SSS')\n }\n\n case TagType.UtcTimeOnly: {\n const d: Date = v as Date\n return moment.utc(d).format('HH:mm:ss.SSS')\n }\n\n case TagType.LocalDate: {\n const d: Date = v as Date\n return moment(d).format('YYYY-MM-DD')\n }\n\n case TagType.UtcDateOnly: {\n const d: Date = v as Date\n return moment(d).utc(true).format('YYYY-MM-DD')\n }\n }\n return ''\n }\n\n public encodeSet (o: ILooseObject, set: IContainedSet): void {\n const batch: ILooseObject[] = o.Batch\n const toWrite: ILooseObject[] = batch || [o]\n const depth = batch ? 1 : 0\n const buffer = this.buffer\n const begin = this.beginDoc\n const indent: string = '\\t'\n const endBatch = batch ? this.endBatch : ''\n const eol = this.eol\n buffer.reset()\n buffer.writeString(begin)\n if (batch) {\n this.batchStart(o, set, depth)\n }\n toWrite.forEach((next: ILooseObject) => {\n this.toXml(next, set.abbreviation ?? '', set, depth + 1)\n buffer.writeString(eol)\n })\n if (batch) {\n buffer.writeString(`${indent}${endBatch}`)\n }\n\n buffer.writeString(this.endDoc)\n }\n\n private batchStart (o: ILooseObject, set: IContainedSet, depth: number): void {\n const buffer = this.buffer\n const indent: string = '\\t'\n const beginBatch = this.beginBatch\n const hdr: ILooseObject = o.StandardHeader\n const eol = this.eol\n buffer.writeString(`${indent}${beginBatch}`)\n if (hdr) {\n const h = set.fields[0] as ContainedComponentField\n this.toXml(hdr, h.name, h.definition, depth + 1)\n buffer.writeString(eol)\n }\n }\n\n private toXml (o: ILooseObject, name: string, set: IContainedSet, depth: number): void {\n const buffer = this.buffer\n const selfClose: string = '/>'\n const close: string = '>'\n const open: string = '<'\n const indent: string = '\\t'.repeat(depth)\n const newLine = this.eol\n const fields: ContainedField[] = this.getPopulatedFields(set, o)\n const eol: string = fields.length === 0 ? selfClose : close\n buffer.writeString(`${indent}${open}`)\n buffer.writeString(`${name} `)\n this.attributes(o, set, depth, this.attributePerLine)\n buffer.writeString(`${eol}`)\n new FieldsDispatch().dispatchFields(fields, {\n group: (g: ContainedGroupField) => { this.complexGroup(o, g, depth) },\n component: (c: ContainedComponentField) => { this.complexComponent(o, c, depth) }\n })\n if (fields.length) {\n const end: string = `${newLine}${indent}</${name}>`\n buffer.writeString(`${end}`)\n }\n }\n\n private getPopulatedFields (set: IContainedSet, o: ILooseObject): ContainedField[] {\n const keys: string[] = Object.keys(o)\n const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {\n const field: ContainedField | undefined = set.localNameToField.get(current)\n if (field && !set.nameToLocalAttribute.has(current)) {\n a.push(field)\n }\n return a\n }, [])\n fields.sort((a: ContainedField, b: ContainedField) => a.position - b.position)\n return fields\n }\n\n private encodeAttribute (name: string, val: string): void {\n if (val == null) {\n return\n }\n const buffer = this.buffer\n buffer.writeString(name)\n buffer.writeChar(AsciiChars.Equal)\n buffer.writeChar(AsciiChars.Dq)\n buffer.writeString(val)\n buffer.writeChar(AsciiChars.Dq)\n }\n\n private attributes (o: ILooseObject, set: IContainedSet, depth: number, attributePerLine: boolean): void {\n const newLine = this.eol\n const indent: string = '\\t'.repeat(depth + 1)\n const attributes = set.localAttribute\n const buffer = this.buffer\n if (attributes.length && attributePerLine) {\n buffer.writeString(newLine)\n buffer.writeString(indent)\n }\n const populatedAttributes: IPopulatedAttributes = this.getPopulatedAttributes(o, attributes)\n for (let a = 0; a < populatedAttributes.values.length; ++a) {\n const last = a === populatedAttributes.values.length - 1\n const f = populatedAttributes.fields[a]\n if (a || this.attributePerLine) buffer.writeChar(AsciiChars.Space)\n this.encodeAttribute(f.name, FixmlEncoder.asString(f, populatedAttributes.values[a]))\n if (!last && attributePerLine) {\n buffer.writeString(newLine)\n buffer.writeString(indent)\n }\n }\n }\n\n private getPopulatedAttributes (o: ILooseObject, attributes: ContainedSimpleField[]): IPopulatedAttributes {\n return attributes.reduce<IPopulatedAttributes>((a: IPopulatedAttributes, f: ContainedSimpleField) => {\n let v: any = o[f.definition.name]\n if (v == null) {\n v = o[f.name]\n }\n if (v != null) {\n a.values.push(v)\n a.fields.push(f)\n }\n return a\n }, {\n values: [],\n fields: []\n })\n }\n\n private complexGroup (o: ILooseObject, field: ContainedField, depth: number): void {\n const gf: ContainedGroupField = field as ContainedGroupField\n const elements: ILooseObject[] = o[gf.definition.name]\n if (elements) {\n if (Array.isArray(elements)) {\n for (const e of elements) {\n this.buffer.writeString(this.eol)\n this.toXml(e, gf.name, gf.definition, depth + 1)\n }\n } else {\n throw new Error(`expected array for member ${gf.definition.name}`)\n }\n }\n }\n\n private complexComponent (o: ILooseObject, field: ContainedField, depth: number): void {\n const cf: ContainedComponentField = field as ContainedComponentField\n const def = cf.definition\n const instance: ILooseObject = o[def.name]\n if (instance) {\n this.buffer.writeString(this.eol)\n this.toXml(instance, cf.name, def, depth + 1)\n }\n }\n\n reset (): void {\n this.buffer.reset()\n }\n\n trim (): Buffer {\n return this.buffer.copy()\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"msg-view.js","sourceRoot":"","sources":["../../src/buffer/msg-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { TagPos } from './tag/tag-pos'\nimport { SegmentDescription } from './segment/segment-description'\nimport { Structure } from './structure'\nimport { Tags } from './tag/tags'\nimport {\n ContainedComponentField,\n ContainedField,\n IContainedSet,\n ContainedGroupField,\n ContainedSimpleField\n} from '../dictionary/contained'\nimport { SetReduce } from '../dictionary'\nimport { ILooseObject } from '../collections/collection'\nimport { ElasticBuffer } from './elastic-buffer'\nimport { FixDefinitions, GroupFieldDefinition, SimpleFieldDefinition } from '../dictionary/definition'\nimport { ITypeDispatcher } from '../dictionary/type-dispatcher'\nimport { ContainedSetType } from '../dictionary/contained-set-type'\n\nexport abstract class MsgView {\n protected sortedTagPosForwards: TagPos[]\n protected sortedTagPosBackwards: TagPos[]\n private readonly reducer: SetReduce<ILooseObject> = new SetReduce<ILooseObject>()\n\n protected constructor (public readonly definitions: FixDefinitions, public readonly segment: SegmentDescription, public readonly structure: Structure | null) {\n }\n\n protected static asVerbose = (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos): string => {\n const newLine = require('os').EOL\n let desc: string\n let name: string\n if (field) {\n name = field.name || 'unknown'\n if (field.isEnum()) {\n desc = `${val}[${field.resolveEnum(val)}]${newLine}\\t${field.description ?? ''}${newLine}${newLine}`\n } else {\n desc = `${val}${newLine}t${field.description ?? ''}${newLine}${newLine}`\n }\n } else {\n name = 'unknown'\n desc = 'na'\n }\n return `[${i}] ${tp.tag} (${name}) = ${desc}`\n }\n\n protected static asToken = (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos): string => {\n const perLine: number = 2\n const newLine = require('os').EOL\n // [280] 814 (ApplQueueResolution) = 2[OverlayLast][281] 10 (CheckSum) = 80\n let desc: string\n let name: string\n if (field) {\n name = field.name || 'unknown'\n if (field.isEnum()) {\n desc = `${val}[${field.resolveEnum(val)}]`\n } else {\n desc = `${val}`\n }\n } else {\n desc = `${val}`\n name = 'unknown'\n }\n let delimiter: string\n if (i === 1 || (i < count && i % perLine - 1 === 0)) {\n delimiter = newLine\n } else {\n delimiter = i < count ? ', ' : ''\n }\n return `[${i}] ${tp.tag} (${name}) = ${desc}${delimiter}`\n }\n\n // return list of any tags parsed that are not valid\n public invalid (): number[] {\n const invalidTags: number[] = []\n const set = this.segment.set\n if (set == null) return []\n const tags = this.structure?.tags ?? null\n if (tags == null) return []\n for (let i = 0; i < tags.nextTagPos; ++i) {\n const tag = tags.tagPos[i].tag\n if (tag <= 0 || !set.containedTag[tag]) {\n invalidTags[invalidTags.length] = tag\n }\n }\n return invalidTags\n }\n\n // list of tags that must be present\n public missing (): number[] {\n if (this.segment == null) return []\n if (this.segment.set == null) return []\n return this.missingRequired(this.segment.set, [])\n }\n\n /**\n * does this view contain this tag\n * @param tagOrName the name or tag of field to check 8 or BeginString\n */\n public contains (tagOrName: number | string): boolean {\n const tag: number = this.resolveTag(tagOrName)\n const position: number = this.getPosition(tag)\n return position >= 0\n }\n\n /**\n * if this view represents a repeated group then return a sub view representing\n * this instance of repeated group.\n * @param i the index to return i.e. 0 is first within repeated group\n */\n public getGroupInstance (i: number): MsgView | null {\n const instance: SegmentDescription | null = this.segment?.getInstance(i)\n if (!instance) {\n return null\n }\n return this.create(instance)\n }\n\n public getUndefined (): SegmentDescription | SegmentDescription[] | null {\n return this.structure?.layout['.undefined']\n }\n\n public undefinedForMsg (): string | null {\n let msg: string | null = null\n const undefinedTags = this.getUndefined()\n if (undefinedTags) {\n if (Array.isArray(undefinedTags)) {\n msg = 'undefined tags = ' + undefinedTags.map((e: SegmentDescription) => e.startTag.toString()).join(', ')\n } else {\n msg = `undefined tag = ${undefinedTags.startTag}`\n }\n }\n return msg\n }\n\n /**\n * if this view represents a repeated group then return number\n * of repeated instances within this view\n */\n public groupCount (): number {\n const positions = this.segment.delimiterPositions\n return positions ? positions.length : 0\n }\n\n /**\n * regardless of how this type is represented in data dictionary,\n * return its value as a string.\n * @param tagOrName name or tag to return 8 or BeginString\n */\n public getString (tagOrName: number | string): string | null {\n const tag: number = this.resolveTag(tagOrName)\n if (tag == null) {\n return null\n }\n const position: number = this.getPosition(tag)\n if (position < 0) {\n return null\n }\n return this.stringAtPosition(position)\n }\n\n /**\n * for a repeated group, one field may be repeted across each instance of a component\n * return all values for a specified field as array of strings\n * @param tagOrName the name of the repeated field to fetch\n */\n public getStrings (tagOrName: number | string | null = null): Array<(string | null)> | null {\n if (!tagOrName) {\n return this.allStrings()\n }\n tagOrName = tagOrName || -1\n const tag: number = this.resolveTag(tagOrName)\n if (tag == null) {\n return null\n }\n const positions: number[] = this.getPositions(tag)\n if (positions == null) {\n return null\n }\n return positions.map((position: number) => {\n return this.stringAtPosition(position)\n })\n }\n\n /**\n * returns typed value of a sinple field within this view\n * @param tagOrName the name or tag of required field e.g. 8, BeginString\n */\n public getTyped (tagOrName: number | string): (boolean | string | number | Date | Buffer | null) {\n const tag: number = this.resolveTag(tagOrName)\n if (tag == null) {\n return null\n }\n const field: SimpleFieldDefinition | null = this.definitions.tagToSimple[tag] ?? null\n if (field == null) {\n return null\n }\n return this.toTyped(field)\n }\n\n /**\n * use a varargs list of tags or tag names to fetch typed values for those fields within this view.\n * @param tagOrNames list of tags e.g. 'BeginString', 'BodyLength', ...\n */\n public getTypedList (...tagOrNames: Array<number | string>): Array<boolean | string | number | Date | Buffer | null> {\n return tagOrNames.map((s) => this.getTyped(s))\n }\n\n /**\n * use an array of tags or tag names to fetch typed values for those fields within this view.\n * @param tagOrName the list of params as array ['BeginString','BodyLength', 'MsgType']\n */\n public getTypedTags (tagOrName: Array<string | number>): Array<boolean | string | number | Date | Buffer | null> {\n return tagOrName.map((s) => this.getTyped(s))\n }\n\n /**\n * produce an object representation of the view which when coupled with its\n * interface (generated against the same dictionary source) will allow easy\n * navigation of the object where a group is resolved to an array and simple\n * fields are properties. This is relatively expensive operation as every\n * field is fully resolved regardless of depth i.e. all groups and compoennts\n * are fully resolved.\n */\n public toObject (): ILooseObject | ILooseObject[] | null {\n const segment: SegmentDescription = this.segment\n if (segment.set == null) return null\n if (segment.delimiterTag) {\n switch (segment.set.type) {\n case ContainedSetType.Group: {\n return this.asInstances((segment.set as GroupFieldDefinition).name)\n }\n case ContainedSetType.Msg: {\n // this is a batch of messages\n const hdrView = this.getView('Hdr')\n const batch: ILooseObject = {}\n if (hdrView) {\n const name = hdrView.segment.set?.name ?? 'na'\n batch[name] = hdrView.toObject()\n }\n batch[segment.name] = this.asInstances(segment.name)\n return batch\n }\n }\n }\n return this.asLoose(segment.set)\n }\n\n /**\n * easy human-readable format showing each field, its position, value and resolved\n * enum.\n */\n public toString (): string {\n return this.stringify(MsgView.asToken)\n }\n\n public toVerbose (): string {\n return this.stringify(MsgView.asVerbose)\n }\n\n /**\n * a string in JSON format representing this view as an object\n */\n public toJson (): string {\n return JSON.stringify(this.toObject(), null, 4)\n }\n\n /**\n * fetch a nested view, either by a single name - getView('Instrument') - or by a\n * dotted path walked a step at a time - getView('Parties.PtysSubGrp')\n */\n public getView (name: string): MsgView | null {\n // the dotted form is the exception. resolve a plain name without paying for\n // the parts array and the closure a split and reduce would allocate - the\n // component walk in toObject and validate comes through here per component.\n if (!name.includes('.')) {\n return this.resolveChild(name)\n }\n let view: MsgView | null = this\n for (const part of name.split('.')) {\n view = view.resolveChild(part)\n if (!view) {\n return null\n }\n }\n return view\n }\n\n /**\n * resolve one step of a view path against this view\n */\n private resolveChild (name: string): MsgView | null {\n const structure = this.structure\n const singleton: SegmentDescription | null = structure?.firstContainedWithin(name, this.segment) ?? null\n if (singleton) {\n return this.create(singleton)\n }\n // is this a full name where abbreviation exists\n const component: ContainedField | null = this.segment.set?.localNameToField.get(name) ?? null\n\n if (component) {\n const abbreviated: SegmentDescription | null = structure?.firstContainedWithin(component.name, this.segment) ?? null\n if (abbreviated) {\n return this.create(abbreviated)\n }\n }\n return null\n }\n\n public abstract checksum (): number\n\n public abstract clone (): MsgView\n\n protected abstract create (singleton: SegmentDescription): MsgView\n\n protected abstract stringAtPosition (position: number): string | null\n\n protected abstract toTyped (field: SimpleFieldDefinition): boolean | string | number | Date | Buffer | null\n\n protected resolveTag (tagOrName: number | string): number {\n let tag: number\n const set = this.segment.set\n if (typeof (tagOrName) === 'string') {\n if (set == null) return 0\n const cf = set.simple.get(tagOrName)\n const f: SimpleFieldDefinition | null = cf ? cf.definition : this.definitions.simple.get(tagOrName) ?? null\n if (f == null) {\n return -1\n }\n tag = f.tag\n } else {\n tag = tagOrName\n }\n return tag\n }\n\n // fetch all positions of a particular tag.\n protected getPositions (tag: number): number[] {\n const forwards: TagPos[] = this.sortedTagPosForwards\n const backwards: TagPos[] = this.sortedTagPosBackwards\n const position: number = this.binarySearch(tag)\n if (position < 0) {\n return []\n }\n\n const count: number = forwards.length\n const last: number = count - 1\n let end: number = position\n while (end <= last) {\n if (tag !== forwards[end].tag) {\n break\n }\n ++end\n }\n // avoid backtracking over an array by scan forwards on a reversed copy\n let start: number = last - position\n while (start <= last) {\n if (tag !== backwards[start].tag) {\n break\n }\n ++start\n }\n const begin: number = last - (start - 1)\n const len: number = end - begin\n const positions: number[] = new Array(len)\n for (let i: number = begin; i < end; ++i) {\n positions[i - begin] = forwards[i].position\n }\n return positions\n }\n\n protected getPosition (tag: number): number {\n const pos: number = this.binarySearch(tag)\n if (pos >= 0) {\n return this.sortedTagPosForwards[pos].position\n } else {\n return -1\n }\n }\n\n private allStrings (): Array<(string | null)> {\n const segment: SegmentDescription = this.segment\n const range: number[] = []\n if (segment.segmentView) {\n for (const tp of segment.segmentView.tags) {\n range[range.length] = tp.position\n }\n } else {\n for (let i: number = segment.startPosition; i <= segment.endPosition; ++i) {\n range[range.length] = i\n }\n }\n return range.map((i: number) => this.stringAtPosition(i))\n }\n\n private asInstances (name: string): Array<ILooseObject | null> | null {\n const groupView: MsgView | null = this.getView(name)\n if (groupView == null) {\n return null\n }\n const groupArray = new Array<ILooseObject | null>(groupView.groupCount())\n const count: number = groupView.groupCount()\n for (let j: number = 0; j < count; ++j) {\n const instance: MsgView | null = groupView.getGroupInstance(j)\n groupArray[j] = instance?.toObject() ?? null\n }\n return groupArray\n }\n\n private asLoose (def: IContainedSet): ILooseObject {\n\n return this.reducer.reduce(def, {\n group: (a: ILooseObject, field: ContainedGroupField) => { this.asLooseGroup(a, field) },\n simple: (a: ILooseObject, field: ContainedSimpleField) => { this.asLooseSimple(a, field) },\n component: (a: ILooseObject, field: ContainedComponentField) => { this.asLooseComponent(a, field) }\n } as ITypeDispatcher<ILooseObject>, def.localAttribute.reduce<ILooseObject>((a: ILooseObject, sf: ContainedSimpleField) => {\n const def = sf.definition\n const position: number = this.getPosition(def.tag)\n if (position >= 0) {\n a[def.name] = this.toTyped(def)\n }\n return a\n }, {}))\n }\n\n private missingRequired (def: IContainedSet, tags: number []): number[] {\n const reducer = new SetReduce<number[]>()\n const dispatcher: ITypeDispatcher<number[]> = {\n group: (a: number[], field: ContainedGroupField) => { this.missingGroup(def, field, a) },\n simple: (a: number[], field: ContainedSimpleField) => { this.missingSimple(field, a) },\n component: (a: number[], field: ContainedComponentField) => { this.missingComponent(field, a) }\n }\n return reducer.reduce(def, dispatcher, tags)\n }\n\n private missingSimple (sf: ContainedSimpleField, a: number[]): void {\n if (sf.required && this.getPosition(sf.definition.tag) < 0) {\n a.push(sf.definition.tag)\n }\n }\n\n private missingComponent (cf: ContainedComponentField, a: number[]): void {\n const view: MsgView | null = this.getView(cf.name)\n if (view) {\n view.missingRequired(cf.definition, a)\n }\n }\n\n private missingGroup (def: IContainedSet, gf: ContainedGroupField, tags: number []): void {\n const name = gf.definition.noOfField ? gf.definition.noOfField.name : def.name\n const groupView: MsgView | null = this.getView(name) ?? this.getView(gf.definition.name)\n if (groupView == null) {\n return\n }\n const count: number = groupView.groupCount()\n for (let j: number = 0; j < count; ++j) {\n const instance: MsgView | null = groupView.getGroupInstance(j)\n instance?.missingRequired(gf.definition, tags)\n }\n }\n\n private asLooseComponent (a: ILooseObject, cf: ContainedComponentField): void {\n const view: MsgView | null = this.getView(cf.name)\n if (view) {\n const component = view.toObject()\n if (component) {\n a[cf.definition.name] = component\n }\n }\n }\n\n private asLooseSimple (a: ILooseObject, sf: ContainedSimpleField): void {\n const def = sf.definition\n const position: number = this.getPosition(def.tag)\n if (position >= 0) {\n const asSimple: boolean | string | number | Date | Buffer | null = this.toTyped(def)\n if (asSimple != null) { // beware, may be false value\n a[sf.name] = asSimple\n }\n }\n }\n\n private asLooseGroup (a: ILooseObject, gf: ContainedGroupField): void {\n const def = gf.definition\n const name = def.noOfField ? def.noOfField.name : def.name\n const instances: ILooseObject | null = this.asInstances(name) ?? this.asInstances(def.name)\n if (instances) {\n a[def.name] = instances\n }\n }\n\n private binarySearch (tag: number): number {\n if (this.structure == null) return -1\n let forwards = this.sortedTagPosForwards\n if (!forwards) {\n const segment = this.segment\n if (segment.segmentView) {\n // fragmented component: use the collected tags from SegmentView\n forwards = this.sortedTagPosForwards = segment.segmentView.tags.slice()\n forwards.sort(TagPos.compare)\n } else {\n forwards = this.sortedTagPosForwards = this.structure.tags.tagPos.slice(segment.startPosition, segment.endPosition + 1)\n forwards.sort(TagPos.compare)\n }\n this.sortedTagPosBackwards = forwards.slice().reverse()\n }\n return TagPos.binarySearch(forwards, tag)\n }\n\n private stringify (getToken: (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos) => string): string {\n const structure = this.structure\n const buffer: ElasticBuffer = new ElasticBuffer()\n const segment: SegmentDescription = this.segment\n if (structure == null) return ''\n const tags: Tags = structure.tags\n const count: number = segment.endPosition - segment.startPosition\n const simple: Map<string, SimpleFieldDefinition> = this.definitions.simple\n\n for (let i: number = segment.startPosition; i <= segment.endPosition; ++i) {\n const tagPos: TagPos = tags.tagPos[i]\n const field: SimpleFieldDefinition | undefined = simple.get(tagPos.tag.toString())\n const val: string | null = this.stringAtPosition(i) ?? ''\n // [0] 8 (BeginString) = FIX4.4\n const token = field ? getToken(field, val, i - segment.startPosition, count, tagPos) : `[${i}] ${tagPos.tag} (unknown) = ${val}, `\n buffer.writeString(token)\n }\n\n return buffer.toString()\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"msg-view.js","sourceRoot":"","sources":["../../src/buffer/msg-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { TagPos } from './tag/tag-pos'\nimport { SegmentDescription } from './segment/segment-description'\nimport { Structure } from './structure'\nimport { Tags } from './tag/tags'\nimport {\n ContainedComponentField,\n ContainedField,\n IContainedSet,\n ContainedGroupField,\n ContainedSimpleField\n} from '../dictionary/contained'\nimport { SetReduce } from '../dictionary'\nimport { ILooseObject } from '../collections/collection'\nimport { ElasticBuffer } from './elastic-buffer'\nimport { FixDefinitions, GroupFieldDefinition, SimpleFieldDefinition } from '../dictionary/definition'\nimport { ITypeDispatcher } from '../dictionary/type-dispatcher'\nimport { ContainedSetType } from '../dictionary/contained-set-type'\n\nexport abstract class MsgView {\n protected sortedTagPosForwards: TagPos[]\n protected sortedTagPosBackwards: TagPos[]\n private readonly reducer: SetReduce<ILooseObject> = new SetReduce<ILooseObject>()\n\n protected constructor (public readonly definitions: FixDefinitions, public readonly segment: SegmentDescription, public readonly structure: Structure | null) {\n }\n\n protected static asVerbose = (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos): string => {\n const newLine = require('os').EOL\n let desc: string\n let name: string\n if (field) {\n name = field.name || 'unknown'\n if (field.isEnum()) {\n desc = `${val}[${field.resolveEnum(val)}]${newLine}\\t${field.description ?? ''}${newLine}${newLine}`\n } else {\n desc = `${val}${newLine}t${field.description ?? ''}${newLine}${newLine}`\n }\n } else {\n name = 'unknown'\n desc = 'na'\n }\n return `[${i}] ${tp.tag} (${name}) = ${desc}`\n }\n\n protected static asToken = (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos): string => {\n const perLine: number = 2\n const newLine = require('os').EOL\n // [280] 814 (ApplQueueResolution) = 2[OverlayLast][281] 10 (CheckSum) = 80\n let desc: string\n let name: string\n if (field) {\n name = field.name || 'unknown'\n if (field.isEnum()) {\n desc = `${val}[${field.resolveEnum(val)}]`\n } else {\n desc = `${val}`\n }\n } else {\n desc = `${val}`\n name = 'unknown'\n }\n let delimiter: string\n if (i === 1 || (i < count && i % perLine - 1 === 0)) {\n delimiter = newLine\n } else {\n delimiter = i < count ? ', ' : ''\n }\n return `[${i}] ${tp.tag} (${name}) = ${desc}${delimiter}`\n }\n\n // return list of any tags parsed that are not valid\n public invalid (): number[] {\n const invalidTags: number[] = []\n const set = this.segment.set\n if (set == null) return []\n const tags = this.structure?.tags ?? null\n if (tags == null) return []\n for (let i = 0; i < tags.nextTagPos; ++i) {\n const tag = tags.tagPos[i].tag\n if (tag <= 0 || !set.containedTag[tag]) {\n invalidTags[invalidTags.length] = tag\n }\n }\n return invalidTags\n }\n\n // list of tags that must be present\n public missing (): number[] {\n if (this.segment == null) return []\n if (this.segment.set == null) return []\n return this.missingRequired(this.segment.set, [])\n }\n\n /**\n * does this view contain this tag\n * @param tagOrName the name or tag of field to check 8 or BeginString\n */\n public contains (tagOrName: number | string): boolean {\n const tag: number = this.resolveTag(tagOrName)\n const position: number = this.getPosition(tag)\n return position >= 0\n }\n\n /**\n * if this view represents a repeated group then return a sub view representing\n * this instance of repeated group.\n * @param i the index to return i.e. 0 is first within repeated group\n */\n public getGroupInstance (i: number): MsgView | null {\n const instance: SegmentDescription | null = this.segment?.getInstance(i)\n if (!instance) {\n return null\n }\n return this.create(instance)\n }\n\n public getUndefined (): SegmentDescription | SegmentDescription[] | null {\n return this.structure?.layout['.undefined']\n }\n\n public undefinedForMsg (): string | null {\n let msg: string | null = null\n const undefinedTags = this.getUndefined()\n if (undefinedTags) {\n if (Array.isArray(undefinedTags)) {\n msg = 'undefined tags = ' + undefinedTags.map((e: SegmentDescription) => e.startTag.toString()).join(', ')\n } else {\n msg = `undefined tag = ${undefinedTags.startTag}`\n }\n }\n return msg\n }\n\n /**\n * if this view represents a repeated group then return number\n * of repeated instances within this view\n */\n public groupCount (): number {\n const positions = this.segment.delimiterPositions\n return positions ? positions.length : 0\n }\n\n /**\n * regardless of how this type is represented in data dictionary,\n * return its value as a string.\n * @param tagOrName name or tag to return 8 or BeginString\n */\n public getString (tagOrName: number | string): string | null {\n const tag: number = this.resolveTag(tagOrName)\n if (tag == null) {\n return null\n }\n const position: number = this.getPosition(tag)\n if (position < 0) {\n return null\n }\n return this.stringAtPosition(position)\n }\n\n /**\n * for a repeated group, one field may be repeted across each instance of a component\n * return all values for a specified field as array of strings\n * @param tagOrName the name of the repeated field to fetch\n */\n public getStrings (tagOrName: number | string | null = null): Array<(string | null)> | null {\n if (!tagOrName) {\n return this.allStrings()\n }\n tagOrName = tagOrName || -1\n const tag: number = this.resolveTag(tagOrName)\n if (tag == null) {\n return null\n }\n const positions: number[] = this.getPositions(tag)\n if (positions == null) {\n return null\n }\n return positions.map((position: number) => {\n return this.stringAtPosition(position)\n })\n }\n\n /**\n * returns typed value of a sinple field within this view\n * @param tagOrName the name or tag of required field e.g. 8, BeginString\n */\n public getTyped (tagOrName: number | string): (boolean | string | number | Date | Buffer | null) {\n const tag: number = this.resolveTag(tagOrName)\n if (tag == null) {\n return null\n }\n const field: SimpleFieldDefinition | null = this.definitions.tagToSimple[tag] ?? null\n if (field == null) {\n return null\n }\n return this.toTyped(field)\n }\n\n /**\n * use a varargs list of tags or tag names to fetch typed values for those fields within this view.\n * @param tagOrNames list of tags e.g. 'BeginString', 'BodyLength', ...\n */\n public getTypedList (...tagOrNames: Array<number | string>): Array<boolean | string | number | Date | Buffer | null> {\n return tagOrNames.map((s) => this.getTyped(s))\n }\n\n /**\n * use an array of tags or tag names to fetch typed values for those fields within this view.\n * @param tagOrName the list of params as array ['BeginString','BodyLength', 'MsgType']\n */\n public getTypedTags (tagOrName: Array<string | number>): Array<boolean | string | number | Date | Buffer | null> {\n return tagOrName.map((s) => this.getTyped(s))\n }\n\n /**\n * produce an object representation of the view which when coupled with its\n * interface (generated against the same dictionary source) will allow easy\n * navigation of the object where a group is resolved to an array and simple\n * fields are properties. This is relatively expensive operation as every\n * field is fully resolved regardless of depth i.e. all groups and compoennts\n * are fully resolved.\n */\n public toObject (): ILooseObject | ILooseObject[] | null {\n const segment: SegmentDescription = this.segment\n if (segment.set == null) return null\n if (segment.delimiterTag) {\n switch (segment.set.type) {\n case ContainedSetType.Group: {\n return this.asInstances((segment.set as GroupFieldDefinition).name)\n }\n case ContainedSetType.Msg: {\n // this is a batch of messages\n const hdrView = this.getView('Hdr')\n const batch: ILooseObject = {}\n if (hdrView) {\n const name = hdrView.segment.set?.name ?? 'na'\n batch[name] = hdrView.toObject()\n }\n batch[segment.name] = this.asInstances(segment.name)\n return batch\n }\n }\n }\n return this.asLoose(segment.set)\n }\n\n /**\n * easy human-readable format showing each field, its position, value and resolved\n * enum.\n */\n public toString (): string {\n return this.stringify(MsgView.asToken)\n }\n\n public toVerbose (): string {\n return this.stringify(MsgView.asVerbose)\n }\n\n /**\n * a string in JSON format representing this view as an object\n */\n public toJson (): string {\n return JSON.stringify(this.toObject(), null, 4)\n }\n\n /**\n * fetch a nested view, either by a single name - getView('Instrument') - or by a\n * dotted path walked a step at a time - getView('Parties.PtysSubGrp')\n */\n public getView (name: string): MsgView | null {\n // the dotted form is the exception. resolve a plain name without paying for\n // the parts array and the closure a split and reduce would allocate - the\n // component walk in toObject and validate comes through here per component.\n if (!name.includes('.')) {\n return this.resolveChild(name)\n }\n let view: MsgView | null = this\n for (const part of name.split('.')) {\n view = view.resolveChild(part)\n if (!view) {\n return null\n }\n }\n return view\n }\n\n /**\n * resolve one step of a view path against this view\n */\n private resolveChild (name: string): MsgView | null {\n const structure = this.structure\n const singleton: SegmentDescription | null = structure?.firstContainedWithin(name, this.segment) ?? null\n if (singleton) {\n return this.create(singleton)\n }\n // is this a full name where abbreviation exists\n const component: ContainedField | null = this.segment.set?.localNameToField.get(name) ?? null\n\n if (component) {\n const abbreviated: SegmentDescription | null = structure?.firstContainedWithin(component.name, this.segment) ?? null\n if (abbreviated) {\n return this.create(abbreviated)\n }\n }\n return null\n }\n\n public abstract checksum (): number\n\n public abstract clone (): MsgView\n\n protected abstract create (singleton: SegmentDescription): MsgView\n\n protected abstract stringAtPosition (position: number): string | null\n\n protected abstract toTyped (field: SimpleFieldDefinition): boolean | string | number | Date | Buffer | null\n\n protected resolveTag (tagOrName: number | string): number {\n let tag: number\n const set = this.segment.set\n if (typeof (tagOrName) === 'string') {\n if (set == null) return 0\n const cf = set.simple.get(tagOrName)\n const f: SimpleFieldDefinition | null = cf ? cf.definition : this.definitions.simple.get(tagOrName) ?? null\n if (f == null) {\n return -1\n }\n tag = f.tag\n } else {\n tag = tagOrName\n }\n return tag\n }\n\n // fetch all positions of a particular tag.\n protected getPositions (tag: number): number[] {\n const forwards: TagPos[] = this.sortedTagPosForwards\n const backwards: TagPos[] = this.sortedTagPosBackwards\n const position: number = this.binarySearch(tag)\n if (position < 0) {\n return []\n }\n\n const count: number = forwards.length\n const last: number = count - 1\n let end: number = position\n while (end <= last) {\n if (tag !== forwards[end].tag) {\n break\n }\n ++end\n }\n // avoid backtracking over an array by scan forwards on a reversed copy\n let start: number = last - position\n while (start <= last) {\n if (tag !== backwards[start].tag) {\n break\n }\n ++start\n }\n const begin: number = last - (start - 1)\n const len: number = end - begin\n const positions: number[] = new Array(len)\n for (let i: number = begin; i < end; ++i) {\n positions[i - begin] = forwards[i].position\n }\n return positions\n }\n\n protected getPosition (tag: number): number {\n const pos: number = this.binarySearch(tag)\n if (pos >= 0) {\n return this.sortedTagPosForwards[pos].position\n } else {\n return -1\n }\n }\n\n private allStrings (): Array<(string | null)> {\n const segment: SegmentDescription = this.segment\n const range: number[] = []\n if (segment.segmentView) {\n for (const tp of segment.segmentView.tags) {\n range[range.length] = tp.position\n }\n } else {\n for (let i: number = segment.startPosition; i <= segment.endPosition; ++i) {\n range[range.length] = i\n }\n }\n return range.map((i: number) => this.stringAtPosition(i))\n }\n\n private asInstances (name: string): Array<ILooseObject | null> | null {\n const groupView: MsgView | null = this.getView(name)\n if (groupView == null) {\n return null\n }\n const groupArray = new Array<ILooseObject | null>(groupView.groupCount())\n const count: number = groupView.groupCount()\n for (let j: number = 0; j < count; ++j) {\n const instance: MsgView | null = groupView.getGroupInstance(j)\n groupArray[j] = instance?.toObject() ?? null\n }\n return groupArray\n }\n\n private asLoose (def: IContainedSet): ILooseObject {\n\n return this.reducer.reduce(def, {\n group: (a: ILooseObject, field: ContainedGroupField) => { this.asLooseGroup(a, field) },\n simple: (a: ILooseObject, field: ContainedSimpleField) => { this.asLooseSimple(a, field) },\n component: (a: ILooseObject, field: ContainedComponentField) => { this.asLooseComponent(a, field) }\n }, def.localAttribute.reduce<ILooseObject>((a: ILooseObject, sf: ContainedSimpleField) => {\n const def = sf.definition\n const position: number = this.getPosition(def.tag)\n if (position >= 0) {\n a[def.name] = this.toTyped(def)\n }\n return a\n }, {}))\n }\n\n private missingRequired (def: IContainedSet, tags: number []): number[] {\n const reducer = new SetReduce<number[]>()\n const dispatcher: ITypeDispatcher<number[]> = {\n group: (a: number[], field: ContainedGroupField) => { this.missingGroup(def, field, a) },\n simple: (a: number[], field: ContainedSimpleField) => { this.missingSimple(field, a) },\n component: (a: number[], field: ContainedComponentField) => { this.missingComponent(field, a) }\n }\n return reducer.reduce(def, dispatcher, tags)\n }\n\n private missingSimple (sf: ContainedSimpleField, a: number[]): void {\n if (sf.required && this.getPosition(sf.definition.tag) < 0) {\n a.push(sf.definition.tag)\n }\n }\n\n private missingComponent (cf: ContainedComponentField, a: number[]): void {\n const view: MsgView | null = this.getView(cf.name)\n if (view) {\n view.missingRequired(cf.definition, a)\n }\n }\n\n private missingGroup (def: IContainedSet, gf: ContainedGroupField, tags: number []): void {\n const name = gf.definition.noOfField ? gf.definition.noOfField.name : def.name\n const groupView: MsgView | null = this.getView(name) ?? this.getView(gf.definition.name)\n if (groupView == null) {\n return\n }\n const count: number = groupView.groupCount()\n for (let j: number = 0; j < count; ++j) {\n const instance: MsgView | null = groupView.getGroupInstance(j)\n instance?.missingRequired(gf.definition, tags)\n }\n }\n\n private asLooseComponent (a: ILooseObject, cf: ContainedComponentField): void {\n const view: MsgView | null = this.getView(cf.name)\n if (view) {\n const component = view.toObject()\n if (component) {\n a[cf.definition.name] = component\n }\n }\n }\n\n private asLooseSimple (a: ILooseObject, sf: ContainedSimpleField): void {\n const def = sf.definition\n const position: number = this.getPosition(def.tag)\n if (position >= 0) {\n const asSimple: boolean | string | number | Date | Buffer | null = this.toTyped(def)\n if (asSimple != null) { // beware, may be false value\n a[sf.name] = asSimple\n }\n }\n }\n\n private asLooseGroup (a: ILooseObject, gf: ContainedGroupField): void {\n const def = gf.definition\n const name = def.noOfField ? def.noOfField.name : def.name\n const instances: ILooseObject | null = this.asInstances(name) ?? this.asInstances(def.name)\n if (instances) {\n a[def.name] = instances\n }\n }\n\n private binarySearch (tag: number): number {\n if (this.structure == null) return -1\n let forwards = this.sortedTagPosForwards\n if (!forwards) {\n const segment = this.segment\n if (segment.segmentView) {\n // fragmented component: use the collected tags from SegmentView\n forwards = this.sortedTagPosForwards = segment.segmentView.tags.slice()\n forwards.sort(TagPos.compare)\n } else {\n forwards = this.sortedTagPosForwards = this.structure.tags.tagPos.slice(segment.startPosition, segment.endPosition + 1)\n forwards.sort(TagPos.compare)\n }\n this.sortedTagPosBackwards = forwards.slice().reverse()\n }\n return TagPos.binarySearch(forwards, tag)\n }\n\n private stringify (getToken: (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos) => string): string {\n const structure = this.structure\n const buffer: ElasticBuffer = new ElasticBuffer()\n const segment: SegmentDescription = this.segment\n if (structure == null) return ''\n const tags: Tags = structure.tags\n const count: number = segment.endPosition - segment.startPosition\n const simple: Map<string, SimpleFieldDefinition> = this.definitions.simple\n\n for (let i: number = segment.startPosition; i <= segment.endPosition; ++i) {\n const tagPos: TagPos = tags.tagPos[i]\n const field: SimpleFieldDefinition | undefined = simple.get(tagPos.tag.toString())\n const val: string | null = this.stringAtPosition(i) ?? ''\n // [0] 8 (BeginString) = FIX4.4\n const token = field ? getToken(field, val, i - segment.startPosition, count, tagPos) : `[${i}] ${tagPos.tag} (unknown) = ${val}, `\n buffer.writeString(token)\n }\n\n return buffer.toString()\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"winston-logger.js","sourceRoot":"","sources":["../../src/config/winston-logger.ts"],"names":[],"mappings":";;;AAEA,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;AAC/D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;AAE7C,MAAa,aAAa;IAWxB,YAA6B,UAAe,aAAa,CAAC,cAAc,EAAE;QAA7C,YAAO,GAAP,OAAO,CAAsC;QACxE,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACxC,CAAC;IAEM,MAAM,CAAC,cAAc,CAAE,QAAgB,OAAO;QACnD,OAAO;YACL,MAAM,EAAE,OAAO,CACb,SAAS,EAAE,EACX,aAAa,CAAC,SAAS,CACxB;YACD,KAAK;YACL,UAAU,EAAE;gBACV,IAAI,UAAU,CAAC,OAAO,EAAE;aACzB;SACF,CAAA;IACH,CAAC;IAEM,MAAM,CAAC,WAAW,CAAE,QAAgB,EAAE,QAAgB,OAAO,EAAE,UAAkB,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,SAAc,OAAO,CAC7H,SAAS,EAAE,EACX,aAAa,CAAC,SAAS,CACxB;QACC,OAAO;YACL,MAAM;YACN,KAAK;YACL,UAAU,EAAE;gBACV,IAAI,UAAU,CAAC,IAAI,CAAC;oBAClB,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,OAAO;iBACjB,CAAC;aACH;SACF,CAAA;IACH,CAAC;IAEM,KAAK,CAAE,QAAgB,EAAE,UAAkB,EAAE,GAAG,IAAI,GAAG,IAAI;QAChE,MAAM,SAAS,GAAW,YAAY,CAAC;YACrC,MAAM,EAAE,aAAa,CAAC,WAAW;YACjC,KAAK,EAAE,MAAM;YACb,UAAU,EAAE;gBACV,IAAI,UAAU,CAAC,IAAI,CAAC;oBAClB,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,OAAO;iBACjB,CAAC;aACH;SACF,CAAC,CAAA;QAEF,OAAO;YACL,GAAG,EAAE,UAAU,GAAW;gBACxB,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,GAAG;iBACb,CAAC,CAAA;YACJ,CAAC;YAED,IAAI,EAAE,UAAU,GAAW;gBACxB,IAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;YACD,KAAK,EAAE,UAAU,GAAW;gBACzB,IAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;YACD,OAAO,EAAE,UAAU,GAAW;gBAC3B,IAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;YACD,KAAK,EAAE;YAEP,CAAC;SACc,CAAA;IACnB,CAAC;IAEM,IAAI,CAAE,IAAY;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAA;QAC7B,OAAO;YACL,IAAI,EAAE,UAAU,GAAW;gBACzB,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI;oBACJ,OAAO,EAAE,GAAG;iBACb,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,EAAE,UAAU,GAAW;gBAC1B,MAAM,CAAC,KAAK,CAAC;oBACX,IAAI;oBACJ,OAAO,EAAE,GAAG;iBACb,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,EAAE,UAAU,GAAW;gBAC5B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI;oBACJ,OAAO,EAAE,GAAG;iBACb,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,EAAE,UAAU,CAAQ;gBACvB,MAAM,CAAC,KAAK,CAAC;oBACX,IAAI;oBACJ,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,KAAK,EAAE;iBACrC,CAAC,CAAA;YACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"winston-logger.js","sourceRoot":"","sources":["../../src/config/winston-logger.ts"],"names":[],"mappings":"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","sourcesContent":["import { IJsFixLogger } from './js-fix-logger'\nimport { Logger } from 'winston'\nconst { createLogger, format, transports } = require('winston')\nconst { combine, timestamp, printf } = format\n\nexport class WinstonLogger {\n public static readonly appFormat = printf((info: any) => {\n return `${info.timestamp} [${info.type}] ${info.level}: ${info.message}`\n })\n\n public static readonly plainFormat = printf((info: any) => {\n return `${info.message}`\n })\n\n private readonly appLogger: Logger\n\n constructor (public readonly options: any = WinstonLogger.consoleOptions()) {\n this.appLogger = createLogger(options)\n }\n\n public static consoleOptions (level: string = 'debug'): any {\n return {\n format: combine(\n timestamp(),\n WinstonLogger.appFormat\n ),\n level,\n transports: [\n new transports.Console()\n ]\n }\n }\n\n public static fileOptions (fileName: string, level: string = 'debug', maxSize: number = 50 * 1024 * 1024, format: any = combine(\n timestamp(),\n WinstonLogger.appFormat\n )): any {\n return {\n format,\n level,\n transports: [\n new transports.File({\n filename: fileName,\n maxsize: maxSize\n })\n ]\n }\n }\n\n public plain (fileName: string, maxSize: number = 10 * 1024 * 1024): IJsFixLogger {\n const txtLogger: Logger = createLogger({\n format: WinstonLogger.plainFormat,\n level: 'info',\n transports: [\n new transports.File({\n filename: fileName,\n maxsize: maxSize\n })\n ]\n })\n\n return {\n log: function (txt: string) {\n txtLogger.info({\n type: 'info',\n message: txt\n })\n },\n\n info: function (msg: string): void {\n (this as any).log(msg)\n },\n debug: function (msg: string): void {\n (this as any).log(msg)\n },\n warning: function (msg: string): void {\n (this as any).log(msg)\n },\n error: function (): void {\n // nothing\n }\n } as IJsFixLogger\n }\n\n public make (type: string): IJsFixLogger {\n const logger = this.appLogger\n return {\n info: function (msg: string): void {\n logger.info({\n type,\n message: msg\n })\n },\n debug: function (msg: string): void {\n logger.debug({\n type,\n message: msg\n })\n },\n warning: function (msg: string): void {\n logger.warn({\n type,\n message: msg\n })\n },\n error: function (e: Error): void {\n logger.error({\n type,\n message: `${e.message} : ${e.stack}`\n })\n }\n }\n }\n}\n"]}
|