@fintekkers/ledger-models 0.4.43 → 0.4.45
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 +7 -15
- package/node/fintekkers/requests/valuation/curve_response_pb.js +35 -132
- 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-type-coverage.test.js +159 -0
- package/node/wrappers/util/object-type-coverage.test.js.map +1 -0
- package/node/wrappers/util/object-type-coverage.test.ts +149 -0
- package/node/wrappers/util/object-types.d.ts +30 -46
- package/node/wrappers/util/object-types.js +145 -170
- 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 +153 -178
- 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.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
- /package/node/wrappers/{models/utils/decimal.legacy.test.d.ts → util/object-type-coverage.test.d.ts} +0 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
// Every message with object_type has an own-type stamp (LM-320). Walks the
|
|
27
|
+
// descriptor set for messages whose field 1 is
|
|
28
|
+
// fintekkers.models.util.ObjectTypeProto, and fails when `stampOwn` has no
|
|
29
|
+
// entry for one. Stamps each and checks its own type and version (0, 0, 1).
|
|
30
|
+
const fs = __importStar(require("fs"));
|
|
31
|
+
const path = __importStar(require("path"));
|
|
32
|
+
const descriptor_pb_1 = require("google-protobuf/google/protobuf/descriptor_pb");
|
|
33
|
+
const object_type_pb_1 = require("../../fintekkers/models/util/object_type_pb");
|
|
34
|
+
const uuid_pb_1 = require("../../fintekkers/models/util/uuid_pb");
|
|
35
|
+
const objectTypes = __importStar(require("./object-types"));
|
|
36
|
+
// The descriptor set compile.sh writes for every language.
|
|
37
|
+
const DESCRIPTOR_SET = path.resolve(__dirname, '../../../../ledger-models-rust/ledger_models_file_descriptor_set_v_todo.bin');
|
|
38
|
+
const GENERATED = path.resolve(__dirname, '../..');
|
|
39
|
+
const OBJECT_TYPE_ENUM = '.fintekkers.models.util.ObjectTypeProto';
|
|
40
|
+
// The 13 types LM-320 names: every *ResponseProto and the index-composition
|
|
41
|
+
// requests and responses.
|
|
42
|
+
const NAMED = [
|
|
43
|
+
'fintekkers.requests.price.CreatePriceResponseProto',
|
|
44
|
+
'fintekkers.requests.price.QueryPriceResponseProto',
|
|
45
|
+
'fintekkers.requests.security.CreateSecurityResponseProto',
|
|
46
|
+
'fintekkers.requests.security.QuerySecurityResponseProto',
|
|
47
|
+
'fintekkers.requests.portfolio.CreatePortfolioResponseProto',
|
|
48
|
+
'fintekkers.requests.portfolio.QueryPortfolioResponseProto',
|
|
49
|
+
'fintekkers.requests.transaction.CreateTransactionResponseProto',
|
|
50
|
+
'fintekkers.requests.transaction.QueryTransactionResponseProto',
|
|
51
|
+
'fintekkers.requests.position.QueryPositionResponseProto',
|
|
52
|
+
'fintekkers.requests.index_composition.CreateIndexCompositionRequestProto',
|
|
53
|
+
'fintekkers.requests.index_composition.CreateIndexCompositionResponseProto',
|
|
54
|
+
'fintekkers.requests.index_composition.GetIndexCompositionRequestProto',
|
|
55
|
+
'fintekkers.requests.index_composition.GetIndexCompositionResponseProto',
|
|
56
|
+
];
|
|
57
|
+
/** Full name -> generated class of every message whose field 1 is ObjectTypeProto. */
|
|
58
|
+
function walk() {
|
|
59
|
+
if (!fs.existsSync(DESCRIPTOR_SET))
|
|
60
|
+
throw new Error(`descriptor set not found at ${DESCRIPTOR_SET}`);
|
|
61
|
+
const found = new Map();
|
|
62
|
+
const set = descriptor_pb_1.FileDescriptorSet.deserializeBinary(new Uint8Array(fs.readFileSync(DESCRIPTOR_SET)));
|
|
63
|
+
const isTyped = (message) => message.getFieldList().some((f) => f.getNumber() === 1 && f.getTypeName() === OBJECT_TYPE_ENUM);
|
|
64
|
+
for (const file of set.getFileList()) {
|
|
65
|
+
const fileName = file.getName();
|
|
66
|
+
// Loaded only for a typed message: google/protobuf/* has no module here.
|
|
67
|
+
const generated = () => require(path.join(GENERATED, fileName.replace(/\.proto$/, '_pb')));
|
|
68
|
+
const visit = (fullName, scope, message) => {
|
|
69
|
+
const messageClass = () => scope()[message.getName()];
|
|
70
|
+
if (isTyped(message)) {
|
|
71
|
+
if (typeof messageClass() !== 'function')
|
|
72
|
+
throw new Error(`${fullName}: no generated class in ${fileName}`);
|
|
73
|
+
found.set(fullName, messageClass());
|
|
74
|
+
}
|
|
75
|
+
for (const nested of message.getNestedTypeList()) {
|
|
76
|
+
visit(`${fullName}.${nested.getName()}`, messageClass, nested);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
for (const message of file.getMessageTypeList()) {
|
|
80
|
+
visit(`${file.getPackage()}.${message.getName()}`, generated, message);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return found;
|
|
84
|
+
}
|
|
85
|
+
const WALKED = walk();
|
|
86
|
+
/** The walked names that `lookup` has no own type for. */
|
|
87
|
+
function missingTypes(walked, lookup) {
|
|
88
|
+
return Array.from(walked).filter((name) => lookup(name) === undefined);
|
|
89
|
+
}
|
|
90
|
+
function lookup(fullName) {
|
|
91
|
+
const messageClass = WALKED.get(fullName);
|
|
92
|
+
return objectTypes.ownType(new messageClass());
|
|
93
|
+
}
|
|
94
|
+
/** The value the naming rule gives: message name without Proto, in SCREAMING_SNAKE, prefixed OBJECT_TYPE_. */
|
|
95
|
+
function expectedType(fullName) {
|
|
96
|
+
const name = fullName.split('.').pop().replace(/Proto$/, '');
|
|
97
|
+
const enumName = 'OBJECT_TYPE_' + name.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();
|
|
98
|
+
const value = object_type_pb_1.ObjectTypeProto[enumName];
|
|
99
|
+
if (value === undefined)
|
|
100
|
+
throw new Error(`${fullName}: no ${enumName} in ObjectTypeProto`);
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
test('the walk finds every typed message, including the named ones', () => {
|
|
104
|
+
expect(WALKED.size).toBeGreaterThanOrEqual(49);
|
|
105
|
+
for (const name of NAMED)
|
|
106
|
+
expect(WALKED.has(name)).toBe(true);
|
|
107
|
+
});
|
|
108
|
+
test('every typed message has an own type', () => {
|
|
109
|
+
expect(missingTypes(WALKED.keys(), lookup)).toEqual([]);
|
|
110
|
+
});
|
|
111
|
+
test('a missing entry is reported', () => {
|
|
112
|
+
const dropped = 'fintekkers.requests.price.QueryPriceResponseProto';
|
|
113
|
+
const without = (name) => (name === dropped ? undefined : lookup(name));
|
|
114
|
+
expect(missingTypes(WALKED.keys(), without)).toEqual([dropped]);
|
|
115
|
+
});
|
|
116
|
+
test.each(Array.from(WALKED.keys()).sort())('stamping %s sets its own type and version', (fullName) => {
|
|
117
|
+
const messageClass = WALKED.get(fullName);
|
|
118
|
+
const stamped = objectTypes.stampOwn(new messageClass());
|
|
119
|
+
const expected = expectedType(fullName);
|
|
120
|
+
expect(objectTypes.readType(stamped)).toBe(expected);
|
|
121
|
+
expect(objectTypes.readVersion(stamped)).toEqual([0, 0, 1]);
|
|
122
|
+
// The name table agrees with the class table.
|
|
123
|
+
expect(objectTypes.OWN_TYPE_NAMES.get(fullName)).toBe(expected);
|
|
124
|
+
});
|
|
125
|
+
test('own types are distinct and known', () => {
|
|
126
|
+
const types = Array.from(WALKED.keys()).map(lookup);
|
|
127
|
+
expect(types).not.toContain(object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_UNKNOWN);
|
|
128
|
+
expect(new Set(types).size).toBe(types.length);
|
|
129
|
+
});
|
|
130
|
+
test('the LM-318 entries keep their values', () => {
|
|
131
|
+
const lm318 = [
|
|
132
|
+
['fintekkers.models.portfolio.PortfolioProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PORTFOLIO],
|
|
133
|
+
['fintekkers.models.position.PositionProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_POSITION],
|
|
134
|
+
['fintekkers.models.position.PositionFilterProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_POSITION_FILTER],
|
|
135
|
+
['fintekkers.models.price.PriceProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_PRICE],
|
|
136
|
+
['fintekkers.models.security.IdentifierProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_IDENTIFIER],
|
|
137
|
+
['fintekkers.models.security.SecurityProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_SECURITY],
|
|
138
|
+
['fintekkers.models.security.TenorProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_TENOR],
|
|
139
|
+
['fintekkers.models.strategy.StrategyProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_STRATEGY],
|
|
140
|
+
['fintekkers.models.strategy.StrategyAllocationProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_STRATEGY_ALLOCATION],
|
|
141
|
+
['fintekkers.models.transaction.TransactionProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_TRANSACTION],
|
|
142
|
+
['fintekkers.requests.portfolio.CreatePortfolioRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_PORTFOLIO_REQUEST],
|
|
143
|
+
['fintekkers.requests.portfolio.QueryPortfolioRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST],
|
|
144
|
+
['fintekkers.requests.price.CreatePriceRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_PRICE_REQUEST],
|
|
145
|
+
['fintekkers.requests.price.QueryPriceRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_PRICE_REQUEST],
|
|
146
|
+
['fintekkers.requests.security.CreateSecurityRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_SECURITY_REQUEST],
|
|
147
|
+
['fintekkers.requests.security.QuerySecurityRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST],
|
|
148
|
+
['fintekkers.requests.transaction.CreateTransactionRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_CREATE_TRANSACTION_REQUEST],
|
|
149
|
+
['fintekkers.requests.transaction.QueryTransactionRequestProto', object_type_pb_1.ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST],
|
|
150
|
+
];
|
|
151
|
+
for (const [name, objectType] of lm318)
|
|
152
|
+
expect([name, lookup(name)]).toEqual([name, objectType]);
|
|
153
|
+
});
|
|
154
|
+
test('stampOwn on a message without object_type throws', () => {
|
|
155
|
+
expect(objectTypes.ownType(new uuid_pb_1.UUIDProto())).toBeUndefined();
|
|
156
|
+
expect(objectTypes.ownType({})).toBeUndefined();
|
|
157
|
+
expect(() => objectTypes.stampOwn(new uuid_pb_1.UUIDProto())).toThrow('this message type has no own ObjectTypeProto');
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=object-type-coverage.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-type-coverage.test.js","sourceRoot":"","sources":["object-type-coverage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// Every message with object_type has an own-type stamp (LM-320). Walks the
|
|
2
|
+
// descriptor set for messages whose field 1 is
|
|
3
|
+
// fintekkers.models.util.ObjectTypeProto, and fails when `stampOwn` has no
|
|
4
|
+
// entry for one. Stamps each and checks its own type and version (0, 0, 1).
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { DescriptorProto, FileDescriptorSet } from 'google-protobuf/google/protobuf/descriptor_pb';
|
|
8
|
+
|
|
9
|
+
import { ObjectTypeProto } from '../../fintekkers/models/util/object_type_pb';
|
|
10
|
+
import { UUIDProto } from '../../fintekkers/models/util/uuid_pb';
|
|
11
|
+
|
|
12
|
+
import * as objectTypes from './object-types';
|
|
13
|
+
import { ObjectTyped } from './object-types';
|
|
14
|
+
|
|
15
|
+
// The descriptor set compile.sh writes for every language.
|
|
16
|
+
const DESCRIPTOR_SET = path.resolve(__dirname, '../../../../ledger-models-rust/ledger_models_file_descriptor_set_v_todo.bin');
|
|
17
|
+
const GENERATED = path.resolve(__dirname, '../..');
|
|
18
|
+
|
|
19
|
+
const OBJECT_TYPE_ENUM = '.fintekkers.models.util.ObjectTypeProto';
|
|
20
|
+
|
|
21
|
+
// The 13 types LM-320 names: every *ResponseProto and the index-composition
|
|
22
|
+
// requests and responses.
|
|
23
|
+
const NAMED = [
|
|
24
|
+
'fintekkers.requests.price.CreatePriceResponseProto',
|
|
25
|
+
'fintekkers.requests.price.QueryPriceResponseProto',
|
|
26
|
+
'fintekkers.requests.security.CreateSecurityResponseProto',
|
|
27
|
+
'fintekkers.requests.security.QuerySecurityResponseProto',
|
|
28
|
+
'fintekkers.requests.portfolio.CreatePortfolioResponseProto',
|
|
29
|
+
'fintekkers.requests.portfolio.QueryPortfolioResponseProto',
|
|
30
|
+
'fintekkers.requests.transaction.CreateTransactionResponseProto',
|
|
31
|
+
'fintekkers.requests.transaction.QueryTransactionResponseProto',
|
|
32
|
+
'fintekkers.requests.position.QueryPositionResponseProto',
|
|
33
|
+
'fintekkers.requests.index_composition.CreateIndexCompositionRequestProto',
|
|
34
|
+
'fintekkers.requests.index_composition.CreateIndexCompositionResponseProto',
|
|
35
|
+
'fintekkers.requests.index_composition.GetIndexCompositionRequestProto',
|
|
36
|
+
'fintekkers.requests.index_composition.GetIndexCompositionResponseProto',
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
type MessageClass = new () => ObjectTyped;
|
|
40
|
+
|
|
41
|
+
/** Full name -> generated class of every message whose field 1 is ObjectTypeProto. */
|
|
42
|
+
function walk(): Map<string, MessageClass> {
|
|
43
|
+
if (!fs.existsSync(DESCRIPTOR_SET)) throw new Error(`descriptor set not found at ${DESCRIPTOR_SET}`);
|
|
44
|
+
const found = new Map<string, MessageClass>();
|
|
45
|
+
const set = FileDescriptorSet.deserializeBinary(new Uint8Array(fs.readFileSync(DESCRIPTOR_SET)));
|
|
46
|
+
const isTyped = (message: DescriptorProto) =>
|
|
47
|
+
message.getFieldList().some((f) => f.getNumber() === 1 && f.getTypeName() === OBJECT_TYPE_ENUM);
|
|
48
|
+
for (const file of set.getFileList()) {
|
|
49
|
+
const fileName = file.getName() as string;
|
|
50
|
+
// Loaded only for a typed message: google/protobuf/* has no module here.
|
|
51
|
+
const generated = () => require(path.join(GENERATED, fileName.replace(/\.proto$/, '_pb')));
|
|
52
|
+
const visit = (fullName: string, scope: () => Record<string, unknown>, message: DescriptorProto) => {
|
|
53
|
+
const messageClass = () => scope()[message.getName() as string] as MessageClass & Record<string, unknown>;
|
|
54
|
+
if (isTyped(message)) {
|
|
55
|
+
if (typeof messageClass() !== 'function') throw new Error(`${fullName}: no generated class in ${fileName}`);
|
|
56
|
+
found.set(fullName, messageClass());
|
|
57
|
+
}
|
|
58
|
+
for (const nested of message.getNestedTypeList()) {
|
|
59
|
+
visit(`${fullName}.${nested.getName()}`, messageClass, nested);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
for (const message of file.getMessageTypeList()) {
|
|
63
|
+
visit(`${file.getPackage()}.${message.getName()}`, generated, message);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return found;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const WALKED = walk();
|
|
70
|
+
|
|
71
|
+
/** The walked names that `lookup` has no own type for. */
|
|
72
|
+
function missingTypes(walked: Iterable<string>, lookup: (fullName: string) => ObjectTypeProto | undefined): string[] {
|
|
73
|
+
return Array.from(walked).filter((name) => lookup(name) === undefined);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function lookup(fullName: string): ObjectTypeProto | undefined {
|
|
77
|
+
const messageClass = WALKED.get(fullName) as MessageClass;
|
|
78
|
+
return objectTypes.ownType(new messageClass());
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** The value the naming rule gives: message name without Proto, in SCREAMING_SNAKE, prefixed OBJECT_TYPE_. */
|
|
82
|
+
function expectedType(fullName: string): ObjectTypeProto {
|
|
83
|
+
const name = (fullName.split('.').pop() as string).replace(/Proto$/, '');
|
|
84
|
+
const enumName = 'OBJECT_TYPE_' + name.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();
|
|
85
|
+
const value = (ObjectTypeProto as unknown as Record<string, ObjectTypeProto>)[enumName];
|
|
86
|
+
if (value === undefined) throw new Error(`${fullName}: no ${enumName} in ObjectTypeProto`);
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
test('the walk finds every typed message, including the named ones', () => {
|
|
91
|
+
expect(WALKED.size).toBeGreaterThanOrEqual(49);
|
|
92
|
+
for (const name of NAMED) expect(WALKED.has(name)).toBe(true);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test('every typed message has an own type', () => {
|
|
96
|
+
expect(missingTypes(WALKED.keys(), lookup)).toEqual([]);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test('a missing entry is reported', () => {
|
|
100
|
+
const dropped = 'fintekkers.requests.price.QueryPriceResponseProto';
|
|
101
|
+
const without = (name: string) => (name === dropped ? undefined : lookup(name));
|
|
102
|
+
expect(missingTypes(WALKED.keys(), without)).toEqual([dropped]);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test.each(Array.from(WALKED.keys()).sort())('stamping %s sets its own type and version', (fullName) => {
|
|
106
|
+
const messageClass = WALKED.get(fullName) as MessageClass;
|
|
107
|
+
const stamped = objectTypes.stampOwn(new messageClass());
|
|
108
|
+
const expected = expectedType(fullName);
|
|
109
|
+
expect(objectTypes.readType(stamped)).toBe(expected);
|
|
110
|
+
expect(objectTypes.readVersion(stamped)).toEqual([0, 0, 1]);
|
|
111
|
+
// The name table agrees with the class table.
|
|
112
|
+
expect(objectTypes.OWN_TYPE_NAMES.get(fullName)).toBe(expected);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
test('own types are distinct and known', () => {
|
|
116
|
+
const types = Array.from(WALKED.keys()).map(lookup);
|
|
117
|
+
expect(types).not.toContain(ObjectTypeProto.OBJECT_TYPE_UNKNOWN);
|
|
118
|
+
expect(new Set(types).size).toBe(types.length);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test('the LM-318 entries keep their values', () => {
|
|
122
|
+
const lm318: [string, ObjectTypeProto][] = [
|
|
123
|
+
['fintekkers.models.portfolio.PortfolioProto', ObjectTypeProto.OBJECT_TYPE_PORTFOLIO],
|
|
124
|
+
['fintekkers.models.position.PositionProto', ObjectTypeProto.OBJECT_TYPE_POSITION],
|
|
125
|
+
['fintekkers.models.position.PositionFilterProto', ObjectTypeProto.OBJECT_TYPE_POSITION_FILTER],
|
|
126
|
+
['fintekkers.models.price.PriceProto', ObjectTypeProto.OBJECT_TYPE_PRICE],
|
|
127
|
+
['fintekkers.models.security.IdentifierProto', ObjectTypeProto.OBJECT_TYPE_IDENTIFIER],
|
|
128
|
+
['fintekkers.models.security.SecurityProto', ObjectTypeProto.OBJECT_TYPE_SECURITY],
|
|
129
|
+
['fintekkers.models.security.TenorProto', ObjectTypeProto.OBJECT_TYPE_TENOR],
|
|
130
|
+
['fintekkers.models.strategy.StrategyProto', ObjectTypeProto.OBJECT_TYPE_STRATEGY],
|
|
131
|
+
['fintekkers.models.strategy.StrategyAllocationProto', ObjectTypeProto.OBJECT_TYPE_STRATEGY_ALLOCATION],
|
|
132
|
+
['fintekkers.models.transaction.TransactionProto', ObjectTypeProto.OBJECT_TYPE_TRANSACTION],
|
|
133
|
+
['fintekkers.requests.portfolio.CreatePortfolioRequestProto', ObjectTypeProto.OBJECT_TYPE_CREATE_PORTFOLIO_REQUEST],
|
|
134
|
+
['fintekkers.requests.portfolio.QueryPortfolioRequestProto', ObjectTypeProto.OBJECT_TYPE_QUERY_PORTFOLIO_REQUEST],
|
|
135
|
+
['fintekkers.requests.price.CreatePriceRequestProto', ObjectTypeProto.OBJECT_TYPE_CREATE_PRICE_REQUEST],
|
|
136
|
+
['fintekkers.requests.price.QueryPriceRequestProto', ObjectTypeProto.OBJECT_TYPE_QUERY_PRICE_REQUEST],
|
|
137
|
+
['fintekkers.requests.security.CreateSecurityRequestProto', ObjectTypeProto.OBJECT_TYPE_CREATE_SECURITY_REQUEST],
|
|
138
|
+
['fintekkers.requests.security.QuerySecurityRequestProto', ObjectTypeProto.OBJECT_TYPE_QUERY_SECURITY_REQUEST],
|
|
139
|
+
['fintekkers.requests.transaction.CreateTransactionRequestProto', ObjectTypeProto.OBJECT_TYPE_CREATE_TRANSACTION_REQUEST],
|
|
140
|
+
['fintekkers.requests.transaction.QueryTransactionRequestProto', ObjectTypeProto.OBJECT_TYPE_QUERY_TRANSACTION_REQUEST],
|
|
141
|
+
];
|
|
142
|
+
for (const [name, objectType] of lm318) expect([name, lookup(name)]).toEqual([name, objectType]);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test('stampOwn on a message without object_type throws', () => {
|
|
146
|
+
expect(objectTypes.ownType(new UUIDProto())).toBeUndefined();
|
|
147
|
+
expect(objectTypes.ownType({})).toBeUndefined();
|
|
148
|
+
expect(() => objectTypes.stampOwn(new UUIDProto() as unknown as ObjectTyped)).toThrow('this message type has no own ObjectTypeProto');
|
|
149
|
+
});
|
|
@@ -1,62 +1,46 @@
|
|
|
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`; `stampOwn` passes the message's own type (LM-320). Readers
|
|
7
|
+
* call `readType` / `readVersion`. The old `object_class` / `version` strings
|
|
8
|
+
* were replaced in place by LM-318: bytes written before it are not readable.
|
|
9
|
+
* See docs/adr/compact_object_type_and_version.md.
|
|
17
10
|
*/
|
|
18
11
|
import { ObjectTypeProto } from '../../fintekkers/models/util/object_type_pb';
|
|
19
|
-
|
|
12
|
+
import { VersionProto } from '../../fintekkers/models/util/version_pb';
|
|
13
|
+
/** Any generated message that carries object_type and version. */
|
|
20
14
|
export interface ObjectTyped {
|
|
21
|
-
getObjectClass(): string;
|
|
22
|
-
setObjectClass(value: string): unknown;
|
|
23
|
-
getVersion(): string;
|
|
24
|
-
setVersion(value: string): unknown;
|
|
25
15
|
getObjectType(): ObjectTypeProto;
|
|
26
16
|
setObjectType(value: ObjectTypeProto): unknown;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
setVersionMinor(value: number): unknown;
|
|
31
|
-
getVersionPatch(): number;
|
|
32
|
-
setVersionPatch(value: number): unknown;
|
|
17
|
+
hasVersion(): boolean;
|
|
18
|
+
getVersion(): VersionProto | undefined;
|
|
19
|
+
setVersion(value?: VersionProto): unknown;
|
|
33
20
|
}
|
|
34
21
|
/** [major, minor, patch], each a uint32. */
|
|
35
22
|
export type Version = [number, number, number];
|
|
36
|
-
/** The
|
|
37
|
-
export declare
|
|
23
|
+
/** The schema version `stamp` writes. Not the library release. */
|
|
24
|
+
export declare const SCHEMA_VERSION: Version;
|
|
38
25
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* OBJECT_TYPE_QUERY_SECURITY_REQUEST.
|
|
26
|
+
* Sets object_type and version (`SCHEMA_VERSION`) on `message`; returns it.
|
|
27
|
+
* `objectType` is the message's own ObjectTypeProto value.
|
|
42
28
|
*/
|
|
43
|
-
export declare function
|
|
44
|
-
/**
|
|
45
|
-
export declare
|
|
29
|
+
export declare function stamp<T extends ObjectTyped>(message: T, objectType: ObjectTypeProto): T;
|
|
30
|
+
/** Each message with object_type, by proto full name, to its own ObjectTypeProto value. */
|
|
31
|
+
export declare const OWN_TYPE_NAMES: ReadonlyMap<string, ObjectTypeProto>;
|
|
32
|
+
/** The message's own ObjectTypeProto value, or undefined when its class has none. */
|
|
33
|
+
export declare function ownType(message: object): ObjectTypeProto | undefined;
|
|
46
34
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
35
|
+
* `stamp` with the message's own ObjectTypeProto value (LM-320); returns it.
|
|
36
|
+
* Throws an Error when its class has no own value. Generated classes are
|
|
37
|
+
* anonymous at runtime, so the error names the class only when it has a name.
|
|
50
38
|
*/
|
|
51
|
-
export declare function
|
|
52
|
-
/** The message's ObjectTypeProto value: object_type, else the object_class string. */
|
|
53
|
-
export declare function readType(message: ObjectTyped): ObjectTypeProto;
|
|
54
|
-
/** The message's [major, minor, patch]: the compact fields, else the version string. */
|
|
55
|
-
export declare function readVersion(message: ObjectTyped): Version;
|
|
39
|
+
export declare function stampOwn<T extends ObjectTyped>(message: T): T;
|
|
56
40
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
41
|
+
* The message's ObjectTypeProto value; OBJECT_TYPE_UNKNOWN when unset. A value
|
|
42
|
+
* added after this build is returned as its number.
|
|
59
43
|
*/
|
|
60
|
-
export declare function
|
|
61
|
-
/**
|
|
62
|
-
export declare function
|
|
44
|
+
export declare function readType(message: ObjectTyped): ObjectTypeProto;
|
|
45
|
+
/** The message's [major, minor, patch], or undefined when version is absent. */
|
|
46
|
+
export declare function readVersion(message: ObjectTyped): Version | undefined;
|