jspurefix 3.5.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/appveyor.yml +1 -1
- package/dist/buffer/ascii/ascii-encoder.d.ts +2 -2
- package/dist/buffer/ascii/ascii-encoder.js +1 -1
- package/dist/buffer/ascii/ascii-encoder.js.map +1 -1
- package/dist/buffer/ascii/ascii-parser-state.d.ts +3 -2
- package/dist/buffer/ascii/ascii-parser-state.js +1 -2
- package/dist/buffer/ascii/ascii-parser-state.js.map +1 -1
- package/dist/buffer/ascii/ascii-parser.d.ts +1 -1
- package/dist/buffer/ascii/ascii-parser.js +5 -4
- package/dist/buffer/ascii/ascii-parser.js.map +1 -1
- package/dist/buffer/ascii/ascii-segment-parser.js.map +1 -1
- package/dist/buffer/ascii/ascii-view.d.ts +4 -3
- package/dist/buffer/ascii/ascii-view.js +8 -5
- package/dist/buffer/ascii/ascii-view.js.map +1 -1
- package/dist/buffer/encode-proxy.js +1 -1
- package/dist/buffer/encode-proxy.js.map +1 -1
- package/dist/buffer/fixml/fixml-encoder.d.ts +2 -2
- package/dist/buffer/fixml/fixml-encoder.js +1 -1
- package/dist/buffer/fixml/fixml-encoder.js.map +1 -1
- package/dist/buffer/fixml/fixml-parser.js +2 -2
- package/dist/buffer/fixml/fixml-parser.js.map +1 -1
- package/dist/buffer/fixml/fixml-view.d.ts +3 -2
- package/dist/buffer/fixml/fixml-view.js +5 -4
- package/dist/buffer/fixml/fixml-view.js.map +1 -1
- package/dist/buffer/msg-encoder.d.ts +2 -2
- package/dist/buffer/msg-encoder.js.map +1 -1
- package/dist/buffer/msg-view.d.ts +8 -6
- package/dist/buffer/msg-view.js +10 -8
- package/dist/buffer/msg-view.js.map +1 -1
- package/dist/buffer/segment/segment-description.d.ts +3 -3
- package/dist/buffer/segment/segment-description.js.map +1 -1
- package/dist/buffer/tag/tags.d.ts +2 -5
- package/dist/buffer/tag/tags.js +4 -5
- package/dist/buffer/tag/tags.js.map +1 -1
- package/dist/collections/collection.d.ts +0 -1
- package/dist/collections/collection.js.map +1 -1
- package/dist/collections/index.d.ts +0 -1
- package/dist/collections/index.js +0 -17
- package/dist/collections/index.js.map +1 -1
- package/dist/config/js-fix-config.d.ts +2 -1
- package/dist/config/js-fix-config.js +3 -3
- package/dist/config/js-fix-config.js.map +1 -1
- package/dist/dictionary/compiler/compiler-type.d.ts +3 -3
- package/dist/dictionary/compiler/compiler-type.js.map +1 -1
- package/dist/dictionary/compiler/enum-compiler.js +2 -2
- package/dist/dictionary/compiler/enum-compiler.js.map +1 -1
- package/dist/dictionary/compiler/msg-compiler.d.ts +1 -2
- package/dist/dictionary/compiler/msg-compiler.js +6 -7
- package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
- package/dist/dictionary/contained/contained-component-field.d.ts +1 -1
- package/dist/dictionary/contained/contained-component-field.js.map +1 -1
- package/dist/dictionary/contained/contained-field-set.d.ts +9 -20
- package/dist/dictionary/contained/contained-field-set.js +16 -149
- package/dist/dictionary/contained/contained-field-set.js.map +1 -1
- package/dist/dictionary/contained/contained-group-field.d.ts +1 -1
- package/dist/dictionary/contained/contained-group-field.js.map +1 -1
- package/dist/dictionary/contained/contained-set-builder.d.ts +15 -0
- package/dist/dictionary/contained/contained-set-builder.js +142 -0
- package/dist/dictionary/contained/contained-set-builder.js.map +1 -0
- package/dist/dictionary/contained/contained-set.d.ts +32 -0
- package/dist/{types/FIX.5.0SP2/quickfix/xm_lnon_fix.js → dictionary/contained/contained-set.js} +1 -1
- package/dist/dictionary/contained/contained-set.js.map +1 -0
- package/dist/dictionary/contained/contained-simple-field.d.ts +1 -1
- package/dist/dictionary/contained/contained-simple-field.js.map +1 -1
- package/dist/dictionary/contained/index.d.ts +4 -1
- package/dist/dictionary/contained/index.js +4 -1
- package/dist/dictionary/contained/index.js.map +1 -1
- package/dist/dictionary/definition/category-simple-set.d.ts +1 -2
- package/dist/dictionary/definition/category-simple-set.js +1 -2
- package/dist/dictionary/definition/category-simple-set.js.map +1 -1
- package/dist/dictionary/definition/component-field-definition.d.ts +1 -1
- package/dist/dictionary/definition/component-field-definition.js +2 -2
- package/dist/dictionary/definition/component-field-definition.js.map +1 -1
- package/dist/dictionary/definition/fix-definitions.d.ts +8 -9
- package/dist/dictionary/definition/fix-definitions.js +22 -20
- package/dist/dictionary/definition/fix-definitions.js.map +1 -1
- package/dist/dictionary/definition/group-field-definition.d.ts +1 -1
- package/dist/dictionary/definition/group-field-definition.js +2 -2
- package/dist/dictionary/definition/group-field-definition.js.map +1 -1
- package/dist/dictionary/definition/message-definition.d.ts +1 -1
- package/dist/dictionary/definition/message-definition.js +2 -2
- package/dist/dictionary/definition/message-definition.js.map +1 -1
- package/dist/dictionary/definition/simple-field-definition.d.ts +2 -3
- package/dist/dictionary/definition/simple-field-definition.js +6 -7
- package/dist/dictionary/definition/simple-field-definition.js.map +1 -1
- package/dist/dictionary/parser/fix-repository/repository.js +20 -20
- package/dist/dictionary/parser/fix-repository/repository.js.map +1 -1
- package/dist/dictionary/parser/fixml/components-parser.js +18 -16
- package/dist/dictionary/parser/fixml/components-parser.js.map +1 -1
- package/dist/dictionary/parser/fixml/fields-parser.js +2 -3
- package/dist/dictionary/parser/fixml/fields-parser.js.map +1 -1
- package/dist/dictionary/parser/fixml/include-graph.js +8 -9
- package/dist/dictionary/parser/fixml/include-graph.js.map +1 -1
- package/dist/dictionary/parser/quickfix/field-definition-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/message-parser.js +2 -1
- package/dist/dictionary/parser/quickfix/message-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/node-parser.js +3 -2
- package/dist/dictionary/parser/quickfix/node-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/parse-context.d.ts +3 -3
- package/dist/dictionary/parser/quickfix/parse-context.js.map +1 -1
- package/dist/dictionary/parser/quickfix/parse-progress.d.ts +1 -2
- package/dist/dictionary/parser/quickfix/parse-progress.js +2 -3
- package/dist/dictionary/parser/quickfix/parse-progress.js.map +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-builder.js +4 -5
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-builder.js.map +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js +6 -6
- package/dist/dictionary/parser/quickfix/quick-fix-xml-file-parser.js.map +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-formatter.d.ts +1 -1
- package/dist/dictionary/parser/quickfix/quick-fix-xml-formatter.js.map +1 -1
- package/dist/dictionary/set-reduce.d.ts +2 -2
- package/dist/dictionary/set-reduce.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/jsfix-cmd.js +4 -5
- package/dist/jsfix-cmd.js.map +1 -1
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js +7 -8
- package/dist/sample/tcp/recovering-skeleton/respawn-acceptor.js.map +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-client.js +3 -4
- package/dist/sample/tcp/trade-capture/trade-capture-client.js.map +1 -1
- package/dist/sample/tcp/trade-capture/trade-capture-server.js.map +1 -1
- package/dist/store/fix-msg-memory-store.js +3 -4
- package/dist/store/fix-msg-memory-store.js.map +1 -1
- package/dist/store/fix-msg-store-record.js.map +1 -1
- package/dist/test/ascii/ascii-encoder.test.js.map +1 -1
- package/dist/test/ascii/fix-log-replay.test.js.map +1 -1
- package/dist/test/ascii/fix-repo-dict.test.js.map +1 -1
- package/dist/test/ascii/qf-50sp0-dict.test.js +7 -7
- package/dist/test/ascii/qf-50sp0-dict.test.js.map +1 -1
- package/dist/test/ascii/qf-50sp2-dict.test.js +5 -2
- package/dist/test/ascii/qf-50sp2-dict.test.js.map +1 -1
- package/dist/test/env/encoder-test.d.ts +3 -3
- package/dist/test/env/encoder-test.js.map +1 -1
- package/dist/test/env/set-constraint-helper.d.ts +4 -4
- package/dist/test/env/set-constraint-helper.js.map +1 -1
- package/dist/transport/ascii/ascii-msg-transmitter.js.map +1 -1
- package/dist/transport/ascii/ascii-session.js +1 -1
- package/dist/transport/ascii/ascii-session.js.map +1 -1
- package/dist/transport/fixml/fixml-session.js.map +1 -1
- package/dist/transport/http/http-acceptor.js +3 -4
- package/dist/transport/http/http-acceptor.js.map +1 -1
- package/dist/transport/http/http-json-sample-adapter.js +3 -4
- package/dist/transport/http/http-json-sample-adapter.js.map +1 -1
- package/dist/transport/session/dynamic-session-manager.d.ts +8 -0
- package/dist/transport/session/dynamic-session-manager.js +15 -0
- package/dist/transport/session/dynamic-session-manager.js.map +1 -0
- package/dist/transport/session/session-description.d.ts +9 -7
- package/dist/transport/session/session-description.js.map +1 -1
- package/dist/util/json-helper.d.ts +2 -2
- package/dist/util/json-helper.js.map +1 -1
- package/dist/util/message-generator.js +1 -1
- package/dist/util/message-generator.js.map +1 -1
- package/package.json +16 -16
- package/src/buffer/ascii/ascii-encoder.ts +7 -7
- package/src/buffer/ascii/ascii-parser-state.ts +4 -4
- package/src/buffer/ascii/ascii-parser.ts +6 -5
- package/src/buffer/ascii/ascii-segment-parser.ts +2 -2
- package/src/buffer/ascii/ascii-view.ts +9 -7
- package/src/buffer/encode-proxy.ts +9 -9
- package/src/buffer/fixml/fixml-encoder.ts +14 -10
- package/src/buffer/fixml/fixml-parser.ts +5 -5
- package/src/buffer/fixml/fixml-view.ts +5 -5
- package/src/buffer/msg-encoder.ts +3 -3
- package/src/buffer/msg-view.ts +18 -18
- package/src/buffer/segment/segment-description.ts +2 -2
- package/src/buffer/tag/tags.ts +4 -6
- package/src/collections/collection.ts +0 -1
- package/src/collections/index.ts +1 -1
- package/src/config/js-fix-config.ts +3 -2
- package/src/dictionary/compiler/compiler-type.ts +8 -2
- package/src/dictionary/compiler/enum-compiler.ts +2 -2
- package/src/dictionary/compiler/msg-compiler.ts +11 -12
- package/src/dictionary/contained/contained-component-field.ts +1 -1
- package/src/dictionary/contained/contained-field-set.ts +21 -176
- package/src/dictionary/contained/contained-group-field.ts +1 -1
- package/src/dictionary/contained/contained-set-builder.ts +164 -0
- package/src/dictionary/contained/contained-set.ts +83 -0
- package/src/dictionary/contained/contained-simple-field.ts +1 -1
- package/src/dictionary/contained/index.ts +4 -1
- package/src/dictionary/definition/category-simple-set.ts +1 -2
- package/src/dictionary/definition/component-field-definition.ts +1 -1
- package/src/dictionary/definition/fix-definitions.ts +28 -26
- package/src/dictionary/definition/group-field-definition.ts +1 -1
- package/src/dictionary/definition/message-definition.ts +6 -6
- package/src/dictionary/definition/simple-field-definition.ts +9 -10
- package/src/dictionary/parser/fix-repository/repository.ts +47 -40
- package/src/dictionary/parser/fixml/components-parser.ts +41 -38
- package/src/dictionary/parser/fixml/fields-parser.ts +3 -4
- package/src/dictionary/parser/fixml/include-graph.ts +13 -14
- package/src/dictionary/parser/quickfix/field-definition-parser.ts +5 -5
- package/src/dictionary/parser/quickfix/message-parser.ts +7 -5
- package/src/dictionary/parser/quickfix/node-parser.ts +13 -6
- package/src/dictionary/parser/quickfix/parse-context.ts +2 -2
- package/src/dictionary/parser/quickfix/parse-progress.ts +2 -3
- package/src/dictionary/parser/quickfix/quick-fix-xml-file-builder.ts +4 -5
- package/src/dictionary/parser/quickfix/quick-fix-xml-file-parser.ts +10 -12
- package/src/dictionary/parser/quickfix/quick-fix-xml-formatter.ts +1 -1
- package/src/dictionary/set-reduce.ts +3 -3
- package/src/index.ts +0 -1
- package/src/jsfix-cmd.ts +5 -6
- package/src/sample/tcp/recovering-skeleton/respawn-acceptor.ts +7 -8
- package/src/sample/tcp/trade-capture/trade-capture-client.ts +4 -5
- package/src/sample/tcp/trade-capture/trade-capture-server.ts +1 -1
- package/src/store/fix-msg-memory-store.ts +3 -4
- package/src/store/fix-msg-store-record.ts +1 -1
- package/src/transport/ascii/ascii-msg-transmitter.ts +6 -6
- package/src/transport/ascii/ascii-session.ts +6 -6
- package/src/transport/fixml/fixml-session.ts +3 -3
- package/src/transport/http/http-acceptor.ts +4 -5
- package/src/transport/http/http-json-sample-adapter.ts +3 -4
- package/src/transport/session/dynamic-session-manager.ts +16 -0
- package/src/transport/session/session-description.ts +10 -7
- package/src/util/json-helper.ts +3 -3
- package/src/util/message-generator.ts +4 -4
- package/dist/collections/dictionary.d.ts +0 -15
- package/dist/collections/dictionary.js +0 -57
- package/dist/collections/dictionary.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.d.ts +0 -31
- package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.js +0 -3
- package/dist/types/FIX.5.0SP2/quickfix/execution_acknowledgement.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.d.ts +0 -26
- package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.js +0 -3
- package/dist/types/FIX.5.0SP2/quickfix/mass_quote_acknowledgement.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.d.ts +0 -5
- package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.js +0 -3
- package/dist/types/FIX.5.0SP2/quickfix/set/hop_grp.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.d.ts +0 -8
- package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.js +0 -3
- package/dist/types/FIX.5.0SP2/quickfix/set/msg_type_grp.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.d.ts +0 -4
- package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.js +0 -3
- package/dist/types/FIX.5.0SP2/quickfix/set/not_affected_orders_grp.js.map +0 -1
- package/dist/types/FIX.5.0SP2/quickfix/xm_lnon_fix.d.ts +0 -6
- package/dist/types/FIX.5.0SP2/quickfix/xm_lnon_fix.js.map +0 -1
- package/src/collections/dictionary.ts +0 -62
|
@@ -1 +1 @@
|
|
|
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,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"encode-proxy.js","sourceRoot":"","sources":["../../src/buffer/encode-proxy.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../collections/collection'\r\nimport { FixDefinitions, MessageDefinition, SimpleFieldDefinition } from '../dictionary/definition'\r\nimport {\r\n ContainedComponentField,\r\n ContainedField,\r\n IContainedSet,\r\n ContainedFieldType,\r\n ContainedGroupField,\r\n ContainedSimpleField\r\n} from '../dictionary/contained'\r\nimport { TagType } from './tag/tag-type'\r\n\r\nexport class EncodeProxy {\r\n constructor (public readonly definitions: FixDefinitions) {\r\n }\r\n\r\n private static SimpleFieldCheck (field: ContainedSimpleField, val: any): void {\r\n const definition: SimpleFieldDefinition = field.definition\r\n if (definition.isEnum()) {\r\n const resolved: boolean = definition.containsEnum(String(val))\r\n if (!resolved) {\r\n throw new Error(`enum field ${field.name} does not support \"${val}\"`)\r\n }\r\n }\r\n switch (definition.tagType) {\r\n case TagType.LocalDate:\r\n case TagType.UtcTimeOnly:\r\n case TagType.UtcDateOnly:\r\n case TagType.UtcTimestamp: {\r\n const isDate: boolean = val instanceof Date\r\n if (!isDate) {\r\n throw new Error(`field ${field.name} expects Date but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.Boolean: {\r\n if (typeof (val) !== typeof true) {\r\n throw new Error(`field ${field.name} expects boolean but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.String: {\r\n if (typeof (val) !== 'string') {\r\n throw new Error(`field ${field.name} expects string but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.RawData: {\r\n const isBuffer: boolean = val instanceof Buffer\r\n if (!isBuffer) {\r\n throw new Error(`field ${field.name} expects Buffer but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Float:\r\n case TagType.Length: {\r\n if (isNaN(val as number)) {\r\n throw new Error(`field ${field.name} expects number but receives \"${typeof val}\"`)\r\n }\r\n break\r\n }\r\n }\r\n }\r\n\r\n private static checkProperties (wrapped: ILooseObject, val: ILooseObject): ILooseObject {\r\n const keys: string[] = Object.keys(val)\r\n for (const k of keys) {\r\n wrapped[k] = val[k]\r\n }\r\n return wrapped\r\n }\r\n\r\n private static ComponentFieldCheck (field: ContainedComponentField, val: any): object {\r\n const isComplex: boolean = typeof val === 'object'\r\n if (!isComplex) {\r\n throw new Error(`type ${field.name} is a component but is given type \"${typeof val}\"`)\r\n }\r\n return EncodeProxy.checkProperties(new Proxy({}, EncodeProxy.handler(field.definition)), val as ILooseObject)\r\n }\r\n\r\n private static GroupFieldCheck (field: ContainedGroupField, val: any): object {\r\n const accepted: boolean = Array.isArray(val) || !isNaN(val as number)\r\n if (!accepted) {\r\n throw new Error(`type ${field.name} is a group and needs array or number, not \"${typeof val}\"`)\r\n }\r\n const gf: ContainedComponentField = field as ContainedComponentField\r\n const j: number = val\r\n const isNumber: boolean = !isNaN(val as number)\r\n if (isNumber) {\r\n const arr: ILooseObject[] = new Array(j)\r\n for (let i: number = 0; i < j; ++i) {\r\n arr[i] = new Proxy({}, EncodeProxy.handler(gf.definition))\r\n }\r\n return arr\r\n } else {\r\n const arr: ILooseObject[] = val\r\n for (let i: number = 0; i < arr.length; ++i) {\r\n arr[i] = EncodeProxy.checkProperties(new Proxy({}, EncodeProxy.handler(gf.definition)), arr[i])\r\n }\r\n return arr\r\n }\r\n }\r\n\r\n private static handler (set: IContainedSet): Object {\r\n return {\r\n set (target: ILooseObject, prop: string, val: any): boolean {\r\n const field: ContainedField | undefined = set.localNameToField.get(prop)\r\n if (!field) {\r\n throw new Error(`type ${set.name} has no field named ${prop}`)\r\n }\r\n target[prop] = EncodeProxy.examine(field, val)\r\n return true\r\n }\r\n }\r\n }\r\n\r\n private static examine (field: ContainedField, val: any): any {\r\n switch (field.type) {\r\n case ContainedFieldType.Simple: {\r\n EncodeProxy.SimpleFieldCheck(field as ContainedSimpleField, val)\r\n break\r\n }\r\n\r\n case ContainedFieldType.Component: {\r\n val = EncodeProxy.ComponentFieldCheck(field as ContainedComponentField, val)\r\n break\r\n }\r\n\r\n case ContainedFieldType.Group: {\r\n val = EncodeProxy.GroupFieldCheck(field as ContainedGroupField, val)\r\n break\r\n }\r\n }\r\n return val\r\n }\r\n\r\n public wrap (msgName: string): ILooseObject {\r\n const msg: MessageDefinition | undefined = this.definitions.message.get(msgName)\r\n if (!msg) {\r\n throw new Error(`no message defined for type ${msgName}`)\r\n }\r\n\r\n return new Proxy({}, EncodeProxy.handler(msg))\r\n }\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { ILooseObject } from '../../collections/collection';
|
|
3
|
-
import {
|
|
3
|
+
import { IContainedSet } from '../../dictionary/contained';
|
|
4
4
|
import { MsgEncoder } from '../msg-encoder';
|
|
5
5
|
import { ElasticBuffer } from '../elastic-buffer';
|
|
6
6
|
import { FixDefinitions } from '../../dictionary/definition';
|
|
@@ -15,7 +15,7 @@ export declare class FixmlEncoder extends MsgEncoder {
|
|
|
15
15
|
private readonly endBatch;
|
|
16
16
|
constructor(buffer: ElasticBuffer, definitions: FixDefinitions);
|
|
17
17
|
private static asString;
|
|
18
|
-
encodeSet(o: ILooseObject, set:
|
|
18
|
+
encodeSet(o: ILooseObject, set: IContainedSet): void;
|
|
19
19
|
private batchStart;
|
|
20
20
|
private toXml;
|
|
21
21
|
private getPopulatedFields;
|
|
@@ -130,7 +130,7 @@ let FixmlEncoder = FixmlEncoder_1 = class FixmlEncoder extends msg_encoder_1.Msg
|
|
|
130
130
|
const keys = Object.keys(o);
|
|
131
131
|
const fields = keys.reduce((a, current) => {
|
|
132
132
|
const field = set.localNameToField.get(current);
|
|
133
|
-
if (field && !set.nameToLocalAttribute.
|
|
133
|
+
if (field && !set.nameToLocalAttribute.has(current)) {
|
|
134
134
|
a.push(field);
|
|
135
135
|
}
|
|
136
136
|
return a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixml-encoder.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-encoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILooseObject } from '../../collections/collection'\r\nimport {\r\n ContainedFieldSet, ContainedField, ContainedGroupField,\r\n ContainedComponentField, ContainedSimpleField, FieldsDispatch\r\n} from '../../dictionary/contained'\r\nimport { AsciiChars } from '../ascii'\r\nimport { MsgEncoder } from '../msg-encoder'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport moment = require('moment')\r\nimport { FixDefinitions } from '../../dictionary/definition'\r\nimport { IFieldDispatcher } from '../../dictionary/contained/field-dispatcher'\r\nimport { TagType } from '../tag/tag-type'\r\nimport { IPopulatedAttributes } from './populated-attributes'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\n\r\n@injectable()\r\nexport class FixmlEncoder extends MsgEncoder {\r\n public attributePerLine: boolean = false\r\n public readonly eol: string = require('os').EOL\r\n private readonly beginDoc: string = `<FIXML>${this.eol}`\r\n private readonly endDoc: string = '</FIXML>'\r\n private readonly beginBatch: string = `<Batch>${this.eol}`\r\n private readonly endBatch: string = '</Batch>'\r\n\r\n public constructor (@inject(DITokens.TransmitBuffer) public readonly buffer: ElasticBuffer, @inject(DITokens.Definitions) public readonly definitions: FixDefinitions) {\r\n super(definitions)\r\n }\r\n\r\n private static asString (sf: ContainedSimpleField, v: any): string {\r\n switch (sf.definition.tagType) {\r\n case TagType.String: {\r\n return v as string\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Float:\r\n case TagType.Length: {\r\n return v.toString()\r\n }\r\n\r\n case TagType.Boolean: {\r\n return v ? 'Y' : 'N'\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n const d: Date = v as Date\r\n return moment(d).utc().format('YYYY-MM-DDTHH:mm:ss.SSS')\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n const d: Date = v as Date\r\n return moment.utc(d).format('HH:mm:ss.SSS')\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const d: Date = v as Date\r\n return moment(d).format('YYYY-MM-DD')\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n const d: Date = v as Date\r\n return moment(d).utc(true).format('YYYY-MM-DD')\r\n }\r\n }\r\n return ''\r\n }\r\n\r\n public encodeSet (o: ILooseObject, set: ContainedFieldSet): void {\r\n const batch: ILooseObject[] = o.Batch\r\n const toWrite: ILooseObject[] = batch || [o]\r\n const depth = batch ? 1 : 0\r\n const buffer = this.buffer\r\n const begin = this.beginDoc\r\n const indent: string = '\\t'\r\n const endBatch = batch ? this.endBatch : ''\r\n const eol = this.eol\r\n buffer.reset()\r\n buffer.writeString(begin)\r\n if (batch) {\r\n this.batchStart(o, set, depth)\r\n }\r\n toWrite.forEach((next: ILooseObject) => {\r\n this.toXml(next, set.abbreviation ?? '', set, depth + 1)\r\n buffer.writeString(eol)\r\n })\r\n if (batch) {\r\n buffer.writeString(`${indent}${endBatch}`)\r\n }\r\n\r\n buffer.writeString(this.endDoc)\r\n }\r\n\r\n private batchStart (o: ILooseObject, set: ContainedFieldSet, depth: number): void {\r\n const buffer = this.buffer\r\n const indent: string = '\\t'\r\n const beginBatch = this.beginBatch\r\n const hdr = o.StandardHeader\r\n const eol = this.eol\r\n buffer.writeString(`${indent}${beginBatch}`)\r\n if (hdr) {\r\n const h = set.fields[0] as ContainedComponentField\r\n this.toXml(hdr, h.name, h.definition, depth + 1)\r\n buffer.writeString(eol)\r\n }\r\n }\r\n\r\n private toXml (o: ILooseObject, name: string, set: ContainedFieldSet, depth: number): void {\r\n const buffer = this.buffer\r\n const selfClose: string = '/>'\r\n const close: string = '>'\r\n const open: string = '<'\r\n const indent: string = '\\t'.repeat(depth)\r\n const newLine = this.eol\r\n const fields: ContainedField[] = this.getPopulatedFields(set, o)\r\n const eol: string = fields.length === 0 ? selfClose : close\r\n buffer.writeString(`${indent}${open}`)\r\n buffer.writeString(`${name} `)\r\n this.attributes(o, set, depth, this.attributePerLine)\r\n buffer.writeString(`${eol}`)\r\n new FieldsDispatch().dispatchFields(fields, {\r\n group: (g: ContainedGroupField) => { this.complexGroup(o, g, depth) },\r\n component: (c: ContainedComponentField) => { this.complexComponent(o, c, depth) }\r\n } as IFieldDispatcher)\r\n if (fields.length) {\r\n const end: string = `${newLine}${indent}</${name}>`\r\n buffer.writeString(`${end}`)\r\n }\r\n }\r\n\r\n private getPopulatedFields (set: ContainedFieldSet, o: ILooseObject): ContainedField[] {\r\n const keys: string[] = Object.keys(o)\r\n const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {\r\n const field: ContainedField | null = set.localNameToField.get(current)\r\n if (field && !set.nameToLocalAttribute.containsKey(current)) {\r\n a.push(field)\r\n }\r\n return a\r\n }, [])\r\n fields.sort((a: ContainedField, b: ContainedField) => a.position - b.position)\r\n return fields\r\n }\r\n\r\n private encodeAttribute (name: string, val: string): void {\r\n if (val == null) {\r\n return\r\n }\r\n const buffer = this.buffer\r\n buffer.writeString(name)\r\n buffer.writeChar(AsciiChars.Equal)\r\n buffer.writeChar(AsciiChars.Dq)\r\n buffer.writeString(val)\r\n buffer.writeChar(AsciiChars.Dq)\r\n }\r\n\r\n private attributes (o: ILooseObject, set: ContainedFieldSet, depth: number, attributePerLine: boolean): void {\r\n const newLine = this.eol\r\n const indent: string = '\\t'.repeat(depth + 1)\r\n const attributes = set.localAttribute\r\n const buffer = this.buffer\r\n if (attributes.length && attributePerLine) {\r\n buffer.writeString(newLine)\r\n buffer.writeString(indent)\r\n }\r\n const populatedAttributes: IPopulatedAttributes = this.getPopulatedAttributes(o, attributes)\r\n for (let a = 0; a < populatedAttributes.values.length; ++a) {\r\n const last = a === populatedAttributes.values.length - 1\r\n const f = populatedAttributes.fields[a]\r\n if (a || this.attributePerLine) buffer.writeChar(AsciiChars.Space)\r\n this.encodeAttribute(f.name, FixmlEncoder.asString(f, populatedAttributes.values[a]))\r\n if (!last && attributePerLine) {\r\n buffer.writeString(newLine)\r\n buffer.writeString(indent)\r\n }\r\n }\r\n }\r\n\r\n private getPopulatedAttributes (o: ILooseObject, attributes: ContainedSimpleField[]): IPopulatedAttributes {\r\n return attributes.reduce<IPopulatedAttributes>((a: IPopulatedAttributes, f: ContainedSimpleField) => {\r\n let v: any = o[f.definition.name]\r\n if (v == null) {\r\n v = o[f.name]\r\n }\r\n if (v != null) {\r\n a.values.push(v)\r\n a.fields.push(f)\r\n }\r\n return a\r\n }, {\r\n values: [],\r\n fields: []\r\n })\r\n }\r\n\r\n private complexGroup (o: ILooseObject, field: ContainedField, depth: number): void {\r\n const gf: ContainedGroupField = field as ContainedGroupField\r\n const elements: ILooseObject[] = o[gf.definition.name]\r\n if (elements) {\r\n if (Array.isArray(elements)) {\r\n for (const e of elements) {\r\n this.buffer.writeString(this.eol)\r\n this.toXml(e, gf.name, gf.definition, depth + 1)\r\n }\r\n } else {\r\n throw new Error(`expected array for member ${gf.definition.name}`)\r\n }\r\n }\r\n }\r\n\r\n private complexComponent (o: ILooseObject, field: ContainedField, depth: number): void {\r\n const cf: ContainedComponentField = field as ContainedComponentField\r\n const def = cf.definition\r\n const instance: ILooseObject = o[def.name]\r\n if (instance) {\r\n this.buffer.writeString(this.eol)\r\n this.toXml(instance, cf.name, def, depth + 1)\r\n }\r\n }\r\n\r\n reset (): void {\r\n this.buffer.reset()\r\n }\r\n\r\n trim (): Buffer {\r\n return this.buffer.copy()\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"fixml-encoder.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-encoder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,0DAOmC;AACnC,oCAAqC;AACrC,gDAA2C;AAC3C,sDAAiD;AACjD,iCAAiC;AACjC,4DAA4D;AAE5D,8CAAyC;AAEzC,uCAA6C;AAC7C,uDAAkD;AAG3C,IAAM,YAAY,oBAAlB,MAAM,YAAa,SAAQ,wBAAU;IAQ1C,YAAqD,MAAqC,EAAgC,WAA2C;QACnK,KAAK,CAAC,WAAW,CAAC,CAAA;QADiD,WAAM,GAAN,MAAM,CAAe;QAAgD,gBAAW,GAAX,WAAW,CAAgB;QAP9J,qBAAgB,GAAY,KAAK,CAAA;QACxB,QAAG,GAAW,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAA;QAC9B,aAAQ,GAAW,UAAU,IAAI,CAAC,GAAG,EAAE,CAAA;QACvC,WAAM,GAAW,UAAU,CAAA;QAC3B,eAAU,GAAW,UAAU,IAAI,CAAC,GAAG,EAAE,CAAA;QACzC,aAAQ,GAAW,UAAU,CAAA;IAI9C,CAAC;IAEO,MAAM,CAAC,QAAQ,CAAE,EAAwB,EAAE,CAAM;QACvD,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC9B,KAAK,kBAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpB,OAAO,CAAW,CAAA;YACpB,CAAC;YAED,KAAK,kBAAO,CAAC,GAAG,CAAC;YACjB,KAAK,kBAAO,CAAC,KAAK,CAAC;YACnB,KAAK,kBAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpB,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;YACrB,CAAC;YAED,KAAK,kBAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;YACtB,CAAC;YAED,KAAK,kBAAO,CAAC,YAAY,CAAC,CAAC,CAAC;gBAC1B,MAAM,CAAC,GAAS,CAAS,CAAA;gBACzB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAA;YAC1D,CAAC;YAED,KAAK,kBAAO,CAAC,WAAW,CAAC,CAAC,CAAC;gBACzB,MAAM,CAAC,GAAS,CAAS,CAAA;gBACzB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;YAC7C,CAAC;YAED,KAAK,kBAAO,CAAC,SAAS,CAAC,CAAC,CAAC;gBACvB,MAAM,CAAC,GAAS,CAAS,CAAA;gBACzB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YACvC,CAAC;YAED,KAAK,kBAAO,CAAC,WAAW,CAAC,CAAC,CAAC;gBACzB,MAAM,CAAC,GAAS,CAAS,CAAA;gBACzB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAEM,SAAS,CAAE,CAAe,EAAE,GAAkB;QACnD,MAAM,KAAK,GAAmB,CAAC,CAAC,KAAK,CAAA;QACrC,MAAM,OAAO,GAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC3B,MAAM,MAAM,GAAW,IAAI,CAAA;QAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QACpB,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACzB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAChC,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,CAAC,IAAkB,EAAE,EAAE;;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAA,GAAG,CAAC,YAAY,mCAAI,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;YACxD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;QACF,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAA;QAC5C,CAAC;QAED,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAEO,UAAU,CAAE,CAAe,EAAE,GAAkB,EAAE,KAAa;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,MAAM,GAAW,IAAI,CAAA;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAClC,MAAM,GAAG,GAAiB,CAAC,CAAC,cAAc,CAAA;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QACpB,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC,CAAA;QAC5C,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAA4B,CAAA;YAClD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAE,CAAe,EAAE,IAAY,EAAE,GAAkB,EAAE,KAAa;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,SAAS,GAAW,IAAI,CAAA;QAC9B,MAAM,KAAK,GAAW,GAAG,CAAA;QACzB,MAAM,IAAI,GAAW,GAAG,CAAA;QACxB,MAAM,MAAM,GAAW,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAA;QACxB,MAAM,MAAM,GAAqB,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAChE,MAAM,GAAG,GAAW,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;QAC3D,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAA;QACtC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,CAAC,CAAA;QAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACrD,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QAC5B,IAAI,0BAAc,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE;YAC1C,KAAK,EAAE,CAAC,CAAsB,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC;YACrE,SAAS,EAAE,CAAC,CAA0B,EAAE,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC;SAC9D,CAAC,CAAA;QACtB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,GAAG,GAAW,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,CAAA;YACnD,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAE,GAAkB,EAAE,CAAe;QAC7D,MAAM,IAAI,GAAa,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,MAAM,GAAqB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAmB,EAAE,OAAe,EAAE,EAAE;YACpF,MAAM,KAAK,GAA+B,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC3E,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACf,CAAC;YACD,OAAO,CAAC,CAAA;QACV,CAAC,EAAE,EAAE,CAAC,CAAA;QACN,MAAM,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC9E,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,eAAe,CAAE,IAAY,EAAE,GAAW;QAChD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,OAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QACxB,MAAM,CAAC,SAAS,CAAC,kBAAU,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,CAAC,SAAS,CAAC,kBAAU,CAAC,EAAE,CAAC,CAAA;QAC/B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACvB,MAAM,CAAC,SAAS,CAAC,kBAAU,CAAC,EAAE,CAAC,CAAA;IACjC,CAAC;IAEO,UAAU,CAAE,CAAe,EAAE,GAAkB,EAAE,KAAa,EAAE,gBAAyB;QAC/F,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAA;QACxB,MAAM,MAAM,GAAW,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,cAAc,CAAA;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,UAAU,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YAC3B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC;QACD,MAAM,mBAAmB,GAAyB,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;QAC5F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,CAAC,KAAK,mBAAmB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;YACxD,MAAM,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACvC,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB;gBAAE,MAAM,CAAC,SAAS,CAAC,kBAAU,CAAC,KAAK,CAAC,CAAA;YAClE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,cAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACrF,IAAI,CAAC,IAAI,IAAI,gBAAgB,EAAE,CAAC;gBAC9B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;gBAC3B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAE,CAAe,EAAE,UAAkC;QACjF,OAAO,UAAU,CAAC,MAAM,CAAuB,CAAC,CAAuB,EAAE,CAAuB,EAAE,EAAE;YAClG,IAAI,CAAC,GAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACjC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBACd,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACf,CAAC;YACD,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAChB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC;YACD,OAAO,CAAC,CAAA;QACV,CAAC,EAAE;YACD,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;SACX,CAAC,CAAA;IACJ,CAAC;IAEO,YAAY,CAAE,CAAe,EAAE,KAAqB,EAAE,KAAa;QACzE,MAAM,EAAE,GAAwB,KAA4B,CAAA;QAC5D,MAAM,QAAQ,GAAmB,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBACjC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;gBAClD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,6BAA6B,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAE,CAAe,EAAE,KAAqB,EAAE,KAAa;QAC7E,MAAM,EAAE,GAA4B,KAAgC,CAAA;QACpE,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAA;QACzB,MAAM,QAAQ,GAAiB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC3B,CAAC;CACF,CAAA;AAjNY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,qBAAU,GAAE;IASU,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,cAAc,CAAC,CAAA;IAAyC,WAAA,IAAA,iBAAM,EAAC,oBAAQ,CAAC,WAAW,CAAC,CAAA;qCAA5C,8BAAa,EAA6D,2BAAc;GAR1J,YAAY,CAiNxB","sourcesContent":["import { ILooseObject } from '../../collections/collection'\r\nimport {\r\n IContainedSet,\r\n ContainedField,\r\n ContainedGroupField,\r\n ContainedComponentField,\r\n ContainedSimpleField,\r\n FieldsDispatch\r\n} from '../../dictionary/contained'\r\nimport { AsciiChars } from '../ascii'\r\nimport { MsgEncoder } from '../msg-encoder'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\nimport moment = require('moment')\r\nimport { FixDefinitions } from '../../dictionary/definition'\r\nimport { IFieldDispatcher } from '../../dictionary/contained/field-dispatcher'\r\nimport { TagType } from '../tag/tag-type'\r\nimport { IPopulatedAttributes } from './populated-attributes'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\n\r\n@injectable()\r\nexport class FixmlEncoder extends MsgEncoder {\r\n public attributePerLine: boolean = false\r\n public readonly eol: string = require('os').EOL\r\n private readonly beginDoc: string = `<FIXML>${this.eol}`\r\n private readonly endDoc: string = '</FIXML>'\r\n private readonly beginBatch: string = `<Batch>${this.eol}`\r\n private readonly endBatch: string = '</Batch>'\r\n\r\n public constructor (@inject(DITokens.TransmitBuffer) public readonly buffer: ElasticBuffer, @inject(DITokens.Definitions) public readonly definitions: FixDefinitions) {\r\n super(definitions)\r\n }\r\n\r\n private static asString (sf: ContainedSimpleField, v: any): string {\r\n switch (sf.definition.tagType) {\r\n case TagType.String: {\r\n return v as string\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Float:\r\n case TagType.Length: {\r\n return v.toString()\r\n }\r\n\r\n case TagType.Boolean: {\r\n return v ? 'Y' : 'N'\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n const d: Date = v as Date\r\n return moment(d).utc().format('YYYY-MM-DDTHH:mm:ss.SSS')\r\n }\r\n\r\n case TagType.UtcTimeOnly: {\r\n const d: Date = v as Date\r\n return moment.utc(d).format('HH:mm:ss.SSS')\r\n }\r\n\r\n case TagType.LocalDate: {\r\n const d: Date = v as Date\r\n return moment(d).format('YYYY-MM-DD')\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n const d: Date = v as Date\r\n return moment(d).utc(true).format('YYYY-MM-DD')\r\n }\r\n }\r\n return ''\r\n }\r\n\r\n public encodeSet (o: ILooseObject, set: IContainedSet): void {\r\n const batch: ILooseObject[] = o.Batch\r\n const toWrite: ILooseObject[] = batch || [o]\r\n const depth = batch ? 1 : 0\r\n const buffer = this.buffer\r\n const begin = this.beginDoc\r\n const indent: string = '\\t'\r\n const endBatch = batch ? this.endBatch : ''\r\n const eol = this.eol\r\n buffer.reset()\r\n buffer.writeString(begin)\r\n if (batch) {\r\n this.batchStart(o, set, depth)\r\n }\r\n toWrite.forEach((next: ILooseObject) => {\r\n this.toXml(next, set.abbreviation ?? '', set, depth + 1)\r\n buffer.writeString(eol)\r\n })\r\n if (batch) {\r\n buffer.writeString(`${indent}${endBatch}`)\r\n }\r\n\r\n buffer.writeString(this.endDoc)\r\n }\r\n\r\n private batchStart (o: ILooseObject, set: IContainedSet, depth: number): void {\r\n const buffer = this.buffer\r\n const indent: string = '\\t'\r\n const beginBatch = this.beginBatch\r\n const hdr: ILooseObject = o.StandardHeader\r\n const eol = this.eol\r\n buffer.writeString(`${indent}${beginBatch}`)\r\n if (hdr) {\r\n const h = set.fields[0] as ContainedComponentField\r\n this.toXml(hdr, h.name, h.definition, depth + 1)\r\n buffer.writeString(eol)\r\n }\r\n }\r\n\r\n private toXml (o: ILooseObject, name: string, set: IContainedSet, depth: number): void {\r\n const buffer = this.buffer\r\n const selfClose: string = '/>'\r\n const close: string = '>'\r\n const open: string = '<'\r\n const indent: string = '\\t'.repeat(depth)\r\n const newLine = this.eol\r\n const fields: ContainedField[] = this.getPopulatedFields(set, o)\r\n const eol: string = fields.length === 0 ? selfClose : close\r\n buffer.writeString(`${indent}${open}`)\r\n buffer.writeString(`${name} `)\r\n this.attributes(o, set, depth, this.attributePerLine)\r\n buffer.writeString(`${eol}`)\r\n new FieldsDispatch().dispatchFields(fields, {\r\n group: (g: ContainedGroupField) => { this.complexGroup(o, g, depth) },\r\n component: (c: ContainedComponentField) => { this.complexComponent(o, c, depth) }\r\n } as IFieldDispatcher)\r\n if (fields.length) {\r\n const end: string = `${newLine}${indent}</${name}>`\r\n buffer.writeString(`${end}`)\r\n }\r\n }\r\n\r\n private getPopulatedFields (set: IContainedSet, o: ILooseObject): ContainedField[] {\r\n const keys: string[] = Object.keys(o)\r\n const fields: ContainedField[] = keys.reduce((a: ContainedField[], current: string) => {\r\n const field: ContainedField | undefined = set.localNameToField.get(current)\r\n if (field && !set.nameToLocalAttribute.has(current)) {\r\n a.push(field)\r\n }\r\n return a\r\n }, [])\r\n fields.sort((a: ContainedField, b: ContainedField) => a.position - b.position)\r\n return fields\r\n }\r\n\r\n private encodeAttribute (name: string, val: string): void {\r\n if (val == null) {\r\n return\r\n }\r\n const buffer = this.buffer\r\n buffer.writeString(name)\r\n buffer.writeChar(AsciiChars.Equal)\r\n buffer.writeChar(AsciiChars.Dq)\r\n buffer.writeString(val)\r\n buffer.writeChar(AsciiChars.Dq)\r\n }\r\n\r\n private attributes (o: ILooseObject, set: IContainedSet, depth: number, attributePerLine: boolean): void {\r\n const newLine = this.eol\r\n const indent: string = '\\t'.repeat(depth + 1)\r\n const attributes = set.localAttribute\r\n const buffer = this.buffer\r\n if (attributes.length && attributePerLine) {\r\n buffer.writeString(newLine)\r\n buffer.writeString(indent)\r\n }\r\n const populatedAttributes: IPopulatedAttributes = this.getPopulatedAttributes(o, attributes)\r\n for (let a = 0; a < populatedAttributes.values.length; ++a) {\r\n const last = a === populatedAttributes.values.length - 1\r\n const f = populatedAttributes.fields[a]\r\n if (a || this.attributePerLine) buffer.writeChar(AsciiChars.Space)\r\n this.encodeAttribute(f.name, FixmlEncoder.asString(f, populatedAttributes.values[a]))\r\n if (!last && attributePerLine) {\r\n buffer.writeString(newLine)\r\n buffer.writeString(indent)\r\n }\r\n }\r\n }\r\n\r\n private getPopulatedAttributes (o: ILooseObject, attributes: ContainedSimpleField[]): IPopulatedAttributes {\r\n return attributes.reduce<IPopulatedAttributes>((a: IPopulatedAttributes, f: ContainedSimpleField) => {\r\n let v: any = o[f.definition.name]\r\n if (v == null) {\r\n v = o[f.name]\r\n }\r\n if (v != null) {\r\n a.values.push(v)\r\n a.fields.push(f)\r\n }\r\n return a\r\n }, {\r\n values: [],\r\n fields: []\r\n })\r\n }\r\n\r\n private complexGroup (o: ILooseObject, field: ContainedField, depth: number): void {\r\n const gf: ContainedGroupField = field as ContainedGroupField\r\n const elements: ILooseObject[] = o[gf.definition.name]\r\n if (elements) {\r\n if (Array.isArray(elements)) {\r\n for (const e of elements) {\r\n this.buffer.writeString(this.eol)\r\n this.toXml(e, gf.name, gf.definition, depth + 1)\r\n }\r\n } else {\r\n throw new Error(`expected array for member ${gf.definition.name}`)\r\n }\r\n }\r\n }\r\n\r\n private complexComponent (o: ILooseObject, field: ContainedField, depth: number): void {\r\n const cf: ContainedComponentField = field as ContainedComponentField\r\n const def = cf.definition\r\n const instance: ILooseObject = o[def.name]\r\n if (instance) {\r\n this.buffer.writeString(this.eol)\r\n this.toXml(instance, cf.name, def, depth + 1)\r\n }\r\n }\r\n\r\n reset (): void {\r\n this.buffer.reset()\r\n }\r\n\r\n trim (): Buffer {\r\n return this.buffer.copy()\r\n }\r\n}\r\n"]}
|
|
@@ -38,7 +38,7 @@ let FiXmlParser = class FiXmlParser extends msg_parser_1.MsgParser {
|
|
|
38
38
|
const me = (_a = description === null || description === void 0 ? void 0 : description.application) === null || _a === void 0 ? void 0 : _a.name;
|
|
39
39
|
this.logger = config.logFactory.logger(`${me}:FiXmlParser`);
|
|
40
40
|
this.saxStream = require('sax').createStream(true, {});
|
|
41
|
-
this.locations = new tags_1.Tags(
|
|
41
|
+
this.locations = new tags_1.Tags(maxMessageLocations);
|
|
42
42
|
this.logger.info('subscribe to stream');
|
|
43
43
|
this.subscribe();
|
|
44
44
|
}
|
|
@@ -162,7 +162,7 @@ let FiXmlParser = class FiXmlParser extends msg_parser_1.MsgParser {
|
|
|
162
162
|
getView() {
|
|
163
163
|
const structure = new structure_1.Structure(this.locations, this.segments);
|
|
164
164
|
const last = structure.segments[structure.segments.length - 1];
|
|
165
|
-
return new fixml_view_1.FixmlView(last, this.values, structure);
|
|
165
|
+
return new fixml_view_1.FixmlView(this.definitions, last, this.values, structure);
|
|
166
166
|
}
|
|
167
167
|
pop(name) {
|
|
168
168
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixml-parser.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { MsgParser } from '../msg-parser'\r\nimport { Tags } from '../tag/tags'\r\nimport { SAXStream } from '../../dictionary'\r\nimport { FixDefinitions, MessageDefinition } from '../../dictionary/definition'\r\nimport {\r\n ContainedField, ContainedComponentField,\r\n ContainedFieldType, ContainedGroupField,\r\n ContainedSimpleField, ContainedFieldSet\r\n} from '../../dictionary/contained'\r\nimport { SegmentDescription } from '../segment/segment-description'\r\nimport { IJsFixConfig, IJsFixLogger } from '../../config'\r\nimport { MsgView } from '../msg-view'\r\nimport { Structure } from '../structure'\r\nimport { FixmlView } from './fixml-view'\r\nimport { Readable } from 'stream'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\nimport { ISaxNode } from '../../dictionary/sax-node'\r\nimport { SegmentType } from '../segment/segment-type'\r\n\r\n@injectable()\r\nexport class FiXmlParser extends MsgParser {\r\n private readonly locations: Tags\r\n private values: string[] = []\r\n private readonly saxStream: SAXStream\r\n private readonly definitions: FixDefinitions\r\n private readonly segments: SegmentDescription[] = []\r\n private readonly segmentStack: SegmentDescription[] = []\r\n private readonly logger: IJsFixLogger\r\n private last: SegmentDescription | null\r\n private raw: string | null\r\n\r\n constructor (@inject(DITokens.IJsFixConfig) public readonly config: IJsFixConfig,\r\n @inject(DITokens.readStream) public readonly readStream: Readable,\r\n @inject(DITokens.maxMessageLocations) public readonly maxMessageLocations: number = 10 * 1024) {\r\n super()\r\n this.definitions = this.config.definitions\r\n const description = config.description\r\n const me = description?.application?.name\r\n this.logger = config.logFactory.logger(`${me}:FiXmlParser`)\r\n this.saxStream = require('sax').createStream(true, {})\r\n this.locations = new Tags(this.definitions, maxMessageLocations)\r\n this.logger.info('subscribe to stream')\r\n this.subscribe()\r\n }\r\n\r\n private reset (): void {\r\n const segments = this.segments\r\n while (segments.length > 0) {\r\n segments.pop()\r\n }\r\n const stack = this.segmentStack\r\n this.last = null\r\n this.raw = null\r\n this.values = []\r\n this.locations.reset()\r\n while (stack.length) {\r\n stack.pop()\r\n }\r\n }\r\n\r\n private subscribe (): void {\r\n const writeStream = this.saxStream\r\n const readStream = this.readStream\r\n const instance = this\r\n readStream.pipe(writeStream).on('ready', () => {\r\n this.logger.info('stream close event')\r\n this.emit('close')\r\n })\r\n readStream.on('error', (e) => {\r\n this.logger.error(e)\r\n this.emit('error', e)\r\n })\r\n readStream.on('end', () => {\r\n this.logger.info('stream end event')\r\n this.emit('end')\r\n })\r\n writeStream.on('data', (i: Buffer) => {\r\n if (instance.last) {\r\n instance.emit('decoded', instance.last.name, i.toString())\r\n } else {\r\n this.raw = i.toString()\r\n }\r\n })\r\n\r\n writeStream.on('opentag', (node) => {\r\n const stack = this.segmentStack\r\n const saxNode: ISaxNode = node as ISaxNode\r\n switch (saxNode.name) {\r\n case 'FIXML':\r\n this.reset()\r\n break\r\n\r\n case 'Batch': {\r\n const locations = this.locations\r\n const ptr = locations.nextTagPos - 1\r\n const segment: SegmentDescription = new SegmentDescription(saxNode.name,\r\n -1,\r\n null,\r\n ptr,\r\n stack.length,\r\n SegmentType.Batch)\r\n segment.startPosition = 0\r\n stack.push(segment)\r\n break\r\n }\r\n\r\n case 'Hdr': {\r\n this.hdr(saxNode)\r\n break\r\n }\r\n\r\n default: {\r\n const stack = this.segmentStack\r\n const isBatch: boolean = stack.length === 1 && stack[0].type === SegmentType.Batch\r\n const isMsg: boolean = stack.length === 0\r\n if (isMsg) {\r\n // one single message\r\n this.msg(saxNode)\r\n } else if (isBatch) {\r\n // one message within a batch or it\r\n this.msgInBatch(saxNode)\r\n } else {\r\n // or it is a structure within a message\r\n this.element(saxNode)\r\n }\r\n }\r\n }\r\n })\r\n writeStream.on('closetag', (name: string) => {\r\n this.pop(name)\r\n })\r\n writeStream.on('error', (e: Error) => {\r\n this.emit('error', e)\r\n })\r\n }\r\n\r\n private hdr (saxNode: ISaxNode): void {\r\n const stack = this.segmentStack\r\n if (stack.length === 0) {\r\n throw new Error(`Hdr not expected before batch or message ${saxNode.name}`)\r\n }\r\n const peek: SegmentDescription = stack[stack.length - 1]\r\n switch (peek.type) {\r\n case SegmentType.Batch: {\r\n // manually handle this component\r\n const hdr = this.definitions.component.get('StandardHeader')\r\n if (hdr) {\r\n const segment: SegmentDescription | null = this.parseAttributes(saxNode.name, hdr, saxNode, SegmentType.Component)\r\n if (segment) {\r\n this.segmentStack.push(segment)\r\n }\r\n }\r\n break\r\n }\r\n\r\n case SegmentType.Msg: {\r\n this.element(saxNode)\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(`Hdr not expected before batch or message ${saxNode.name}`)\r\n }\r\n }\r\n\r\n private msgInBatch (saxNode: ISaxNode): void {\r\n this.logger.info(` ${saxNode.name}: start batch`)\r\n const locations = this.locations\r\n const batch = this.segmentStack[0]\r\n const ptr = locations.nextTagPos\r\n if (!batch.delimiterPositions) {\r\n batch.startGroup(-1)\r\n }\r\n batch.addDelimiterPosition(ptr)\r\n this.logger.debug(` ${saxNode.name}: begin parse msg ${batch.delimiterPositions.length} in batch`)\r\n this.msg(saxNode, true)\r\n }\r\n\r\n private getView (): MsgView {\r\n const structure: Structure = new Structure(this.locations, this.segments)\r\n const last = structure.segments[structure.segments.length - 1]\r\n return new FixmlView(last, this.values, structure)\r\n }\r\n\r\n private pop (name: string): SegmentDescription | null {\r\n const locations = this.locations\r\n const stack = this.segmentStack\r\n const segments = this.segments\r\n while (stack.length > 0) {\r\n const pop = stack.pop()\r\n const ptr = locations.nextTagPos - 1\r\n pop?.end(segments.length, ptr, locations.tagPos[ptr].tag)\r\n if (pop) {\r\n segments[segments.length] = pop\r\n switch (pop.type) {\r\n case SegmentType.Msg: {\r\n // raise msg event\r\n const last = segments[segments.length - 1]\r\n this.last = last\r\n this.emit('msg', last.name, this.getView())\r\n if (this.raw) {\r\n this.emit('decoded', this.last.name, this.raw)\r\n this.raw = null\r\n }\r\n break\r\n }\r\n case SegmentType.Batch: {\r\n const last = segments[segments.length - 1]\r\n this.logger.debug(`emit batch with ${pop.delimiterPositions.length} elements`)\r\n this.emit('batch', last?.set?.abbreviation, this.getView())\r\n break\r\n }\r\n }\r\n if (pop.name === name) {\r\n return pop\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n\r\n private startGroup (saxNode: ISaxNode, gf: ContainedGroupField): void {\r\n const locations = this.locations\r\n const stack: SegmentDescription[] = this.segmentStack\r\n const ptr = locations.nextTagPos\r\n const def = gf.definition\r\n const segment: SegmentDescription | null = this.parseAttributes(saxNode.name, def, saxNode, SegmentType.Component)\r\n if (segment) {\r\n const group: SegmentDescription = new SegmentDescription(def.name,\r\n locations.tagPos[ptr].tag,\r\n def,\r\n ptr,\r\n stack.length,\r\n SegmentType.Group)\r\n group.startGroup(locations.tagPos[ptr].tag)\r\n group.addDelimiterPosition(ptr)\r\n stack.push(group)\r\n stack.push(segment)\r\n }\r\n }\r\n\r\n private getNextField (saxNode: ISaxNode): ContainedField | null {\r\n const stack: SegmentDescription[] = this.segmentStack\r\n while (stack.length > 0) {\r\n const peek: SegmentDescription = stack[stack.length - 1]\r\n const field = peek?.set?.localNameToField.get(saxNode.name)\r\n if (field) {\r\n return field\r\n }\r\n // if this is a group of the same type as already on stack\r\n // take the field from the next level up\r\n if (peek.type === SegmentType.Group && stack.length > 1) {\r\n const contained = stack[stack.length - 2]?.set?.localNameToField.get(saxNode.name)\r\n if (contained instanceof ContainedGroupField) {\r\n if (contained.definition.name === peek.name) {\r\n // this is the same type for next instance in the same group.\r\n return contained\r\n }\r\n }\r\n }\r\n // then have ended previous group. Pop and return to see if this field lives on the parent\r\n const locations = this.locations\r\n const ptr = locations.nextTagPos - 1\r\n const pop = stack.pop()\r\n const segments = this.segments\r\n if (pop) {\r\n pop.end(segments.length, ptr, locations.tagPos[ptr].tag)\r\n segments[segments.length] = pop\r\n }\r\n }\r\n return null\r\n }\r\n\r\n private dispatch (saxNode: ISaxNode, field: ContainedField): void {\r\n switch (field.type) {\r\n case ContainedFieldType.Component: {\r\n const cf: ContainedComponentField = field as ContainedComponentField\r\n const segment: SegmentDescription | null = this.parseAttributes(saxNode.name, cf.definition, saxNode, SegmentType.Component)\r\n if (segment) {\r\n this.segmentStack.push(segment)\r\n }\r\n break\r\n }\r\n\r\n case ContainedFieldType.Group: {\r\n this.dispatchGroup(saxNode, field as ContainedGroupField)\r\n break\r\n }\r\n }\r\n }\r\n\r\n private dispatchGroup (saxNode: ISaxNode, gf: ContainedGroupField): void {\r\n const stack: SegmentDescription[] = this.segmentStack\r\n const peek: SegmentDescription = stack[stack.length - 1]\r\n switch (peek.type) {\r\n case SegmentType.Msg:\r\n case SegmentType.Component: {\r\n this.startGroup(saxNode, gf)\r\n break\r\n }\r\n\r\n case SegmentType.Group: {\r\n if (gf.name === saxNode.name) {\r\n const ptr = this.locations.nextTagPos\r\n peek.addDelimiterPosition(ptr)\r\n const a = this.parseAttributes(saxNode.name, gf.definition, saxNode, SegmentType.Component)\r\n if (a) {\r\n stack.push(a)\r\n }\r\n } else {\r\n throw new Error(`expected another group instance of ${gf.name} but got ${saxNode.name}`)\r\n }\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(`dispatchGroup has field ${gf.name} peek type ${peek.type}`)\r\n }\r\n }\r\n\r\n private element (saxNode: ISaxNode): void {\r\n // may terminate a group and move fields\r\n const field = this.getNextField(saxNode)\r\n if (!field) {\r\n const stack: SegmentDescription[] = this.segmentStack\r\n const peek: SegmentDescription = stack[stack.length - 1]\r\n throw new Error(`field ${saxNode.name} not known in set ${peek?.set?.name}`)\r\n }\r\n this.dispatch(saxNode, field)\r\n }\r\n\r\n private msg (saxNode: ISaxNode, inBatch: boolean = false): void {\r\n this.logger.debug(`${saxNode.name}: begin parse msg`)\r\n const type: string = saxNode.name\r\n const def: MessageDefinition | null = this.definitions.message.get(type)\r\n if (!def) {\r\n throw new Error(`unknown message type ${type}`)\r\n }\r\n if (inBatch) {\r\n const batch = this.segmentStack[0]\r\n batch.set = def\r\n }\r\n const segment: SegmentDescription | null = this.parseAttributes(type, def, saxNode, SegmentType.Msg)\r\n if (segment) {\r\n this.segmentStack.push(segment)\r\n }\r\n }\r\n\r\n private parseAttributes (name: string, set: ContainedFieldSet, saxNode: ISaxNode, type: SegmentType): SegmentDescription | null {\r\n const locations = this.locations\r\n const attributes = saxNode.attributes\r\n const values = this.values\r\n let ptr: number\r\n if (attributes) {\r\n const keys: string[] = Object.keys(attributes)\r\n ptr = keys.length > 0 ? locations.nextTagPos : locations.nextTagPos - 1\r\n for (let j: number = 0; j < keys.length; ++j) {\r\n const k: string = keys[j]\r\n const v: string = attributes[k]\r\n const field: ContainedSimpleField = set.localNameToField.get(k) as ContainedSimpleField\r\n if (!field) {\r\n this.logger.warning(`no field ${k} in set ${set.name}`)\r\n locations.store(j, 1, -1)\r\n } else {\r\n locations.store(j, 1, field.definition.tag)\r\n }\r\n values[values.length] = v\r\n }\r\n return new SegmentDescription(name, locations.tagPos[ptr].tag, set, ptr, this.segmentStack.length, type)\r\n }\r\n return null\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"fixml-parser.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { MsgParser } from '../msg-parser'\r\nimport { Tags } from '../tag/tags'\r\nimport { SAXStream } from '../../dictionary'\r\nimport { FixDefinitions, MessageDefinition } from '../../dictionary/definition'\r\nimport {\r\n ContainedField, ContainedComponentField,\r\n ContainedFieldType, ContainedGroupField,\r\n ContainedSimpleField, IContainedSet\r\n} from '../../dictionary/contained'\r\nimport { SegmentDescription } from '../segment/segment-description'\r\nimport { IJsFixConfig, IJsFixLogger } from '../../config'\r\nimport { MsgView } from '../msg-view'\r\nimport { Structure } from '../structure'\r\nimport { FixmlView } from './fixml-view'\r\nimport { Readable } from 'stream'\r\nimport { inject, injectable } from 'tsyringe'\r\nimport { DITokens } from '../../runtime/di-tokens'\r\nimport { ISaxNode } from '../../dictionary/sax-node'\r\nimport { SegmentType } from '../segment/segment-type'\r\n\r\n@injectable()\r\nexport class FiXmlParser extends MsgParser {\r\n private readonly locations: Tags\r\n private values: string[] = []\r\n private readonly saxStream: SAXStream\r\n private readonly definitions: FixDefinitions\r\n private readonly segments: SegmentDescription[] = []\r\n private readonly segmentStack: SegmentDescription[] = []\r\n private readonly logger: IJsFixLogger\r\n private last: SegmentDescription | null\r\n private raw: string | null\r\n\r\n constructor (@inject(DITokens.IJsFixConfig) public readonly config: IJsFixConfig,\r\n @inject(DITokens.readStream) public readonly readStream: Readable,\r\n @inject(DITokens.maxMessageLocations) public readonly maxMessageLocations: number = 10 * 1024) {\r\n super()\r\n this.definitions = this.config.definitions\r\n const description = config.description\r\n const me = description?.application?.name\r\n this.logger = config.logFactory.logger(`${me}:FiXmlParser`)\r\n this.saxStream = require('sax').createStream(true, {})\r\n this.locations = new Tags(maxMessageLocations)\r\n this.logger.info('subscribe to stream')\r\n this.subscribe()\r\n }\r\n\r\n private reset (): void {\r\n const segments = this.segments\r\n while (segments.length > 0) {\r\n segments.pop()\r\n }\r\n const stack = this.segmentStack\r\n this.last = null\r\n this.raw = null\r\n this.values = []\r\n this.locations.reset()\r\n while (stack.length) {\r\n stack.pop()\r\n }\r\n }\r\n\r\n private subscribe (): void {\r\n const writeStream = this.saxStream\r\n const readStream = this.readStream\r\n const instance = this\r\n readStream.pipe(writeStream).on('ready', () => {\r\n this.logger.info('stream close event')\r\n this.emit('close')\r\n })\r\n readStream.on('error', (e) => {\r\n this.logger.error(e)\r\n this.emit('error', e)\r\n })\r\n readStream.on('end', () => {\r\n this.logger.info('stream end event')\r\n this.emit('end')\r\n })\r\n writeStream.on('data', (i: Buffer) => {\r\n if (instance.last) {\r\n instance.emit('decoded', instance.last.name, i.toString())\r\n } else {\r\n this.raw = i.toString()\r\n }\r\n })\r\n\r\n writeStream.on('opentag', (node) => {\r\n const stack = this.segmentStack\r\n const saxNode: ISaxNode = node as ISaxNode\r\n switch (saxNode.name) {\r\n case 'FIXML':\r\n this.reset()\r\n break\r\n\r\n case 'Batch': {\r\n const locations = this.locations\r\n const ptr = locations.nextTagPos - 1\r\n const segment: SegmentDescription = new SegmentDescription(saxNode.name,\r\n -1,\r\n null,\r\n ptr,\r\n stack.length,\r\n SegmentType.Batch)\r\n segment.startPosition = 0\r\n stack.push(segment)\r\n break\r\n }\r\n\r\n case 'Hdr': {\r\n this.hdr(saxNode)\r\n break\r\n }\r\n\r\n default: {\r\n const stack = this.segmentStack\r\n const isBatch: boolean = stack.length === 1 && stack[0].type === SegmentType.Batch\r\n const isMsg: boolean = stack.length === 0\r\n if (isMsg) {\r\n // one single message\r\n this.msg(saxNode)\r\n } else if (isBatch) {\r\n // one message within a batch or it\r\n this.msgInBatch(saxNode)\r\n } else {\r\n // or it is a structure within a message\r\n this.element(saxNode)\r\n }\r\n }\r\n }\r\n })\r\n writeStream.on('closetag', (name: string) => {\r\n this.pop(name)\r\n })\r\n writeStream.on('error', (e: Error) => {\r\n this.emit('error', e)\r\n })\r\n }\r\n\r\n private hdr (saxNode: ISaxNode): void {\r\n const stack = this.segmentStack\r\n if (stack.length === 0) {\r\n throw new Error(`Hdr not expected before batch or message ${saxNode.name}`)\r\n }\r\n const peek: SegmentDescription = stack[stack.length - 1]\r\n switch (peek.type) {\r\n case SegmentType.Batch: {\r\n // manually handle this component\r\n const hdr = this.definitions.component.get('StandardHeader')\r\n if (hdr) {\r\n const segment: SegmentDescription | null = this.parseAttributes(saxNode.name, hdr, saxNode, SegmentType.Component)\r\n if (segment) {\r\n this.segmentStack.push(segment)\r\n }\r\n }\r\n break\r\n }\r\n\r\n case SegmentType.Msg: {\r\n this.element(saxNode)\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(`Hdr not expected before batch or message ${saxNode.name}`)\r\n }\r\n }\r\n\r\n private msgInBatch (saxNode: ISaxNode): void {\r\n this.logger.info(` ${saxNode.name}: start batch`)\r\n const locations = this.locations\r\n const batch = this.segmentStack[0]\r\n const ptr = locations.nextTagPos\r\n if (!batch.delimiterPositions) {\r\n batch.startGroup(-1)\r\n }\r\n batch.addDelimiterPosition(ptr)\r\n this.logger.debug(` ${saxNode.name}: begin parse msg ${batch.delimiterPositions.length} in batch`)\r\n this.msg(saxNode, true)\r\n }\r\n\r\n private getView (): MsgView {\r\n const structure: Structure = new Structure(this.locations, this.segments)\r\n const last = structure.segments[structure.segments.length - 1]\r\n return new FixmlView(this.definitions, last, this.values, structure)\r\n }\r\n\r\n private pop (name: string): SegmentDescription | null {\r\n const locations = this.locations\r\n const stack = this.segmentStack\r\n const segments = this.segments\r\n while (stack.length > 0) {\r\n const pop = stack.pop()\r\n const ptr = locations.nextTagPos - 1\r\n pop?.end(segments.length, ptr, locations.tagPos[ptr].tag)\r\n if (pop) {\r\n segments[segments.length] = pop\r\n switch (pop.type) {\r\n case SegmentType.Msg: {\r\n // raise msg event\r\n const last = segments[segments.length - 1]\r\n this.last = last\r\n this.emit('msg', last.name, this.getView())\r\n if (this.raw) {\r\n this.emit('decoded', this.last.name, this.raw)\r\n this.raw = null\r\n }\r\n break\r\n }\r\n case SegmentType.Batch: {\r\n const last = segments[segments.length - 1]\r\n this.logger.debug(`emit batch with ${pop.delimiterPositions.length} elements`)\r\n this.emit('batch', last?.set?.abbreviation, this.getView())\r\n break\r\n }\r\n }\r\n if (pop.name === name) {\r\n return pop\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n\r\n private startGroup (saxNode: ISaxNode, gf: ContainedGroupField): void {\r\n const locations = this.locations\r\n const stack: SegmentDescription[] = this.segmentStack\r\n const ptr = locations.nextTagPos\r\n const def = gf.definition\r\n const segment: SegmentDescription | null = this.parseAttributes(saxNode.name, def, saxNode, SegmentType.Component)\r\n if (segment) {\r\n const group: SegmentDescription = new SegmentDescription(def.name,\r\n locations.tagPos[ptr].tag,\r\n def,\r\n ptr,\r\n stack.length,\r\n SegmentType.Group)\r\n group.startGroup(locations.tagPos[ptr].tag)\r\n group.addDelimiterPosition(ptr)\r\n stack.push(group)\r\n stack.push(segment)\r\n }\r\n }\r\n\r\n private getNextField (saxNode: ISaxNode): ContainedField | null {\r\n const stack: SegmentDescription[] = this.segmentStack\r\n while (stack.length > 0) {\r\n const peek: SegmentDescription = stack[stack.length - 1]\r\n const field = peek?.set?.localNameToField.get(saxNode.name)\r\n if (field) {\r\n return field\r\n }\r\n // if this is a group of the same type as already on stack\r\n // take the field from the next level up\r\n if (peek.type === SegmentType.Group && stack.length > 1) {\r\n const contained = stack[stack.length - 2]?.set?.localNameToField.get(saxNode.name)\r\n if (contained instanceof ContainedGroupField) {\r\n if (contained.definition.name === peek.name) {\r\n // this is the same type for next instance in the same group.\r\n return contained\r\n }\r\n }\r\n }\r\n // then have ended previous group. Pop and return to see if this field lives on the parent\r\n const locations = this.locations\r\n const ptr = locations.nextTagPos - 1\r\n const pop = stack.pop()\r\n const segments = this.segments\r\n if (pop) {\r\n pop.end(segments.length, ptr, locations.tagPos[ptr].tag)\r\n segments[segments.length] = pop\r\n }\r\n }\r\n return null\r\n }\r\n\r\n private dispatch (saxNode: ISaxNode, field: ContainedField): void {\r\n switch (field.type) {\r\n case ContainedFieldType.Component: {\r\n const cf: ContainedComponentField = field as ContainedComponentField\r\n const segment: SegmentDescription | null = this.parseAttributes(saxNode.name, cf.definition, saxNode, SegmentType.Component)\r\n if (segment) {\r\n this.segmentStack.push(segment)\r\n }\r\n break\r\n }\r\n\r\n case ContainedFieldType.Group: {\r\n this.dispatchGroup(saxNode, field as ContainedGroupField)\r\n break\r\n }\r\n }\r\n }\r\n\r\n private dispatchGroup (saxNode: ISaxNode, gf: ContainedGroupField): void {\r\n const stack: SegmentDescription[] = this.segmentStack\r\n const peek: SegmentDescription = stack[stack.length - 1]\r\n switch (peek.type) {\r\n case SegmentType.Msg:\r\n case SegmentType.Component: {\r\n this.startGroup(saxNode, gf)\r\n break\r\n }\r\n\r\n case SegmentType.Group: {\r\n if (gf.name === saxNode.name) {\r\n const ptr = this.locations.nextTagPos\r\n peek.addDelimiterPosition(ptr)\r\n const a = this.parseAttributes(saxNode.name, gf.definition, saxNode, SegmentType.Component)\r\n if (a) {\r\n stack.push(a)\r\n }\r\n } else {\r\n throw new Error(`expected another group instance of ${gf.name} but got ${saxNode.name}`)\r\n }\r\n break\r\n }\r\n\r\n default:\r\n throw new Error(`dispatchGroup has field ${gf.name} peek type ${peek.type}`)\r\n }\r\n }\r\n\r\n private element (saxNode: ISaxNode): void {\r\n // may terminate a group and move fields\r\n const field = this.getNextField(saxNode)\r\n if (!field) {\r\n const stack: SegmentDescription[] = this.segmentStack\r\n const peek: SegmentDescription = stack[stack.length - 1]\r\n throw new Error(`field ${saxNode.name} not known in set ${peek?.set?.name}`)\r\n }\r\n this.dispatch(saxNode, field)\r\n }\r\n\r\n private msg (saxNode: ISaxNode, inBatch: boolean = false): void {\r\n this.logger.debug(`${saxNode.name}: begin parse msg`)\r\n const type: string = saxNode.name\r\n const def: MessageDefinition | undefined = this.definitions.message.get(type)\r\n if (!def) {\r\n throw new Error(`unknown message type ${type}`)\r\n }\r\n if (inBatch) {\r\n const batch = this.segmentStack[0]\r\n batch.set = def\r\n }\r\n const segment: SegmentDescription | null = this.parseAttributes(type, def, saxNode, SegmentType.Msg)\r\n if (segment) {\r\n this.segmentStack.push(segment)\r\n }\r\n }\r\n\r\n private parseAttributes (name: string, set: IContainedSet, saxNode: ISaxNode, type: SegmentType): SegmentDescription | null {\r\n const locations = this.locations\r\n const attributes = saxNode.attributes\r\n const values = this.values\r\n let ptr: number\r\n if (attributes) {\r\n const keys: string[] = Object.keys(attributes)\r\n ptr = keys.length > 0 ? locations.nextTagPos : locations.nextTagPos - 1\r\n for (let j: number = 0; j < keys.length; ++j) {\r\n const k: string = keys[j]\r\n const v: string = attributes[k]\r\n const field: ContainedSimpleField = set.localNameToField.get(k) as ContainedSimpleField\r\n if (!field) {\r\n this.logger.warning(`no field ${k} in set ${set.name}`)\r\n locations.store(j, 1, -1)\r\n } else {\r\n locations.store(j, 1, field.definition.tag)\r\n }\r\n values[values.length] = v\r\n }\r\n return new SegmentDescription(name, locations.tagPos[ptr].tag, set, ptr, this.segmentStack.length, type)\r\n }\r\n return null\r\n }\r\n}\r\n"]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { MsgView } from '../msg-view';
|
|
2
|
-
import { SimpleFieldDefinition } from '../../dictionary/definition';
|
|
2
|
+
import { FixDefinitions, SimpleFieldDefinition } from '../../dictionary/definition';
|
|
3
3
|
import { Structure } from '../structure';
|
|
4
4
|
import { SegmentDescription } from '../segment/segment-description';
|
|
5
5
|
export declare class FixmlView extends MsgView {
|
|
6
|
+
definitions: FixDefinitions;
|
|
6
7
|
readonly segment: SegmentDescription;
|
|
7
8
|
readonly values: string[];
|
|
8
9
|
readonly structure: Structure;
|
|
9
|
-
constructor(segment: SegmentDescription, values: string[], structure: Structure);
|
|
10
|
+
constructor(definitions: FixDefinitions, segment: SegmentDescription, values: string[], structure: Structure);
|
|
10
11
|
private static getTimestamp;
|
|
11
12
|
private static getTimeOnly;
|
|
12
13
|
private static getDateOnly;
|
|
@@ -7,8 +7,9 @@ const ascii_1 = require("../ascii/");
|
|
|
7
7
|
const moment = require("moment");
|
|
8
8
|
const tag_type_1 = require("../tag/tag-type");
|
|
9
9
|
class FixmlView extends msg_view_1.MsgView {
|
|
10
|
-
constructor(segment, values, structure) {
|
|
11
|
-
super(segment, structure);
|
|
10
|
+
constructor(definitions, segment, values, structure) {
|
|
11
|
+
super(definitions, segment, structure);
|
|
12
|
+
this.definitions = definitions;
|
|
12
13
|
this.segment = segment;
|
|
13
14
|
this.values = values;
|
|
14
15
|
this.structure = structure;
|
|
@@ -33,13 +34,13 @@ class FixmlView extends msg_view_1.MsgView {
|
|
|
33
34
|
return d;
|
|
34
35
|
}
|
|
35
36
|
clone() {
|
|
36
|
-
return new FixmlView(this.segment, this.values, new structure_1.Structure(this.structure.tags.clone(), this.structure.segments));
|
|
37
|
+
return new FixmlView(this.definitions, this.segment, this.values, new structure_1.Structure(this.structure.tags.clone(), this.structure.segments));
|
|
37
38
|
}
|
|
38
39
|
checksum() {
|
|
39
40
|
return 0;
|
|
40
41
|
}
|
|
41
42
|
create(singleton) {
|
|
42
|
-
return new FixmlView(singleton, this.values, this.structure);
|
|
43
|
+
return new FixmlView(this.definitions, singleton, this.values, this.structure);
|
|
43
44
|
}
|
|
44
45
|
stringAtPosition(position) {
|
|
45
46
|
if (position < 0 || position >= this.values.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixml-view.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-view.ts"],"names":[],"mappings":";;;AAAA,0CAAqC;AAErC,4CAAwC;AAExC,qCAAsC;AACtC,iCAAgC;AAChC,8CAAyC;AAEzC,MAAa,SAAU,SAAQ,kBAAO;IACpC,
|
|
1
|
+
{"version":3,"file":"fixml-view.js","sourceRoot":"","sources":["../../../src/buffer/fixml/fixml-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { MsgView } from '../msg-view'\r\nimport { FixDefinitions, SimpleFieldDefinition } from '../../dictionary/definition'\r\nimport { Structure } from '../structure'\r\nimport { SegmentDescription } from '../segment/segment-description'\r\nimport { AsciiChars } from '../ascii/'\r\nimport * as moment from 'moment'\r\nimport { TagType } from '../tag/tag-type'\r\n\r\nexport class FixmlView extends MsgView {\r\n constructor (public definitions: FixDefinitions, public readonly segment: SegmentDescription,\r\n public readonly values: string[],\r\n public readonly structure: Structure) {\r\n super(definitions, segment, structure)\r\n }\r\n\r\n private static getTimestamp (s: string, useUtc: boolean): Date {\r\n const m = moment(s)\r\n return useUtc ? m.utc(true).toDate() : m.toDate()\r\n }\r\n\r\n // 01:00:08.201\r\n private static getTimeOnly (s: string, useUtc: boolean): Date {\r\n const m = moment(s, [moment.HTML5_FMT.TIME_MS, moment.HTML5_FMT.TIME_SECONDS])\r\n return useUtc ? m.utc(true).toDate() : m.toDate()\r\n }\r\n\r\n private static getDateOnly (s: string, useUtc: boolean): Date {\r\n const m = moment(s)\r\n let d: Date\r\n if (useUtc) {\r\n d = m.utc(true).toDate()\r\n } else {\r\n d = m.toDate()\r\n }\r\n return d\r\n }\r\n\r\n // if the view is to be kept beyond the event on which it arrives, must be cloned\r\n public clone (): MsgView {\r\n return new FixmlView(this.definitions, this.segment, this.values, new Structure(this.structure.tags.clone(), this.structure.segments))\r\n }\r\n\r\n public checksum (): number {\r\n return 0\r\n }\r\n\r\n protected create (singleton: SegmentDescription): FixmlView {\r\n return new FixmlView(this.definitions, singleton,\r\n this.values,\r\n this.structure)\r\n }\r\n\r\n protected stringAtPosition (position: number): string {\r\n if (position < 0 || position >= this.values.length) {\r\n throw new Error(`illegal position ${position}`)\r\n }\r\n return this.values[position]\r\n }\r\n\r\n protected toTyped (field: SimpleFieldDefinition): any {\r\n const position: number = this.getPosition(field.tag)\r\n if (position >= 0) {\r\n const s: string = this.values[position]\r\n switch (field.tagType) {\r\n case TagType.String : {\r\n return this.stringAtPosition(position)\r\n }\r\n\r\n case TagType.Int:\r\n case TagType.Length: {\r\n return parseInt(s, 10)\r\n }\r\n\r\n case TagType.Float: {\r\n return parseFloat(s)\r\n }\r\n\r\n case TagType.Boolean: {\r\n return s && s.length > 0 && AsciiChars.firstChar(s) === AsciiChars.Y\r\n }\r\n\r\n case TagType.UtcTimestamp: {\r\n // 20150417-01:00:08.201\r\n return FixmlView.getTimestamp(s, true)\r\n }\r\n // 01:00:08.201\r\n case TagType.UtcTimeOnly: {\r\n return FixmlView.getTimeOnly(s, true)\r\n }\r\n\r\n case TagType.UtcDateOnly: {\r\n return FixmlView.getDateOnly(s, true)\r\n }\r\n\r\n case TagType.LocalDate: {\r\n return FixmlView.getDateOnly(s, true)\r\n }\r\n\r\n case TagType.RawData: {\r\n return Buffer.alloc(s.length, s, 'utf8')\r\n }\r\n\r\n default: {\r\n return this.stringAtPosition(position)\r\n }\r\n }\r\n }\r\n return this.stringAtPosition(position)\r\n }\r\n}\r\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
import { ILooseObject } from '../collections/collection';
|
|
4
4
|
import { FixDefinitions } from '../dictionary/definition';
|
|
5
|
-
import {
|
|
5
|
+
import { IContainedSet } from '../dictionary/contained';
|
|
6
6
|
import * as events from 'events';
|
|
7
7
|
export declare abstract class MsgEncoder extends events.EventEmitter {
|
|
8
8
|
readonly definitions: FixDefinitions;
|
|
@@ -10,5 +10,5 @@ export declare abstract class MsgEncoder extends events.EventEmitter {
|
|
|
10
10
|
encode(o: ILooseObject, name: string): void;
|
|
11
11
|
abstract reset(): void;
|
|
12
12
|
abstract trim(): Buffer;
|
|
13
|
-
abstract encodeSet(o: ILooseObject, set:
|
|
13
|
+
abstract encodeSet(o: ILooseObject, set: IContainedSet): void;
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"msg-encoder.js","sourceRoot":"","sources":["../../src/buffer/msg-encoder.ts"],"names":[],"mappings":";;;AAGA,iCAAgC;AAEhC,MAAsB,UAAW,SAAQ,MAAM,CAAC,YAAY;IAC1D,YAAuC,WAA2B;QAChE,KAAK,EAAE,CAAA;QAD8B,gBAAW,GAAX,WAAW,CAAgB;IAElE,CAAC;IAEM,MAAM,CAAE,CAAe,EAAE,IAAY;;QAC1C,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"msg-encoder.js","sourceRoot":"","sources":["../../src/buffer/msg-encoder.ts"],"names":[],"mappings":";;;AAGA,iCAAgC;AAEhC,MAAsB,UAAW,SAAQ,MAAM,CAAC,YAAY;IAC1D,YAAuC,WAA2B;QAChE,KAAK,EAAE,CAAA;QAD8B,gBAAW,GAAX,WAAW,CAAgB;IAElE,CAAC;IAEM,MAAM,CAAE,CAAe,EAAE,IAAY;;QAC1C,MAAM,GAAG,GAA8B,MAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mCACvE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAM;QACR,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACxB,CAAC;CAKF;AAjBD,gCAiBC","sourcesContent":["import { ILooseObject } from '../collections/collection'\r\nimport { FixDefinitions } from '../dictionary/definition'\r\nimport { IContainedSet } from '../dictionary/contained'\r\nimport * as events from 'events'\r\n\r\nexport abstract class MsgEncoder extends events.EventEmitter {\r\n protected constructor (public readonly definitions: FixDefinitions) {\r\n super()\r\n }\r\n\r\n public encode (o: ILooseObject, name: string): void {\r\n const set: IContainedSet | undefined = this.definitions.message.get(name) ??\r\n this.definitions.component.get(name)\r\n if (!set) {\r\n return\r\n }\r\n this.encodeSet(o, set)\r\n }\r\n\r\n public abstract reset (): void\r\n public abstract trim (): Buffer\r\n public abstract encodeSet (o: ILooseObject, set: IContainedSet): void\r\n}\r\n"]}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { TagPos } from './tag/tag-pos';
|
|
2
3
|
import { SegmentDescription } from './segment/segment-description';
|
|
3
4
|
import { Structure } from './structure';
|
|
4
5
|
import { ILooseObject } from '../collections/collection';
|
|
5
|
-
import { SimpleFieldDefinition } from '../dictionary/definition';
|
|
6
|
+
import { FixDefinitions, SimpleFieldDefinition } from '../dictionary/definition';
|
|
6
7
|
export declare abstract class MsgView {
|
|
8
|
+
readonly definitions: FixDefinitions;
|
|
7
9
|
readonly segment: SegmentDescription;
|
|
8
10
|
readonly structure: Structure | null;
|
|
9
11
|
protected sortedTagPosForwards: TagPos[];
|
|
10
12
|
protected sortedTagPosBackwards: TagPos[];
|
|
11
13
|
private readonly reducer;
|
|
12
|
-
protected constructor(segment: SegmentDescription, structure: Structure | null);
|
|
14
|
+
protected constructor(definitions: FixDefinitions, segment: SegmentDescription, structure: Structure | null);
|
|
13
15
|
protected static asVerbose: (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos) => string;
|
|
14
16
|
protected static asToken: (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos) => string;
|
|
15
17
|
invalid(): number[];
|
|
@@ -21,9 +23,9 @@ export declare abstract class MsgView {
|
|
|
21
23
|
groupCount(): number;
|
|
22
24
|
getString(tagOrName: number | string): string | null;
|
|
23
25
|
getStrings(tagOrName?: number | string | null): Array<(string | null)> | null;
|
|
24
|
-
getTyped(tagOrName: number | string):
|
|
25
|
-
getTypedList(...tagOrNames: Array<number | string>): Array<boolean | string | number | Date | null>;
|
|
26
|
-
getTypedTags(tagOrName: Array<string | number>): Array<boolean | string | number | Date | null>;
|
|
26
|
+
getTyped(tagOrName: number | string): (boolean | string | number | Date | Buffer | null);
|
|
27
|
+
getTypedList(...tagOrNames: Array<number | string>): Array<boolean | string | number | Date | Buffer | null>;
|
|
28
|
+
getTypedTags(tagOrName: Array<string | number>): Array<boolean | string | number | Date | Buffer | null>;
|
|
27
29
|
toObject(): ILooseObject | ILooseObject[] | null;
|
|
28
30
|
toString(): string;
|
|
29
31
|
toVerbose(): string;
|
|
@@ -33,7 +35,7 @@ export declare abstract class MsgView {
|
|
|
33
35
|
abstract clone(): MsgView;
|
|
34
36
|
protected abstract create(singleton: SegmentDescription): MsgView;
|
|
35
37
|
protected abstract stringAtPosition(position: number): string | null;
|
|
36
|
-
protected abstract toTyped(field: SimpleFieldDefinition): boolean | string | number | Date;
|
|
38
|
+
protected abstract toTyped(field: SimpleFieldDefinition): boolean | string | number | Date | Buffer | null;
|
|
37
39
|
protected resolveTag(tagOrName: number | string): number;
|
|
38
40
|
protected getPositions(tag: number): number[];
|
|
39
41
|
protected getPosition(tag: number): number;
|
package/dist/buffer/msg-view.js
CHANGED
|
@@ -6,7 +6,8 @@ const dictionary_1 = require("../dictionary");
|
|
|
6
6
|
const elastic_buffer_1 = require("./elastic-buffer");
|
|
7
7
|
const contained_set_type_1 = require("../dictionary/contained-set-type");
|
|
8
8
|
class MsgView {
|
|
9
|
-
constructor(segment, structure) {
|
|
9
|
+
constructor(definitions, segment, structure) {
|
|
10
|
+
this.definitions = definitions;
|
|
10
11
|
this.segment = segment;
|
|
11
12
|
this.structure = structure;
|
|
12
13
|
this.reducer = new dictionary_1.SetReduce();
|
|
@@ -98,12 +99,12 @@ class MsgView {
|
|
|
98
99
|
});
|
|
99
100
|
}
|
|
100
101
|
getTyped(tagOrName) {
|
|
101
|
-
var _a
|
|
102
|
+
var _a;
|
|
102
103
|
const tag = this.resolveTag(tagOrName);
|
|
103
104
|
if (tag == null) {
|
|
104
105
|
return null;
|
|
105
106
|
}
|
|
106
|
-
const field = (
|
|
107
|
+
const field = (_a = this.definitions.tagToSimple[tag]) !== null && _a !== void 0 ? _a : null;
|
|
107
108
|
if (field == null) {
|
|
108
109
|
return null;
|
|
109
110
|
}
|
|
@@ -172,13 +173,14 @@ class MsgView {
|
|
|
172
173
|
return parts.reduce(reducer, this);
|
|
173
174
|
}
|
|
174
175
|
resolveTag(tagOrName) {
|
|
175
|
-
var _a
|
|
176
|
+
var _a;
|
|
176
177
|
let tag;
|
|
178
|
+
const set = this.segment.set;
|
|
177
179
|
if (typeof (tagOrName) === 'string') {
|
|
178
|
-
if (
|
|
180
|
+
if (set == null)
|
|
179
181
|
return 0;
|
|
180
|
-
const cf =
|
|
181
|
-
const f = cf ? cf.definition : (
|
|
182
|
+
const cf = set.simple.get(tagOrName);
|
|
183
|
+
const f = cf ? cf.definition : (_a = this.definitions.simple.get(tagOrName)) !== null && _a !== void 0 ? _a : null;
|
|
182
184
|
if (f == null) {
|
|
183
185
|
return -1;
|
|
184
186
|
}
|
|
@@ -347,7 +349,7 @@ class MsgView {
|
|
|
347
349
|
return '';
|
|
348
350
|
const tags = structure.tags;
|
|
349
351
|
const count = segment.endPosition - segment.startPosition;
|
|
350
|
-
const simple =
|
|
352
|
+
const simple = this.definitions.simple;
|
|
351
353
|
for (let i = segment.startPosition; i <= segment.endPosition; ++i) {
|
|
352
354
|
const tagPos = tags.tagPos[i];
|
|
353
355
|
const field = simple.get(tagPos.tag.toString());
|