jspurefix 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/README.md +5 -2
  2. package/data/session/genkey.ps1 +179 -0
  3. package/dist/buffer/ascii/ascii-encoder.d.ts +1 -1
  4. package/dist/buffer/ascii/ascii-encoder.js +42 -30
  5. package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
  6. package/dist/buffer/ascii/ascii-view.d.ts +2 -2
  7. package/dist/buffer/ascii/ascii-view.js.map +1 -1
  8. package/dist/buffer/ascii/time-formatter.js.map +1 -1
  9. package/dist/buffer/elastic-buffer.js +1 -1
  10. package/dist/buffer/elastic-buffer.js.map +1 -1
  11. package/dist/buffer/encode-proxy.js.map +1 -1
  12. package/dist/buffer/fixml/fixml-encoder.js +1 -1
  13. package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
  14. package/dist/buffer/fixml/fixml-view.d.ts +2 -0
  15. package/dist/buffer/fixml/fixml-view.js +3 -0
  16. package/dist/buffer/fixml/fixml-view.js.map +1 -1
  17. package/dist/buffer/msg-view.d.ts +2 -0
  18. package/dist/buffer/msg-view.js +2 -2
  19. package/dist/buffer/msg-view.js.map +1 -1
  20. package/dist/dict-parser.js +9 -9
  21. package/dist/dict-parser.js.map +1 -1
  22. package/dist/dictionary/compiler/msg-compiler.js +2 -2
  23. package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
  24. package/dist/dictionary/parser/fix-repository/repository-xml-parser.js +1 -1
  25. package/dist/dictionary/parser/fix-repository/repository-xml-parser.js.map +1 -1
  26. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +1 -1
  27. package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
  28. package/dist/jsfix-cmd.js +3 -3
  29. package/dist/jsfix-cmd.js.map +1 -1
  30. package/dist/sample/http/oms/app.js +2 -2
  31. package/dist/sample/http/oms/app.js.map +1 -1
  32. package/dist/sample/launcher.js +2 -2
  33. package/dist/sample/launcher.js.map +1 -1
  34. package/dist/sample/tcp/qf-md/app.js +2 -2
  35. package/dist/sample/tcp/qf-md/app.js.map +1 -1
  36. package/dist/sample/tcp/recovering-skeleton/respawn-2.d.ts +2 -0
  37. package/dist/sample/tcp/recovering-skeleton/respawn-2.js +3 -0
  38. package/dist/sample/tcp/recovering-skeleton/respawn-2.js.map +1 -0
  39. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +1 -1
  40. package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
  41. package/dist/sample/tcp/skeleton/app.js +2 -2
  42. package/dist/sample/tcp/skeleton/app.js.map +1 -1
  43. package/dist/sample/tcp/skeleton/skeleton-session.d.ts +5 -1
  44. package/dist/sample/tcp/skeleton/skeleton-session.js +21 -2
  45. package/dist/sample/tcp/skeleton/skeleton-session.js.map +1 -1
  46. package/dist/sample/tcp/tls-trade-capture/app.js +2 -2
  47. package/dist/sample/tcp/tls-trade-capture/app.js.map +1 -1
  48. package/dist/sample/tcp/trade-capture/app.js +2 -2
  49. package/dist/sample/tcp/trade-capture/app.js.map +1 -1
  50. package/dist/sample/tcp/trade-capture/trade-capture-client.d.ts +1 -0
  51. package/dist/sample/tcp/trade-capture/trade-capture-client.js +7 -3
  52. package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
  53. package/dist/store/fix-msg-ascii-store-recovery.d.ts +12 -0
  54. package/dist/store/fix-msg-ascii-store-recovery.js +60 -0
  55. package/dist/store/fix-msg-ascii-store-recovery.js.map +1 -0
  56. package/dist/store/fix-msg-ascii-store-replay.d.ts +13 -0
  57. package/dist/store/fix-msg-ascii-store-replay.js +60 -0
  58. package/dist/store/fix-msg-ascii-store-replay.js.map +1 -0
  59. package/dist/store/fix-msg-ascii-store-resend.js +3 -2
  60. package/dist/store/fix-msg-ascii-store-resend.js.map +1 -1
  61. package/dist/store/fix-msg-store-record.js.map +1 -1
  62. package/dist/store/fix-replay-record.d.ts +12 -0
  63. package/dist/store/fix-replay-record.js +12 -0
  64. package/dist/store/fix-replay-record.js.map +1 -0
  65. package/dist/store/fix-resend-record.d.ts +12 -0
  66. package/dist/store/fix-resend-record.js +12 -0
  67. package/dist/store/fix-resend-record.js.map +1 -0
  68. package/dist/store/replay-record.d.ts +6 -0
  69. package/dist/store/replay-record.js +3 -0
  70. package/dist/store/replay-record.js.map +1 -0
  71. package/dist/store/store-replay-record.d.ts +12 -0
  72. package/dist/store/store-replay-record.js +12 -0
  73. package/dist/store/store-replay-record.js.map +1 -0
  74. package/dist/tcp/tls-options.d.ts +5 -0
  75. package/dist/tcp/tls-options.js +45 -0
  76. package/dist/tcp/tls-options.js.map +1 -0
  77. package/dist/test/ascii-encode.test.d.ts +1 -0
  78. package/dist/test/ascii-encode.test.js +416 -0
  79. package/dist/test/ascii-encode.test.js.map +1 -0
  80. package/dist/test/ascii-encoder.test.js +2 -2
  81. package/dist/test/ascii-encoder.test.js.map +1 -1
  82. package/dist/test/ascii-parser.test.js +9 -7
  83. package/dist/test/ascii-parser.test.js.map +1 -1
  84. package/dist/test/ascii-segment.test.js +7 -6
  85. package/dist/test/ascii-segment.test.js.map +1 -1
  86. package/dist/test/ascii-store-recovery.test.d.ts +1 -0
  87. package/dist/test/ascii-store-recovery.test.js +50 -0
  88. package/dist/test/ascii-store-recovery.test.js.map +1 -0
  89. package/dist/test/ascii-store-replay.test.js +2 -2
  90. package/dist/test/ascii-store-replay.test.js.map +1 -1
  91. package/dist/test/ascii-tag-pos.test.js +2 -2
  92. package/dist/test/ascii-tag-pos.test.js.map +1 -1
  93. package/dist/test/encode-proxy.test.js +1 -1
  94. package/dist/test/encode-proxy.test.js.map +1 -1
  95. package/dist/test/execution-report.test.js +2 -2
  96. package/dist/test/execution-report.test.js.map +1 -1
  97. package/dist/test/fix-log-replay.test.js +2 -2
  98. package/dist/test/fix-log-replay.test.js.map +1 -1
  99. package/dist/test/fix-repo-dict.test.js +1 -1
  100. package/dist/test/fix-repo-dict.test.js.map +1 -1
  101. package/dist/test/logon.test.js +2 -2
  102. package/dist/test/logon.test.js.map +1 -1
  103. package/dist/test/memory-store.test.js +2 -2
  104. package/dist/test/memory-store.test.js.map +1 -1
  105. package/dist/test/qf-full-msg.test.js +14 -13
  106. package/dist/test/qf-full-msg.test.js.map +1 -1
  107. package/dist/test/repo-full-ascii-msg.test.js +10 -9
  108. package/dist/test/repo-full-ascii-msg.test.js.map +1 -1
  109. package/dist/test/repo-full-fixml-msg.test.js +15 -15
  110. package/dist/test/repo-full-fixml-msg.test.js.map +1 -1
  111. package/dist/test/session.test.js +262 -143
  112. package/dist/test/session.test.js.map +1 -1
  113. package/dist/test/to-views.js +1 -1
  114. package/dist/test/to-views.js.map +1 -1
  115. package/dist/test/view-decode.test.js +2 -2
  116. package/dist/test/view-decode.test.js.map +1 -1
  117. package/dist/transport/ascii/ascii-msg-transmitter.js +6 -3
  118. package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
  119. package/dist/transport/ascii/ascii-session.d.ts +8 -0
  120. package/dist/transport/ascii/ascii-session.js +67 -19
  121. package/dist/transport/ascii/ascii-session.js.map +1 -1
  122. package/dist/transport/duplex/http-duplex.js +2 -2
  123. package/dist/transport/duplex/http-duplex.js.map +1 -1
  124. package/dist/transport/fix-session-state.js +4 -1
  125. package/dist/transport/fix-session-state.js.map +1 -1
  126. package/dist/transport/fix-session.d.ts +6 -0
  127. package/dist/transport/fix-session.js +91 -38
  128. package/dist/transport/fix-session.js.map +1 -1
  129. package/dist/transport/http/http-acceptor.js +8 -7
  130. package/dist/transport/http/http-acceptor.js.map +1 -1
  131. package/dist/transport/make-config.js +1 -1
  132. package/dist/transport/make-config.js.map +1 -1
  133. package/dist/transport/session-msg-factory.d.ts +24 -2
  134. package/dist/transport/session-msg-factory.js +143 -3
  135. package/dist/transport/session-msg-factory.js.map +1 -1
  136. package/dist/transport/tcp/recovering-initiator.d.ts +17 -0
  137. package/dist/transport/tcp/recovering-initiator.js +30 -0
  138. package/dist/transport/tcp/recovering-initiator.js.map +1 -0
  139. package/dist/transport/tcp/recovering_initiator.d.ts +12 -0
  140. package/dist/transport/tcp/recovering_initiator.js +25 -0
  141. package/dist/transport/tcp/recovering_initiator.js.map +1 -0
  142. package/dist/transport/tcp/resilient-initiator.d.ts +12 -0
  143. package/dist/transport/tcp/resilient-initiator.js +41 -0
  144. package/dist/transport/tcp/resilient-initiator.js.map +1 -0
  145. package/dist/transport/tcp/tcp-acceptor.d.ts +7 -0
  146. package/dist/transport/tcp/tcp-acceptor.js +57 -38
  147. package/dist/transport/tcp/tcp-acceptor.js.map +1 -1
  148. package/dist/transport/tcp/tcp-initiator.d.ts +2 -0
  149. package/dist/transport/tcp/tcp-initiator.js +59 -32
  150. package/dist/transport/tcp/tcp-initiator.js.map +1 -1
  151. package/dist/types/FIX4.4/quickfix/set/header.d.ts +31 -0
  152. package/dist/types/FIX4.4/quickfix/set/header.js +3 -0
  153. package/dist/types/FIX4.4/quickfix/set/header.js.map +1 -0
  154. package/dist/types/FIX4.4/quickfix/set/trailer.d.ts +6 -0
  155. package/dist/types/FIX4.4/quickfix/set/trailer.js +3 -0
  156. package/dist/types/FIX4.4/quickfix/set/trailer.js.map +1 -0
  157. package/dist/util/buffer-helper.js +1 -1
  158. package/dist/util/buffer-helper.js.map +1 -1
  159. package/dist/util/json-helper.js +2 -2
  160. package/dist/util/json-helper.js.map +1 -1
  161. package/dist/util/message-generator.js +1 -1
  162. package/dist/util/message-generator.js.map +1 -1
  163. package/package.json +16 -15
  164. package/script/genkey.ps1 +179 -179
  165. package/src/buffer/ascii/ascii-encoder.ts +71 -33
  166. package/src/buffer/ascii/ascii-view.ts +2 -2
  167. package/src/buffer/ascii/time-formatter.ts +2 -2
  168. package/src/buffer/encode-proxy.ts +2 -2
  169. package/src/buffer/fixml/fixml-view.ts +5 -0
  170. package/src/buffer/msg-view.ts +3 -0
  171. package/src/sample/tcp/skeleton/skeleton-session.ts +24 -2
  172. package/src/sample/tcp/trade-capture/trade-capture-client.ts +8 -3
  173. package/src/store/fix-msg-ascii-store-resend.ts +3 -2
  174. package/src/store/fix-msg-store-record.ts +1 -0
  175. package/src/transport/ascii/ascii-msg-transmitter.ts +6 -3
  176. package/src/transport/ascii/ascii-session.ts +75 -19
  177. package/src/transport/duplex/http-duplex.ts +2 -2
  178. package/src/transport/fix-session-state.ts +4 -1
  179. package/src/transport/fix-session.ts +98 -37
  180. package/src/transport/http/http-acceptor.ts +7 -6
  181. package/src/transport/tcp/tcp-acceptor.ts +59 -35
  182. package/src/transport/tcp/tcp-initiator.ts +63 -38
