jspurefix
Version:
pure node js fix engine
356 lines • 20.4 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
const util_1 = require("../../util");
const set_constraint_helper_1 = require("../env/set-constraint-helper");
const quick_fix_xml_file_builder_1 = require("../../dictionary/parser/quickfix/quick-fix-xml-file-builder");
const dictionary_1 = require("../../dictionary");
const parser_1 = require("../../dictionary/parser");
const transport_1 = require("../../transport");
const config_1 = require("../../config");
let definitions;
let setHelper;
beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
definitions = yield new util_1.DefinitionFactory().getDefinitions('data/FIX50SP2.xml');
setHelper = new set_constraint_helper_1.SetConstraintHelper(definitions);
}), 45000);
function checkTradeCapture(tc) {
expect(tc).toBeTruthy();
let index = 0;
setHelper.isComponent(tc, index++, 'StandardHeader', true);
setHelper.isComponent(tc, index++, 'ApplicationSequenceControl', false);
setHelper.isSimple(tc, index++, 'TradeReportID', false);
setHelper.isSimple(tc, index++, 'TradeID', false);
setHelper.isSimple(tc, index++, 'SecondaryTradeID', false);
setHelper.isSimple(tc, index++, 'FirmTradeID', false);
setHelper.isSimple(tc, index++, 'SecondaryFirmTradeID', false);
setHelper.isSimple(tc, index++, 'PackageID', false);
setHelper.isSimple(tc, index++, 'TradeNumber', false);
setHelper.isSimple(tc, index++, 'TradeReportTransType', false);
setHelper.isSimple(tc, index++, 'TradeReportType', false);
setHelper.isSimple(tc, index++, 'TrdRptStatus', false);
setHelper.isSimple(tc, index++, 'TradeRequestID', false);
setHelper.isSimple(tc, index++, 'TrdType', false);
setHelper.isSimple(tc, index++, 'TrdSubType', false);
setHelper.isSimple(tc, index++, 'SecondaryTrdType', false);
setHelper.isSimple(tc, index++, 'TertiaryTrdType', false);
setHelper.isSimple(tc, index++, 'AnonymousTradeIndicator', false);
setHelper.isSimple(tc, index++, 'AlgorithmicTradeIndicator', false);
setHelper.isSimple(tc, index++, 'OffsetInstruction', false);
setHelper.isComponent(tc, index++, 'TradePriceConditionGrp', false);
setHelper.isSimple(tc, index++, 'TradeHandlingInstr', false);
setHelper.isSimple(tc, index++, 'OrigTradeHandlingInstr', false);
setHelper.isSimple(tc, index++, 'OrigTradeDate', false);
setHelper.isSimple(tc, index++, 'OrigTradeID', false);
setHelper.isSimple(tc, index++, 'OrigSecondaryTradeID', false);
setHelper.isSimple(tc, index++, 'TransferReason', false);
setHelper.isSimple(tc, index++, 'ExecType', false);
setHelper.isSimple(tc, index++, 'TotNumTradeReports', false);
setHelper.isSimple(tc, index++, 'LastRptRequested', false);
setHelper.isSimple(tc, index++, 'ManualOrderIndicator', false);
setHelper.isSimple(tc, index++, 'UnsolicitedIndicator', false);
setHelper.isSimple(tc, index++, 'SubscriptionRequestType', false);
setHelper.isSimple(tc, index++, 'TradeReportRefID', false);
setHelper.isSimple(tc, index++, 'SecondaryTradeReportRefID', false);
setHelper.isSimple(tc, index++, 'SecondaryTradeReportID', false);
setHelper.isSimple(tc, index++, 'TradeLinkID', false);
setHelper.isSimple(tc, index++, 'TrdMatchID', false);
setHelper.isSimple(tc, index++, 'ExecID', false);
setHelper.isSimple(tc, index++, 'ExecRefID', false);
setHelper.isSimple(tc, index++, 'SecondaryExecID', false);
setHelper.isSimple(tc, index++, 'ExecRestatementReason', false);
setHelper.isSimple(tc, index++, 'RegulatoryTransactionType', false);
setHelper.isComponent(tc, index++, 'RegulatoryTradeIDGrp', false);
setHelper.isSimple(tc, index++, 'PreviouslyReported', false);
setHelper.isSimple(tc, index++, 'PriceType', false);
setHelper.isComponent(tc, index++, 'PriceQualifierGrp', false);
setHelper.isSimple(tc, index++, 'CrossType', false);
setHelper.isComponent(tc, index++, 'RootParties', false);
setHelper.isSimple(tc, index++, 'AsOfIndicator', false);
setHelper.isSimple(tc, index++, 'SettlSessID', false);
setHelper.isSimple(tc, index++, 'SettlSessSubID', false);
setHelper.isSimple(tc, index++, 'VenueType', false);
setHelper.isSimple(tc, index++, 'MarketSegmentID', false);
setHelper.isSimple(tc, index++, 'MarketID', false);
setHelper.isSimple(tc, index++, 'TaxonomyType', false);
setHelper.isComponent(tc, index++, 'Instrument', false);
setHelper.isComponent(tc, index++, 'InstrumentExtension', false);
setHelper.isComponent(tc, index++, 'FinancingDetails', false);
setHelper.isComponent(tc, index++, 'PaymentGrp', false);
setHelper.isSimple(tc, index++, 'QtyType', false);
setHelper.isComponent(tc, index++, 'YieldData', false);
setHelper.isComponent(tc, index++, 'UndInstrmtGrp', false);
setHelper.isComponent(tc, index++, 'RelatedInstrumentGrp', false);
setHelper.isComponent(tc, index++, 'CollateralAmountGrp', false);
setHelper.isSimple(tc, index++, 'CollateralizationValueDate', false);
setHelper.isComponent(tc, index++, 'RateSource', false);
setHelper.isComponent(tc, index++, 'TransactionAttributeGrp', false);
setHelper.isSimple(tc, index++, 'UnderlyingTradingSessionID', false);
setHelper.isSimple(tc, index++, 'UnderlyingTradingSessionSubID', false);
setHelper.isSimple(tc, index++, 'LastQty', false);
setHelper.isSimple(tc, index++, 'LastQtyVariance', false);
setHelper.isSimple(tc, index++, 'LastQtyChanged', false);
setHelper.isSimple(tc, index++, 'LastMultipliedQty', false);
setHelper.isSimple(tc, index++, 'TotalTradeQty', false);
setHelper.isSimple(tc, index++, 'TotalTradeMultipliedQty', false);
setHelper.isSimple(tc, index++, 'LastPx', false);
setHelper.isSimple(tc, index++, 'MidPx', false);
setHelper.isSimple(tc, index++, 'DifferentialPrice', false);
setHelper.isSimple(tc, index++, 'CalculatedCcyLastQty', false);
setHelper.isSimple(tc, index++, 'PriceMarkup', false);
setHelper.isComponent(tc, index++, 'AveragePriceDetail', false);
setHelper.isSimple(tc, index++, 'Currency', false);
setHelper.isSimple(tc, index++, 'CurrencyCodeSource', false);
setHelper.isSimple(tc, index++, 'SettlCurrency', false);
setHelper.isSimple(tc, index++, 'SettlCurrencyCodeSource', false);
setHelper.isSimple(tc, index++, 'SettlPriceFxRateCalc', false);
setHelper.isSimple(tc, index++, 'LastParPx', false);
setHelper.isSimple(tc, index++, 'LastSpotRate', false);
setHelper.isSimple(tc, index++, 'LastForwardPoints', false);
setHelper.isSimple(tc, index++, 'LastSwapPoints', false);
setHelper.isSimple(tc, index++, 'PricePrecision', false);
setHelper.isSimple(tc, index++, 'LastMkt', false);
setHelper.isSimple(tc, index++, 'ClearingTradePrice', false);
setHelper.isSimple(tc, index++, 'TradePriceNegotiationMethod', false);
setHelper.isSimple(tc, index++, 'LastUpfrontPrice', false);
setHelper.isSimple(tc, index++, 'UpfrontPriceType', false);
setHelper.isSimple(tc, index++, 'TradeDate', false);
setHelper.isSimple(tc, index++, 'ClearingBusinessDate', false);
setHelper.isSimple(tc, index++, 'ClearingPortfolioID', false);
setHelper.isSimple(tc, index++, 'AvgPx', false);
setHelper.isComponent(tc, index++, 'SpreadOrBenchmarkCurveData', false);
setHelper.isSimple(tc, index++, 'AvgPxGroupID', false);
setHelper.isSimple(tc, index++, 'AvgPxIndicator', false);
setHelper.isSimple(tc, index++, 'ValuationDate', false);
setHelper.isSimple(tc, index++, 'ValuationTime', false);
setHelper.isSimple(tc, index++, 'ValuationBusinessCenter', false);
setHelper.isComponent(tc, index++, 'PositionAmountData', false);
setHelper.isSimple(tc, index++, 'MultiLegReportingType', false);
setHelper.isSimple(tc, index++, 'TradeLegRefID', false);
setHelper.isComponent(tc, index++, 'TrdInstrmtLegGrp', false);
setHelper.isSimple(tc, index++, 'TransactTime', false);
setHelper.isComponent(tc, index++, 'TrdRegTimestamps', false);
setHelper.isSimple(tc, index++, 'SettlType', false);
setHelper.isSimple(tc, index++, 'SettlDate', false);
setHelper.isSimple(tc, index++, 'TerminationDate', false);
setHelper.isSimple(tc, index++, 'UnderlyingSettlementDate', false);
setHelper.isSimple(tc, index++, 'MatchStatus', false);
setHelper.isSimple(tc, index++, 'ExecMethod', false);
setHelper.isSimple(tc, index++, 'MatchType', false);
setHelper.isComponent(tc, index++, 'TradeQtyGrp', false);
setHelper.isComponent(tc, index++, 'TrdCapRptSideGrp', false);
setHelper.isSimple(tc, index++, 'Volatility', false);
setHelper.isSimple(tc, index++, 'TimeToExpiration', false);
setHelper.isSimple(tc, index++, 'DividendYield', false);
setHelper.isSimple(tc, index++, 'RiskFreeRate', false);
setHelper.isSimple(tc, index++, 'PriceDelta', false);
setHelper.isSimple(tc, index++, 'CurrencyRatio', false);
setHelper.isSimple(tc, index++, 'CopyMsgIndicator', false);
setHelper.isComponent(tc, index++, 'TrdRepIndicatorsGrp', false);
setHelper.isSimple(tc, index++, 'TradeReportingIndicator', false);
setHelper.isSimple(tc, index++, 'PublishTrdIndicator', false);
setHelper.isSimple(tc, index++, 'TradePublishIndicator', false);
setHelper.isComponent(tc, index++, 'TrdRegPublicationGrp', false);
setHelper.isSimple(tc, index++, 'ShortSaleReason', false);
setHelper.isSimple(tc, index++, 'TierCode', false);
setHelper.isSimple(tc, index++, 'MessageEventSource', false);
setHelper.isSimple(tc, index++, 'LastUpdateTime', false);
setHelper.isSimple(tc, index++, 'RndPx', false);
setHelper.isSimple(tc, index++, 'TZTransactTime', false);
setHelper.isSimple(tc, index++, 'ReportedPxDiff', false);
setHelper.isSimple(tc, index++, 'GrossTradeAmt', false);
setHelper.isSimple(tc, index++, 'TotalGrossTradeAmt', false);
setHelper.isSimple(tc, index++, 'TradeReportRejectReason', false);
setHelper.isSimple(tc, index++, 'RejectText', false);
setHelper.isSimple(tc, index++, 'EncodedRejectTextLen', false);
setHelper.isSimple(tc, index++, 'EncodedRejectText', false);
setHelper.isSimple(tc, index++, 'FeeMultiplier', false);
setHelper.isSimple(tc, index++, 'ClearedIndicator', false);
setHelper.isSimple(tc, index++, 'ClearingIntention', false);
setHelper.isSimple(tc, index++, 'TradeClearingInstruction', false);
setHelper.isSimple(tc, index++, 'BackloadedTradeIndicator', false);
setHelper.isSimple(tc, index++, 'ConfirmationMethod', false);
setHelper.isSimple(tc, index++, 'MandatoryClearingIndicator', false);
setHelper.isComponent(tc, index++, 'MandatoryClearingJurisdictionGrp', false);
setHelper.isSimple(tc, index++, 'MixedSwapIndicator', false);
setHelper.isSimple(tc, index++, 'MultiAssetSwapIndicator', false);
setHelper.isSimple(tc, index++, 'InternationalSwapIndicator', false);
setHelper.isSimple(tc, index++, 'OffMarketPriceIndicator', false);
setHelper.isSimple(tc, index++, 'VerificationMethod', false);
setHelper.isSimple(tc, index++, 'ClearingRequirementException', false);
setHelper.isSimple(tc, index++, 'IRSDirection', false);
setHelper.isSimple(tc, index++, 'RegulatoryReportType', false);
setHelper.isSimple(tc, index++, 'RegulatoryReportTypeBusinessDate', false);
setHelper.isSimple(tc, index++, 'VoluntaryRegulatoryReport', false);
setHelper.isSimple(tc, index++, 'MultiJurisdictionReportingIndicator', false);
setHelper.isSimple(tc, index++, 'TradeCollateralization', false);
setHelper.isSimple(tc, index++, 'TradeContinuation', false);
setHelper.isSimple(tc, index++, 'TradeContingency', false);
setHelper.isSimple(tc, index++, 'TradeVersion', false);
setHelper.isSimple(tc, index++, 'HistoricalReportIndicator', false);
setHelper.isSimple(tc, index++, 'DeltaCrossed', false);
setHelper.isSimple(tc, index++, 'TradeContinuationText', false);
setHelper.isSimple(tc, index++, 'EncodedTradeContinuationTextLen', false);
setHelper.isSimple(tc, index++, 'EncodedTradeContinuationText', false);
setHelper.isSimple(tc, index++, 'IntraFirmTradeIndicator', false);
setHelper.isSimple(tc, index++, 'AffiliatedFirmsTradeIndicator', false);
setHelper.isComponent(tc, index++, 'AttachmentGrp', false);
setHelper.isSimple(tc, index++, 'RiskLimitCheckStatus', false);
setHelper.isComponent(tc, index++, 'StandardTrailer', true);
}
test('check definitions version', () => {
expect(definitions.getMajor()).toEqual(5);
expect(definitions.getMinor()).toEqual(0);
expect(definitions.getServicePack()).toEqual(2);
expect(definitions.version).toEqual(dictionary_1.FixVersion.FIX50SP2);
});
test('check trade caputure src xml', () => {
checkTradeCapture(definitions.message.get('AE'));
});
function getTrimDefinitions(types) {
return __awaiter(this, void 0, void 0, function* () {
const builder = new quick_fix_xml_file_builder_1.QuickFixXmlFileBuilder(definitions);
builder.write(types);
const d = builder.elasticBuffer.toString();
const parser = new parser_1.QuickFixXmlFileParser(() => new transport_1.StringDuplex(d), () => new config_1.EmptyLogger());
return yield parser.parse();
});
}
test('check builder', () => __awaiter(void 0, void 0, void 0, function* () {
const msgTypes = ['0', '1', '2', '3', '4', '5', 'AE'];
const newdDefinitions = yield getTrimDefinitions(msgTypes);
expect(newdDefinitions).toBeTruthy();
msgTypes.forEach(mt => {
const m = newdDefinitions.message.get(mt);
expect(m).toBeTruthy();
});
}));
test('check version on trim definitions', () => __awaiter(void 0, void 0, void 0, function* () {
const msgTypes = ['0'];
const newdDefinitions = yield getTrimDefinitions(msgTypes);
expect(newdDefinitions.getMajor()).toEqual(definitions.getMajor());
expect(newdDefinitions.getMinor()).toEqual(definitions.getMinor());
expect(newdDefinitions.getServicePack()).toEqual(definitions.getServicePack());
expect(newdDefinitions.version).toEqual(definitions.version);
}));
test('check trade capture from trim', () => __awaiter(void 0, void 0, void 0, function* () {
const msgTypes = ['0', '1', '2', '3', '4', '5', 'AE'];
const newdDefinitions = yield getTrimDefinitions(msgTypes);
checkTradeCapture(newdDefinitions.message.get('AE'));
}));
test('field fetch by name AdvSide', () => {
const def = definitions.simple.get('AdvSide');
expect(def).toBeTruthy();
expect(def === null || def === void 0 ? void 0 : def.tag).toEqual(4);
});
test('field fetch by name 4', () => {
const def = definitions.tagToSimple[4];
expect(def).toBeTruthy();
expect(def === null || def === void 0 ? void 0 : def.name).toEqual('AdvSide');
});
function checkEnum(enums, key, expectedVal, expectedDescription) {
expect(enums).toBeTruthy();
const en = enums === null || enums === void 0 ? void 0 : enums.get(key);
expect(en).toBeTruthy();
expect(en === null || en === void 0 ? void 0 : en.val).toEqual(expectedVal);
expect(en === null || en === void 0 ? void 0 : en.description).toEqual(expectedDescription);
expect(en === null || en === void 0 ? void 0 : en.key).toEqual(key);
}
function checkSimple(name, tag, type) {
const def = definitions.simple.get(name);
expect(def).toBeTruthy();
expect(def === null || def === void 0 ? void 0 : def.tag).toEqual(tag);
expect(def === null || def === void 0 ? void 0 : def.name).toEqual(name);
expect(def === null || def === void 0 ? void 0 : def.type).toEqual(type);
}
test('field check AdvSide', () => {
var _a;
const def = definitions.simple.get('AdvSide');
const keys = Array.from((_a = def === null || def === void 0 ? void 0 : def.enumVals.keys()) !== null && _a !== void 0 ? _a : []);
expect(def).toBeTruthy();
checkSimple('AdvSide', 4, 'CHAR');
expect(def === null || def === void 0 ? void 0 : def.isEnum()).toBeTruthy();
expect(def === null || def === void 0 ? void 0 : def.enumVals).toBeTruthy();
expect(keys.length).toEqual(4);
checkEnum(def === null || def === void 0 ? void 0 : def.enums, 'B', 'Buy', 'BUY');
checkEnum(def === null || def === void 0 ? void 0 : def.enums, 'S', 'Sell', 'SELL');
checkEnum(def === null || def === void 0 ? void 0 : def.enums, 'X', 'Cross', 'CROSS');
checkEnum(def === null || def === void 0 ? void 0 : def.enums, 'T', 'Trade', 'TRADE');
});
test('field check 8', () => {
checkSimple('BeginString', 8, 'STRING');
});
test('field check 9', () => {
checkSimple('BodyLength', 9, 'LENGTH');
});
test('field check 12', () => {
checkSimple('Commission', 12, 'AMT');
});
test('field check 16', () => {
checkSimple('EndSeqNo', 16, 'SEQNUM');
});
test('field check 38', () => {
checkSimple('OrderQty', 38, 'QTY');
});
test('field check 212', () => {
checkSimple('XmlDataLen', 212, 'LENGTH');
});
test('field check 213', () => {
checkSimple('XmlData', 213, 'XMLDATA');
});
test('check logon fields', () => {
const logon = definitions.message.get('Logon');
expect(logon).toBeTruthy();
let index = 0;
setHelper.isComponent(logon, index++, 'StandardHeader', true);
setHelper.isSimple(logon, index++, 'EncryptMethod', true);
setHelper.isSimple(logon, index++, 'HeartBtInt', true);
setHelper.isSimple(logon, index++, 'RawDataLength', false);
setHelper.isSimple(logon, index++, 'RawData', false);
setHelper.isSimple(logon, index++, 'ResetSeqNumFlag', false);
setHelper.isSimple(logon, index++, 'NextExpectedMsgSeqNum', false);
setHelper.isSimple(logon, index++, 'MaxMessageSize', false);
setHelper.isGroup(logon, index++, 'NoMsgTypes', false);
setHelper.isSimple(logon, index++, 'TestMessageIndicator', false);
setHelper.isSimple(logon, index++, 'Username', false);
setHelper.isSimple(logon, index++, 'Password', false);
setHelper.isSimple(logon, index++, 'NewPassword', false);
setHelper.isSimple(logon, index++, 'EncryptedPasswordMethod', false);
setHelper.isSimple(logon, index++, 'EncryptedPasswordLen', false);
setHelper.isSimple(logon, index++, 'EncryptedPassword', false);
setHelper.isSimple(logon, index++, 'EncryptedNewPasswordLen', false);
setHelper.isSimple(logon, index++, 'EncryptedNewPassword', false);
setHelper.isSimple(logon, index++, 'SessionStatus', false);
setHelper.isSimple(logon, index++, 'DefaultApplVerID', false);
setHelper.isSimple(logon, index++, 'DefaultApplExtID', false);
setHelper.isSimple(logon, index++, 'DefaultCstmApplVerID', false);
setHelper.isSimple(logon, index++, 'Text', false);
setHelper.isSimple(logon, index++, 'EncodedTextLen', false);
setHelper.isSimple(logon, index++, 'EncodedText', false);
expect(logon === null || logon === void 0 ? void 0 : logon.containsRaw).toBeTruthy();
});
test('check message existance', () => {
var _a;
const mt = definitions.simple.get('MsgType');
expect(mt === null || mt === void 0 ? void 0 : mt.isEnum()).toBeTruthy();
expect(mt === null || mt === void 0 ? void 0 : mt.enums.get('0')).toBeTruthy();
expect(mt === null || mt === void 0 ? void 0 : mt.enums.get('1')).toBeTruthy();
Array.from((_a = mt === null || mt === void 0 ? void 0 : mt.enums.keys()) !== null && _a !== void 0 ? _a : []).forEach(k => {
if (k === 'n')
return;
const m = definitions.message.get(k);
expect(k).toBeTruthy();
expect(m).toBeTruthy();
expect(m === null || m === void 0 ? void 0 : m.msgType).toEqual(k);
});
});
//# sourceMappingURL=qf-50sp2-dict.test.js.map