jspurefix 3.4.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-ascii-store-resend.d.ts +4 -3
- package/dist/store/fix-msg-ascii-store-resend.js +21 -5
- package/dist/store/fix-msg-ascii-store-resend.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/ascii-store-replay.test.js +14 -1
- package/dist/test/ascii/ascii-store-replay.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/ascii/session.test.js +64 -15
- package/dist/test/ascii/session.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 +5 -2
- 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 +21 -21
- 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-ascii-store-resend.ts +64 -8
- 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 +11 -7
- 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":"msg-view.js","sourceRoot":"","sources":["../../src/buffer/msg-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { TagPos } from './tag/tag-pos'\r\nimport { SegmentDescription } from './segment/segment-description'\r\nimport { Structure } from './structure'\r\nimport { Dictionary } from '../collections'\r\nimport { Tags } from './tag/tags'\r\nimport {\r\n ContainedComponentField,\r\n ContainedField,\r\n ContainedFieldSet,\r\n ContainedGroupField,\r\n ContainedSimpleField\r\n} from '../dictionary/contained'\r\nimport { SetReduce } from '../dictionary'\r\nimport { ILooseObject } from '../collections/collection'\r\nimport { ElasticBuffer } from './elastic-buffer'\r\nimport { GroupFieldDefinition, SimpleFieldDefinition } from '../dictionary/definition'\r\nimport { ITypeDispatcher } from '../dictionary/type-dispatcher'\r\nimport { ContainedSetType } from '../dictionary/contained-set-type'\r\n\r\nexport abstract class MsgView {\r\n protected sortedTagPosForwards: TagPos[]\r\n protected sortedTagPosBackwards: TagPos[]\r\n private readonly reducer: SetReduce<ILooseObject> = new SetReduce<ILooseObject>()\r\n\r\n protected constructor (public readonly segment: SegmentDescription, public readonly structure: Structure | null) {\r\n }\r\n\r\n protected static asVerbose = (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos): string => {\r\n const newLine = require('os').EOL\r\n let desc: string\r\n let name: string\r\n if (field) {\r\n name = field.name || 'unknown'\r\n if (field.isEnum()) {\r\n desc = `${val}[${field.resolveEnum(val)}]${newLine}\\t${field.description ?? ''}${newLine}${newLine}`\r\n } else {\r\n desc = `${val}${newLine}t${field.description ?? ''}${newLine}${newLine}`\r\n }\r\n } else {\r\n name = 'unknown'\r\n desc = 'na'\r\n }\r\n return `[${i}] ${tp.tag} (${name}) = ${desc}`\r\n }\r\n\r\n protected static asToken = (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos): string => {\r\n const perLine: number = 2\r\n const newLine = require('os').EOL\r\n // [280] 814 (ApplQueueResolution) = 2[OverlayLast][281] 10 (CheckSum) = 80\r\n let desc: string\r\n let name: string\r\n if (field) {\r\n name = field.name || 'unknown'\r\n if (field.isEnum()) {\r\n desc = `${val}[${field.resolveEnum(val)}]`\r\n } else {\r\n desc = `${val}`\r\n }\r\n } else {\r\n desc = `${val}`\r\n name = 'unknown'\r\n }\r\n let delimiter: string\r\n if (i === 1 || (i < count && i % perLine - 1 === 0)) {\r\n delimiter = newLine\r\n } else {\r\n delimiter = i < count ? ', ' : ''\r\n }\r\n return `[${i}] ${tp.tag} (${name}) = ${desc}${delimiter}`\r\n }\r\n\r\n // return list of any tags parsed that are not valid\r\n public invalid (): number[] {\r\n const invalidTags: number[] = []\r\n const set = this.segment.set\r\n if (set == null) return []\r\n const tags = this.structure?.tags ?? null\r\n if (tags == null) return []\r\n for (let i = 0; i < tags.nextTagPos; ++i) {\r\n const tag = tags.tagPos[i].tag\r\n if (tag <= 0 || !set.containedTag[tag]) {\r\n invalidTags[invalidTags.length] = tag\r\n }\r\n }\r\n return invalidTags\r\n }\r\n\r\n // list of tags that must be present\r\n public missing (): number[] {\r\n if (this.segment == null) return []\r\n if (this.segment.set == null) return []\r\n return this.missingRequired(this.segment.set, [])\r\n }\r\n\r\n /**\r\n * does this view contain this tag\r\n * @param tagOrName the name or tag of field to check 8 or BeginString\r\n */\r\n public contains (tagOrName: number | string): boolean {\r\n const tag: number = this.resolveTag(tagOrName)\r\n const position: number = this.getPosition(tag)\r\n return position >= 0\r\n }\r\n\r\n /**\r\n * if this view represents a repeated group then return a sub view representing\r\n * this instance of repeated group.\r\n * @param i the index to return i.e. 0 is first within repeated group\r\n */\r\n public getGroupInstance (i: number): MsgView | null {\r\n const instance: SegmentDescription | null = this.segment?.getInstance(i)\r\n if (!instance) {\r\n return null\r\n }\r\n return this.create(instance)\r\n }\r\n\r\n public getUndefined (): SegmentDescription | SegmentDescription[] | null {\r\n return this.structure?.layout['.undefined']\r\n }\r\n\r\n public undefinedForMsg (): string | null {\r\n let msg: string | null = null\r\n const undefinedTags = this.getUndefined()\r\n if (undefinedTags) {\r\n if (Array.isArray(undefinedTags)) {\r\n msg = 'undefined tags = ' + undefinedTags.map((e: SegmentDescription) => e.startTag.toString()).join(', ')\r\n } else {\r\n msg = `undefined tag = ${undefinedTags.startTag}`\r\n }\r\n }\r\n return msg\r\n }\r\n\r\n /**\r\n * if this view represents a repeated group then return number\r\n * of repeated instances within this view\r\n */\r\n public groupCount (): number {\r\n const positions = this.segment.delimiterPositions\r\n return positions ? positions.length : 0\r\n }\r\n\r\n /**\r\n * regardless of how this type is represented in data dictionary,\r\n * return its value as a string.\r\n * @param tagOrName name or tag to return 8 or BeginString\r\n */\r\n public getString (tagOrName: number | string): string | null {\r\n const tag: number = this.resolveTag(tagOrName)\r\n if (tag == null) {\r\n return null\r\n }\r\n const position: number = this.getPosition(tag)\r\n if (position < 0) {\r\n return null\r\n }\r\n return this.stringAtPosition(position)\r\n }\r\n\r\n /**\r\n * for a repeated group, one field may be repeted across each instance of a component\r\n * return all values for a specified field as array of strings\r\n * @param tagOrName the name of the repeated field to fetch\r\n */\r\n public getStrings (tagOrName: number | string | null = null): Array<(string | null)> | null {\r\n if (!tagOrName) {\r\n return this.allStrings()\r\n }\r\n tagOrName = tagOrName || -1\r\n const tag: number = this.resolveTag(tagOrName)\r\n if (tag == null) {\r\n return null\r\n }\r\n const positions: number[] = this.getPositions(tag)\r\n if (positions == null) {\r\n return null\r\n }\r\n return positions.map((position: number) => {\r\n return this.stringAtPosition(position)\r\n })\r\n }\r\n\r\n /**\r\n * returns typed value of a sinple field within this view\r\n * @param tagOrName the name or tag of required field e.g. 8, BeginString\r\n */\r\n public getTyped (tagOrName: number | string): any {\r\n const tag: number = this.resolveTag(tagOrName)\r\n if (tag == null) {\r\n return null\r\n }\r\n const field: SimpleFieldDefinition | null = this.structure?.tags.definitions.tagToSimple[tag] ?? null\r\n if (field == null) {\r\n return null\r\n }\r\n return this.toTyped(field)\r\n }\r\n\r\n /**\r\n * use a varargs list of tags or tag names to fetch typed values for those fields within this view.\r\n * @param tagOrNames list of tags e.g. 'BeginString', 'BodyLength', ...\r\n */\r\n public getTypedList (...tagOrNames: Array<number | string>): Array<boolean | string | number | Date | null> {\r\n return tagOrNames.map((s) => this.getTyped(s))\r\n }\r\n\r\n /**\r\n * use an array of tags or tag names to fetch typed values for those fields within this view.\r\n * @param tagOrName the list of params as array ['BeginString','BodyLength', 'MsgType']\r\n */\r\n public getTypedTags (tagOrName: Array<string | number>): Array<boolean | string | number | Date | null> {\r\n return tagOrName.map((s) => this.getTyped(s))\r\n }\r\n\r\n /**\r\n * produce an object representation of the view which when coupled with its\r\n * interface (generated against the same dictionary source) will allow easy\r\n * navigation of the object where a group is resolved to an array and simple\r\n * fields are properties. This is relatively expensive operation as every\r\n * field is fully resolved regardless of depth i.e. all groups and compoennts\r\n * are fully resolved.\r\n */\r\n public toObject (): ILooseObject | ILooseObject[] | null {\r\n const segment: SegmentDescription = this.segment\r\n if (segment.set == null) return null\r\n if (segment.delimiterTag) {\r\n switch (segment.set.type) {\r\n case ContainedSetType.Group: {\r\n return this.asInstances((segment.set as GroupFieldDefinition).name)\r\n }\r\n case ContainedSetType.Msg: {\r\n // this is a batch of messages\r\n const hdrView = this.getView('Hdr')\r\n const batch: ILooseObject = {}\r\n if (hdrView) {\r\n const name = hdrView.segment.set?.name ?? 'na'\r\n batch[name] = hdrView.toObject()\r\n }\r\n batch[segment.name] = this.asInstances(segment.name)\r\n return batch\r\n }\r\n }\r\n }\r\n return this.asLoose(segment.set)\r\n }\r\n\r\n /**\r\n * easy human-readable format showing each field, its position, value and resolved\r\n * enum.\r\n */\r\n public toString (): string {\r\n return this.stringify(MsgView.asToken)\r\n }\r\n\r\n public toVerbose (): string {\r\n return this.stringify(MsgView.asVerbose)\r\n }\r\n\r\n /**\r\n * a string in JSON format representing this view as an object\r\n */\r\n public toJson (): string {\r\n return JSON.stringify(this.toObject(), null, 4)\r\n }\r\n\r\n public getView (name: string): MsgView | null {\r\n const parts: string[] = name.split('.')\r\n const reducer = (a: MsgView, current: string): MsgView | null => {\r\n if (!a) {\r\n return a\r\n }\r\n const structure = a.structure\r\n const singleton: SegmentDescription | null = structure?.firstContainedWithin(current, a.segment) ?? null\r\n if (singleton) {\r\n return a.create(singleton)\r\n }\r\n // is this a full name where abbreviation exists\r\n const component: ContainedField | null = a.segment.set?.localNameToField.get(current) ?? null\r\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\r\n if (component) {\r\n const abbreviated: SegmentDescription | null = structure?.firstContainedWithin(component.name, a.segment) ?? null\r\n if (abbreviated) {\r\n return a.create(abbreviated)\r\n }\r\n }\r\n return null\r\n }\r\n return parts.reduce<MsgView | null>(reducer, this)\r\n }\r\n\r\n public abstract checksum (): number\r\n\r\n public abstract clone (): MsgView\r\n\r\n protected abstract create (singleton: SegmentDescription): MsgView\r\n\r\n protected abstract stringAtPosition (position: number): string | null\r\n\r\n protected abstract toTyped (field: SimpleFieldDefinition): boolean | string | number | Date\r\n\r\n protected resolveTag (tagOrName: number | string): number {\r\n let tag: number\r\n if (typeof (tagOrName) === 'string') {\r\n if (this.segment.set == null) return 0\r\n const cf = this.segment.set.simple.get(tagOrName)\r\n const f: SimpleFieldDefinition | null = cf ? cf.definition : this.structure?.tags.definitions.simple.get(tagOrName) ?? null\r\n if (f == null) {\r\n return -1\r\n }\r\n tag = f.tag\r\n } else {\r\n tag = tagOrName\r\n }\r\n return tag\r\n }\r\n\r\n // fetch all positions of a particular tag.\r\n protected getPositions (tag: number): number[] {\r\n const forwards: TagPos[] = this.sortedTagPosForwards\r\n const backwards: TagPos[] = this.sortedTagPosBackwards\r\n const position: number = this.binarySearch(tag)\r\n if (position < 0) {\r\n return []\r\n }\r\n\r\n const count: number = forwards.length\r\n const last: number = count - 1\r\n let end: number = position\r\n while (end <= last) {\r\n if (tag !== forwards[end].tag) {\r\n break\r\n }\r\n ++end\r\n }\r\n // avoid backtracking over an array by scan forwards on a reversed copy\r\n let start: number = last - position\r\n while (start <= last) {\r\n if (tag !== backwards[start].tag) {\r\n break\r\n }\r\n ++start\r\n }\r\n const begin: number = last - (start - 1)\r\n const len: number = end - begin\r\n const positions: number[] = new Array(len)\r\n for (let i: number = begin; i < end; ++i) {\r\n positions[i - begin] = forwards[i].position\r\n }\r\n return positions\r\n }\r\n\r\n protected getPosition (tag: number): number {\r\n const pos: number = this.binarySearch(tag)\r\n if (pos >= 0) {\r\n return this.sortedTagPosForwards[pos].position\r\n } else {\r\n return -1\r\n }\r\n }\r\n\r\n private allStrings (): Array<(string | null)> {\r\n const segment: SegmentDescription = this.segment\r\n const range: number[] = []\r\n for (let i: number = segment.startPosition; i <= segment.endPosition; ++i) {\r\n range[range.length] = i\r\n }\r\n return range.map((i: number) => this.stringAtPosition(i))\r\n }\r\n\r\n private asInstances (name: string): Array<ILooseObject | null> | null {\r\n const groupView: MsgView | null = this.getView(name)\r\n if (groupView == null) {\r\n return null\r\n }\r\n const groupArray = new Array<ILooseObject | null>(groupView.groupCount())\r\n const count: number = groupView.groupCount()\r\n for (let j: number = 0; j < count; ++j) {\r\n const instance: MsgView | null = groupView.getGroupInstance(j)\r\n groupArray[j] = instance?.toObject() ?? null\r\n }\r\n return groupArray\r\n }\r\n\r\n private asLoose (def: ContainedFieldSet): ILooseObject {\r\n // eslint-disable-next-line\r\n return this.reducer.reduce(def, {\r\n group: (a: ILooseObject, field: ContainedGroupField) => { this.asLooseGroup(a, field) },\r\n simple: (a: ILooseObject, field: ContainedSimpleField) => { this.asLooseSimple(a, field) },\r\n component: (a: ILooseObject, field: ContainedComponentField) => { this.asLooseComponent(a, field) }\r\n } as ITypeDispatcher<ILooseObject>, def.localAttribute.reduce<ILooseObject>((a: ILooseObject, sf: ContainedSimpleField) => {\r\n const def = sf.definition\r\n const position: number = this.getPosition(def.tag)\r\n if (position >= 0) {\r\n a[def.name] = this.toTyped(def)\r\n }\r\n return a\r\n }, {}))\r\n }\r\n\r\n private missingRequired (def: ContainedFieldSet, tags: number []): number[] {\r\n const reducer = new SetReduce<number[]>()\r\n const dispatcher: ITypeDispatcher<number[]> = {\r\n group: (a: number[], field: ContainedGroupField) => { this.missingGroup(def, field, a) },\r\n simple: (a: number[], field: ContainedSimpleField) => { this.missingSimple(field, a) },\r\n component: (a: number[], field: ContainedComponentField) => { this.missingComponent(field, a) }\r\n }\r\n return reducer.reduce(def, dispatcher, tags)\r\n }\r\n\r\n private missingSimple (sf: ContainedSimpleField, a: number[]): void {\r\n if (sf.required && this.getPosition(sf.definition.tag) < 0) {\r\n a.push(sf.definition.tag)\r\n }\r\n }\r\n\r\n private missingComponent (cf: ContainedComponentField, a: number[]): void {\r\n const view: MsgView | null = this.getView(cf.name)\r\n if (view) {\r\n view.missingRequired(cf.definition, a)\r\n }\r\n }\r\n\r\n private missingGroup (def: ContainedFieldSet, gf: ContainedGroupField, tags: number []): void {\r\n const name = gf.definition.noOfField ? gf.definition.noOfField.name : def.name\r\n const groupView: MsgView | null = this.getView(name) ?? this.getView(gf.definition.name)\r\n if (groupView == null) {\r\n return\r\n }\r\n const count: number = groupView.groupCount()\r\n for (let j: number = 0; j < count; ++j) {\r\n const instance: MsgView | null = groupView.getGroupInstance(j)\r\n instance?.missingRequired(gf.definition, tags)\r\n }\r\n }\r\n\r\n private asLooseComponent (a: ILooseObject, cf: ContainedComponentField): void {\r\n const view: MsgView | null = this.getView(cf.name)\r\n if (view) {\r\n const component = view.toObject()\r\n if (component) {\r\n a[cf.definition.name] = component\r\n }\r\n }\r\n }\r\n\r\n private asLooseSimple (a: ILooseObject, sf: ContainedSimpleField): void {\r\n const def = sf.definition\r\n const position: number = this.getPosition(def.tag)\r\n if (position >= 0) {\r\n const asSimple: boolean | string | number | Date = this.toTyped(def)\r\n if (asSimple != null) { // beware, may be false value\r\n a[sf.name] = asSimple\r\n }\r\n }\r\n }\r\n\r\n private asLooseGroup (a: ILooseObject, gf: ContainedGroupField): void {\r\n const def = gf.definition\r\n const name = def.noOfField ? def.noOfField.name : def.name\r\n const instances: ILooseObject | null = this.asInstances(name) ?? this.asInstances(def.name)\r\n if (instances) {\r\n a[def.name] = instances\r\n }\r\n }\r\n\r\n private binarySearch (tag: number): number {\r\n if (this.structure == null) return -1\r\n let forwards = this.sortedTagPosForwards\r\n if (!forwards) {\r\n const segment = this.segment\r\n forwards = this.sortedTagPosForwards = this.structure.tags.tagPos.slice(segment.startPosition, segment.endPosition + 1)\r\n forwards.sort(TagPos.compare)\r\n this.sortedTagPosBackwards = forwards.slice().reverse()\r\n }\r\n return TagPos.binarySearch(forwards, tag)\r\n }\r\n\r\n private stringify (getToken: (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos) => string): string {\r\n const structure = this.structure\r\n const buffer: ElasticBuffer = new ElasticBuffer()\r\n const segment: SegmentDescription = this.segment\r\n if (structure == null) return ''\r\n const tags: Tags = structure.tags\r\n const count: number = segment.endPosition - segment.startPosition\r\n const simple: Dictionary<SimpleFieldDefinition> = tags.definitions.simple\r\n\r\n for (let i: number = segment.startPosition; i <= segment.endPosition; ++i) {\r\n const tagPos: TagPos = tags.tagPos[i]\r\n const field: SimpleFieldDefinition | null = simple.get(tagPos.tag.toString())\r\n const val: string | null = this.stringAtPosition(i) ?? ''\r\n // [0] 8 (BeginString) = FIX4.4\r\n const token = field ? getToken(field, val, i - segment.startPosition, count, tagPos) : `[${i}] ${tagPos.tag} (unknown) = ${val}, `\r\n buffer.writeString(token)\r\n }\r\n\r\n return buffer.toString()\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"msg-view.js","sourceRoot":"","sources":["../../src/buffer/msg-view.ts"],"names":[],"mappings":"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","sourcesContent":["import { TagPos } from './tag/tag-pos'\r\nimport { SegmentDescription } from './segment/segment-description'\r\nimport { Structure } from './structure'\r\nimport { Tags } from './tag/tags'\r\nimport {\r\n ContainedComponentField,\r\n ContainedField,\r\n IContainedSet,\r\n ContainedGroupField,\r\n ContainedSimpleField\r\n} from '../dictionary/contained'\r\nimport { SetReduce } from '../dictionary'\r\nimport { ILooseObject } from '../collections/collection'\r\nimport { ElasticBuffer } from './elastic-buffer'\r\nimport { FixDefinitions, GroupFieldDefinition, SimpleFieldDefinition } from '../dictionary/definition'\r\nimport { ITypeDispatcher } from '../dictionary/type-dispatcher'\r\nimport { ContainedSetType } from '../dictionary/contained-set-type'\r\n\r\nexport abstract class MsgView {\r\n protected sortedTagPosForwards: TagPos[]\r\n protected sortedTagPosBackwards: TagPos[]\r\n private readonly reducer: SetReduce<ILooseObject> = new SetReduce<ILooseObject>()\r\n\r\n protected constructor (public readonly definitions: FixDefinitions, public readonly segment: SegmentDescription, public readonly structure: Structure | null) {\r\n }\r\n\r\n protected static asVerbose = (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos): string => {\r\n const newLine = require('os').EOL\r\n let desc: string\r\n let name: string\r\n if (field) {\r\n name = field.name || 'unknown'\r\n if (field.isEnum()) {\r\n desc = `${val}[${field.resolveEnum(val)}]${newLine}\\t${field.description ?? ''}${newLine}${newLine}`\r\n } else {\r\n desc = `${val}${newLine}t${field.description ?? ''}${newLine}${newLine}`\r\n }\r\n } else {\r\n name = 'unknown'\r\n desc = 'na'\r\n }\r\n return `[${i}] ${tp.tag} (${name}) = ${desc}`\r\n }\r\n\r\n protected static asToken = (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos): string => {\r\n const perLine: number = 2\r\n const newLine = require('os').EOL\r\n // [280] 814 (ApplQueueResolution) = 2[OverlayLast][281] 10 (CheckSum) = 80\r\n let desc: string\r\n let name: string\r\n if (field) {\r\n name = field.name || 'unknown'\r\n if (field.isEnum()) {\r\n desc = `${val}[${field.resolveEnum(val)}]`\r\n } else {\r\n desc = `${val}`\r\n }\r\n } else {\r\n desc = `${val}`\r\n name = 'unknown'\r\n }\r\n let delimiter: string\r\n if (i === 1 || (i < count && i % perLine - 1 === 0)) {\r\n delimiter = newLine\r\n } else {\r\n delimiter = i < count ? ', ' : ''\r\n }\r\n return `[${i}] ${tp.tag} (${name}) = ${desc}${delimiter}`\r\n }\r\n\r\n // return list of any tags parsed that are not valid\r\n public invalid (): number[] {\r\n const invalidTags: number[] = []\r\n const set = this.segment.set\r\n if (set == null) return []\r\n const tags = this.structure?.tags ?? null\r\n if (tags == null) return []\r\n for (let i = 0; i < tags.nextTagPos; ++i) {\r\n const tag = tags.tagPos[i].tag\r\n if (tag <= 0 || !set.containedTag[tag]) {\r\n invalidTags[invalidTags.length] = tag\r\n }\r\n }\r\n return invalidTags\r\n }\r\n\r\n // list of tags that must be present\r\n public missing (): number[] {\r\n if (this.segment == null) return []\r\n if (this.segment.set == null) return []\r\n return this.missingRequired(this.segment.set, [])\r\n }\r\n\r\n /**\r\n * does this view contain this tag\r\n * @param tagOrName the name or tag of field to check 8 or BeginString\r\n */\r\n public contains (tagOrName: number | string): boolean {\r\n const tag: number = this.resolveTag(tagOrName)\r\n const position: number = this.getPosition(tag)\r\n return position >= 0\r\n }\r\n\r\n /**\r\n * if this view represents a repeated group then return a sub view representing\r\n * this instance of repeated group.\r\n * @param i the index to return i.e. 0 is first within repeated group\r\n */\r\n public getGroupInstance (i: number): MsgView | null {\r\n const instance: SegmentDescription | null = this.segment?.getInstance(i)\r\n if (!instance) {\r\n return null\r\n }\r\n return this.create(instance)\r\n }\r\n\r\n public getUndefined (): SegmentDescription | SegmentDescription[] | null {\r\n return this.structure?.layout['.undefined']\r\n }\r\n\r\n public undefinedForMsg (): string | null {\r\n let msg: string | null = null\r\n const undefinedTags = this.getUndefined()\r\n if (undefinedTags) {\r\n if (Array.isArray(undefinedTags)) {\r\n msg = 'undefined tags = ' + undefinedTags.map((e: SegmentDescription) => e.startTag.toString()).join(', ')\r\n } else {\r\n msg = `undefined tag = ${undefinedTags.startTag}`\r\n }\r\n }\r\n return msg\r\n }\r\n\r\n /**\r\n * if this view represents a repeated group then return number\r\n * of repeated instances within this view\r\n */\r\n public groupCount (): number {\r\n const positions = this.segment.delimiterPositions\r\n return positions ? positions.length : 0\r\n }\r\n\r\n /**\r\n * regardless of how this type is represented in data dictionary,\r\n * return its value as a string.\r\n * @param tagOrName name or tag to return 8 or BeginString\r\n */\r\n public getString (tagOrName: number | string): string | null {\r\n const tag: number = this.resolveTag(tagOrName)\r\n if (tag == null) {\r\n return null\r\n }\r\n const position: number = this.getPosition(tag)\r\n if (position < 0) {\r\n return null\r\n }\r\n return this.stringAtPosition(position)\r\n }\r\n\r\n /**\r\n * for a repeated group, one field may be repeted across each instance of a component\r\n * return all values for a specified field as array of strings\r\n * @param tagOrName the name of the repeated field to fetch\r\n */\r\n public getStrings (tagOrName: number | string | null = null): Array<(string | null)> | null {\r\n if (!tagOrName) {\r\n return this.allStrings()\r\n }\r\n tagOrName = tagOrName || -1\r\n const tag: number = this.resolveTag(tagOrName)\r\n if (tag == null) {\r\n return null\r\n }\r\n const positions: number[] = this.getPositions(tag)\r\n if (positions == null) {\r\n return null\r\n }\r\n return positions.map((position: number) => {\r\n return this.stringAtPosition(position)\r\n })\r\n }\r\n\r\n /**\r\n * returns typed value of a sinple field within this view\r\n * @param tagOrName the name or tag of required field e.g. 8, BeginString\r\n */\r\n public getTyped (tagOrName: number | string): (boolean | string | number | Date | Buffer | null) {\r\n const tag: number = this.resolveTag(tagOrName)\r\n if (tag == null) {\r\n return null\r\n }\r\n const field: SimpleFieldDefinition | null = this.definitions.tagToSimple[tag] ?? null\r\n if (field == null) {\r\n return null\r\n }\r\n return this.toTyped(field)\r\n }\r\n\r\n /**\r\n * use a varargs list of tags or tag names to fetch typed values for those fields within this view.\r\n * @param tagOrNames list of tags e.g. 'BeginString', 'BodyLength', ...\r\n */\r\n public getTypedList (...tagOrNames: Array<number | string>): Array<boolean | string | number | Date | Buffer | null> {\r\n return tagOrNames.map((s) => this.getTyped(s))\r\n }\r\n\r\n /**\r\n * use an array of tags or tag names to fetch typed values for those fields within this view.\r\n * @param tagOrName the list of params as array ['BeginString','BodyLength', 'MsgType']\r\n */\r\n public getTypedTags (tagOrName: Array<string | number>): Array<boolean | string | number | Date | Buffer | null> {\r\n return tagOrName.map((s) => this.getTyped(s))\r\n }\r\n\r\n /**\r\n * produce an object representation of the view which when coupled with its\r\n * interface (generated against the same dictionary source) will allow easy\r\n * navigation of the object where a group is resolved to an array and simple\r\n * fields are properties. This is relatively expensive operation as every\r\n * field is fully resolved regardless of depth i.e. all groups and compoennts\r\n * are fully resolved.\r\n */\r\n public toObject (): ILooseObject | ILooseObject[] | null {\r\n const segment: SegmentDescription = this.segment\r\n if (segment.set == null) return null\r\n if (segment.delimiterTag) {\r\n switch (segment.set.type) {\r\n case ContainedSetType.Group: {\r\n return this.asInstances((segment.set as GroupFieldDefinition).name)\r\n }\r\n case ContainedSetType.Msg: {\r\n // this is a batch of messages\r\n const hdrView = this.getView('Hdr')\r\n const batch: ILooseObject = {}\r\n if (hdrView) {\r\n const name = hdrView.segment.set?.name ?? 'na'\r\n batch[name] = hdrView.toObject()\r\n }\r\n batch[segment.name] = this.asInstances(segment.name)\r\n return batch\r\n }\r\n }\r\n }\r\n return this.asLoose(segment.set)\r\n }\r\n\r\n /**\r\n * easy human-readable format showing each field, its position, value and resolved\r\n * enum.\r\n */\r\n public toString (): string {\r\n return this.stringify(MsgView.asToken)\r\n }\r\n\r\n public toVerbose (): string {\r\n return this.stringify(MsgView.asVerbose)\r\n }\r\n\r\n /**\r\n * a string in JSON format representing this view as an object\r\n */\r\n public toJson (): string {\r\n return JSON.stringify(this.toObject(), null, 4)\r\n }\r\n\r\n public getView (name: string): MsgView | null {\r\n const parts: string[] = name.split('.')\r\n const reducer = (a: MsgView, current: string): MsgView | null => {\r\n if (!a) {\r\n return a\r\n }\r\n const structure = a.structure\r\n const singleton: SegmentDescription | null = structure?.firstContainedWithin(current, a.segment) ?? null\r\n if (singleton) {\r\n return a.create(singleton)\r\n }\r\n // is this a full name where abbreviation exists\r\n const component: ContainedField | null = a.segment.set?.localNameToField.get(current) ?? null\r\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\r\n if (component) {\r\n const abbreviated: SegmentDescription | null = structure?.firstContainedWithin(component.name, a.segment) ?? null\r\n if (abbreviated) {\r\n return a.create(abbreviated)\r\n }\r\n }\r\n return null\r\n }\r\n return parts.reduce<MsgView | null>(reducer, this)\r\n }\r\n\r\n public abstract checksum (): number\r\n\r\n public abstract clone (): MsgView\r\n\r\n protected abstract create (singleton: SegmentDescription): MsgView\r\n\r\n protected abstract stringAtPosition (position: number): string | null\r\n\r\n protected abstract toTyped (field: SimpleFieldDefinition): boolean | string | number | Date | Buffer | null\r\n\r\n protected resolveTag (tagOrName: number | string): number {\r\n let tag: number\r\n const set = this.segment.set\r\n if (typeof (tagOrName) === 'string') {\r\n if (set == null) return 0\r\n const cf = set.simple.get(tagOrName)\r\n const f: SimpleFieldDefinition | null = cf ? cf.definition : this.definitions.simple.get(tagOrName) ?? null\r\n if (f == null) {\r\n return -1\r\n }\r\n tag = f.tag\r\n } else {\r\n tag = tagOrName\r\n }\r\n return tag\r\n }\r\n\r\n // fetch all positions of a particular tag.\r\n protected getPositions (tag: number): number[] {\r\n const forwards: TagPos[] = this.sortedTagPosForwards\r\n const backwards: TagPos[] = this.sortedTagPosBackwards\r\n const position: number = this.binarySearch(tag)\r\n if (position < 0) {\r\n return []\r\n }\r\n\r\n const count: number = forwards.length\r\n const last: number = count - 1\r\n let end: number = position\r\n while (end <= last) {\r\n if (tag !== forwards[end].tag) {\r\n break\r\n }\r\n ++end\r\n }\r\n // avoid backtracking over an array by scan forwards on a reversed copy\r\n let start: number = last - position\r\n while (start <= last) {\r\n if (tag !== backwards[start].tag) {\r\n break\r\n }\r\n ++start\r\n }\r\n const begin: number = last - (start - 1)\r\n const len: number = end - begin\r\n const positions: number[] = new Array(len)\r\n for (let i: number = begin; i < end; ++i) {\r\n positions[i - begin] = forwards[i].position\r\n }\r\n return positions\r\n }\r\n\r\n protected getPosition (tag: number): number {\r\n const pos: number = this.binarySearch(tag)\r\n if (pos >= 0) {\r\n return this.sortedTagPosForwards[pos].position\r\n } else {\r\n return -1\r\n }\r\n }\r\n\r\n private allStrings (): Array<(string | null)> {\r\n const segment: SegmentDescription = this.segment\r\n const range: number[] = []\r\n for (let i: number = segment.startPosition; i <= segment.endPosition; ++i) {\r\n range[range.length] = i\r\n }\r\n return range.map((i: number) => this.stringAtPosition(i))\r\n }\r\n\r\n private asInstances (name: string): Array<ILooseObject | null> | null {\r\n const groupView: MsgView | null = this.getView(name)\r\n if (groupView == null) {\r\n return null\r\n }\r\n const groupArray = new Array<ILooseObject | null>(groupView.groupCount())\r\n const count: number = groupView.groupCount()\r\n for (let j: number = 0; j < count; ++j) {\r\n const instance: MsgView | null = groupView.getGroupInstance(j)\r\n groupArray[j] = instance?.toObject() ?? null\r\n }\r\n return groupArray\r\n }\r\n\r\n private asLoose (def: IContainedSet): ILooseObject {\r\n // eslint-disable-next-line\r\n return this.reducer.reduce(def, {\r\n group: (a: ILooseObject, field: ContainedGroupField) => { this.asLooseGroup(a, field) },\r\n simple: (a: ILooseObject, field: ContainedSimpleField) => { this.asLooseSimple(a, field) },\r\n component: (a: ILooseObject, field: ContainedComponentField) => { this.asLooseComponent(a, field) }\r\n } as ITypeDispatcher<ILooseObject>, def.localAttribute.reduce<ILooseObject>((a: ILooseObject, sf: ContainedSimpleField) => {\r\n const def = sf.definition\r\n const position: number = this.getPosition(def.tag)\r\n if (position >= 0) {\r\n a[def.name] = this.toTyped(def)\r\n }\r\n return a\r\n }, {}))\r\n }\r\n\r\n private missingRequired (def: IContainedSet, tags: number []): number[] {\r\n const reducer = new SetReduce<number[]>()\r\n const dispatcher: ITypeDispatcher<number[]> = {\r\n group: (a: number[], field: ContainedGroupField) => { this.missingGroup(def, field, a) },\r\n simple: (a: number[], field: ContainedSimpleField) => { this.missingSimple(field, a) },\r\n component: (a: number[], field: ContainedComponentField) => { this.missingComponent(field, a) }\r\n }\r\n return reducer.reduce(def, dispatcher, tags)\r\n }\r\n\r\n private missingSimple (sf: ContainedSimpleField, a: number[]): void {\r\n if (sf.required && this.getPosition(sf.definition.tag) < 0) {\r\n a.push(sf.definition.tag)\r\n }\r\n }\r\n\r\n private missingComponent (cf: ContainedComponentField, a: number[]): void {\r\n const view: MsgView | null = this.getView(cf.name)\r\n if (view) {\r\n view.missingRequired(cf.definition, a)\r\n }\r\n }\r\n\r\n private missingGroup (def: IContainedSet, gf: ContainedGroupField, tags: number []): void {\r\n const name = gf.definition.noOfField ? gf.definition.noOfField.name : def.name\r\n const groupView: MsgView | null = this.getView(name) ?? this.getView(gf.definition.name)\r\n if (groupView == null) {\r\n return\r\n }\r\n const count: number = groupView.groupCount()\r\n for (let j: number = 0; j < count; ++j) {\r\n const instance: MsgView | null = groupView.getGroupInstance(j)\r\n instance?.missingRequired(gf.definition, tags)\r\n }\r\n }\r\n\r\n private asLooseComponent (a: ILooseObject, cf: ContainedComponentField): void {\r\n const view: MsgView | null = this.getView(cf.name)\r\n if (view) {\r\n const component = view.toObject()\r\n if (component) {\r\n a[cf.definition.name] = component\r\n }\r\n }\r\n }\r\n\r\n private asLooseSimple (a: ILooseObject, sf: ContainedSimpleField): void {\r\n const def = sf.definition\r\n const position: number = this.getPosition(def.tag)\r\n if (position >= 0) {\r\n const asSimple: boolean | string | number | Date | Buffer | null = this.toTyped(def)\r\n if (asSimple != null) { // beware, may be false value\r\n a[sf.name] = asSimple\r\n }\r\n }\r\n }\r\n\r\n private asLooseGroup (a: ILooseObject, gf: ContainedGroupField): void {\r\n const def = gf.definition\r\n const name = def.noOfField ? def.noOfField.name : def.name\r\n const instances: ILooseObject | null = this.asInstances(name) ?? this.asInstances(def.name)\r\n if (instances) {\r\n a[def.name] = instances\r\n }\r\n }\r\n\r\n private binarySearch (tag: number): number {\r\n if (this.structure == null) return -1\r\n let forwards = this.sortedTagPosForwards\r\n if (!forwards) {\r\n const segment = this.segment\r\n forwards = this.sortedTagPosForwards = this.structure.tags.tagPos.slice(segment.startPosition, segment.endPosition + 1)\r\n forwards.sort(TagPos.compare)\r\n this.sortedTagPosBackwards = forwards.slice().reverse()\r\n }\r\n return TagPos.binarySearch(forwards, tag)\r\n }\r\n\r\n private stringify (getToken: (field: SimpleFieldDefinition, val: string, i: number, count: number, tp: TagPos) => string): string {\r\n const structure = this.structure\r\n const buffer: ElasticBuffer = new ElasticBuffer()\r\n const segment: SegmentDescription = this.segment\r\n if (structure == null) return ''\r\n const tags: Tags = structure.tags\r\n const count: number = segment.endPosition - segment.startPosition\r\n const simple: Map<string, SimpleFieldDefinition> = this.definitions.simple\r\n\r\n for (let i: number = segment.startPosition; i <= segment.endPosition; ++i) {\r\n const tagPos: TagPos = tags.tagPos[i]\r\n const field: SimpleFieldDefinition | undefined = simple.get(tagPos.tag.toString())\r\n const val: string | null = this.stringAtPosition(i) ?? ''\r\n // [0] 8 (BeginString) = FIX4.4\r\n const token = field ? getToken(field, val, i - segment.startPosition, count, tagPos) : `[${i}] ${tagPos.tag} (unknown) = ${val}, `\r\n buffer.writeString(token)\r\n }\r\n\r\n return buffer.toString()\r\n }\r\n}\r\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { INumericKeyed } from '../../collections/collection';
|
|
2
|
-
import { ContainedField,
|
|
2
|
+
import { ContainedField, IContainedSet } from '../../dictionary/contained';
|
|
3
3
|
import { SegmentType } from './segment-type';
|
|
4
4
|
export declare class SegmentDescription {
|
|
5
5
|
name: string;
|
|
6
6
|
startTag: number;
|
|
7
|
-
set:
|
|
7
|
+
set: IContainedSet | null;
|
|
8
8
|
startPosition: number;
|
|
9
9
|
readonly depth: number;
|
|
10
10
|
readonly type: SegmentType;
|
|
@@ -15,7 +15,7 @@ export declare class SegmentDescription {
|
|
|
15
15
|
delimiterPositions: number[];
|
|
16
16
|
currentField: ContainedField | null;
|
|
17
17
|
containedDelimiterPositions: INumericKeyed<boolean>;
|
|
18
|
-
constructor(name: string, startTag: number, set:
|
|
18
|
+
constructor(name: string, startTag: number, set: IContainedSet | null, startPosition: number, depth: number, type: SegmentType);
|
|
19
19
|
toString(): String;
|
|
20
20
|
contains(segment: SegmentDescription): boolean;
|
|
21
21
|
getInstance(instance: number): SegmentDescription | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"segment-description.js","sourceRoot":"","sources":["../../../src/buffer/segment/segment-description.ts"],"names":[],"mappings":";;;AAEA,4DAAkE;AAClE,iDAA4C;AAC5C,sDAAiD;AAEjD,MAAa,kBAAkB;IAS7B,YACS,IAAY,EACZ,QAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"segment-description.js","sourceRoot":"","sources":["../../../src/buffer/segment/segment-description.ts"],"names":[],"mappings":"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","sourcesContent":["import { INumericKeyed } from '../../collections/collection'\r\nimport { ContainedField, IContainedSet } from '../../dictionary/contained'\r\nimport { GroupFieldDefinition } from '../../dictionary/definition'\r\nimport { SegmentType } from './segment-type'\r\nimport { ElasticBuffer } from '../elastic-buffer'\r\n\r\nexport class SegmentDescription {\r\n public index: number\r\n public endTag: number = 0\r\n public endPosition: number = 0\r\n public delimiterTag: number = 0\r\n public delimiterPositions: number[]\r\n public currentField: ContainedField | null\r\n public containedDelimiterPositions: INumericKeyed<boolean>\r\n\r\n constructor (\r\n public name: string,\r\n public startTag: number,\r\n public set: IContainedSet | null,\r\n public startPosition: number,\r\n public readonly depth: number,\r\n public readonly type: SegmentType) {\r\n }\r\n\r\n public toString (): String {\r\n const buffer = new ElasticBuffer()\r\n buffer.writeString(`name = ${this.name}, `)\r\n buffer.writeString(`startTag = ${this.startTag}, `)\r\n buffer.writeString(`startPosition = ${this.startPosition}, `)\r\n buffer.writeString(`type = ${this.type}, `)\r\n buffer.writeString(`depth = ${this.depth}, `)\r\n buffer.writeString(`index = ${this.index}, `)\r\n buffer.writeString(`endTag = ${this.endTag}, `)\r\n buffer.writeString(`endPosition = ${this.endPosition}, `)\r\n buffer.writeString(`delimiterTag = ${this.delimiterTag}, `)\r\n buffer.writeString(`delimiterPositions = ${this.delimiterPositions}, `)\r\n buffer.writeString(`currentField = ${this.currentField}, `)\r\n buffer.writeString(`set = ${this.set?.keys()}`)\r\n return buffer.toString()\r\n }\r\n\r\n public contains (segment: SegmentDescription): boolean {\r\n return segment.startPosition >= this.startPosition && segment.endPosition <= this.endPosition\r\n }\r\n\r\n public getInstance (instance: number): SegmentDescription | null {\r\n const delimiters: number[] = this.delimiterPositions\r\n if (!delimiters) {\r\n return null\r\n }\r\n if (instance < 0 || instance >= delimiters.length) {\r\n return null\r\n }\r\n const start: number = delimiters[instance]\r\n const end: number = instance < delimiters.length - 1\r\n ? delimiters[instance + 1] - 1\r\n : this.endPosition\r\n const name: string = this.type === SegmentType.Batch ? this.set?.abbreviation ?? this.name : this.name ?? this.name ?? 'na'\r\n const d: SegmentDescription = new SegmentDescription(name, this.startTag, this.set, start, this.depth, this.type)\r\n d.endPosition = end\r\n d.endTag = this.endTag\r\n return d\r\n }\r\n\r\n public startGroup (tag: number): void {\r\n this.delimiterTag = tag\r\n this.delimiterPositions = []\r\n this.containedDelimiterPositions = {}\r\n }\r\n\r\n public addDelimiterPosition (position: number): boolean {\r\n if (this.containedDelimiterPositions[position]) {\r\n return false\r\n }\r\n this.delimiterPositions[this.delimiterPositions.length] = position\r\n this.containedDelimiterPositions[position] = true\r\n return true\r\n }\r\n\r\n public setCurrentField (tag: number): void {\r\n this.currentField = this.set?.localTag[tag] ?? this.set?.tagToField[tag] ?? null\r\n }\r\n\r\n public groupAddDelimiter (tag: number, position: number): boolean {\r\n let delimiter: boolean = false\r\n if (this.set instanceof GroupFieldDefinition) {\r\n if (this.delimiterTag && tag === this.delimiterTag) {\r\n delimiter = this.addDelimiterPosition(position)\r\n }\r\n }\r\n return delimiter\r\n }\r\n\r\n public end (i: number, pos: number, endTag: number): void {\r\n this.index = i\r\n this.currentField = null\r\n this.endPosition = pos\r\n this.endTag = endTag\r\n }\r\n}\r\n"]}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { FixDefinitions } from '../../dictionary/definition';
|
|
2
|
-
import { ContainedSimpleField } from '../../dictionary/contained';
|
|
3
1
|
import { TagPos } from './tag-pos';
|
|
4
2
|
import { TagType } from './tag-type';
|
|
5
3
|
export declare class Tags {
|
|
6
|
-
readonly definitions: FixDefinitions;
|
|
7
4
|
readonly startingLength: number;
|
|
8
5
|
static readonly BeginString: number;
|
|
9
6
|
static readonly BodyLengthTag: number;
|
|
@@ -11,8 +8,8 @@ export declare class Tags {
|
|
|
11
8
|
static readonly MsgTag: number;
|
|
12
9
|
tagPos: TagPos[];
|
|
13
10
|
nextTagPos: number;
|
|
14
|
-
constructor(
|
|
15
|
-
static toJSType(
|
|
11
|
+
constructor(startingLength?: number);
|
|
12
|
+
static toJSType(tagType: TagType): string;
|
|
16
13
|
static toType(type: string): TagType;
|
|
17
14
|
clone(): Tags;
|
|
18
15
|
reset(): void;
|
package/dist/buffer/tag/tags.js
CHANGED
|
@@ -5,14 +5,13 @@ const tag_pos_1 = require("./tag-pos");
|
|
|
5
5
|
const types_1 = require("../../types");
|
|
6
6
|
const tag_type_1 = require("./tag-type");
|
|
7
7
|
class Tags {
|
|
8
|
-
constructor(
|
|
9
|
-
this.definitions = definitions;
|
|
8
|
+
constructor(startingLength = 30 * 1000) {
|
|
10
9
|
this.startingLength = startingLength;
|
|
11
10
|
this.tagPos = new Array(this.startingLength);
|
|
12
11
|
this.nextTagPos = 0;
|
|
13
12
|
}
|
|
14
|
-
static toJSType(
|
|
15
|
-
switch (
|
|
13
|
+
static toJSType(tagType) {
|
|
14
|
+
switch (tagType) {
|
|
16
15
|
case tag_type_1.TagType.String:
|
|
17
16
|
return 'string';
|
|
18
17
|
case tag_type_1.TagType.Int:
|
|
@@ -81,7 +80,7 @@ class Tags {
|
|
|
81
80
|
}
|
|
82
81
|
clone() {
|
|
83
82
|
const next = this.nextTagPos;
|
|
84
|
-
const cloned = new Tags(
|
|
83
|
+
const cloned = new Tags(next);
|
|
85
84
|
cloned.nextTagPos = next;
|
|
86
85
|
for (let i = 0; i < next; ++i) {
|
|
87
86
|
cloned.tagPos[i] = this.tagPos[i].clone();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/buffer/tag/tags.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../../src/buffer/tag/tags.ts"],"names":[],"mappings":";;;AAAA,uCAAkC;AAClC,uCAAoC;AACpC,yCAAoC;AAEpC,MAAa,IAAI;IASf,YAA6B,iBAAyB,EAAE,GAAG,IAAI;QAAlC,mBAAc,GAAd,cAAc,CAAoB;QAHxD,WAAM,GAAa,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACjD,eAAU,GAAW,CAAC,CAAA;IAG7B,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAE,OAAgB;QACtC,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,kBAAO,CAAC,MAAM;gBACjB,OAAO,QAAQ,CAAA;YAEjB,KAAK,kBAAO,CAAC,GAAG,CAAC;YACjB,KAAK,kBAAO,CAAC,KAAK,CAAC;YACnB,KAAK,kBAAO,CAAC,MAAM;gBACjB,OAAO,QAAQ,CAAA;YAEjB,KAAK,kBAAO,CAAC,OAAO;gBAClB,OAAO,QAAQ,CAAA;YAEjB,KAAK,kBAAO,CAAC,OAAO;gBAClB,OAAO,SAAS,CAAA;YAElB,KAAK,kBAAO,CAAC,YAAY,CAAC;YAC1B,KAAK,kBAAO,CAAC,WAAW,CAAC;YACzB,KAAK,kBAAO,CAAC,WAAW,CAAC;YACzB,KAAK,kBAAO,CAAC,SAAS;gBACpB,OAAO,MAAM,CAAA;YAEf;gBACE,OAAO,QAAQ,CAAA;QACnB,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,MAAM,CAAE,IAAY;QAChC,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAA;QACvB,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3B,KAAK,UAAU,CAAC;YAChB,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,OAAO,kBAAO,CAAC,MAAM,CAAA;YACvB,CAAC;YAED,KAAK,KAAK,CAAC;YACX,KAAK,YAAY,CAAC;YAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,OAAO,kBAAO,CAAC,GAAG,CAAA;YACpB,CAAC;YAED,KAAK,KAAK,CAAC;YACX,KAAK,YAAY,CAAC;YAClB,KAAK,KAAK,CAAC;YACX,KAAK,OAAO,CAAC;YACb,KAAK,aAAa,CAAC;YACnB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,OAAO,kBAAO,CAAC,KAAK,CAAA;YACtB,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,OAAO,kBAAO,CAAC,MAAM,CAAA;YACvB,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,OAAO,kBAAO,CAAC,OAAO,CAAA;YACxB,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,OAAO,kBAAO,CAAC,YAAY,CAAA;YAC7B,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,OAAO,kBAAO,CAAC,SAAS,CAAA;YAC1B,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,OAAO,kBAAO,CAAC,WAAW,CAAA;YAC5B,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,OAAO,kBAAO,CAAC,WAAW,CAAA;YAC5B,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,OAAO,kBAAO,CAAC,OAAO,CAAA;YACxB,CAAC;YAED,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,kBAAO,CAAC,MAAM,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAEM,KAAK;QACV,MAAM,IAAI,GAAW,IAAI,CAAC,UAAU,CAAA;QACpC,MAAM,MAAM,GAAS,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;QACnC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAA;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;QAC3C,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;IACrB,CAAC;IAEM,KAAK,CAAE,KAAa,EAAE,GAAW,EAAE,GAAW;QACnD,MAAM,MAAM,GAAW,IAAI,CAAC,UAAU,CAAA;QACtC,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAA;QACf,CAAC;QACD,MAAM,EAAE,GAAW,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACtC,IAAI,EAAE,EAAE,CAAC;YACP,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,gBAAM,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;QAC3D,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAEO,MAAM;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;;AApIH,oBAqIC;AApIwB,gBAAW,GAAW,cAAM,CAAC,WAAW,AAA7B,CAA6B;AACxC,kBAAa,GAAW,cAAM,CAAC,UAAU,AAA5B,CAA4B;AACzC,gBAAW,GAAW,cAAM,CAAC,QAAQ,AAA1B,CAA0B;AACrC,WAAM,GAAW,cAAM,CAAC,OAAO,AAAzB,CAAyB","sourcesContent":["import { TagPos } from './tag-pos'\r\nimport { MsgTag } from '../../types'\r\nimport { TagType } from './tag-type'\r\n\r\nexport class Tags {\r\n public static readonly BeginString: number = MsgTag.BeginString\r\n public static readonly BodyLengthTag: number = MsgTag.BodyLength\r\n public static readonly CheckSumTag: number = MsgTag.CheckSum\r\n public static readonly MsgTag: number = MsgTag.MsgType\r\n\r\n public tagPos: TagPos[] = new Array(this.startingLength)\r\n public nextTagPos: number = 0\r\n\r\n constructor (public readonly startingLength: number = 30 * 1000) {\r\n }\r\n\r\n public static toJSType (tagType: TagType): string {\r\n switch (tagType) {\r\n case TagType.String:\r\n return 'string'\r\n\r\n case TagType.Int:\r\n case TagType.Float:\r\n case TagType.Length:\r\n return 'number'\r\n\r\n case TagType.RawData:\r\n return 'Buffer'\r\n\r\n case TagType.Boolean:\r\n return 'boolean'\r\n\r\n case TagType.UtcTimestamp:\r\n case TagType.UtcDateOnly:\r\n case TagType.UtcTimeOnly:\r\n case TagType.LocalDate:\r\n return 'Date'\r\n\r\n default:\r\n return 'string'\r\n }\r\n }\r\n\r\n public static toType (type: string): TagType {\r\n type = type || 'string'\r\n switch (type.toLowerCase()) {\r\n case 'currency':\r\n case 'string':\r\n case 'char': {\r\n return TagType.String\r\n }\r\n\r\n case 'int':\r\n case 'numingroup':\r\n case 'seqnum': {\r\n return TagType.Int\r\n }\r\n\r\n case 'qty':\r\n case 'percentage':\r\n case 'amt':\r\n case 'price':\r\n case 'priceoffset':\r\n case 'float': {\r\n return TagType.Float\r\n }\r\n\r\n case 'length': {\r\n return TagType.Length\r\n }\r\n\r\n case 'boolean': {\r\n return TagType.Boolean\r\n }\r\n\r\n case 'utctimestamp': {\r\n return TagType.UtcTimestamp\r\n }\r\n\r\n case 'localmktdate': {\r\n return TagType.LocalDate\r\n }\r\n\r\n case 'utcdateonly': {\r\n return TagType.UtcDateOnly\r\n }\r\n\r\n case 'utctimeonly': {\r\n return TagType.UtcTimeOnly\r\n }\r\n\r\n case 'data': {\r\n return TagType.RawData\r\n }\r\n\r\n default: {\r\n return TagType.String\r\n }\r\n }\r\n }\r\n\r\n public clone (): Tags {\r\n const next: number = this.nextTagPos\r\n const cloned: Tags = new Tags(next)\r\n cloned.nextTagPos = next\r\n for (let i = 0; i < next; ++i) {\r\n cloned.tagPos[i] = this.tagPos[i].clone()\r\n }\r\n return cloned\r\n }\r\n\r\n public reset (): void {\r\n this.nextTagPos = 0\r\n }\r\n\r\n public store (start: number, len: number, tag: number): void {\r\n const tagPtr: number = this.nextTagPos\r\n if (tagPtr === this.tagPos.length) {\r\n this.expand()\r\n }\r\n const tp: TagPos = this.tagPos[tagPtr]\r\n if (tp) {\r\n tp.assign(tagPtr, tag, start, len)\r\n } else {\r\n this.tagPos[tagPtr] = new TagPos(tagPtr, tag, start, len)\r\n }\r\n this.nextTagPos++\r\n }\r\n\r\n private expand (): void {\r\n const size = this.tagPos.length * 2\r\n const tagPos = new Array(size)\r\n for (let i = 0; i < this.tagPos.length; ++i) {\r\n tagPos[i] = this.tagPos[i]\r\n }\r\n this.tagPos = tagPos\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../../src/collections/collection.ts"],"names":[],"mappings":"","sourcesContent":["export type INumericKeyed<T> = Record<number, T>\r\n\r\nexport type ILooseObject = Record<string, any>\r\n\r\
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../../src/collections/collection.ts"],"names":[],"mappings":"","sourcesContent":["export type INumericKeyed<T> = Record<number, T>\r\n\r\nexport type ILooseObject = Record<string, any>\r\n\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './dictionary';
|
|
@@ -1,18 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./dictionary"), exports);
|
|
18
1
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collections/index.ts"],"names":[],"mappings":"","sourcesContent":["\r\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FixDefinitions } from '../dictionary/definition';
|
|
2
|
-
import { ISessionDescription
|
|
2
|
+
import { ISessionDescription } from '../transport/session/session-description';
|
|
3
|
+
import { ISessionMsgFactory } from '../transport/session/session-msg-factory';
|
|
3
4
|
import { JsFixLoggerFactory } from './js-fix-logger-factory';
|
|
4
5
|
import { DependencyContainer } from 'tsyringe';
|
|
5
6
|
export interface IJsFixConfig {
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.JsFixConfig = void 0;
|
|
4
4
|
const empty_log_factory_1 = require("./empty-log-factory");
|
|
5
|
-
const
|
|
5
|
+
const ascii_chars_1 = require("../buffer/ascii/ascii-chars");
|
|
6
6
|
class JsFixConfig {
|
|
7
|
-
constructor(factory, definitions, description, delimiter =
|
|
7
|
+
constructor(factory, definitions, description, delimiter = ascii_chars_1.AsciiChars.Soh, logFactory = new empty_log_factory_1.EmptyLogFactory()) {
|
|
8
8
|
this.factory = factory;
|
|
9
9
|
this.definitions = definitions;
|
|
10
10
|
this.description = description;
|
|
11
11
|
this.delimiter = delimiter;
|
|
12
12
|
this.logFactory = logFactory;
|
|
13
|
-
this.logDelimiter =
|
|
13
|
+
this.logDelimiter = ascii_chars_1.AsciiChars.Pipe;
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
exports.JsFixConfig = JsFixConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js-fix-config.js","sourceRoot":"","sources":["../../src/config/js-fix-config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"js-fix-config.js","sourceRoot":"","sources":["../../src/config/js-fix-config.ts"],"names":[],"mappings":";;;AAIA,2DAAqD;AACrD,6DAAwD;AAaxD,MAAa,WAAW;IAGtB,YACkB,OAAkC,EAClC,WAA2B,EAC3B,WAAgC,EAChC,YAAoB,wBAAU,CAAC,GAAG,EAClC,aAAiC,IAAI,mCAAe,EAAE;QAJtD,YAAO,GAAP,OAAO,CAA2B;QAClC,gBAAW,GAAX,WAAW,CAAgB;QAC3B,gBAAW,GAAX,WAAW,CAAqB;QAChC,cAAS,GAAT,SAAS,CAAyB;QAClC,eAAU,GAAV,UAAU,CAA4C;QAPjE,iBAAY,GAAW,wBAAU,CAAC,IAAI,CAAA;IAQ7C,CAAC;CACF;AAVD,kCAUC","sourcesContent":["import { FixDefinitions } from '../dictionary/definition'\r\nimport { ISessionDescription } from '../transport/session/session-description'\r\nimport { ISessionMsgFactory } from '../transport/session/session-msg-factory'\r\nimport { JsFixLoggerFactory } from './js-fix-logger-factory'\r\nimport { EmptyLogFactory } from './empty-log-factory'\r\nimport { AsciiChars } from '../buffer/ascii/ascii-chars'\r\nimport { DependencyContainer } from 'tsyringe'\r\n\r\nexport interface IJsFixConfig {\r\n factory: ISessionMsgFactory | null\r\n definitions: FixDefinitions\r\n description: ISessionDescription\r\n delimiter?: number\r\n logDelimiter?: number\r\n logFactory: JsFixLoggerFactory\r\n sessionContainer: DependencyContainer\r\n}\r\n\r\nexport class JsFixConfig implements IJsFixConfig {\r\n public logDelimiter: number = AsciiChars.Pipe\r\n public sessionContainer: DependencyContainer\r\n constructor (\r\n public readonly factory: ISessionMsgFactory | null,\r\n public readonly definitions: FixDefinitions,\r\n public readonly description: ISessionDescription,\r\n public readonly delimiter: number = AsciiChars.Soh,\r\n public readonly logFactory: JsFixLoggerFactory = new EmptyLogFactory()) {\r\n }\r\n}\r\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ContainedField,
|
|
1
|
+
import { ContainedField, IContainedSet } from '../contained';
|
|
2
2
|
import { FixDefinitions } from '../definition';
|
|
3
3
|
export declare class CompilerType {
|
|
4
4
|
readonly definitions: FixDefinitions;
|
|
5
|
-
readonly set:
|
|
5
|
+
readonly set: IContainedSet;
|
|
6
6
|
readonly qualifiedName: string;
|
|
7
7
|
readonly snaked: string;
|
|
8
|
-
constructor(definitions: FixDefinitions, set:
|
|
8
|
+
constructor(definitions: FixDefinitions, set: IContainedSet, qualifiedName: string);
|
|
9
9
|
getExtended(field: ContainedField): string;
|
|
10
10
|
getFieldGroupName(field: ContainedField): string;
|
|
11
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler-type.js","sourceRoot":"","sources":["../../../src/dictionary/compiler/compiler-type.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"compiler-type.js","sourceRoot":"","sources":["../../../src/dictionary/compiler/compiler-type.ts"],"names":[],"mappings":";;;AAAA,4CAMqB;AAGrB,4BAA4B;AAC5B,8DAAwD;AACxD,oEAA8D;AAE9D,MAAa,YAAY;IAEvB,YAA6B,WAA2B,EAAkB,GAAkB,EAAkB,aAAqB;QAAtG,gBAAW,GAAX,WAAW,CAAgB;QAAkB,QAAG,GAAH,GAAG,CAAe;QAAkB,kBAAa,GAAb,aAAa,CAAQ;QACjI,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAC7C,IAAI,GAAG,CAAC,IAAI,KAAK,qCAAgB,CAAC,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,GAAG,KAAK,KAAK,EAAE,CAAA;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,SAAS,KAAK,EAAE,CAAA;QAChC,CAAC;IACH,CAAC;IAEM,WAAW,CAAE,KAAqB;QACvC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,8BAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9B,MAAM,EAAE,GAAG,KAA4B,CAAA;gBACvC,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;oBAChC,KAAK,2CAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAClC,OAAO,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAA;oBACxC,CAAC;oBAED,KAAK,2CAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;wBACnC,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAA;oBAC3B,CAAC;oBACD,OAAO,CAAC,CAAC,CAAC;wBACR,OAAO,KAAK,CAAC,IAAI,CAAA;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,KAAK,8BAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;gBAClC,MAAM,EAAE,GAAG,KAAgC,CAAA;gBAC3C,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;oBAChC,KAAK,2CAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;wBACnC,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAA;oBAC3B,CAAC;oBACD,OAAO,CAAC,CAAC,CAAC;wBACR,OAAO,KAAK,CAAC,IAAI,CAAA;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC;YAED;gBACE,OAAO,KAAK,CAAC,IAAI,CAAA;QACrB,CAAC;IACH,CAAC;IAEM,iBAAiB,CAAE,KAAqB;QAC7C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,8BAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9B,MAAM,EAAE,GAAG,KAA4B,CAAA;gBACvC,QAAQ,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;oBAChC,KAAK,2CAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;wBACnC,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAA;oBAC3B,CAAC;oBACD,OAAO,CAAC,CAAC,CAAC;wBACR,OAAO,KAAK,CAAC,IAAI,CAAA;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC;YACD;gBACE,OAAO,KAAK,CAAC,IAAI,CAAA;QACrB,CAAC;IACH,CAAC;CACF;AA/DD,oCA+DC","sourcesContent":["import {\r\n ContainedField,\r\n ContainedGroupField,\r\n ContainedComponentField,\r\n ContainedFieldType,\r\n IContainedSet\r\n} from '../contained'\r\nimport { FixDefinitions } from '../definition'\r\n\r\nimport _ = require('lodash')\r\nimport { ContainedSetType } from '../contained-set-type'\r\nimport { FixDefinitionSource } from '../fix-definition-source'\r\n\r\nexport class CompilerType {\r\n public readonly snaked: string\r\n constructor (public readonly definitions: FixDefinitions, public readonly set: IContainedSet, public readonly qualifiedName: string) {\r\n const snake = _.snakeCase(this.qualifiedName)\r\n if (set.type === ContainedSetType.Msg) {\r\n this.snaked = `./${snake}`\r\n } else {\r\n this.snaked = `./set/${snake}`\r\n }\r\n }\r\n\r\n public getExtended (field: ContainedField): string {\r\n switch (field.type) {\r\n case ContainedFieldType.Group: {\r\n const gf = field as ContainedGroupField\r\n switch (this.definitions.source) {\r\n case FixDefinitionSource.QuickFix: {\r\n return this.qualifiedName + field.name\r\n }\r\n\r\n case FixDefinitionSource.FixmlRepo: {\r\n return gf.definition.name\r\n }\r\n default: {\r\n return field.name\r\n }\r\n }\r\n }\r\n\r\n case ContainedFieldType.Component: {\r\n const cf = field as ContainedComponentField\r\n switch (this.definitions.source) {\r\n case FixDefinitionSource.FixmlRepo: {\r\n return cf.definition.name\r\n }\r\n default: {\r\n return field.name\r\n }\r\n }\r\n }\r\n\r\n default:\r\n return field.name\r\n }\r\n }\r\n\r\n public getFieldGroupName (field: ContainedField): string {\r\n switch (field.type) {\r\n case ContainedFieldType.Group: {\r\n const gf = field as ContainedGroupField\r\n switch (this.definitions.source) {\r\n case FixDefinitionSource.FixmlRepo: {\r\n return gf.definition.name\r\n }\r\n default: {\r\n return field.name\r\n }\r\n }\r\n }\r\n default:\r\n return field.name\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -73,7 +73,7 @@ class EnumCompiler {
|
|
|
73
73
|
}
|
|
74
74
|
return this.create(field.name, field.description, () => {
|
|
75
75
|
const newLine = require('os').EOL;
|
|
76
|
-
return field.enums.keys().reduce((a, latest, i, arr) => {
|
|
76
|
+
return Array.from(field.enums.keys()).reduce((a, latest, i, arr) => {
|
|
77
77
|
const k = field.resolveEnum(latest);
|
|
78
78
|
let v = latest;
|
|
79
79
|
switch (field.tagType) {
|
|
@@ -119,7 +119,7 @@ class EnumCompiler {
|
|
|
119
119
|
}
|
|
120
120
|
toDo() {
|
|
121
121
|
const done = {};
|
|
122
|
-
return this.definitions.simple.values().reduce((a, latest) => {
|
|
122
|
+
return Array.from(this.definitions.simple.values()).reduce((a, latest) => {
|
|
123
123
|
if (latest.isEnum() && !done[latest.name]) {
|
|
124
124
|
done[latest.name] = true;
|
|
125
125
|
a.push(latest);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enum-compiler.js","sourceRoot":"","sources":["../../../src/dictionary/compiler/enum-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["import { FixDefinitions, SimpleFieldDefinition } from '../definition'\r\nimport { ICompilerSettings } from './compiler-settings'\r\nimport { StandardSnippet } from './standard-snippet'\r\nimport { ElasticBuffer } from '../../buffer'\r\nimport { ILooseObject } from '../../collections/collection'\r\n\r\nimport * as fs from 'fs'\r\nimport * as util from 'util'\r\nimport * as Path from 'path'\r\nimport * as _ from 'lodash'\r\nimport { TagType } from '../../buffer/tag/tag-type'\r\n\r\nexport class EnumCompiler {\r\n private readonly buffer: ElasticBuffer = new ElasticBuffer()\r\n private readonly consolidated: ElasticBuffer = new ElasticBuffer()\r\n private readonly snippets: StandardSnippet\r\n\r\n constructor (public readonly definitions: FixDefinitions, public readonly settings: ICompilerSettings) {\r\n this.snippets = new StandardSnippet(settings)\r\n }\r\n\r\n private static getIndex (): string {\r\n const lines = [\r\n 'export * from \\'./all-enum\\'',\r\n 'export * from \\'./msg_tag\\'',\r\n ''\r\n ]\r\n return lines.join(require('os').EOL)\r\n }\r\n\r\n /*\r\n enum MessageTypes {\r\n Logon = 'A',\r\n Heartbeat = '0',\r\n TestRequest = '1'\r\n}\r\n */\r\n\r\n public async generate (asOneFile: string | null = null): Promise<void> {\r\n this.generateTagEnum('MsgTag').then(async () => {\r\n const toDo: SimpleFieldDefinition[] = this.toDo()\r\n const promised = toDo.map(async field => { await this.oneEnum(field, asOneFile) })\r\n await Promise.all(promised)\r\n if (asOneFile) {\r\n await this.writeAsOne(asOneFile)\r\n await this.writeFile('index', EnumCompiler.getIndex())\r\n }\r\n }).catch((e: Error) => {\r\n throw e\r\n })\r\n }\r\n\r\n public async oneEnum (field: SimpleFieldDefinition, asOneFile: string | null): Promise<void> {\r\n const newLine = require('os').EOL\r\n const api = this.generateEnum(field)\r\n if (!asOneFile) {\r\n await this.writeFile(field.name, api).catch((e: Error) => {\r\n throw e\r\n })\r\n } else {\r\n this.consolidated.writeString(api)\r\n this.consolidated.writeString(newLine)\r\n }\r\n }\r\n\r\n public generateEnum (field: SimpleFieldDefinition): string {\r\n const buffer = this.buffer\r\n if (field == null) {\r\n throw new Error(`no simple field ${name} exists in definitions`)\r\n }\r\n if (!field.isEnum()) {\r\n throw new Error(`field ${name} is not an enum type`)\r\n }\r\n return this.create(field.name, field.description, () => {\r\n const newLine = require('os').EOL\r\n return field.enums.keys().reduce((a: number, latest: string, i: number, arr: string[]) => {\r\n const k = field.resolveEnum(latest)\r\n let v: any = latest\r\n switch (field.tagType) {\r\n case TagType.Int: {\r\n v = parseInt(latest, 10)\r\n break\r\n }\r\n }\r\n\r\n buffer.writeString(this.snippets.enumValue(k, v, 1))\r\n if (i < arr.length - 1) {\r\n buffer.writeString(',')\r\n }\r\n buffer.writeString(newLine)\r\n return 0\r\n }, 0)\r\n })\r\n }\r\n\r\n public async generateTagEnum (name: string): Promise<void> {\r\n const newLine = require('os').EOL\r\n const tags = this.definitions.tagToSimple\r\n const snippets = this.snippets\r\n const api = this.create(name, null, () => {\r\n const buffer = this.buffer\r\n return Object.keys(tags).reduce((a: number, latest: string, i: number, arr: string[]) => {\r\n const tag = parseInt(latest, 10)\r\n const sf = tags[tag]\r\n if (sf) {\r\n if (this.settings.comment && sf.description) {\r\n this.commentBlock(sf.description)\r\n }\r\n buffer.writeString(snippets.enumValue(sf.name, tag, 1))\r\n if (i < arr.length - 1) {\r\n buffer.writeString(',')\r\n }\r\n buffer.writeString(newLine)\r\n }\r\n return a\r\n }, 0)\r\n })\r\n await this.writeFile(name, api)\r\n }\r\n\r\n private toDo (): SimpleFieldDefinition[] {\r\n const done: ILooseObject = {}\r\n return this.definitions.simple.values().reduce((a: SimpleFieldDefinition[], latest: SimpleFieldDefinition) => {\r\n if (latest.isEnum() && !done[latest.name]) {\r\n done[latest.name] = true\r\n a.push(latest)\r\n }\r\n return a\r\n }, [])\r\n }\r\n\r\n private async writeAsOne (asOneFile: string): Promise<void> {\r\n const writer = util.promisify(fs.writeFile)\r\n await writer(asOneFile, this.consolidated.toString(), {\r\n encoding: 'utf8'\r\n }\r\n ).catch((e: Error) => {\r\n throw e\r\n })\r\n }\r\n\r\n private commentBlock (comment: string): void {\r\n const buffer = this.buffer\r\n const snippets = this.snippets\r\n const newLine = require('os').EOL\r\n buffer.writeString(snippets.startBlockComment(0))\r\n buffer.writeString(newLine)\r\n buffer.writeString(snippets.commentBox(comment))\r\n buffer.writeString(newLine)\r\n buffer.writeString(snippets.endBlockComment(0))\r\n buffer.writeString(newLine)\r\n }\r\n\r\n private async writeFile (name: string, api: string): Promise<void> {\r\n const writer = util.promisify(fs.writeFile)\r\n const fullName = this.getFileName(name)\r\n await writer(fullName, api, { encoding: 'utf8' }\r\n ).catch((e: Error) => {\r\n throw e\r\n })\r\n }\r\n\r\n private getFileName (name: string): string {\r\n const snake = _.snakeCase(name)\r\n const settings = this.settings\r\n const fileName = `${snake}.ts`\r\n const path: string = `${settings.output}/enum/`\r\n return Path.join(path, fileName)\r\n }\r\n\r\n private create (name: string, description: string | null, populateMembers: Function): string {\r\n const newLine = require('os').EOL\r\n const buffer = this.buffer\r\n buffer.reset()\r\n const snippets = this.snippets\r\n\r\n if (this.settings.comment && description) {\r\n this.commentBlock(description)\r\n }\r\n buffer.writeString(snippets.enum(name, 0))\r\n buffer.writeString(' ')\r\n buffer.writeString(snippets.startBlock(0))\r\n buffer.writeString(newLine)\r\n populateMembers()\r\n buffer.writeString(snippets.endBlock(0))\r\n buffer.writeString(newLine)\r\n return buffer.toString()\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"enum-compiler.js","sourceRoot":"","sources":["../../../src/dictionary/compiler/enum-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["import { FixDefinitions, SimpleFieldDefinition } from '../definition'\r\nimport { ICompilerSettings } from './compiler-settings'\r\nimport { StandardSnippet } from './standard-snippet'\r\nimport { ElasticBuffer } from '../../buffer'\r\nimport { ILooseObject } from '../../collections/collection'\r\n\r\nimport * as fs from 'fs'\r\nimport * as util from 'util'\r\nimport * as Path from 'path'\r\nimport * as _ from 'lodash'\r\nimport { TagType } from '../../buffer/tag/tag-type'\r\n\r\nexport class EnumCompiler {\r\n private readonly buffer: ElasticBuffer = new ElasticBuffer()\r\n private readonly consolidated: ElasticBuffer = new ElasticBuffer()\r\n private readonly snippets: StandardSnippet\r\n\r\n constructor (public readonly definitions: FixDefinitions, public readonly settings: ICompilerSettings) {\r\n this.snippets = new StandardSnippet(settings)\r\n }\r\n\r\n private static getIndex (): string {\r\n const lines = [\r\n 'export * from \\'./all-enum\\'',\r\n 'export * from \\'./msg_tag\\'',\r\n ''\r\n ]\r\n return lines.join(require('os').EOL)\r\n }\r\n\r\n /*\r\n enum MessageTypes {\r\n Logon = 'A',\r\n Heartbeat = '0',\r\n TestRequest = '1'\r\n}\r\n */\r\n\r\n public async generate (asOneFile: string | null = null): Promise<void> {\r\n this.generateTagEnum('MsgTag').then(async () => {\r\n const toDo: SimpleFieldDefinition[] = this.toDo()\r\n const promised = toDo.map(async field => { await this.oneEnum(field, asOneFile) })\r\n await Promise.all(promised)\r\n if (asOneFile) {\r\n await this.writeAsOne(asOneFile)\r\n await this.writeFile('index', EnumCompiler.getIndex())\r\n }\r\n }).catch((e: Error) => {\r\n throw e\r\n })\r\n }\r\n\r\n public async oneEnum (field: SimpleFieldDefinition, asOneFile: string | null): Promise<void> {\r\n const newLine = require('os').EOL\r\n const api = this.generateEnum(field)\r\n if (!asOneFile) {\r\n await this.writeFile(field.name, api).catch((e: Error) => {\r\n throw e\r\n })\r\n } else {\r\n this.consolidated.writeString(api)\r\n this.consolidated.writeString(newLine)\r\n }\r\n }\r\n\r\n public generateEnum (field: SimpleFieldDefinition): string {\r\n const buffer = this.buffer\r\n if (field == null) {\r\n throw new Error(`no simple field ${name} exists in definitions`)\r\n }\r\n if (!field.isEnum()) {\r\n throw new Error(`field ${name} is not an enum type`)\r\n }\r\n return this.create(field.name, field.description, () => {\r\n const newLine = require('os').EOL\r\n return Array.from(field.enums.keys()).reduce((a: number, latest: string, i: number, arr: string[]) => {\r\n const k = field.resolveEnum(latest)\r\n let v: any = latest\r\n switch (field.tagType) {\r\n case TagType.Int: {\r\n v = parseInt(latest, 10)\r\n break\r\n }\r\n }\r\n\r\n buffer.writeString(this.snippets.enumValue(k, v, 1))\r\n if (i < arr.length - 1) {\r\n buffer.writeString(',')\r\n }\r\n buffer.writeString(newLine)\r\n return 0\r\n }, 0)\r\n })\r\n }\r\n\r\n public async generateTagEnum (name: string): Promise<void> {\r\n const newLine = require('os').EOL\r\n const tags = this.definitions.tagToSimple\r\n const snippets = this.snippets\r\n const api = this.create(name, null, () => {\r\n const buffer = this.buffer\r\n return Object.keys(tags).reduce((a: number, latest: string, i: number, arr: string[]) => {\r\n const tag = parseInt(latest, 10)\r\n const sf = tags[tag]\r\n if (sf) {\r\n if (this.settings.comment && sf.description) {\r\n this.commentBlock(sf.description)\r\n }\r\n buffer.writeString(snippets.enumValue(sf.name, tag, 1))\r\n if (i < arr.length - 1) {\r\n buffer.writeString(',')\r\n }\r\n buffer.writeString(newLine)\r\n }\r\n return a\r\n }, 0)\r\n })\r\n await this.writeFile(name, api)\r\n }\r\n\r\n private toDo (): SimpleFieldDefinition[] {\r\n const done: ILooseObject = {}\r\n return Array.from(this.definitions.simple.values()).reduce((a: SimpleFieldDefinition[], latest: SimpleFieldDefinition) => {\r\n if (latest.isEnum() && !done[latest.name]) {\r\n done[latest.name] = true\r\n a.push(latest)\r\n }\r\n return a\r\n }, [])\r\n }\r\n\r\n private async writeAsOne (asOneFile: string): Promise<void> {\r\n const writer = util.promisify(fs.writeFile)\r\n await writer(asOneFile, this.consolidated.toString(), {\r\n encoding: 'utf8'\r\n }\r\n ).catch((e: Error) => {\r\n throw e\r\n })\r\n }\r\n\r\n private commentBlock (comment: string): void {\r\n const buffer = this.buffer\r\n const snippets = this.snippets\r\n const newLine = require('os').EOL\r\n buffer.writeString(snippets.startBlockComment(0))\r\n buffer.writeString(newLine)\r\n buffer.writeString(snippets.commentBox(comment))\r\n buffer.writeString(newLine)\r\n buffer.writeString(snippets.endBlockComment(0))\r\n buffer.writeString(newLine)\r\n }\r\n\r\n private async writeFile (name: string, api: string): Promise<void> {\r\n const writer = util.promisify(fs.writeFile)\r\n const fullName = this.getFileName(name)\r\n await writer(fullName, api, { encoding: 'utf8' }\r\n ).catch((e: Error) => {\r\n throw e\r\n })\r\n }\r\n\r\n private getFileName (name: string): string {\r\n const snake = _.snakeCase(name)\r\n const settings = this.settings\r\n const fileName = `${snake}.ts`\r\n const path: string = `${settings.output}/enum/`\r\n return Path.join(path, fileName)\r\n }\r\n\r\n private create (name: string, description: string | null, populateMembers: Function): string {\r\n const newLine = require('os').EOL\r\n const buffer = this.buffer\r\n buffer.reset()\r\n const snippets = this.snippets\r\n\r\n if (this.settings.comment && description) {\r\n this.commentBlock(description)\r\n }\r\n buffer.writeString(snippets.enum(name, 0))\r\n buffer.writeString(' ')\r\n buffer.writeString(snippets.startBlock(0))\r\n buffer.writeString(newLine)\r\n populateMembers()\r\n buffer.writeString(snippets.endBlock(0))\r\n buffer.writeString(newLine)\r\n return buffer.toString()\r\n }\r\n}\r\n"]}
|
|
@@ -3,14 +3,13 @@ import { ICompilerSettings } from './compiler-settings';
|
|
|
3
3
|
import { FixDefinitions } from '../definition';
|
|
4
4
|
import { StandardSnippet } from './standard-snippet';
|
|
5
5
|
import { CompilerType } from './compiler-type';
|
|
6
|
-
import { Dictionary } from '../../collections';
|
|
7
6
|
export declare class MsgCompiler {
|
|
8
7
|
readonly definitions: FixDefinitions;
|
|
9
8
|
readonly settings: ICompilerSettings;
|
|
10
9
|
readonly queue: CompilerType[];
|
|
11
10
|
readonly snippets: StandardSnippet;
|
|
12
11
|
readonly buffer: ElasticBuffer;
|
|
13
|
-
readonly completed:
|
|
12
|
+
readonly completed: Map<string, CompilerType>;
|
|
14
13
|
constructor(definitions: FixDefinitions, settings: ICompilerSettings);
|
|
15
14
|
generate(): Promise<void>;
|
|
16
15
|
private getFileName;
|
|
@@ -15,7 +15,6 @@ const ascii_1 = require("../../buffer/ascii/");
|
|
|
15
15
|
const contained_1 = require("../contained");
|
|
16
16
|
const standard_snippet_1 = require("./standard-snippet");
|
|
17
17
|
const compiler_type_1 = require("./compiler-type");
|
|
18
|
-
const collections_1 = require("../../collections");
|
|
19
18
|
const fs = require("fs");
|
|
20
19
|
const Util = require("util");
|
|
21
20
|
const Path = require("path");
|
|
@@ -30,13 +29,13 @@ class MsgCompiler {
|
|
|
30
29
|
this.settings = settings;
|
|
31
30
|
this.queue = [];
|
|
32
31
|
this.buffer = new buffer_1.ElasticBuffer();
|
|
33
|
-
this.completed = new
|
|
32
|
+
this.completed = new Map();
|
|
34
33
|
this.snippets = new standard_snippet_1.StandardSnippet(this.settings);
|
|
35
34
|
}
|
|
36
35
|
generate() {
|
|
37
36
|
var _a;
|
|
38
37
|
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
-
const types = (_a = this.settings.types) !== null && _a !== void 0 ? _a : this.definitions.message.keys();
|
|
38
|
+
const types = (_a = this.settings.types) !== null && _a !== void 0 ? _a : Array.from(this.definitions.message.keys());
|
|
40
39
|
yield this.createTypes(types);
|
|
41
40
|
});
|
|
42
41
|
}
|
|
@@ -79,7 +78,7 @@ class MsgCompiler {
|
|
|
79
78
|
const writeFile = Util.promisify(fs.writeFile);
|
|
80
79
|
const settings = this.settings;
|
|
81
80
|
const fileName = 'index.ts';
|
|
82
|
-
const done = this.completed.values();
|
|
81
|
+
const done = Array.from(this.completed.values());
|
|
83
82
|
const exports = done.reduce((prev, current) => {
|
|
84
83
|
prev.push(`export * from '${current.snaked}'`);
|
|
85
84
|
return prev;
|
|
@@ -126,7 +125,7 @@ class MsgCompiler {
|
|
|
126
125
|
return;
|
|
127
126
|
}
|
|
128
127
|
this.queue.push(ct);
|
|
129
|
-
completed.
|
|
128
|
+
completed.set(fullName, ct);
|
|
130
129
|
}
|
|
131
130
|
simpleComment(simple) {
|
|
132
131
|
return `[${simple.position + 1}] ${simple.definition.tag} (${tag_type_1.TagType[simple.definition.tagType]})`;
|
|
@@ -135,7 +134,7 @@ class MsgCompiler {
|
|
|
135
134
|
const snippets = this.snippets;
|
|
136
135
|
const settings = this.settings;
|
|
137
136
|
const buffer = this.buffer;
|
|
138
|
-
const len = buffer.writeString(snippets.simple(simple.name, buffer_1.Tags.toJSType(simple), simple.required, 1));
|
|
137
|
+
const len = buffer.writeString(snippets.simple(simple.name, buffer_1.Tags.toJSType(simple.definition.tagType), simple.required, 1));
|
|
139
138
|
if (settings.tags) {
|
|
140
139
|
buffer.writeString(snippets.commentLine(this.simpleComment(simple), justifiedWidth - len));
|
|
141
140
|
}
|
|
@@ -194,7 +193,7 @@ class MsgCompiler {
|
|
|
194
193
|
const snippets = this.snippets;
|
|
195
194
|
const buffer = this.buffer;
|
|
196
195
|
compilerType.set.localAttribute.forEach((simple) => {
|
|
197
|
-
const len = buffer.writeString(snippets.simple(simple.definition.name, buffer_1.Tags.toJSType(simple), simple.required, 1));
|
|
196
|
+
const len = buffer.writeString(snippets.simple(simple.definition.name, buffer_1.Tags.toJSType(simple.definition.tagType), simple.required, 1));
|
|
198
197
|
if (settings.tags) {
|
|
199
198
|
buffer.writeString(snippets.commentLine(this.simpleComment(simple), justifiedWidth - len));
|
|
200
199
|
}
|