@dronedeploy/rocos-js-sdk 3.0.9 → 3.0.11
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/helpers/kscript/kscript.d.ts +7 -2
- package/cjs/helpers/kscript/kscript.js +23 -13
- package/cjs/helpers/kscript/nodes/Identifier.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/Identifier.js +1 -0
- package/cjs/helpers/kscript/nodes/Literal.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/Literal.js +4 -1
- package/cjs/helpers/kscript/nodes/Node.d.ts +6 -0
- package/cjs/helpers/kscript/nodes/Program.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/Program.js +10 -4
- package/cjs/helpers/kscript/nodes/TemplateLiteral.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/TemplateLiteral.js +8 -0
- package/cjs/helpers/kscript/nodes/expressions/ArrayExpression.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/expressions/ArrayExpression.js +11 -0
- package/cjs/helpers/kscript/nodes/expressions/ArrowFunctionExpression.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/expressions/ArrowFunctionExpression.js +8 -1
- package/cjs/helpers/kscript/nodes/expressions/BinaryExpression.d.ts +6 -0
- package/cjs/helpers/kscript/nodes/expressions/BinaryExpression.js +39 -22
- package/cjs/helpers/kscript/nodes/expressions/CallExpression.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/expressions/CallExpression.js +11 -1
- package/cjs/helpers/kscript/nodes/expressions/ChainExpression.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/expressions/ChainExpression.js +1 -0
- package/cjs/helpers/kscript/nodes/expressions/ConditionalExpression.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/expressions/ConditionalExpression.js +10 -0
- package/cjs/helpers/kscript/nodes/expressions/ExpressionStatement.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/expressions/ExpressionStatement.js +8 -1
- package/cjs/helpers/kscript/nodes/expressions/LogicalExpression.d.ts +2 -0
- package/cjs/helpers/kscript/nodes/expressions/LogicalExpression.js +11 -0
- package/cjs/helpers/kscript/nodes/expressions/MemberExpression.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/expressions/MemberExpression.js +7 -0
- package/cjs/helpers/kscript/nodes/expressions/ObjectExpression.d.ts +1 -0
- package/cjs/helpers/kscript/nodes/expressions/ObjectExpression.js +29 -0
- package/cjs/helpers/kscript/nodes/expressions/UnaryExpression.d.ts +2 -0
- package/cjs/helpers/kscript/nodes/expressions/UnaryExpression.js +9 -0
- package/cjs/models/asset-storage/SyncIntegrations.d.ts +3 -3
- package/cjs/services/AssetStorageService.d.ts +3 -3
- package/cjs/services/MapService.d.ts +2 -1
- package/cjs/services/MapService.js +7 -2
- package/esm/helpers/kscript/kscript.d.ts +7 -2
- package/esm/helpers/kscript/kscript.js +21 -12
- package/esm/helpers/kscript/nodes/Identifier.d.ts +1 -0
- package/esm/helpers/kscript/nodes/Identifier.js +1 -0
- package/esm/helpers/kscript/nodes/Literal.d.ts +1 -0
- package/esm/helpers/kscript/nodes/Literal.js +4 -1
- package/esm/helpers/kscript/nodes/Node.d.ts +6 -0
- package/esm/helpers/kscript/nodes/Program.d.ts +1 -0
- package/esm/helpers/kscript/nodes/Program.js +10 -4
- package/esm/helpers/kscript/nodes/TemplateLiteral.d.ts +1 -0
- package/esm/helpers/kscript/nodes/TemplateLiteral.js +8 -0
- package/esm/helpers/kscript/nodes/expressions/ArrayExpression.d.ts +1 -0
- package/esm/helpers/kscript/nodes/expressions/ArrayExpression.js +11 -0
- package/esm/helpers/kscript/nodes/expressions/ArrowFunctionExpression.d.ts +1 -0
- package/esm/helpers/kscript/nodes/expressions/ArrowFunctionExpression.js +8 -1
- package/esm/helpers/kscript/nodes/expressions/BinaryExpression.d.ts +6 -0
- package/esm/helpers/kscript/nodes/expressions/BinaryExpression.js +41 -23
- package/esm/helpers/kscript/nodes/expressions/CallExpression.d.ts +1 -0
- package/esm/helpers/kscript/nodes/expressions/CallExpression.js +11 -1
- package/esm/helpers/kscript/nodes/expressions/ChainExpression.d.ts +1 -0
- package/esm/helpers/kscript/nodes/expressions/ChainExpression.js +1 -0
- package/esm/helpers/kscript/nodes/expressions/ConditionalExpression.d.ts +1 -0
- package/esm/helpers/kscript/nodes/expressions/ConditionalExpression.js +10 -0
- package/esm/helpers/kscript/nodes/expressions/ExpressionStatement.d.ts +1 -0
- package/esm/helpers/kscript/nodes/expressions/ExpressionStatement.js +8 -1
- package/esm/helpers/kscript/nodes/expressions/LogicalExpression.d.ts +2 -0
- package/esm/helpers/kscript/nodes/expressions/LogicalExpression.js +13 -1
- package/esm/helpers/kscript/nodes/expressions/MemberExpression.d.ts +1 -0
- package/esm/helpers/kscript/nodes/expressions/MemberExpression.js +7 -0
- package/esm/helpers/kscript/nodes/expressions/ObjectExpression.d.ts +1 -0
- package/esm/helpers/kscript/nodes/expressions/ObjectExpression.js +29 -0
- package/esm/helpers/kscript/nodes/expressions/UnaryExpression.d.ts +2 -0
- package/esm/helpers/kscript/nodes/expressions/UnaryExpression.js +11 -1
- package/esm/models/asset-storage/SyncIntegrations.d.ts +3 -3
- package/esm/services/AssetStorageService.d.ts +3 -3
- package/esm/services/MapService.d.ts +2 -1
- package/esm/services/MapService.js +7 -2
- package/package.json +1 -1
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { ContextOptions, PrototypeWhitelist, Scope } from './Context';
|
|
2
2
|
import { Node } from './nodes';
|
|
3
|
-
export declare
|
|
4
|
-
|
|
3
|
+
export declare const compile: (code: string, scope?: Scope, options?: ContextOptions) => Node;
|
|
4
|
+
/** Throws an error if the code uses an invalid node.
|
|
5
|
+
*
|
|
6
|
+
* This does not check that the code will run without errors, only that the nodes used are allowed.
|
|
7
|
+
**/
|
|
8
|
+
export declare const validate: (code: string, options?: ContextOptions) => void;
|
|
9
|
+
export declare const execute: (code: string, scope?: Scope, options?: ContextOptions) => unknown;
|
|
5
10
|
export declare const SAFE_GLOBALS: Map<string, unknown>;
|
|
6
11
|
export declare const SAFE_PROTOTYPES: PrototypeWhitelist;
|
|
@@ -3,36 +3,46 @@ 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.SAFE_PROTOTYPES = exports.SAFE_GLOBALS = exports.
|
|
6
|
+
exports.SAFE_PROTOTYPES = exports.SAFE_GLOBALS = exports.execute = exports.validate = exports.compile = void 0;
|
|
7
7
|
const Context_1 = __importDefault(require("./Context"));
|
|
8
8
|
const acorn_1 = require("acorn");
|
|
9
9
|
const utils_1 = require("./utils");
|
|
10
|
-
|
|
11
|
-
return compile(code, scope, options).run();
|
|
12
|
-
}
|
|
13
|
-
exports.execute = execute;
|
|
14
|
-
function compile(code, scope, options) {
|
|
15
|
-
let program;
|
|
10
|
+
const parse = (code) => {
|
|
16
11
|
try {
|
|
17
12
|
// we add the brackets to ensure that object literals are parsed correctly
|
|
18
|
-
|
|
13
|
+
// e.g. `{ a: 1 }` is not a valid statement, but `({ a: 1 })` is
|
|
14
|
+
return (0, acorn_1.parse)(`(${code})`, { ecmaVersion: 2020, sourceType: 'script' });
|
|
19
15
|
}
|
|
20
16
|
catch (error) {
|
|
21
17
|
if (error instanceof SyntaxError) {
|
|
22
18
|
// fallback to non-wrapped code for edge cases where the brackets cause issues
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
else {
|
|
26
|
-
throw error;
|
|
19
|
+
// e.g. `if (a) 2; else 4;` will throw a syntax error if wrapped in brackets
|
|
20
|
+
return (0, acorn_1.parse)(`${code}`, { ecmaVersion: 2020, sourceType: 'script' });
|
|
27
21
|
}
|
|
22
|
+
throw error;
|
|
28
23
|
}
|
|
24
|
+
};
|
|
25
|
+
const compile = (code, scope, options) => {
|
|
26
|
+
const program = parse(code);
|
|
29
27
|
const context = new Context_1.default(scope ?? exports.SAFE_GLOBALS, {
|
|
30
28
|
prototypeWhitelist: exports.SAFE_PROTOTYPES,
|
|
31
29
|
...options,
|
|
32
30
|
});
|
|
33
31
|
return (0, utils_1.construct)(program, context);
|
|
34
|
-
}
|
|
32
|
+
};
|
|
35
33
|
exports.compile = compile;
|
|
34
|
+
/** Throws an error if the code uses an invalid node.
|
|
35
|
+
*
|
|
36
|
+
* This does not check that the code will run without errors, only that the nodes used are allowed.
|
|
37
|
+
**/
|
|
38
|
+
const validate = (code, options) => {
|
|
39
|
+
(0, exports.compile)(code, undefined, options).validate(true);
|
|
40
|
+
};
|
|
41
|
+
exports.validate = validate;
|
|
42
|
+
const execute = (code, scope, options) => {
|
|
43
|
+
return (0, exports.compile)(code, scope, options).run();
|
|
44
|
+
};
|
|
45
|
+
exports.execute = execute;
|
|
36
46
|
exports.SAFE_GLOBALS = new Map(Object.entries({
|
|
37
47
|
console: {
|
|
38
48
|
debug: console.debug,
|
|
@@ -12,10 +12,13 @@ class LiteralNode extends Node_1.default {
|
|
|
12
12
|
constructor(node, context) {
|
|
13
13
|
super(node, context, 'Literal');
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
validate() {
|
|
16
16
|
if (this.node.bigint) {
|
|
17
17
|
throw new Error('BigInts are not supported');
|
|
18
18
|
}
|
|
19
|
+
}
|
|
20
|
+
run() {
|
|
21
|
+
this.validate();
|
|
19
22
|
return this.node.value;
|
|
20
23
|
}
|
|
21
24
|
}
|
|
@@ -5,5 +5,11 @@ export default abstract class Node<T extends AnyNode = AnyNode> {
|
|
|
5
5
|
protected node: T;
|
|
6
6
|
protected scope: Context['scope'];
|
|
7
7
|
protected constructor(node: AnyNode, context: Context, expectedType: T['type'] | T['type'][]);
|
|
8
|
+
/** Runs the node. */
|
|
8
9
|
abstract run(): unknown;
|
|
10
|
+
/** Validates the node. If the node is invalid, an error is thrown.
|
|
11
|
+
*
|
|
12
|
+
* if `validateChildren` is true, the children of the node will also be validated.
|
|
13
|
+
*/
|
|
14
|
+
abstract validate(validateChildren: boolean): void;
|
|
9
15
|
}
|
|
@@ -13,12 +13,18 @@ class ProgramNode extends Node_1.default {
|
|
|
13
13
|
constructor(node, scope) {
|
|
14
14
|
super(node, scope, 'Program');
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (children.length !== 1) {
|
|
16
|
+
validate(validateChildren = false) {
|
|
17
|
+
if (this.node.body.length !== 1) {
|
|
19
18
|
throw new Error('Only a single statement is supported in the sandbox');
|
|
20
19
|
}
|
|
21
|
-
|
|
20
|
+
if (!validateChildren) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
(0, utils_1.construct)(this.node.body[0], this.context).validate(true);
|
|
24
|
+
}
|
|
25
|
+
run() {
|
|
26
|
+
this.validate();
|
|
27
|
+
return (0, utils_1.construct)(this.node.body[0], this.context).run();
|
|
22
28
|
}
|
|
23
29
|
}
|
|
24
30
|
exports.default = ProgramNode;
|
|
@@ -25,6 +25,14 @@ class TemplateLiteralNode extends Node_1.default {
|
|
|
25
25
|
constructor(node, scope) {
|
|
26
26
|
super(node, scope, 'TemplateLiteral');
|
|
27
27
|
}
|
|
28
|
+
validate(validateChildren = false) {
|
|
29
|
+
if (!validateChildren) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
for (const expression of this.node.expressions) {
|
|
33
|
+
(0, utils_1.construct)(expression, this.context).validate(true);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
28
36
|
run() {
|
|
29
37
|
return this.node.quasis.reduce((acc, quasi, i) => {
|
|
30
38
|
const expression = this.node.expressions[i] ? (0, utils_1.construct)(this.node.expressions[i], this.context).run() : '';
|
|
@@ -9,6 +9,17 @@ class ArrayExpressionNode extends Node_1.default {
|
|
|
9
9
|
constructor(node, context) {
|
|
10
10
|
super(node, context, 'ArrayExpression');
|
|
11
11
|
}
|
|
12
|
+
validate(validateChildren = false) {
|
|
13
|
+
if (!validateChildren) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
for (const element of this.node.elements) {
|
|
17
|
+
if (element === null) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
(0, utils_1.construct)(element, this.context).validate(true);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
12
23
|
run() {
|
|
13
24
|
const array = [];
|
|
14
25
|
for (const element of this.node.elements) {
|
|
@@ -10,5 +10,6 @@ import Node from '../Node';
|
|
|
10
10
|
export default class ArrowFunctionExpressionNode extends Node<ArrowFunctionExpression> {
|
|
11
11
|
private readonly params;
|
|
12
12
|
constructor(node: AnyNode, context: Context);
|
|
13
|
+
validate(validateChildren?: boolean): void;
|
|
13
14
|
run(): unknown;
|
|
14
15
|
}
|
|
@@ -19,13 +19,20 @@ class ArrowFunctionExpressionNode extends Node_1.default {
|
|
|
19
19
|
}
|
|
20
20
|
this.params = this.node.params;
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
validate(validateChildren = false) {
|
|
23
23
|
if (!this.context.isFunctionCallAllowed)
|
|
24
24
|
throw new Error('functions are not allowed');
|
|
25
25
|
if (!this.node.expression)
|
|
26
26
|
throw new Error('functions must be an expression');
|
|
27
27
|
if (this.node.async)
|
|
28
28
|
throw new Error('async functions are not supported');
|
|
29
|
+
if (!validateChildren) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
(0, utils_1.construct)(this.node.body, this.context).validate(true);
|
|
33
|
+
}
|
|
34
|
+
run() {
|
|
35
|
+
this.validate();
|
|
29
36
|
return (...args) => {
|
|
30
37
|
const scope = new Map();
|
|
31
38
|
for (const param of this.params) {
|
|
@@ -6,7 +6,13 @@ import Node from '../Node';
|
|
|
6
6
|
* e.g. `1 + 2`, `a === b`, `c < d`
|
|
7
7
|
*/
|
|
8
8
|
export default class BinaryExpressionNode extends Node<BinaryExpression> {
|
|
9
|
+
private static readonly EQUALITY_OPERATORS;
|
|
10
|
+
private static readonly COMPARISON_OPERATORS;
|
|
11
|
+
private static readonly ARITHMETIC_OPERATORS;
|
|
12
|
+
private static readonly IN_OPERATOR;
|
|
13
|
+
private static readonly SUPPORTED_OPERATORS;
|
|
9
14
|
constructor(node: AnyNode, context: Context);
|
|
15
|
+
validate(validateChildren?: boolean): void;
|
|
10
16
|
run(): unknown;
|
|
11
17
|
private operate;
|
|
12
18
|
private arithmetic;
|
|
@@ -13,35 +13,35 @@ class BinaryExpressionNode extends Node_1.default {
|
|
|
13
13
|
constructor(node, context) {
|
|
14
14
|
super(node, context, 'BinaryExpression');
|
|
15
15
|
}
|
|
16
|
+
validate(validateChildren = false) {
|
|
17
|
+
if (!BinaryExpressionNode.SUPPORTED_OPERATORS.has(this.node.operator)) {
|
|
18
|
+
throw new Error(`Unsupported operator: ${this.node.operator}`);
|
|
19
|
+
}
|
|
20
|
+
if (!validateChildren) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
(0, utils_1.construct)(this.node.left, this.context).validate(true);
|
|
24
|
+
(0, utils_1.construct)(this.node.right, this.context).validate(true);
|
|
25
|
+
}
|
|
16
26
|
run() {
|
|
17
27
|
const left = (0, utils_1.construct)(this.node.left, this.context).run();
|
|
18
28
|
const right = (0, utils_1.construct)(this.node.right, this.context).run();
|
|
19
29
|
return this.operate(left, right);
|
|
20
30
|
}
|
|
21
31
|
operate(left, right) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
case 'in':
|
|
34
|
-
return this.checkIn(left, right);
|
|
35
|
-
case '**':
|
|
36
|
-
case '+':
|
|
37
|
-
case '-':
|
|
38
|
-
case '*':
|
|
39
|
-
case '/':
|
|
40
|
-
case '%':
|
|
41
|
-
return this.arithmetic(this.node.operator, left, right);
|
|
42
|
-
default:
|
|
43
|
-
throw new Error(`Unsupported operator: ${this.node.operator}`);
|
|
32
|
+
if (BinaryExpressionNode.EQUALITY_OPERATORS.has(this.node.operator)) {
|
|
33
|
+
return this.equality(this.node.operator, left, right);
|
|
34
|
+
}
|
|
35
|
+
if (BinaryExpressionNode.COMPARISON_OPERATORS.has(this.node.operator)) {
|
|
36
|
+
return this.comparison(this.node.operator, left, right);
|
|
37
|
+
}
|
|
38
|
+
if (BinaryExpressionNode.ARITHMETIC_OPERATORS.has(this.node.operator)) {
|
|
39
|
+
return this.arithmetic(this.node.operator, left, right);
|
|
40
|
+
}
|
|
41
|
+
if (this.node.operator === BinaryExpressionNode.IN_OPERATOR) {
|
|
42
|
+
return this.checkIn(left, right);
|
|
44
43
|
}
|
|
44
|
+
throw new Error(`Unsupported operator: ${this.node.operator}`);
|
|
45
45
|
}
|
|
46
46
|
arithmetic(operator, left, right) {
|
|
47
47
|
if (operator === '+' && (typeof left === 'string' || typeof right === 'string')) {
|
|
@@ -101,4 +101,21 @@ class BinaryExpressionNode extends Node_1.default {
|
|
|
101
101
|
return right.includes(left);
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
+
BinaryExpressionNode.EQUALITY_OPERATORS = new Set(['==', '!=', '===', '!==']);
|
|
105
|
+
BinaryExpressionNode.COMPARISON_OPERATORS = new Set(['<', '<=', '>', '>=']);
|
|
106
|
+
BinaryExpressionNode.ARITHMETIC_OPERATORS = new Set([
|
|
107
|
+
'+',
|
|
108
|
+
'-',
|
|
109
|
+
'*',
|
|
110
|
+
'/',
|
|
111
|
+
'%',
|
|
112
|
+
'**',
|
|
113
|
+
]);
|
|
114
|
+
BinaryExpressionNode.IN_OPERATOR = 'in';
|
|
115
|
+
BinaryExpressionNode.SUPPORTED_OPERATORS = new Set([
|
|
116
|
+
...BinaryExpressionNode.EQUALITY_OPERATORS,
|
|
117
|
+
...BinaryExpressionNode.COMPARISON_OPERATORS,
|
|
118
|
+
...BinaryExpressionNode.ARITHMETIC_OPERATORS,
|
|
119
|
+
BinaryExpressionNode.IN_OPERATOR,
|
|
120
|
+
]);
|
|
104
121
|
exports.default = BinaryExpressionNode;
|
|
@@ -3,6 +3,7 @@ import Context from '../../Context';
|
|
|
3
3
|
import Node from '../Node';
|
|
4
4
|
export default class CallExpressionNode extends Node<CallExpression> {
|
|
5
5
|
constructor(node: AnyNode, context: Context);
|
|
6
|
+
validate(validateChildren?: boolean): void;
|
|
6
7
|
run(): unknown;
|
|
7
8
|
private spreadArgs;
|
|
8
9
|
}
|
|
@@ -9,9 +9,19 @@ class CallExpressionNode extends Node_1.default {
|
|
|
9
9
|
constructor(node, context) {
|
|
10
10
|
super(node, context, 'CallExpression');
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
validate(validateChildren = false) {
|
|
13
13
|
if (!this.context.isFunctionCallAllowed)
|
|
14
14
|
throw new Error('Function calls are not allowed');
|
|
15
|
+
if (!validateChildren) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
(0, utils_1.construct)(this.node.callee, this.context).validate(true);
|
|
19
|
+
for (const arg of this.node.arguments) {
|
|
20
|
+
(0, utils_1.construct)(arg, this.context).validate(true);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
run() {
|
|
24
|
+
this.validate();
|
|
15
25
|
const callee = (0, utils_1.construct)(this.node.callee, this.context).run();
|
|
16
26
|
let thisArg = {};
|
|
17
27
|
if (this.node.callee.type === 'MemberExpression') {
|
|
@@ -16,6 +16,16 @@ class ConditionalExpressionNode extends Node_1.default {
|
|
|
16
16
|
constructor(node, context) {
|
|
17
17
|
super(node, context, ['ConditionalExpression', 'IfStatement']);
|
|
18
18
|
}
|
|
19
|
+
validate(validateChildren) {
|
|
20
|
+
if (!validateChildren) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
(0, utils_1.construct)(this.node.test, this.context).validate(true);
|
|
24
|
+
(0, utils_1.construct)(this.node.consequent, this.context).validate(true);
|
|
25
|
+
if (this.node.alternate !== null && this.node.alternate !== undefined) {
|
|
26
|
+
(0, utils_1.construct)(this.node.alternate, this.context).validate(true);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
19
29
|
run() {
|
|
20
30
|
const test = (0, utils_1.construct)(this.node.test, this.context).run();
|
|
21
31
|
if (test) {
|
|
@@ -9,9 +9,16 @@ class ExpressionStatementNode extends Node_1.default {
|
|
|
9
9
|
constructor(node, context) {
|
|
10
10
|
super(node, context, 'ExpressionStatement');
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
validate(validateChildren = false) {
|
|
13
13
|
if (this.node.directive)
|
|
14
14
|
throw new Error('Directives are not supported');
|
|
15
|
+
if (!validateChildren) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
(0, utils_1.construct)(this.node.expression, this.context).validate(true);
|
|
19
|
+
}
|
|
20
|
+
run() {
|
|
21
|
+
this.validate();
|
|
15
22
|
return (0, utils_1.construct)(this.node.expression, this.context).run();
|
|
16
23
|
}
|
|
17
24
|
}
|
|
@@ -2,7 +2,9 @@ import { AnyNode, LogicalExpression } from 'acorn';
|
|
|
2
2
|
import Context from '../../Context';
|
|
3
3
|
import Node from '../Node';
|
|
4
4
|
export default class BinaryExpressionNode extends Node<LogicalExpression> {
|
|
5
|
+
private static readonly SUPPORTED_OPERATORS;
|
|
5
6
|
constructor(node: AnyNode, context: Context);
|
|
7
|
+
validate(validateChildren: boolean): void;
|
|
6
8
|
run(): unknown;
|
|
7
9
|
/** Try and skip evaluating the right operand */
|
|
8
10
|
private shortCircuit;
|
|
@@ -9,6 +9,16 @@ class BinaryExpressionNode extends Node_1.default {
|
|
|
9
9
|
constructor(node, context) {
|
|
10
10
|
super(node, context, 'LogicalExpression');
|
|
11
11
|
}
|
|
12
|
+
validate(validateChildren) {
|
|
13
|
+
if (!BinaryExpressionNode.SUPPORTED_OPERATORS.has(this.node.operator)) {
|
|
14
|
+
throw new Error(`Unsupported operator: ${this.node.operator}`);
|
|
15
|
+
}
|
|
16
|
+
if (!validateChildren) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
(0, utils_1.construct)(this.node.left, this.context).validate(true);
|
|
20
|
+
(0, utils_1.construct)(this.node.right, this.context).validate(true);
|
|
21
|
+
}
|
|
12
22
|
run() {
|
|
13
23
|
const left = (0, utils_1.construct)(this.node.left, this.context).run();
|
|
14
24
|
const shortCircuit = this.shortCircuit(left);
|
|
@@ -44,4 +54,5 @@ class BinaryExpressionNode extends Node_1.default {
|
|
|
44
54
|
}
|
|
45
55
|
}
|
|
46
56
|
}
|
|
57
|
+
BinaryExpressionNode.SUPPORTED_OPERATORS = new Set(['||', '&&', '??']);
|
|
47
58
|
exports.default = BinaryExpressionNode;
|
|
@@ -22,6 +22,7 @@ import Node from '../Node';
|
|
|
22
22
|
*/
|
|
23
23
|
export default class MemberExpressionNode extends Node<MemberExpression> {
|
|
24
24
|
constructor(node: AnyNode, context: Context);
|
|
25
|
+
validate(validateChildren?: boolean): void;
|
|
25
26
|
run(): unknown;
|
|
26
27
|
/** Returns the name of the property being accessed.
|
|
27
28
|
*
|
|
@@ -28,6 +28,13 @@ class MemberExpressionNode extends Node_1.default {
|
|
|
28
28
|
constructor(node, context) {
|
|
29
29
|
super(node, context, 'MemberExpression');
|
|
30
30
|
}
|
|
31
|
+
validate(validateChildren = false) {
|
|
32
|
+
if (!validateChildren) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
(0, utils_1.construct)(this.node.object, this.context).validate(true);
|
|
36
|
+
(0, utils_1.construct)(this.node.property, this.context).validate(true);
|
|
37
|
+
}
|
|
31
38
|
run() {
|
|
32
39
|
const object = (0, utils_1.construct)(this.node.object, this.context).run();
|
|
33
40
|
if (object === null || object === undefined) {
|
|
@@ -3,6 +3,7 @@ import type Context from '../../Context';
|
|
|
3
3
|
import Node from '../Node';
|
|
4
4
|
export default class ObjectExpressionNode extends Node<ObjectExpression> {
|
|
5
5
|
constructor(node: AnyNode, context: Context);
|
|
6
|
+
validate(validateChildren: boolean): void;
|
|
6
7
|
run(): unknown;
|
|
7
8
|
private addProperty;
|
|
8
9
|
private spreadProperty;
|
|
@@ -9,6 +9,35 @@ class ObjectExpressionNode extends Node_1.default {
|
|
|
9
9
|
constructor(node, context) {
|
|
10
10
|
super(node, context, 'ObjectExpression');
|
|
11
11
|
}
|
|
12
|
+
validate(validateChildren) {
|
|
13
|
+
for (const property of this.node.properties) {
|
|
14
|
+
// SpreadElements do not need to be validated - they only have a single argument
|
|
15
|
+
if (property.type === 'SpreadElement') {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (property.kind !== 'init') {
|
|
19
|
+
// do not support getters or setters
|
|
20
|
+
throw new Error('Only init properties are supported');
|
|
21
|
+
}
|
|
22
|
+
if (!property.computed) {
|
|
23
|
+
// ensure that the key is valid
|
|
24
|
+
this.getStaticKey(property.key);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (!validateChildren) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
for (const property of this.node.properties) {
|
|
31
|
+
if (property.type === 'SpreadElement') {
|
|
32
|
+
(0, utils_1.construct)(property.argument, this.context).validate(true);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (property.computed) {
|
|
36
|
+
(0, utils_1.construct)(property.key, this.context).validate(true);
|
|
37
|
+
}
|
|
38
|
+
(0, utils_1.construct)(property.value, this.context).validate(true);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
12
41
|
run() {
|
|
13
42
|
const object = {};
|
|
14
43
|
for (const property of this.node.properties) {
|
|
@@ -6,7 +6,9 @@ import Node from '../Node';
|
|
|
6
6
|
* e.g. `+1`, `-2`, `!true`, `typeof x`
|
|
7
7
|
*/
|
|
8
8
|
export default class UnaryExpressionNode extends Node<UnaryExpression> {
|
|
9
|
+
private static readonly SUPPORTED_OPERATORS;
|
|
9
10
|
constructor(node: AnyNode, context: Context);
|
|
11
|
+
validate(validateChildren: boolean): void;
|
|
10
12
|
run(): unknown;
|
|
11
13
|
private arithmetic;
|
|
12
14
|
}
|
|
@@ -13,6 +13,14 @@ class UnaryExpressionNode extends Node_1.default {
|
|
|
13
13
|
constructor(node, context) {
|
|
14
14
|
super(node, context, 'UnaryExpression');
|
|
15
15
|
}
|
|
16
|
+
validate(validateChildren) {
|
|
17
|
+
if (!UnaryExpressionNode.SUPPORTED_OPERATORS.has(this.node.operator)) {
|
|
18
|
+
throw new Error(`Unsupported operator: ${this.node.operator}`);
|
|
19
|
+
}
|
|
20
|
+
if (validateChildren) {
|
|
21
|
+
(0, utils_1.construct)(this.node.argument, this.context).validate(true);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
16
24
|
run() {
|
|
17
25
|
const argument = (0, utils_1.construct)(this.node.argument, this.context).run();
|
|
18
26
|
switch (this.node.operator) {
|
|
@@ -41,4 +49,5 @@ class UnaryExpressionNode extends Node_1.default {
|
|
|
41
49
|
}
|
|
42
50
|
}
|
|
43
51
|
}
|
|
52
|
+
UnaryExpressionNode.SUPPORTED_OPERATORS = new Set(['+', '-', '!', 'typeof']);
|
|
44
53
|
exports.default = UnaryExpressionNode;
|
|
@@ -12,9 +12,9 @@ export interface AssetSyncDefinitionModel {
|
|
|
12
12
|
export interface AssetSyncDefinitionOverrideModel extends AssetSyncDefinitionModel {
|
|
13
13
|
_isOverridden: boolean;
|
|
14
14
|
}
|
|
15
|
-
export interface AssetSyncDefinitionsModel {
|
|
16
|
-
items:
|
|
17
|
-
profileOverriddenItems?:
|
|
15
|
+
export interface AssetSyncDefinitionsModel<I extends AssetSyncDefinitionModel = AssetSyncDefinitionOverrideModel> {
|
|
16
|
+
items: I[];
|
|
17
|
+
profileOverriddenItems?: AssetSyncDefinitionModel[];
|
|
18
18
|
}
|
|
19
19
|
export interface AssetSyncIntegrationProviderModel {
|
|
20
20
|
provider: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AssetItemModel, AssetItemWithObservationsModel, AssetSyncDefinitionsModel, AssetSyncIntegrationModel, AssetSyncIntegrationProviderModel, CreateAssetSyncIntegrationModel, IBaseService, IRocosSDKConfig, RocosError } from '../models';
|
|
1
|
+
import { AssetItemModel, AssetItemWithObservationsModel, AssetSyncDefinitionModel, AssetSyncDefinitionsModel, AssetSyncIntegrationModel, AssetSyncIntegrationProviderModel, CreateAssetSyncIntegrationModel, IBaseService, IRocosSDKConfig, RocosError } from '../models';
|
|
2
2
|
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
|
3
3
|
export declare class AssetStorageService extends BaseServiceAbstract implements IBaseService {
|
|
4
4
|
constructor(config: IRocosSDKConfig);
|
|
@@ -92,7 +92,7 @@ export declare class AssetStorageService extends BaseServiceAbstract implements
|
|
|
92
92
|
* @param definition
|
|
93
93
|
* @param syncNow - Sync configured paths immediately
|
|
94
94
|
*/
|
|
95
|
-
setRobotSyncDefinitions(projectId: string, callsign: string, definition: AssetSyncDefinitionsModel
|
|
95
|
+
setRobotSyncDefinitions(projectId: string, callsign: string, definition: AssetSyncDefinitionsModel<AssetSyncDefinitionModel>, syncNow?: boolean): Promise<AssetSyncDefinitionsModel>;
|
|
96
96
|
/**
|
|
97
97
|
* Get Robot Sync Definitions
|
|
98
98
|
* @param projectId
|
|
@@ -105,7 +105,7 @@ export declare class AssetStorageService extends BaseServiceAbstract implements
|
|
|
105
105
|
* @param profileId
|
|
106
106
|
* @param definition
|
|
107
107
|
*/
|
|
108
|
-
setProfileSyncDefinitions(projectId: string, profileId: string, definition: AssetSyncDefinitionsModel): Promise<AssetSyncDefinitionsModel>;
|
|
108
|
+
setProfileSyncDefinitions(projectId: string, profileId: string, definition: Omit<AssetSyncDefinitionsModel<AssetSyncDefinitionModel>, 'profileOverriddenItems'>): Promise<AssetSyncDefinitionsModel>;
|
|
109
109
|
/**
|
|
110
110
|
* Get Profile Sync Definitions
|
|
111
111
|
* @param projectId
|
|
@@ -22,9 +22,10 @@ export declare class MapService extends BaseServiceAbstract implements IBaseServ
|
|
|
22
22
|
*
|
|
23
23
|
* @param projectId Project ID
|
|
24
24
|
* @param callsign Robot callsign
|
|
25
|
+
* @param includeSystem Include system maps
|
|
25
26
|
* @returns All maps in the cloud
|
|
26
27
|
*/
|
|
27
|
-
list(projectId: string, callsign: string): Promise<Map[]>;
|
|
28
|
+
list(projectId: string, callsign: string, includeSystem: boolean): Promise<Map[]>;
|
|
28
29
|
/** List maps to be deployed to a callsign
|
|
29
30
|
*
|
|
30
31
|
* @param projectId
|