@fintekkers/ledger-models 0.4.42 → 0.4.44
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/fintekkers/models/portfolio/portfolio_pb.d.ts +7 -15
- package/node/fintekkers/models/portfolio/portfolio_pb.js +35 -132
- package/node/fintekkers/models/position/position_filter_pb.d.ts +7 -15
- package/node/fintekkers/models/position/position_filter_pb.js +35 -132
- package/node/fintekkers/models/position/position_pb.d.ts +7 -15
- package/node/fintekkers/models/position/position_pb.js +35 -132
- package/node/fintekkers/models/price/price_pb.d.ts +7 -15
- package/node/fintekkers/models/price/price_pb.js +35 -132
- package/node/fintekkers/models/security/bond/issuance_pb.d.ts +7 -15
- package/node/fintekkers/models/security/bond/issuance_pb.js +35 -132
- package/node/fintekkers/models/security/identifier/identifier_pb.d.ts +7 -15
- package/node/fintekkers/models/security/identifier/identifier_pb.js +35 -132
- package/node/fintekkers/models/security/index_composition_pb.d.ts +7 -15
- package/node/fintekkers/models/security/index_composition_pb.js +35 -132
- package/node/fintekkers/models/security/security_pb.d.ts +7 -15
- package/node/fintekkers/models/security/security_pb.js +35 -132
- package/node/fintekkers/models/security/security_pb.test.js +4 -8
- package/node/fintekkers/models/security/security_pb.test.js.map +1 -1
- package/node/fintekkers/models/security/security_pb.test.ts +4 -5
- package/node/fintekkers/models/security/tenor_pb.d.ts +7 -15
- package/node/fintekkers/models/security/tenor_pb.js +35 -132
- package/node/fintekkers/models/strategy/strategy_allocation_pb.d.ts +7 -15
- package/node/fintekkers/models/strategy/strategy_allocation_pb.js +35 -132
- package/node/fintekkers/models/strategy/strategy_pb.d.ts +7 -15
- package/node/fintekkers/models/strategy/strategy_pb.js +35 -132
- package/node/fintekkers/models/transaction/transaction_pb.d.ts +7 -15
- package/node/fintekkers/models/transaction/transaction_pb.js +35 -132
- package/node/fintekkers/models/util/api/api_key_pb.d.ts +7 -15
- package/node/fintekkers/models/util/api/api_key_pb.js +35 -132
- package/node/fintekkers/models/util/date_range_pb.d.ts +7 -15
- package/node/fintekkers/models/util/date_range_pb.js +35 -132
- package/node/fintekkers/models/util/decimal_value_pb.d.ts +0 -5
- package/node/fintekkers/models/util/decimal_value_pb.js +0 -30
- package/node/fintekkers/models/util/lock/node_partition_pb.d.ts +7 -15
- package/node/fintekkers/models/util/lock/node_partition_pb.js +35 -132
- package/node/fintekkers/models/util/lock/node_state_pb.d.ts +7 -15
- package/node/fintekkers/models/util/lock/node_state_pb.js +35 -132
- package/node/fintekkers/models/util/object_type_pb.d.ts +0 -3
- package/node/fintekkers/models/util/object_type_pb.js +0 -28
- package/node/fintekkers/models/util/version_grpc_pb.js +1 -0
- package/node/fintekkers/models/util/version_pb.d.ts +33 -0
- package/node/fintekkers/models/util/version_pb.js +236 -0
- package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.d.ts +13 -30
- package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.js +68 -264
- package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.d.ts +13 -30
- package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.js +68 -264
- package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.js +35 -132
- package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.js +35 -132
- package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.js +35 -132
- package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.js +35 -132
- package/node/fintekkers/requests/position/query_position_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/position/query_position_request_pb.js +35 -132
- package/node/fintekkers/requests/position/query_position_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/position/query_position_response_pb.js +35 -132
- package/node/fintekkers/requests/price/create_price_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/price/create_price_request_pb.js +35 -132
- package/node/fintekkers/requests/price/create_price_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/price/create_price_response_pb.js +35 -132
- package/node/fintekkers/requests/price/query_price_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/price/query_price_request_pb.js +35 -132
- package/node/fintekkers/requests/price/query_price_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/price/query_price_response_pb.js +35 -132
- package/node/fintekkers/requests/security/create_security_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/security/create_security_request_pb.js +35 -132
- package/node/fintekkers/requests/security/create_security_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/security/create_security_response_pb.js +35 -132
- package/node/fintekkers/requests/security/get_field_values_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/security/get_field_values_request_pb.js +35 -132
- package/node/fintekkers/requests/security/get_field_values_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/security/get_field_values_response_pb.js +35 -132
- package/node/fintekkers/requests/security/get_fields_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/security/get_fields_response_pb.js +35 -132
- package/node/fintekkers/requests/security/query_security_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/security/query_security_request_pb.js +35 -132
- package/node/fintekkers/requests/security/query_security_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/security/query_security_response_pb.js +35 -132
- package/node/fintekkers/requests/transaction/create_transaction_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/transaction/create_transaction_request_pb.js +35 -132
- package/node/fintekkers/requests/transaction/create_transaction_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/transaction/create_transaction_response_pb.js +35 -132
- package/node/fintekkers/requests/transaction/query_transaction_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/transaction/query_transaction_request_pb.js +35 -132
- package/node/fintekkers/requests/transaction/query_transaction_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/transaction/query_transaction_response_pb.js +35 -132
- package/node/fintekkers/requests/util/delete_request_pb.d.ts +13 -30
- package/node/fintekkers/requests/util/delete_request_pb.js +68 -264
- package/node/fintekkers/requests/util/lock/lock_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/util/lock/lock_request_pb.js +35 -132
- package/node/fintekkers/requests/util/lock/lock_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/util/lock/lock_response_pb.js +35 -132
- package/node/fintekkers/requests/valuation/curve_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/valuation/curve_request_pb.js +35 -132
- package/node/fintekkers/requests/valuation/curve_response_pb.d.ts +19 -15
- package/node/fintekkers/requests/valuation/curve_response_pb.js +138 -133
- package/node/fintekkers/requests/valuation/product_inputs.test.js +10 -17
- package/node/fintekkers/requests/valuation/product_inputs.test.js.map +1 -1
- package/node/fintekkers/requests/valuation/product_inputs.test.ts +10 -16
- package/node/fintekkers/requests/valuation/valuation_request_pb.d.ts +7 -15
- package/node/fintekkers/requests/valuation/valuation_request_pb.js +35 -132
- package/node/fintekkers/requests/valuation/valuation_response_pb.d.ts +7 -15
- package/node/fintekkers/requests/valuation/valuation_response_pb.js +35 -132
- package/node/wrappers/models/portfolio/portfolio.test.js +0 -2
- package/node/wrappers/models/portfolio/portfolio.test.js.map +1 -1
- package/node/wrappers/models/portfolio/portfolio.test.ts +0 -2
- package/node/wrappers/models/portfolio-price-transaction.lazy-hydrate.test.js +2 -3
- package/node/wrappers/models/portfolio-price-transaction.lazy-hydrate.test.js.map +1 -1
- package/node/wrappers/models/portfolio-price-transaction.lazy-hydrate.test.ts +2 -2
- package/node/wrappers/models/position/position.test.js +5 -6
- package/node/wrappers/models/position/position.test.js.map +1 -1
- package/node/wrappers/models/position/position.test.ts +5 -4
- package/node/wrappers/models/position/positionfilter.js +1 -1
- package/node/wrappers/models/position/positionfilter.js.map +1 -1
- package/node/wrappers/models/position/positionfilter.test.js +4 -2
- package/node/wrappers/models/position/positionfilter.test.js.map +1 -1
- package/node/wrappers/models/position/positionfilter.test.ts +3 -2
- package/node/wrappers/models/position/positionfilter.ts +1 -1
- package/node/wrappers/models/price/Price.cash.test.js +4 -5
- package/node/wrappers/models/price/Price.cash.test.js.map +1 -1
- package/node/wrappers/models/price/Price.cash.test.ts +2 -3
- package/node/wrappers/models/price/Price.js +2 -2
- package/node/wrappers/models/price/Price.js.map +1 -1
- package/node/wrappers/models/price/Price.test.js +4 -2
- package/node/wrappers/models/price/Price.test.js.map +1 -1
- package/node/wrappers/models/price/Price.test.ts +4 -2
- package/node/wrappers/models/price/Price.ts +2 -2
- package/node/wrappers/models/price/price_rules.test.js +9 -4
- package/node/wrappers/models/price/price_rules.test.js.map +1 -1
- package/node/wrappers/models/price/price_rules.test.ts +9 -4
- package/node/wrappers/models/security/BondSecurity.priceScale.test.js +2 -4
- package/node/wrappers/models/security/BondSecurity.priceScale.test.js.map +1 -1
- package/node/wrappers/models/security/BondSecurity.priceScale.test.ts +2 -3
- package/node/wrappers/models/security/BondSecurity.test.js +7 -13
- package/node/wrappers/models/security/BondSecurity.test.js.map +1 -1
- package/node/wrappers/models/security/BondSecurity.test.ts +7 -12
- package/node/wrappers/models/security/IndexSecurity.test.js +0 -8
- package/node/wrappers/models/security/IndexSecurity.test.js.map +1 -1
- package/node/wrappers/models/security/IndexSecurity.test.ts +0 -8
- package/node/wrappers/models/security/Issuance.test.js +6 -6
- package/node/wrappers/models/security/Issuance.test.js.map +1 -1
- package/node/wrappers/models/security/Issuance.test.ts +6 -5
- package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.js +13 -14
- package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.js.map +1 -1
- package/node/wrappers/models/security/MortgageBackedSecurity.fromPricerInputs.test.ts +13 -12
- package/node/wrappers/models/security/security-roundtrip.test.js +9 -21
- package/node/wrappers/models/security/security-roundtrip.test.js.map +1 -1
- package/node/wrappers/models/security/security-roundtrip.test.ts +9 -20
- package/node/wrappers/models/security/security.identifiers.test.js +0 -2
- package/node/wrappers/models/security/security.identifiers.test.js.map +1 -1
- package/node/wrappers/models/security/security.identifiers.test.ts +0 -2
- package/node/wrappers/models/security/security.tbillCoupon.test.js +3 -2
- package/node/wrappers/models/security/security.tbillCoupon.test.js.map +1 -1
- package/node/wrappers/models/security/security.tbillCoupon.test.ts +3 -2
- package/node/wrappers/models/security/security.test.js +14 -14
- package/node/wrappers/models/security/security.test.js.map +1 -1
- package/node/wrappers/models/security/security.test.ts +14 -13
- package/node/wrappers/models/transaction/transaction.derived.test.js +3 -9
- package/node/wrappers/models/transaction/transaction.derived.test.js.map +1 -1
- package/node/wrappers/models/transaction/transaction.derived.test.ts +3 -8
- package/node/wrappers/models/transaction/transaction.js +2 -2
- package/node/wrappers/models/transaction/transaction.js.map +1 -1
- package/node/wrappers/models/transaction/transaction.test.js +3 -3
- package/node/wrappers/models/transaction/transaction.test.js.map +1 -1
- package/node/wrappers/models/transaction/transaction.test.ts +3 -2
- package/node/wrappers/models/transaction/transaction.ts +2 -2
- package/node/wrappers/models/transaction/transaction_constructor.test.js +6 -9
- package/node/wrappers/models/transaction/transaction_constructor.test.js.map +1 -1
- package/node/wrappers/models/transaction/transaction_constructor.test.ts +6 -7
- package/node/wrappers/models/transaction/transaction_price_defaults.test.js +2 -10
- package/node/wrappers/models/transaction/transaction_price_defaults.test.js.map +1 -1
- package/node/wrappers/models/transaction/transaction_price_defaults.test.ts +2 -9
- package/node/wrappers/models/transaction/transaction_security_defaults.test.js +0 -6
- package/node/wrappers/models/transaction/transaction_security_defaults.test.js.map +1 -1
- package/node/wrappers/models/transaction/transaction_security_defaults.test.ts +0 -6
- package/node/wrappers/models/utils/date.test.js +0 -2
- package/node/wrappers/models/utils/date.test.js.map +1 -1
- package/node/wrappers/models/utils/date.test.ts +0 -2
- package/node/wrappers/models/utils/datetime.test.js +0 -2
- package/node/wrappers/models/utils/datetime.test.js.map +1 -1
- package/node/wrappers/models/utils/datetime.test.ts +0 -2
- package/node/wrappers/models/utils/decimal.d.ts +9 -28
- package/node/wrappers/models/utils/decimal.js +13 -52
- package/node/wrappers/models/utils/decimal.js.map +1 -1
- package/node/wrappers/models/utils/decimal.test.js +12 -68
- package/node/wrappers/models/utils/decimal.test.js.map +1 -1
- package/node/wrappers/models/utils/decimal.test.ts +14 -76
- package/node/wrappers/models/utils/decimal.ts +12 -60
- package/node/wrappers/models/utils/serialization.test.js +0 -4
- package/node/wrappers/models/utils/serialization.test.js.map +1 -1
- package/node/wrappers/models/utils/serialization.test.ts +0 -4
- package/node/wrappers/requests/position/QueryPositionRequest.js +1 -1
- package/node/wrappers/requests/position/QueryPositionRequest.js.map +1 -1
- package/node/wrappers/requests/position/QueryPositionRequest.ts +1 -1
- package/node/wrappers/requests/query-paging.test.js +4 -28
- package/node/wrappers/requests/query-paging.test.js.map +1 -1
- package/node/wrappers/requests/query-paging.test.ts +3 -36
- package/node/wrappers/services/portfolio-service/PortfolioService.js +3 -3
- package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
- package/node/wrappers/services/portfolio-service/PortfolioService.ts +3 -3
- package/node/wrappers/services/portfolio-service/portfolioService.test.js +0 -2
- package/node/wrappers/services/portfolio-service/portfolioService.test.js.map +1 -1
- package/node/wrappers/services/portfolio-service/portfolioService.test.ts +0 -2
- package/node/wrappers/services/price-service/PriceService.js +3 -3
- package/node/wrappers/services/price-service/PriceService.js.map +1 -1
- package/node/wrappers/services/price-service/PriceService.ts +3 -3
- package/node/wrappers/services/price-service/price-wrapper.test.js +2 -6
- package/node/wrappers/services/price-service/price-wrapper.test.js.map +1 -1
- package/node/wrappers/services/price-service/price-wrapper.test.ts +2 -6
- package/node/wrappers/services/price-service/price.test.js +8 -17
- package/node/wrappers/services/price-service/price.test.js.map +1 -1
- package/node/wrappers/services/price-service/price.test.ts +8 -14
- package/node/wrappers/services/searchWithSecurities.test.js +2 -7
- package/node/wrappers/services/searchWithSecurities.test.js.map +1 -1
- package/node/wrappers/services/searchWithSecurities.test.ts +2 -6
- package/node/wrappers/services/security-service/SecurityService.js +3 -3
- package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
- package/node/wrappers/services/security-service/SecurityService.ts +3 -3
- package/node/wrappers/services/security-service/security.test.js +3 -7
- package/node/wrappers/services/security-service/security.test.js.map +1 -1
- package/node/wrappers/services/security-service/security.test.ts +3 -6
- package/node/wrappers/services/transaction-service/TransactionService.js +3 -3
- package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
- package/node/wrappers/services/transaction-service/TransactionService.ts +3 -3
- package/node/wrappers/services/transaction-service/transaction.test.js +3 -8
- package/node/wrappers/services/transaction-service/transaction.test.js.map +1 -1
- package/node/wrappers/services/transaction-service/transaction.test.ts +3 -6
- package/node/wrappers/util/link-resolver.js +3 -3
- package/node/wrappers/util/link-resolver.js.map +1 -1
- package/node/wrappers/util/link-resolver.test.js +4 -13
- package/node/wrappers/util/link-resolver.test.js.map +1 -1
- package/node/wrappers/util/link-resolver.test.ts +4 -12
- package/node/wrappers/util/link-resolver.ts +3 -3
- package/node/wrappers/util/object-types.d.ts +21 -47
- package/node/wrappers/util/object-types.js +19 -178
- package/node/wrappers/util/object-types.js.map +1 -1
- package/node/wrappers/util/object-types.test.js +50 -151
- package/node/wrappers/util/object-types.test.js.map +1 -1
- package/node/wrappers/util/object-types.test.ts +55 -170
- package/node/wrappers/util/object-types.ts +28 -182
- package/package.json +1 -1
- package/node/wrappers/models/position/position.test copy.js +0 -107
- package/node/wrappers/models/position/position.test copy.js.map +0 -1
- package/node/wrappers/models/utils/decimal.legacy.test.d.ts +0 -1
- package/node/wrappers/models/utils/decimal.legacy.test.js +0 -174
- package/node/wrappers/models/utils/decimal.legacy.test.js.map +0 -1
- package/node/wrappers/models/utils/decimal.legacy.test.ts +0 -158
- package/node/wrappers/models/utils/decimal.typings.test.d.ts +0 -1
- package/node/wrappers/models/utils/decimal.typings.test.js +0 -39
- package/node/wrappers/models/utils/decimal.typings.test.js.map +0 -1
- package/node/wrappers/models/utils/decimal.typings.test.ts +0 -16
- package/node/wrappers/util/object-type-legacy.json +0 -21
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// test-fixtures/object-type-legacy.json, which Java, Python and Rust also load.
|
|
1
|
+
// Object type and version (LM-297, LM-318): `stamp` writes object_type = 1
|
|
2
|
+
// and version = 2 (0.0.1), and bytes from earlier releases are not readable.
|
|
4
3
|
import * as fs from 'fs';
|
|
5
4
|
import * as path from 'path';
|
|
6
5
|
import { Decimal } from 'decimal.js';
|
|
7
6
|
|
|
8
7
|
import { ObjectTypeProto } from '../../fintekkers/models/util/object_type_pb';
|
|
8
|
+
import { VersionProto } from '../../fintekkers/models/util/version_pb';
|
|
9
9
|
import { SecurityProto } from '../../fintekkers/models/security/security_pb';
|
|
10
10
|
import { PriceProto } from '../../fintekkers/models/price/price_pb';
|
|
11
11
|
import { TransactionProto } from '../../fintekkers/models/transaction/transaction_pb';
|
|
@@ -34,146 +34,43 @@ import { SecurityService } from '../services/security-service/SecurityService';
|
|
|
34
34
|
import { TransactionService } from '../services/transaction-service/TransactionService';
|
|
35
35
|
import { PortfolioService } from '../services/portfolio-service/PortfolioService';
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
function messageClasses(): Map<string, MessageClass> {
|
|
58
|
-
const root = path.resolve(__dirname, '../../fintekkers');
|
|
59
|
-
const classes = new Map<string, MessageClass>();
|
|
60
|
-
const walk = (dir: string): void => {
|
|
61
|
-
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
62
|
-
const full = path.join(dir, entry.name);
|
|
63
|
-
if (entry.isDirectory()) {
|
|
64
|
-
walk(full);
|
|
65
|
-
} else if (entry.name.endsWith('_pb.js')) {
|
|
66
|
-
const pkg = path.relative(path.dirname(root), dir).split(path.sep).join('.');
|
|
67
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
68
|
-
for (const [name, cls] of Object.entries(require(full))) {
|
|
69
|
-
classes.set(`${pkg}.${name}`, cls as MessageClass);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
walk(root);
|
|
75
|
-
return classes;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const CLASSES = messageClasses();
|
|
79
|
-
|
|
80
|
-
function decode(c: FixtureCase) {
|
|
81
|
-
const cls = CLASSES.get(c.message);
|
|
82
|
-
if (!cls) throw new Error(`no generated class for ${c.message}`);
|
|
83
|
-
return cls.deserializeBinary(Buffer.from(c.bytes, 'base64'));
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/** Field numbers present at the top level of an encoded message. */
|
|
87
|
-
function topLevelFieldNumbers(data: Uint8Array): number[] {
|
|
88
|
-
const numbers: number[] = [];
|
|
89
|
-
let i = 0;
|
|
90
|
-
const varint = (): number => {
|
|
91
|
-
let result = 0;
|
|
92
|
-
let scale = 1;
|
|
93
|
-
for (;;) {
|
|
94
|
-
const b = data[i++];
|
|
95
|
-
result += (b & 0x7f) * scale;
|
|
96
|
-
scale *= 128;
|
|
97
|
-
if (!(b & 0x80)) return result;
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
while (i < data.length) {
|
|
101
|
-
const key = varint();
|
|
102
|
-
numbers.push(Math.floor(key / 8));
|
|
103
|
-
const wireType = key % 8;
|
|
104
|
-
if (wireType === 0) varint();
|
|
105
|
-
else if (wireType === 1) i += 8;
|
|
106
|
-
else if (wireType === 2) {
|
|
107
|
-
const length = varint();
|
|
108
|
-
i += length;
|
|
109
|
-
}
|
|
110
|
-
else if (wireType === 5) i += 4;
|
|
111
|
-
else throw new Error(`unexpected wire type ${wireType}`);
|
|
112
|
-
}
|
|
113
|
-
return numbers;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
let warn: jest.SpyInstance;
|
|
117
|
-
|
|
118
|
-
beforeEach(() => {
|
|
119
|
-
objectTypes.resetWarningsForTests();
|
|
120
|
-
warn = jest.spyOn(console, 'warn').mockImplementation(() => undefined);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
afterEach(() => {
|
|
124
|
-
warn.mockRestore();
|
|
125
|
-
objectTypes.resetWarningsForTests();
|
|
37
|
+
// A PriceProto written by ledger-models v0.4.33: object_class / version
|
|
38
|
+
// strings in fields 1 and 2.
|
|
39
|
+
const OLD_PRICE = path.resolve(__dirname, '../../../../ledger-models-protos/fixtures/legacy_v0433/price.bin');
|
|
40
|
+
|
|
41
|
+
// ---- stamp round-trips (metric 2) ----
|
|
42
|
+
|
|
43
|
+
test('a stamped price round-trips type and version', () => {
|
|
44
|
+
const price = objectTypes.stamp(new PriceProto(), ObjectTypeProto.OBJECT_TYPE_PRICE);
|
|
45
|
+
const bytes = price.serializeBinary();
|
|
46
|
+
// Exactly field 1 (varint 11) and field 2 ({patch: 1}): nothing at the
|
|
47
|
+
// removed 1001-1004.
|
|
48
|
+
expect(Array.from(bytes)).toEqual([0x08, 11, 0x12, 0x02, 0x18, 0x01]);
|
|
49
|
+
|
|
50
|
+
const reread = PriceProto.deserializeBinary(bytes);
|
|
51
|
+
expect(objectTypes.readType(reread)).toBe(ObjectTypeProto.OBJECT_TYPE_PRICE);
|
|
52
|
+
expect(objectTypes.readVersion(reread)).toEqual([0, 0, 1]);
|
|
53
|
+
const version = reread.getVersion() as VersionProto;
|
|
54
|
+
expect([version.getMajor(), version.getMinor(), version.getPatch()]).toEqual([0, 0, 1]);
|
|
55
|
+
// Nothing unknown kept on re-serialising.
|
|
56
|
+
expect(Array.from(reread.serializeBinary())).toEqual(Array.from(bytes));
|
|
126
57
|
});
|
|
127
58
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
describe.each(CASES.map((c) => [c.name, c] as const))('fixture row %s', (_name, c) => {
|
|
133
|
-
test('decodes to the expected type and version', () => {
|
|
134
|
-
const message = decode(c);
|
|
135
|
-
expect(objectTypes.readType(message)).toBe(ObjectTypeProto[c.expect.object_type]);
|
|
136
|
-
expect(objectTypes.readVersion(message)).toEqual(c.expect.version);
|
|
137
|
-
expect(fallbackWarnings()).toBe(c.expect.warns ? 1 : 0);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
test('re-serialises with the compact fields once upgraded', () => {
|
|
141
|
-
const data = objectTypes.upgrade(decode(c)).serializeBinary();
|
|
142
|
-
const expected: Record<string, number> = {
|
|
143
|
-
object_type: ObjectTypeProto[c.expect.object_type],
|
|
144
|
-
version_major: c.expect.version[0],
|
|
145
|
-
version_minor: c.expect.version[1],
|
|
146
|
-
version_patch: c.expect.version[2],
|
|
147
|
-
};
|
|
148
|
-
const present = topLevelFieldNumbers(data);
|
|
149
|
-
for (const [name, number] of Object.entries(COMPACT_NUMBERS)) {
|
|
150
|
-
expect([name, present.includes(number)]).toEqual([name, expected[name] !== 0]);
|
|
151
|
-
}
|
|
152
|
-
const reread = CLASSES.get(c.message)!.deserializeBinary(data);
|
|
153
|
-
expect([reread.getObjectType(), reread.getVersionMajor(), reread.getVersionMinor(), reread.getVersionPatch()])
|
|
154
|
-
.toEqual([expected.object_type, expected.version_major, expected.version_minor, expected.version_patch]);
|
|
155
|
-
expect([reread.getObjectClass(), reread.getVersion()]).toEqual([c.object_class, c.version]);
|
|
156
|
-
});
|
|
59
|
+
test('an unstamped message reads as unknown and absent', () => {
|
|
60
|
+
const price = PriceProto.deserializeBinary(new PriceProto().serializeBinary());
|
|
61
|
+
expect(objectTypes.readType(price)).toBe(ObjectTypeProto.OBJECT_TYPE_UNKNOWN);
|
|
62
|
+
expect(objectTypes.readVersion(price)).toBeUndefined();
|
|
157
63
|
});
|
|
158
64
|
|
|
159
|
-
// ----
|
|
160
|
-
|
|
161
|
-
test('three strings-only decodes of one type warn once', () => {
|
|
162
|
-
const c = CASES.find((row) => row.name === 'js-PositionFilterProto')!;
|
|
163
|
-
for (let i = 0; i < 3; i++) {
|
|
164
|
-
objectTypes.upgrade(decode(c));
|
|
165
|
-
}
|
|
166
|
-
expect(fallbackWarnings()).toBe(1);
|
|
167
|
-
});
|
|
65
|
+
// ---- Old bytes are not readable (metric 3) ----
|
|
168
66
|
|
|
169
|
-
test('
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
expect(fallbackWarnings()).toBe(0);
|
|
67
|
+
test('bytes from v0.4.33 are not readable', () => {
|
|
68
|
+
// Field 2 held the string "0.0.1", which does not parse as a VersionProto.
|
|
69
|
+
const old = new Uint8Array(fs.readFileSync(OLD_PRICE));
|
|
70
|
+
expect(() => PriceProto.deserializeBinary(old)).toThrow();
|
|
174
71
|
});
|
|
175
72
|
|
|
176
|
-
// ----
|
|
73
|
+
// ---- Every library writer stamps the new form (metric 2) ----
|
|
177
74
|
|
|
178
75
|
/** A service with its gRPC client swapped for one that records each request. */
|
|
179
76
|
function capturingService<S extends object>(cls: { prototype: S }, response: () => unknown): { service: S; requests: ObjectTyped[] } {
|
|
@@ -226,7 +123,7 @@ async function linkResolverRequests(): Promise<ObjectTyped[]> {
|
|
|
226
123
|
return requests;
|
|
227
124
|
}
|
|
228
125
|
|
|
229
|
-
type Writer = [string, () => Promise<ObjectTyped>, ObjectTypeProto
|
|
126
|
+
type Writer = [string, () => Promise<ObjectTyped>, ObjectTypeProto];
|
|
230
127
|
|
|
231
128
|
async function lastRequest<S extends object>(cls: { prototype: S }, call: (service: S) => Promise<unknown>): Promise<ObjectTyped> {
|
|
232
129
|
const { service, requests } = capturingService(cls, () => new SummaryProto());
|
|
@@ -236,41 +133,41 @@ async function lastRequest<S extends object>(cls: { prototype: S }, call: (servi
|
|
|
236
133
|
|
|
237
134
|
const LIBRARY_WRITERS: Writer[] = [
|
|
238
135
|
['Price.fromSimple', async () => Price.fromSimple(UUID.random().toString(), 1, new Date()).proto,
|
|
239
|
-
ObjectTypeProto.OBJECT_TYPE_PRICE
|
|
136
|
+
ObjectTypeProto.OBJECT_TYPE_PRICE],
|
|
240
137
|
['Price.create', async () => Price.create(new Decimal(1), security(), ZonedDateTime.now()).proto,
|
|
241
|
-
ObjectTypeProto.OBJECT_TYPE_PRICE
|
|
138
|
+
ObjectTypeProto.OBJECT_TYPE_PRICE],
|
|
242
139
|
['PositionFilter.toProto', async () => filter().toProto(),
|
|
243
|
-
ObjectTypeProto.OBJECT_TYPE_POSITION_FILTER
|
|
140
|
+
ObjectTypeProto.OBJECT_TYPE_POSITION_FILTER],
|
|
244
141
|
['QueryPositionRequest.toProto', async () => new QueryPositionRequest(
|
|
245
142
|
filter(), PositionTypeProto.TRANSACTION, PositionViewProto.DEFAULT_VIEW, [], [], ZonedDateTime.now()).toProto(),
|
|
246
|
-
ObjectTypeProto.OBJECT_TYPE_QUERY_POSITION_REQUEST
|
|
143
|
+
ObjectTypeProto.OBJECT_TYPE_QUERY_POSITION_REQUEST],
|
|
247
144
|
['Transaction', async () => transaction().proto,
|
|
248
|
-
ObjectTypeProto.OBJECT_TYPE_TRANSACTION
|
|
145
|
+
ObjectTypeProto.OBJECT_TYPE_TRANSACTION],
|
|
249
146
|
['Transaction strategy allocation', async () => transaction().proto.getStrategyAllocation()!,
|
|
250
|
-
ObjectTypeProto.OBJECT_TYPE_STRATEGY_ALLOCATION
|
|
147
|
+
ObjectTypeProto.OBJECT_TYPE_STRATEGY_ALLOCATION],
|
|
251
148
|
['PriceService.validateCreateOrUpdate', () => lastRequest(PriceService, (s) => s.validateCreateOrUpdate(new PriceProto())),
|
|
252
|
-
ObjectTypeProto.OBJECT_TYPE_CREATE_PRICE_REQUEST
|
|
149
|
+
ObjectTypeProto.OBJECT_TYPE_CREATE_PRICE_REQUEST],
|
|
253
150
|
['PriceService.search', () => lastRequest(PriceService, (s) => s.search(asOf, filter())),
|
|
254
|
-
ObjectTypeProto.OBJECT_TYPE_QUERY_PRICE_REQUEST
|
|
151
|
+
ObjectTypeProto.OBJECT_TYPE_QUERY_PRICE_REQUEST],
|
|
255
152
|
['SecurityService.validateCreateSecurity', () => lastRequest(SecurityService, (s) => s.validateCreateSecurity(new SecurityProto())),
|
|
256
|
-
ObjectTypeProto.OBJECT_TYPE_CREATE_SECURITY_REQUEST
|
|
153
|
+
ObjectTypeProto.OBJECT_TYPE_CREATE_SECURITY_REQUEST],
|
|
257
154
|
['SecurityService.searchSecurity', () => lastRequest(SecurityService, (s) => s.searchSecurity(asOf, filter())),
|
|
258
|
-
ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST
|
|
155
|
+
ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST],
|
|
259
156
|
['TransactionService.validateCreateTransaction', () => lastRequest(TransactionService,
|
|
260
157
|
(s) => s.validateCreateTransaction({ proto: new TransactionProto() } as Transaction)),
|
|
261
|
-
ObjectTypeProto.OBJECT_TYPE_CREATE_TRANSACTION_REQUEST
|
|
158
|
+
ObjectTypeProto.OBJECT_TYPE_CREATE_TRANSACTION_REQUEST],
|
|
262
159
|
['TransactionService.searchTransaction', () => lastRequest(TransactionService, (s) => s.searchTransaction(asOf, filter())),
|
|
263
|
-
ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST
|
|
160
|
+
ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST],
|
|
264
161
|
['PortfolioService.validateCreatePortfolio', () => lastRequest(PortfolioService, (s) => s.validateCreatePortfolio(new PortfolioProto())),
|
|
265
|
-
ObjectTypeProto.OBJECT_TYPE_CREATE_PORTFOLIO_REQUEST
|
|
162
|
+
ObjectTypeProto.OBJECT_TYPE_CREATE_PORTFOLIO_REQUEST],
|
|
266
163
|
['PortfolioService.searchPortfolio', () => lastRequest(PortfolioService, (s) => s.searchPortfolio(asOf, filter())),
|
|
267
|
-
ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST
|
|
164
|
+
ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST],
|
|
268
165
|
['LinkResolver securities', async () => (await linkResolverRequests())[0],
|
|
269
|
-
ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST
|
|
166
|
+
ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST],
|
|
270
167
|
['LinkResolver portfolios', async () => (await linkResolverRequests())[1],
|
|
271
|
-
ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST
|
|
168
|
+
ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST],
|
|
272
169
|
['LinkResolver transactions', async () => (await linkResolverRequests())[2],
|
|
273
|
-
ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST
|
|
170
|
+
ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST],
|
|
274
171
|
];
|
|
275
172
|
|
|
276
173
|
function transaction(): Transaction {
|
|
@@ -286,22 +183,10 @@ function transaction(): Transaction {
|
|
|
286
183
|
});
|
|
287
184
|
}
|
|
288
185
|
|
|
289
|
-
test.each(LIBRARY_WRITERS)('%s
|
|
186
|
+
test.each(LIBRARY_WRITERS)('%s stamps the type and schema version', async (_name, build, type) => {
|
|
290
187
|
const message = await build();
|
|
291
188
|
|
|
292
|
-
expect(
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
expect(message.getObjectType()).toBe(type);
|
|
296
|
-
if (objectClass) {
|
|
297
|
-
expect(objectTypes.fromLegacy(objectClass)).not.toBe(ObjectTypeProto.OBJECT_TYPE_UNKNOWN);
|
|
298
|
-
}
|
|
299
|
-
expect([message.getVersionMajor(), message.getVersionMinor(), message.getVersionPatch()])
|
|
300
|
-
.toEqual(objectTypes.parseVersion(version));
|
|
301
|
-
expect(objectTypes.readVersion(message)).toEqual(objectTypes.parseVersion(version));
|
|
302
|
-
expect(fallbackWarnings()).toBe(0);
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
test('stamp rejects a malformed version', () => {
|
|
306
|
-
expect(() => objectTypes.stamp(new PriceProto(), ObjectTypeProto.OBJECT_TYPE_PRICE, 'Price', '1.2')).toThrow();
|
|
189
|
+
expect(objectTypes.readType(message)).toBe(type);
|
|
190
|
+
expect(objectTypes.readVersion(message)).toEqual(objectTypes.SCHEMA_VERSION);
|
|
191
|
+
expect(objectTypes.SCHEMA_VERSION).toEqual([0, 0, 1]);
|
|
307
192
|
});
|
|
@@ -1,207 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Object type and version (LM-297, LM-318).
|
|
3
3
|
*
|
|
4
|
-
* Every message
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* throws: an unknown object_class gives OBJECT_TYPE_UNKNOWN and a malformed
|
|
11
|
-
* version gives 0.0.0. Empty strings are the proto3 default and fall back
|
|
12
|
-
* silently.
|
|
13
|
-
*
|
|
14
|
-
* google-protobuf cannot read the `(legacy_object_class)` options at runtime,
|
|
15
|
-
* so the string map comes from object-type-legacy.json, generated by
|
|
16
|
-
* scripts/gen-object-type-legacy-map.py. See docs/adr/compact_object_type_and_version.md.
|
|
4
|
+
* Every message that names its type carries `ObjectTypeProto object_type = 1`
|
|
5
|
+
* and `VersionProto version = 2`. Writers call `stamp`, which sets the type and
|
|
6
|
+
* `SCHEMA_VERSION`. Readers call `readType` / `readVersion`. The old
|
|
7
|
+
* `object_class` / `version` strings were replaced in place by LM-318: bytes
|
|
8
|
+
* written before it are not readable. See
|
|
9
|
+
* docs/adr/compact_object_type_and_version.md.
|
|
17
10
|
*/
|
|
18
11
|
import { ObjectTypeProto } from '../../fintekkers/models/util/object_type_pb';
|
|
19
|
-
import
|
|
12
|
+
import { VersionProto } from '../../fintekkers/models/util/version_pb';
|
|
20
13
|
|
|
21
|
-
/** Any generated message that carries
|
|
14
|
+
/** Any generated message that carries object_type and version. */
|
|
22
15
|
export interface ObjectTyped {
|
|
23
|
-
getObjectClass(): string;
|
|
24
|
-
setObjectClass(value: string): unknown;
|
|
25
|
-
getVersion(): string;
|
|
26
|
-
setVersion(value: string): unknown;
|
|
27
16
|
getObjectType(): ObjectTypeProto;
|
|
28
17
|
setObjectType(value: ObjectTypeProto): unknown;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
setVersionMinor(value: number): unknown;
|
|
33
|
-
getVersionPatch(): number;
|
|
34
|
-
setVersionPatch(value: number): unknown;
|
|
18
|
+
hasVersion(): boolean;
|
|
19
|
+
getVersion(): VersionProto | undefined;
|
|
20
|
+
setVersion(value?: VersionProto): unknown;
|
|
35
21
|
}
|
|
36
22
|
|
|
37
23
|
/** [major, minor, patch], each a uint32. */
|
|
38
24
|
export type Version = [number, number, number];
|
|
39
25
|
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
function buildLegacyMap(): Map<string, ObjectTypeProto> {
|
|
44
|
-
const map = new Map<string, ObjectTypeProto>();
|
|
45
|
-
for (const [legacy, name] of Object.entries(legacyMirror.legacy_object_class)) {
|
|
46
|
-
if (!Object.prototype.hasOwnProperty.call(ObjectTypeProto, name)) {
|
|
47
|
-
throw new Error(`object-type-legacy.json names ${name}, which ObjectTypeProto lacks: regenerate it`);
|
|
48
|
-
}
|
|
49
|
-
map.set(legacy, ObjectTypeProto[name as keyof typeof ObjectTypeProto]);
|
|
50
|
-
}
|
|
51
|
-
return map;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const LEGACY = buildLegacyMap();
|
|
55
|
-
const warned = new Set<string>();
|
|
56
|
-
const UNKNOWN_NAME = Object.keys(ObjectTypeProto)
|
|
57
|
-
.find((name) => ObjectTypeProto[name as keyof typeof ObjectTypeProto] === ObjectTypeProto.OBJECT_TYPE_UNKNOWN) as string;
|
|
58
|
-
const PREFIX = UNKNOWN_NAME.slice(0, -'UNKNOWN'.length);
|
|
59
|
-
const CAMEL_BOUNDARY = /(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/g;
|
|
60
|
-
const ownTypes = new WeakMap<object, ObjectTypeProto>();
|
|
61
|
-
|
|
62
|
-
/** The ObjectTypeProto value an object_class string stands for, or OBJECT_TYPE_UNKNOWN. */
|
|
63
|
-
export function fromLegacy(objectClass: string): ObjectTypeProto {
|
|
64
|
-
return LEGACY.get(objectClass) ?? ObjectTypeProto.OBJECT_TYPE_UNKNOWN;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* The ObjectTypeProto value named for a message type, or OBJECT_TYPE_UNKNOWN.
|
|
69
|
-
* Uses the enum's naming rule: `QuerySecurityRequestProto` ->
|
|
70
|
-
* OBJECT_TYPE_QUERY_SECURITY_REQUEST.
|
|
71
|
-
*/
|
|
72
|
-
export function ownType(messageName: string): ObjectTypeProto {
|
|
73
|
-
const base = messageName.endsWith('Proto') ? messageName.slice(0, -'Proto'.length) : messageName;
|
|
74
|
-
const name = PREFIX + base.replace(CAMEL_BOUNDARY, '_').toUpperCase();
|
|
75
|
-
return Object.prototype.hasOwnProperty.call(ObjectTypeProto, name)
|
|
76
|
-
? ObjectTypeProto[name as keyof typeof ObjectTypeProto]
|
|
77
|
-
: ObjectTypeProto.OBJECT_TYPE_UNKNOWN;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* The generated class name of `message`. google-protobuf's classes are
|
|
82
|
-
* anonymous functions, but each generated module exports its classes under
|
|
83
|
-
* the global `proto` namespace by full name, so search that.
|
|
84
|
-
*/
|
|
85
|
-
function messageName(ctor: object, namespace: unknown, depth = 0): string | undefined {
|
|
86
|
-
if (typeof namespace !== 'object' || namespace === null || depth > 8) return undefined;
|
|
87
|
-
for (const [key, value] of Object.entries(namespace)) {
|
|
88
|
-
if (value === ctor) return key;
|
|
89
|
-
const found = messageName(ctor, value, depth + 1);
|
|
90
|
-
if (found !== undefined) return found;
|
|
91
|
-
}
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function ownTypeOf(message: ObjectTyped): ObjectTypeProto {
|
|
96
|
-
const ctor = message.constructor;
|
|
97
|
-
let type = ownTypes.get(ctor);
|
|
98
|
-
if (type === undefined) {
|
|
99
|
-
const name = messageName(ctor, (globalThis as { proto?: unknown }).proto);
|
|
100
|
-
type = name === undefined ? ObjectTypeProto.OBJECT_TYPE_UNKNOWN : ownType(name);
|
|
101
|
-
ownTypes.set(ctor, type);
|
|
102
|
-
}
|
|
103
|
-
return type;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/** '1.2.3' -> [1, 2, 3]; null unless exactly three decimal uint32 parts. */
|
|
107
|
-
export function parseVersion(version: string): Version | null {
|
|
108
|
-
if (!VERSION_PATTERN.test(version)) return null;
|
|
109
|
-
const parts = version.split('.').map(Number);
|
|
110
|
-
if (parts.some((p) => p > UINT32_MAX)) return null;
|
|
111
|
-
return [parts[0], parts[1], parts[2]];
|
|
112
|
-
}
|
|
26
|
+
/** The schema version `stamp` writes. Not the library release. */
|
|
27
|
+
export const SCHEMA_VERSION: Version = [0, 0, 1];
|
|
113
28
|
|
|
114
29
|
/**
|
|
115
|
-
* Sets
|
|
116
|
-
* `objectType` is the message's own ObjectTypeProto value.
|
|
117
|
-
* empty or three uint32 parts.
|
|
30
|
+
* Sets object_type and version (`SCHEMA_VERSION`) on `message`; returns it.
|
|
31
|
+
* `objectType` is the message's own ObjectTypeProto value.
|
|
118
32
|
*/
|
|
119
|
-
export function stamp<T extends ObjectTyped>(message: T, objectType: ObjectTypeProto
|
|
120
|
-
const
|
|
121
|
-
if (parts === null) {
|
|
122
|
-
throw new Error(`version must be MAJOR.MINOR.PATCH, got '${version}'`);
|
|
123
|
-
}
|
|
124
|
-
message.setObjectClass(objectClass);
|
|
125
|
-
message.setVersion(version);
|
|
33
|
+
export function stamp<T extends ObjectTyped>(message: T, objectType: ObjectTypeProto): T {
|
|
34
|
+
const [major, minor, patch] = SCHEMA_VERSION;
|
|
126
35
|
message.setObjectType(objectType);
|
|
127
|
-
|
|
36
|
+
message.setVersion(new VersionProto().setMajor(major).setMinor(minor).setPatch(patch));
|
|
128
37
|
return message;
|
|
129
38
|
}
|
|
130
39
|
|
|
131
|
-
function setCompactVersion(message: ObjectTyped, [major, minor, patch]: Version): void {
|
|
132
|
-
message.setVersionMajor(major);
|
|
133
|
-
message.setVersionMinor(minor);
|
|
134
|
-
message.setVersionPatch(patch);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function compactVersion(message: ObjectTyped): Version {
|
|
138
|
-
return [message.getVersionMajor(), message.getVersionMinor(), message.getVersionPatch()];
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function decode(message: ObjectTyped): { objectType: ObjectTypeProto; version: Version } {
|
|
142
|
-
const objectClass = message.getObjectClass();
|
|
143
|
-
const versionString = message.getVersion();
|
|
144
|
-
let objectType = message.getObjectType();
|
|
145
|
-
let version = compactVersion(message);
|
|
146
|
-
const problems: string[] = [];
|
|
147
|
-
let usedStrings = false;
|
|
148
|
-
|
|
149
|
-
if (objectType === ObjectTypeProto.OBJECT_TYPE_UNKNOWN && objectClass) {
|
|
150
|
-
usedStrings = true;
|
|
151
|
-
objectType = fromLegacy(objectClass);
|
|
152
|
-
if (objectType === ObjectTypeProto.OBJECT_TYPE_UNKNOWN) {
|
|
153
|
-
problems.push(' (unknown object_class, using OBJECT_TYPE_UNKNOWN)');
|
|
154
|
-
} else {
|
|
155
|
-
// Some strings were written on more than one message type (e.g.
|
|
156
|
-
// 'SecurityRequest' on the create and query requests): the message's
|
|
157
|
-
// own type wins over the value the string sits on.
|
|
158
|
-
const own = ownTypeOf(message);
|
|
159
|
-
if (own !== ObjectTypeProto.OBJECT_TYPE_UNKNOWN) objectType = own;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (version.every((p) => p === 0) && versionString) {
|
|
163
|
-
usedStrings = true;
|
|
164
|
-
const parsed = parseVersion(versionString);
|
|
165
|
-
if (parsed === null) {
|
|
166
|
-
problems.push(' (malformed version, using 0.0.0)');
|
|
167
|
-
} else {
|
|
168
|
-
version = parsed;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const key = `${objectClass}\u0000${versionString}`;
|
|
173
|
-
if (usedStrings && !warned.has(key)) {
|
|
174
|
-
warned.add(key);
|
|
175
|
-
console.warn(
|
|
176
|
-
`${message.constructor.name} read from deprecated strings object_class='${objectClass}' ` +
|
|
177
|
-
`version='${versionString}'${problems.join('')}; re-save it to write object_type and ` +
|
|
178
|
-
'version_major/minor/patch (LM-297)');
|
|
179
|
-
}
|
|
180
|
-
return { objectType, version };
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/** The message's ObjectTypeProto value: object_type, else the object_class string. */
|
|
184
|
-
export function readType(message: ObjectTyped): ObjectTypeProto {
|
|
185
|
-
return decode(message).objectType;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/** The message's [major, minor, patch]: the compact fields, else the version string. */
|
|
189
|
-
export function readVersion(message: ObjectTyped): Version {
|
|
190
|
-
return decode(message).version;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
40
|
/**
|
|
194
|
-
*
|
|
195
|
-
*
|
|
41
|
+
* The message's ObjectTypeProto value; OBJECT_TYPE_UNKNOWN when unset. A value
|
|
42
|
+
* added after this build is returned as its number.
|
|
196
43
|
*/
|
|
197
|
-
export function
|
|
198
|
-
|
|
199
|
-
message.setObjectType(objectType);
|
|
200
|
-
setCompactVersion(message, version);
|
|
201
|
-
return message;
|
|
44
|
+
export function readType(message: ObjectTyped): ObjectTypeProto {
|
|
45
|
+
return message.getObjectType();
|
|
202
46
|
}
|
|
203
47
|
|
|
204
|
-
/**
|
|
205
|
-
export function
|
|
206
|
-
|
|
48
|
+
/** The message's [major, minor, patch], or undefined when version is absent. */
|
|
49
|
+
export function readVersion(message: ObjectTyped): Version | undefined {
|
|
50
|
+
const version = message.getVersion();
|
|
51
|
+
if (!message.hasVersion() || version === undefined) return undefined;
|
|
52
|
+
return [version.getMajor(), version.getMinor(), version.getPatch()];
|
|
207
53
|
}
|
package/package.json
CHANGED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
var uuid_1 = require("../utils/uuid");
|
|
40
|
-
var any_pb_1 = require("google-protobuf/google/protobuf/any_pb");
|
|
41
|
-
var decimal_value_pb_1 = require("../../../fintekkers/models/util/decimal_value_pb");
|
|
42
|
-
var position_pb_1 = require("../../../fintekkers/models/position/position_pb");
|
|
43
|
-
var position_util_pb_1 = require("../../../fintekkers/models/position/position_util_pb");
|
|
44
|
-
var field_pb_1 = require("../../../fintekkers/models/position/field_pb");
|
|
45
|
-
var measure_pb_1 = require("../../../fintekkers/models/position/measure_pb");
|
|
46
|
-
var security_pb_1 = require("../../../fintekkers/models/security/security_pb");
|
|
47
|
-
var portfolio_pb_1 = require("../../../fintekkers/models/portfolio/portfolio_pb");
|
|
48
|
-
var position_1 = require("./position");
|
|
49
|
-
var date_1 = require("../utils/date");
|
|
50
|
-
var position_status_pb_1 = require("../../../fintekkers/models/position/position_status_pb");
|
|
51
|
-
test('test the position wrapper', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
52
|
-
var isTrue;
|
|
53
|
-
return __generator(this, function (_a) {
|
|
54
|
-
switch (_a.label) {
|
|
55
|
-
case 0: return [4 /*yield*/, testSerialization()];
|
|
56
|
-
case 1:
|
|
57
|
-
isTrue = _a.sent();
|
|
58
|
-
expect(isTrue).toBe(true);
|
|
59
|
-
return [2 /*return*/];
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
}); });
|
|
63
|
-
function testSerialization() {
|
|
64
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
-
var fields, security, portfolio, tradeDate, productType, id, measure, measureValue, tradeDatePacked, idPacked, positionProto, position, tradeDatePosition, securityPosition, portfolioPosition, positionID;
|
|
66
|
-
return __generator(this, function (_a) {
|
|
67
|
-
fields = [field_pb_1.FieldProto.ID, field_pb_1.FieldProto.TRADE_DATE, field_pb_1.FieldProto.PRODUCT_TYPE, field_pb_1.FieldProto.PORTFOLIO, field_pb_1.FieldProto.SECURITY];
|
|
68
|
-
security = new security_pb_1.SecurityProto().setAssetClass("Test");
|
|
69
|
-
portfolio = new portfolio_pb_1.PortfolioProto().setPortfolioName("Test portfolio");
|
|
70
|
-
tradeDate = date_1.LocalDate.today().toDate();
|
|
71
|
-
productType = "Test product type";
|
|
72
|
-
id = new uuid_1.UUID(uuid_1.UUID.random().toBytes());
|
|
73
|
-
measure = measure_pb_1.MeasureProto.DIRECTED_QUANTITY;
|
|
74
|
-
measureValue = new decimal_value_pb_1.DecimalValueProto().setArbitraryPrecisionValue("1.0");
|
|
75
|
-
tradeDatePacked = new any_pb_1.Any();
|
|
76
|
-
tradeDatePacked.setTypeUrl("Doesn't matter");
|
|
77
|
-
tradeDatePacked.setValue(date_1.LocalDate.from(tradeDate).toProto().serializeBinary());
|
|
78
|
-
idPacked = new any_pb_1.Any();
|
|
79
|
-
idPacked.setTypeUrl("Doesn't matter");
|
|
80
|
-
idPacked.setValue(id.toUUIDProto().serializeBinary());
|
|
81
|
-
positionProto = new position_pb_1.PositionProto();
|
|
82
|
-
positionProto.setFieldsList([
|
|
83
|
-
new position_util_pb_1.FieldMapEntry().setField(field_pb_1.FieldProto.TRADE_DATE).setFieldValuePacked(tradeDatePacked),
|
|
84
|
-
new position_util_pb_1.FieldMapEntry().setField(field_pb_1.FieldProto.SECURITY).setFieldValuePacked(security),
|
|
85
|
-
new position_util_pb_1.FieldMapEntry().setField(field_pb_1.FieldProto.PORTFOLIO).setFieldValuePacked(portfolio),
|
|
86
|
-
new position_util_pb_1.FieldMapEntry().setField(field_pb_1.FieldProto.POSITION_STATUS).setEnumValue(position_status_pb_1.PositionStatusProto.EXECUTED),
|
|
87
|
-
new position_util_pb_1.FieldMapEntry().setField(field_pb_1.FieldProto.PRODUCT_TYPE).setStringValue(productType),
|
|
88
|
-
new position_util_pb_1.FieldMapEntry().setField(field_pb_1.FieldProto.ID).setFieldValuePacked(idPacked),
|
|
89
|
-
]);
|
|
90
|
-
position = new position_1.Position(positionProto);
|
|
91
|
-
tradeDatePosition = position.getFieldValue(field_pb_1.FieldProto.TRADE_DATE);
|
|
92
|
-
expect(tradeDate.getFullYear()).toBe(tradeDatePosition.getFullYear());
|
|
93
|
-
expect(tradeDate.getMonth()).toBe(tradeDatePosition.getMonth());
|
|
94
|
-
expect(tradeDate.getDay()).toBe(tradeDatePosition.getDay());
|
|
95
|
-
securityPosition = position.getFieldValue(field_pb_1.FieldProto.SECURITY);
|
|
96
|
-
expect(securityPosition.getAssetClass()).toBe(security.getAssetClass());
|
|
97
|
-
portfolioPosition = position.getFieldValue(field_pb_1.FieldProto.PORTFOLIO);
|
|
98
|
-
expect(portfolioPosition.getPortfolioName()).toBe(portfolio.getPortfolioName());
|
|
99
|
-
expect(position.getFieldValue(field_pb_1.FieldProto.PRODUCT_TYPE)).toBe(productType);
|
|
100
|
-
positionID = position.getFieldValue(field_pb_1.FieldProto.ID);
|
|
101
|
-
expect(positionID.toString()).toBe(id.toString());
|
|
102
|
-
expect(position.getFieldValue(field_pb_1.FieldProto.POSITION_STATUS)).toBe(position_status_pb_1.PositionStatusProto.EXECUTED);
|
|
103
|
-
return [2 /*return*/, true];
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=position.test%20copy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"position.test copy.js","sourceRoot":"","sources":["position.test copy.ts"],"names":[],"mappings":"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"}
|