@fintekkers/ledger-models 0.4.37 → 0.4.39
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 +13 -0
- package/node/fintekkers/models/portfolio/portfolio_pb.js +123 -1
- package/node/fintekkers/models/position/position_filter_pb.d.ts +13 -0
- package/node/fintekkers/models/position/position_filter_pb.js +123 -1
- package/node/fintekkers/models/position/position_pb.d.ts +13 -0
- package/node/fintekkers/models/position/position_pb.js +123 -1
- package/node/fintekkers/models/price/price_pb.d.ts +13 -0
- package/node/fintekkers/models/price/price_pb.js +123 -1
- package/node/fintekkers/models/security/bond/issuance_pb.d.ts +13 -0
- package/node/fintekkers/models/security/bond/issuance_pb.js +123 -1
- package/node/fintekkers/models/security/identifier/identifier_pb.d.ts +13 -0
- package/node/fintekkers/models/security/identifier/identifier_pb.js +123 -1
- package/node/fintekkers/models/security/index_composition_pb.d.ts +13 -0
- package/node/fintekkers/models/security/index_composition_pb.js +123 -1
- package/node/fintekkers/models/security/security_pb.d.ts +13 -0
- package/node/fintekkers/models/security/security_pb.js +123 -1
- package/node/fintekkers/models/security/tenor_pb.d.ts +13 -0
- package/node/fintekkers/models/security/tenor_pb.js +123 -1
- package/node/fintekkers/models/strategy/strategy_allocation_pb.d.ts +13 -0
- package/node/fintekkers/models/strategy/strategy_allocation_pb.js +123 -1
- package/node/fintekkers/models/strategy/strategy_pb.d.ts +13 -0
- package/node/fintekkers/models/strategy/strategy_pb.js +123 -1
- package/node/fintekkers/models/transaction/transaction_pb.d.ts +13 -0
- package/node/fintekkers/models/transaction/transaction_pb.js +123 -1
- package/node/fintekkers/models/util/api/api_key_pb.d.ts +13 -0
- package/node/fintekkers/models/util/api/api_key_pb.js +123 -1
- package/node/fintekkers/models/util/date_range_pb.d.ts +13 -0
- package/node/fintekkers/models/util/date_range_pb.js +123 -1
- package/node/fintekkers/models/util/decimal_value_pb.d.ts +2 -0
- package/node/fintekkers/models/util/lock/node_partition_pb.d.ts +13 -0
- package/node/fintekkers/models/util/lock/node_partition_pb.js +123 -1
- package/node/fintekkers/models/util/lock/node_state_pb.d.ts +13 -0
- package/node/fintekkers/models/util/lock/node_state_pb.js +123 -1
- package/node/fintekkers/models/util/object_type_grpc_pb.js +1 -0
- package/node/fintekkers/models/util/object_type_pb.d.ts +63 -0
- package/node/fintekkers/models/util/object_type_pb.js +109 -0
- package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.d.ts +25 -0
- package/node/fintekkers/requests/index_composition/create_index_composition_request_pb.js +244 -2
- package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.d.ts +25 -0
- package/node/fintekkers/requests/index_composition/get_index_composition_request_pb.js +244 -2
- package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/portfolio/create_portfolio_request_pb.js +123 -1
- package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/portfolio/create_portfolio_response_pb.js +123 -1
- package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/portfolio/query_portfolio_request_pb.js +123 -1
- package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/portfolio/query_portfolio_response_pb.js +123 -1
- package/node/fintekkers/requests/position/query_position_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/position/query_position_request_pb.js +123 -1
- package/node/fintekkers/requests/position/query_position_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/position/query_position_response_pb.js +123 -1
- package/node/fintekkers/requests/price/create_price_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/price/create_price_request_pb.js +123 -1
- package/node/fintekkers/requests/price/create_price_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/price/create_price_response_pb.js +123 -1
- package/node/fintekkers/requests/price/query_price_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/price/query_price_request_pb.js +123 -1
- package/node/fintekkers/requests/price/query_price_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/price/query_price_response_pb.js +123 -1
- package/node/fintekkers/requests/security/create_security_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/create_security_request_pb.js +123 -1
- package/node/fintekkers/requests/security/create_security_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/create_security_response_pb.js +123 -1
- package/node/fintekkers/requests/security/get_field_values_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/get_field_values_request_pb.js +123 -1
- package/node/fintekkers/requests/security/get_field_values_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/get_field_values_response_pb.js +123 -1
- package/node/fintekkers/requests/security/get_fields_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/get_fields_response_pb.js +123 -1
- package/node/fintekkers/requests/security/query_security_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/query_security_request_pb.js +123 -1
- package/node/fintekkers/requests/security/query_security_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/security/query_security_response_pb.js +123 -1
- package/node/fintekkers/requests/transaction/create_transaction_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/transaction/create_transaction_request_pb.js +123 -1
- package/node/fintekkers/requests/transaction/create_transaction_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/transaction/create_transaction_response_pb.js +123 -1
- package/node/fintekkers/requests/transaction/query_transaction_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/transaction/query_transaction_request_pb.js +123 -1
- package/node/fintekkers/requests/transaction/query_transaction_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/transaction/query_transaction_response_pb.js +123 -1
- package/node/fintekkers/requests/util/delete_request_pb.d.ts +25 -0
- package/node/fintekkers/requests/util/delete_request_pb.js +244 -2
- package/node/fintekkers/requests/util/lock/lock_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/util/lock/lock_request_pb.js +123 -1
- package/node/fintekkers/requests/util/lock/lock_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/util/lock/lock_response_pb.js +123 -1
- package/node/fintekkers/requests/valuation/curve_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/valuation/curve_request_pb.js +123 -1
- package/node/fintekkers/requests/valuation/curve_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/valuation/curve_response_pb.js +123 -1
- package/node/fintekkers/requests/valuation/valuation_request_pb.d.ts +13 -0
- package/node/fintekkers/requests/valuation/valuation_request_pb.js +123 -1
- package/node/fintekkers/requests/valuation/valuation_response_pb.d.ts +13 -0
- package/node/fintekkers/requests/valuation/valuation_response_pb.js +123 -1
- package/node/wrappers/models/position/position.d.ts +1 -1
- package/node/wrappers/models/position/position.js.map +1 -1
- package/node/wrappers/models/position/position.test.js +2 -2
- package/node/wrappers/models/position/position.test.js.map +1 -1
- package/node/wrappers/models/position/position.test.ts +2 -2
- package/node/wrappers/models/position/position.ts +2 -2
- package/node/wrappers/models/position/position_matcher.js +1 -0
- package/node/wrappers/models/position/position_matcher.js.map +1 -0
- package/node/wrappers/models/position/position_matcher.test.js +1 -0
- package/node/wrappers/models/position/position_matcher.test.js.map +1 -0
- package/node/wrappers/models/position/positionfilter.js +3 -2
- package/node/wrappers/models/position/positionfilter.js.map +1 -1
- package/node/wrappers/models/position/positionfilter.ts +3 -2
- package/node/wrappers/models/price/Price.js +20 -12
- package/node/wrappers/models/price/Price.js.map +1 -1
- package/node/wrappers/models/price/Price.ts +19 -10
- package/node/wrappers/models/price/price_rules.d.ts +2 -2
- package/node/wrappers/models/price/price_rules.js +6 -4
- package/node/wrappers/models/price/price_rules.js.map +1 -1
- package/node/wrappers/models/price/price_rules.ts +5 -3
- package/node/wrappers/models/security/BondSecurity.d.ts +1 -1
- package/node/wrappers/models/security/BondSecurity.js +5 -5
- package/node/wrappers/models/security/BondSecurity.js.map +1 -1
- package/node/wrappers/models/security/BondSecurity.ts +5 -4
- package/node/wrappers/models/security/FloatingRateNote.js +2 -2
- package/node/wrappers/models/security/FloatingRateNote.js.map +1 -1
- package/node/wrappers/models/security/FloatingRateNote.ts +2 -1
- package/node/wrappers/models/security/Issuance.js +3 -6
- package/node/wrappers/models/security/Issuance.js.map +1 -1
- package/node/wrappers/models/security/Issuance.ts +3 -2
- package/node/wrappers/models/security/MortgageBackedSecurity.js +7 -7
- package/node/wrappers/models/security/MortgageBackedSecurity.js.map +1 -1
- package/node/wrappers/models/security/MortgageBackedSecurity.ts +7 -6
- package/node/wrappers/models/security/TIPSBond.js +2 -2
- package/node/wrappers/models/security/TIPSBond.js.map +1 -1
- package/node/wrappers/models/security/TIPSBond.ts +2 -1
- package/node/wrappers/models/security/security_rules.js +10 -12
- package/node/wrappers/models/security/security_rules.js.map +1 -1
- package/node/wrappers/models/security/security_rules.ts +9 -9
- package/node/wrappers/models/transaction/transaction.js +20 -14
- package/node/wrappers/models/transaction/transaction.js.map +1 -1
- package/node/wrappers/models/transaction/transaction.ts +20 -11
- package/node/wrappers/models/transaction/transaction_constructor.test.js +29 -0
- package/node/wrappers/models/transaction/transaction_constructor.test.js.map +1 -1
- package/node/wrappers/models/utils/decimal.d.ts +96 -0
- package/node/wrappers/models/utils/decimal.js +328 -0
- package/node/wrappers/models/utils/decimal.js.map +1 -0
- package/node/wrappers/models/utils/decimal.legacy.test.d.ts +1 -0
- package/node/wrappers/models/utils/decimal.legacy.test.js +174 -0
- package/node/wrappers/models/utils/decimal.legacy.test.js.map +1 -0
- package/node/wrappers/models/utils/decimal.legacy.test.ts +158 -0
- package/node/wrappers/models/utils/decimal.test.d.ts +1 -0
- package/node/wrappers/models/utils/decimal.test.js +258 -0
- package/node/wrappers/models/utils/decimal.test.js.map +1 -0
- package/node/wrappers/models/utils/decimal.test.ts +272 -0
- package/node/wrappers/models/utils/decimal.ts +335 -0
- package/node/wrappers/models/utils/decimal.typings.test.d.ts +1 -0
- package/node/wrappers/models/utils/decimal.typings.test.js +39 -0
- package/node/wrappers/models/utils/decimal.typings.test.js.map +1 -0
- package/node/wrappers/models/utils/decimal.typings.test.ts +16 -0
- package/node/wrappers/models/utils/serialization.d.ts +2 -1
- package/node/wrappers/models/utils/serialization.js +12 -2
- package/node/wrappers/models/utils/serialization.js.map +1 -1
- package/node/wrappers/models/utils/serialization.ts +14 -3
- package/node/wrappers/requests/position/QueryPositionRequest.js +3 -2
- package/node/wrappers/requests/position/QueryPositionRequest.js.map +1 -1
- package/node/wrappers/requests/position/QueryPositionRequest.ts +3 -2
- package/node/wrappers/services/portfolio-service/PortfolioService.js +5 -6
- package/node/wrappers/services/portfolio-service/PortfolioService.js.map +1 -1
- package/node/wrappers/services/portfolio-service/PortfolioService.ts +5 -6
- package/node/wrappers/services/price-service/PriceService.js +5 -6
- package/node/wrappers/services/price-service/PriceService.js.map +1 -1
- package/node/wrappers/services/price-service/PriceService.ts +5 -6
- package/node/wrappers/services/security-service/SecurityService.js +5 -6
- package/node/wrappers/services/security-service/SecurityService.js.map +1 -1
- package/node/wrappers/services/security-service/SecurityService.ts +5 -6
- package/node/wrappers/services/security-service/security.maturityLadder.test.js +1 -1
- package/node/wrappers/services/security-service/security.maturityLadder.test.js.map +1 -1
- package/node/wrappers/services/security-service/security.maturityLadder.test.ts +3 -2
- package/node/wrappers/services/transaction-service/TransactionService.js +5 -6
- package/node/wrappers/services/transaction-service/TransactionService.js.map +1 -1
- package/node/wrappers/services/transaction-service/TransactionService.ts +5 -6
- package/node/wrappers/util/link-resolver.js +5 -6
- package/node/wrappers/util/link-resolver.js.map +1 -1
- package/node/wrappers/util/link-resolver.ts +5 -6
- package/node/wrappers/util/object-type-legacy.json +21 -0
- package/node/wrappers/util/object-types.d.ts +62 -0
- package/node/wrappers/util/object-types.js +193 -0
- package/node/wrappers/util/object-types.js.map +1 -0
- package/node/wrappers/util/object-types.test.d.ts +1 -0
- package/node/wrappers/util/object-types.test.js +311 -0
- package/node/wrappers/util/object-types.test.js.map +1 -0
- package/node/wrappers/util/object-types.test.ts +307 -0
- package/node/wrappers/util/object-types.ts +207 -0
- package/package.json +1 -1
- package/tsconfig.json +1 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact object type and version (LM-297), stage 1: write both forms, read the new one.
|
|
3
|
+
*
|
|
4
|
+
* Every message with `string object_class = 1` and `string version = 2` also
|
|
5
|
+
* carries `ObjectTypeProto object_type = 1001` and `uint32 version_major /
|
|
6
|
+
* version_minor / version_patch = 1002-1004`. Writers call `stamp`, which sets
|
|
7
|
+
* the strings and the new fields. Readers call `readType` / `readVersion` (or
|
|
8
|
+
* `upgrade`), which use the new fields and fall back to the deprecated strings,
|
|
9
|
+
* logging one `console.warn` per distinct pair of strings. A fallback never
|
|
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.
|
|
17
|
+
*/
|
|
18
|
+
import { ObjectTypeProto } from '../../fintekkers/models/util/object_type_pb';
|
|
19
|
+
import legacyMirror from './object-type-legacy.json';
|
|
20
|
+
|
|
21
|
+
/** Any generated message that carries object_class / version and their compact form. */
|
|
22
|
+
export interface ObjectTyped {
|
|
23
|
+
getObjectClass(): string;
|
|
24
|
+
setObjectClass(value: string): unknown;
|
|
25
|
+
getVersion(): string;
|
|
26
|
+
setVersion(value: string): unknown;
|
|
27
|
+
getObjectType(): ObjectTypeProto;
|
|
28
|
+
setObjectType(value: ObjectTypeProto): unknown;
|
|
29
|
+
getVersionMajor(): number;
|
|
30
|
+
setVersionMajor(value: number): unknown;
|
|
31
|
+
getVersionMinor(): number;
|
|
32
|
+
setVersionMinor(value: number): unknown;
|
|
33
|
+
getVersionPatch(): number;
|
|
34
|
+
setVersionPatch(value: number): unknown;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** [major, minor, patch], each a uint32. */
|
|
38
|
+
export type Version = [number, number, number];
|
|
39
|
+
|
|
40
|
+
const UINT32_MAX = 0xffffffff;
|
|
41
|
+
const VERSION_PATTERN = /^[0-9]+\.[0-9]+\.[0-9]+$/;
|
|
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
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Sets object_class / version and their compact form on `message`; returns it.
|
|
116
|
+
* `objectType` is the message's own ObjectTypeProto value. `version` must be
|
|
117
|
+
* empty or three uint32 parts.
|
|
118
|
+
*/
|
|
119
|
+
export function stamp<T extends ObjectTyped>(message: T, objectType: ObjectTypeProto, objectClass: string, version: string): T {
|
|
120
|
+
const parts = version ? parseVersion(version) : [0, 0, 0];
|
|
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);
|
|
126
|
+
message.setObjectType(objectType);
|
|
127
|
+
setCompactVersion(message, parts as Version);
|
|
128
|
+
return message;
|
|
129
|
+
}
|
|
130
|
+
|
|
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
|
+
/**
|
|
194
|
+
* Fills the compact fields from the strings where they are unset; returns `message`.
|
|
195
|
+
* The strings are kept, so re-serialising writes both forms.
|
|
196
|
+
*/
|
|
197
|
+
export function upgrade<T extends ObjectTyped>(message: T): T {
|
|
198
|
+
const { objectType, version } = decode(message);
|
|
199
|
+
message.setObjectType(objectType);
|
|
200
|
+
setCompactVersion(message, version);
|
|
201
|
+
return message;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** Forgets which strings have warned. Tests only. */
|
|
205
|
+
export function resetWarningsForTests(): void {
|
|
206
|
+
warned.clear();
|
|
207
|
+
}
|
package/package.json
CHANGED