package/README.md CHANGED
@@ -27,7 +27,7 @@ compiled typescript is now included. Install the package from npm:
27
27
 
28
28
  ```shell
29
29
  npm install jspurefix
30
- npm run unzip-repo
30
+ cd node_modules/jspurefix && npm run unzip-repo
31
31
  ```
32
32
 
33
33
  see our [demo application](https://github.com/TimelordUK/jspf-demo/)
@@ -203,6 +203,7 @@ i.e. include field BodyLengthChars which defaults to 7 characters if omitted.
203
203
 
204
204
  If the message sequences are persisted over multiple sessions and are not reset on logon (ie. `"ResetSeqNumFlag": false,`),
205
205
  then the previously used sequence numbers can be set as follows:
206
+
206
207
  ```json
207
208
  {
208
209
  "ResetSeqNumFlag": false,
@@ -213,9 +214,10 @@ then the previously used sequence numbers can be set as follows:
213
214
 
214
215
  ## resending messages
215
216
 
216
- By default, the library will not resend past messages as this requires persisting messages which depending on the volume,
217
+ By default, the library will not resend past messages as this requires persisting messages which depending on the volume,
217
218
  may also require a database. If you want to support resending you must override `AsciiSession.onResendRequest()` with a resending logic.
218
219
  Additionally, make sure to include the original message sequence and the duplicate message flag in the FIX object:
220
+
219
221
  ```typescript
220
222
  {
221
223
  ...messageBodyData,
@@ -225,6 +227,7 @@ Additionally, make sure to include the original message sequence and the duplica
225
227
  ```
226
228
 
227
229
  ### Example
230
+
228
231
  ```json
229
232
  {
230
233
  "ClOrdID": "acceptor-order-id",
@@ -0,0 +1,179 @@
1
+
2
+ function read-or-default {
3
+ Param
4
+ (
5
+ [Parameter(Mandatory=$true, Position=0)]
6
+ [string] $text,
7
+ [Parameter(Mandatory=$true, Position=1)]
8
+ [string] $default
9
+ )
10
+ $a = Read-Host "$text [$default]"
11
+ if ($a.Length -eq 0) {
12
+ $a = $default
13
+ }
14
+ $a
15
+ }
16
+ Function Test-CommandExists {
17
+ Param ($command)
18
+ $oldPreference = $ErrorActionPreference
19
+ $ErrorActionPreference = ‘stop’
20
+ try {
21
+ if (Get-Command $command) {
22
+ 1
23
+ }
24
+ }
25
+ Catch {
26
+ 0
27
+ }
28
+ Finally {
29
+ $ErrorActionPreference = $oldPreference
30
+ }
31
+ } #end function test-CommandExists
32
+
33
+ if (-Not (Test-CommandExists "openssl")) {
34
+ Write-Output "openssl does not appear to be in path."
35
+ exit -1
36
+ }
37
+
38
+ function New-Folder {
39
+ param (
40
+ [Parameter(Mandatory=$true, Position=0)]
41
+ [string] $name
42
+ )
43
+ if (-Not (Test-Path -PathType Container $Name)) {
44
+ New-Item -Type Directory -p $Name
45
+ }
46
+ }
47
+
48
+ $ROOTPATH = read-or-default "rootpath" "."
49
+
50
+ $PATH_CA = "$ROOTPATH/certs/ca"
51
+ $PATH_SERVER = "$ROOTPATH/certs/server"
52
+ $PATH_CLIENT = "$ROOTPATH/certs/client"
53
+ $PATH_TMP = "$ROOTPATH/certs/tmp"
54
+
55
+ New-Folder($PATH_CA)
56
+ New-Folder($PATH_SERVER)
57
+ New-Folder($PATH_CLIENT)
58
+ New-Folder($PATH_TMP)
59
+
60
+ Write-Output ""
61
+ Write-Output " _____ _ __ _____ _ _ "
62
+ Write-Output " / ___| | |/ _| / ___(_) | | "
63
+ Write-Output " \ \`--. ___| | |_ ______\ \`--. _ __ _ _ __ ___ __| | "
64
+ Write-Output " \`--. \/ _ \ | _|______|\`--. \ |/ _\` | '_ \ / _ \/ _\` | "
65
+ Write-Output " /\__/ / __/ | | /\__/ / | (_| | | | | __/ (_| | "
66
+ Write-Output " \____/ \___|_|_| \____/|_|\__, |_| |_|\___|\__,_| "
67
+ Write-Output " __/ | "
68
+ Write-Output " |___/ "
69
+ Write-Output " _____ _ _____ _ "
70
+ Write-Output " / __ \ | | | __ \ | | "
71
+ Write-Output " | / \/ ___ _ __| |_ ___ | | \/ ___ _ __ ___ _ __ __ _| |_ ___ _ __ "
72
+ Write-Output " | | / _ \ '__| __/ __| | | __ / _ \ '_ \ / _ \ '__/ _\` | __/ _ \| '__| "
73
+ Write-Output " | \__/\ __/ | | |_\__ \ | |_\ \ __/ | | | __/ | | (_| | || (_) | | "
74
+ Write-Output " \____/\___|_| \__|___/ \____/\___|_| |_|\___|_| \__,_|\__\___/|_| "
75
+ Write-Output " "
76
+ Write-Output ""
77
+
78
+ Write-Output ""
79
+ Write-Output " Global conf "
80
+ Write-Output ""
81
+
82
+ $RSABITS = read-or-default "RSA bit length" "4096"
83
+ $EXPIREDAYS = read-or-default "Expire days" "365"
84
+
85
+ $PASSWORD = "."
86
+ while ($PASSWORD.Length -lt 4) {
87
+ $PASSWORD = read-or-default "Password for certs" "jspurefix"
88
+ if ($PASSWORD.Length -lt 4) {
89
+ Write-Output "Password length cannot be lower than 4 chars"
90
+ }
91
+ }
92
+
93
+ Write-Output ""
94
+ Write-Output " OpenSSL conf "
95
+ Write-Output ""
96
+
97
+ # Classic openssl prompt
98
+
99
+ $GK_C = read-or-default "(C) Country Name (2 letter code)" "US"
100
+ $GK_ST = read-or-default "(ST) State or Province Name (full name)" "."
101
+ $GK_L = read-or-default "(L) Locality Name (eg, city)" "city"
102
+ $GK_O = read-or-default "(O) Organization Name (eg, company)" "ACME Signing Authority Inc"
103
+ $GK_OU = read-or-default "(OU) Organizational Unit Name (eg, section) " "."
104
+ $GK_CN = read-or-default "(CN) Common Name (eg, your name or your server's hostname) " "localhost"
105
+
106
+ $GK_emailAddress = Read-Host "(emailAddress) Email Address []:"
107
+ if ($GK_emailAddress.Length -gt 0) {
108
+ $GK_emailAddress = "/emailAddress=$GK_emailAddress"
109
+ }
110
+
111
+ Write-Output "Please enter the following 'extra' attributes"
112
+ Write-Output "to be sent with your certificate request"
113
+ $GK_unstructuredName = Read-Host "(unstructuredName) An optional company name []:"
114
+ if ($GK_unstructuredName.Length -gt 0) {
115
+ $GK_unstructuredName = "/unstructuredName=$GK_unstructuredName"
116
+ }
117
+
118
+ $OTHER_FIELDS = ""
119
+ $ADD_OTHER_FIELD = "Y"
120
+ while ($ADD_OTHER_FIELD -eq "y" || $ADD_OTHER_FIELD -eq "Y") {
121
+ $ADD_OTHER_FIELD = read-or-default "Add other field [y/N]" "N"
122
+ if ($ADD_OTHER_FIELD -eq "y" || $ADD_OTHER_FIELD -eq "Y") {
123
+ $OTHER_FIELD_NAME = Read-Host "Field name: "
124
+ $OTHER_FIELD_VALUE = Read-Host "Field value: "
125
+ if ($OTHER_FIELD_VALUE.Length -eq 0) {
126
+ OTHER_FIELD_VALUE="."
127
+ }
128
+ $OTHER_FIELDS = "$OTHER_FIELDS/$OTHER_FIELD_NAME=$OTHER_FIELD_VALUE"
129
+ }
130
+ }
131
+
132
+ Write-Output ""
133
+ Write-Output "Generate certs "
134
+ Write-Output ""
135
+
136
+ # CA
137
+ Write-Output ""
138
+ Write-Output "CA"
139
+ Write-Output ""
140
+
141
+ openssl genrsa -des3 -passout "pass:$PASSWORD" -out "$PATH_CA/ca.key" $RSABITS
142
+
143
+ # Create Authority Certificate
144
+ openssl req -new -x509 -days "$EXPIREDAYS" -key "$PATH_CA/ca.key" -out "$PATH_CA/ca.crt" -passin "pass:$PASSWORD" -subj "/C=$GK_C/ST=$GK_ST/L=$GK_L/O=$GK_O/OU=$GK_OU/CN=.$GK_unstructuredName$GK_emailAddress$GK_subjectAltName$OTHER_FIELDS"
145
+
146
+ # SERVER
147
+ Write-Output ""
148
+ Write-Output "Server"
149
+ Write-Output ""
150
+
151
+ # Generate server key
152
+ openssl genrsa -out "$PATH_SERVER/server.key" $RSABITS
153
+
154
+ # Generate server cert
155
+ openssl req -new -key "$PATH_SERVER/server.key" -out "$PATH_TMP/server.csr" -passout "pass:$PASSWORD" -subj "/C=$GK_C/ST=$GK_ST/L=$GK_L/O=$GK_O/OU=$GK_OU/CN=$GK_CN$GK_unstructuredName$GK_emailAddress$GK_subjectAltName$OTHER_FIELDS"
156
+
157
+ # Sign server cert with self-signed cert
158
+ openssl x509 -req -days "$EXPIREDAYS" -passin "pass:$PASSWORD" -in "$PATH_TMP/server.csr" -CA "$PATH_CA/ca.crt" -CAkey "$PATH_CA/ca.key" -set_serial 01 -out "$PATH_SERVER/server.crt"
159
+
160
+ # CLIENT
161
+
162
+ Write-Output ""
163
+ Write-Output "Client"
164
+ Write-Output ""
165
+
166
+ openssl genrsa -out "$PATH_CLIENT/client.key" $RSABITS
167
+
168
+ openssl req -new -key "$PATH_CLIENT/client.key" -out "$PATH_TMP/client.csr" -passout "pass:$PASSWORD" -subj "/C=$GK_C/ST=$GK_ST/L=$GK_L/O=$GK_O/OU=$GK_OU/CN=CLIENT$GK_unstructuredName$GK_emailAddress$GK_subjectAltName$OTHER_FIELDS"
169
+
170
+ openssl x509 -req -days 365 -passin "pass:$PASSWORD" -in "$PATH_TMP/client.csr" -CA "$PATH_CA/ca.crt" -CAkey "$PATH_CA/ca.key" -set_serial 01 -out "$PATH_CLIENT/client.crt"
171
+
172
+ # Clean tmp dir
173
+
174
+ Remove-Item -Recurse $PATH_TMP
175
+
176
+ Write-Output ""
177
+ Write-Output "Done !"
178
+
179
+ exit 0
@@ -16,9 +16,9 @@ export declare class AsciiEncoder extends MsgEncoder {
16
16
  tags: Tags;
17
17
  constructor(buffer: ElasticBuffer, definitions: FixDefinitions, timeFormatter?: ITimeFormatter, delimiter?: number, logDelimiter?: number);
18
18
  trim(): Buffer;
19
- private static checkGroupInstanceHasDelimiter;
20
19
  reset(): void;
21
20
  encodeSet(objectToEncode: ILooseObject, set: ContainedFieldSet): void;
21
+ private encodeObject;
22
22
  private getFields;
23
23
  private encodeInstances;
24
24
  private WriteTagEquals;
@@ -29,44 +29,32 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
29
29
  }
30
30
  return b;
31
31
  }
32
- static checkGroupInstanceHasDelimiter(gf, instance) {
33
- const delimiterField = gf.definition.firstSimple;
34
- if (!delimiterField) {
35
- throw new Error(`group definition has delimiter field ${delimiterField.definition.name}`);
36
- }
37
- while (instance != null) {
38
- if (instance[delimiterField.definition.name] != null) {
39
- return true;
40
- }
41
- const first = gf.definition.fields[0];
42
- switch (first.type) {
43
- case dictionary_1.ContainedFieldType.Component: {
44
- const cf = first;
45
- instance = instance[cf.definition.name];
46
- break;
47
- }
48
- default:
49
- instance = null;
50
- }
51
- }
52
- }
53
32
  reset() {
54
33
  this.buffer.reset();
55
34
  this.tags.reset();
56
35
  }
57
36
  encodeSet(objectToEncode, set) {
37
+ const summary = new AsciiEncodeSetSummary();
38
+ this.encodeObject(objectToEncode, set, summary);
39
+ }
40
+ encodeObject(objectToEncode, set, state) {
58
41
  const fields = this.getFields(set, objectToEncode);
59
- (0, dictionary_1.dispatchFields)(fields, {
42
+ dictionary_1.dispatchFields(fields, {
60
43
  simple: (sf) => {
61
44
  const val = objectToEncode[sf.name];
62
45
  if (val != null && val !== '') {
46
+ if (state.count === 0) {
47
+ state.firstSimple = sf;
48
+ }
49
+ state.lastSimple = sf;
50
+ state.count++;
63
51
  this.encodeSimple(objectToEncode, set, sf, val);
64
52
  }
65
53
  },
66
54
  component: (cf) => {
67
55
  const instance = objectToEncode[cf.definition.name];
68
56
  if (instance) {
69
- this.encodeSet(instance, cf.definition);
57
+ this.encodeObject(instance, cf.definition, state);
70
58
  }
71
59
  },
72
60
  group: (gf) => {
@@ -90,6 +78,8 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
90
78
  encodeInstances(o, gf) {
91
79
  const noOfField = gf.definition.noOfField;
92
80
  const instances = o[gf.name] || o[noOfField.name];
81
+ const first = new AsciiEncodeSetSummary();
82
+ const test = new AsciiEncodeSetSummary();
93
83
  const buffer = this.buffer;
94
84
  if (!Array.isArray(instances)) {
95
85
  throw new Error(`expected array instance for group ${noOfField.name}`);
@@ -99,15 +89,25 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
99
89
  const posValBegin = buffer.getPos();
100
90
  buffer.writeWholeNumber(instances.length);
101
91
  this.writeDelimiter(posValBegin, noOfField.tag);
102
- instances.forEach((i) => {
103
- if (AsciiEncoder.checkGroupInstanceHasDelimiter(gf, i)) {
104
- this.encodeSet(i, gf.definition);
92
+ for (let field = 0; field < instances.length; ++field) {
93
+ const instance = instances[field];
94
+ test.reset();
95
+ const summary = field === 0 ? first : test;
96
+ this.encodeObject(instance, gf.definition, summary);
97
+ if (field === 0 && (first.firstSimple === null || first.count === 0)) {
98
+ throw new Error(`first group instance has no delimeter present ${gf.name}`);
105
99
  }
106
- else {
107
- const delimiter = gf.definition.firstSimple;
108
- throw new Error(`group instance with no delimiter field ${delimiter.definition.name}`);
100
+ if (field > 0 && (test.firstSimple == null || test.count === 0)) {
101
+ throw new Error(`group instance [${field}] has no delimeter present ${gf.name}`);
109
102
  }
110
- });
103
+ if (field > 0) {
104
+ const firstTag = first.firstSimple.definition.tag;
105
+ const tag = test.firstSimple.definition.tag;
106
+ if (firstTag !== tag) {
107
+ throw new Error(`group instance [${field}] inconsisent delimeter ${firstTag} expected tag ${tag}`);
108
+ }
109
+ }
110
+ }
111
111
  }
112
112
  }
113
113
  WriteTagEquals(tag) {
@@ -221,4 +221,16 @@ class AsciiEncoder extends msg_encoder_1.MsgEncoder {
221
221
  }
222
222
  }
223
223
  exports.AsciiEncoder = AsciiEncoder;
224
+ class AsciiEncodeSetSummary {
225
+ constructor(firstSimple = null, lastSimple = null, count = 0) {
226
+ this.firstSimple = firstSimple;
227
+ this.lastSimple = lastSimple;
228
+ this.count = count;
229
+ }
230
+ reset() {
231
+ this.firstSimple = null;
232
+ this.lastSimple = null;
233
+ this.count = 0;
234
+ }
235
+ }
224
236
  //# sourceMappingURL=ascii-encoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ascii-encoder.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../../collections/collection'\r\nimport { ContainedGroupField, ContainedSimpleField, ContainedFieldSet, ContainedField,\r\n ContainedFieldType, ContainedComponentField, SimpleFieldDefinition,\r\n FixDefinitions, dispatchFields } from '../../dictionary'\r\nimport { MsgEncoder } from '../msg-encoder'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { TimeFormatter } from './time-formatter'\r\nimport { ITimeFormatter } from './itime-formatter'\r\nimport { AsciiChars } from '../ascii-chars'\r\nimport { Tags, TagType } from '../tags'\r\n\r\nexport class AsciiEncoder extends MsgEncoder {\r\n\r\n public bodyLengthPos: number\r\n public msgTypePos: number\r\n public tags: Tags\r\n\r\n constructor (public readonly buffer: ElasticBuffer,\r\n public readonly definitions: FixDefinitions,\r\n public readonly timeFormatter: ITimeFormatter = new TimeFormatter(buffer),\r\n public readonly delimiter: number = AsciiChars.Soh,\r\n public readonly logDelimiter: number = AsciiChars.Pipe) {\r\n super(definitions)\r\n this.tags = new Tags(definitions)\r\n }\r\n\r\n public trim (): Buffer {\r\n const b = this.buffer.copy()\r\n const delimiter = this.delimiter\r\n const logDelimiter = this.logDelimiter\r\n const tags = this.tags\r\n if (delimiter !== logDelimiter) {\r\n for (let p = 0; p < tags.nextTagPos; ++p) {\r\n const tagPos = tags.tagPos[p]\r\n b.writeUInt8(delimiter, tagPos.start + tagPos.len)\r\n }\r\n }\r\n\r\n return b\r\n }\r\n\r\n private static checkGroupInstanceHasDelimiter (gf: ContainedGroupField, instance: ILooseObject): boolean {\r\n const delimiterField: ContainedSimpleField = gf.definition.firstSimple\r\n if (!delimiterField) {\r\n throw new Error(`group definition has delimiter field ${delimiterField.definition.name}`)\r\n }\r\n // may have a group represented by a component where first simple field is further down.\r\n while (instance != null) {\r\n if (instance[delimiterField.definition.name] != null) {\r\n return true\r\n }\r\n const first = gf.definition.fields[0]\r\n switch (first.type) {\r\n case ContainedFieldType.Component: {\r\n const cf: ContainedComponentField = first as ContainedComponentField\r\n instance = instance[cf.definition.name]\r\n break\r\n }\r\n default:\r\n instance = null\r\n }\r\n }\r\n }\r\n\r\n // only reset tags after entire message is encoded - <hdr>body<trl>\r\n\r\n public reset (): void {\r\n this.buffer.reset()\r\n this.tags.reset()\r\n }\r\n\r\n public encodeSet (objectToEncode: ILooseObject, set: ContainedFieldSet): void {\r\n const fields: ContainedField[] = this.getFields(set, objectToEncode)\r\n dispatchFields(fields, {\r\n simple: (sf: ContainedSimpleField) => {\r\n const val: any = objectToEncode[sf.name]\r\n // Empty strings are omitted as they result in empty values for tags, which are considered malformed.\r\n if (val != null && val !== '') {\r\n this.encodeSimple(objectToEncode, set, sf, val)\r\n }\r\n },\r\n component: (cf: ContainedComponentField) => {\r\n const instance: ILooseObject = objectToEncode[cf.definition.name]\r\n if (instance) {\r\n this.encodeSet(instance, cf.definition)\r\n }\r\n },\r\n group: (gf: ContainedGroupField) => {\r\n this.encodeInstances(objectToEncode, gf)\r\n }\r\n })\r\n }\r\n\r\n private getFields (set: ContainedFieldSet, o: ILooseObject): ContainedField[] {\r\n const keys: string[] = Object.keys(o)\r\n let j: number = 0\r\n const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {\r\n const field: ContainedField = set.localNameToField.get(current)\r\n if (field) {\r\n a[j++] = field\r\n }\r\n return a\r\n }, new Array(keys.length))\r\n fields.sort((a: ContainedField, b: ContainedField) => a.position - b.position)\r\n return fields\r\n }\r\n\r\n private encodeInstances (o: ILooseObject, gf: ContainedGroupField): void {\r\n const noOfField: SimpleFieldDefinition = gf.definition.noOfField\r\n const instances: ILooseObject[] = o[gf.name] || o[noOfField.name]\r\n const buffer = this.buffer\r\n if (!Array.isArray(instances)) {\r\n throw new Error(`expected array instance for group ${noOfField.name}`)\r\n }\r\n if (instances) {\r\n // a repeated group has number of instances at the start of group\r\n this.WriteTagEquals(noOfField.tag)\r\n const posValBegin = buffer.getPos()\r\n buffer.writeWholeNumber(instances.length)\r\n this.writeDelimiter(posValBegin, noOfField.tag)\r\n instances.forEach((i: ILooseObject) => {\r\n if (AsciiEncoder.checkGroupInstanceHasDelimiter(gf, i)) {\r\n this.encodeSet(i, gf.definition)\r\n } else {\r\n const delimiter: ContainedSimpleField = gf.definition.firstSimple\r\n throw new Error(`group instance with no delimiter field ${delimiter.definition.name}`)\r\n }\r\n })\r\n }\r\n }\r\n\r\n private WriteTagEquals (tag: number): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(tag)\r\n buffer.writeChar(AsciiChars.Equal)\r\n }\r\n\r\n private writeDelimiter (posValBegin: number, tag: number): void {\r\n const delimiter = this.logDelimiter\r\n const buffer = this.buffer\r\n this.tags.store(posValBegin, buffer.getPos() - posValBegin, tag)\r\n buffer.writeChar(delimiter)\r\n }\r\n\r\n private encodeSimple (o: ILooseObject, set: ContainedFieldSet, sf: ContainedSimpleField, val: any): void {\r\n const definition = sf.definition\r\n const tag: number = definition.tag\r\n const buffer = this.buffer\r\n const delimiter = this.logDelimiter\r\n const tf = this.timeFormatter\r\n const pos = buffer.getPos()\r\n let posValBegin = 0\r\n\r\n let tagType: TagType\r\n if (typeof val === 'string') {\r\n switch (definition.tagType) {\r\n case TagType.Boolean: {\r\n tagType = definition.tagType\r\n const vs: string = val\r\n const first: string = vs.length > 0 ? vs.charAt(0) : 'N'\r\n val = first === 'Y' || first === 'T'\r\n break\r\n }\r\n default: {\r\n tagType = TagType.String\r\n }\r\n }\r\n } else {\r\n tagType = definition.tagType\r\n }\r\n\r\n switch (tagType) {\r\n\r\n case TagType.RawData: {\r\n // may need to first write raw message length (see below)\r\n break\r\n }\r\n\r\n default: {\r\n this.WriteTagEquals(tag)\r\n posValBegin = buffer.getPos()\r\n break\r\n }\r\n }\r\n\r\n switch (tagType) {\r\n case TagType.String: {\r\n buffer.writeString(val as string)\r\n break\r\n }\r\n\r\n case TagType.Float: {\r\n buffer.writeNumber(val as number)\r\n break\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n buffer.writeWholeNumber(val as number)\r\n break\r\n }\r\n\r\n case TagType.Boolean: {\r\n buffer.writeBoolean(val as boolean)\r\n break\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n tf.writeUtcTimestamp(val as Date)\r\n break\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n tf.writeUtcTime(val as Date)\r\n break\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n tf.writeUtcDate(val as Date)\r\n break\r\n }\r\n\r\n case TagType.LocalDate: {\r\n tf.writeLocalDate(val as Date)\r\n break\r\n }\r\n\r\n case TagType.RawData: {\r\n const b = val as Buffer\r\n const lenField: ContainedSimpleField = set.fields[sf.position - 1] as ContainedSimpleField\r\n if (o[lenField.name] == null) {\r\n this.WriteTagEquals(lenField.definition.tag)\r\n buffer.writeWholeNumber(b.length)\r\n buffer.writeChar(delimiter)\r\n }\r\n this.WriteTagEquals(tag)\r\n buffer.writeBuffer(b)\r\n posValBegin = buffer.getPos()\r\n break\r\n }\r\n\r\n default: {\r\n buffer.writeString(val as string)\r\n break\r\n }\r\n }\r\n\r\n this.writeDelimiter(posValBegin, tag)\r\n\r\n switch (tag) {\r\n case Tags.BodyLengthTag:\r\n this.bodyLengthPos = pos + 2\r\n break\r\n\r\n case Tags.MsgTag:\r\n this.msgTypePos = pos\r\n break\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ascii-encoder.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../../collections/collection'\r\nimport { ContainedGroupField, ContainedSimpleField,\r\n ContainedFieldSet, ContainedField,\r\n ContainedComponentField, SimpleFieldDefinition,\r\n FixDefinitions, dispatchFields } from '../../dictionary'\r\nimport { MsgEncoder } from '../msg-encoder'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { TimeFormatter } from './time-formatter'\r\nimport { ITimeFormatter } from './itime-formatter'\r\nimport { AsciiChars } from '../ascii-chars'\r\nimport { Tags, TagType } from '../tags'\r\n\r\nexport class AsciiEncoder extends MsgEncoder {\r\n\r\n public bodyLengthPos: number\r\n public msgTypePos: number\r\n public tags: Tags\r\n\r\n constructor (public readonly buffer: ElasticBuffer,\r\n public readonly definitions: FixDefinitions,\r\n public readonly timeFormatter: ITimeFormatter = new TimeFormatter(buffer),\r\n public readonly delimiter: number = AsciiChars.Soh,\r\n public readonly logDelimiter: number = AsciiChars.Pipe) {\r\n super(definitions)\r\n this.tags = new Tags(definitions)\r\n }\r\n\r\n public trim (): Buffer {\r\n const b = this.buffer.copy()\r\n const delimiter = this.delimiter\r\n const logDelimiter = this.logDelimiter\r\n const tags = this.tags\r\n if (delimiter !== logDelimiter) {\r\n for (let p = 0; p < tags.nextTagPos; ++p) {\r\n const tagPos = tags.tagPos[p]\r\n b.writeUInt8(delimiter, tagPos.start + tagPos.len)\r\n }\r\n }\r\n\r\n return b\r\n }\r\n\r\n // only reset tags after entire message is encoded - <hdr>body<trl>\r\n\r\n public reset (): void {\r\n this.buffer.reset()\r\n this.tags.reset()\r\n }\r\n\r\n public encodeSet (objectToEncode: ILooseObject, set: ContainedFieldSet): void {\r\n const summary: AsciiEncodeSetSummary = new AsciiEncodeSetSummary()\r\n this.encodeObject(objectToEncode, set, summary)\r\n }\r\n\r\n private encodeObject (objectToEncode: ILooseObject, set: ContainedFieldSet, state: AsciiEncodeSetSummary): void {\r\n const fields: ContainedField[] = this.getFields(set, objectToEncode)\r\n dispatchFields(fields, {\r\n simple: (sf: ContainedSimpleField) => {\r\n const val: any = objectToEncode[sf.name]\r\n // Empty strings are omitted as they result in empty values for tags, which are considered malformed.\r\n if (val != null && val !== '') {\r\n if (state.count === 0) {\r\n state.firstSimple = sf\r\n }\r\n state.lastSimple = sf\r\n state.count++\r\n this.encodeSimple(objectToEncode, set, sf, val)\r\n }\r\n },\r\n component: (cf: ContainedComponentField) => {\r\n const instance: ILooseObject = objectToEncode[cf.definition.name]\r\n if (instance) {\r\n this.encodeObject(instance, cf.definition, state)\r\n }\r\n },\r\n group: (gf: ContainedGroupField) => {\r\n this.encodeInstances(objectToEncode, gf)\r\n }\r\n })\r\n }\r\n\r\n private getFields (set: ContainedFieldSet, o: ILooseObject): ContainedField[] {\r\n const keys: string[] = Object.keys(o)\r\n let j: number = 0\r\n const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {\r\n const field: ContainedField = set.localNameToField.get(current)\r\n if (field) {\r\n a[j++] = field\r\n }\r\n return a\r\n }, new Array(keys.length))\r\n fields.sort((a: ContainedField, b: ContainedField) => a.position - b.position)\r\n return fields\r\n }\r\n\r\n private encodeInstances (o: ILooseObject, gf: ContainedGroupField): void {\r\n const noOfField: SimpleFieldDefinition = gf.definition.noOfField\r\n const instances: ILooseObject[] = o[gf.name] || o[noOfField.name]\r\n const first: AsciiEncodeSetSummary = new AsciiEncodeSetSummary()\r\n const test: AsciiEncodeSetSummary = new AsciiEncodeSetSummary()\r\n\r\n const buffer = this.buffer\r\n if (!Array.isArray(instances)) {\r\n throw new Error(`expected array instance for group ${noOfField.name}`)\r\n }\r\n if (instances) {\r\n // a repeated group has number of instances at the start of group\r\n this.WriteTagEquals(noOfField.tag)\r\n const posValBegin = buffer.getPos()\r\n buffer.writeWholeNumber(instances.length)\r\n this.writeDelimiter(posValBegin, noOfField.tag)\r\n for (let field = 0; field < instances.length; ++field) {\r\n const instance: ILooseObject = instances[field]\r\n test.reset()\r\n const summary = field === 0 ? first : test\r\n this.encodeObject(instance, gf.definition, summary)\r\n if (field === 0 && (first.firstSimple === null || first.count === 0)) {\r\n throw new Error(`first group instance has no delimeter present ${gf.name}`)\r\n }\r\n if (field > 0 && (test.firstSimple == null || test.count === 0)) {\r\n throw new Error(`group instance [${field}] has no delimeter present ${gf.name}`)\r\n }\r\n if (field > 0) {\r\n const firstTag = first.firstSimple.definition.tag\r\n const tag = test.firstSimple.definition.tag\r\n if (firstTag !== tag) {\r\n throw new Error(`group instance [${field}] inconsisent delimeter ${firstTag} expected tag ${tag}`)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private WriteTagEquals (tag: number): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(tag)\r\n buffer.writeChar(AsciiChars.Equal)\r\n }\r\n\r\n private writeDelimiter (posValBegin: number, tag: number): void {\r\n const delimiter = this.logDelimiter\r\n const buffer = this.buffer\r\n this.tags.store(posValBegin, buffer.getPos() - posValBegin, tag)\r\n buffer.writeChar(delimiter)\r\n }\r\n\r\n private encodeSimple (o: ILooseObject, set: ContainedFieldSet, sf: ContainedSimpleField, val: any): void {\r\n const definition = sf.definition\r\n const tag: number = definition.tag\r\n const buffer = this.buffer\r\n const delimiter = this.logDelimiter\r\n const tf = this.timeFormatter\r\n const pos = buffer.getPos()\r\n let posValBegin = 0\r\n\r\n let tagType: TagType\r\n if (typeof val === 'string') {\r\n switch (definition.tagType) {\r\n case TagType.Boolean: {\r\n tagType = definition.tagType\r\n const vs: string = val\r\n const first: string = vs.length > 0 ? vs.charAt(0) : 'N'\r\n val = first === 'Y' || first === 'T'\r\n break\r\n }\r\n default: {\r\n tagType = TagType.String\r\n }\r\n }\r\n } else {\r\n tagType = definition.tagType\r\n }\r\n\r\n switch (tagType) {\r\n\r\n case TagType.RawData: {\r\n // may need to first write raw message length (see below)\r\n break\r\n }\r\n\r\n default: {\r\n this.WriteTagEquals(tag)\r\n posValBegin = buffer.getPos()\r\n break\r\n }\r\n }\r\n\r\n switch (tagType) {\r\n case TagType.String: {\r\n buffer.writeString(val as string)\r\n break\r\n }\r\n\r\n case TagType.Float: {\r\n buffer.writeNumber(val as number)\r\n break\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n buffer.writeWholeNumber(val as number)\r\n break\r\n }\r\n\r\n case TagType.Boolean: {\r\n buffer.writeBoolean(val as boolean)\r\n break\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n tf.writeUtcTimestamp(val as Date)\r\n break\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n tf.writeUtcTime(val as Date)\r\n break\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n tf.writeUtcDate(val as Date)\r\n break\r\n }\r\n\r\n case TagType.LocalDate: {\r\n tf.writeLocalDate(val as Date)\r\n break\r\n }\r\n\r\n case TagType.RawData: {\r\n const b = val as Buffer\r\n const lenField: ContainedSimpleField = set.fields[sf.position - 1] as ContainedSimpleField\r\n if (o[lenField.name] == null) {\r\n this.WriteTagEquals(lenField.definition.tag)\r\n buffer.writeWholeNumber(b.length)\r\n buffer.writeChar(delimiter)\r\n }\r\n this.WriteTagEquals(tag)\r\n buffer.writeBuffer(b)\r\n posValBegin = buffer.getPos()\r\n break\r\n }\r\n\r\n default: {\r\n buffer.writeString(val as string)\r\n break\r\n }\r\n }\r\n\r\n this.writeDelimiter(posValBegin, tag)\r\n\r\n switch (tag) {\r\n case Tags.BodyLengthTag:\r\n this.bodyLengthPos = pos + 2\r\n break\r\n\r\n case Tags.MsgTag:\r\n this.msgTypePos = pos\r\n break\r\n }\r\n }\r\n}\r\n\r\nclass AsciiEncodeSetSummary {\r\n constructor (public firstSimple: ContainedSimpleField = null,\r\n public lastSimple: ContainedSimpleField = null,\r\n public count: number = 0) {\r\n }\r\n public reset (): void {\r\n this.firstSimple = null\r\n this.lastSimple = null\r\n this.count = 0\r\n }\r\n}\r\n"]}
@@ -3,7 +3,7 @@ import { SegmentDescription } from '../segment-description';
3
3
  import { Structure } from '../structure';
4
4
  import { MsgView } from '../msg-view';
5
5
  import { ElasticBuffer } from '../elastic-buffer';
6
- import { FixMsgStoreRecord } from '../../store';
6
+ import { IFixMsgStoreRecord } from '../../store';
7
7
  export declare class AsciiView extends MsgView {
8
8
  readonly segment: SegmentDescription;
9
9
  readonly buffer: ElasticBuffer;
@@ -14,7 +14,7 @@ export declare class AsciiView extends MsgView {
14
14
  private readonly timeFormatter;
15
15
  constructor(segment: SegmentDescription, buffer: ElasticBuffer, structure: Structure, ptr: number, delimiter: number, writeDelimiter: number);
16
16
  clone(): MsgView;
17
- toMsgStoreRecord(): FixMsgStoreRecord;
17
+ toMsgStoreRecord(): IFixMsgStoreRecord;
18
18
  checksum(): number;
19
19
  protected toTyped(field: SimpleFieldDefinition): any;
20
20
  protected create(singleton: SegmentDescription): MsgView;
@@ -1 +1 @@
1
- {"version":3,"file":"ascii-view.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { SimpleFieldDefinition } from '../../dictionary'\r\nimport { SegmentDescription } from '../segment-description'\r\nimport { Structure } from '../structure'\r\nimport { TagType } from '../tags'\r\nimport { MsgView } from '../msg-view'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { ITimeFormatter } from './itime-formatter'\r\nimport { TimeFormatter } from './time-formatter'\r\nimport { TagPos } from '../tag-pos'\r\nimport { MsgTag } from '../../types'\r\nimport { FixMsgStoreRecord } from '../../store'\r\n\r\nexport class AsciiView extends MsgView {\r\n private readonly timeFormatter: ITimeFormatter = new TimeFormatter(this.buffer)\r\n constructor (public readonly segment: SegmentDescription,\r\n public readonly buffer: ElasticBuffer,\r\n public readonly structure: Structure,\r\n public readonly ptr: number,\r\n public readonly delimiter: number,\r\n public readonly writeDelimiter: number) {\r\n\r\n super(segment, structure)\r\n }\r\n\r\n // if the view is to be kept beyond the event on which it arrives, must be cloned\r\n public clone (): MsgView {\r\n const structure = this.structure\r\n const buffer = this.buffer.clone()\r\n const segment = this.segment\r\n const delimiter = this.delimiter\r\n const writeDelimiter = this.writeDelimiter\r\n if (structure) {\r\n return new AsciiView(segment, buffer, new Structure(structure.tags.clone(), structure.segments), this.ptr, delimiter, writeDelimiter)\r\n }\r\n return new AsciiView(segment, buffer, null, this.ptr, delimiter, writeDelimiter)\r\n }\r\n\r\n public toMsgStoreRecord () {\r\n return new FixMsgStoreRecord(this.getString(MsgTag.MsgType), this.getTyped(MsgTag.SendingTime), this.getTyped(MsgTag.MsgSeqNum), this.toObject())\r\n }\r\n\r\n public checksum (): number {\r\n const t = this.getPosition(MsgTag.CheckSum)\r\n const structure = this.structure\r\n const prev = structure.tags.tagPos[t - 1]\r\n const tp = prev.start + prev.len + 1\r\n let cs = this.buffer.sum(tp)\r\n const delimiter = this.delimiter\r\n const writeDelimiter = this.writeDelimiter\r\n if (writeDelimiter !== delimiter) {\r\n const changes = structure.tags.nextTagPos - 1\r\n cs -= changes * writeDelimiter\r\n cs += changes * delimiter\r\n }\r\n return cs % 256\r\n }\r\n\r\n protected toTyped (field: SimpleFieldDefinition): any {\r\n const position: number = this.getPosition(field.tag)\r\n if (position >= 0) {\r\n switch (field.tagType) {\r\n case TagType.String : {\r\n return this.stringAtPosition(position)\r\n }\r\n\r\n case TagType.Float: {\r\n return this.getNumber(position, true)\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n return this.getNumber(position)\r\n }\r\n\r\n case TagType.Boolean: {\r\n return this.getBoolean(field.tag)\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n return this.getDateTime(field.tag, true)\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n return this.getTime(field.tag, true)\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n return this.getDate(field.tag, true)\r\n }\r\n\r\n case TagType.LocalDate: {\r\n return this.getDate(field.tag, true)\r\n }\r\n\r\n case TagType.RawData: {\r\n return this.getBuffer(position)\r\n }\r\n\r\n default: {\r\n return this.stringAtPosition(position)\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected create (singleton: SegmentDescription): MsgView {\r\n return new AsciiView(singleton,\r\n this.buffer,\r\n this.structure,\r\n this.ptr,\r\n this.delimiter,\r\n this.writeDelimiter)\r\n }\r\n\r\n protected stringAtPosition (position: number): string {\r\n const tags = this.structure.tags\r\n if (position < 0 || position >= tags.nextTagPos) {\r\n return null\r\n }\r\n const tag: TagPos = tags.tagPos[position]\r\n return this.buffer.getString(tag.start, tag.start + tag.len)\r\n }\r\n\r\n private getBuffer (position: number): Buffer {\r\n const tag: TagPos = this.structure.tags.tagPos[position]\r\n return this.buffer.getBuffer(tag.start, tag.start + tag.len)\r\n }\r\n\r\n private getNumber (position: number, isFloat: boolean = false): number {\r\n const buffer = this.buffer\r\n const tag: TagPos = this.structure.tags.tagPos[position]\r\n if (isFloat) {\r\n return buffer.getFloat(tag.start, tag.start + tag.len - 1)\r\n } else {\r\n return buffer.getWholeNumber(tag.start, tag.start + tag.len - 1)\r\n }\r\n }\r\n\r\n private getTime (tag: number, useUtc: boolean): Date {\r\n const formatter = this.timeFormatter\r\n const position: number = this.getPosition(tag)\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n if (position < 0) {\r\n return null\r\n }\r\n if (useUtc) {\r\n return formatter.getUtcTime(tagPos.start)\r\n } else {\r\n return formatter.getLocalTime(tagPos.start)\r\n }\r\n }\r\n\r\n private getDate (tag: number, useUtc: boolean): Date {\r\n const formatter = this.timeFormatter\r\n const position: number = this.getPosition(tag)\r\n if (position < 0) {\r\n return null\r\n }\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n // (SendingTime) = 20150417-01:00:08.201\r\n if (tagPos.len < 8) {\r\n return null\r\n }\r\n if (useUtc) {\r\n return formatter.getUtcDate(tagPos.start)\r\n } else {\r\n return formatter.getLocalDate(tagPos.start)\r\n }\r\n }\r\n\r\n private getDateTime (tag: number, useUtc: boolean): Date {\r\n const position: number = this.getPosition(tag)\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n const formatter = this.timeFormatter\r\n if (position < 0) {\r\n return null\r\n }\r\n // (SendingTime) = 20150417-01:00:08.201\r\n if (tagPos.len < 8) {\r\n return null\r\n }\r\n\r\n if (useUtc) {\r\n return formatter.getUtcTimestamp(tagPos.start, tagPos.start + tagPos.len)\r\n } else {\r\n return formatter.getLocalTimestamp(tagPos.start, tagPos.start + tagPos.len)\r\n }\r\n }\r\n\r\n private getBoolean (tag: number): boolean {\r\n const position: number = this.getPosition(tag)\r\n if (position < 0) {\r\n return null\r\n }\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n return this.buffer.getBoolean(tagPos.start)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ascii-view.js","sourceRoot":"","sources":["../../../src/buffer/ascii/ascii-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { SimpleFieldDefinition } from '../../dictionary'\r\nimport { SegmentDescription } from '../segment-description'\r\nimport { Structure } from '../structure'\r\nimport { TagType } from '../tags'\r\nimport { MsgView } from '../msg-view'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { ITimeFormatter } from './itime-formatter'\r\nimport { TimeFormatter } from './time-formatter'\r\nimport { TagPos } from '../tag-pos'\r\nimport { MsgTag } from '../../types'\r\nimport { FixMsgStoreRecord, IFixMsgStoreRecord } from '../../store'\r\n\r\nexport class AsciiView extends MsgView {\r\n private readonly timeFormatter: ITimeFormatter = new TimeFormatter(this.buffer)\r\n constructor (public readonly segment: SegmentDescription,\r\n public readonly buffer: ElasticBuffer,\r\n public readonly structure: Structure,\r\n public readonly ptr: number,\r\n public readonly delimiter: number,\r\n public readonly writeDelimiter: number) {\r\n\r\n super(segment, structure)\r\n }\r\n\r\n // if the view is to be kept beyond the event on which it arrives, must be cloned\r\n public clone (): MsgView {\r\n const structure = this.structure\r\n const buffer = this.buffer.clone()\r\n const segment = this.segment\r\n const delimiter = this.delimiter\r\n const writeDelimiter = this.writeDelimiter\r\n if (structure) {\r\n return new AsciiView(segment, buffer, new Structure(structure.tags.clone(), structure.segments), this.ptr, delimiter, writeDelimiter)\r\n }\r\n return new AsciiView(segment, buffer, null, this.ptr, delimiter, writeDelimiter)\r\n }\r\n\r\n public toMsgStoreRecord (): IFixMsgStoreRecord {\r\n return new FixMsgStoreRecord(this.getString(MsgTag.MsgType), this.getTyped(MsgTag.SendingTime), this.getTyped(MsgTag.MsgSeqNum), this.toObject())\r\n }\r\n\r\n public checksum (): number {\r\n const t = this.getPosition(MsgTag.CheckSum)\r\n const structure = this.structure\r\n const prev = structure.tags.tagPos[t - 1]\r\n const tp = prev.start + prev.len + 1\r\n let cs = this.buffer.sum(tp)\r\n const delimiter = this.delimiter\r\n const writeDelimiter = this.writeDelimiter\r\n if (writeDelimiter !== delimiter) {\r\n const changes = structure.tags.nextTagPos - 1\r\n cs -= changes * writeDelimiter\r\n cs += changes * delimiter\r\n }\r\n return cs % 256\r\n }\r\n\r\n protected toTyped (field: SimpleFieldDefinition): any {\r\n const position: number = this.getPosition(field.tag)\r\n if (position >= 0) {\r\n switch (field.tagType) {\r\n case TagType.String : {\r\n return this.stringAtPosition(position)\r\n }\r\n\r\n case TagType.Float: {\r\n return this.getNumber(position, true)\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n return this.getNumber(position)\r\n }\r\n\r\n case TagType.Boolean: {\r\n return this.getBoolean(field.tag)\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n return this.getDateTime(field.tag, true)\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n return this.getTime(field.tag, true)\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n return this.getDate(field.tag, true)\r\n }\r\n\r\n case TagType.LocalDate: {\r\n return this.getDate(field.tag, true)\r\n }\r\n\r\n case TagType.RawData: {\r\n return this.getBuffer(position)\r\n }\r\n\r\n default: {\r\n return this.stringAtPosition(position)\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected create (singleton: SegmentDescription): MsgView {\r\n return new AsciiView(singleton,\r\n this.buffer,\r\n this.structure,\r\n this.ptr,\r\n this.delimiter,\r\n this.writeDelimiter)\r\n }\r\n\r\n protected stringAtPosition (position: number): string {\r\n const tags = this.structure.tags\r\n if (position < 0 || position >= tags.nextTagPos) {\r\n return null\r\n }\r\n const tag: TagPos = tags.tagPos[position]\r\n return this.buffer.getString(tag.start, tag.start + tag.len)\r\n }\r\n\r\n private getBuffer (position: number): Buffer {\r\n const tag: TagPos = this.structure.tags.tagPos[position]\r\n return this.buffer.getBuffer(tag.start, tag.start + tag.len)\r\n }\r\n\r\n private getNumber (position: number, isFloat: boolean = false): number {\r\n const buffer = this.buffer\r\n const tag: TagPos = this.structure.tags.tagPos[position]\r\n if (isFloat) {\r\n return buffer.getFloat(tag.start, tag.start + tag.len - 1)\r\n } else {\r\n return buffer.getWholeNumber(tag.start, tag.start + tag.len - 1)\r\n }\r\n }\r\n\r\n private getTime (tag: number, useUtc: boolean): Date {\r\n const formatter = this.timeFormatter\r\n const position: number = this.getPosition(tag)\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n if (position < 0) {\r\n return null\r\n }\r\n if (useUtc) {\r\n return formatter.getUtcTime(tagPos.start)\r\n } else {\r\n return formatter.getLocalTime(tagPos.start)\r\n }\r\n }\r\n\r\n private getDate (tag: number, useUtc: boolean): Date {\r\n const formatter = this.timeFormatter\r\n const position: number = this.getPosition(tag)\r\n if (position < 0) {\r\n return null\r\n }\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n // (SendingTime) = 20150417-01:00:08.201\r\n if (tagPos.len < 8) {\r\n return null\r\n }\r\n if (useUtc) {\r\n return formatter.getUtcDate(tagPos.start)\r\n } else {\r\n return formatter.getLocalDate(tagPos.start)\r\n }\r\n }\r\n\r\n private getDateTime (tag: number, useUtc: boolean): Date {\r\n const position: number = this.getPosition(tag)\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n const formatter = this.timeFormatter\r\n if (position < 0) {\r\n return null\r\n }\r\n // (SendingTime) = 20150417-01:00:08.201\r\n if (tagPos.len < 8) {\r\n return null\r\n }\r\n\r\n if (useUtc) {\r\n return formatter.getUtcTimestamp(tagPos.start, tagPos.start + tagPos.len)\r\n } else {\r\n return formatter.getLocalTimestamp(tagPos.start, tagPos.start + tagPos.len)\r\n }\r\n }\r\n\r\n private getBoolean (tag: number): boolean {\r\n const position: number = this.getPosition(tag)\r\n if (position < 0) {\r\n return null\r\n }\r\n const tagPos: TagPos = this.structure.tags.tagPos[position]\r\n return this.buffer.getBoolean(tagPos.start)\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"time-formatter.js","sourceRoot":"","sources":["../../../src/buffer/ascii/time-formatter.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from '../ascii-chars'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { ITimeFormatter } from './itime-formatter'\r\n\r\nexport class TimeFormatter implements ITimeFormatter {\r\n constructor (public readonly buffer: ElasticBuffer, public readonly adjustLocal: boolean = false) {\r\n }\r\n\r\n public writeLocalDate (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(v.getFullYear())\r\n buffer.writePaddedTensUnits(v.getMonth() + 1)\r\n buffer.writePaddedTensUnits(v.getDate())\r\n }\r\n\r\n public writeUtcDate (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(v.getUTCFullYear())\r\n buffer.writePaddedTensUnits(v.getUTCMonth() + 1)\r\n buffer.writePaddedTensUnits(v.getUTCDate())\r\n }\r\n\r\n public writeUtcTimestamp (v: Date): void {\r\n this.writeUtcDate(v)\r\n this.buffer.writeChar(AsciiChars.Hyphen)\r\n this.writeUtcTime(v as Date)\r\n }\r\n\r\n public writeLocalTimestamp (v: Date): void {\r\n this.writeLocalDate(v)\r\n this.buffer.writeChar(AsciiChars.Hyphen)\r\n this.writeLocalTime(v as Date)\r\n }\r\n\r\n public writeUtcTime (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writePaddedTensUnits(v.getUTCHours())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getUTCMinutes())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getUTCSeconds())\r\n const ms: number = v.getUTCMilliseconds()\r\n buffer.writeChar(AsciiChars.Dot)\r\n buffer.writePaddedHundreds(ms)\r\n }\r\n\r\n public writeLocalTime (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writePaddedTensUnits(v.getHours())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getMinutes())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getSeconds())\r\n const ms: number = v.getMilliseconds()\r\n buffer.writeChar(AsciiChars.Dot)\r\n buffer.writePaddedHundreds(ms)\r\n }\r\n\r\n public getLocalTime (start: number): Date {\r\n return this.getTime(start, false)\r\n }\r\n\r\n public getUtcTime (start: number): Date {\r\n return this.getTime(start, true)\r\n }\r\n\r\n public getUtcDate (start: number): Date {\r\n return this.getDate(start, true)\r\n }\r\n\r\n public getLocalDate (start: number): Date {\r\n return this.getDate(start, false)\r\n }\r\n\r\n public getUtcTimestamp (start: number, end: number): Date {\r\n return this.getTimestamp(start, end,true)\r\n }\r\n\r\n public getLocalTimestamp (start: number, end: number): Date {\r\n return this.getTimestamp(start, end,false)\r\n }\r\n\r\n private getTimestamp (start: number, end: number, useUtc: boolean): Date {\r\n const buffer = this.buffer\r\n const n: number = buffer.getWholeNumber(start, start + 7)\r\n if (n == null) {\r\n return null\r\n }\r\n const monthDay: number = n % 10000\r\n const month: number = Math.round(monthDay / 100)\r\n const day: number = monthDay % 100\r\n const year: number = Math.round(n / 10000)\r\n const len = end - start\r\n if (len === 8) {\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0))\r\n } else {\r\n t = new Date(year, month - 1, day, 0, 0, 0, 0)\r\n }\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n return t\r\n }\r\n\r\n let offset: number = 8\r\n if (buffer.get(start + offset) !== AsciiChars.Hyphen) {\r\n return null\r\n }\r\n\r\n if (len < 17) {\r\n return null\r\n }\r\n\r\n offset += 1\r\n const hh: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const mm: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const ss: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n let ms: number = 0\r\n if (buffer.get(start + offset) === AsciiChars.Dot) {\r\n offset += 1\r\n ms = buffer.getWholeNumber(start + offset, start + offset + 2)\r\n }\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, hh, mm, ss, ms))\r\n } else {\r\n t = new Date(year, month - 1, day, hh, mm, ss, ms)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n\r\n private getTime (start: number, useUtc: boolean): Date {\r\n const buffer = this.buffer\r\n let offset = 0\r\n const hh: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const mm: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const ss: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n let ms: number = 0\r\n if (buffer.get(start + offset) === AsciiChars.Dot) {\r\n offset += 1\r\n ms = buffer.getWholeNumber(start + offset, start + offset + 2)\r\n }\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(0, 0, 0, hh, mm, ss, ms))\r\n } else {\r\n t = new Date(0, 0, 0, hh, mm, ss, ms)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n\r\n private getDate (start: number, useUtc: boolean): Date {\r\n\r\n // = 20150417\r\n\r\n const n: number = this.buffer.getWholeNumber(start, start + 7)\r\n if (n == null) {\r\n return null\r\n }\r\n const monthDay: number = n % 10000\r\n const month: number = Math.round(monthDay / 100)\r\n const day: number = monthDay % 100\r\n const year: number = Math.round(n / 10000)\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0))\r\n } else {\r\n t = new Date(year, month - 1, day, 0, 0, 0, 0)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"time-formatter.js","sourceRoot":"","sources":["../../../src/buffer/ascii/time-formatter.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsciiChars } from '../ascii-chars'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport { ITimeFormatter } from './itime-formatter'\r\n\r\nexport class TimeFormatter implements ITimeFormatter {\r\n constructor (public readonly buffer: ElasticBuffer, public readonly adjustLocal: boolean = false) {\r\n }\r\n\r\n public writeLocalDate (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(v.getFullYear())\r\n buffer.writePaddedTensUnits(v.getMonth() + 1)\r\n buffer.writePaddedTensUnits(v.getDate())\r\n }\r\n\r\n public writeUtcDate (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writeWholeNumber(v.getUTCFullYear())\r\n buffer.writePaddedTensUnits(v.getUTCMonth() + 1)\r\n buffer.writePaddedTensUnits(v.getUTCDate())\r\n }\r\n\r\n public writeUtcTimestamp (v: Date): void {\r\n this.writeUtcDate(v)\r\n this.buffer.writeChar(AsciiChars.Hyphen)\r\n this.writeUtcTime(v)\r\n }\r\n\r\n public writeLocalTimestamp (v: Date): void {\r\n this.writeLocalDate(v)\r\n this.buffer.writeChar(AsciiChars.Hyphen)\r\n this.writeLocalTime(v)\r\n }\r\n\r\n public writeUtcTime (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writePaddedTensUnits(v.getUTCHours())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getUTCMinutes())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getUTCSeconds())\r\n const ms: number = v.getUTCMilliseconds()\r\n buffer.writeChar(AsciiChars.Dot)\r\n buffer.writePaddedHundreds(ms)\r\n }\r\n\r\n public writeLocalTime (v: Date): void {\r\n const buffer = this.buffer\r\n buffer.writePaddedTensUnits(v.getHours())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getMinutes())\r\n buffer.writeChar(AsciiChars.Colon)\r\n buffer.writePaddedTensUnits(v.getSeconds())\r\n const ms: number = v.getMilliseconds()\r\n buffer.writeChar(AsciiChars.Dot)\r\n buffer.writePaddedHundreds(ms)\r\n }\r\n\r\n public getLocalTime (start: number): Date {\r\n return this.getTime(start, false)\r\n }\r\n\r\n public getUtcTime (start: number): Date {\r\n return this.getTime(start, true)\r\n }\r\n\r\n public getUtcDate (start: number): Date {\r\n return this.getDate(start, true)\r\n }\r\n\r\n public getLocalDate (start: number): Date {\r\n return this.getDate(start, false)\r\n }\r\n\r\n public getUtcTimestamp (start: number, end: number): Date {\r\n return this.getTimestamp(start, end,true)\r\n }\r\n\r\n public getLocalTimestamp (start: number, end: number): Date {\r\n return this.getTimestamp(start, end,false)\r\n }\r\n\r\n private getTimestamp (start: number, end: number, useUtc: boolean): Date {\r\n const buffer = this.buffer\r\n const n: number = buffer.getWholeNumber(start, start + 7)\r\n if (n == null) {\r\n return null\r\n }\r\n const monthDay: number = n % 10000\r\n const month: number = Math.round(monthDay / 100)\r\n const day: number = monthDay % 100\r\n const year: number = Math.round(n / 10000)\r\n const len = end - start\r\n if (len === 8) {\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0))\r\n } else {\r\n t = new Date(year, month - 1, day, 0, 0, 0, 0)\r\n }\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n return t\r\n }\r\n\r\n let offset: number = 8\r\n if (buffer.get(start + offset) !== AsciiChars.Hyphen) {\r\n return null\r\n }\r\n\r\n if (len < 17) {\r\n return null\r\n }\r\n\r\n offset += 1\r\n const hh: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const mm: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const ss: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n let ms: number = 0\r\n if (buffer.get(start + offset) === AsciiChars.Dot) {\r\n offset += 1\r\n ms = buffer.getWholeNumber(start + offset, start + offset + 2)\r\n }\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, hh, mm, ss, ms))\r\n } else {\r\n t = new Date(year, month - 1, day, hh, mm, ss, ms)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n\r\n private getTime (start: number, useUtc: boolean): Date {\r\n const buffer = this.buffer\r\n let offset = 0\r\n const hh: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const mm: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n if (buffer.get(start + offset) !== AsciiChars.Colon) {\r\n return null\r\n }\r\n offset += 1\r\n const ss: number = buffer.getWholeNumber(start + offset, start + offset + 1)\r\n offset += 2\r\n let ms: number = 0\r\n if (buffer.get(start + offset) === AsciiChars.Dot) {\r\n offset += 1\r\n ms = buffer.getWholeNumber(start + offset, start + offset + 2)\r\n }\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(0, 0, 0, hh, mm, ss, ms))\r\n } else {\r\n t = new Date(0, 0, 0, hh, mm, ss, ms)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n\r\n private getDate (start: number, useUtc: boolean): Date {\r\n\r\n // = 20150417\r\n\r\n const n: number = this.buffer.getWholeNumber(start, start + 7)\r\n if (n == null) {\r\n return null\r\n }\r\n const monthDay: number = n % 10000\r\n const month: number = Math.round(monthDay / 100)\r\n const day: number = monthDay % 100\r\n const year: number = Math.round(n / 10000)\r\n let t: Date\r\n if (useUtc) {\r\n t = new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0))\r\n } else {\r\n t = new Date(year, month - 1, day, 0, 0, 0, 0)\r\n if (this.adjustLocal) {\r\n t = new Date(t.getTime() - t.getTimezoneOffset() * -60000)\r\n }\r\n }\r\n return t\r\n }\r\n}\r\n"]}
@@ -106,7 +106,7 @@ class ElasticBuffer {
106
106
  return this.writeWholeNumber(v);
107
107
  }
108
108
  else {
109
- const s = (0, mathjs_1.format)(v, { notation: 'fixed' });
109
+ const s = mathjs_1.format(v, { notation: 'fixed' });
110
110
  return this.writeString(s);
111
111
  }
112
112
  }