@dronedeploy/rocos-js-sdk 3.0.1-alpha.11 → 3.0.1-alpha.15
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/cjs/IRocosSDK.d.ts +1 -2
- package/cjs/RocosSDK.d.ts +4 -6
- package/cjs/RocosSDK.js +1 -9
- package/cjs/api/streams/caller/CallerStream.js +5 -2
- package/cjs/api/streams/caller/CallerStreamNode.js +2 -1
- package/cjs/api/streams/command/CommandStream.js +5 -2
- package/cjs/api/streams/command/CommandStreamNode.js +2 -1
- package/cjs/api/streams/control/ControlStream.js +5 -2
- package/cjs/api/streams/control/ControlStreamAbstract.d.ts +1 -1
- package/cjs/api/streams/control/ControlStreamNode.js +2 -1
- package/cjs/api/streams/fileAccessor/FileAccessorStream.js +4 -1
- package/cjs/api/streams/fileAccessor/FileAccessorStreamNode.js +3 -1
- package/cjs/api/streams/search/SearchStream.js +5 -2
- package/cjs/api/streams/search/SearchStreamNode.js +2 -1
- package/cjs/api/streams/telemetry/TelemetryStream.js +4 -1
- package/cjs/api/streams/telemetry/TelemetryStreamAbstract.d.ts +1 -1
- package/cjs/api/streams/telemetry/TelemetryStreamNode.js +2 -1
- package/cjs/api/streams/webRTCSignalling/WebRTCSignallingStream.js +5 -2
- package/cjs/constants/api.d.ts +2 -4
- package/cjs/constants/api.js +4 -6
- package/cjs/helpers/getUniqueConfigKey.d.ts +6 -2
- package/cjs/helpers/getUniqueConfigKey.js +7 -2
- package/cjs/models/TelemetryStatus.d.ts +12 -0
- package/cjs/models/TelemetryStatus.js +17 -0
- package/cjs/models/Token.d.ts +2 -2
- package/cjs/models/Token.js +5 -5
- package/cjs/models/index.d.ts +1 -1
- package/cjs/models/index.js +1 -1
- package/cjs/node/RocosSDKNode.js +0 -3
- package/cjs/services/ProfileService.d.ts +23 -0
- package/cjs/services/ProfileService.js +28 -0
- package/cjs/services/RTPWebRTCService.d.ts +1 -1
- package/cjs/services/RTPWebRTCService.js +4 -2
- package/cjs/services/TelemetryService.d.ts +10 -1
- package/cjs/services/TelemetryService.js +27 -5
- package/cjs/services/index.d.ts +0 -1
- package/cjs/services/index.js +0 -1
- package/cjs/store/RocosStore.d.ts +1 -2
- package/esm/IRocosSDK.d.ts +1 -2
- package/esm/RocosSDK.d.ts +4 -6
- package/esm/RocosSDK.js +2 -10
- package/esm/api/streams/caller/CallerStream.js +5 -2
- package/esm/api/streams/caller/CallerStreamNode.js +2 -1
- package/esm/api/streams/command/CommandStream.js +5 -2
- package/esm/api/streams/command/CommandStreamNode.js +2 -1
- package/esm/api/streams/control/ControlStream.js +5 -2
- package/esm/api/streams/control/ControlStreamAbstract.d.ts +1 -1
- package/esm/api/streams/control/ControlStreamNode.js +2 -1
- package/esm/api/streams/fileAccessor/FileAccessorStream.js +4 -1
- package/esm/api/streams/fileAccessor/FileAccessorStreamNode.js +3 -1
- package/esm/api/streams/search/SearchStream.js +5 -2
- package/esm/api/streams/search/SearchStreamNode.js +2 -1
- package/esm/api/streams/telemetry/TelemetryStream.js +4 -1
- package/esm/api/streams/telemetry/TelemetryStreamAbstract.d.ts +1 -1
- package/esm/api/streams/telemetry/TelemetryStreamNode.js +2 -1
- package/esm/api/streams/webRTCSignalling/WebRTCSignallingStream.js +5 -2
- package/esm/constants/api.d.ts +2 -4
- package/esm/constants/api.js +2 -4
- package/esm/helpers/getUniqueConfigKey.d.ts +6 -2
- package/esm/helpers/getUniqueConfigKey.js +7 -2
- package/esm/models/TelemetryStatus.d.ts +12 -0
- package/esm/models/TelemetryStatus.js +14 -0
- package/esm/models/Token.d.ts +2 -2
- package/esm/models/Token.js +5 -5
- package/esm/models/index.d.ts +1 -1
- package/esm/models/index.js +1 -1
- package/esm/node/RocosSDKNode.js +1 -4
- package/esm/services/ProfileService.d.ts +23 -0
- package/esm/services/ProfileService.js +29 -1
- package/esm/services/RTPWebRTCService.d.ts +1 -1
- package/esm/services/RTPWebRTCService.js +4 -2
- package/esm/services/TelemetryService.d.ts +10 -1
- package/esm/services/TelemetryService.js +28 -6
- package/esm/services/index.d.ts +0 -1
- package/esm/services/index.js +0 -1
- package/esm/store/RocosStore.d.ts +1 -2
- package/package.json +1 -2
- package/cjs/helpers/cleanObject.spec.d.ts +0 -1
- package/cjs/helpers/cleanObject.spec.js +0 -55
- package/cjs/helpers/flattenObject.spec.d.ts +0 -1
- package/cjs/helpers/flattenObject.spec.js +0 -31
- package/cjs/helpers/flattenOneOf.spec.d.ts +0 -1
- package/cjs/helpers/flattenOneOf.spec.js +0 -159
- package/cjs/helpers/formatServiceUrl.spec.d.ts +0 -1
- package/cjs/helpers/formatServiceUrl.spec.js +0 -18
- package/cjs/helpers/getSha256Hex.spec.d.ts +0 -1
- package/cjs/helpers/getSha256Hex.spec.js +0 -19
- package/cjs/helpers/getSha256HexNode.spec.d.ts +0 -1
- package/cjs/helpers/getSha256HexNode.spec.js +0 -10
- package/cjs/helpers/getURLSearchParams.spec.d.ts +0 -1
- package/cjs/helpers/getURLSearchParams.spec.js +0 -21
- package/cjs/helpers/nanosecondToMillisecond.spec.d.ts +0 -1
- package/cjs/helpers/nanosecondToMillisecond.spec.js +0 -22
- package/cjs/helpers/splitRobotTopic.spec.d.ts +0 -1
- package/cjs/helpers/splitRobotTopic.spec.js +0 -53
- package/cjs/helpers/standardDeviation.spec.d.ts +0 -1
- package/cjs/helpers/standardDeviation.spec.js +0 -13
- package/cjs/helpers/websandbox/frame/worker/manager.spec.d.ts +0 -4
- package/cjs/helpers/websandbox/frame/worker/manager.spec.js +0 -132
- package/cjs/models/CallsignStatus.d.ts +0 -6
- package/cjs/models/CallsignStatus.js +0 -10
- package/cjs/models/Token.spec.d.ts +0 -1
- package/cjs/models/Token.spec.js +0 -110
- package/cjs/services/AuthService.spec.d.ts +0 -1
- package/cjs/services/AuthService.spec.js +0 -165
- package/cjs/services/CallerService.spec.d.ts +0 -1
- package/cjs/services/CallerService.spec.js +0 -229
- package/cjs/services/FunctionService.d.ts +0 -68
- package/cjs/services/FunctionService.js +0 -103
- package/cjs/services/PlatformTimeService.spec.d.ts +0 -1
- package/cjs/services/PlatformTimeService.spec.js +0 -182
- package/cjs/services/RTPWebRTCService.spec.d.ts +0 -4
- package/cjs/services/RTPWebRTCService.spec.js +0 -171
- package/cjs/services/TelemetryService.spec.d.ts +0 -1
- package/cjs/services/TelemetryService.spec.js +0 -39
- package/esm/helpers/cleanObject.spec.d.ts +0 -1
- package/esm/helpers/cleanObject.spec.js +0 -53
- package/esm/helpers/flattenObject.spec.d.ts +0 -1
- package/esm/helpers/flattenObject.spec.js +0 -29
- package/esm/helpers/flattenOneOf.spec.d.ts +0 -1
- package/esm/helpers/flattenOneOf.spec.js +0 -157
- package/esm/helpers/formatServiceUrl.spec.d.ts +0 -1
- package/esm/helpers/formatServiceUrl.spec.js +0 -16
- package/esm/helpers/getSha256Hex.spec.d.ts +0 -1
- package/esm/helpers/getSha256Hex.spec.js +0 -14
- package/esm/helpers/getSha256HexNode.spec.d.ts +0 -1
- package/esm/helpers/getSha256HexNode.spec.js +0 -8
- package/esm/helpers/getURLSearchParams.spec.d.ts +0 -1
- package/esm/helpers/getURLSearchParams.spec.js +0 -19
- package/esm/helpers/nanosecondToMillisecond.spec.d.ts +0 -1
- package/esm/helpers/nanosecondToMillisecond.spec.js +0 -20
- package/esm/helpers/splitRobotTopic.spec.d.ts +0 -1
- package/esm/helpers/splitRobotTopic.spec.js +0 -51
- package/esm/helpers/standardDeviation.spec.d.ts +0 -1
- package/esm/helpers/standardDeviation.spec.js +0 -11
- package/esm/helpers/websandbox/frame/worker/manager.spec.d.ts +0 -4
- package/esm/helpers/websandbox/frame/worker/manager.spec.js +0 -127
- package/esm/models/CallsignStatus.d.ts +0 -6
- package/esm/models/CallsignStatus.js +0 -7
- package/esm/models/Token.spec.d.ts +0 -1
- package/esm/models/Token.spec.js +0 -108
- package/esm/services/AuthService.spec.d.ts +0 -1
- package/esm/services/AuthService.spec.js +0 -163
- package/esm/services/CallerService.spec.d.ts +0 -1
- package/esm/services/CallerService.spec.js +0 -227
- package/esm/services/FunctionService.d.ts +0 -68
- package/esm/services/FunctionService.js +0 -99
- package/esm/services/PlatformTimeService.spec.d.ts +0 -1
- package/esm/services/PlatformTimeService.spec.js +0 -180
- package/esm/services/RTPWebRTCService.spec.d.ts +0 -4
- package/esm/services/RTPWebRTCService.spec.js +0 -169
- package/esm/services/TelemetryService.spec.d.ts +0 -1
- package/esm/services/TelemetryService.spec.js +0 -37
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { API_PROJECT_DEFINITION_ACTION_URL, API_PROJECT_DEFINITION_AGENT_URL, API_PROJECT_DEFINITION_BLOB_URL, API_PROJECT_DEFINITION_BUTTON_URL, API_PROJECT_DEFINITION_COMMAND2_URL, API_PROJECT_DEFINITION_COMMAND_URL, API_PROJECT_DEFINITION_COPY_URL, API_PROJECT_DEFINITION_DASHBOARD_URL, API_PROJECT_DEFINITION_GAMEPAD_URL, API_PROJECT_DEFINITION_ID_URL, API_PROJECT_DEFINITION_SETTING_URL, API_PROJECT_DEFINITION_STREAM_URL, API_PROJECT_DEFINITION_TRIGGER_URL, API_PROJECT_DEFINITION_URL, API_PROJECT_PROFILE_DASHBOARD_URL, API_PROJECT_ROBOT_DEFINITION_URL, API_PROJECT_ROBOT_URL, } from '../constants/api';
|
|
1
|
+
import { API_PROJECT_DEFINITION_ACTION_URL, API_PROJECT_DEFINITION_AGENT_URL, API_PROJECT_DEFINITION_BLOB_URL, API_PROJECT_DEFINITION_BUTTON_URL, API_PROJECT_DEFINITION_COMMAND2_URL, API_PROJECT_DEFINITION_COMMAND_URL, API_PROJECT_DEFINITION_COPY_URL, API_PROJECT_DEFINITION_DASHBOARD_URL, API_PROJECT_DEFINITION_EXPORT, API_PROJECT_DEFINITION_GAMEPAD_URL, API_PROJECT_DEFINITION_ID_URL, API_PROJECT_DEFINITION_IMPORT, API_PROJECT_DEFINITION_SETTING_URL, API_PROJECT_DEFINITION_STREAM_URL, API_PROJECT_DEFINITION_TRIGGER_URL, API_PROJECT_DEFINITION_URL, API_PROJECT_PROFILE_DASHBOARD_URL, API_PROJECT_ROBOT_DEFINITION_URL, API_PROJECT_ROBOT_URL, } from '../constants/api';
|
|
2
2
|
import { RocosError, errorCodes } from '../models/RocosError';
|
|
3
3
|
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
|
4
4
|
import { RocosLogger } from '../logger/RocosLogger';
|
|
@@ -345,6 +345,34 @@ export class ProfileService extends BaseServiceAbstract {
|
|
|
345
345
|
async getGamepads(projectId, definitionId) {
|
|
346
346
|
return this.callGet(formatServiceUrl(API_PROJECT_DEFINITION_GAMEPAD_URL, { url: this.config.url, projectId, definitionId }, this.config.insecure), `Failed to get gamepads for ${projectId}, definitionId ${definitionId}.`);
|
|
347
347
|
}
|
|
348
|
+
/** Export robot definition into JSON format
|
|
349
|
+
*
|
|
350
|
+
* Can be used to import robot definition into another project
|
|
351
|
+
*
|
|
352
|
+
* @param projectId - Project Id
|
|
353
|
+
* @param definitionId - Robot definition Id
|
|
354
|
+
*
|
|
355
|
+
* @see import
|
|
356
|
+
*/
|
|
357
|
+
async export(projectId, definitionId) {
|
|
358
|
+
return this.callPost(formatServiceUrl(API_PROJECT_DEFINITION_EXPORT, { url: this.config.url, projectId, definitionId }, this.config.insecure), undefined, `Failed to export robot definition for ${projectId}, definitionId ${definitionId}.`);
|
|
359
|
+
}
|
|
360
|
+
/** Import robot definition from JSON format
|
|
361
|
+
*
|
|
362
|
+
* Accepts a previously exported robot definition
|
|
363
|
+
*
|
|
364
|
+
* @param projectId - Project Id
|
|
365
|
+
* @param profileData - Robot definition data
|
|
366
|
+
* @param newName - Optional new name for the robot definition. If not provided, the name from the imported definition will be used.
|
|
367
|
+
*
|
|
368
|
+
* @see export
|
|
369
|
+
*/
|
|
370
|
+
async import(projectId, profileData, newName) {
|
|
371
|
+
if (newName) {
|
|
372
|
+
profileData.name = newName;
|
|
373
|
+
}
|
|
374
|
+
return this.callPost(formatServiceUrl(API_PROJECT_DEFINITION_IMPORT, { url: this.config.url, projectId }, this.config.insecure), profileData, `Failed to import robot definition for ${projectId}.`);
|
|
375
|
+
}
|
|
348
376
|
/**
|
|
349
377
|
* Update gamepads for a robot definition
|
|
350
378
|
*
|
|
@@ -54,7 +54,7 @@ export declare class RTPWebRTCService extends BaseServiceAbstract implements IBa
|
|
|
54
54
|
*
|
|
55
55
|
* If `logLevel` is set to trace, the connection will emit all messages as events
|
|
56
56
|
*/
|
|
57
|
-
createPeerConnection(params: PeerConnectionParams): WebRTCConnection
|
|
57
|
+
createPeerConnection(params: PeerConnectionParams): Promise<WebRTCConnection>;
|
|
58
58
|
}
|
|
59
59
|
export declare class WebRTCConnection {
|
|
60
60
|
private pc?;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { RocosError, errorCodes } from '../models';
|
|
2
2
|
import { Subject, scan, shareReplay } from 'rxjs';
|
|
3
3
|
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
|
4
|
+
import { RocosStore } from '../store/RocosStore';
|
|
4
5
|
import { splitRobotTopic } from '../helpers/splitRobotTopic';
|
|
5
6
|
export var WebRTCEventType;
|
|
6
7
|
(function (WebRTCEventType) {
|
|
@@ -33,16 +34,17 @@ export class RTPWebRTCService extends BaseServiceAbstract {
|
|
|
33
34
|
*
|
|
34
35
|
* If `logLevel` is set to trace, the connection will emit all messages as events
|
|
35
36
|
*/
|
|
36
|
-
createPeerConnection(params) {
|
|
37
|
+
async createPeerConnection(params) {
|
|
37
38
|
const isInsecure = this.config.insecure ?? false;
|
|
38
39
|
const port = this.config.port ?? (isInsecure ? 80 : 443);
|
|
40
|
+
const token = (await RocosStore.getSDKInstance(this.config).getAuthService().getToken()).value;
|
|
39
41
|
return new WebRTCConnection({
|
|
40
42
|
endpoint: {
|
|
41
43
|
host: this.config.url,
|
|
42
44
|
port,
|
|
43
45
|
insecure: isInsecure,
|
|
44
46
|
},
|
|
45
|
-
token
|
|
47
|
+
token,
|
|
46
48
|
projectId: params.projectId,
|
|
47
49
|
callsign: params.callsign,
|
|
48
50
|
logLevel: params.logLevel,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
|
-
import { CallsignStatus, IRocosSDKConfig, IRocosTelemetryMessage, IStreamStatusMessage, ITelemetryStream, ITelemetryStreamConfig, ITelemetrySubscriptionParams, ITelemetrySubscriptions } from '../models';
|
|
2
|
+
import { CallsignStatus, IRocosSDKConfig, IRocosTelemetryMessage, IStreamStatusMessage, ITelemetryStream, ITelemetryStreamConfig, ITelemetrySubscriptionParams, ITelemetrySubscriptions, TelemetryMonitorStatus } from '../models';
|
|
3
3
|
import { BaseStreamService } from './BaseStreamService';
|
|
4
4
|
export declare class TelemetryService extends BaseStreamService<ITelemetryStream, ITelemetryStreamConfig> {
|
|
5
5
|
private statusSubscription;
|
|
@@ -34,6 +34,15 @@ export declare class TelemetryService extends BaseStreamService<ITelemetryStream
|
|
|
34
34
|
* @param intervalMs optionally override the interval to check for heartbeats (in ms). Default 2000ms
|
|
35
35
|
*/
|
|
36
36
|
getRobotStatusChanges(projectId: string, callsign: string, heartbeatTimeoutMs?: number, intervalMs?: number): Observable<CallsignStatus>;
|
|
37
|
+
/**
|
|
38
|
+
* Subscribes to the given telemetry and checks we receive one at least emission every `heartbeatTimeoutMs` (default 5s)
|
|
39
|
+
* @param projectId
|
|
40
|
+
* @param callsign
|
|
41
|
+
* @param source the telemetry source to monitor
|
|
42
|
+
* @param heartbeatTimeoutMs optionally override the deadline for telemetry emissions (in ms). Default 5000ms
|
|
43
|
+
* @param intervalMs optionally override the interval to check for telemetry emissions (in ms). Default 2000ms
|
|
44
|
+
*/
|
|
45
|
+
monitorTelemetryWithTimeout(projectId: string, callsign: string, source: string, heartbeatTimeoutMs?: number, intervalMs?: number): Observable<TelemetryMonitorStatus>;
|
|
37
46
|
protected initStream(stream: ITelemetryStream): Promise<void>;
|
|
38
47
|
private buildScope;
|
|
39
48
|
private createStream;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BehaviorSubject, catchError, combineLatest, distinctUntilChanged, from, interval, map, mergeAll, of, startWith, } from 'rxjs';
|
|
2
|
-
import { CallsignStatus, CallsignsLookup, CallsignsLookupType, RocosError, SubscriberStatusEnum, errorCodes, } from '../models';
|
|
2
|
+
import { CallsignStatus, CallsignsLookup, CallsignsLookupType, RocosError, TelemetryMonitorStatus, SubscriberStatusEnum, errorCodes, } from '../models';
|
|
3
3
|
import { filter, finalize } from 'rxjs/operators';
|
|
4
4
|
import { BaseStreamService } from './BaseStreamService';
|
|
5
5
|
import { IDENTIFIER_NAME_TELEMETRY } from '../constants/identifier';
|
|
@@ -95,23 +95,45 @@ export class TelemetryService extends BaseStreamService {
|
|
|
95
95
|
* @param intervalMs optionally override the interval to check for heartbeats (in ms). Default 2000ms
|
|
96
96
|
*/
|
|
97
97
|
getRobotStatusChanges(projectId, callsign, heartbeatTimeoutMs = HEARTBEAT_TIMEOUT, intervalMs = 2000) {
|
|
98
|
+
return this.monitorTelemetryWithTimeout(projectId, callsign, HEARTBEAT_SOURCE, heartbeatTimeoutMs, intervalMs).pipe(map((status) => {
|
|
99
|
+
switch (status) {
|
|
100
|
+
case TelemetryMonitorStatus.CONNECTED:
|
|
101
|
+
return CallsignStatus.ONLINE;
|
|
102
|
+
case TelemetryMonitorStatus.DISCONNECTED:
|
|
103
|
+
return CallsignStatus.OFFLINE;
|
|
104
|
+
case TelemetryMonitorStatus.ERROR:
|
|
105
|
+
return CallsignStatus.ERROR;
|
|
106
|
+
default:
|
|
107
|
+
return CallsignStatus.UNKNOWN;
|
|
108
|
+
}
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Subscribes to the given telemetry and checks we receive one at least emission every `heartbeatTimeoutMs` (default 5s)
|
|
113
|
+
* @param projectId
|
|
114
|
+
* @param callsign
|
|
115
|
+
* @param source the telemetry source to monitor
|
|
116
|
+
* @param heartbeatTimeoutMs optionally override the deadline for telemetry emissions (in ms). Default 5000ms
|
|
117
|
+
* @param intervalMs optionally override the interval to check for telemetry emissions (in ms). Default 2000ms
|
|
118
|
+
*/
|
|
119
|
+
monitorTelemetryWithTimeout(projectId, callsign, source, heartbeatTimeoutMs = HEARTBEAT_TIMEOUT, intervalMs = 2000) {
|
|
98
120
|
const startedAt = Date.now();
|
|
99
121
|
const heartbeatTime$ = this.subscribe({
|
|
100
122
|
projectId,
|
|
101
|
-
sources: [
|
|
123
|
+
sources: [source],
|
|
102
124
|
callsigns: [callsign],
|
|
103
125
|
}).pipe(map(() => Date.now()));
|
|
104
126
|
return combineLatest([heartbeatTime$.pipe(startWith(startedAt)), interval(intervalMs)]).pipe(map(([lastHeartbeat, _]) => {
|
|
105
127
|
const now = Date.now();
|
|
106
128
|
// If we haven't received a heartbeat, but we've only just started
|
|
107
129
|
if (lastHeartbeat === startedAt && now - startedAt <= heartbeatTimeoutMs) {
|
|
108
|
-
return
|
|
130
|
+
return TelemetryMonitorStatus.UNKNOWN;
|
|
109
131
|
}
|
|
110
132
|
if (now - lastHeartbeat > heartbeatTimeoutMs) {
|
|
111
|
-
return
|
|
133
|
+
return TelemetryMonitorStatus.DISCONNECTED;
|
|
112
134
|
}
|
|
113
|
-
return
|
|
114
|
-
}), startWith(
|
|
135
|
+
return TelemetryMonitorStatus.CONNECTED;
|
|
136
|
+
}), startWith(TelemetryMonitorStatus.UNKNOWN), distinctUntilChanged(), catchError(() => of(TelemetryMonitorStatus.ERROR)));
|
|
115
137
|
}
|
|
116
138
|
async initStream(stream) {
|
|
117
139
|
await super.initStream(stream);
|
package/esm/services/index.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ export * from './ControlService';
|
|
|
7
7
|
export * from './DashboardService';
|
|
8
8
|
export * from './EventService';
|
|
9
9
|
export * from './FileAccessorService';
|
|
10
|
-
export * from './FunctionService';
|
|
11
10
|
export * from './IntegrationService';
|
|
12
11
|
export * from './ProfileService';
|
|
13
12
|
export * from './ProjectService';
|
package/esm/services/index.js
CHANGED
|
@@ -7,7 +7,6 @@ export * from './ControlService';
|
|
|
7
7
|
export * from './DashboardService';
|
|
8
8
|
export * from './EventService';
|
|
9
9
|
export * from './FileAccessorService';
|
|
10
|
-
export * from './FunctionService';
|
|
11
10
|
export * from './IntegrationService';
|
|
12
11
|
export * from './ProfileService';
|
|
13
12
|
export * from './ProjectService';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { IRocosChangeMessage } from '../models
|
|
1
|
+
import { IRocosChangeMessage, IRocosSDKConfig } from '../models';
|
|
2
2
|
import { IRocosSDK } from '../IRocosSDK';
|
|
3
|
-
import { IRocosSDKConfig } from '../models/IRocosSDKConfig';
|
|
4
3
|
import { Subject } from 'rxjs';
|
|
5
4
|
export declare class RocosStore {
|
|
6
5
|
private static changeSubject$?;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dronedeploy/rocos-js-sdk",
|
|
3
|
-
"version": "3.0.1-alpha.
|
|
3
|
+
"version": "3.0.1-alpha.15",
|
|
4
4
|
"description": "Javascript SDK for rocos",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -23,7 +23,6 @@
|
|
|
23
23
|
"devDependencies": {},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@grpc/grpc-js": "^1.7.1",
|
|
26
|
-
"@improbable-eng/grpc-web": "^0.14.0",
|
|
27
26
|
"@protobuf-ts/grpcweb-transport": "^2.9.1",
|
|
28
27
|
"@protobuf-ts/plugin": "^2.9.1",
|
|
29
28
|
"@protobuf-ts/runtime": "^2.9.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const cleanObject_1 = require("./cleanObject");
|
|
4
|
-
describe('cleanObject', () => {
|
|
5
|
-
const testObject = {
|
|
6
|
-
test1: 'test1',
|
|
7
|
-
test2: 'test2',
|
|
8
|
-
test3: () => 'test3',
|
|
9
|
-
test4: {
|
|
10
|
-
test1: 'test1.1',
|
|
11
|
-
test5: 'test5',
|
|
12
|
-
test6: {
|
|
13
|
-
test7: 'test7',
|
|
14
|
-
test1: 'test1.2',
|
|
15
|
-
test2: 'test2.1',
|
|
16
|
-
test8: () => 'test8',
|
|
17
|
-
},
|
|
18
|
-
test8: () => 'test8',
|
|
19
|
-
},
|
|
20
|
-
test9: ['test9.1', 'test9.2', () => 'test8'],
|
|
21
|
-
test10: [
|
|
22
|
-
{
|
|
23
|
-
test7: 'test7',
|
|
24
|
-
test1: 'test1.2',
|
|
25
|
-
test2: 'test2.1',
|
|
26
|
-
test8: () => 'test8',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
test8: () => 'test8',
|
|
30
|
-
},
|
|
31
|
-
],
|
|
32
|
-
};
|
|
33
|
-
it('should clean object to values only', () => {
|
|
34
|
-
const newObject = (0, cleanObject_1.cleanObject)(testObject);
|
|
35
|
-
expect(newObject?.test3).toBeUndefined();
|
|
36
|
-
expect(newObject?.test4?.test8).toBeUndefined();
|
|
37
|
-
expect(newObject?.test4?.test6?.test8).toBeUndefined();
|
|
38
|
-
expect(newObject?.test4?.test5).toEqual('test5');
|
|
39
|
-
expect(newObject?.test5).toBeUndefined();
|
|
40
|
-
expect(newObject?.test4?.test6?.test1).toEqual('test1.2');
|
|
41
|
-
expect(newObject?.test4?.test6?.test2).toEqual('test2.1');
|
|
42
|
-
expect(newObject?.test1).toEqual('test1');
|
|
43
|
-
expect(newObject?.test2).toEqual('test2');
|
|
44
|
-
expect(newObject?.test9).toEqual(expect.arrayContaining(['test9.1', 'test9.2']));
|
|
45
|
-
expect(newObject?.test9).toEqual(expect.not.arrayContaining([() => 'test8']));
|
|
46
|
-
expect(newObject?.test10).toEqual(expect.arrayContaining([
|
|
47
|
-
{
|
|
48
|
-
test7: 'test7',
|
|
49
|
-
test1: 'test1.2',
|
|
50
|
-
test2: 'test2.1',
|
|
51
|
-
},
|
|
52
|
-
{},
|
|
53
|
-
]));
|
|
54
|
-
});
|
|
55
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const flattenObject_1 = require("./flattenObject");
|
|
4
|
-
describe('flattenObject', () => {
|
|
5
|
-
const testObject = {
|
|
6
|
-
test1: 'test1',
|
|
7
|
-
test2: 'test2',
|
|
8
|
-
test3: () => 'test3',
|
|
9
|
-
test4: {
|
|
10
|
-
test1: 'test1.1',
|
|
11
|
-
test5: 'test5',
|
|
12
|
-
test6: {
|
|
13
|
-
test7: 'test7',
|
|
14
|
-
test1: 'test1.2',
|
|
15
|
-
test2: 'test2.1',
|
|
16
|
-
test8: () => 'test8',
|
|
17
|
-
},
|
|
18
|
-
test8: () => 'test8',
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
it('should flatten object to a single level', () => {
|
|
22
|
-
const newObject = (0, flattenObject_1.flattenObject)(testObject);
|
|
23
|
-
expect(newObject?.test3).toBeUndefined();
|
|
24
|
-
expect(newObject?.test4?.test8).toBeUndefined();
|
|
25
|
-
expect(newObject?.test4?.test6?.test8).toBeUndefined();
|
|
26
|
-
expect(newObject?.test4?.test5).toBeUndefined();
|
|
27
|
-
expect(newObject?.test5).toEqual('test5');
|
|
28
|
-
expect(newObject?.test1).toEqual('test1.2');
|
|
29
|
-
expect(newObject?.test2).toEqual('test2.1');
|
|
30
|
-
});
|
|
31
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const flattenOneOf_1 = require("./flattenOneOf");
|
|
4
|
-
describe('flattenOneOf', () => {
|
|
5
|
-
describe('hasOneOfField', () => {
|
|
6
|
-
it('should return false for non-object', () => {
|
|
7
|
-
expect((0, flattenOneOf_1.hasOneOfField)(null)).toBe(false);
|
|
8
|
-
expect((0, flattenOneOf_1.hasOneOfField)(undefined)).toBe(false);
|
|
9
|
-
expect((0, flattenOneOf_1.hasOneOfField)(1)).toBe(false);
|
|
10
|
-
expect((0, flattenOneOf_1.hasOneOfField)('')).toBe(false);
|
|
11
|
-
expect((0, flattenOneOf_1.hasOneOfField)(true)).toBe(false);
|
|
12
|
-
});
|
|
13
|
-
it('should return false for null content', () => {
|
|
14
|
-
expect((0, flattenOneOf_1.hasOneOfField)({ content: null })).toBe(false);
|
|
15
|
-
});
|
|
16
|
-
it('should return false for non-object content', () => {
|
|
17
|
-
expect((0, flattenOneOf_1.hasOneOfField)({ content: 1 })).toBe(false);
|
|
18
|
-
expect((0, flattenOneOf_1.hasOneOfField)({ content: '' })).toBe(false);
|
|
19
|
-
expect((0, flattenOneOf_1.hasOneOfField)({ content: true })).toBe(false);
|
|
20
|
-
});
|
|
21
|
-
it('should return false for non-string oneofKind', () => {
|
|
22
|
-
expect((0, flattenOneOf_1.hasOneOfField)({ content: { oneofKind: 1 } })).toBe(false);
|
|
23
|
-
expect((0, flattenOneOf_1.hasOneOfField)({ content: { oneofKind: null } })).toBe(false);
|
|
24
|
-
expect((0, flattenOneOf_1.hasOneOfField)({ content: { oneofKind: true } })).toBe(false);
|
|
25
|
-
expect((0, flattenOneOf_1.hasOneOfField)({ content: { oneofKind: {} } })).toBe(false);
|
|
26
|
-
});
|
|
27
|
-
it('should return true for valid oneOfField', () => {
|
|
28
|
-
expect((0, flattenOneOf_1.hasOneOfField)({ content: { oneofKind: 'test' } })).toBe(true);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
describe('flattenOneOf', () => {
|
|
32
|
-
it('should flatten a simple oneof type', () => {
|
|
33
|
-
const a = {
|
|
34
|
-
a: 'a',
|
|
35
|
-
content: {
|
|
36
|
-
oneofKind: 'b',
|
|
37
|
-
b: true,
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
expect((0, flattenOneOf_1.flattenOneOf)(a)).toEqual({
|
|
41
|
-
a: 'a',
|
|
42
|
-
b: true,
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
it('should flatten a nested oneof type, one level only', () => {
|
|
46
|
-
const a = {
|
|
47
|
-
b: {
|
|
48
|
-
content: {
|
|
49
|
-
oneofKind: 'c',
|
|
50
|
-
c: true,
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
content: {
|
|
54
|
-
oneofKind: 'd',
|
|
55
|
-
d: {
|
|
56
|
-
content: {
|
|
57
|
-
oneofKind: 'e',
|
|
58
|
-
e: 5,
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
expect((0, flattenOneOf_1.flattenOneOf)(a)).toEqual({
|
|
64
|
-
b: {
|
|
65
|
-
content: {
|
|
66
|
-
oneofKind: 'c',
|
|
67
|
-
c: true,
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
d: {
|
|
71
|
-
content: {
|
|
72
|
-
oneofKind: 'e',
|
|
73
|
-
e: 5,
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
it('should flatten to undefined if the referenced property does not exist', () => {
|
|
79
|
-
const a = {
|
|
80
|
-
content: {
|
|
81
|
-
oneofKind: 'b',
|
|
82
|
-
c: true,
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
expect((0, flattenOneOf_1.flattenOneOf)(a)).toEqual({
|
|
86
|
-
b: undefined,
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
it('should return the original object if it does not have a oneof field', () => {
|
|
90
|
-
const a = {
|
|
91
|
-
a: 'a',
|
|
92
|
-
b: 'b',
|
|
93
|
-
};
|
|
94
|
-
expect((0, flattenOneOf_1.flattenOneOf)(a)).toEqual(a);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
describe('flattenOneOf - deep', () => {
|
|
98
|
-
it('should flatten a simple oneof type', () => {
|
|
99
|
-
const a = {
|
|
100
|
-
a: 'a',
|
|
101
|
-
content: {
|
|
102
|
-
oneofKind: 'b',
|
|
103
|
-
b: {
|
|
104
|
-
d: 4,
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
};
|
|
108
|
-
expect((0, flattenOneOf_1.flattenOneOf)(a, true)).toEqual({
|
|
109
|
-
a: 'a',
|
|
110
|
-
b: { d: 4 },
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
it('should flatten a nested oneof type, all levels', () => {
|
|
114
|
-
const a = {
|
|
115
|
-
b: {
|
|
116
|
-
content: {
|
|
117
|
-
oneofKind: 'c',
|
|
118
|
-
c: true,
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
content: {
|
|
122
|
-
oneofKind: 'd',
|
|
123
|
-
d: {
|
|
124
|
-
content: {
|
|
125
|
-
oneofKind: 'e',
|
|
126
|
-
e: 5,
|
|
127
|
-
},
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
};
|
|
131
|
-
expect((0, flattenOneOf_1.flattenOneOf)(a, true)).toEqual({
|
|
132
|
-
b: {
|
|
133
|
-
c: true,
|
|
134
|
-
},
|
|
135
|
-
d: {
|
|
136
|
-
e: 5,
|
|
137
|
-
},
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
it('should flatten to undefined if the referenced property does not exist', () => {
|
|
141
|
-
const a = {
|
|
142
|
-
content: {
|
|
143
|
-
oneofKind: 'b',
|
|
144
|
-
c: true,
|
|
145
|
-
},
|
|
146
|
-
};
|
|
147
|
-
expect((0, flattenOneOf_1.flattenOneOf)(a, true)).toEqual({
|
|
148
|
-
b: undefined,
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
it('should return the original object if it does not have a oneof field', () => {
|
|
152
|
-
const a = {
|
|
153
|
-
a: 'a',
|
|
154
|
-
b: 'b',
|
|
155
|
-
};
|
|
156
|
-
expect((0, flattenOneOf_1.flattenOneOf)(a, true)).toEqual(a);
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const formatServiceUrl_1 = require("./formatServiceUrl");
|
|
4
|
-
describe('formatServiceUrl', () => {
|
|
5
|
-
const url = 'https://{url}/admin/users/{test}/invitations';
|
|
6
|
-
it('should format url', () => {
|
|
7
|
-
let newUrl = (0, formatServiceUrl_1.formatServiceUrl)(url, { url: 'test.com', test: 'me' });
|
|
8
|
-
expect(newUrl).toEqual('https://test.com/admin/users/me/invitations');
|
|
9
|
-
newUrl = (0, formatServiceUrl_1.formatServiceUrl)(url, { url: 'test2.com', test: 'me2' });
|
|
10
|
-
expect(newUrl).toEqual('https://test2.com/admin/users/me2/invitations');
|
|
11
|
-
});
|
|
12
|
-
it('should format insecure url', () => {
|
|
13
|
-
let newUrl = (0, formatServiceUrl_1.formatServiceUrl)(url, { url: 'test.com', test: 'me' }, true);
|
|
14
|
-
expect(newUrl).toEqual('http://test.com/admin/users/me/invitations');
|
|
15
|
-
newUrl = (0, formatServiceUrl_1.formatServiceUrl)(url, { url: 'test2.com', test: 'me2' }, true);
|
|
16
|
-
expect(newUrl).toEqual('http://test2.com/admin/users/me2/invitations');
|
|
17
|
-
});
|
|
18
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
7
|
-
const getSha256Hex_1 = require("./getSha256Hex");
|
|
8
|
-
Object.defineProperty(globalThis, 'crypto', {
|
|
9
|
-
value: {
|
|
10
|
-
subtle: crypto_1.default.webcrypto.subtle,
|
|
11
|
-
},
|
|
12
|
-
});
|
|
13
|
-
describe('getSha256Hex', () => {
|
|
14
|
-
it('should return the correct SHA-256 hash', async () => {
|
|
15
|
-
const buffer = new TextEncoder().encode('Hello, World!');
|
|
16
|
-
const hash = await (0, getSha256Hex_1.getSha256Hex)(buffer);
|
|
17
|
-
expect(hash).toBe('dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f');
|
|
18
|
-
});
|
|
19
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const getSha256HexNode_1 = require("./getSha256HexNode");
|
|
4
|
-
describe('getSha256HexNode', () => {
|
|
5
|
-
it('should return the correct SHA-256 hash', async () => {
|
|
6
|
-
const buffer = new TextEncoder().encode('Hello, World!');
|
|
7
|
-
const hash = await (0, getSha256HexNode_1.getSha256HexNode)(buffer);
|
|
8
|
-
expect(hash).toBe('dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f');
|
|
9
|
-
});
|
|
10
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const getURLSearchParams_1 = require("./getURLSearchParams");
|
|
4
|
-
describe('getURLSearchParams', () => {
|
|
5
|
-
it('Should return the original param if URLSearchParams', () => {
|
|
6
|
-
const param = new URLSearchParams();
|
|
7
|
-
const searchParam = (0, getURLSearchParams_1.getURLSearchParams)(param);
|
|
8
|
-
expect(searchParam).toBe(param);
|
|
9
|
-
});
|
|
10
|
-
it('Should a new URLSearchParams ', () => {
|
|
11
|
-
const param = {
|
|
12
|
-
foo: 'bar',
|
|
13
|
-
bar: true,
|
|
14
|
-
foobar: 123,
|
|
15
|
-
};
|
|
16
|
-
const searchParam = (0, getURLSearchParams_1.getURLSearchParams)(param);
|
|
17
|
-
expect(searchParam.get('foo')).toBe('bar');
|
|
18
|
-
expect(searchParam.get('bar')).toBe('true');
|
|
19
|
-
expect(searchParam.get('foobar')).toBe('123');
|
|
20
|
-
});
|
|
21
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const nanosecondToMillisecond_1 = require("./nanosecondToMillisecond");
|
|
4
|
-
describe('nanosecondToMillisecond', () => {
|
|
5
|
-
it.each `
|
|
6
|
-
input | expected
|
|
7
|
-
${'0.0001'} | ${0.0000000001}
|
|
8
|
-
${'1'} | ${0.000001}
|
|
9
|
-
${'1000000'} | ${1}
|
|
10
|
-
${'10000000'} | ${10}
|
|
11
|
-
${'-100000006'} | ${-100.000006}
|
|
12
|
-
${'1000000000000000000'} | ${1000000000000}
|
|
13
|
-
${'1234567891011100001'} | ${1234567891011.100001}
|
|
14
|
-
${'1234567891011100000'} | ${1234567891011.1}
|
|
15
|
-
${0.0001} | ${0.0000000001}
|
|
16
|
-
${1} | ${0.000001}
|
|
17
|
-
${1000000} | ${1}
|
|
18
|
-
${1000000000000001} | ${1000000000.000001}
|
|
19
|
-
`('should convert $input to $expected', ({ input, expected }) => {
|
|
20
|
-
expect((0, nanosecondToMillisecond_1.nanosecondToMillisecond)(input)).toBe(expected);
|
|
21
|
-
});
|
|
22
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const splitRobotTopic_1 = require("./splitRobotTopic");
|
|
4
|
-
describe('splitRobotTopic', () => {
|
|
5
|
-
it('should split a path with a single topic', () => {
|
|
6
|
-
expect((0, splitRobotTopic_1.splitRobotTopic)('/component/topic')).toEqual({
|
|
7
|
-
component: 'component',
|
|
8
|
-
topic: 'topic',
|
|
9
|
-
});
|
|
10
|
-
});
|
|
11
|
-
it('should split a path with multiple topics', () => {
|
|
12
|
-
expect((0, splitRobotTopic_1.splitRobotTopic)('/component/topic/with/multiple/topics')).toEqual({
|
|
13
|
-
component: 'component',
|
|
14
|
-
topic: 'topic/with/multiple/topics',
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
it('should split a path with no topics', () => {
|
|
18
|
-
expect((0, splitRobotTopic_1.splitRobotTopic)('/component')).toEqual({
|
|
19
|
-
component: 'component',
|
|
20
|
-
topic: '',
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
it('should split a path with no forward slash', () => {
|
|
24
|
-
expect((0, splitRobotTopic_1.splitRobotTopic)('component/topic')).toEqual({
|
|
25
|
-
component: 'component',
|
|
26
|
-
topic: 'topic',
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
it('should split a path with no forward slash and no topics', () => {
|
|
30
|
-
expect((0, splitRobotTopic_1.splitRobotTopic)('component')).toEqual({
|
|
31
|
-
component: 'component',
|
|
32
|
-
topic: '',
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
it('should split a path with no forward slash and multiple topics', () => {
|
|
36
|
-
expect((0, splitRobotTopic_1.splitRobotTopic)('component/topic/with/multiple/topics')).toEqual({
|
|
37
|
-
component: 'component',
|
|
38
|
-
topic: 'topic/with/multiple/topics',
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
it('should handle a path with multiple forward slashes', () => {
|
|
42
|
-
expect((0, splitRobotTopic_1.splitRobotTopic)('///component/topic/with/multiple/topics')).toEqual({
|
|
43
|
-
component: 'component',
|
|
44
|
-
topic: 'topic/with/multiple/topics',
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
it('should handle a path with multiple forward slashes and no topics', () => {
|
|
48
|
-
expect((0, splitRobotTopic_1.splitRobotTopic)('///component')).toEqual({
|
|
49
|
-
component: 'component',
|
|
50
|
-
topic: '',
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const standardDeviation_1 = require("./standardDeviation");
|
|
4
|
-
describe('standardDeviation', () => {
|
|
5
|
-
it('should calculate standard deviation correctly', () => {
|
|
6
|
-
let numbers = [10, 12, 23, 23, 16, 23, 21, 16];
|
|
7
|
-
let stdDev = (0, standardDeviation_1.standardDeviation)(numbers);
|
|
8
|
-
expect(Math.abs(stdDev - 4.8989794855664)).toBeLessThan(0.000001);
|
|
9
|
-
numbers = [100, 12, 23, 23, 116, 23, 21, 162];
|
|
10
|
-
stdDev = (0, standardDeviation_1.standardDeviation)(numbers);
|
|
11
|
-
expect(Math.abs(stdDev - 53.702886328394)).toBeLessThan(0.000001);
|
|
12
|
-
});
|
|
13
|
-
});
|