@rise-maritime/keelson-js 0.5.3 → 0.6.0-alpha.202.dev.1
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/dist/index.d.ts +524 -1
- package/dist/index.js +114 -5
- package/dist/index.test.js +57 -0
- package/dist/interfaces/AlarmAck.d.ts +62 -0
- package/dist/interfaces/AlarmAck.js +218 -0
- package/dist/interfaces/Configurable.d.ts +24 -18
- package/dist/interfaces/Configurable.js +24 -22
- package/dist/interfaces/Coordinate.d.ts +38 -0
- package/dist/interfaces/Coordinate.js +82 -0
- package/dist/interfaces/ErrorResponse.d.ts +1 -1
- package/dist/interfaces/ErrorResponse.js +1 -1
- package/dist/interfaces/MavlinkCommand.d.ts +24 -18
- package/dist/interfaces/MavlinkCommand.js +24 -22
- package/dist/interfaces/Mission.d.ts +128 -0
- package/dist/interfaces/Mission.js +800 -0
- package/dist/interfaces/NetworkPingPong.d.ts +16 -16
- package/dist/interfaces/NetworkPingPong.js +16 -16
- package/dist/interfaces/ReplayControl.d.ts +72 -30
- package/dist/interfaces/ReplayControl.js +72 -58
- package/dist/interfaces/Route.d.ts +640 -0
- package/dist/interfaces/Route.js +4180 -0
- package/dist/interfaces/RoutePlanner.d.ts +152 -0
- package/dist/interfaces/RoutePlanner.js +268 -0
- package/dist/interfaces/ScenarioCheckpoint.d.ts +154 -0
- package/dist/interfaces/ScenarioCheckpoint.js +694 -0
- package/dist/interfaces/ScenarioControl.d.ts +144 -0
- package/dist/interfaces/ScenarioControl.js +552 -0
- package/dist/interfaces/Severity.d.ts +22 -0
- package/dist/interfaces/Severity.js +72 -0
- package/dist/interfaces/SimulationControl.d.ts +69 -0
- package/dist/interfaces/SimulationControl.js +153 -0
- package/dist/interfaces/Subscriber.d.ts +24 -18
- package/dist/interfaces/Subscriber.js +24 -22
- package/dist/interfaces/VehicleCommon.d.ts +1 -32
- package/dist/interfaces/VehicleCommon.js +2 -74
- package/dist/interfaces/VehicleControl.d.ts +34 -28
- package/dist/interfaces/VehicleControl.js +34 -22
- package/dist/interfaces/VehicleGeofence.d.ts +26 -19
- package/dist/interfaces/VehicleGeofence.js +40 -37
- package/dist/interfaces/VehicleLifecycle.d.ts +32 -20
- package/dist/interfaces/VehicleLifecycle.js +32 -28
- package/dist/interfaces/VehicleMission.d.ts +42 -97
- package/dist/interfaces/VehicleMission.js +41 -696
- package/dist/interfaces/VehicleNavigation.d.ts +30 -24
- package/dist/interfaces/VehicleNavigation.js +30 -22
- package/dist/interfaces/VehicleParam.d.ts +48 -24
- package/dist/interfaces/VehicleParam.js +48 -40
- package/dist/interfaces/VehicleSimulatorControl.d.ts +57 -0
- package/dist/interfaces/VehicleSimulatorControl.js +155 -0
- package/dist/interfaces/WHEPProxy.d.ts +16 -16
- package/dist/interfaces/WHEPProxy.js +16 -16
- package/dist/interfaces/foxglove/GeoJSON.d.ts +27 -0
- package/dist/interfaces/foxglove/GeoJSON.js +65 -0
- package/dist/interfaces/foxglove/LocationFix.d.ts +49 -0
- package/dist/interfaces/foxglove/LocationFix.js +246 -0
- package/dist/interfaces/google/protobuf/any.d.ts +144 -0
- package/dist/interfaces/google/protobuf/any.js +107 -0
- package/dist/interfaces/google/protobuf/duration.d.ts +99 -0
- package/dist/interfaces/google/protobuf/duration.js +92 -0
- package/dist/interfaces/serviceRegistry.d.ts +520 -0
- package/dist/interfaces/serviceRegistry.js +40 -0
- package/dist/interfaces.json +19 -0
- package/dist/payloads/Alarm.d.ts +7 -12
- package/dist/payloads/Alarm.js +4 -54
- package/dist/payloads/ChecklistEvent.d.ts +152 -0
- package/dist/payloads/ChecklistEvent.js +524 -0
- package/dist/payloads/ChecklistEvidence.d.ts +79 -0
- package/dist/payloads/ChecklistEvidence.js +287 -0
- package/dist/payloads/ChecklistPresence.d.ts +68 -0
- package/dist/payloads/ChecklistPresence.js +286 -0
- package/dist/payloads/ChecklistProcedure.d.ts +81 -0
- package/dist/payloads/ChecklistProcedure.js +364 -0
- package/dist/payloads/ChecklistState.d.ts +178 -0
- package/dist/payloads/ChecklistState.js +838 -0
- package/dist/payloads/CommandAuthority.d.ts +82 -0
- package/dist/payloads/CommandAuthority.js +364 -0
- package/dist/payloads/Coordinate.d.ts +39 -0
- package/dist/payloads/Coordinate.js +85 -0
- package/dist/payloads/EntityHealth.d.ts +9 -0
- package/dist/payloads/EntityHealth.js +14 -0
- package/dist/payloads/Mission.d.ts +137 -0
- package/dist/payloads/Mission.js +826 -0
- package/dist/payloads/OperationalAuthority.d.ts +172 -5
- package/dist/payloads/OperationalAuthority.js +525 -6
- package/dist/payloads/Route.d.ts +662 -0
- package/dist/payloads/Route.js +4289 -0
- package/dist/payloads/RouteChangeEvent.d.ts +42 -0
- package/dist/payloads/RouteChangeEvent.js +223 -0
- package/dist/payloads/RouteEditAuthority.d.ts +87 -0
- package/dist/payloads/RouteEditAuthority.js +380 -0
- package/dist/payloads/RouteExecution.d.ts +64 -0
- package/dist/payloads/RouteExecution.js +310 -0
- package/dist/payloads/ScenarioStatus.d.ts +160 -0
- package/dist/payloads/ScenarioStatus.js +654 -0
- package/dist/payloads/Severity.d.ts +13 -6
- package/dist/payloads/Severity.js +30 -18
- package/dist/payloads/SimulationStatus.d.ts +3 -4
- package/dist/payloads/SimulationStatus.js +12 -18
- package/dist/payloads/TestObjectStatus.d.ts +154 -0
- package/dist/payloads/TestObjectStatus.js +580 -0
- package/dist/payloads/VesselType.d.ts +2 -1
- package/dist/payloads/VesselType.js +1 -1
- package/dist/payloads/Voyage.d.ts +154 -0
- package/dist/payloads/Voyage.js +866 -0
- package/dist/payloads/WarrantRecord.d.ts +168 -0
- package/dist/payloads/WarrantRecord.js +781 -0
- package/dist/payloads/foxglove/CompressedPointCloud.d.ts +37 -0
- package/dist/payloads/foxglove/CompressedPointCloud.js +185 -0
- package/dist/payloads/google/protobuf/any.d.ts +145 -0
- package/dist/payloads/google/protobuf/any.js +110 -0
- package/dist/payloads/google/protobuf/empty.d.ts +34 -0
- package/dist/payloads/google/protobuf/empty.js +50 -0
- package/dist/payloads/index.foxglove.d.ts +1 -0
- package/dist/payloads/index.foxglove.js +1 -0
- package/dist/payloads/index.google.protobuf.d.ts +2 -0
- package/dist/payloads/index.google.protobuf.js +2 -0
- package/dist/payloads/index.keelson.d.ts +17 -1
- package/dist/payloads/index.keelson.js +17 -1
- package/dist/qos.json +95 -0
- package/dist/subjects.json +38 -1
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -3,15 +3,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.encloseFromTypeName = exports.encodePayloadFromTypeName = exports.decodePayloadFromTypeName = exports.getProtobufClassFromTypeName = exports.getSubjectSchema = exports.isSubjectWellKnown = exports.uncover = exports.enclose = exports.get_subject_from_pubsub_key = exports.parse_rpc_key = exports.parse_pubsub_key = exports.construct_rpc_key = exports.construct_pubSub_key = void 0;
|
|
6
|
+
exports.encloseFromTypeName = exports.encodePayloadFromTypeName = exports.decodePayloadFromTypeName = exports.getProtobufClassFromTypeName = exports.qosFor = exports.getProcedureCodecs = exports.getProcedures = exports.getInterfaceDefinition = exports.listInterfaces = exports.getInterfaceService = exports.isInterfaceWellKnown = exports.getSubjectSchema = exports.isSubjectWellKnown = exports.uncover = exports.enclose = exports.get_subject_from_pubsub_key = exports.parse_rpc_key = exports.parse_pubsub_key = exports.construct_rpc_interface_liveliness_key = exports.construct_source_liveliness_key = exports.construct_rpc_key = exports.construct_pubSub_key = void 0;
|
|
7
7
|
const Envelope_1 = require("./Envelope");
|
|
8
8
|
const subjects_json_1 = __importDefault(require("./subjects.json"));
|
|
9
|
+
const interfaces_json_1 = __importDefault(require("./interfaces.json"));
|
|
10
|
+
const qos_json_1 = __importDefault(require("./qos.json"));
|
|
9
11
|
const typeRegistry_1 = require("./payloads/typeRegistry");
|
|
12
|
+
const serviceRegistry_1 = require("./interfaces/serviceRegistry");
|
|
10
13
|
require("./payloads");
|
|
11
14
|
// KEY HELPER FUNCTIONS
|
|
12
15
|
const KEELSON_BASE_KEY_FORMAT = "{base_path}/@v0/{entity_id}";
|
|
13
16
|
const KEELSON_PUB_SUB_KEY_FORMAT = KEELSON_BASE_KEY_FORMAT + "/pubsub/{subject}/{source_id}";
|
|
14
|
-
const KEELSON_REQ_REP_KEY_FORMAT = KEELSON_BASE_KEY_FORMAT + "/@rpc/{procedure}/{source_id}";
|
|
17
|
+
const KEELSON_REQ_REP_KEY_FORMAT = KEELSON_BASE_KEY_FORMAT + "/@rpc/{interface}/{version}/{procedure}/{source_id}";
|
|
18
|
+
const KEELSON_RPC_INTERFACE_LIVELINESS_KEY_FORMAT = KEELSON_BASE_KEY_FORMAT + "/@rpc/{interface}/{version}/*/{source_id}";
|
|
19
|
+
// An interface version chunk is v{N} with N a positive integer.
|
|
20
|
+
function isValidInterfaceVersion(version) {
|
|
21
|
+
return /^v[1-9][0-9]*$/.test(version);
|
|
22
|
+
}
|
|
15
23
|
function construct_pubSub_key(base_path, entityId, subject, sourceId, targetId) {
|
|
16
24
|
/**
|
|
17
25
|
* Construct a key expression for a publish and subscribe.
|
|
@@ -33,16 +41,58 @@ function construct_pubSub_key(base_path, entityId, subject, sourceId, targetId)
|
|
|
33
41
|
return targetId ? `${key}/@target/${targetId}` : key;
|
|
34
42
|
}
|
|
35
43
|
exports.construct_pubSub_key = construct_pubSub_key;
|
|
36
|
-
function construct_rpc_key(base_path, entityId, procedure, sourceId) {
|
|
44
|
+
function construct_rpc_key(base_path, entityId, iface, version, procedure, sourceId) {
|
|
37
45
|
/**
|
|
38
46
|
* Construct a key expression for a request reply interaction (Queryable).
|
|
47
|
+
*
|
|
48
|
+
* @param iface - Well-known RPC interface name (see interfaces.yaml)
|
|
49
|
+
* @param version - Interface version chunk, v{N} (e.g. "v1")
|
|
39
50
|
*/
|
|
51
|
+
if (!isValidInterfaceVersion(version)) {
|
|
52
|
+
throw new Error(`Interface version '${version}' is not of the required form v{N}`);
|
|
53
|
+
}
|
|
54
|
+
if (!isInterfaceWellKnown(`${iface}/${version}`)) {
|
|
55
|
+
console.warn(`Interface: ${iface}/${version} is NOT well-known!`);
|
|
56
|
+
}
|
|
40
57
|
return KEELSON_REQ_REP_KEY_FORMAT.replace("{base_path}", base_path)
|
|
41
58
|
.replace("{entity_id}", entityId)
|
|
59
|
+
.replace("{interface}", iface)
|
|
60
|
+
.replace("{version}", version)
|
|
42
61
|
.replace("{procedure}", procedure)
|
|
43
62
|
.replace("{source_id}", sourceId);
|
|
44
63
|
}
|
|
45
64
|
exports.construct_rpc_key = construct_rpc_key;
|
|
65
|
+
function construct_source_liveliness_key(base_path, entityId, sourceId) {
|
|
66
|
+
/**
|
|
67
|
+
* Construct the source-level liveliness token key: "this process is
|
|
68
|
+
* present on the bus as a producer in some category". The `*` occupies
|
|
69
|
+
* the category slot (pubsub / @rpc / ...). Note that as a verbatim
|
|
70
|
+
* chunk, @rpc is never matched by the wildcard — RPC capability is
|
|
71
|
+
* discovered via the interface-level token instead.
|
|
72
|
+
*/
|
|
73
|
+
return `${base_path}/@v0/${entityId}/*/${sourceId}`;
|
|
74
|
+
}
|
|
75
|
+
exports.construct_source_liveliness_key = construct_source_liveliness_key;
|
|
76
|
+
function construct_rpc_interface_liveliness_key(base_path, entityId, iface, version, sourceId) {
|
|
77
|
+
/**
|
|
78
|
+
* Construct the liveliness token key for one served RPC
|
|
79
|
+
* (interface, version) pair. The `*` in the procedure slot means
|
|
80
|
+
* "any procedure in this scope"; under the full-interface rule the
|
|
81
|
+
* token also claims full coverage of the interface version.
|
|
82
|
+
*/
|
|
83
|
+
if (!isValidInterfaceVersion(version)) {
|
|
84
|
+
throw new Error(`Interface version '${version}' is not of the required form v{N}`);
|
|
85
|
+
}
|
|
86
|
+
if (!isInterfaceWellKnown(`${iface}/${version}`)) {
|
|
87
|
+
console.warn(`Interface: ${iface}/${version} is NOT well-known!`);
|
|
88
|
+
}
|
|
89
|
+
return KEELSON_RPC_INTERFACE_LIVELINESS_KEY_FORMAT.replace("{base_path}", base_path)
|
|
90
|
+
.replace("{entity_id}", entityId)
|
|
91
|
+
.replace("{interface}", iface)
|
|
92
|
+
.replace("{version}", version)
|
|
93
|
+
.replace("{source_id}", sourceId);
|
|
94
|
+
}
|
|
95
|
+
exports.construct_rpc_interface_liveliness_key = construct_rpc_interface_liveliness_key;
|
|
46
96
|
function parse_pubsub_key(key) {
|
|
47
97
|
/**
|
|
48
98
|
* Parse a key expression for a publish subscribe interaction.
|
|
@@ -74,8 +124,10 @@ function parse_rpc_key(key) {
|
|
|
74
124
|
return {
|
|
75
125
|
base_path: parts[0],
|
|
76
126
|
entityId: parts[2],
|
|
77
|
-
|
|
78
|
-
|
|
127
|
+
interface: parts[4],
|
|
128
|
+
version: parts[5],
|
|
129
|
+
procedure: parts[6],
|
|
130
|
+
sourceId: parts.slice(7).join("/")
|
|
79
131
|
};
|
|
80
132
|
}
|
|
81
133
|
exports.parse_rpc_key = parse_rpc_key;
|
|
@@ -103,6 +155,63 @@ function getSubjectSchema(subject) {
|
|
|
103
155
|
return subjects_json_1.default[subject];
|
|
104
156
|
}
|
|
105
157
|
exports.getSubjectSchema = getSubjectSchema;
|
|
158
|
+
// INTERFACES HELPER FUNCTIONS
|
|
159
|
+
function isInterfaceWellKnown(interfaceAndVersion) {
|
|
160
|
+
return interfaces_json_1.default[interfaceAndVersion] != null;
|
|
161
|
+
}
|
|
162
|
+
exports.isInterfaceWellKnown = isInterfaceWellKnown;
|
|
163
|
+
function getInterfaceService(interfaceAndVersion) {
|
|
164
|
+
return interfaces_json_1.default[interfaceAndVersion];
|
|
165
|
+
}
|
|
166
|
+
exports.getInterfaceService = getInterfaceService;
|
|
167
|
+
function listInterfaces() {
|
|
168
|
+
/** All well-known "{interface}/{version}" keys of this SDK release. */
|
|
169
|
+
return Object.keys(serviceRegistry_1.serviceDefinitions);
|
|
170
|
+
}
|
|
171
|
+
exports.listInterfaces = listInterfaces;
|
|
172
|
+
function getInterfaceDefinition(interfaceAndVersion) {
|
|
173
|
+
/** The ts-proto generic ServiceDefinition for "{interface}/{version}". */
|
|
174
|
+
return serviceRegistry_1.serviceDefinitions[interfaceAndVersion];
|
|
175
|
+
}
|
|
176
|
+
exports.getInterfaceDefinition = getInterfaceDefinition;
|
|
177
|
+
function getProcedures(interfaceAndVersion) {
|
|
178
|
+
/** Procedure (method) names defined by "{interface}/{version}". */
|
|
179
|
+
const definition = getInterfaceDefinition(interfaceAndVersion);
|
|
180
|
+
if (definition == null) {
|
|
181
|
+
throw new Error(`Unknown interface: ${interfaceAndVersion}`);
|
|
182
|
+
}
|
|
183
|
+
return Object.values(definition.methods).map((m) => m.name);
|
|
184
|
+
}
|
|
185
|
+
exports.getProcedures = getProcedures;
|
|
186
|
+
function getProcedureCodecs(interfaceAndVersion, procedure) {
|
|
187
|
+
/**
|
|
188
|
+
* The request/response message codecs of one procedure — each has
|
|
189
|
+
* encode/decode/fromJSON/toJSON/fromPartial per ts-proto's message
|
|
190
|
+
* functions, enabling generic invocation without static imports.
|
|
191
|
+
*/
|
|
192
|
+
const definition = getInterfaceDefinition(interfaceAndVersion);
|
|
193
|
+
if (definition == null) {
|
|
194
|
+
throw new Error(`Unknown interface: ${interfaceAndVersion}`);
|
|
195
|
+
}
|
|
196
|
+
for (const method of Object.values(definition.methods)) {
|
|
197
|
+
const m = method;
|
|
198
|
+
if (m.name === procedure) {
|
|
199
|
+
return { requestType: m.requestType, responseType: m.responseType };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
throw new Error(`Unknown procedure ${procedure} on ${interfaceAndVersion}`);
|
|
203
|
+
}
|
|
204
|
+
exports.getProcedureCodecs = getProcedureCodecs;
|
|
205
|
+
const QOS_PROFILES = qos_json_1.default.profiles ?? {};
|
|
206
|
+
const QOS_SUBJECTS = qos_json_1.default.subjects ?? {};
|
|
207
|
+
const QOS_DEFAULT = qos_json_1.default.default ?? "default";
|
|
208
|
+
/** Return the QoS profile assigned to a well-known subject (or the default). */
|
|
209
|
+
function qosFor(subject) {
|
|
210
|
+
const name = QOS_SUBJECTS[subject] ?? QOS_DEFAULT;
|
|
211
|
+
const fields = QOS_PROFILES[name];
|
|
212
|
+
return { name, ...fields };
|
|
213
|
+
}
|
|
214
|
+
exports.qosFor = qosFor;
|
|
106
215
|
// PAYLOADS
|
|
107
216
|
function getProtobufClassFromTypeName(typeName) {
|
|
108
217
|
return typeRegistry_1.messageTypeRegistry.get(typeName);
|
package/dist/index.test.js
CHANGED
|
@@ -159,3 +159,60 @@ describe("get_subject_from_pubsub_key", () => {
|
|
|
159
159
|
expect(subject).toBe("heading_true_north_deg");
|
|
160
160
|
});
|
|
161
161
|
});
|
|
162
|
+
describe("construct_rpc_key", () => {
|
|
163
|
+
it("builds the interface/version key shape", () => {
|
|
164
|
+
expect((0, index_1.construct_rpc_key)("realm", "boat", "replay_control", "v1", "play", "conn/0"))
|
|
165
|
+
.toBe("realm/@v0/boat/@rpc/replay_control/v1/play/conn/0");
|
|
166
|
+
});
|
|
167
|
+
it("rejects malformed versions", () => {
|
|
168
|
+
expect(() => (0, index_1.construct_rpc_key)("realm", "boat", "replay_control", "1", "play", "c")).toThrow();
|
|
169
|
+
expect(() => (0, index_1.construct_rpc_key)("realm", "boat", "replay_control", "v0", "play", "c")).toThrow();
|
|
170
|
+
expect(() => (0, index_1.construct_rpc_key)("realm", "boat", "replay_control", "v01", "play", "c")).toThrow();
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
describe("construct_rpc_interface_liveliness_key", () => {
|
|
174
|
+
it("builds the interface liveliness token key", () => {
|
|
175
|
+
expect((0, index_1.construct_rpc_interface_liveliness_key)("realm", "boat", "whep_proxy", "v1", "mediamtx/0"))
|
|
176
|
+
.toBe("realm/@v0/boat/@rpc/whep_proxy/v1/*/mediamtx/0");
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
describe("parse_rpc_key", () => {
|
|
180
|
+
it("parses interface, version, procedure and multi-chunk source", () => {
|
|
181
|
+
expect((0, index_1.parse_rpc_key)("realm/@v0/boat/@rpc/replay_control/v1/play/conn/0")).toEqual({
|
|
182
|
+
base_path: "realm",
|
|
183
|
+
entityId: "boat",
|
|
184
|
+
interface: "replay_control",
|
|
185
|
+
version: "v1",
|
|
186
|
+
procedure: "play",
|
|
187
|
+
sourceId: "conn/0",
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
describe("interfaces registry", () => {
|
|
192
|
+
it("knows the bundled well-known interfaces", () => {
|
|
193
|
+
expect((0, index_1.isInterfaceWellKnown)("replay_control/v1")).toBe(true);
|
|
194
|
+
expect((0, index_1.isInterfaceWellKnown)("nope/v1")).toBe(false);
|
|
195
|
+
expect((0, index_1.getInterfaceService)("vehicle_mission/v1"))
|
|
196
|
+
.toBe("keelson.interfaces.vehicle_mission.VehicleMission");
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
describe("interface introspection", () => {
|
|
200
|
+
const { listInterfaces, getProcedures, getProcedureCodecs } = require('./index');
|
|
201
|
+
it("lists every bundled interface", () => {
|
|
202
|
+
const interfaces = listInterfaces();
|
|
203
|
+
expect(interfaces).toContain("vehicle_lifecycle/v1");
|
|
204
|
+
expect(interfaces).toContain("replay_control/v1");
|
|
205
|
+
expect(interfaces.length).toBeGreaterThanOrEqual(14);
|
|
206
|
+
});
|
|
207
|
+
it("enumerates procedures", () => {
|
|
208
|
+
expect(getProcedures("vehicle_lifecycle/v1")).toEqual(["arm", "set_mode", "emergency_stop"]);
|
|
209
|
+
expect(() => getProcedures("nope/v1")).toThrow();
|
|
210
|
+
});
|
|
211
|
+
it("resolves procedure codecs that roundtrip", () => {
|
|
212
|
+
const { requestType } = getProcedureCodecs("replay_control/v1", "set_speed");
|
|
213
|
+
const encoded = requestType.encode(requestType.fromPartial({ speed: 2.5 })).finish();
|
|
214
|
+
const decoded = requestType.decode(encoded);
|
|
215
|
+
expect(decoded.speed).toBeCloseTo(2.5);
|
|
216
|
+
expect(() => getProcedureCodecs("replay_control/v1", "warp")).toThrow();
|
|
217
|
+
});
|
|
218
|
+
});
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
|
|
2
|
+
export declare const protobufPackage = "";
|
|
3
|
+
export interface AcknowledgeAlarmRequest {
|
|
4
|
+
/** Client wall-clock at send, so the responder can log round-trip latency. */
|
|
5
|
+
timestamp: Date | undefined;
|
|
6
|
+
/** `Alarm.identifier` of the alarm being acknowledged. */
|
|
7
|
+
identifier: string;
|
|
8
|
+
/**
|
|
9
|
+
* Who is acknowledging — operator or station id. Recorded verbatim in the
|
|
10
|
+
* alarm's `AlarmAcknowledgment.acknowledged_by`, so it should be meaningful
|
|
11
|
+
* to somebody reading the alarm later, not an opaque session id.
|
|
12
|
+
*/
|
|
13
|
+
acknowledgedBy: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AcknowledgeAlarmResponse {
|
|
16
|
+
/**
|
|
17
|
+
* True when the owner recorded the acknowledgment. False is a legitimate
|
|
18
|
+
* outcome, not an error: an alarm may have expired, may already have been
|
|
19
|
+
* acknowledged by this party, or may carry ACK_NONE.
|
|
20
|
+
*/
|
|
21
|
+
acknowledged: boolean;
|
|
22
|
+
/** Why not, when `acknowledged` is false. Empty otherwise. */
|
|
23
|
+
reason: string;
|
|
24
|
+
/** When the owner recorded it. Set only when `acknowledged` is true. */
|
|
25
|
+
timestampAcknowledged: Date | undefined;
|
|
26
|
+
}
|
|
27
|
+
export declare const AcknowledgeAlarmRequest: MessageFns<AcknowledgeAlarmRequest>;
|
|
28
|
+
export declare const AcknowledgeAlarmResponse: MessageFns<AcknowledgeAlarmResponse>;
|
|
29
|
+
export type AlarmAckDefinition = typeof AlarmAckDefinition;
|
|
30
|
+
export declare const AlarmAckDefinition: {
|
|
31
|
+
readonly name: "AlarmAck";
|
|
32
|
+
readonly fullName: "AlarmAck";
|
|
33
|
+
readonly methods: {
|
|
34
|
+
readonly acknowledge_alarm: {
|
|
35
|
+
readonly name: "acknowledge_alarm";
|
|
36
|
+
readonly requestType: MessageFns<AcknowledgeAlarmRequest>;
|
|
37
|
+
readonly requestStream: false;
|
|
38
|
+
readonly responseType: MessageFns<AcknowledgeAlarmResponse>;
|
|
39
|
+
readonly responseStream: false;
|
|
40
|
+
readonly options: {};
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
|
45
|
+
export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
|
|
46
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
47
|
+
} : Partial<T>;
|
|
48
|
+
type KeysOfUnion<T> = T extends T ? keyof T : never;
|
|
49
|
+
export type Exact<P, I extends P> = P extends Builtin ? P : P & {
|
|
50
|
+
[K in keyof P]: Exact<P[K], I[K]>;
|
|
51
|
+
} & {
|
|
52
|
+
[K in Exclude<keyof I, KeysOfUnion<P>>]: never;
|
|
53
|
+
};
|
|
54
|
+
export interface MessageFns<T> {
|
|
55
|
+
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
|
56
|
+
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
|
57
|
+
fromJSON(object: any): T;
|
|
58
|
+
toJSON(message: T): unknown;
|
|
59
|
+
create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;
|
|
60
|
+
fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;
|
|
61
|
+
}
|
|
62
|
+
export {};
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
3
|
+
// versions:
|
|
4
|
+
// protoc-gen-ts_proto v2.6.1
|
|
5
|
+
// protoc v6.30.2
|
|
6
|
+
// source: AlarmAck.proto
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.AlarmAckDefinition = exports.AcknowledgeAlarmResponse = exports.AcknowledgeAlarmRequest = exports.protobufPackage = void 0;
|
|
9
|
+
/* eslint-disable */
|
|
10
|
+
const wire_1 = require("@bufbuild/protobuf/wire");
|
|
11
|
+
const timestamp_1 = require("./google/protobuf/timestamp");
|
|
12
|
+
exports.protobufPackage = "";
|
|
13
|
+
function createBaseAcknowledgeAlarmRequest() {
|
|
14
|
+
return { timestamp: undefined, identifier: "", acknowledgedBy: "" };
|
|
15
|
+
}
|
|
16
|
+
exports.AcknowledgeAlarmRequest = {
|
|
17
|
+
encode(message, writer = new wire_1.BinaryWriter()) {
|
|
18
|
+
if (message.timestamp !== undefined) {
|
|
19
|
+
timestamp_1.Timestamp.encode(toTimestamp(message.timestamp), writer.uint32(10).fork()).join();
|
|
20
|
+
}
|
|
21
|
+
if (message.identifier !== "") {
|
|
22
|
+
writer.uint32(18).string(message.identifier);
|
|
23
|
+
}
|
|
24
|
+
if (message.acknowledgedBy !== "") {
|
|
25
|
+
writer.uint32(26).string(message.acknowledgedBy);
|
|
26
|
+
}
|
|
27
|
+
return writer;
|
|
28
|
+
},
|
|
29
|
+
decode(input, length) {
|
|
30
|
+
const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
|
|
31
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
32
|
+
const message = createBaseAcknowledgeAlarmRequest();
|
|
33
|
+
while (reader.pos < end) {
|
|
34
|
+
const tag = reader.uint32();
|
|
35
|
+
switch (tag >>> 3) {
|
|
36
|
+
case 1: {
|
|
37
|
+
if (tag !== 10) {
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
message.timestamp = fromTimestamp(timestamp_1.Timestamp.decode(reader, reader.uint32()));
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
case 2: {
|
|
44
|
+
if (tag !== 18) {
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
message.identifier = reader.string();
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
case 3: {
|
|
51
|
+
if (tag !== 26) {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
message.acknowledgedBy = reader.string();
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
reader.skip(tag & 7);
|
|
62
|
+
}
|
|
63
|
+
return message;
|
|
64
|
+
},
|
|
65
|
+
fromJSON(object) {
|
|
66
|
+
return {
|
|
67
|
+
timestamp: isSet(object.timestamp) ? fromJsonTimestamp(object.timestamp) : undefined,
|
|
68
|
+
identifier: isSet(object.identifier) ? globalThis.String(object.identifier) : "",
|
|
69
|
+
acknowledgedBy: isSet(object.acknowledgedBy) ? globalThis.String(object.acknowledgedBy) : "",
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
toJSON(message) {
|
|
73
|
+
const obj = {};
|
|
74
|
+
if (message.timestamp !== undefined) {
|
|
75
|
+
obj.timestamp = message.timestamp.toISOString();
|
|
76
|
+
}
|
|
77
|
+
if (message.identifier !== "") {
|
|
78
|
+
obj.identifier = message.identifier;
|
|
79
|
+
}
|
|
80
|
+
if (message.acknowledgedBy !== "") {
|
|
81
|
+
obj.acknowledgedBy = message.acknowledgedBy;
|
|
82
|
+
}
|
|
83
|
+
return obj;
|
|
84
|
+
},
|
|
85
|
+
create(base) {
|
|
86
|
+
return exports.AcknowledgeAlarmRequest.fromPartial(base ?? {});
|
|
87
|
+
},
|
|
88
|
+
fromPartial(object) {
|
|
89
|
+
const message = createBaseAcknowledgeAlarmRequest();
|
|
90
|
+
message.timestamp = object.timestamp ?? undefined;
|
|
91
|
+
message.identifier = object.identifier ?? "";
|
|
92
|
+
message.acknowledgedBy = object.acknowledgedBy ?? "";
|
|
93
|
+
return message;
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
function createBaseAcknowledgeAlarmResponse() {
|
|
97
|
+
return { acknowledged: false, reason: "", timestampAcknowledged: undefined };
|
|
98
|
+
}
|
|
99
|
+
exports.AcknowledgeAlarmResponse = {
|
|
100
|
+
encode(message, writer = new wire_1.BinaryWriter()) {
|
|
101
|
+
if (message.acknowledged !== false) {
|
|
102
|
+
writer.uint32(8).bool(message.acknowledged);
|
|
103
|
+
}
|
|
104
|
+
if (message.reason !== "") {
|
|
105
|
+
writer.uint32(18).string(message.reason);
|
|
106
|
+
}
|
|
107
|
+
if (message.timestampAcknowledged !== undefined) {
|
|
108
|
+
timestamp_1.Timestamp.encode(toTimestamp(message.timestampAcknowledged), writer.uint32(26).fork()).join();
|
|
109
|
+
}
|
|
110
|
+
return writer;
|
|
111
|
+
},
|
|
112
|
+
decode(input, length) {
|
|
113
|
+
const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
|
|
114
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
115
|
+
const message = createBaseAcknowledgeAlarmResponse();
|
|
116
|
+
while (reader.pos < end) {
|
|
117
|
+
const tag = reader.uint32();
|
|
118
|
+
switch (tag >>> 3) {
|
|
119
|
+
case 1: {
|
|
120
|
+
if (tag !== 8) {
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
message.acknowledged = reader.bool();
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
case 2: {
|
|
127
|
+
if (tag !== 18) {
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
message.reason = reader.string();
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
case 3: {
|
|
134
|
+
if (tag !== 26) {
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
message.timestampAcknowledged = fromTimestamp(timestamp_1.Timestamp.decode(reader, reader.uint32()));
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
reader.skip(tag & 7);
|
|
145
|
+
}
|
|
146
|
+
return message;
|
|
147
|
+
},
|
|
148
|
+
fromJSON(object) {
|
|
149
|
+
return {
|
|
150
|
+
acknowledged: isSet(object.acknowledged) ? globalThis.Boolean(object.acknowledged) : false,
|
|
151
|
+
reason: isSet(object.reason) ? globalThis.String(object.reason) : "",
|
|
152
|
+
timestampAcknowledged: isSet(object.timestampAcknowledged)
|
|
153
|
+
? fromJsonTimestamp(object.timestampAcknowledged)
|
|
154
|
+
: undefined,
|
|
155
|
+
};
|
|
156
|
+
},
|
|
157
|
+
toJSON(message) {
|
|
158
|
+
const obj = {};
|
|
159
|
+
if (message.acknowledged !== false) {
|
|
160
|
+
obj.acknowledged = message.acknowledged;
|
|
161
|
+
}
|
|
162
|
+
if (message.reason !== "") {
|
|
163
|
+
obj.reason = message.reason;
|
|
164
|
+
}
|
|
165
|
+
if (message.timestampAcknowledged !== undefined) {
|
|
166
|
+
obj.timestampAcknowledged = message.timestampAcknowledged.toISOString();
|
|
167
|
+
}
|
|
168
|
+
return obj;
|
|
169
|
+
},
|
|
170
|
+
create(base) {
|
|
171
|
+
return exports.AcknowledgeAlarmResponse.fromPartial(base ?? {});
|
|
172
|
+
},
|
|
173
|
+
fromPartial(object) {
|
|
174
|
+
const message = createBaseAcknowledgeAlarmResponse();
|
|
175
|
+
message.acknowledged = object.acknowledged ?? false;
|
|
176
|
+
message.reason = object.reason ?? "";
|
|
177
|
+
message.timestampAcknowledged = object.timestampAcknowledged ?? undefined;
|
|
178
|
+
return message;
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
exports.AlarmAckDefinition = {
|
|
182
|
+
name: "AlarmAck",
|
|
183
|
+
fullName: "AlarmAck",
|
|
184
|
+
methods: {
|
|
185
|
+
acknowledge_alarm: {
|
|
186
|
+
name: "acknowledge_alarm",
|
|
187
|
+
requestType: exports.AcknowledgeAlarmRequest,
|
|
188
|
+
requestStream: false,
|
|
189
|
+
responseType: exports.AcknowledgeAlarmResponse,
|
|
190
|
+
responseStream: false,
|
|
191
|
+
options: {},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
function toTimestamp(date) {
|
|
196
|
+
const seconds = Math.trunc(date.getTime() / 1000);
|
|
197
|
+
const nanos = (date.getTime() % 1000) * 1000000;
|
|
198
|
+
return { seconds, nanos };
|
|
199
|
+
}
|
|
200
|
+
function fromTimestamp(t) {
|
|
201
|
+
let millis = (t.seconds || 0) * 1000;
|
|
202
|
+
millis += (t.nanos || 0) / 1000000;
|
|
203
|
+
return new globalThis.Date(millis);
|
|
204
|
+
}
|
|
205
|
+
function fromJsonTimestamp(o) {
|
|
206
|
+
if (o instanceof globalThis.Date) {
|
|
207
|
+
return o;
|
|
208
|
+
}
|
|
209
|
+
else if (typeof o === "string") {
|
|
210
|
+
return new globalThis.Date(o);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
return fromTimestamp(timestamp_1.Timestamp.fromJSON(o));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function isSet(value) {
|
|
217
|
+
return value !== null && value !== undefined;
|
|
218
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
|
|
2
2
|
import { Empty } from "./google/protobuf/empty";
|
|
3
|
-
export declare const protobufPackage = "";
|
|
3
|
+
export declare const protobufPackage = "keelson.interfaces.configurable";
|
|
4
4
|
/** This represents an actual JSON string, i.e. not a protobuf type! */
|
|
5
5
|
export interface JSON {
|
|
6
6
|
}
|
|
@@ -8,23 +8,29 @@ export interface ConfigurableSuccessResponse {
|
|
|
8
8
|
}
|
|
9
9
|
export declare const JSON: MessageFns<JSON>;
|
|
10
10
|
export declare const ConfigurableSuccessResponse: MessageFns<ConfigurableSuccessResponse>;
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
11
|
+
export type ConfigurableDefinition = typeof ConfigurableDefinition;
|
|
12
|
+
export declare const ConfigurableDefinition: {
|
|
13
|
+
readonly name: "Configurable";
|
|
14
|
+
readonly fullName: "keelson.interfaces.configurable.Configurable";
|
|
15
|
+
readonly methods: {
|
|
16
|
+
readonly get_config: {
|
|
17
|
+
readonly name: "get_config";
|
|
18
|
+
readonly requestType: import("./google/protobuf/empty").MessageFns<Empty>;
|
|
19
|
+
readonly requestStream: false;
|
|
20
|
+
readonly responseType: MessageFns<JSON>;
|
|
21
|
+
readonly responseStream: false;
|
|
22
|
+
readonly options: {};
|
|
23
|
+
};
|
|
24
|
+
readonly set_config: {
|
|
25
|
+
readonly name: "set_config";
|
|
26
|
+
readonly requestType: MessageFns<JSON>;
|
|
27
|
+
readonly requestStream: false;
|
|
28
|
+
readonly responseType: MessageFns<ConfigurableSuccessResponse>;
|
|
29
|
+
readonly responseStream: false;
|
|
30
|
+
readonly options: {};
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
};
|
|
28
34
|
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
|
29
35
|
export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
|
|
30
36
|
[K in keyof T]?: DeepPartial<T[K]>;
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
// protoc v6.30.2
|
|
6
6
|
// source: Configurable.proto
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.
|
|
8
|
+
exports.ConfigurableDefinition = exports.ConfigurableSuccessResponse = exports.JSON = exports.protobufPackage = void 0;
|
|
9
9
|
/* eslint-disable */
|
|
10
10
|
const wire_1 = require("@bufbuild/protobuf/wire");
|
|
11
11
|
const empty_1 = require("./google/protobuf/empty");
|
|
12
|
-
exports.protobufPackage = "";
|
|
12
|
+
exports.protobufPackage = "keelson.interfaces.configurable";
|
|
13
13
|
function createBaseJSON() {
|
|
14
14
|
return {};
|
|
15
15
|
}
|
|
@@ -84,23 +84,25 @@ exports.ConfigurableSuccessResponse = {
|
|
|
84
84
|
return message;
|
|
85
85
|
},
|
|
86
86
|
};
|
|
87
|
-
exports.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
87
|
+
exports.ConfigurableDefinition = {
|
|
88
|
+
name: "Configurable",
|
|
89
|
+
fullName: "keelson.interfaces.configurable.Configurable",
|
|
90
|
+
methods: {
|
|
91
|
+
get_config: {
|
|
92
|
+
name: "get_config",
|
|
93
|
+
requestType: empty_1.Empty,
|
|
94
|
+
requestStream: false,
|
|
95
|
+
responseType: exports.JSON,
|
|
96
|
+
responseStream: false,
|
|
97
|
+
options: {},
|
|
98
|
+
},
|
|
99
|
+
set_config: {
|
|
100
|
+
name: "set_config",
|
|
101
|
+
requestType: exports.JSON,
|
|
102
|
+
requestStream: false,
|
|
103
|
+
responseType: exports.ConfigurableSuccessResponse,
|
|
104
|
+
responseStream: false,
|
|
105
|
+
options: {},
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
|
|
2
|
+
export declare const protobufPackage = "keelson";
|
|
3
|
+
/**
|
|
4
|
+
* WGS84 latitude/longitude in plain degrees. The canonical coordinate
|
|
5
|
+
* shape for keelson *domain nouns* — mission waypoints, geofence
|
|
6
|
+
* vertices, navigation targets, route legs — shared by RPC interfaces
|
|
7
|
+
* and pub/sub payloads alike so consumers see a single coordinate type
|
|
8
|
+
* rather than each surface picking its own scaling / units.
|
|
9
|
+
*
|
|
10
|
+
* Telemetry position *fixes* (the `location_fix` subject) intentionally
|
|
11
|
+
* remain foxglove.LocationFix: a measured fix carries sensor context
|
|
12
|
+
* (covariance, frame_id) that is meaningful for telemetry but noise for
|
|
13
|
+
* a planned position. Don't swap one for the other.
|
|
14
|
+
*/
|
|
15
|
+
export interface Coordinate {
|
|
16
|
+
latitudeDeg: number;
|
|
17
|
+
longitudeDeg: number;
|
|
18
|
+
}
|
|
19
|
+
export declare const Coordinate: MessageFns<Coordinate>;
|
|
20
|
+
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
|
21
|
+
export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
|
|
22
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
23
|
+
} : Partial<T>;
|
|
24
|
+
type KeysOfUnion<T> = T extends T ? keyof T : never;
|
|
25
|
+
export type Exact<P, I extends P> = P extends Builtin ? P : P & {
|
|
26
|
+
[K in keyof P]: Exact<P[K], I[K]>;
|
|
27
|
+
} & {
|
|
28
|
+
[K in Exclude<keyof I, KeysOfUnion<P>>]: never;
|
|
29
|
+
};
|
|
30
|
+
export interface MessageFns<T> {
|
|
31
|
+
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
|
32
|
+
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
|
33
|
+
fromJSON(object: any): T;
|
|
34
|
+
toJSON(message: T): unknown;
|
|
35
|
+
create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;
|
|
36
|
+
fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;
|
|
37
|
+
}
|
|
38
|
+
export {};
|