jspurefix 5.0.0 → 5.2.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.
Files changed (121) hide show
  1. package/BACKPORT_PLAN.md +135 -62
  2. package/README.md +1 -2
  3. package/dist/buffer/ascii/ascii-parser-state.js +0 -7
  4. package/dist/buffer/ascii/ascii-parser-state.js.map +1 -1
  5. package/dist/buffer/ascii/ascii-parser.d.ts +1 -0
  6. package/dist/buffer/ascii/ascii-parser.js +8 -2
  7. package/dist/buffer/ascii/ascii-parser.js.map +1 -1
  8. package/dist/buffer/fixml/fixml-view.js.map +1 -1
  9. package/dist/buffer/msg-encoder.js +34 -1
  10. package/dist/buffer/msg-encoder.js.map +1 -1
  11. package/dist/buffer/msg-parser.js +34 -1
  12. package/dist/buffer/msg-parser.js.map +1 -1
  13. package/dist/buffer/msg-view.js.map +1 -1
  14. package/dist/collections/index.js +1 -0
  15. package/dist/config/winston-logger.js.map +1 -1
  16. package/dist/dict-parser.js +34 -1
  17. package/dist/dict-parser.js.map +1 -1
  18. package/dist/dictionary/compiler/enum-compiler.js +37 -4
  19. package/dist/dictionary/compiler/enum-compiler.js.map +1 -1
  20. package/dist/dictionary/compiler/msg-compiler.js +36 -3
  21. package/dist/dictionary/compiler/msg-compiler.js.map +1 -1
  22. package/dist/dictionary/compiler/standard-snippet.js +34 -1
  23. package/dist/dictionary/compiler/standard-snippet.js.map +1 -1
  24. package/dist/dictionary/contained/contained-field-set.js +2 -0
  25. package/dist/dictionary/contained/contained-field-set.js.map +1 -1
  26. package/dist/dictionary/definition/simple-field-definition.js +34 -1
  27. package/dist/dictionary/definition/simple-field-definition.js.map +1 -1
  28. package/dist/dictionary/fix-parser.js +34 -1
  29. package/dist/dictionary/fix-parser.js.map +1 -1
  30. package/dist/dictionary/parser/fix-repository/repository-type.js +1 -0
  31. package/dist/dictionary/parser/fix-repository/repository-xml-parser.js +35 -2
  32. package/dist/dictionary/parser/fix-repository/repository-xml-parser.js.map +1 -1
  33. package/dist/dictionary/parser/fixml/fields-parser.js.map +1 -1
  34. package/dist/dictionary/parser/fixml/fix-xsd-parser.js +34 -1
  35. package/dist/dictionary/parser/fixml/fix-xsd-parser.js.map +1 -1
  36. package/dist/dictionary/parser/fixml/include-graph.js +35 -2
  37. package/dist/dictionary/parser/fixml/include-graph.js.map +1 -1
  38. package/dist/dictionary/parser/fixml/node-definitions.js +1 -0
  39. package/dist/dictionary/parser/fixml/xsd-parser.js +34 -1
  40. package/dist/dictionary/parser/fixml/xsd-parser.js.map +1 -1
  41. package/dist/jsfix-cmd.js +39 -3
  42. package/dist/jsfix-cmd.js.map +1 -1
  43. package/dist/runtime/session-launcher.js +34 -1
  44. package/dist/runtime/session-launcher.js.map +1 -1
  45. package/dist/sample/http/oms/app.js +34 -1
  46. package/dist/sample/http/oms/app.js.map +1 -1
  47. package/dist/sample/tcp/recovering-skeleton/app.js +34 -1
  48. package/dist/sample/tcp/recovering-skeleton/app.js.map +1 -1
  49. package/dist/store/fix-msg-ascii-store-resend.js +1 -1
  50. package/dist/store/fix-msg-ascii-store-resend.js.map +1 -1
  51. package/dist/transport/ascii/ascii-session.d.ts +6 -0
  52. package/dist/transport/ascii/ascii-session.js +122 -5
  53. package/dist/transport/ascii/ascii-session.js.map +1 -1
  54. package/dist/transport/duplex/http-duplex.js +4 -1
  55. package/dist/transport/duplex/http-duplex.js.map +1 -1
  56. package/dist/transport/duplex/tcp-duplex.js +34 -1
  57. package/dist/transport/duplex/tcp-duplex.js.map +1 -1
  58. package/dist/transport/fix-acceptor.js +34 -1
  59. package/dist/transport/fix-acceptor.js.map +1 -1
  60. package/dist/transport/fix-entity.js +34 -1
  61. package/dist/transport/fix-entity.js.map +1 -1
  62. package/dist/transport/fixml/fixml-msg-transmitter.js +1 -1
  63. package/dist/transport/fixml/fixml-msg-transmitter.js.map +1 -1
  64. package/dist/transport/http/http-acceptor.js +34 -1
  65. package/dist/transport/http/http-acceptor.js.map +1 -1
  66. package/dist/transport/msg-transmitter.js +34 -1
  67. package/dist/transport/msg-transmitter.js.map +1 -1
  68. package/dist/transport/session/a-session-msg-factory.d.ts +1 -1
  69. package/dist/transport/session/a-session-msg-factory.js.map +1 -1
  70. package/dist/transport/session/fix-clock.d.ts +6 -0
  71. package/dist/transport/session/fix-clock.js +10 -0
  72. package/dist/transport/session/fix-clock.js.map +1 -0
  73. package/dist/transport/session/fix-session.d.ts +1 -0
  74. package/dist/transport/session/fix-session.js +43 -1
  75. package/dist/transport/session/fix-session.js.map +1 -1
  76. package/dist/transport/session/index.d.ts +4 -0
  77. package/dist/transport/session/index.js +4 -0
  78. package/dist/transport/session/index.js.map +1 -1
  79. package/dist/transport/session/resend-request-manager.d.ts +69 -0
  80. package/dist/transport/session/resend-request-manager.js +208 -0
  81. package/dist/transport/session/resend-request-manager.js.map +1 -0
  82. package/dist/transport/session/session-msg-factory.d.ts +1 -1
  83. package/dist/transport/session/session-msg-factory.js.map +1 -1
  84. package/dist/transport/session/session-sequence-coordinator.d.ts +38 -0
  85. package/dist/transport/session/session-sequence-coordinator.js +180 -0
  86. package/dist/transport/session/session-sequence-coordinator.js.map +1 -0
  87. package/dist/transport/session/session-sequence-store.d.ts +14 -0
  88. package/dist/transport/session/session-sequence-store.js +36 -0
  89. package/dist/transport/session/session-sequence-store.js.map +1 -0
  90. package/dist/transport/tcp/tcp-acceptor.js.map +1 -1
  91. package/dist/transport/tcp/tcp-initiator.js +34 -1
  92. package/dist/transport/tcp/tcp-initiator.js.map +1 -1
  93. package/dist/types/FIX4.4/index.js +1 -0
  94. package/dist/util/buffer-helper.js +34 -1
  95. package/dist/util/buffer-helper.js.map +1 -1
  96. package/dist/util/definition-factory.js +35 -2
  97. package/dist/util/definition-factory.js.map +1 -1
  98. package/jsfix.test_client.txt +67 -66
  99. package/jsfix.test_server.txt +64 -63
  100. package/package.json +11 -10
  101. package/src/buffer/ascii/ascii-parser-state.ts +4 -7
  102. package/src/buffer/ascii/ascii-parser.ts +14 -3
  103. package/src/buffer/fixml/fixml-view.ts +1 -1
  104. package/src/buffer/msg-view.ts +1 -1
  105. package/src/config/winston-logger.ts +3 -3
  106. package/src/dictionary/contained/contained-field-set.ts +2 -1
  107. package/src/dictionary/parser/fixml/fields-parser.ts +2 -2
  108. package/src/jsfix-cmd.ts +1 -1
  109. package/src/store/fix-msg-ascii-store-resend.ts +1 -1
  110. package/src/transport/ascii/ascii-session.ts +166 -5
  111. package/src/transport/fixml/fixml-msg-transmitter.ts +1 -1
  112. package/src/transport/http/http-acceptor.ts +1 -1
  113. package/src/transport/session/a-session-msg-factory.ts +1 -1
  114. package/src/transport/session/fix-clock.ts +9 -0
  115. package/src/transport/session/fix-session.ts +12 -0
  116. package/src/transport/session/index.ts +4 -0
  117. package/src/transport/session/resend-request-manager.ts +268 -0
  118. package/src/transport/session/session-msg-factory.ts +1 -1
  119. package/src/transport/session/session-sequence-coordinator.ts +272 -0
  120. package/src/transport/session/session-sequence-store.ts +33 -0
  121. package/src/transport/tcp/tcp-acceptor.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"xsd-parser.js","sourceRoot":"","sources":["../../../../src/dictionary/parser/fixml/xsd-parser.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,yBAAwB;AAIxB,MAAsB,SAAS;IAK7B,YAAuC,WAA2B;QAA3B,gBAAW,GAAX,WAAW,CAAgB;QAJlD,SAAI,GAAmB,EAAE,CAAA;IAKzC,CAAC;IAEY,KAAK,CAAE,IAAY;;YAC9B,OAAO,MAAM,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3D,MAAM,IAAI,GAAkB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,SAAS,GAAc,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;gBAClE,MAAM,SAAS,GAAc,SAAS,CAAC,OAAO,CAAA;gBAC9C,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBACjC,CAAC,CAAC,CAAA;gBAEF,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE;oBACxC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBAClC,CAAC,CAAC,CAAA;gBAEF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBACzB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC3B,CAAC,CAAC,CAAA;gBAEF,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;oBACjC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;oBACZ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;wBACjC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;oBAC7C,CAAC;gBACH,CAAC,CAAC,CAAA;gBAEF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC1B,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;gBACF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACtB,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAMS,MAAM,CAAE,IAAc,EAAE,MAAqB;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC,OAAO,CAAA;QACvB,CAAC;QACD,MAAM,IAAI,GAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACnD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;CACF;AApDD,8BAoDC","sourcesContent":["import { FixDefinitions } from '../../definition'\nimport { ILooseObject } from '../../../collections/collection'\nimport { SAXStream } from '../../dict-primitive'\nimport * as fs from 'fs'\nimport { SAXParser } from 'sax'\nimport { ISaxNode } from '../../sax-node'\n\nexport abstract class XsdParser {\n public readonly data: ILooseObject[] = []\n public current: ILooseObject\n protected pending: string | null\n\n protected constructor (public readonly definitions: FixDefinitions) {\n }\n\n public async parse (file: string): Promise<FixDefinitions> {\n return await new Promise<FixDefinitions>((resolve, reject) => {\n const pass: fs.ReadStream = fs.createReadStream(file)\n const saxStream: SAXStream = require('sax').createStream(true, {})\n const saxParser: SAXParser = saxStream._parser\n saxStream.on('opentag', (node) => {\n this.open(saxParser.line, node)\n })\n\n saxStream.on('closetag', (name: string) => {\n this.close(saxParser.line, name)\n })\n\n saxStream.on('ready', () => {\n resolve(this.definitions)\n })\n\n saxStream.on('text', (t: string) => {\n t = t.trim()\n if (t.length > 0 && this.pending) {\n this.value(saxParser.line, this.pending, t)\n }\n })\n\n saxStream.on('error', (r) => {\n reject(r)\n })\n pass.pipe(saxStream)\n })\n }\n\n public abstract close (line: number, node: string): void\n public abstract open (line: number, node: ISaxNode): void\n public abstract value (line: number, n: string, v: string): void\n\n protected assign (node: ISaxNode, target?: ILooseObject): void {\n if (!target) {\n target = this.current\n }\n const keys: string[] = Object.keys(node.attributes)\n for (const k of keys) {\n target[k] = node.attributes[k]\n }\n }\n}\n"]}
1
+ {"version":3,"file":"xsd-parser.js","sourceRoot":"","sources":["../../../../src/dictionary/parser/fixml/xsd-parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,uCAAwB;AAIxB,MAAsB,SAAS;IAK7B,YAAuC,WAA2B;QAA3B,gBAAW,GAAX,WAAW,CAAgB;QAJlD,SAAI,GAAmB,EAAE,CAAA;IAKzC,CAAC;IAEY,KAAK,CAAE,IAAY;;YAC9B,OAAO,MAAM,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3D,MAAM,IAAI,GAAkB,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,SAAS,GAAc,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;gBAClE,MAAM,SAAS,GAAc,SAAS,CAAC,OAAO,CAAA;gBAC9C,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBACjC,CAAC,CAAC,CAAA;gBAEF,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE;oBACxC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBAClC,CAAC,CAAC,CAAA;gBAEF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBACzB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC3B,CAAC,CAAC,CAAA;gBAEF,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;oBACjC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;oBACZ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;wBACjC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;oBAC7C,CAAC;gBACH,CAAC,CAAC,CAAA;gBAEF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC1B,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;gBACF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACtB,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAMS,MAAM,CAAE,IAAc,EAAE,MAAqB;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC,OAAO,CAAA;QACvB,CAAC;QACD,MAAM,IAAI,GAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACnD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;CACF;AApDD,8BAoDC","sourcesContent":["import { FixDefinitions } from '../../definition'\nimport { ILooseObject } from '../../../collections/collection'\nimport { SAXStream } from '../../dict-primitive'\nimport * as fs from 'fs'\nimport { SAXParser } from 'sax'\nimport { ISaxNode } from '../../sax-node'\n\nexport abstract class XsdParser {\n public readonly data: ILooseObject[] = []\n public current: ILooseObject\n protected pending: string | null\n\n protected constructor (public readonly definitions: FixDefinitions) {\n }\n\n public async parse (file: string): Promise<FixDefinitions> {\n return await new Promise<FixDefinitions>((resolve, reject) => {\n const pass: fs.ReadStream = fs.createReadStream(file)\n const saxStream: SAXStream = require('sax').createStream(true, {})\n const saxParser: SAXParser = saxStream._parser\n saxStream.on('opentag', (node) => {\n this.open(saxParser.line, node)\n })\n\n saxStream.on('closetag', (name: string) => {\n this.close(saxParser.line, name)\n })\n\n saxStream.on('ready', () => {\n resolve(this.definitions)\n })\n\n saxStream.on('text', (t: string) => {\n t = t.trim()\n if (t.length > 0 && this.pending) {\n this.value(saxParser.line, this.pending, t)\n }\n })\n\n saxStream.on('error', (r) => {\n reject(r)\n })\n pass.pipe(saxStream)\n })\n }\n\n public abstract close (line: number, node: string): void\n public abstract open (line: number, node: ISaxNode): void\n public abstract value (line: number, n: string, v: string): void\n\n protected assign (node: ISaxNode, target?: ILooseObject): void {\n if (!target) {\n target = this.current\n }\n const keys: string[] = Object.keys(node.attributes)\n for (const k of keys) {\n target[k] = node.attributes[k]\n }\n }\n}\n"]}
package/dist/jsfix-cmd.js CHANGED
@@ -1,4 +1,37 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -8,6 +41,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
41
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
42
  });
