@fintekkers/ledger-models 0.1.116 → 0.1.118
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node/wrappers/models/position/position.d.ts +2 -1
- package/node/wrappers/models/position/position.js +4 -0
- package/node/wrappers/models/position/position.js.map +1 -1
- package/node/wrappers/models/position/position.ts +5 -2
- package/node/wrappers/models/position/positionfilter.d.ts +2 -0
- package/node/wrappers/models/position/positionfilter.js +18 -3
- package/node/wrappers/models/position/positionfilter.js.map +1 -1
- package/node/wrappers/models/position/positionfilter.test.d.ts +1 -0
- package/node/wrappers/models/position/positionfilter.test.js +146 -0
- package/node/wrappers/models/position/positionfilter.test.js.map +1 -0
- package/node/wrappers/models/position/positionfilter.test.ts +183 -0
- package/node/wrappers/models/position/positionfilter.ts +20 -4
- package/node/wrappers/models/security/coupon_type.test.js +1 -1
- package/node/wrappers/models/security/coupon_type.test.js.map +1 -1
- package/node/wrappers/models/security/coupon_type.test.ts +1 -1
- package/node/wrappers/models/security/identifier.d.ts +29 -0
- package/node/wrappers/models/security/identifier.js +51 -0
- package/node/wrappers/models/security/identifier.js.map +1 -0
- package/node/wrappers/models/security/identifier.test.d.ts +1 -0
- package/node/wrappers/models/security/identifier.test.js +55 -0
- package/node/wrappers/models/security/identifier.test.js.map +1 -0
- package/node/wrappers/models/security/identifier.test.ts +65 -0
- package/node/wrappers/models/security/identifier.ts +58 -0
- package/node/wrappers/models/security/term.test.js +6 -0
- package/node/wrappers/models/security/term.test.js.map +1 -1
- package/node/wrappers/models/security/term.test.ts +7 -0
- package/node/wrappers/models/utils/date.test.js +1 -1
- package/node/wrappers/models/utils/date.test.ts +1 -1
- package/node/wrappers/models/utils/serialization.d.ts +4 -2
- package/node/wrappers/models/utils/serialization.js +5 -1
- package/node/wrappers/models/utils/serialization.js.map +1 -1
- package/node/wrappers/models/utils/serialization.ts +7 -3
- package/node/wrappers/models/utils/serialization.util.d.ts +5 -2
- package/node/wrappers/models/utils/serialization.util.js +24 -1
- package/node/wrappers/models/utils/serialization.util.js.map +1 -1
- package/node/wrappers/models/utils/serialization.util.test.js.map +1 -1
- package/node/wrappers/models/utils/serialization.util.test.ts +3 -3
- package/node/wrappers/models/utils/serialization.util.ts +39 -14
- package/package.json +1 -1
|
@@ -10,6 +10,7 @@ import { UUID } from "../utils/uuid";
|
|
|
10
10
|
import { ZonedDateTime } from "../utils/datetime";
|
|
11
11
|
import { PriceProto } from "../../../fintekkers/models/price/price_pb";
|
|
12
12
|
import { Tenor } from "../security/term";
|
|
13
|
+
import { Identifier } from "../security/identifier";
|
|
13
14
|
export declare class Position {
|
|
14
15
|
proto: PositionProto;
|
|
15
16
|
constructor(positionProto: PositionProto);
|
|
@@ -22,7 +23,7 @@ export declare class Position {
|
|
|
22
23
|
*/
|
|
23
24
|
static fromJSON(json: any): Position;
|
|
24
25
|
getFieldValue(field: FieldProto): any;
|
|
25
|
-
getField(fieldToGet: FieldMapEntry): string | ProtoEnum | Security | Portfolio | UUID | Date | ZonedDateTime | number | PriceProto | Tenor;
|
|
26
|
+
getField(fieldToGet: FieldMapEntry): string | ProtoEnum | Security | Identifier | Portfolio | UUID | Date | ZonedDateTime | number | PriceProto | Tenor;
|
|
26
27
|
getMeasureValue(measure: MeasureProto): Decimal;
|
|
27
28
|
private getMeasure;
|
|
28
29
|
getFieldDisplay(fieldToGet: FieldMapEntry): string;
|
|
@@ -28,6 +28,7 @@ const portfolio_pb_1 = require("../../../fintekkers/models/portfolio/portfolio_p
|
|
|
28
28
|
const security_pb_1 = require("../../../fintekkers/models/security/security_pb");
|
|
29
29
|
const wrappers_pb_1 = require("google-protobuf/google/protobuf/wrappers_pb");
|
|
30
30
|
const term_1 = require("../security/term");
|
|
31
|
+
const identifier_1 = require("../security/identifier");
|
|
31
32
|
class Position {
|
|
32
33
|
constructor(positionProto) {
|
|
33
34
|
this.proto = positionProto;
|
|
@@ -146,6 +147,9 @@ class Position {
|
|
|
146
147
|
else if (value instanceof term_1.Tenor) {
|
|
147
148
|
return value.toString();
|
|
148
149
|
}
|
|
150
|
+
else if (value instanceof identifier_1.Identifier) {
|
|
151
|
+
return value.toString();
|
|
152
|
+
}
|
|
149
153
|
break;
|
|
150
154
|
default:
|
|
151
155
|
return "Can't display this field: " + fieldToGet.getField();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"position.js","sourceRoot":"","sources":["position.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"position.js","sourceRoot":"","sources":["position.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ import { SecurityProto } from "../../../fintekkers/models/security/security_pb";
|
|
|
25
25
|
|
|
26
26
|
import { StringValue } from 'google-protobuf/google/protobuf/wrappers_pb';
|
|
27
27
|
import { Tenor } from "../security/term";
|
|
28
|
+
import { Identifier } from "../security/identifier";
|
|
28
29
|
export class Position {
|
|
29
30
|
proto: PositionProto;
|
|
30
31
|
|
|
@@ -52,7 +53,7 @@ export class Position {
|
|
|
52
53
|
return this.getField(new FieldMapEntry().setField(field));
|
|
53
54
|
}
|
|
54
55
|
|
|
55
|
-
public getField(fieldToGet: FieldMapEntry): string | ProtoEnum | Security | Portfolio | UUID | Date | ZonedDateTime | number | PriceProto | Tenor {
|
|
56
|
+
public getField(fieldToGet: FieldMapEntry): string | ProtoEnum | Security | Identifier | Portfolio | UUID | Date | ZonedDateTime | number | PriceProto | Tenor {
|
|
56
57
|
for (const tmpField of this.proto.getFieldsList()) {
|
|
57
58
|
if (tmpField.getField() === fieldToGet.getField()) {
|
|
58
59
|
|
|
@@ -97,7 +98,7 @@ export class Position {
|
|
|
97
98
|
return new Portfolio(unpackedValue);
|
|
98
99
|
}
|
|
99
100
|
|
|
100
|
-
return ProtoSerializationUtil.deserialize(unpackedValue);
|
|
101
|
+
return ProtoSerializationUtil.deserialize(unpackedValue) as string | number | Identifier | Date | ZonedDateTime | UUID | ProtoEnum | Security | Tenor | Portfolio | PriceProto;
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
104
|
|
|
@@ -151,6 +152,8 @@ export class Position {
|
|
|
151
152
|
return value.toString();
|
|
152
153
|
} else if (value instanceof Tenor) {
|
|
153
154
|
return value.toString();
|
|
155
|
+
} else if (value instanceof Identifier) {
|
|
156
|
+
return value.toString();
|
|
154
157
|
}
|
|
155
158
|
break;
|
|
156
159
|
default:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FieldMapEntry, PositionFilterOperator } from '../../../fintekkers/models/position/position_util_pb';
|
|
2
2
|
import { FieldProto } from '../../../fintekkers/models/position/field_pb';
|
|
3
3
|
import { PositionFilterProto } from '../../../fintekkers/models/position/position_filter_pb';
|
|
4
|
+
import { Identifier } from '../security/identifier';
|
|
4
5
|
export declare class PositionFilter {
|
|
5
6
|
filters: FieldMapEntry[];
|
|
6
7
|
constructor();
|
|
@@ -19,6 +20,7 @@ export declare class PositionFilter {
|
|
|
19
20
|
* @param {*} fieldValue The appropriate value for the FieldProto, e.g. FieldProto.ASSET_CLASS would have a string fieldValue
|
|
20
21
|
*/
|
|
21
22
|
addFilter(field: FieldProto, operator: PositionFilterOperator, fieldValue?: any, fieldValueString?: string): PositionFilter;
|
|
23
|
+
addObjectFilter(field: FieldProto, object: Identifier): PositionFilter;
|
|
22
24
|
getFilters(): Array<FieldMapEntry>;
|
|
23
25
|
toProto(): PositionFilterProto;
|
|
24
26
|
}
|
|
@@ -37,15 +37,30 @@ class PositionFilter {
|
|
|
37
37
|
fieldMapEntry.setOperator(operator);
|
|
38
38
|
if (fieldValueString)
|
|
39
39
|
fieldMapEntry.setStringValue(fieldValueString);
|
|
40
|
-
else if (fieldValue) {
|
|
41
|
-
|
|
40
|
+
else if (fieldValue !== null && fieldValue !== undefined) {
|
|
41
|
+
// Check if it's an enum value (number)
|
|
42
|
+
if (typeof fieldValue === 'number') {
|
|
43
|
+
fieldMapEntry.setEnumValue(fieldValue);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
fieldMapEntry.setFieldValuePacked((0, serialization_util_1.pack)(fieldValue));
|
|
47
|
+
}
|
|
42
48
|
}
|
|
43
49
|
else {
|
|
44
|
-
throw new Error("Need to provide a string, or object");
|
|
50
|
+
throw new Error("Need to provide a string, enum value (number), or object");
|
|
45
51
|
}
|
|
46
52
|
this.filters.push(fieldMapEntry);
|
|
47
53
|
return this;
|
|
48
54
|
}
|
|
55
|
+
//TODO: Add support for other objects
|
|
56
|
+
addObjectFilter(field, object) {
|
|
57
|
+
const fieldMapEntry = new position_util_pb_1.FieldMapEntry();
|
|
58
|
+
fieldMapEntry.setField(field);
|
|
59
|
+
fieldMapEntry.setOperator(position_util_pb_1.PositionFilterOperator.EQUALS);
|
|
60
|
+
fieldMapEntry.setFieldValuePacked((0, serialization_util_1.pack)(object));
|
|
61
|
+
this.filters.push(fieldMapEntry);
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
49
64
|
getFilters() {
|
|
50
65
|
return this.filters;
|
|
51
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"positionfilter.js","sourceRoot":"","sources":["positionfilter.ts"],"names":[],"mappings":";;;AAAA,2FAA6G;AAE7G,oEAAmD;AACnD,+FAA6F;
|
|
1
|
+
{"version":3,"file":"positionfilter.js","sourceRoot":"","sources":["positionfilter.ts"],"names":[],"mappings":";;;AAAA,2FAA6G;AAE7G,oEAAmD;AACnD,+FAA6F;AAG7F,MAAa,cAAc;IAGvB;QACI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,KAAiB,EAAE,gBAAwB;QAC7D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,yCAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACxF,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,KAAiB,EAAE,UAAe;QAC9C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAoB,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,yCAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACvF,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,KAAiB,EAAE,QAAgC,EAAE,UAAgB,EAAE,gBAAyB;QACtG,MAAM,aAAa,GAAG,IAAI,gCAAa,EAAE,CAAC;QAC1C,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B;QACzD,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEpC,IAAI,gBAAgB;YAChB,aAAa,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;aAC9C,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YACvD,uCAAuC;YACvC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACjC,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACJ,aAAa,CAAC,mBAAmB,CAAC,IAAA,yBAAI,EAAC,UAAU,CAAC,CAAC,CAAC;YACxD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,qCAAqC;IACrC,eAAe,CAAC,KAAiB,EAAE,MAAkB;QACjD,MAAM,aAAa,GAAG,IAAI,gCAAa,EAAE,CAAC;QAC1C,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9B,aAAa,CAAC,WAAW,CAAC,yCAAsB,CAAC,MAAM,CAAC,CAAC;QACzD,aAAa,CAAC,mBAAmB,CAAC,IAAA,yBAAI,EAAC,MAAM,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,UAAU;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,OAAO;QACH,MAAM,mBAAmB,GAAG,IAAI,wCAAmB,EAAE,CAAC;QACtD,mBAAmB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACrD,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjD,OAAO,mBAAmB,CAAC;IAC/B,CAAC;CACJ;AA3ED,wCA2EC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const assert = require("assert");
|
|
4
|
+
const positionfilter_1 = require("./positionfilter");
|
|
5
|
+
const field_pb_1 = require("../../../fintekkers/models/position/field_pb");
|
|
6
|
+
const position_util_pb_1 = require("../../../fintekkers/models/position/position_util_pb");
|
|
7
|
+
const identifier_1 = require("../security/identifier");
|
|
8
|
+
const identifier_pb_1 = require("../../../fintekkers/models/security/identifier/identifier_pb");
|
|
9
|
+
const identifier_type_pb_1 = require("../../../fintekkers/models/security/identifier/identifier_type_pb");
|
|
10
|
+
const serialization_util_1 = require("../utils/serialization.util");
|
|
11
|
+
const transaction_type_pb_1 = require("../../../fintekkers/models/transaction/transaction_type_pb");
|
|
12
|
+
test('test PositionFilter.addEqualsStringFilter adds string filter', () => {
|
|
13
|
+
testAddEqualsStringFilter();
|
|
14
|
+
});
|
|
15
|
+
test('test PositionFilter.addEqualsFilter with string', () => {
|
|
16
|
+
testAddEqualsFilterWithString();
|
|
17
|
+
});
|
|
18
|
+
test('test PositionFilter.addFilter with string value', () => {
|
|
19
|
+
testAddFilterWithString();
|
|
20
|
+
});
|
|
21
|
+
test('test PositionFilter.addObjectFilter adds Identifier filter', () => {
|
|
22
|
+
testAddObjectFilter();
|
|
23
|
+
});
|
|
24
|
+
test('test PositionFilter method chaining', () => {
|
|
25
|
+
testMethodChaining();
|
|
26
|
+
});
|
|
27
|
+
test('test PositionFilter.getFilters returns all filters', () => {
|
|
28
|
+
testGetFilters();
|
|
29
|
+
});
|
|
30
|
+
test('test PositionFilter.toProto creates PositionFilterProto', () => {
|
|
31
|
+
testToProto();
|
|
32
|
+
});
|
|
33
|
+
test('test PositionFilter.addFilter throws error when no value provided', () => {
|
|
34
|
+
testAddFilterThrowsError();
|
|
35
|
+
});
|
|
36
|
+
test('test PositionFilter.addFilter handles TransactionType enum', () => {
|
|
37
|
+
testAddFilterHandlesTransactionTypeEnum();
|
|
38
|
+
});
|
|
39
|
+
function testAddEqualsStringFilter() {
|
|
40
|
+
const filter = new positionfilter_1.PositionFilter();
|
|
41
|
+
filter.addEqualsStringFilter(field_pb_1.FieldProto.ASSET_CLASS, 'FixedIncome');
|
|
42
|
+
const filters = filter.getFilters();
|
|
43
|
+
assert(filters.length === 1, 'Should have one filter');
|
|
44
|
+
const fieldEntry = filters[0];
|
|
45
|
+
assert(fieldEntry.getField() === field_pb_1.FieldProto.ASSET_CLASS, 'Field should be ASSET_CLASS');
|
|
46
|
+
assert(fieldEntry.getOperator() === position_util_pb_1.PositionFilterOperator.EQUALS, 'Operator should be EQUALS');
|
|
47
|
+
assert(fieldEntry.getStringValue() === 'FixedIncome', 'String value should be "FixedIncome"');
|
|
48
|
+
}
|
|
49
|
+
function testAddEqualsFilterWithString() {
|
|
50
|
+
const filter = new positionfilter_1.PositionFilter();
|
|
51
|
+
filter.addEqualsFilter(field_pb_1.FieldProto.PRODUCT_TYPE, 'Bond');
|
|
52
|
+
const filters = filter.getFilters();
|
|
53
|
+
assert(filters.length === 1, 'Should have one filter');
|
|
54
|
+
const fieldEntry = filters[0];
|
|
55
|
+
assert(fieldEntry.getField() === field_pb_1.FieldProto.PRODUCT_TYPE, 'Field should be PRODUCT_TYPE');
|
|
56
|
+
assert(fieldEntry.getOperator() === position_util_pb_1.PositionFilterOperator.EQUALS, 'Operator should be EQUALS');
|
|
57
|
+
assert(fieldEntry.getStringValue() === 'Bond', 'String value should be "Bond"');
|
|
58
|
+
}
|
|
59
|
+
function testAddFilterWithString() {
|
|
60
|
+
const filter = new positionfilter_1.PositionFilter();
|
|
61
|
+
filter.addFilter(field_pb_1.FieldProto.SECURITY_DESCRIPTION, position_util_pb_1.PositionFilterOperator.EQUALS, null, 'Test Security');
|
|
62
|
+
const filters = filter.getFilters();
|
|
63
|
+
assert(filters.length === 1, 'Should have one filter');
|
|
64
|
+
const fieldEntry = filters[0];
|
|
65
|
+
assert(fieldEntry.getField() === field_pb_1.FieldProto.SECURITY_DESCRIPTION, 'Field should be SECURITY_DESCRIPTION');
|
|
66
|
+
assert(fieldEntry.getOperator() === position_util_pb_1.PositionFilterOperator.EQUALS, 'Operator should be EQUALS');
|
|
67
|
+
assert(fieldEntry.getStringValue() === 'Test Security', 'String value should be "Test Security"');
|
|
68
|
+
}
|
|
69
|
+
function testAddObjectFilter() {
|
|
70
|
+
const identifierProto = new identifier_pb_1.IdentifierProto();
|
|
71
|
+
identifierProto.setIdentifierType(identifier_type_pb_1.IdentifierTypeProto.ISIN);
|
|
72
|
+
identifierProto.setIdentifierValue('US0378331005');
|
|
73
|
+
const identifier = new identifier_1.Identifier(identifierProto);
|
|
74
|
+
const filter = new positionfilter_1.PositionFilter();
|
|
75
|
+
// Test addObjectFilter method which specifically handles Identifier objects
|
|
76
|
+
filter.addObjectFilter(field_pb_1.FieldProto.IDENTIFIER, identifier);
|
|
77
|
+
const filters = filter.getFilters();
|
|
78
|
+
assert(filters.length === 1, 'Should have one filter');
|
|
79
|
+
const fieldEntry = filters[0];
|
|
80
|
+
assert(fieldEntry.getField() === field_pb_1.FieldProto.IDENTIFIER, 'Field should be IDENTIFIER');
|
|
81
|
+
assert(fieldEntry.getOperator() === position_util_pb_1.PositionFilterOperator.EQUALS, 'Operator should be EQUALS');
|
|
82
|
+
let a = fieldEntry.getFieldValuePacked();
|
|
83
|
+
let b = (0, serialization_util_1.unpack)(a);
|
|
84
|
+
assert(b.getIdentifierValue() === 'US0378331005', 'Identifier value should be "US0378331005"');
|
|
85
|
+
assert(b.getIdentifierTypeName() === 'ISIN', 'Identifier type name should be "ISIN"');
|
|
86
|
+
}
|
|
87
|
+
function testMethodChaining() {
|
|
88
|
+
const filter = new positionfilter_1.PositionFilter();
|
|
89
|
+
const result = filter
|
|
90
|
+
.addEqualsStringFilter(field_pb_1.FieldProto.ASSET_CLASS, 'Equity')
|
|
91
|
+
.addEqualsStringFilter(field_pb_1.FieldProto.PRODUCT_TYPE, 'Stock')
|
|
92
|
+
.addEqualsFilter(field_pb_1.FieldProto.SECURITY_DESCRIPTION, 'Apple Inc.');
|
|
93
|
+
assert(result === filter, 'Should return the same instance for chaining');
|
|
94
|
+
const filters = filter.getFilters();
|
|
95
|
+
assert(filters.length === 3, 'Should have three filters');
|
|
96
|
+
assert(filters[0].getField() === field_pb_1.FieldProto.ASSET_CLASS, 'First filter should be ASSET_CLASS');
|
|
97
|
+
assert(filters[1].getField() === field_pb_1.FieldProto.PRODUCT_TYPE, 'Second filter should be PRODUCT_TYPE');
|
|
98
|
+
assert(filters[2].getField() === field_pb_1.FieldProto.SECURITY_DESCRIPTION, 'Third filter should be SECURITY_DESCRIPTION');
|
|
99
|
+
}
|
|
100
|
+
function testGetFilters() {
|
|
101
|
+
const filter = new positionfilter_1.PositionFilter();
|
|
102
|
+
filter.addEqualsStringFilter(field_pb_1.FieldProto.ASSET_CLASS, 'FixedIncome');
|
|
103
|
+
filter.addEqualsStringFilter(field_pb_1.FieldProto.PRODUCT_TYPE, 'Bond');
|
|
104
|
+
const filters = filter.getFilters();
|
|
105
|
+
assert(Array.isArray(filters), 'Should return an array');
|
|
106
|
+
assert(filters.length === 2, 'Should return two filters');
|
|
107
|
+
assert(filters[0].getField() === field_pb_1.FieldProto.ASSET_CLASS, 'First filter should be ASSET_CLASS');
|
|
108
|
+
assert(filters[1].getField() === field_pb_1.FieldProto.PRODUCT_TYPE, 'Second filter should be PRODUCT_TYPE');
|
|
109
|
+
}
|
|
110
|
+
function testToProto() {
|
|
111
|
+
const filter = new positionfilter_1.PositionFilter();
|
|
112
|
+
filter.addEqualsStringFilter(field_pb_1.FieldProto.ASSET_CLASS, 'FixedIncome');
|
|
113
|
+
filter.addEqualsStringFilter(field_pb_1.FieldProto.PRODUCT_TYPE, 'Bond');
|
|
114
|
+
const proto = filter.toProto();
|
|
115
|
+
assert(proto !== null && proto !== undefined, 'Should return a PositionFilterProto');
|
|
116
|
+
assert(proto.getObjectClass() === 'PositionFilter', 'Object class should be "PositionFilter"');
|
|
117
|
+
assert(proto.getVersion() === '0.0.1', 'Version should be "0.0.1"');
|
|
118
|
+
const filtersList = proto.getFiltersList();
|
|
119
|
+
assert(filtersList.length === 2, 'Should have two filters in proto');
|
|
120
|
+
assert(filtersList[0].getField() === field_pb_1.FieldProto.ASSET_CLASS, 'First filter should be ASSET_CLASS');
|
|
121
|
+
assert(filtersList[1].getField() === field_pb_1.FieldProto.PRODUCT_TYPE, 'Second filter should be PRODUCT_TYPE');
|
|
122
|
+
}
|
|
123
|
+
function testAddFilterThrowsError() {
|
|
124
|
+
const filter = new positionfilter_1.PositionFilter();
|
|
125
|
+
try {
|
|
126
|
+
filter.addFilter(field_pb_1.FieldProto.ASSET_CLASS, position_util_pb_1.PositionFilterOperator.EQUALS);
|
|
127
|
+
assert(false, 'Should have thrown an error');
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
assert(error instanceof Error, 'Should throw Error');
|
|
131
|
+
assert(error.message.includes('Need to provide a string, enum value (number), or object'), 'Error message should mention providing a value');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function testAddFilterHandlesTransactionTypeEnum() {
|
|
135
|
+
const filter = new positionfilter_1.PositionFilter();
|
|
136
|
+
filter.addFilter(field_pb_1.FieldProto.TRANSACTION_TYPE, position_util_pb_1.PositionFilterOperator.EQUALS, transaction_type_pb_1.TransactionTypeProto.BUY);
|
|
137
|
+
const filters = filter.getFilters();
|
|
138
|
+
assert(filters.length === 1, 'Should have one filter');
|
|
139
|
+
const fieldEntry = filters[0];
|
|
140
|
+
assert(fieldEntry.getField() === field_pb_1.FieldProto.TRANSACTION_TYPE, 'Field should be TRANSACTION_TYPE');
|
|
141
|
+
assert(fieldEntry.getOperator() === position_util_pb_1.PositionFilterOperator.EQUALS, 'Operator should be EQUALS');
|
|
142
|
+
assert(fieldEntry.getEnumValue() === transaction_type_pb_1.TransactionTypeProto.BUY, 'Enum value should be BUY');
|
|
143
|
+
assert(fieldEntry.getStringValue() === '', 'String value should be empty for enum');
|
|
144
|
+
assert(fieldEntry.getFieldValuePacked() === undefined, 'Packed value should be undefined for enum');
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=positionfilter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"positionfilter.test.js","sourceRoot":"","sources":["positionfilter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import assert = require('assert');
|
|
2
|
+
import { PositionFilter } from './positionfilter';
|
|
3
|
+
import { FieldProto } from '../../../fintekkers/models/position/field_pb';
|
|
4
|
+
import { PositionFilterOperator } from '../../../fintekkers/models/position/position_util_pb';
|
|
5
|
+
import { Identifier } from '../security/identifier';
|
|
6
|
+
import { IdentifierProto } from '../../../fintekkers/models/security/identifier/identifier_pb';
|
|
7
|
+
import { IdentifierTypeProto } from '../../../fintekkers/models/security/identifier/identifier_type_pb';
|
|
8
|
+
import { unpack } from '../utils/serialization.util';
|
|
9
|
+
import { Any } from 'google-protobuf/google/protobuf/any_pb';
|
|
10
|
+
import { TransactionTypeProto } from '../../../fintekkers/models/transaction/transaction_type_pb';
|
|
11
|
+
|
|
12
|
+
test('test PositionFilter.addEqualsStringFilter adds string filter', () => {
|
|
13
|
+
testAddEqualsStringFilter();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test('test PositionFilter.addEqualsFilter with string', () => {
|
|
17
|
+
testAddEqualsFilterWithString();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('test PositionFilter.addFilter with string value', () => {
|
|
21
|
+
testAddFilterWithString();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('test PositionFilter.addObjectFilter adds Identifier filter', () => {
|
|
25
|
+
testAddObjectFilter();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('test PositionFilter method chaining', () => {
|
|
29
|
+
testMethodChaining();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('test PositionFilter.getFilters returns all filters', () => {
|
|
33
|
+
testGetFilters();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('test PositionFilter.toProto creates PositionFilterProto', () => {
|
|
37
|
+
testToProto();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('test PositionFilter.addFilter throws error when no value provided', () => {
|
|
41
|
+
testAddFilterThrowsError();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
test('test PositionFilter.addFilter handles TransactionType enum', () => {
|
|
46
|
+
testAddFilterHandlesTransactionTypeEnum();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
function testAddEqualsStringFilter(): void {
|
|
51
|
+
const filter = new PositionFilter();
|
|
52
|
+
filter.addEqualsStringFilter(FieldProto.ASSET_CLASS, 'FixedIncome');
|
|
53
|
+
|
|
54
|
+
const filters = filter.getFilters();
|
|
55
|
+
assert(filters.length === 1, 'Should have one filter');
|
|
56
|
+
|
|
57
|
+
const fieldEntry = filters[0];
|
|
58
|
+
assert(fieldEntry.getField() === FieldProto.ASSET_CLASS, 'Field should be ASSET_CLASS');
|
|
59
|
+
assert(fieldEntry.getOperator() === PositionFilterOperator.EQUALS, 'Operator should be EQUALS');
|
|
60
|
+
assert(fieldEntry.getStringValue() === 'FixedIncome', 'String value should be "FixedIncome"');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function testAddEqualsFilterWithString(): void {
|
|
64
|
+
const filter = new PositionFilter();
|
|
65
|
+
filter.addEqualsFilter(FieldProto.PRODUCT_TYPE, 'Bond');
|
|
66
|
+
|
|
67
|
+
const filters = filter.getFilters();
|
|
68
|
+
assert(filters.length === 1, 'Should have one filter');
|
|
69
|
+
|
|
70
|
+
const fieldEntry = filters[0];
|
|
71
|
+
assert(fieldEntry.getField() === FieldProto.PRODUCT_TYPE, 'Field should be PRODUCT_TYPE');
|
|
72
|
+
assert(fieldEntry.getOperator() === PositionFilterOperator.EQUALS, 'Operator should be EQUALS');
|
|
73
|
+
assert(fieldEntry.getStringValue() === 'Bond', 'String value should be "Bond"');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function testAddFilterWithString(): void {
|
|
77
|
+
const filter = new PositionFilter();
|
|
78
|
+
filter.addFilter(FieldProto.SECURITY_DESCRIPTION, PositionFilterOperator.EQUALS, null, 'Test Security');
|
|
79
|
+
|
|
80
|
+
const filters = filter.getFilters();
|
|
81
|
+
assert(filters.length === 1, 'Should have one filter');
|
|
82
|
+
|
|
83
|
+
const fieldEntry = filters[0];
|
|
84
|
+
assert(fieldEntry.getField() === FieldProto.SECURITY_DESCRIPTION, 'Field should be SECURITY_DESCRIPTION');
|
|
85
|
+
assert(fieldEntry.getOperator() === PositionFilterOperator.EQUALS, 'Operator should be EQUALS');
|
|
86
|
+
assert(fieldEntry.getStringValue() === 'Test Security', 'String value should be "Test Security"');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function testAddObjectFilter(): void {
|
|
90
|
+
const identifierProto = new IdentifierProto();
|
|
91
|
+
identifierProto.setIdentifierType(IdentifierTypeProto.ISIN);
|
|
92
|
+
identifierProto.setIdentifierValue('US0378331005');
|
|
93
|
+
const identifier = new Identifier(identifierProto);
|
|
94
|
+
|
|
95
|
+
const filter = new PositionFilter();
|
|
96
|
+
// Test addObjectFilter method which specifically handles Identifier objects
|
|
97
|
+
filter.addObjectFilter(FieldProto.IDENTIFIER, identifier);
|
|
98
|
+
|
|
99
|
+
const filters = filter.getFilters();
|
|
100
|
+
assert(filters.length === 1, 'Should have one filter');
|
|
101
|
+
|
|
102
|
+
const fieldEntry = filters[0];
|
|
103
|
+
assert(fieldEntry.getField() === FieldProto.IDENTIFIER, 'Field should be IDENTIFIER');
|
|
104
|
+
assert(fieldEntry.getOperator() === PositionFilterOperator.EQUALS, 'Operator should be EQUALS');
|
|
105
|
+
|
|
106
|
+
let a = fieldEntry.getFieldValuePacked();
|
|
107
|
+
let b = unpack(a as Any) as Identifier;
|
|
108
|
+
|
|
109
|
+
assert(b.getIdentifierValue() === 'US0378331005', 'Identifier value should be "US0378331005"');
|
|
110
|
+
assert(b.getIdentifierTypeName() === 'ISIN', 'Identifier type name should be "ISIN"');
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function testMethodChaining(): void {
|
|
114
|
+
const filter = new PositionFilter();
|
|
115
|
+
const result = filter
|
|
116
|
+
.addEqualsStringFilter(FieldProto.ASSET_CLASS, 'Equity')
|
|
117
|
+
.addEqualsStringFilter(FieldProto.PRODUCT_TYPE, 'Stock')
|
|
118
|
+
.addEqualsFilter(FieldProto.SECURITY_DESCRIPTION, 'Apple Inc.');
|
|
119
|
+
|
|
120
|
+
assert(result === filter, 'Should return the same instance for chaining');
|
|
121
|
+
|
|
122
|
+
const filters = filter.getFilters();
|
|
123
|
+
assert(filters.length === 3, 'Should have three filters');
|
|
124
|
+
assert(filters[0].getField() === FieldProto.ASSET_CLASS, 'First filter should be ASSET_CLASS');
|
|
125
|
+
assert(filters[1].getField() === FieldProto.PRODUCT_TYPE, 'Second filter should be PRODUCT_TYPE');
|
|
126
|
+
assert(filters[2].getField() === FieldProto.SECURITY_DESCRIPTION, 'Third filter should be SECURITY_DESCRIPTION');
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function testGetFilters(): void {
|
|
130
|
+
const filter = new PositionFilter();
|
|
131
|
+
filter.addEqualsStringFilter(FieldProto.ASSET_CLASS, 'FixedIncome');
|
|
132
|
+
filter.addEqualsStringFilter(FieldProto.PRODUCT_TYPE, 'Bond');
|
|
133
|
+
|
|
134
|
+
const filters = filter.getFilters();
|
|
135
|
+
assert(Array.isArray(filters), 'Should return an array');
|
|
136
|
+
assert(filters.length === 2, 'Should return two filters');
|
|
137
|
+
assert(filters[0].getField() === FieldProto.ASSET_CLASS, 'First filter should be ASSET_CLASS');
|
|
138
|
+
assert(filters[1].getField() === FieldProto.PRODUCT_TYPE, 'Second filter should be PRODUCT_TYPE');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function testToProto(): void {
|
|
142
|
+
const filter = new PositionFilter();
|
|
143
|
+
filter.addEqualsStringFilter(FieldProto.ASSET_CLASS, 'FixedIncome');
|
|
144
|
+
filter.addEqualsStringFilter(FieldProto.PRODUCT_TYPE, 'Bond');
|
|
145
|
+
|
|
146
|
+
const proto = filter.toProto();
|
|
147
|
+
assert(proto !== null && proto !== undefined, 'Should return a PositionFilterProto');
|
|
148
|
+
assert(proto.getObjectClass() === 'PositionFilter', 'Object class should be "PositionFilter"');
|
|
149
|
+
assert(proto.getVersion() === '0.0.1', 'Version should be "0.0.1"');
|
|
150
|
+
|
|
151
|
+
const filtersList = proto.getFiltersList();
|
|
152
|
+
assert(filtersList.length === 2, 'Should have two filters in proto');
|
|
153
|
+
assert(filtersList[0].getField() === FieldProto.ASSET_CLASS, 'First filter should be ASSET_CLASS');
|
|
154
|
+
assert(filtersList[1].getField() === FieldProto.PRODUCT_TYPE, 'Second filter should be PRODUCT_TYPE');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function testAddFilterThrowsError(): void {
|
|
158
|
+
const filter = new PositionFilter();
|
|
159
|
+
|
|
160
|
+
try {
|
|
161
|
+
filter.addFilter(FieldProto.ASSET_CLASS, PositionFilterOperator.EQUALS);
|
|
162
|
+
assert(false, 'Should have thrown an error');
|
|
163
|
+
} catch (error) {
|
|
164
|
+
assert(error instanceof Error, 'Should throw Error');
|
|
165
|
+
assert(error.message.includes('Need to provide a string, enum value (number), or object'), 'Error message should mention providing a value');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function testAddFilterHandlesTransactionTypeEnum(): void {
|
|
170
|
+
const filter = new PositionFilter();
|
|
171
|
+
filter.addFilter(FieldProto.TRANSACTION_TYPE, PositionFilterOperator.EQUALS, TransactionTypeProto.BUY);
|
|
172
|
+
|
|
173
|
+
const filters = filter.getFilters();
|
|
174
|
+
assert(filters.length === 1, 'Should have one filter');
|
|
175
|
+
|
|
176
|
+
const fieldEntry = filters[0];
|
|
177
|
+
assert(fieldEntry.getField() === FieldProto.TRANSACTION_TYPE, 'Field should be TRANSACTION_TYPE');
|
|
178
|
+
assert(fieldEntry.getOperator() === PositionFilterOperator.EQUALS, 'Operator should be EQUALS');
|
|
179
|
+
assert(fieldEntry.getEnumValue() === TransactionTypeProto.BUY, 'Enum value should be BUY');
|
|
180
|
+
assert(fieldEntry.getStringValue() === '', 'String value should be empty for enum');
|
|
181
|
+
assert(fieldEntry.getFieldValuePacked() === undefined, 'Packed value should be undefined for enum');
|
|
182
|
+
}
|
|
183
|
+
|
|
@@ -2,6 +2,7 @@ import { FieldMapEntry, PositionFilterOperator } from '../../../fintekkers/model
|
|
|
2
2
|
import { FieldProto } from '../../../fintekkers/models/position/field_pb';
|
|
3
3
|
import { pack } from '../utils/serialization.util';
|
|
4
4
|
import { PositionFilterProto } from '../../../fintekkers/models/position/position_filter_pb';
|
|
5
|
+
import { Identifier } from '../security/identifier';
|
|
5
6
|
|
|
6
7
|
export class PositionFilter {
|
|
7
8
|
filters: FieldMapEntry[];
|
|
@@ -36,21 +37,36 @@ export class PositionFilter {
|
|
|
36
37
|
*/
|
|
37
38
|
addFilter(field: FieldProto, operator: PositionFilterOperator, fieldValue?: any, fieldValueString?: string): PositionFilter {
|
|
38
39
|
const fieldMapEntry = new FieldMapEntry();
|
|
39
|
-
fieldMapEntry.setField(field);
|
|
40
|
+
fieldMapEntry.setField(field);
|
|
40
41
|
fieldMapEntry.setOperator(operator);
|
|
41
42
|
|
|
42
43
|
if (fieldValueString)
|
|
43
44
|
fieldMapEntry.setStringValue(fieldValueString);
|
|
44
|
-
else if (fieldValue) {
|
|
45
|
-
|
|
45
|
+
else if (fieldValue !== null && fieldValue !== undefined) {
|
|
46
|
+
// Check if it's an enum value (number)
|
|
47
|
+
if (typeof fieldValue === 'number') {
|
|
48
|
+
fieldMapEntry.setEnumValue(fieldValue);
|
|
49
|
+
} else {
|
|
50
|
+
fieldMapEntry.setFieldValuePacked(pack(fieldValue));
|
|
51
|
+
}
|
|
46
52
|
} else {
|
|
47
|
-
throw new Error("Need to provide a string, or object");
|
|
53
|
+
throw new Error("Need to provide a string, enum value (number), or object");
|
|
48
54
|
}
|
|
49
55
|
|
|
50
56
|
this.filters.push(fieldMapEntry);
|
|
51
57
|
return this;
|
|
52
58
|
}
|
|
53
59
|
|
|
60
|
+
//TODO: Add support for other objects
|
|
61
|
+
addObjectFilter(field: FieldProto, object: Identifier): PositionFilter {
|
|
62
|
+
const fieldMapEntry = new FieldMapEntry();
|
|
63
|
+
fieldMapEntry.setField(field);
|
|
64
|
+
fieldMapEntry.setOperator(PositionFilterOperator.EQUALS);
|
|
65
|
+
fieldMapEntry.setFieldValuePacked(pack(object));
|
|
66
|
+
this.filters.push(fieldMapEntry);
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
|
|
54
70
|
getFilters(): Array<FieldMapEntry> {
|
|
55
71
|
return this.filters;
|
|
56
72
|
}
|
|
@@ -8,6 +8,6 @@ test('test CouponType.FIXED returns "FIXED"', () => {
|
|
|
8
8
|
});
|
|
9
9
|
function testFixedCouponType() {
|
|
10
10
|
const couponType = new coupon_type_1.CouponType(coupon_type_pb_1.CouponTypeProto.FIXED);
|
|
11
|
-
assert(couponType.
|
|
11
|
+
assert(couponType.name() === 'FIXED');
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=coupon_type.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coupon_type.test.js","sourceRoot":"","sources":["coupon_type.test.ts"],"names":[],"mappings":";;AAAA,iCAAkC;AAClC,+CAA2C;AAC3C,uFAAqF;AAErF,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,mBAAmB,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,SAAS,mBAAmB;IAC1B,MAAM,UAAU,GAAG,IAAI,wBAAU,CAAC,gCAAe,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"coupon_type.test.js","sourceRoot":"","sources":["coupon_type.test.ts"],"names":[],"mappings":";;AAAA,iCAAkC;AAClC,+CAA2C;AAC3C,uFAAqF;AAErF,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,mBAAmB,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,SAAS,mBAAmB;IAC1B,MAAM,UAAU,GAAG,IAAI,wBAAU,CAAC,gCAAe,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { IdentifierProto } from '../../../fintekkers/models/security/identifier/identifier_pb';
|
|
2
|
+
import { IdentifierTypeProto } from '../../../fintekkers/models/security/identifier/identifier_type_pb';
|
|
3
|
+
export declare class Identifier {
|
|
4
|
+
proto: IdentifierProto;
|
|
5
|
+
constructor(proto: IdentifierProto);
|
|
6
|
+
static identifierTypeEnumMap: Map<number, string>;
|
|
7
|
+
/**
|
|
8
|
+
* Returns the identifier type name based on the enum value.
|
|
9
|
+
* NOTE that this method is not performant and should only be used for debugging purposes,
|
|
10
|
+
* or infrequently. If this is required for a high performance use case, please create a
|
|
11
|
+
* reverse map with the enum ID as the key and the enum descriptor as the value.
|
|
12
|
+
*
|
|
13
|
+
* @returns IdentifierType as a string (e.g., "ISIN", "CUSIP", "EXCH_TICKER")
|
|
14
|
+
*/
|
|
15
|
+
getIdentifierTypeName(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Returns the identifier value (e.g., "US0378331005" for an ISIN)
|
|
18
|
+
*/
|
|
19
|
+
getIdentifierValue(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Returns the identifier type enum value
|
|
22
|
+
*/
|
|
23
|
+
getIdentifierType(): IdentifierTypeProto;
|
|
24
|
+
/**
|
|
25
|
+
* Returns a string representation in the format: "IDENTIFIER_TYPE:identifier_value"
|
|
26
|
+
* Example: "ISIN:US0378331005" or "CUSIP:037833100"
|
|
27
|
+
*/
|
|
28
|
+
toString(): string;
|
|
29
|
+
}
|