10
43
  };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
11
47
  Object.defineProperty(exports, "__esModule", { value: true });
12
48
  exports.JsfixCmd = void 0;
13
49
  require("reflect-metadata");
@@ -16,14 +52,14 @@ const ascii_1 = require("./buffer/ascii");
16
52
  const util_1 = require("./util");
17
53
  const transport_1 = require("./transport");
18
54
  const types_1 = require("./types");
19
- const util = require("util");
55
+ const util = __importStar(require("util"));
20
56
  const minimist = require("minimist");
21
- const path = require("path");
57
+ const path = __importStar(require("path"));
22
58
  const factory_1 = require("./transport/factory");
23
59
  const compiler_1 = require("./dictionary/compiler");
24
60
  const runtime_1 = require("./runtime");
25
61
  const di_tokens_1 = require("./runtime/di-tokens");
26
- const minimist_options_1 = require("minimist-options");
62
+ const minimist_options_1 = __importDefault(require("minimist-options"));
27
63
  const quick_fix_xml_file_builder_1 = require("./dictionary/parser/quickfix/quick-fix-xml-file-builder");
28
64
  const fs = require('node-fs-extra');
29
65
  const options = (0, minimist_options_1.default)({
@@ -1 +1 @@
1
- {"version":3,"file":"jsfix-cmd.js","sourceRoot":"","sources":["../src/jsfix-cmd.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata'\n\nimport { ElasticBuffer, MsgView, MsgParser } from './buffer'\nimport { AsciiParser, AsciiView, AsciiChars } from './buffer/ascii'\nimport { ILooseObject } from './collections/collection'\nimport { SimpleFieldDefinition, FixDefinitions } from './dictionary/definition'\nimport { MessageGenerator, JsonHelper, getWords, DefinitionFactory } from './util'\nimport { ISessionDescription, FileDuplex, StringDuplex } from './transport'\n\nimport { MsgTag } from './types'\nimport { IJsFixConfig } from './config'\n\nimport * as util from 'util'\nimport * as minimist from 'minimist'\nimport * as path from 'path'\nimport { MsgTransport } from './transport/factory'\nimport { EnumCompiler, ICompilerSettings, MsgCompiler } from './dictionary/compiler'\nimport { AsciiMsgTransmitter } from './transport/ascii/ascii-msg-transmitter'\nimport { SessionContainer } from './runtime'\nimport { DITokens } from './runtime/di-tokens'\nimport buildOptions from 'minimist-options'\nimport { QuickFixXmlFileBuilder } from './dictionary/parser/quickfix/quick-fix-xml-file-builder'\n\nconst fs = require('node-fs-extra')\n\nconst options = buildOptions({\n dict: {\n type: 'string',\n alias: 'd',\n default: 'data/FIX44.xml'\n },\n\n type: {\n type: 'string-array',\n alias: 't'\n },\n\n fix: {\n type: 'string',\n alias: 'f',\n default: 'data/FIX44.xml'\n },\n\n session: {\n type: 'string',\n alias: 's'\n },\n\n delimiter: {\n type: 'string',\n alias: 'l',\n default: '|'\n },\n\n help: {\n type: 'boolean',\n alias: ['h'],\n default: false\n },\n\n unit: {\n type: 'boolean',\n alias: ['u'],\n default: false\n },\n\n generate: {\n type: 'boolean',\n alias: ['g'],\n default: false\n },\n\n stats: {\n type: 'boolean',\n alias: ['st'],\n default: false\n },\n\n tokens: {\n type: 'boolean',\n alias: ['t'],\n default: false\n },\n\n objects: {\n type: 'boolean',\n alias: ['o'],\n default: true\n },\n\n structures: {\n type: 'boolean',\n alias: ['r'],\n default: false\n },\n\n script: {\n type: 'boolean',\n alias: ['i'],\n default: false\n },\n\n compile: {\n type: 'boolean',\n alias: ['c'],\n default: false\n },\n\n groups: {\n type: 'boolean',\n alias: ['g'],\n default: true\n },\n\n density: {\n type: 'number',\n alias: 'd',\n default: 0.8\n },\n\n repeats: {\n type: 'number',\n alias: 'r',\n default: 1\n },\n\n arr: {\n type: 'array',\n alias: 'a',\n default: []\n }\n\n /*\n booleans: {\n type: 'boolean-array',\n alias: 'b',\n default: [true, false]\n },\n\n numbers: {\n type: 'number-array',\n alias: 'n',\n default: [0, 1]\n },\n\n published: 'boolean',\n\n // Special option for positional arguments (`_` in minimist)\n arguments: 'string'\n */\n})\n\nconst argv: any = minimist(process.argv.slice(2), options)\n\nenum PrintMode {\n Structure = 1,\n Object = 2,\n Verbose = 3,\n Stats = 4,\n Token = 5,\n Encoded = 6\n}\n\nenum Command {\n Generate = 1,\n Replay = 2,\n Lookup = 3,\n Encode = 4,\n Benchmark = 5,\n Compile = 6,\n Trim,\n Unknown = 8\n}\n\nclass ParseSummary {\n public readonly micros_per_msg: number\n public readonly chars_per_second: number\n public readonly fields_per_second: number\n public readonly content_length: number\n\n constructor (\n public readonly content: string,\n public readonly view: string,\n public readonly msg_type: string,\n public readonly iterations: number,\n public readonly elapsed_ms: number,\n public readonly fields: number\n ) {\n this.content_length = this.content.length\n this.micros_per_msg = (this.elapsed_ms / this.iterations) * 1000\n this.chars_per_second = Math.round(this.content_length * this.iterations / this.elapsed_ms * 1000)\n this.fields_per_second = Math.round(this.fields * this.iterations / this.elapsed_ms * 1000)\n }\n}\n\nexport class JsfixCmd {\n private readonly root: string = path.join(__dirname, '../')\n private definitions: FixDefinitions\n private jsonHelper: JsonHelper\n private session: AsciiMsgTransmitter\n private sessionDescription: ISessionDescription\n private delimiter: number = AsciiChars.Soh\n private stats: ILooseObject = {}\n private readonly filter: Map<string, boolean> = new Map<string, boolean>()\n private messages: number = 0\n private print: boolean = true\n\n private static getCommand (): Command {\n let command: Command = Command.Unknown\n if (argv.trim) {\n command = Command.Trim\n } else if (argv.compile) {\n command = Command.Compile\n } else if (argv.generate) {\n command = Command.Generate\n } else if (argv.fix) {\n command = argv.benchmark ? Command.Benchmark : Command.Replay\n } else if (argv.field) {\n command = Command.Lookup\n } else if (argv.json) {\n command = Command.Encode\n } else if (argv.msg) {\n command = Command.Lookup\n }\n return command\n }\n\n private static getPrintMode (): PrintMode {\n let mode: PrintMode = PrintMode.Stats\n if (argv.tokens) {\n mode = PrintMode.Token\n } else if (argv.stats) {\n mode = PrintMode.Stats\n } else if (argv.objects) {\n mode = PrintMode.Object\n } else if (argv.verbose) {\n mode = PrintMode.Verbose\n } else if (argv.structures) {\n mode = PrintMode.Structure\n } else if (argv.encoded) {\n mode = PrintMode.Encoded\n } else if (argv.trim) {\n mode = PrintMode.Object\n }\n return mode\n }\n\n private static async writeFile (name: string, api: string): Promise<void> {\n const writer = util.promisify(fs.writeFile)\n await writer(name, api, { encoding: 'utf8' }\n ).catch((e: Error) => {\n throw e\n })\n }\n\n public async exec (): Promise<any> {\n return await new Promise<any>((resolve, reject) => {\n this.init().then(async () => {\n let actioned: boolean = true\n const command = JsfixCmd.getCommand()\n\n switch (command) {\n case Command.Generate: {\n // produce a test message or a valid fix log of n messages\n await this.generate()\n break\n }\n\n case Command.Encode: {\n // encode a json message back to fix\n this.encode()\n break\n }\n\n case Command.Replay: {\n // parse a file into either objects, tokens, structures or stats\n const repeats: number = !isNaN(argv.repeats) ? argv.repeats : 1\n try {\n for (let i: number = 0; i < repeats; ++i) {\n await this.replay()\n }\n } catch (e) {\n reject(e)\n }\n break\n }\n\n case Command.Benchmark: {\n // time how long to parse 10000 repeats of contents of file\n const repeats: number = !isNaN(argv.repeats) ? argv.repeats : 10000\n try {\n const summary = await this.benchmark(repeats)\n console.log(JSON.stringify(summary, null, 4))\n } catch (e) {\n reject(e)\n }\n break\n }\n\n case Command.Lookup: {\n // lookup a field\n if (argv.field) {\n this.field()\n } else {\n this.msg()\n }\n break\n }\n\n case Command.Compile: {\n await this.compile()\n break\n }\n\n case Command.Trim: {\n const xml = this.trim()\n console.log(xml)\n break\n }\n\n case Command.Unknown:\n default: {\n actioned = false\n }\n }\n resolve(actioned)\n }).catch((e) => {\n reject(e)\n })\n })\n }\n\n private async firstMessage (t: MsgTransport): Promise<MsgView> {\n return await new Promise<MsgView>((resolve, reject) => {\n t.receiver.on('msg', (msgType: string, msgView: MsgView) => {\n resolve(msgView.clone())\n })\n t.receiver.on('error', (e) => {\n reject(e)\n })\n })\n }\n\n protected async generate (): Promise<void> {\n const lipPath: string = path.join(this.root, 'data/examples/lipsum.txt')\n const words: string[] = await getWords(lipPath)\n const generator = new MessageGenerator(words, this.definitions)\n let density = 1\n if (argv.density) {\n density = parseFloat(argv.density)\n }\n if (isNaN(density)) {\n console.log('density must be numeric in range > 0 density <= 1.0')\n return\n }\n\n if (argv.script) {\n await this.script(generator, density)\n } else {\n await this.single(generator, density)\n }\n }\n\n private async single (generator: MessageGenerator, density: number): Promise<void> {\n if (!argv.type) {\n console.log('specify type to generate e.g. --type = AE')\n return\n }\n const msgType: string = `${argv.type}`\n let makeGroups: boolean = true\n if (argv.groups) {\n makeGroups = argv.groups === 'true'\n }\n const obj: ILooseObject = generator.generate(msgType, density, makeGroups)\n console.log(JSON.stringify(obj, null, 4))\n const fix: string = this.encodeObject(msgType, obj)\n const ft: MsgTransport = new MsgTransport(1, this.session.config, new StringDuplex(fix))\n if (argv.unit) {\n await this.unitTest(fix, obj, ft)\n } else {\n this.subscribe(ft)\n }\n }\n\n private async script (generator: MessageGenerator, density: number): Promise<void> {\n const buffer: ElasticBuffer = new ElasticBuffer()\n const repeats: number = argv.repeats || 50\n const key: string = MsgTag.MsgType.toString()\n const sf = this.definitions.simple.get(key)\n const session: AsciiMsgTransmitter = this.session\n for (let i = 0; i < repeats; ++i) {\n const msgType: string = sf ? MessageGenerator.getRandomEnum(sf).toString() : ''\n console.log(`i = ${i} ${msgType}`)\n const obj: ILooseObject = generator.generate(msgType, density)\n session.encodeMessage(msgType, obj)\n buffer.writeBuffer(session.buffer.slice())\n buffer.writeString(require('os').EOL)\n }\n await JsfixCmd.writeFile('./fix.txt', buffer.slice().toString('utf8'))\n }\n\n private async unitTest (fix: string, obj: ILooseObject, ft: MsgTransport): Promise<void> {\n const view: MsgView = await this.firstMessage(ft)\n const summary = view?.structure?.summary()\n\n await JsfixCmd.writeFile('./fix.txt', fix)\n await JsfixCmd.writeFile('./object.json', JSON.stringify(obj, null, 4))\n await JsfixCmd.writeFile('./token.txt', view.toString())\n await JsfixCmd.writeFile('./structure.json', JSON.stringify(summary, null, 4))\n }\n\n private encodeObject (msgType: string, object: ILooseObject): string {\n const session: AsciiMsgTransmitter = this.session\n session.encodeMessage(msgType, object)\n return session.buffer.toString()\n }\n\n private msg (): void {\n const definitions = this.definitions\n const m = definitions.message.get(argv.msg)\n if (m) {\n console.log(m.toString())\n }\n }\n\n private field (): void {\n let sf: SimpleFieldDefinition | undefined\n const tag: number = parseInt(argv.field, 10)\n const definitions = this.definitions\n if (!isNaN(tag)) {\n sf = definitions.tagToSimple[tag]\n } else {\n sf = definitions.simple.get(argv.field)\n }\n if (sf) {\n console.log(sf.toString())\n }\n }\n\n async ensureExists (path: string): Promise<any> {\n return await new Promise<any>((resolve, reject) => {\n fs.mkdirp(path, (err: Error) => {\n if (err) {\n reject(err)\n } else {\n resolve(true)\n }\n })\n })\n }\n\n private async compileDefinitions (outputPath: string): Promise<void> {\n await this.ensureExists(path.join(outputPath, 'set'))\n await this.ensureExists(path.join(outputPath, 'enum'))\n const definitions = this.definitions\n const compilerSettings: ICompilerSettings = require('../data/compiler.json')\n compilerSettings.output = outputPath\n const msgCompiler: MsgCompiler = new MsgCompiler(definitions, compilerSettings)\n await msgCompiler.generate()\n const enumCompiler: EnumCompiler = new EnumCompiler(definitions, compilerSettings)\n const writeFile = path.join(compilerSettings.output, './enum/all-enum.ts')\n await enumCompiler.generate(writeFile)\n }\n\n private trim (): string {\n this.setFilter()\n const types = this.filter.size > 0 ? Array.from(this.filter.keys()) : Array.from(this.definitions.simple.get('MsgType')?.enums.keys() ?? [])\n const qfb = new QuickFixXmlFileBuilder(this.definitions)\n qfb.write(types)\n return qfb.elasticBuffer.toString()\n }\n\n private async compile (): Promise<void> {\n let output = argv.output\n const dp = new DefinitionFactory().getDictPath(argv.dict)\n if (dp) {\n output = dp.output\n }\n output = path.join(this.root, output)\n await this.compileDefinitions(output)\n }\n\n sys: SessionContainer\n config: IJsFixConfig\n\n private async init (): Promise<any> {\n let session: string = argv.session || 'data/session/test-initiator.json'\n this.sys = new SessionContainer()\n this.sys.registerGlobal('error')\n session = this.norm(session)\n this.sessionDescription = require(session)\n const container = await this.sys.makeSystem(this.sessionDescription)\n this.config = container.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n this.definitions = this.config.definitions\n let dict: string\n if (argv.dict) {\n dict = argv.dict\n const df = await new DefinitionFactory().getDefinitions(dict)\n this.config.definitions = df\n this.definitions = df\n }\n const definitions = this.definitions\n if (argv.delimiter) {\n this.delimiter = AsciiChars.firstChar(argv.delimiter)\n this.config.delimiter = this.delimiter\n }\n this.jsonHelper = new JsonHelper(definitions)\n if (argv.session) {\n this.session = container.resolve<AsciiMsgTransmitter>(DITokens.MsgTransmitter)\n }\n }\n\n private setFilter (): void {\n const types: string[] = []\n if (argv.type != null) {\n if (Array.isArray(argv.type)) {\n argv.type.forEach((mt: any) => {\n types.push(mt)\n })\n } else {\n argv.type.split(',').forEach((mt: string) => {\n types.push(mt)\n })\n }\n types.forEach((mt: any) => {\n this.filter.set(mt, true)\n })\n }\n }\n\n private async dispatch (ft: MsgTransport): Promise<any> {\n this.setFilter()\n let time: boolean = false\n if (argv.time || argv.stats) {\n this.print = false\n time = true\n }\n this.subscribe(ft)\n const startsAt: Date = new Date()\n await ft.wait()\n const elapsed: number = new Date().getTime() - startsAt.getTime()\n if (time) {\n console.log(`messages ${this.messages} elapsed ms ${elapsed}`)\n }\n if (argv.stats) {\n console.log(JSON.stringify(this.stats, null, 4))\n }\n }\n\n private subscribe (ft: MsgTransport): void {\n this.messages = 0\n this.stats = {}\n const filter = this.filter\n // the receiver is message parser which is piped from an input stream - file, socket\n ft.receiver.on('msg', (msgType: string, m: AsciiView) => {\n if (filter) {\n if (filter.has(msgType)) {\n return\n }\n }\n ++this.messages\n this.onMsg(msgType, m)\n })\n }\n\n private onMsg (msgType: string, m: MsgView): void {\n const mode: PrintMode = JsfixCmd.getPrintMode()\n const print = this.print\n const stats = this.stats\n switch (mode) {\n case PrintMode.Stats: {\n let i: number = 0\n if (!stats[msgType]) {\n i = 1\n } else {\n i = stats[msgType] as number + 1\n }\n stats[msgType] = i\n break\n }\n\n case PrintMode.Verbose: {\n const verbose = m.toVerbose()\n if (verbose) {\n console.log(verbose)\n }\n break\n }\n\n case PrintMode.Object: {\n const asObject: ILooseObject = m.toObject() as ILooseObject\n if (print) {\n const def = this.definitions.message.get(msgType)\n console.log(`${msgType} [${def?.name}] = ${JSON.stringify(asObject, null, 4)}`)\n console.log()\n }\n break\n }\n\n case PrintMode.Structure: {\n const summary = m?.structure?.summary()\n if (print) {\n console.log(JSON.stringify(summary, null, 4))\n }\n break\n }\n\n case PrintMode.Token: {\n const tokens = m.toString()\n if (print) {\n console.log(tokens)\n }\n break\n }\n\n case PrintMode.Encoded: {\n const fix: string = this.encodeObject(msgType, m.toObject() as ILooseObject)\n console.log(fix)\n break\n }\n\n default:\n throw new Error(`unknown mode ${mode}`)\n }\n }\n\n private async replay (): Promise<any> {\n if (!argv.fix) {\n console.log('provide a path to fix file i.e. --fix=data/examples/execution-report/fix.txt')\n return\n }\n const fix: string = this.norm(argv.fix)\n const config = this.config\n const ft: MsgTransport = new MsgTransport(1, config, new FileDuplex(fix))\n await this.dispatch(ft)\n }\n\n private async promisedRead (f: string): Promise<string> {\n return new Promise((resolve, reject) => {\n fs.readFile(f, 'utf8', async (err: Error, contents: string) => {\n if (err) {\n reject(err)\n }\n resolve(contents)\n })\n })\n }\n\n async benchParse (contents: string, iterations: number): Promise<ParseSummary> {\n return new Promise((resolve, reject) => {\n const toParse = new StringDuplex(contents.repeat(iterations))\n const startsAt: Date = new Date()\n let i = 0\n const config = this.config\n const buffer = config.sessionContainer.resolve<ElasticBuffer>(DITokens.ParseBuffer)\n const asciiParser: MsgParser = new AsciiParser(config, toParse.readable, buffer)\n asciiParser.on('msg', (msgType: string, v: MsgView) => {\n ++i\n if (i === iterations) {\n const elapsed: number = new Date().getTime() - startsAt.getTime()\n const fields = v?.structure?.tags.nextTagPos ?? 0\n const summary = new ParseSummary(contents, v.toString(), msgType, iterations, elapsed, fields)\n resolve(summary)\n }\n })\n asciiParser.on('error', e => {\n reject(e)\n })\n })\n }\n\n private async benchmark (repeats: number): Promise<(ParseSummary | null)> {\n if (!argv.fix) {\n console.log('provide a path to fix file i.e. --fix=data/examples/execution-report/fix.txt')\n return null\n }\n return await new Promise<any>((resolve, reject) => {\n const fix: string = this.norm(argv.fix)\n this.promisedRead(fix)\n .then(contents => {\n this.benchParse(contents, repeats)\n .then((a: ParseSummary) => {\n resolve(a)\n })\n .catch(e => { reject(e) })\n }).catch(e => {\n reject(e)\n })\n })\n }\n\n private encode (): void {\n const session: AsciiMsgTransmitter = this.session\n if (!session) {\n console.log('provide a session json file e.g. --session=data/session/test-initiator.json')\n return\n }\n if (!argv.type) {\n console.log('provide a message type e.g. --type=8')\n return\n }\n if (!argv.json) {\n console.log('provide a json representation e.g. data/examples/execution-report/object.json')\n return\n }\n const ts: string = argv.type.toString()\n const msg: ILooseObject = this.jsonHelper.fromJson(path.join(this.root, argv.json), ts)\n session.encodeMessage(ts, msg)\n const fix: string = session.buffer.toString()\n console.log(fix)\n }\n\n private norm (p: string): string {\n let f: string = p\n if (!path.isAbsolute(p)) {\n f = path.join(this.root, f)\n }\n return f\n }\n}\n\nfunction showHelp (): void {\n console.log('this help page')\n console.log('npm run cmd')\n console.log('npm run cmd -- --help')\n console.log()\n\n console.log('print to console a trim quickfix format xml only including given message types')\n console.log('node dist/jsfix-cmd --dict=qf44 --trim --type=\"0,1,2,3,4,5,AE\"')\n\n console.log('token format i.e. [602] 687 (LegQty) = 33589')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/quickfix/FIX.4.4/execution-report/fix.txt --delimiter=\"|\" --tokens')\n console.log()\n\n console.log('token format use fix repo dictionary')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --fix=data/examples/quickfix/FIX.4.4/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens')\n console.log()\n\n console.log('structure format i.e. show locations of components etc.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --structures')\n console.log()\n\n console.log('full JS object in JSON format.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --objects')\n console.log()\n\n console.log('full JS object in JSON format - filter only type messages.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --type=8 --objects')\n console.log()\n\n console.log('timing stats and message counts. Structured parsing of all messages.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt --stats')\n console.log()\n\n console.log('encode a json object to fix format')\n console.log('node dist/jsfix-cmd --json=data/examples/FIX.4.4/quickfix/execution-report/object.json' +\n ' --session=data/session.json --type=8 --delimiter=\"|\"')\n console.log()\n\n console.log('display field definition')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --field=MsgType|35')\n console.log()\n\n console.log('display field use fix repo dictionary e.g. 271 MDEntrySize QTY Quantity or volume represented by the Market Data Entry.')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --field=MsgType')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --field=35')\n console.log()\n\n console.log('script to describe field in repository version 4.4')\n console.log('npm run repo44 -- --field=8')\n console.log()\n\n console.log('script to describe field in fixml')\n console.log('npm run fixml -- --field=50')\n console.log()\n\n console.log('generate unit test set of files - i.e. randomly generate an object, encode to fix. density 1 is all fields')\n console.log('node dist/jsfix-cmd --generate --type=AE --density=0.8 --unit --delimiter=\"|\" --session=data/session/test-initiator.json')\n console.log('npm run repo44-unit -- --type=AE')\n console.log('test script with no repeat groups')\n console.log('npm run repo44-unit -- --type=AE --groups=false')\n console.log()\n\n console.log('generate a fix log of randomly generated but syntactically correct messages')\n console.log('node dist/jsfix-cmd --generate --density=0.8 --repeats=50 --script --delimiter=\"|\" --session=data/session/test-initiator.json')\n console.log('npm run repo44-script')\n console.log('parse above generated script')\n console.log('npm run repo44-repscr')\n console.log()\n\n console.log('replay example repo fix file of 50 messages.')\n console.log('node dist/jsfix-cmd --session=data/session/test-initiator.json --fix=data/examples/FIX.4.4/fix.txt --delimiter=\"|\" --stats')\n console.log('npm run repo44-replay -- --stats')\n console.log('npm run repo44-replay -- --objects')\n console.log('npm run repo44-replay -- --tokens')\n console.log('npm run repo44-replay -- --structures')\n console.log()\n\n console.log('benchmark parse a message')\n console.log('node dist/jsfix-cmd --delimiter=\"|\" --session=data/session/test-initiator.json --fix=data/examples/FIX.4.4/repo/trade-capture-no-groups/fix.txt --benchmark')\n console.log('npm run repo44-bench -- --fix=data/examples/FIX.4.4/repo/trade-capture-no-groups/fix.txt')\n console.log()\n\n console.log('compile typescript interfaces - i.e. outputs to src/types/FIX4.4 - requires set and enum sub folders')\n console.log('npm run cmd -- --dict=repo40 --compile')\n console.log('npm run cmd -- --dict=repo41 --compile')\n console.log('npm run cmd -- --dict=repo42 --compile')\n console.log('npm run cmd -- --dict=repo43 --compile')\n console.log('npm run cmd -- --dict=repo44 --compile')\n console.log('npm run cmd -- --dict=repo50 --compile')\n console.log('npm run cmd -- --dict=repo50sp1 --compile')\n console.log('npm run cmd -- --dict=repo50sp2 --compile')\n console.log('npm run cmd -- --dict=repofixml --compile')\n console.log('npm run cmd -- --dict=qf44 --compile')\n console.log('npm run cmd -- --dict=data/handmade.xml --compile --output=src/types/handmade')\n\n console.log()\n}\n\nconst help: boolean = argv.h || argv.help\nif (help) {\n showHelp()\n} else {\n const cmd: JsfixCmd = new JsfixCmd()\n cmd.exec().then((res: boolean) => {\n if (!res) {\n showHelp()\n }\n }).catch((e: Error) => {\n console.error(e)\n })\n}\n"]}
1
+ {"version":3,"file":"jsfix-cmd.js","sourceRoot":"","sources":["../src/jsfix-cmd.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAAyB;AAEzB,qCAA4D;AAC5D,0CAAmE;AAGnE,iCAAkF;AAClF,2CAA2E;AAE3E,mCAAgC;AAGhC,2CAA4B;AAC5B,qCAAqC;AACrC,2CAA4B;AAC5B,iDAAkD;AAClD,oDAAoF;AAEpF,uCAA4C;AAC5C,mDAA8C;AAC9C,wEAA2C;AAC3C,wGAAgG;AAEhG,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;AAEnC,MAAM,OAAO,GAAG,IAAA,0BAAY,EAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,gBAAgB;KAC1B;IAED,IAAI,EAAE;QACJ,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,GAAG;KACX;IAED,GAAG,EAAE;QACH,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,gBAAgB;KAC1B;IAED,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;KACX;IAED,SAAS,EAAE;QACT,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,GAAG;KACb;IAED,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,OAAO,EAAE,KAAK;KACf;IAED,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,OAAO,EAAE,KAAK;KACf;IAED,QAAQ,EAAE;QACR,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,OAAO,EAAE,KAAK;KACf;IAED,KAAK,EAAE;QACL,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,IAAI,CAAC;QACb,OAAO,EAAE,KAAK;KACf;IAED,MAAM,EAAE;QACN,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,OAAO,EAAE,KAAK;KACf;IAED,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,OAAO,EAAE,IAAI;KACd;IAED,UAAU,EAAE;QACV,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,OAAO,EAAE,KAAK;KACf;IAED,MAAM,EAAE;QACN,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,OAAO,EAAE,KAAK;KACf;IAED,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,OAAO,EAAE,KAAK;KACf;IAED,MAAM,EAAE;QACN,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,GAAG,CAAC;QACZ,OAAO,EAAE,IAAI;KACd;IAED,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,GAAG;KACb;IAED,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,CAAC;KACX;IAED,GAAG,EAAE;QACH,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,EAAE;KACZ;CAoBF,CAAC,CAAA;AAEF,MAAM,IAAI,GAAQ,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AAE1D,IAAK,SAOJ;AAPD,WAAK,SAAS;IACZ,mDAAa,CAAA;IACb,6CAAU,CAAA;IACV,+CAAW,CAAA;IACX,2CAAS,CAAA;IACT,2CAAS,CAAA;IACT,+CAAW,CAAA;AACb,CAAC,EAPI,SAAS,KAAT,SAAS,QAOb;AAED,IAAK,OASJ;AATD,WAAK,OAAO;IACV,6CAAY,CAAA;IACZ,yCAAU,CAAA;IACV,yCAAU,CAAA;IACV,yCAAU,CAAA;IACV,+CAAa,CAAA;IACb,2CAAW,CAAA;IACX,qCAAI,CAAA;IACJ,2CAAW,CAAA;AACb,CAAC,EATI,OAAO,KAAP,OAAO,QASX;AAED,MAAM,YAAY;IAMhB,YACkB,OAAe,EACf,IAAY,EACZ,QAAgB,EAChB,UAAkB,EAClB,UAAkB,EAClB,MAAc;QALd,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAQ;QAClB,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAQ;QAE9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;QACzC,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;QAChE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;QAClG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IAC7F,CAAC;CACF;AAED,MAAa,QAAQ;IAArB;QACmB,SAAI,GAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAKnD,cAAS,GAAW,kBAAU,CAAC,GAAG,CAAA;QAClC,UAAK,GAAiB,EAAE,CAAA;QACf,WAAM,GAAyB,IAAI,GAAG,EAAmB,CAAA;QAClE,aAAQ,GAAW,CAAC,CAAA;QACpB,UAAK,GAAY,IAAI,CAAA;IAkgB/B,CAAC;IAhgBS,MAAM,CAAC,UAAU;QACvB,IAAI,OAAO,GAAY,OAAO,CAAC,OAAO,CAAA;QACtC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAC3B,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAA;QAC5B,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACpB,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAA;QAC/D,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACpB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;QAC1B,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,MAAM,CAAC,YAAY;QACzB,IAAI,IAAI,GAAc,SAAS,CAAC,KAAK,CAAA;QACrC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,GAAG,SAAS,CAAC,KAAK,CAAA;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,GAAG,SAAS,CAAC,KAAK,CAAA;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,GAAG,SAAS,CAAC,MAAM,CAAA;QACzB,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,GAAG,SAAS,CAAC,OAAO,CAAA;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3B,IAAI,GAAG,SAAS,CAAC,SAAS,CAAA;QAC5B,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,GAAG,SAAS,CAAC,OAAO,CAAA;QAC1B,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,GAAG,SAAS,CAAC,MAAM,CAAA;QACzB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,MAAM,CAAO,SAAS,CAAE,IAAY,EAAE,GAAW;;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;YAC3C,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAC3C,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;gBACnB,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEY,IAAI;;YACf,OAAO,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAChD,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAS,EAAE;oBAC1B,IAAI,QAAQ,GAAY,IAAI,CAAA;oBAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAA;oBAErC,QAAQ,OAAO,EAAE,CAAC;wBAChB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;4BAEtB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;4BACrB,MAAK;wBACP,CAAC;wBAED,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;4BAEpB,IAAI,CAAC,MAAM,EAAE,CAAA;4BACb,MAAK;wBACP,CAAC;wBAED,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;4BAEpB,MAAM,OAAO,GAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;4BAC/D,IAAI,CAAC;gCACH,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;oCACzC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;gCACrB,CAAC;4BACH,CAAC;4BAAC,OAAO,CAAC,EAAE,CAAC;gCACX,MAAM,CAAC,CAAC,CAAC,CAAA;4BACX,CAAC;4BACD,MAAK;wBACP,CAAC;wBAED,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;4BAEvB,MAAM,OAAO,GAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;4BACnE,IAAI,CAAC;gCACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;gCAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;4BAC/C,CAAC;4BAAC,OAAO,CAAC,EAAE,CAAC;gCACX,MAAM,CAAC,CAAC,CAAC,CAAA;4BACX,CAAC;4BACD,MAAK;wBACP,CAAC;wBAED,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;4BAEpB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gCACf,IAAI,CAAC,KAAK,EAAE,CAAA;4BACd,CAAC;iCAAM,CAAC;gCACN,IAAI,CAAC,GAAG,EAAE,CAAA;4BACZ,CAAC;4BACD,MAAK;wBACP,CAAC;wBAED,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;4BACrB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;4BACpB,MAAK;wBACP,CAAC;wBAED,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;4BAClB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;4BACvB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;4BAChB,MAAK;wBACP,CAAC;wBAED,KAAK,OAAO,CAAC,OAAO,CAAC;wBACrB,OAAO,CAAC,CAAC,CAAC;4BACR,QAAQ,GAAG,KAAK,CAAA;wBAClB,CAAC;oBACH,CAAC;oBACD,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACnB,CAAC,CAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACb,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEa,YAAY,CAAE,CAAe;;YACzC,OAAO,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACpD,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAe,EAAE,OAAgB,EAAE,EAAE;oBACzD,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC1B,CAAC,CAAC,CAAA;gBACF,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC3B,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEe,QAAQ;;YACtB,MAAM,OAAO,GAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAA;YACxE,MAAM,KAAK,GAAa,MAAM,IAAA,eAAQ,EAAC,OAAO,CAAC,CAAA;YAC/C,MAAM,SAAS,GAAG,IAAI,uBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YAC/D,IAAI,OAAO,GAAG,CAAC,CAAA;YACf,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACpC,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAA;gBAClE,OAAM;YACR,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;KAAA;IAEa,MAAM,CAAE,SAA2B,EAAE,OAAe;;YAChE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;gBACxD,OAAM;YACR,CAAC;YACD,MAAM,OAAO,GAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;YACtC,IAAI,UAAU,GAAY,IAAI,CAAA;YAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAA;YACrC,CAAC;YACD,MAAM,GAAG,GAAiB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;YAC1E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YACzC,MAAM,GAAG,GAAW,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;YACnD,MAAM,EAAE,GAAiB,IAAI,sBAAY,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,wBAAY,CAAC,GAAG,CAAC,CAAC,CAAA;YACxF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;YACnC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;KAAA;IAEa,MAAM,CAAE,SAA2B,EAAE,OAAe;;YAChE,MAAM,MAAM,GAAkB,IAAI,sBAAa,EAAE,CAAA;YACjD,MAAM,OAAO,GAAW,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;YAC1C,MAAM,GAAG,GAAW,cAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;YAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC3C,MAAM,OAAO,GAAwB,IAAI,CAAC,OAAO,CAAA;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAW,EAAE,CAAC,CAAC,CAAC,uBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC/E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC,CAAA;gBAClC,MAAM,GAAG,GAAiB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBAC9D,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;gBACnC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;gBAC1C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;YACvC,CAAC;YACD,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QACxE,CAAC;KAAA;IAEa,QAAQ,CAAE,GAAW,EAAE,GAAiB,EAAE,EAAgB;;;YACtE,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;YACjD,MAAM,OAAO,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,0CAAE,OAAO,EAAE,CAAA;YAE1C,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;YAC1C,MAAM,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YACvE,MAAM,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;YACxD,MAAM,QAAQ,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAChF,CAAC;KAAA;IAEO,YAAY,CAAE,OAAe,EAAE,MAAoB;QACzD,MAAM,OAAO,GAAwB,IAAI,CAAC,OAAO,CAAA;QACjD,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACtC,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IAClC,CAAC;IAEO,GAAG;QACT,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,EAAE,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK;QACX,IAAI,EAAqC,CAAA;QACzC,MAAM,GAAG,GAAW,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACnC,CAAC;aAAM,CAAC;YACN,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACzC,CAAC;QACD,IAAI,EAAE,EAAE,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAEK,YAAY,CAAE,IAAY;;YAC9B,OAAO,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAChD,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAU,EAAE,EAAE;oBAC7B,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,CAAC,GAAG,CAAC,CAAA;oBACb,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC,CAAA;oBACf,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEa,kBAAkB,CAAE,UAAkB;;YAClD,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAA;YACrD,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;YACtD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;YACpC,MAAM,gBAAgB,GAAsB,OAAO,CAAC,uBAAuB,CAAC,CAAA;YAC5E,gBAAgB,CAAC,MAAM,GAAG,UAAU,CAAA;YACpC,MAAM,WAAW,GAAgB,IAAI,sBAAW,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;YAC/E,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAA;YAC5B,MAAM,YAAY,GAAiB,IAAI,uBAAY,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;YAClF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;YAC1E,MAAM,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC;KAAA;IAEO,IAAI;;QACV,IAAI,CAAC,SAAS,EAAE,CAAA;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAA,MAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,0CAAE,KAAK,CAAC,IAAI,EAAE,mCAAI,EAAE,CAAC,CAAA;QAC5I,MAAM,GAAG,GAAG,IAAI,mDAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACxD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAChB,OAAO,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAA;IACrC,CAAC;IAEa,OAAO;;YACnB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YACxB,MAAM,EAAE,GAAG,IAAI,wBAAiB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzD,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,GAAG,EAAE,CAAC,MAAM,CAAA;YACpB,CAAC;YACD,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YACrC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QACvC,CAAC;KAAA;IAKa,IAAI;;YAChB,IAAI,OAAO,GAAW,IAAI,CAAC,OAAO,IAAI,kCAAkC,CAAA;YACxE,IAAI,CAAC,GAAG,GAAG,IAAI,0BAAgB,EAAE,CAAA;YACjC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YAChC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC5B,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;YAC1C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;YACpE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAe,oBAAQ,CAAC,YAAY,CAAC,CAAA;YACpE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA;YAC1C,IAAI,IAAY,CAAA;YAChB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;gBAChB,MAAM,EAAE,GAAG,MAAM,IAAI,wBAAiB,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;gBAC7D,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAA;gBAC5B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;YACvB,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;YACpC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,GAAG,kBAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBACrD,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;YACxC,CAAC;YACD,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAU,CAAC,WAAW,CAAC,CAAA;YAC7C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAsB,oBAAQ,CAAC,cAAc,CAAC,CAAA;YAChF,CAAC;QACH,CAAC;KAAA;IAEO,SAAS;QACf,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;oBAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAChB,CAAC,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE;oBAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAChB,CAAC,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;gBACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YAC3B,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAEa,QAAQ,CAAE,EAAgB;;YACtC,IAAI,CAAC,SAAS,EAAE,CAAA;YAChB,IAAI,IAAI,GAAY,KAAK,CAAA;YACzB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;gBAClB,IAAI,GAAG,IAAI,CAAA;YACb,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YAClB,MAAM,QAAQ,GAAS,IAAI,IAAI,EAAE,CAAA;YACjC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;YACf,MAAM,OAAO,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAA;YACjE,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,QAAQ,eAAe,OAAO,EAAE,CAAC,CAAA;YAChE,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAClD,CAAC;QACH,CAAC;KAAA;IAEO,SAAS,CAAE,EAAgB;QACjC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAE1B,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAe,EAAE,CAAY,EAAE,EAAE;YACtD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxB,OAAM;gBACR,CAAC;YACH,CAAC;YACD,EAAE,IAAI,CAAC,QAAQ,CAAA;YACf,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAE,OAAe,EAAE,CAAU;;QACxC,MAAM,IAAI,GAAc,QAAQ,CAAC,YAAY,EAAE,CAAA;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,GAAW,CAAC,CAAA;gBACjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBACpB,CAAC,GAAG,CAAC,CAAA;gBACP,CAAC;qBAAM,CAAC;oBACN,CAAC,GAAG,KAAK,CAAC,OAAO,CAAW,GAAG,CAAC,CAAA;gBAClC,CAAC;gBACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBAClB,MAAK;YACP,CAAC;YAED,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBACvB,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,EAAE,CAAA;gBAC7B,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACtB,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtB,MAAM,QAAQ,GAAiB,CAAC,CAAC,QAAQ,EAAkB,CAAA;gBAC3D,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oBACjD,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;oBAC/E,OAAO,CAAC,GAAG,EAAE,CAAA;gBACf,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzB,MAAM,OAAO,GAAG,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,SAAS,0CAAE,OAAO,EAAE,CAAA;gBACvC,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC/C,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrB,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAC3B,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACrB,CAAC;gBACD,MAAK;YACP,CAAC;YAED,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBACvB,MAAM,GAAG,GAAW,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAkB,CAAC,CAAA;gBAC5E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAChB,MAAK;YACP,CAAC;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAEa,MAAM;;YAClB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAA;gBAC3F,OAAM;YACR,CAAC;YACD,MAAM,GAAG,GAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YAC1B,MAAM,EAAE,GAAiB,IAAI,sBAAY,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,sBAAU,CAAC,GAAG,CAAC,CAAC,CAAA;YACzE,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACzB,CAAC;KAAA;IAEa,YAAY,CAAE,CAAS;;YACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAO,GAAU,EAAE,QAAgB,EAAE,EAAE;oBAC5D,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,CAAC,GAAG,CAAC,CAAA;oBACb,CAAC;oBACD,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACnB,CAAC,CAAA,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEK,UAAU,CAAE,QAAgB,EAAE,UAAkB;;YACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,OAAO,GAAG,IAAI,wBAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA;gBAC7D,MAAM,QAAQ,GAAS,IAAI,IAAI,EAAE,CAAA;gBACjC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACT,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;gBAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAgB,oBAAQ,CAAC,WAAW,CAAC,CAAA;gBACnF,MAAM,WAAW,GAAc,IAAI,mBAAW,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBAChF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAe,EAAE,CAAU,EAAE,EAAE;;oBACpD,EAAE,CAAC,CAAA;oBACH,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;wBACrB,MAAM,OAAO,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAA;wBACjE,MAAM,MAAM,GAAG,MAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,SAAS,0CAAE,IAAI,CAAC,UAAU,mCAAI,CAAC,CAAA;wBACjD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;wBAC9F,OAAO,CAAC,OAAO,CAAC,CAAA;oBAClB,CAAC;gBACH,CAAC,CAAC,CAAA;gBACF,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE;oBAC1B,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEa,SAAS,CAAE,OAAe;;YACtC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAA;gBAC3F,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAChD,MAAM,GAAG,GAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACvC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;qBACnB,IAAI,CAAC,QAAQ,CAAC,EAAE;oBACf,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC;yBAC/B,IAAI,CAAC,CAAC,CAAe,EAAE,EAAE;wBACxB,OAAO,CAAC,CAAC,CAAC,CAAA;oBACZ,CAAC,CAAC;yBACD,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;gBAC9B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBACX,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEO,MAAM;QACZ,MAAM,OAAO,GAAwB,IAAI,CAAC,OAAO,CAAA;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAA;YAC1F,OAAM;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;YACnD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAA;YAC5F,OAAM;QACR,CAAC;QACD,MAAM,EAAE,GAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;QACvC,MAAM,GAAG,GAAiB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QACvF,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAC9B,MAAM,GAAG,GAAW,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;QAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IAEO,IAAI,CAAE,CAAS;QACrB,IAAI,CAAC,GAAW,CAAC,CAAA;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC7B,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;CACF;AA5gBD,4BA4gBC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IAC1B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAA;IAC7F,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAA;IAE9E,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;IAC3D,OAAO,CAAC,GAAG,CAAC,kIAAkI,CAAC,CAAA;IAC/I,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;IACnD,OAAO,CAAC,GAAG,CAAC,qHAAqH;QAC/H,2BAA2B,CAAC,CAAA;IAC9B,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAA;IACtE,OAAO,CAAC,GAAG,CAAC,yGAAyG;QACnH,wCAAwC,CAAC,CAAA;IAC3C,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,yGAAyG;QACnH,qCAAqC,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;IACzE,OAAO,CAAC,GAAG,CAAC,yGAAyG;QACnH,8CAA8C,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAA;IACnF,OAAO,CAAC,GAAG,CAAC,iHAAiH,CAAC,CAAA;IAC9H,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CAAC,wFAAwF;QAClG,uDAAuD,CAAC,CAAA;IAC1D,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;IAC3E,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,yHAAyH,CAAC,CAAA;IACtI,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAA;IACpF,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAA;IAC/E,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAA;IACjE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;IAC1C,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;IAC1C,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,4GAA4G,CAAC,CAAA;IACzH,OAAO,CAAC,GAAG,CAAC,0HAA0H,CAAC,CAAA;IACvI,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;IAC/C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAA;IAC1F,OAAO,CAAC,GAAG,CAAC,+HAA+H,CAAC,CAAA;IAC5I,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;IAC3C,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IACpC,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;IAC3D,OAAO,CAAC,GAAG,CAAC,4HAA4H,CAAC,CAAA;IACzI,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;IAC/C,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;IAChD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;IACpD,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,6JAA6J,CAAC,CAAA;IAC1K,OAAO,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAA;IACvG,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,OAAO,CAAC,GAAG,CAAC,sGAAsG,CAAC,CAAA;IACnH,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;IACxD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;IACxD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;IACxD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;IACnD,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAA;IAE5F,OAAO,CAAC,GAAG,EAAE,CAAA;AACf,CAAC;AAED,MAAM,IAAI,GAAY,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAA;AACzC,IAAI,IAAI,EAAE,CAAC;IACT,QAAQ,EAAE,CAAA;AACZ,CAAC;KAAM,CAAC;IACN,MAAM,GAAG,GAAa,IAAI,QAAQ,EAAE,CAAA;IACpC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,GAAY,EAAE,EAAE;QAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,QAAQ,EAAE,CAAA;QACZ,CAAC;IACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import 'reflect-metadata'\n\nimport { ElasticBuffer, MsgView, MsgParser } from './buffer'\nimport { AsciiParser, AsciiView, AsciiChars } from './buffer/ascii'\nimport { ILooseObject } from './collections/collection'\nimport { SimpleFieldDefinition, FixDefinitions } from './dictionary/definition'\nimport { MessageGenerator, JsonHelper, getWords, DefinitionFactory } from './util'\nimport { ISessionDescription, FileDuplex, StringDuplex } from './transport'\n\nimport { MsgTag } from './types'\nimport { IJsFixConfig } from './config'\n\nimport * as util from 'util'\nimport minimist = require('minimist')\nimport * as path from 'path'\nimport { MsgTransport } from './transport/factory'\nimport { EnumCompiler, ICompilerSettings, MsgCompiler } from './dictionary/compiler'\nimport { AsciiMsgTransmitter } from './transport/ascii/ascii-msg-transmitter'\nimport { SessionContainer } from './runtime'\nimport { DITokens } from './runtime/di-tokens'\nimport buildOptions from 'minimist-options'\nimport { QuickFixXmlFileBuilder } from './dictionary/parser/quickfix/quick-fix-xml-file-builder'\n\nconst fs = require('node-fs-extra')\n\nconst options = buildOptions({\n dict: {\n type: 'string',\n alias: 'd',\n default: 'data/FIX44.xml'\n },\n\n type: {\n type: 'string-array',\n alias: 't'\n },\n\n fix: {\n type: 'string',\n alias: 'f',\n default: 'data/FIX44.xml'\n },\n\n session: {\n type: 'string',\n alias: 's'\n },\n\n delimiter: {\n type: 'string',\n alias: 'l',\n default: '|'\n },\n\n help: {\n type: 'boolean',\n alias: ['h'],\n default: false\n },\n\n unit: {\n type: 'boolean',\n alias: ['u'],\n default: false\n },\n\n generate: {\n type: 'boolean',\n alias: ['g'],\n default: false\n },\n\n stats: {\n type: 'boolean',\n alias: ['st'],\n default: false\n },\n\n tokens: {\n type: 'boolean',\n alias: ['t'],\n default: false\n },\n\n objects: {\n type: 'boolean',\n alias: ['o'],\n default: true\n },\n\n structures: {\n type: 'boolean',\n alias: ['r'],\n default: false\n },\n\n script: {\n type: 'boolean',\n alias: ['i'],\n default: false\n },\n\n compile: {\n type: 'boolean',\n alias: ['c'],\n default: false\n },\n\n groups: {\n type: 'boolean',\n alias: ['g'],\n default: true\n },\n\n density: {\n type: 'number',\n alias: 'd',\n default: 0.8\n },\n\n repeats: {\n type: 'number',\n alias: 'r',\n default: 1\n },\n\n arr: {\n type: 'array',\n alias: 'a',\n default: []\n }\n\n /*\n booleans: {\n type: 'boolean-array',\n alias: 'b',\n default: [true, false]\n },\n\n numbers: {\n type: 'number-array',\n alias: 'n',\n default: [0, 1]\n },\n\n published: 'boolean',\n\n // Special option for positional arguments (`_` in minimist)\n arguments: 'string'\n */\n})\n\nconst argv: any = minimist(process.argv.slice(2), options)\n\nenum PrintMode {\n Structure = 1,\n Object = 2,\n Verbose = 3,\n Stats = 4,\n Token = 5,\n Encoded = 6\n}\n\nenum Command {\n Generate = 1,\n Replay = 2,\n Lookup = 3,\n Encode = 4,\n Benchmark = 5,\n Compile = 6,\n Trim,\n Unknown = 8\n}\n\nclass ParseSummary {\n public readonly micros_per_msg: number\n public readonly chars_per_second: number\n public readonly fields_per_second: number\n public readonly content_length: number\n\n constructor (\n public readonly content: string,\n public readonly view: string,\n public readonly msg_type: string,\n public readonly iterations: number,\n public readonly elapsed_ms: number,\n public readonly fields: number\n ) {\n this.content_length = this.content.length\n this.micros_per_msg = (this.elapsed_ms / this.iterations) * 1000\n this.chars_per_second = Math.round(this.content_length * this.iterations / this.elapsed_ms * 1000)\n this.fields_per_second = Math.round(this.fields * this.iterations / this.elapsed_ms * 1000)\n }\n}\n\nexport class JsfixCmd {\n private readonly root: string = path.join(__dirname, '../')\n private definitions: FixDefinitions\n private jsonHelper: JsonHelper\n private session: AsciiMsgTransmitter\n private sessionDescription: ISessionDescription\n private delimiter: number = AsciiChars.Soh\n private stats: ILooseObject = {}\n private readonly filter: Map<string, boolean> = new Map<string, boolean>()\n private messages: number = 0\n private print: boolean = true\n\n private static getCommand (): Command {\n let command: Command = Command.Unknown\n if (argv.trim) {\n command = Command.Trim\n } else if (argv.compile) {\n command = Command.Compile\n } else if (argv.generate) {\n command = Command.Generate\n } else if (argv.fix) {\n command = argv.benchmark ? Command.Benchmark : Command.Replay\n } else if (argv.field) {\n command = Command.Lookup\n } else if (argv.json) {\n command = Command.Encode\n } else if (argv.msg) {\n command = Command.Lookup\n }\n return command\n }\n\n private static getPrintMode (): PrintMode {\n let mode: PrintMode = PrintMode.Stats\n if (argv.tokens) {\n mode = PrintMode.Token\n } else if (argv.stats) {\n mode = PrintMode.Stats\n } else if (argv.objects) {\n mode = PrintMode.Object\n } else if (argv.verbose) {\n mode = PrintMode.Verbose\n } else if (argv.structures) {\n mode = PrintMode.Structure\n } else if (argv.encoded) {\n mode = PrintMode.Encoded\n } else if (argv.trim) {\n mode = PrintMode.Object\n }\n return mode\n }\n\n private static async writeFile (name: string, api: string): Promise<void> {\n const writer = util.promisify(fs.writeFile)\n await writer(name, api, { encoding: 'utf8' }\n ).catch((e: Error) => {\n throw e\n })\n }\n\n public async exec (): Promise<any> {\n return await new Promise<any>((resolve, reject) => {\n this.init().then(async () => {\n let actioned: boolean = true\n const command = JsfixCmd.getCommand()\n\n switch (command) {\n case Command.Generate: {\n // produce a test message or a valid fix log of n messages\n await this.generate()\n break\n }\n\n case Command.Encode: {\n // encode a json message back to fix\n this.encode()\n break\n }\n\n case Command.Replay: {\n // parse a file into either objects, tokens, structures or stats\n const repeats: number = !isNaN(argv.repeats) ? argv.repeats : 1\n try {\n for (let i: number = 0; i < repeats; ++i) {\n await this.replay()\n }\n } catch (e) {\n reject(e)\n }\n break\n }\n\n case Command.Benchmark: {\n // time how long to parse 10000 repeats of contents of file\n const repeats: number = !isNaN(argv.repeats) ? argv.repeats : 10000\n try {\n const summary = await this.benchmark(repeats)\n console.log(JSON.stringify(summary, null, 4))\n } catch (e) {\n reject(e)\n }\n break\n }\n\n case Command.Lookup: {\n // lookup a field\n if (argv.field) {\n this.field()\n } else {\n this.msg()\n }\n break\n }\n\n case Command.Compile: {\n await this.compile()\n break\n }\n\n case Command.Trim: {\n const xml = this.trim()\n console.log(xml)\n break\n }\n\n case Command.Unknown:\n default: {\n actioned = false\n }\n }\n resolve(actioned)\n }).catch((e) => {\n reject(e)\n })\n })\n }\n\n private async firstMessage (t: MsgTransport): Promise<MsgView> {\n return await new Promise<MsgView>((resolve, reject) => {\n t.receiver.on('msg', (msgType: string, msgView: MsgView) => {\n resolve(msgView.clone())\n })\n t.receiver.on('error', (e) => {\n reject(e)\n })\n })\n }\n\n protected async generate (): Promise<void> {\n const lipPath: string = path.join(this.root, 'data/examples/lipsum.txt')\n const words: string[] = await getWords(lipPath)\n const generator = new MessageGenerator(words, this.definitions)\n let density = 1\n if (argv.density) {\n density = parseFloat(argv.density)\n }\n if (isNaN(density)) {\n console.log('density must be numeric in range > 0 density <= 1.0')\n return\n }\n\n if (argv.script) {\n await this.script(generator, density)\n } else {\n await this.single(generator, density)\n }\n }\n\n private async single (generator: MessageGenerator, density: number): Promise<void> {\n if (!argv.type) {\n console.log('specify type to generate e.g. --type = AE')\n return\n }\n const msgType: string = `${argv.type}`\n let makeGroups: boolean = true\n if (argv.groups) {\n makeGroups = argv.groups === 'true'\n }\n const obj: ILooseObject = generator.generate(msgType, density, makeGroups)\n console.log(JSON.stringify(obj, null, 4))\n const fix: string = this.encodeObject(msgType, obj)\n const ft: MsgTransport = new MsgTransport(1, this.session.config, new StringDuplex(fix))\n if (argv.unit) {\n await this.unitTest(fix, obj, ft)\n } else {\n this.subscribe(ft)\n }\n }\n\n private async script (generator: MessageGenerator, density: number): Promise<void> {\n const buffer: ElasticBuffer = new ElasticBuffer()\n const repeats: number = argv.repeats || 50\n const key: string = MsgTag.MsgType.toString()\n const sf = this.definitions.simple.get(key)\n const session: AsciiMsgTransmitter = this.session\n for (let i = 0; i < repeats; ++i) {\n const msgType: string = sf ? MessageGenerator.getRandomEnum(sf).toString() : ''\n console.log(`i = ${i} ${msgType}`)\n const obj: ILooseObject = generator.generate(msgType, density)\n session.encodeMessage(msgType, obj)\n buffer.writeBuffer(session.buffer.slice())\n buffer.writeString(require('os').EOL)\n }\n await JsfixCmd.writeFile('./fix.txt', buffer.slice().toString('utf8'))\n }\n\n private async unitTest (fix: string, obj: ILooseObject, ft: MsgTransport): Promise<void> {\n const view: MsgView = await this.firstMessage(ft)\n const summary = view?.structure?.summary()\n\n await JsfixCmd.writeFile('./fix.txt', fix)\n await JsfixCmd.writeFile('./object.json', JSON.stringify(obj, null, 4))\n await JsfixCmd.writeFile('./token.txt', view.toString())\n await JsfixCmd.writeFile('./structure.json', JSON.stringify(summary, null, 4))\n }\n\n private encodeObject (msgType: string, object: ILooseObject): string {\n const session: AsciiMsgTransmitter = this.session\n session.encodeMessage(msgType, object)\n return session.buffer.toString()\n }\n\n private msg (): void {\n const definitions = this.definitions\n const m = definitions.message.get(argv.msg)\n if (m) {\n console.log(m.toString())\n }\n }\n\n private field (): void {\n let sf: SimpleFieldDefinition | undefined\n const tag: number = parseInt(argv.field, 10)\n const definitions = this.definitions\n if (!isNaN(tag)) {\n sf = definitions.tagToSimple[tag]\n } else {\n sf = definitions.simple.get(argv.field)\n }\n if (sf) {\n console.log(sf.toString())\n }\n }\n\n async ensureExists (path: string): Promise<any> {\n return await new Promise<any>((resolve, reject) => {\n fs.mkdirp(path, (err: Error) => {\n if (err) {\n reject(err)\n } else {\n resolve(true)\n }\n })\n })\n }\n\n private async compileDefinitions (outputPath: string): Promise<void> {\n await this.ensureExists(path.join(outputPath, 'set'))\n await this.ensureExists(path.join(outputPath, 'enum'))\n const definitions = this.definitions\n const compilerSettings: ICompilerSettings = require('../data/compiler.json')\n compilerSettings.output = outputPath\n const msgCompiler: MsgCompiler = new MsgCompiler(definitions, compilerSettings)\n await msgCompiler.generate()\n const enumCompiler: EnumCompiler = new EnumCompiler(definitions, compilerSettings)\n const writeFile = path.join(compilerSettings.output, './enum/all-enum.ts')\n await enumCompiler.generate(writeFile)\n }\n\n private trim (): string {\n this.setFilter()\n const types = this.filter.size > 0 ? Array.from(this.filter.keys()) : Array.from(this.definitions.simple.get('MsgType')?.enums.keys() ?? [])\n const qfb = new QuickFixXmlFileBuilder(this.definitions)\n qfb.write(types)\n return qfb.elasticBuffer.toString()\n }\n\n private async compile (): Promise<void> {\n let output = argv.output\n const dp = new DefinitionFactory().getDictPath(argv.dict)\n if (dp) {\n output = dp.output\n }\n output = path.join(this.root, output)\n await this.compileDefinitions(output)\n }\n\n sys: SessionContainer\n config: IJsFixConfig\n\n private async init (): Promise<any> {\n let session: string = argv.session || 'data/session/test-initiator.json'\n this.sys = new SessionContainer()\n this.sys.registerGlobal('error')\n session = this.norm(session)\n this.sessionDescription = require(session)\n const container = await this.sys.makeSystem(this.sessionDescription)\n this.config = container.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n this.definitions = this.config.definitions\n let dict: string\n if (argv.dict) {\n dict = argv.dict\n const df = await new DefinitionFactory().getDefinitions(dict)\n this.config.definitions = df\n this.definitions = df\n }\n const definitions = this.definitions\n if (argv.delimiter) {\n this.delimiter = AsciiChars.firstChar(argv.delimiter)\n this.config.delimiter = this.delimiter\n }\n this.jsonHelper = new JsonHelper(definitions)\n if (argv.session) {\n this.session = container.resolve<AsciiMsgTransmitter>(DITokens.MsgTransmitter)\n }\n }\n\n private setFilter (): void {\n const types: string[] = []\n if (argv.type != null) {\n if (Array.isArray(argv.type)) {\n argv.type.forEach((mt: any) => {\n types.push(mt)\n })\n } else {\n argv.type.split(',').forEach((mt: string) => {\n types.push(mt)\n })\n }\n types.forEach((mt: any) => {\n this.filter.set(mt, true)\n })\n }\n }\n\n private async dispatch (ft: MsgTransport): Promise<any> {\n this.setFilter()\n let time: boolean = false\n if (argv.time || argv.stats) {\n this.print = false\n time = true\n }\n this.subscribe(ft)\n const startsAt: Date = new Date()\n await ft.wait()\n const elapsed: number = new Date().getTime() - startsAt.getTime()\n if (time) {\n console.log(`messages ${this.messages} elapsed ms ${elapsed}`)\n }\n if (argv.stats) {\n console.log(JSON.stringify(this.stats, null, 4))\n }\n }\n\n private subscribe (ft: MsgTransport): void {\n this.messages = 0\n this.stats = {}\n const filter = this.filter\n // the receiver is message parser which is piped from an input stream - file, socket\n ft.receiver.on('msg', (msgType: string, m: AsciiView) => {\n if (filter) {\n if (filter.has(msgType)) {\n return\n }\n }\n ++this.messages\n this.onMsg(msgType, m)\n })\n }\n\n private onMsg (msgType: string, m: MsgView): void {\n const mode: PrintMode = JsfixCmd.getPrintMode()\n const print = this.print\n const stats = this.stats\n switch (mode) {\n case PrintMode.Stats: {\n let i: number = 0\n if (!stats[msgType]) {\n i = 1\n } else {\n i = stats[msgType] as number + 1\n }\n stats[msgType] = i\n break\n }\n\n case PrintMode.Verbose: {\n const verbose = m.toVerbose()\n if (verbose) {\n console.log(verbose)\n }\n break\n }\n\n case PrintMode.Object: {\n const asObject: ILooseObject = m.toObject() as ILooseObject\n if (print) {\n const def = this.definitions.message.get(msgType)\n console.log(`${msgType} [${def?.name}] = ${JSON.stringify(asObject, null, 4)}`)\n console.log()\n }\n break\n }\n\n case PrintMode.Structure: {\n const summary = m?.structure?.summary()\n if (print) {\n console.log(JSON.stringify(summary, null, 4))\n }\n break\n }\n\n case PrintMode.Token: {\n const tokens = m.toString()\n if (print) {\n console.log(tokens)\n }\n break\n }\n\n case PrintMode.Encoded: {\n const fix: string = this.encodeObject(msgType, m.toObject() as ILooseObject)\n console.log(fix)\n break\n }\n\n default:\n throw new Error(`unknown mode ${mode}`)\n }\n }\n\n private async replay (): Promise<any> {\n if (!argv.fix) {\n console.log('provide a path to fix file i.e. --fix=data/examples/execution-report/fix.txt')\n return\n }\n const fix: string = this.norm(argv.fix)\n const config = this.config\n const ft: MsgTransport = new MsgTransport(1, config, new FileDuplex(fix))\n await this.dispatch(ft)\n }\n\n private async promisedRead (f: string): Promise<string> {\n return new Promise((resolve, reject) => {\n fs.readFile(f, 'utf8', async (err: Error, contents: string) => {\n if (err) {\n reject(err)\n }\n resolve(contents)\n })\n })\n }\n\n async benchParse (contents: string, iterations: number): Promise<ParseSummary> {\n return new Promise((resolve, reject) => {\n const toParse = new StringDuplex(contents.repeat(iterations))\n const startsAt: Date = new Date()\n let i = 0\n const config = this.config\n const buffer = config.sessionContainer.resolve<ElasticBuffer>(DITokens.ParseBuffer)\n const asciiParser: MsgParser = new AsciiParser(config, toParse.readable, buffer)\n asciiParser.on('msg', (msgType: string, v: MsgView) => {\n ++i\n if (i === iterations) {\n const elapsed: number = new Date().getTime() - startsAt.getTime()\n const fields = v?.structure?.tags.nextTagPos ?? 0\n const summary = new ParseSummary(contents, v.toString(), msgType, iterations, elapsed, fields)\n resolve(summary)\n }\n })\n asciiParser.on('error', e => {\n reject(e)\n })\n })\n }\n\n private async benchmark (repeats: number): Promise<(ParseSummary | null)> {\n if (!argv.fix) {\n console.log('provide a path to fix file i.e. --fix=data/examples/execution-report/fix.txt')\n return null\n }\n return await new Promise<any>((resolve, reject) => {\n const fix: string = this.norm(argv.fix)\n this.promisedRead(fix)\n .then(contents => {\n this.benchParse(contents, repeats)\n .then((a: ParseSummary) => {\n resolve(a)\n })\n .catch(e => { reject(e) })\n }).catch(e => {\n reject(e)\n })\n })\n }\n\n private encode (): void {\n const session: AsciiMsgTransmitter = this.session\n if (!session) {\n console.log('provide a session json file e.g. --session=data/session/test-initiator.json')\n return\n }\n if (!argv.type) {\n console.log('provide a message type e.g. --type=8')\n return\n }\n if (!argv.json) {\n console.log('provide a json representation e.g. data/examples/execution-report/object.json')\n return\n }\n const ts: string = argv.type.toString()\n const msg: ILooseObject = this.jsonHelper.fromJson(path.join(this.root, argv.json), ts)\n session.encodeMessage(ts, msg)\n const fix: string = session.buffer.toString()\n console.log(fix)\n }\n\n private norm (p: string): string {\n let f: string = p\n if (!path.isAbsolute(p)) {\n f = path.join(this.root, f)\n }\n return f\n }\n}\n\nfunction showHelp (): void {\n console.log('this help page')\n console.log('npm run cmd')\n console.log('npm run cmd -- --help')\n console.log()\n\n console.log('print to console a trim quickfix format xml only including given message types')\n console.log('node dist/jsfix-cmd --dict=qf44 --trim --type=\"0,1,2,3,4,5,AE\"')\n\n console.log('token format i.e. [602] 687 (LegQty) = 33589')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/quickfix/FIX.4.4/execution-report/fix.txt --delimiter=\"|\" --tokens')\n console.log()\n\n console.log('token format use fix repo dictionary')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --fix=data/examples/quickfix/FIX.4.4/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens')\n console.log()\n\n console.log('structure format i.e. show locations of components etc.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --structures')\n console.log()\n\n console.log('full JS object in JSON format.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --objects')\n console.log()\n\n console.log('full JS object in JSON format - filter only type messages.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt' +\n ' --delimiter=\"|\" --tokens --type=8 --objects')\n console.log()\n\n console.log('timing stats and message counts. Structured parsing of all messages.')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --fix=data/examples/FIX.4.4/quickfix/execution-report/fix.txt --stats')\n console.log()\n\n console.log('encode a json object to fix format')\n console.log('node dist/jsfix-cmd --json=data/examples/FIX.4.4/quickfix/execution-report/object.json' +\n ' --session=data/session.json --type=8 --delimiter=\"|\"')\n console.log()\n\n console.log('display field definition')\n console.log('node dist/jsfix-cmd --dict=data/FIX44.xml --field=MsgType|35')\n console.log()\n\n console.log('display field use fix repo dictionary e.g. 271 MDEntrySize QTY Quantity or volume represented by the Market Data Entry.')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --field=MsgType')\n console.log('node dist/jsfix-cmd --dict=data/fix_repo/FIX.4.4/Base --field=35')\n console.log()\n\n console.log('script to describe field in repository version 4.4')\n console.log('npm run repo44 -- --field=8')\n console.log()\n\n console.log('script to describe field in fixml')\n console.log('npm run fixml -- --field=50')\n console.log()\n\n console.log('generate unit test set of files - i.e. randomly generate an object, encode to fix. density 1 is all fields')\n console.log('node dist/jsfix-cmd --generate --type=AE --density=0.8 --unit --delimiter=\"|\" --session=data/session/test-initiator.json')\n console.log('npm run repo44-unit -- --type=AE')\n console.log('test script with no repeat groups')\n console.log('npm run repo44-unit -- --type=AE --groups=false')\n console.log()\n\n console.log('generate a fix log of randomly generated but syntactically correct messages')\n console.log('node dist/jsfix-cmd --generate --density=0.8 --repeats=50 --script --delimiter=\"|\" --session=data/session/test-initiator.json')\n console.log('npm run repo44-script')\n console.log('parse above generated script')\n console.log('npm run repo44-repscr')\n console.log()\n\n console.log('replay example repo fix file of 50 messages.')\n console.log('node dist/jsfix-cmd --session=data/session/test-initiator.json --fix=data/examples/FIX.4.4/fix.txt --delimiter=\"|\" --stats')\n console.log('npm run repo44-replay -- --stats')\n console.log('npm run repo44-replay -- --objects')\n console.log('npm run repo44-replay -- --tokens')\n console.log('npm run repo44-replay -- --structures')\n console.log()\n\n console.log('benchmark parse a message')\n console.log('node dist/jsfix-cmd --delimiter=\"|\" --session=data/session/test-initiator.json --fix=data/examples/FIX.4.4/repo/trade-capture-no-groups/fix.txt --benchmark')\n console.log('npm run repo44-bench -- --fix=data/examples/FIX.4.4/repo/trade-capture-no-groups/fix.txt')\n console.log()\n\n console.log('compile typescript interfaces - i.e. outputs to src/types/FIX4.4 - requires set and enum sub folders')\n console.log('npm run cmd -- --dict=repo40 --compile')\n console.log('npm run cmd -- --dict=repo41 --compile')\n console.log('npm run cmd -- --dict=repo42 --compile')\n console.log('npm run cmd -- --dict=repo43 --compile')\n console.log('npm run cmd -- --dict=repo44 --compile')\n console.log('npm run cmd -- --dict=repo50 --compile')\n console.log('npm run cmd -- --dict=repo50sp1 --compile')\n console.log('npm run cmd -- --dict=repo50sp2 --compile')\n console.log('npm run cmd -- --dict=repofixml --compile')\n console.log('npm run cmd -- --dict=qf44 --compile')\n console.log('npm run cmd -- --dict=data/handmade.xml --compile --output=src/types/handmade')\n\n console.log()\n}\n\nconst help: boolean = argv.h || argv.help\nif (help) {\n showHelp()\n} else {\n const cmd: JsfixCmd = new JsfixCmd()\n cmd.exec().then((res: boolean) => {\n if (!res) {\n showHelp()\n }\n }).catch((e: Error) => {\n console.error(e)\n })\n}\n"]}
@@ -1,4 +1,37 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -10,7 +43,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
43
  };
11
44
  Object.defineProperty(exports, "__esModule", { value: true });
12
45
  exports.SessionLauncher = void 0;
13
- const path = require("path");
46
+ const path = __importStar(require("path"));
14
47
  const config_1 = require("../config");
15
48
  const session_container_1 = require("./session-container");
16
49
  const di_tokens_1 = require("./di-tokens");
@@ -1 +1 @@
1
- {"version":3,"file":"session-launcher.js","sourceRoot":"","sources":["../../src/runtime/session-launcher.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'path'\nimport { IJsFixConfig, IJsFixLogger, JsFixLoggerFactory, JsFixWinstonLogFactory, WinstonLogger } from '../config'\nimport { FixEntity, FixSession, ISessionDescription } from '../transport'\nimport { DependencyContainer } from 'tsyringe'\nimport { EngineFactory } from './engine-factory'\nimport { SessionContainer } from './session-container'\nimport { DITokens } from './di-tokens'\n\nconst defaultLoggerFactory = new JsFixWinstonLogFactory(WinstonLogger.consoleOptions('info'))\n\nexport abstract class SessionLauncher {\n public root: string = '../../'\n protected readonly logger: IJsFixLogger\n public readonly initiatorConfig: ISessionDescription | null\n public readonly acceptorConfig: ISessionDescription | null\n\n protected constructor (\n initiatorConfig: string | ISessionDescription | null = null,\n acceptorConfig: string | ISessionDescription | null = null,\n private readonly loggerFactory: JsFixLoggerFactory = defaultLoggerFactory\n ) {\n this.logger = this.loggerFactory.logger('launcher')\n this.initiatorConfig = initiatorConfig ? this.loadConfig(initiatorConfig) : null\n this.acceptorConfig = acceptorConfig ? this.loadConfig(acceptorConfig) : null\n }\n\n protected sessionContainer: SessionContainer = new SessionContainer()\n\n private async empty (): Promise<any> {\n return await new Promise((resolve, reject) => {\n try {\n setImmediate(() => {\n this.logger.info('resolving an empty promise')\n resolve(null)\n })\n } catch (e) {\n reject(e)\n }\n })\n }\n\n protected async getAcceptor (sessionContainer: DependencyContainer): Promise<any> {\n if (sessionContainer.isRegistered<FixEntity>(DITokens.FixEntity)) {\n const entity = sessionContainer.resolve<FixEntity>(DITokens.FixEntity)\n return entity.start()\n } else {\n return this.empty()\n }\n }\n\n protected async getInitiator (sessionContainer: DependencyContainer): Promise<any> {\n if (sessionContainer.isRegistered<FixEntity>(DITokens.FixEntity)) {\n const entity = sessionContainer.resolve<FixEntity>(DITokens.FixEntity)\n return entity.start()\n } else {\n return this.empty()\n }\n }\n\n /**\n * provide a factory which will be invoked with a config where an instance of the application\n * should be constructed and returned.\n * @param config to be provided to the constucted application representing this session\n * @protected\n */\n protected makeFactory (config: IJsFixConfig): EngineFactory | null {\n return null\n }\n\n public async run (): Promise<boolean> {\n return await new Promise<any>((resolve, reject) => {\n const logger = this.logger\n logger.info('launching ..')\n this.setup().then(() => {\n logger.info('.. done')\n resolve(true)\n }).catch((e: Error) => {\n logger.error(e)\n reject(e)\n })\n })\n }\n\n public exec (): void {\n this.run().then(() => {\n console.log('finished.')\n }).catch(e => {\n console.error(e)\n })\n }\n\n /**\n * is this session config representing an ascii based session\n * @param description config to be tested.\n */\n public isAscii (description: ISessionDescription): boolean {\n return this.sessionContainer.isAscii(description)\n }\n\n /**\n * is this session config representing an initiator based session\n * @param description config to be tested.\n */\n public isInitiator (description: ISessionDescription): boolean {\n return this.sessionContainer.isInitiator(description)\n }\n\n protected registerApplication (_: DependencyContainer): void {\n this.logger.info('bypass register via DI')\n }\n\n private async makeSystem (description: ISessionDescription): Promise<DependencyContainer> {\n const name = description.application?.name ?? 'na'\n const protocol = description.application?.protocol ?? 'ascii'\n this.logger.info(`creating app ${name} [protocol ${protocol}]`)\n return await this.sessionContainer.makeSystem(description)\n }\n\n private register (container: DependencyContainer): void {\n const config = container.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n const factory = this.makeFactory(config)\n if (!factory) {\n this.registerApplication(container)\n } else {\n if (factory.makeSession) {\n container.register<FixSession>(DITokens.FixSession, {\n useFactory: () => factory.makeSession(config)\n })\n }\n }\n }\n\n private async makeClient (): Promise<any> {\n if (!this.initiatorConfig) return\n const sessionContainer = await this.makeSystem(this.initiatorConfig)\n this.register(sessionContainer)\n this.logger.info('create initiator')\n return await this.getInitiator(sessionContainer)\n }\n\n private async makeServer (): Promise<any> {\n if (!this.acceptorConfig) return\n const sessionContainer = await this.makeSystem(this.acceptorConfig)\n this.register(sessionContainer)\n this.logger.info('create acceptor')\n return await this.getAcceptor(sessionContainer)\n }\n\n async serverOrEmpty (): Promise<any> {\n return this.acceptorConfig ? this.makeServer() : this.empty()\n }\n\n async clientOrEmpty (): Promise<any> {\n return this.initiatorConfig ? this.makeClient() : this.empty()\n }\n\n private async setup (): Promise<any> {\n this.sessionContainer.registerGlobal(this.loggerFactory)\n const server = this.serverOrEmpty()\n const client = this.clientOrEmpty()\n this.logger.info('launching ....')\n return await Promise.all([server, client])\n }\n\n private loadConfig (config: string | ISessionDescription): ISessionDescription {\n if (typeof config === 'string') {\n return require(path.join(this.root, config))\n }\n return config\n }\n}\n"]}
1
+ {"version":3,"file":"session-launcher.js","sourceRoot":"","sources":["../../src/runtime/session-launcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4B;AAC5B,sCAAiH;AAIjH,2DAAsD;AACtD,2CAAsC;AAEtC,MAAM,oBAAoB,GAAG,IAAI,+BAAsB,CAAC,sBAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;AAE7F,MAAsB,eAAe;IAMnC,YACE,kBAAuD,IAAI,EAC3D,iBAAsD,IAAI,EACzC,gBAAoC,oBAAoB;QAAxD,kBAAa,GAAb,aAAa,CAA2C;QARpE,SAAI,GAAW,QAAQ,CAAA;QAepB,qBAAgB,GAAqB,IAAI,oCAAgB,EAAE,CAAA;QALnE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACnD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAChF,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC/E,CAAC;IAIa,KAAK;;YACjB,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3C,IAAI,CAAC;oBACH,YAAY,CAAC,GAAG,EAAE;wBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;wBAC9C,OAAO,CAAC,IAAI,CAAC,CAAA;oBACf,CAAC,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEe,WAAW,CAAE,gBAAqC;;YAChE,IAAI,gBAAgB,CAAC,YAAY,CAAY,oBAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAY,oBAAQ,CAAC,SAAS,CAAC,CAAA;gBACtE,OAAO,MAAM,CAAC,KAAK,EAAE,CAAA;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;YACrB,CAAC;QACH,CAAC;KAAA;IAEe,YAAY,CAAE,gBAAqC;;YACjE,IAAI,gBAAgB,CAAC,YAAY,CAAY,oBAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAY,oBAAQ,CAAC,SAAS,CAAC,CAAA;gBACtE,OAAO,MAAM,CAAC,KAAK,EAAE,CAAA;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;YACrB,CAAC;QACH,CAAC;KAAA;IAQS,WAAW,CAAE,MAAoB;QACzC,OAAO,IAAI,CAAA;IACb,CAAC;IAEY,GAAG;;YACd,OAAO,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAChD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;gBAC1B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBAC3B,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBACrB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBACtB,OAAO,CAAC,IAAI,CAAC,CAAA;gBACf,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;oBACpB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;oBACf,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEM,IAAI;QACT,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC,CAAC,CAAA;IACJ,CAAC;IAMM,OAAO,CAAE,WAAgC;QAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACnD,CAAC;IAMM,WAAW,CAAE,WAAgC;QAClD,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;IACvD,CAAC;IAES,mBAAmB,CAAE,CAAsB;QACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IAC5C,CAAC;IAEa,UAAU,CAAE,WAAgC;;;YACxD,MAAM,IAAI,GAAG,MAAA,MAAA,WAAW,CAAC,WAAW,0CAAE,IAAI,mCAAI,IAAI,CAAA;YAClD,MAAM,QAAQ,GAAG,MAAA,MAAA,WAAW,CAAC,WAAW,0CAAE,QAAQ,mCAAI,OAAO,CAAA;YAC7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,cAAc,QAAQ,GAAG,CAAC,CAAA;YAC/D,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;QAC5D,CAAC;KAAA;IAEO,QAAQ,CAAE,SAA8B;QAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAe,oBAAQ,CAAC,YAAY,CAAC,CAAA;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,SAAS,CAAC,QAAQ,CAAa,oBAAQ,CAAC,UAAU,EAAE;oBAClD,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;iBAC9C,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEa,UAAU;;YACtB,IAAI,CAAC,IAAI,CAAC,eAAe;gBAAE,OAAM;YACjC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YACpE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;YACpC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAA;QAClD,CAAC;KAAA;IAEa,UAAU;;YACtB,IAAI,CAAC,IAAI,CAAC,cAAc;gBAAE,OAAM;YAChC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YACnE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YACnC,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;QACjD,CAAC;KAAA;IAEK,aAAa;;YACjB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;QAC/D,CAAC;KAAA;IAEK,aAAa;;YACjB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;QAChE,CAAC;KAAA;IAEa,KAAK;;YACjB,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACxD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;YACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAClC,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAC5C,CAAC;KAAA;IAEO,UAAU,CAAE,MAAoC;QACtD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAC9C,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAhKD,0CAgKC","sourcesContent":["import * as path from 'path'\nimport { IJsFixConfig, IJsFixLogger, JsFixLoggerFactory, JsFixWinstonLogFactory, WinstonLogger } from '../config'\nimport { FixEntity, FixSession, ISessionDescription } from '../transport'\nimport { DependencyContainer } from 'tsyringe'\nimport { EngineFactory } from './engine-factory'\nimport { SessionContainer } from './session-container'\nimport { DITokens } from './di-tokens'\n\nconst defaultLoggerFactory = new JsFixWinstonLogFactory(WinstonLogger.consoleOptions('info'))\n\nexport abstract class SessionLauncher {\n public root: string = '../../'\n protected readonly logger: IJsFixLogger\n public readonly initiatorConfig: ISessionDescription | null\n public readonly acceptorConfig: ISessionDescription | null\n\n protected constructor (\n initiatorConfig: string | ISessionDescription | null = null,\n acceptorConfig: string | ISessionDescription | null = null,\n private readonly loggerFactory: JsFixLoggerFactory = defaultLoggerFactory\n ) {\n this.logger = this.loggerFactory.logger('launcher')\n this.initiatorConfig = initiatorConfig ? this.loadConfig(initiatorConfig) : null\n this.acceptorConfig = acceptorConfig ? this.loadConfig(acceptorConfig) : null\n }\n\n protected sessionContainer: SessionContainer = new SessionContainer()\n\n private async empty (): Promise<any> {\n return await new Promise((resolve, reject) => {\n try {\n setImmediate(() => {\n this.logger.info('resolving an empty promise')\n resolve(null)\n })\n } catch (e) {\n reject(e)\n }\n })\n }\n\n protected async getAcceptor (sessionContainer: DependencyContainer): Promise<any> {\n if (sessionContainer.isRegistered<FixEntity>(DITokens.FixEntity)) {\n const entity = sessionContainer.resolve<FixEntity>(DITokens.FixEntity)\n return entity.start()\n } else {\n return this.empty()\n }\n }\n\n protected async getInitiator (sessionContainer: DependencyContainer): Promise<any> {\n if (sessionContainer.isRegistered<FixEntity>(DITokens.FixEntity)) {\n const entity = sessionContainer.resolve<FixEntity>(DITokens.FixEntity)\n return entity.start()\n } else {\n return this.empty()\n }\n }\n\n /**\n * provide a factory which will be invoked with a config where an instance of the application\n * should be constructed and returned.\n * @param config to be provided to the constucted application representing this session\n * @protected\n */\n protected makeFactory (config: IJsFixConfig): EngineFactory | null {\n return null\n }\n\n public async run (): Promise<boolean> {\n return await new Promise<any>((resolve, reject) => {\n const logger = this.logger\n logger.info('launching ..')\n this.setup().then(() => {\n logger.info('.. done')\n resolve(true)\n }).catch((e: Error) => {\n logger.error(e)\n reject(e)\n })\n })\n }\n\n public exec (): void {\n this.run().then(() => {\n console.log('finished.')\n }).catch(e => {\n console.error(e)\n })\n }\n\n /**\n * is this session config representing an ascii based session\n * @param description config to be tested.\n */\n public isAscii (description: ISessionDescription): boolean {\n return this.sessionContainer.isAscii(description)\n }\n\n /**\n * is this session config representing an initiator based session\n * @param description config to be tested.\n */\n public isInitiator (description: ISessionDescription): boolean {\n return this.sessionContainer.isInitiator(description)\n }\n\n protected registerApplication (_: DependencyContainer): void {\n this.logger.info('bypass register via DI')\n }\n\n private async makeSystem (description: ISessionDescription): Promise<DependencyContainer> {\n const name = description.application?.name ?? 'na'\n const protocol = description.application?.protocol ?? 'ascii'\n this.logger.info(`creating app ${name} [protocol ${protocol}]`)\n return await this.sessionContainer.makeSystem(description)\n }\n\n private register (container: DependencyContainer): void {\n const config = container.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n const factory = this.makeFactory(config)\n if (!factory) {\n this.registerApplication(container)\n } else {\n if (factory.makeSession) {\n container.register<FixSession>(DITokens.FixSession, {\n useFactory: () => factory.makeSession(config)\n })\n }\n }\n }\n\n private async makeClient (): Promise<any> {\n if (!this.initiatorConfig) return\n const sessionContainer = await this.makeSystem(this.initiatorConfig)\n this.register(sessionContainer)\n this.logger.info('create initiator')\n return await this.getInitiator(sessionContainer)\n }\n\n private async makeServer (): Promise<any> {\n if (!this.acceptorConfig) return\n const sessionContainer = await this.makeSystem(this.acceptorConfig)\n this.register(sessionContainer)\n this.logger.info('create acceptor')\n return await this.getAcceptor(sessionContainer)\n }\n\n async serverOrEmpty (): Promise<any> {\n return this.acceptorConfig ? this.makeServer() : this.empty()\n }\n\n async clientOrEmpty (): Promise<any> {\n return this.initiatorConfig ? this.makeClient() : this.empty()\n }\n\n private async setup (): Promise<any> {\n this.sessionContainer.registerGlobal(this.loggerFactory)\n const server = this.serverOrEmpty()\n const client = this.clientOrEmpty()\n this.logger.info('launching ....')\n return await Promise.all([server, client])\n }\n\n private loadConfig (config: string | ISessionDescription): ISessionDescription {\n if (typeof config === 'string') {\n return require(path.join(this.root, config))\n }\n return config\n }\n}\n"]}
@@ -1,4 +1,37 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -13,7 +46,7 @@ require("reflect-metadata");
13
46
  const http_server_1 = require("./http-server");
14
47
  const http_client_1 = require("./http-client");
15
48
  const runtime_1 = require("../../../runtime");
16
- const util = require("util");
49
+ const util = __importStar(require("util"));
17
50
  class AppLauncher extends runtime_1.SessionLauncher {
18
51
  constructor() {
19
52
  super('data/session/test-http-initiator.json', 'data/session/test-http-acceptor.json');
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/sample/http/oms/app.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAAyB;AAEzB,+CAA0C;AAC1C,+CAA0C;AAE1C,8CAA2E;AAI3E,6BAA4B;AAE5B,MAAM,WAAY,SAAQ,yBAAe;IACvC;QACE,KAAK,CACH,uCAAuC,EACvC,sCAAsC,CAAC,CAAA;IAC3C,CAAC;IAEkB,WAAW,CAAE,MAAoB;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACxD,OAAO;YACL,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW;gBAC5B,CAAC,CAAC,IAAI,wBAAU,CAAC,MAAM,CAAC;gBACxB,CAAC,CAAC,IAAI,wBAAU,CAAC,MAAM,CAAC;SACV,CAAA;IACpB,CAAC;IAEK,OAAO,CAAE,EAAU;;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBACf,OAAO,CAAC,IAAI,CAAC,CAAA;gBACf,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBACX,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEwB,YAAY,CAAE,gBAAqC;;;YAC1E,MAAM,MAAM,GAAiB,gBAAgB,CAAC,OAAO,CAAe,kBAAQ,CAAC,YAAY,CAAC,CAAA;YAC1F,MAAM,IAAI,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,WAAW,0CAAE,IAAI,CAAA;YACnD,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAe,kBAAQ,CAAC,YAAY,CAAC,CAAA;gBAC5E,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAY,kBAAQ,CAAC,SAAS,CAAC,CAAA;gBACzE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAS,EAAE;oBACxC,OAAO,SAAS,CAAC,KAAK,EAAE,CAAA;gBAC1B,CAAC,CAAA,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;KAAA;CACF;AAED,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,CAAC,CAAC,IAAI,EAAE,CAAA","sourcesContent":["import 'reflect-metadata'\n\nimport { HttpServer } from './http-server'\nimport { HttpClient } from './http-client'\nimport { IJsFixConfig } from '../../../config'\nimport { DITokens, EngineFactory, SessionLauncher } from '../../../runtime'\nimport { DependencyContainer } from 'tsyringe'\nimport { FixEntity } from '../../../transport'\nimport { IHttpAdapter } from '../../../transport/http/http-adapter'\nimport * as util from 'util'\n\nclass AppLauncher extends SessionLauncher {\n public constructor () {\n super(\n 'data/session/test-http-initiator.json',\n 'data/session/test-http-acceptor.json')\n }\n\n protected override makeFactory (config: IJsFixConfig): EngineFactory {\n const isInitiator = this.isInitiator(config.description)\n return {\n makeSession: () => isInitiator\n ? new HttpClient(config)\n : new HttpServer(config)\n } as EngineFactory\n }\n\n async waitFor (ms: number): Promise<any> {\n const to = util.promisify(setTimeout)\n return new Promise((resolve, reject) => {\n to(ms).then(() => {\n resolve(null)\n }).catch(e => {\n reject(e)\n })\n })\n }\n\n protected override async getInitiator (sessionContainer: DependencyContainer): Promise<any> {\n const config: IJsFixConfig = sessionContainer.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n const http = config?.description?.application?.http\n if (http) {\n http.adapter = sessionContainer.resolve<IHttpAdapter>(DITokens.IHttpAdapter)\n const initiator = sessionContainer.resolve<FixEntity>(DITokens.FixEntity)\n return this.waitFor(1000).then(async () => {\n return initiator.start()\n })\n }\n }\n}\n\nconst l = new AppLauncher()\nl.exec()\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/sample/http/oms/app.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAAyB;AAEzB,+CAA0C;AAC1C,+CAA0C;AAE1C,8CAA2E;AAI3E,2CAA4B;AAE5B,MAAM,WAAY,SAAQ,yBAAe;IACvC;QACE,KAAK,CACH,uCAAuC,EACvC,sCAAsC,CAAC,CAAA;IAC3C,CAAC;IAEkB,WAAW,CAAE,MAAoB;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACxD,OAAO;YACL,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW;gBAC5B,CAAC,CAAC,IAAI,wBAAU,CAAC,MAAM,CAAC;gBACxB,CAAC,CAAC,IAAI,wBAAU,CAAC,MAAM,CAAC;SACV,CAAA;IACpB,CAAC;IAEK,OAAO,CAAE,EAAU;;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBACf,OAAO,CAAC,IAAI,CAAC,CAAA;gBACf,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBACX,MAAM,CAAC,CAAC,CAAC,CAAA;gBACX,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;KAAA;IAEwB,YAAY,CAAE,gBAAqC;;;YAC1E,MAAM,MAAM,GAAiB,gBAAgB,CAAC,OAAO,CAAe,kBAAQ,CAAC,YAAY,CAAC,CAAA;YAC1F,MAAM,IAAI,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,WAAW,0CAAE,IAAI,CAAA;YACnD,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAe,kBAAQ,CAAC,YAAY,CAAC,CAAA;gBAC5E,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAY,kBAAQ,CAAC,SAAS,CAAC,CAAA;gBACzE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAS,EAAE;oBACxC,OAAO,SAAS,CAAC,KAAK,EAAE,CAAA;gBAC1B,CAAC,CAAA,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;KAAA;CACF;AAED,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,CAAC,CAAC,IAAI,EAAE,CAAA","sourcesContent":["import 'reflect-metadata'\n\nimport { HttpServer } from './http-server'\nimport { HttpClient } from './http-client'\nimport { IJsFixConfig } from '../../../config'\nimport { DITokens, EngineFactory, SessionLauncher } from '../../../runtime'\nimport { DependencyContainer } from 'tsyringe'\nimport { FixEntity } from '../../../transport'\nimport { IHttpAdapter } from '../../../transport/http/http-adapter'\nimport * as util from 'util'\n\nclass AppLauncher extends SessionLauncher {\n public constructor () {\n super(\n 'data/session/test-http-initiator.json',\n 'data/session/test-http-acceptor.json')\n }\n\n protected override makeFactory (config: IJsFixConfig): EngineFactory {\n const isInitiator = this.isInitiator(config.description)\n return {\n makeSession: () => isInitiator\n ? new HttpClient(config)\n : new HttpServer(config)\n } as EngineFactory\n }\n\n async waitFor (ms: number): Promise<any> {\n const to = util.promisify(setTimeout)\n return new Promise((resolve, reject) => {\n to(ms).then(() => {\n resolve(null)\n }).catch(e => {\n reject(e)\n })\n })\n }\n\n protected override async getInitiator (sessionContainer: DependencyContainer): Promise<any> {\n const config: IJsFixConfig = sessionContainer.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n const http = config?.description?.application?.http\n if (http) {\n http.adapter = sessionContainer.resolve<IHttpAdapter>(DITokens.IHttpAdapter)\n const initiator = sessionContainer.resolve<FixEntity>(DITokens.FixEntity)\n return this.waitFor(1000).then(async () => {\n return initiator.start()\n })\n }\n }\n}\n\nconst l = new AppLauncher()\nl.exec()\n"]}
@@ -1,4 +1,37 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  require("reflect-metadata");
4
37
  const runtime_1 = require("../../../runtime");
@@ -7,7 +40,7 @@ const tcp_1 = require("../../../transport/tcp");
7
40
  const respawn_acceptor_1 = require("./respawn-acceptor");
8
41
  const ascii_1 = require("../../../buffer/ascii");
9
42
  const skeleton_server_1 = require("./skeleton-server");
10
- const path = require("path");
43
+ const path = __importStar(require("path"));
11
44
  const root = '../../../../';
12
45
  function makeConfig(config) {
13
46
  const o = require(path.join(root, config));
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/sample/tcp/recovering-skeleton/app.ts"],"names":[],"mappings":";;AAAA,4BAAyB;AAGzB,8CAA4D;AAC5D,uDAAkD;AAClD,gDAA+D;AAC/D,yDAAoD;AACpD,iDAAkD;AAElD,uDAAkD;AAElD,6BAA4B;AAE5B,MAAM,IAAI,GAAW,cAAc,CAAA;AAEnC,SAAS,UAAU,CAAE,MAAc;IACjC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IAC1C,CAAC,CAAC,eAAe,GAAG,KAAK,CAAA;IACzB,OAAO,CAAwB,CAAA;AACjC,CAAC;AAED,MAAM,WAAY,SAAQ,yBAAe;IACvC;QACE,KAAK,CACH,UAAU,CAAC,kCAAkC,CAAC,EAC9C,UAAU,CAAC,iCAAiC,CAAC,CAAC,CAAA;IAClD,CAAC;IAEO,WAAW,CAAE,gBAAqC;QACxD,gBAAgB,CAAC,QAAQ,CAAa,kBAAQ,CAAC,UAAU,EAAE;YACzD,QAAQ,EAAE,gCAAc;SACzB,CAAC,CAAA;QACF,gBAAgB,CAAC,QAAQ,CAAY,kBAAQ,CAAC,SAAS,EAAE;YACvD,QAAQ,EAAE,4BAAsB;SACjC,CAAC,CAAA;IACJ,CAAC;IAEO,UAAU,CAAE,gBAAqC;QACvD,gBAAgB,CAAC,QAAQ,CAAY,kBAAQ,CAAC,SAAS,EAAE;YACvD,QAAQ,EAAE,kCAAe;SAC1B,CAAC,CAAA;QACF,gBAAgB,CAAC,QAAQ,CAAa,kBAAQ,CAAC,UAAU,EAAE;YACzD,QAAQ,EAAE,gCAAc;SACzB,CAAC,CAAA;QACF,gBAAgB,CAAC,QAAQ,CAAC,eAAe,EAAE;YACzC,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;IACJ,CAAC;IAEkB,mBAAmB,CAAE,gBAAqC;QAC3E,MAAM,MAAM,GAAiB,gBAAgB,CAAC,OAAO,CAAe,kBAAQ,CAAC,YAAY,CAAC,CAAA;QAE1F,MAAM,CAAC,YAAY,GAAG,kBAAU,CAAC,KAAK,CAAA;QAEtC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACxD,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;QACnC,CAAC;QAED,gBAAgB,CAAC,QAAQ,CAAC,eAAe,EAAE;YACzC,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;QACF,gBAAgB,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YAC5C,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;IACJ,CAAC;CACF;AAED,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,CAAC,CAAC,IAAI,EAAE,CAAA","sourcesContent":["import 'reflect-metadata'\n\nimport { IJsFixConfig } from '../../../config'\nimport { SessionLauncher, DITokens } from '../../../runtime'\nimport { SkeletonClient } from './skeleton-client'\nimport { RecoveringTcpInitiator } from '../../../transport/tcp'\nimport { RespawnAcceptor } from './respawn-acceptor'\nimport { AsciiChars } from '../../../buffer/ascii'\nimport { DependencyContainer } from 'tsyringe'\nimport { SkeletonServer } from './skeleton-server'\nimport { FixSession, FixEntity, ISessionDescription } from '../../../transport'\nimport * as path from 'path'\n\nconst root: string = '../../../../'\n\nfunction makeConfig (config: string): ISessionDescription {\n const o = require(path.join(root, config))\n o.ResetSeqNumFlag = false\n return o as ISessionDescription\n}\n\nclass AppLauncher extends SessionLauncher {\n public constructor () {\n super(\n makeConfig('data/session/test-initiator.json'),\n makeConfig('data/session/test-acceptor.json'))\n }\n\n private asInitiator (sessionContainer: DependencyContainer): void {\n sessionContainer.register<FixSession>(DITokens.FixSession, {\n useClass: SkeletonClient\n })\n sessionContainer.register<FixEntity>(DITokens.FixEntity, {\n useClass: RecoveringTcpInitiator\n })\n }\n\n private asAcceptor (sessionContainer: DependencyContainer): void {\n sessionContainer.register<FixEntity>(DITokens.FixEntity, {\n useClass: RespawnAcceptor\n })\n sessionContainer.register<FixSession>(DITokens.FixSession, {\n useClass: SkeletonServer\n })\n sessionContainer.register('logoutSeconds', {\n useValue: 45\n })\n }\n\n protected override registerApplication (sessionContainer: DependencyContainer): void {\n const config: IJsFixConfig = sessionContainer.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n // use a different log delimiter as an example\n config.logDelimiter = AsciiChars.Carat\n\n const isInitiator = this.isInitiator(config.description)\n if (isInitiator) {\n this.asInitiator(sessionContainer)\n } else {\n this.asAcceptor(sessionContainer)\n }\n\n sessionContainer.register('logoutSeconds', {\n useValue: 45\n })\n sessionContainer.register('useInMemoryStore', {\n useValue: false\n })\n }\n}\n\nconst l = new AppLauncher()\nl.exec()\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../src/sample/tcp/recovering-skeleton/app.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAAyB;AAGzB,8CAA4D;AAC5D,uDAAkD;AAClD,gDAA+D;AAC/D,yDAAoD;AACpD,iDAAkD;AAElD,uDAAkD;AAElD,2CAA4B;AAE5B,MAAM,IAAI,GAAW,cAAc,CAAA;AAEnC,SAAS,UAAU,CAAE,MAAc;IACjC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IAC1C,CAAC,CAAC,eAAe,GAAG,KAAK,CAAA;IACzB,OAAO,CAAwB,CAAA;AACjC,CAAC;AAED,MAAM,WAAY,SAAQ,yBAAe;IACvC;QACE,KAAK,CACH,UAAU,CAAC,kCAAkC,CAAC,EAC9C,UAAU,CAAC,iCAAiC,CAAC,CAAC,CAAA;IAClD,CAAC;IAEO,WAAW,CAAE,gBAAqC;QACxD,gBAAgB,CAAC,QAAQ,CAAa,kBAAQ,CAAC,UAAU,EAAE;YACzD,QAAQ,EAAE,gCAAc;SACzB,CAAC,CAAA;QACF,gBAAgB,CAAC,QAAQ,CAAY,kBAAQ,CAAC,SAAS,EAAE;YACvD,QAAQ,EAAE,4BAAsB;SACjC,CAAC,CAAA;IACJ,CAAC;IAEO,UAAU,CAAE,gBAAqC;QACvD,gBAAgB,CAAC,QAAQ,CAAY,kBAAQ,CAAC,SAAS,EAAE;YACvD,QAAQ,EAAE,kCAAe;SAC1B,CAAC,CAAA;QACF,gBAAgB,CAAC,QAAQ,CAAa,kBAAQ,CAAC,UAAU,EAAE;YACzD,QAAQ,EAAE,gCAAc;SACzB,CAAC,CAAA;QACF,gBAAgB,CAAC,QAAQ,CAAC,eAAe,EAAE;YACzC,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;IACJ,CAAC;IAEkB,mBAAmB,CAAE,gBAAqC;QAC3E,MAAM,MAAM,GAAiB,gBAAgB,CAAC,OAAO,CAAe,kBAAQ,CAAC,YAAY,CAAC,CAAA;QAE1F,MAAM,CAAC,YAAY,GAAG,kBAAU,CAAC,KAAK,CAAA;QAEtC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACxD,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;QACnC,CAAC;QAED,gBAAgB,CAAC,QAAQ,CAAC,eAAe,EAAE;YACzC,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;QACF,gBAAgB,CAAC,QAAQ,CAAC,kBAAkB,EAAE;YAC5C,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;IACJ,CAAC;CACF;AAED,MAAM,CAAC,GAAG,IAAI,WAAW,EAAE,CAAA;AAC3B,CAAC,CAAC,IAAI,EAAE,CAAA","sourcesContent":["import 'reflect-metadata'\n\nimport { IJsFixConfig } from '../../../config'\nimport { SessionLauncher, DITokens } from '../../../runtime'\nimport { SkeletonClient } from './skeleton-client'\nimport { RecoveringTcpInitiator } from '../../../transport/tcp'\nimport { RespawnAcceptor } from './respawn-acceptor'\nimport { AsciiChars } from '../../../buffer/ascii'\nimport { DependencyContainer } from 'tsyringe'\nimport { SkeletonServer } from './skeleton-server'\nimport { FixSession, FixEntity, ISessionDescription } from '../../../transport'\nimport * as path from 'path'\n\nconst root: string = '../../../../'\n\nfunction makeConfig (config: string): ISessionDescription {\n const o = require(path.join(root, config))\n o.ResetSeqNumFlag = false\n return o as ISessionDescription\n}\n\nclass AppLauncher extends SessionLauncher {\n public constructor () {\n super(\n makeConfig('data/session/test-initiator.json'),\n makeConfig('data/session/test-acceptor.json'))\n }\n\n private asInitiator (sessionContainer: DependencyContainer): void {\n sessionContainer.register<FixSession>(DITokens.FixSession, {\n useClass: SkeletonClient\n })\n sessionContainer.register<FixEntity>(DITokens.FixEntity, {\n useClass: RecoveringTcpInitiator\n })\n }\n\n private asAcceptor (sessionContainer: DependencyContainer): void {\n sessionContainer.register<FixEntity>(DITokens.FixEntity, {\n useClass: RespawnAcceptor\n })\n sessionContainer.register<FixSession>(DITokens.FixSession, {\n useClass: SkeletonServer\n })\n sessionContainer.register('logoutSeconds', {\n useValue: 45\n })\n }\n\n protected override registerApplication (sessionContainer: DependencyContainer): void {\n const config: IJsFixConfig = sessionContainer.resolve<IJsFixConfig>(DITokens.IJsFixConfig)\n // use a different log delimiter as an example\n config.logDelimiter = AsciiChars.Carat\n\n const isInitiator = this.isInitiator(config.description)\n if (isInitiator) {\n this.asInitiator(sessionContainer)\n } else {\n this.asAcceptor(sessionContainer)\n }\n\n sessionContainer.register('logoutSeconds', {\n useValue: 45\n })\n sessionContainer.register('useInMemoryStore', {\n useValue: false\n })\n }\n}\n\nconst l = new AppLauncher()\nl.exec()\n"]}
@@ -78,7 +78,7 @@ class FixMsgAsciiStoreResend {
78
78
  sequenceResetGap(startGap, newSeq) {
79
79
  const factory = this.config.factory;
80
80
  const gapFill = factory === null || factory === void 0 ? void 0 : factory.sequenceReset(newSeq, true);
81
- gapFill.StandardHeader = factory === null || factory === void 0 ? void 0 : factory.header(types_1.MsgType.SequenceReset, startGap);
81
+ gapFill.StandardHeader = factory === null || factory === void 0 ? void 0 : factory.header(types_1.MsgType.SequenceReset, startGap, new Date());
82
82
  gapFill.StandardHeader.PossDupFlag = true;
83
83
  return new fix_msg_store_record_1.FixMsgStoreRecord(types_1.MsgType.SequenceReset, new Date(), startGap, gapFill, null);
84
84
  }