@seleniumhq/side-runtime 4.0.0-alpha.0
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/callstack.d.ts +23 -0
- package/dist/callstack.d.ts.map +1 -0
- package/dist/callstack.js +40 -0
- package/dist/callstack.js.map +1 -0
- package/dist/errors/assertion.d.ts +4 -0
- package/dist/errors/assertion.d.ts.map +1 -0
- package/dist/errors/assertion.js +28 -0
- package/dist/errors/assertion.js.map +1 -0
- package/dist/errors/index.d.ts +3 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +27 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/verification.d.ts +4 -0
- package/dist/errors/verification.d.ts.map +1 -0
- package/dist/errors/verification.js +28 -0
- package/dist/errors/verification.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/playback-tree/command-leveler.d.ts +7 -0
- package/dist/playback-tree/command-leveler.d.ts.map +1 -0
- package/dist/playback-tree/command-leveler.js +73 -0
- package/dist/playback-tree/command-leveler.js.map +1 -0
- package/dist/playback-tree/command-node.d.ts +54 -0
- package/dist/playback-tree/command-node.d.ts.map +1 -0
- package/dist/playback-tree/command-node.js +185 -0
- package/dist/playback-tree/command-node.js.map +1 -0
- package/dist/playback-tree/commands.d.ts +42 -0
- package/dist/playback-tree/commands.d.ts.map +1 -0
- package/dist/playback-tree/commands.js +137 -0
- package/dist/playback-tree/commands.js.map +1 -0
- package/dist/playback-tree/control-flow-syntax-error.d.ts +5 -0
- package/dist/playback-tree/control-flow-syntax-error.d.ts.map +1 -0
- package/dist/playback-tree/control-flow-syntax-error.js +27 -0
- package/dist/playback-tree/control-flow-syntax-error.js.map +1 -0
- package/dist/playback-tree/index.d.ts +15 -0
- package/dist/playback-tree/index.d.ts.map +1 -0
- package/dist/playback-tree/index.js +161 -0
- package/dist/playback-tree/index.js.map +1 -0
- package/dist/playback-tree/state.d.ts +9 -0
- package/dist/playback-tree/state.d.ts.map +1 -0
- package/dist/playback-tree/state.js +38 -0
- package/dist/playback-tree/state.js.map +1 -0
- package/dist/playback-tree/syntax-validation.d.ts +4 -0
- package/dist/playback-tree/syntax-validation.d.ts.map +1 -0
- package/dist/playback-tree/syntax-validation.js +95 -0
- package/dist/playback-tree/syntax-validation.js.map +1 -0
- package/dist/playback.d.ts +167 -0
- package/dist/playback.d.ts.map +1 -0
- package/dist/playback.js +627 -0
- package/dist/playback.js.map +1 -0
- package/dist/plugins.d.ts +6 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +24 -0
- package/dist/plugins.js.map +1 -0
- package/dist/preprocessors.d.ts +10 -0
- package/dist/preprocessors.d.ts.map +1 -0
- package/dist/preprocessors.js +179 -0
- package/dist/preprocessors.js.map +1 -0
- package/dist/recording-syncronizer-webdriver.d.ts +15 -0
- package/dist/recording-syncronizer-webdriver.d.ts.map +1 -0
- package/dist/recording-syncronizer-webdriver.js +33 -0
- package/dist/recording-syncronizer-webdriver.js.map +1 -0
- package/dist/recording-syncronizer.d.ts +22 -0
- package/dist/recording-syncronizer.d.ts.map +1 -0
- package/dist/recording-syncronizer.js +68 -0
- package/dist/recording-syncronizer.js.map +1 -0
- package/dist/types.d.ts +60 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +24 -0
- package/dist/utils.js.map +1 -0
- package/dist/variables.d.ts +10 -0
- package/dist/variables.d.ts.map +1 -0
- package/dist/variables.js +41 -0
- package/dist/variables.js.map +1 -0
- package/dist/webdriver.d.ts +173 -0
- package/dist/webdriver.d.ts.map +1 -0
- package/dist/webdriver.js +1007 -0
- package/dist/webdriver.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CommandShape } from '@seleniumhq/side-model';
|
|
2
|
+
export declare const ControlFlowCommandNames: {
|
|
3
|
+
do: string;
|
|
4
|
+
else: string;
|
|
5
|
+
elseIf: string;
|
|
6
|
+
end: string;
|
|
7
|
+
forEach: string;
|
|
8
|
+
if: string;
|
|
9
|
+
repeatIf: string;
|
|
10
|
+
times: string;
|
|
11
|
+
while: string;
|
|
12
|
+
};
|
|
13
|
+
declare function isBlockOpen(command: CommandShape): boolean;
|
|
14
|
+
declare function isConditional(command: CommandShape): boolean;
|
|
15
|
+
declare function isControlFlow(command: CommandShape): boolean;
|
|
16
|
+
declare function isDo(command: CommandShape): boolean;
|
|
17
|
+
declare function isElse(command: CommandShape): boolean;
|
|
18
|
+
declare function isElseOrElseIf(command: CommandShape): boolean;
|
|
19
|
+
declare function isEnd(command: CommandShape): boolean;
|
|
20
|
+
declare function isIf(command: CommandShape): boolean;
|
|
21
|
+
declare function isIfBlock(command: CommandShape): boolean;
|
|
22
|
+
declare function isLoop(command: CommandShape): boolean;
|
|
23
|
+
declare function isTerminal(command: CommandShape): boolean;
|
|
24
|
+
declare function isTimes(command: CommandShape): boolean;
|
|
25
|
+
declare function isForEach(command: CommandShape): boolean;
|
|
26
|
+
export declare const ControlFlowCommandChecks: {
|
|
27
|
+
isIfBlock: typeof isIfBlock;
|
|
28
|
+
isConditional: typeof isConditional;
|
|
29
|
+
isDo: typeof isDo;
|
|
30
|
+
isElse: typeof isElse;
|
|
31
|
+
isElseOrElseIf: typeof isElseOrElseIf;
|
|
32
|
+
isEnd: typeof isEnd;
|
|
33
|
+
isIf: typeof isIf;
|
|
34
|
+
isLoop: typeof isLoop;
|
|
35
|
+
isBlockOpen: typeof isBlockOpen;
|
|
36
|
+
isTerminal: typeof isTerminal;
|
|
37
|
+
isControlFlow: typeof isControlFlow;
|
|
38
|
+
isTimes: typeof isTimes;
|
|
39
|
+
isForEach: typeof isForEach;
|
|
40
|
+
};
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/playback-tree/commands.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAErD,eAAO,MAAM,uBAAuB;;;;;;;;;;CAUnC,CAAA;AAcD,iBAAS,WAAW,CAAC,OAAO,EAAE,YAAY,WAEzC;AAED,iBAAS,aAAa,CAAC,OAAO,EAAE,YAAY,WAa3C;AAED,iBAAS,aAAa,CAAC,OAAO,EAAE,YAAY,WAgB3C;AAED,iBAAS,IAAI,CAAC,OAAO,EAAE,YAAY,WAKlC;AAED,iBAAS,MAAM,CAAC,OAAO,EAAE,YAAY,WAKpC;AASD,iBAAS,cAAc,CAAC,OAAO,EAAE,YAAY,WAE5C;AAED,iBAAS,KAAK,CAAC,OAAO,EAAE,YAAY,WAKnC;AAED,iBAAS,IAAI,CAAC,OAAO,EAAE,YAAY,WAKlC;AAED,iBAAS,SAAS,CAAC,OAAO,EAAE,YAAY,WAEvC;AAED,iBAAS,MAAM,CAAC,OAAO,EAAE,YAAY,WASpC;AAED,iBAAS,UAAU,CAAC,OAAO,EAAE,YAAY,WAKxC;AAED,iBAAS,OAAO,CAAC,OAAO,EAAE,YAAY,WAKrC;AAED,iBAAS,SAAS,CAAC,OAAO,EAAE,YAAY,WAKvC;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;CAcpC,CAAA"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
3
|
+
// or more contributor license agreements. See the NOTICE file
|
|
4
|
+
// distributed with this work for additional information
|
|
5
|
+
// regarding copyright ownership. The SFC licenses this file
|
|
6
|
+
// to you under the Apache License, Version 2.0 (the
|
|
7
|
+
// "License"); you may not use this file except in compliance
|
|
8
|
+
// with the License. You may obtain a copy of the License at
|
|
9
|
+
//
|
|
10
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
//
|
|
12
|
+
// Unless required by applicable law or agreed to in writing,
|
|
13
|
+
// software distributed under the License is distributed on an
|
|
14
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
// KIND, either express or implied. See the License for the
|
|
16
|
+
// specific language governing permissions and limitations
|
|
17
|
+
// under the License.
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ControlFlowCommandChecks = exports.ControlFlowCommandNames = void 0;
|
|
20
|
+
exports.ControlFlowCommandNames = {
|
|
21
|
+
do: 'do',
|
|
22
|
+
else: 'else',
|
|
23
|
+
elseIf: 'elseIf',
|
|
24
|
+
end: 'end',
|
|
25
|
+
forEach: 'forEach',
|
|
26
|
+
if: 'if',
|
|
27
|
+
repeatIf: 'repeatIf',
|
|
28
|
+
times: 'times',
|
|
29
|
+
while: 'while',
|
|
30
|
+
};
|
|
31
|
+
function commandNamesEqual(command, target) {
|
|
32
|
+
if (command) {
|
|
33
|
+
return command.command === target;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function isCommandEnabled(command) {
|
|
40
|
+
return command && !command.skip;
|
|
41
|
+
}
|
|
42
|
+
function isBlockOpen(command) {
|
|
43
|
+
return isCommandEnabled(command) && (isIf(command) || isLoop(command));
|
|
44
|
+
}
|
|
45
|
+
function isConditional(command) {
|
|
46
|
+
if (!isCommandEnabled(command))
|
|
47
|
+
return false;
|
|
48
|
+
switch (command.command) {
|
|
49
|
+
case exports.ControlFlowCommandNames.elseIf:
|
|
50
|
+
case exports.ControlFlowCommandNames.if:
|
|
51
|
+
case exports.ControlFlowCommandNames.repeatIf:
|
|
52
|
+
case exports.ControlFlowCommandNames.times:
|
|
53
|
+
case exports.ControlFlowCommandNames.while:
|
|
54
|
+
return true;
|
|
55
|
+
default:
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function isControlFlow(command) {
|
|
60
|
+
if (!isCommandEnabled(command))
|
|
61
|
+
return false;
|
|
62
|
+
switch (command.command) {
|
|
63
|
+
case exports.ControlFlowCommandNames.if:
|
|
64
|
+
case exports.ControlFlowCommandNames.elseIf:
|
|
65
|
+
case exports.ControlFlowCommandNames.else:
|
|
66
|
+
case exports.ControlFlowCommandNames.end:
|
|
67
|
+
case exports.ControlFlowCommandNames.do:
|
|
68
|
+
case exports.ControlFlowCommandNames.repeatIf:
|
|
69
|
+
case exports.ControlFlowCommandNames.times:
|
|
70
|
+
case exports.ControlFlowCommandNames.while:
|
|
71
|
+
return true;
|
|
72
|
+
default:
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function isDo(command) {
|
|
77
|
+
return (isCommandEnabled(command) &&
|
|
78
|
+
commandNamesEqual(command, exports.ControlFlowCommandNames.do));
|
|
79
|
+
}
|
|
80
|
+
function isElse(command) {
|
|
81
|
+
return (isCommandEnabled(command) &&
|
|
82
|
+
commandNamesEqual(command, exports.ControlFlowCommandNames.else));
|
|
83
|
+
}
|
|
84
|
+
function isElseIf(command) {
|
|
85
|
+
return (isCommandEnabled(command) &&
|
|
86
|
+
commandNamesEqual(command, exports.ControlFlowCommandNames.elseIf));
|
|
87
|
+
}
|
|
88
|
+
function isElseOrElseIf(command) {
|
|
89
|
+
return isCommandEnabled(command) && (isElseIf(command) || isElse(command));
|
|
90
|
+
}
|
|
91
|
+
function isEnd(command) {
|
|
92
|
+
return (isCommandEnabled(command) &&
|
|
93
|
+
commandNamesEqual(command, exports.ControlFlowCommandNames.end));
|
|
94
|
+
}
|
|
95
|
+
function isIf(command) {
|
|
96
|
+
return (isCommandEnabled(command) &&
|
|
97
|
+
commandNamesEqual(command, exports.ControlFlowCommandNames.if));
|
|
98
|
+
}
|
|
99
|
+
function isIfBlock(command) {
|
|
100
|
+
return isCommandEnabled(command) && (isIf(command) || isElseOrElseIf(command));
|
|
101
|
+
}
|
|
102
|
+
function isLoop(command) {
|
|
103
|
+
if (!isCommandEnabled(command))
|
|
104
|
+
return false;
|
|
105
|
+
return (commandNamesEqual(command, exports.ControlFlowCommandNames.while) ||
|
|
106
|
+
commandNamesEqual(command, exports.ControlFlowCommandNames.times) ||
|
|
107
|
+
commandNamesEqual(command, exports.ControlFlowCommandNames.repeatIf) ||
|
|
108
|
+
commandNamesEqual(command, exports.ControlFlowCommandNames.forEach));
|
|
109
|
+
}
|
|
110
|
+
function isTerminal(command) {
|
|
111
|
+
return (isCommandEnabled(command) &&
|
|
112
|
+
(isElse(command) || isDo(command) || isEnd(command)));
|
|
113
|
+
}
|
|
114
|
+
function isTimes(command) {
|
|
115
|
+
return (isCommandEnabled(command) &&
|
|
116
|
+
commandNamesEqual(command, exports.ControlFlowCommandNames.times));
|
|
117
|
+
}
|
|
118
|
+
function isForEach(command) {
|
|
119
|
+
return (isCommandEnabled(command) &&
|
|
120
|
+
commandNamesEqual(command, exports.ControlFlowCommandNames.forEach));
|
|
121
|
+
}
|
|
122
|
+
exports.ControlFlowCommandChecks = {
|
|
123
|
+
isIfBlock: isIfBlock,
|
|
124
|
+
isConditional: isConditional,
|
|
125
|
+
isDo: isDo,
|
|
126
|
+
isElse: isElse,
|
|
127
|
+
isElseOrElseIf: isElseOrElseIf,
|
|
128
|
+
isEnd: isEnd,
|
|
129
|
+
isIf: isIf,
|
|
130
|
+
isLoop: isLoop,
|
|
131
|
+
isBlockOpen: isBlockOpen,
|
|
132
|
+
isTerminal: isTerminal,
|
|
133
|
+
isControlFlow: isControlFlow,
|
|
134
|
+
isTimes: isTimes,
|
|
135
|
+
isForEach: isForEach,
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/playback-tree/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-flow-syntax-error.d.ts","sourceRoot":"","sources":["../../src/playback-tree/control-flow-syntax-error.ts"],"names":[],"mappings":"AAiBA,qBAAa,sBAAuB,SAAQ,WAAW;gBACzC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAI3C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
3
|
+
// or more contributor license agreements. See the NOTICE file
|
|
4
|
+
// dControlFlowCommandChecks.istributed with thControlFlowCommandChecks.is work for additional information
|
|
5
|
+
// regarding copyright ownership. The SFC licenses thControlFlowCommandChecks.is file
|
|
6
|
+
// to you under the Apache License, Version 2.0 (the
|
|
7
|
+
// "License"); you may not use thControlFlowCommandChecks.is file except in compliance
|
|
8
|
+
// with the License. You may obtain a copy of the License at
|
|
9
|
+
//
|
|
10
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
//
|
|
12
|
+
// Unless required by applicable law or agreed to in writing,
|
|
13
|
+
// software dControlFlowCommandChecks.istributed under the License ControlFlowCommandChecks.is dControlFlowCommandChecks.istributed on an
|
|
14
|
+
// "AS ControlFlowCommandChecks.is" BASControlFlowCommandChecks.is, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
// KIND, either express or implied. See the License for the
|
|
16
|
+
// specific language governing permControlFlowCommandChecks.issions and limitations
|
|
17
|
+
// under the License.
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ControlFlowSyntaxError = void 0;
|
|
20
|
+
class ControlFlowSyntaxError extends SyntaxError {
|
|
21
|
+
constructor(message, index) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.index = index;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.ControlFlowSyntaxError = ControlFlowSyntaxError;
|
|
27
|
+
//# sourceMappingURL=control-flow-syntax-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-flow-syntax-error.js","sourceRoot":"","sources":["../../src/playback-tree/control-flow-syntax-error.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,0GAA0G;AAC1G,sFAAsF;AACtF,oDAAoD;AACpD,sFAAsF;AACtF,6DAA6D;AAC7D,EAAE;AACF,+CAA+C;AAC/C,EAAE;AACF,6DAA6D;AAC7D,yIAAyI;AACzI,2GAA2G;AAC3G,4DAA4D;AAC5D,mFAAmF;AACnF,qBAAqB;;;AAErB,MAAa,sBAAuB,SAAQ,WAAW;IACrD,YAAY,OAAe,EAAE,KAAc;QACzC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;CAEF;AAND,wDAMC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CommandNode } from './command-node';
|
|
2
|
+
import { CommandShape } from '@seleniumhq/side-model';
|
|
3
|
+
import { CommandNodeOptions } from '../types';
|
|
4
|
+
import { Fn } from '@seleniumhq/side-commons';
|
|
5
|
+
export { createPlaybackTree };
|
|
6
|
+
export { createCommandNodesFromCommandStack };
|
|
7
|
+
export interface PlaybackTree {
|
|
8
|
+
startingCommandNode: CommandNode;
|
|
9
|
+
nodes: CommandNode[];
|
|
10
|
+
containsControlFlow: boolean;
|
|
11
|
+
}
|
|
12
|
+
declare function createPlaybackTree(commandStack: CommandShape[], { isValidationDisabled, emitControlFlowEvent }?: CommandNodeOptions): PlaybackTree;
|
|
13
|
+
declare function createCommandNodesFromCommandStack(commandStack: CommandShape[], isValidationDisabled?: boolean, emitControlFlowEvent?: Fn): CommandNode[];
|
|
14
|
+
export declare type ConnectFn = (commandNode: CommandNode, _nextCommandNode: CommandNode, stack: CommandNode[], state?: any) => void;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/playback-tree/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAK5C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAC7B,OAAO,EAAE,kCAAkC,EAAE,CAAA;AAE7C,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,WAAW,CAAA;IAChC,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,mBAAmB,EAAE,OAAO,CAAA;CAC7B;AAED,iBAAS,kBAAkB,CACzB,YAAY,EAAE,YAAY,EAAE,EAC5B,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,GAAE,kBAAuB,GACtE,YAAY,CAWd;AAMD,iBAAS,kCAAkC,CACzC,YAAY,EAAE,YAAY,EAAE,EAC5B,oBAAoB,GAAE,OAAe,EACrC,oBAAoB,CAAC,EAAE,EAAE,iBAM1B;AAgCD,oBAAY,SAAS,GAAG,CACtB,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,WAAW,EAC7B,KAAK,EAAE,WAAW,EAAE,EACpB,KAAK,CAAC,EAAE,GAAG,KACR,IAAI,CAAA"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
3
|
+
// or more contributor license agreements. See the NOTICE file
|
|
4
|
+
// distributed with this work for additional information
|
|
5
|
+
// regarding copyright ownership. The SFC licenses this file
|
|
6
|
+
// to you under the Apache License, Version 2.0 (the
|
|
7
|
+
// "License"); you may not use this file except in compliance
|
|
8
|
+
// with the License. You may obtain a copy of the License at
|
|
9
|
+
//
|
|
10
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
//
|
|
12
|
+
// Unless required by applicable law or agreed to in writing,
|
|
13
|
+
// software distributed under the License is distributed on an
|
|
14
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
// KIND, either express or implied. See the License for the
|
|
16
|
+
// specific language governing permissions and limitations
|
|
17
|
+
// under the License.
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.createCommandNodesFromCommandStack = exports.createPlaybackTree = void 0;
|
|
20
|
+
const command_node_1 = require("./command-node");
|
|
21
|
+
const state_1 = require("./state");
|
|
22
|
+
const syntax_validation_1 = require("./syntax-validation");
|
|
23
|
+
const command_leveler_1 = require("./command-leveler");
|
|
24
|
+
const commands_1 = require("./commands");
|
|
25
|
+
function createPlaybackTree(commandStack, { isValidationDisabled, emitControlFlowEvent } = {}) {
|
|
26
|
+
let nodes = createCommandNodesFromCommandStack(commandStack, isValidationDisabled, emitControlFlowEvent);
|
|
27
|
+
return {
|
|
28
|
+
startingCommandNode: nodes[0],
|
|
29
|
+
nodes,
|
|
30
|
+
containsControlFlow: containsControlFlow(nodes),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
exports.createPlaybackTree = createPlaybackTree;
|
|
34
|
+
function containsControlFlow(nodes) {
|
|
35
|
+
return !!nodes.filter((node) => node.isControlFlow()).length;
|
|
36
|
+
}
|
|
37
|
+
function createCommandNodesFromCommandStack(commandStack, isValidationDisabled = false, emitControlFlowEvent) {
|
|
38
|
+
if (!isValidationDisabled)
|
|
39
|
+
(0, syntax_validation_1.validateControlFlowSyntax)(commandStack);
|
|
40
|
+
let levels = (0, command_leveler_1.deriveCommandLevels)(commandStack);
|
|
41
|
+
let nodes = createCommandNodes(commandStack, levels, emitControlFlowEvent);
|
|
42
|
+
return connectCommandNodes(nodes);
|
|
43
|
+
}
|
|
44
|
+
exports.createCommandNodesFromCommandStack = createCommandNodesFromCommandStack;
|
|
45
|
+
function createCommandNodes(commandStack, levels, emitControlFlowEvent) {
|
|
46
|
+
let commandNodes = [];
|
|
47
|
+
commandStack.forEach(function (command, index) {
|
|
48
|
+
let node = new command_node_1.CommandNode(command, { emitControlFlowEvent });
|
|
49
|
+
node.index = index;
|
|
50
|
+
node.level = levels[index];
|
|
51
|
+
commandNodes.push(node);
|
|
52
|
+
});
|
|
53
|
+
return commandNodes;
|
|
54
|
+
}
|
|
55
|
+
function connectCommandNodes(_commandNodeStack) {
|
|
56
|
+
let commandNodeStack = [..._commandNodeStack];
|
|
57
|
+
let state = new state_1.State();
|
|
58
|
+
commandNodeStack.forEach(function (commandNode) {
|
|
59
|
+
let nextCommandNode = commandNodeStack[commandNode.index + 1];
|
|
60
|
+
connectCommandNode({
|
|
61
|
+
commandNode,
|
|
62
|
+
nextCommandNode,
|
|
63
|
+
commandNodeStack,
|
|
64
|
+
state,
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
return commandNodeStack;
|
|
68
|
+
}
|
|
69
|
+
const connectDefault = (commandNode, _nextCommandNode, stack, state) => {
|
|
70
|
+
let nextCommandNode;
|
|
71
|
+
if (commands_1.ControlFlowCommandChecks.isIf(state.top()) &&
|
|
72
|
+
commands_1.ControlFlowCommandChecks.isElseOrElseIf(_nextCommandNode.command)) {
|
|
73
|
+
nextCommandNode = findNextNodeBy(stack, commandNode.index, state.top().level, commands_1.ControlFlowCommandNames.end);
|
|
74
|
+
}
|
|
75
|
+
else if (commands_1.ControlFlowCommandChecks.isLoop(state.top()) &&
|
|
76
|
+
commands_1.ControlFlowCommandChecks.isEnd(_nextCommandNode.command)) {
|
|
77
|
+
nextCommandNode = stack[state.top().index];
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
nextCommandNode = _nextCommandNode;
|
|
81
|
+
}
|
|
82
|
+
connectNext(commandNode, nextCommandNode);
|
|
83
|
+
};
|
|
84
|
+
const trackBranchOpen = (commandNode, nextCommandNode, _stack, state) => {
|
|
85
|
+
state.push({
|
|
86
|
+
command: commandNode.command.command,
|
|
87
|
+
level: commandNode.level,
|
|
88
|
+
index: commandNode.index,
|
|
89
|
+
});
|
|
90
|
+
if (commands_1.ControlFlowCommandChecks.isDo(commandNode.command))
|
|
91
|
+
connectNext(commandNode, nextCommandNode);
|
|
92
|
+
};
|
|
93
|
+
const trackBranchClose = (commandNode, nextCommandNode, stack, state) => {
|
|
94
|
+
state.pop();
|
|
95
|
+
const top = state.top();
|
|
96
|
+
let nextCommandNodeOverride;
|
|
97
|
+
if (top &&
|
|
98
|
+
commands_1.ControlFlowCommandChecks.isLoop(top) &&
|
|
99
|
+
nextCommandNode &&
|
|
100
|
+
commands_1.ControlFlowCommandChecks.isEnd(nextCommandNode.command))
|
|
101
|
+
nextCommandNodeOverride = stack[top.index];
|
|
102
|
+
connectNext(commandNode, nextCommandNodeOverride ? nextCommandNodeOverride : nextCommandNode);
|
|
103
|
+
};
|
|
104
|
+
const connectConditionalForBranchOpen = (commandNode, nextCommandNode, stack, state) => {
|
|
105
|
+
trackBranchOpen(commandNode, nextCommandNode, stack, state);
|
|
106
|
+
connectConditional(commandNode, nextCommandNode, stack);
|
|
107
|
+
};
|
|
108
|
+
const connectConditional = (commandNode, nextCommandNode, stack) => {
|
|
109
|
+
let left = findNextNodeBy(stack, commandNode.index, commandNode.level);
|
|
110
|
+
let right = nextCommandNode;
|
|
111
|
+
commandNode.right = right;
|
|
112
|
+
commandNode.left = left;
|
|
113
|
+
};
|
|
114
|
+
function connectNext(commandNode, nextCommandNode) {
|
|
115
|
+
commandNode.next = nextCommandNode;
|
|
116
|
+
}
|
|
117
|
+
const connectDo = (commandNode, nextCommandNode, stack, state) => {
|
|
118
|
+
const top = state.top();
|
|
119
|
+
if (!top)
|
|
120
|
+
(0, syntax_validation_1.repeatIfError)();
|
|
121
|
+
commandNode.right = stack[top.index];
|
|
122
|
+
commandNode.left = nextCommandNode;
|
|
123
|
+
state.pop();
|
|
124
|
+
};
|
|
125
|
+
function findNextNodeBy(stack, index, level, commandName) {
|
|
126
|
+
for (let i = index + 1; i < stack.length + 1; i++) {
|
|
127
|
+
if (commandName) {
|
|
128
|
+
if (stack[i].level === level &&
|
|
129
|
+
stack[i].command.command === commandName) {
|
|
130
|
+
return stack[i];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
if (stack[i].level === level) {
|
|
135
|
+
return stack[i];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
function connectCommandNode({ commandNode, nextCommandNode, commandNodeStack, state, }) {
|
|
142
|
+
if (commandNode.command.skip ||
|
|
143
|
+
!commandNodeConnectors[commandNode.command.command]) {
|
|
144
|
+
connectDefault(commandNode, nextCommandNode, commandNodeStack, state);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
commandNodeConnectors[commandNode.command.command](commandNode, nextCommandNode, commandNodeStack, state);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const commandNodeConnectors = {
|
|
151
|
+
[commands_1.ControlFlowCommandNames.do]: trackBranchOpen,
|
|
152
|
+
[commands_1.ControlFlowCommandNames.else]: connectNext,
|
|
153
|
+
[commands_1.ControlFlowCommandNames.elseIf]: connectConditional,
|
|
154
|
+
[commands_1.ControlFlowCommandNames.end]: trackBranchClose,
|
|
155
|
+
[commands_1.ControlFlowCommandNames.forEach]: connectConditionalForBranchOpen,
|
|
156
|
+
[commands_1.ControlFlowCommandNames.if]: connectConditionalForBranchOpen,
|
|
157
|
+
[commands_1.ControlFlowCommandNames.repeatIf]: connectDo,
|
|
158
|
+
[commands_1.ControlFlowCommandNames.times]: connectConditionalForBranchOpen,
|
|
159
|
+
[commands_1.ControlFlowCommandNames.while]: connectConditionalForBranchOpen,
|
|
160
|
+
};
|
|
161
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/playback-tree/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/playback-tree/state.ts"],"names":[],"mappings":"AAiBA,qBAAa,KAAK;;IAIhB,MAAM,EAAE,GAAG,EAAE,CAAA;IACb,KAAK;IAIL,IAAI,CAAC,GAAG,EAAE,GAAG;IAIb,GAAG;IAIH,GAAG;CAGJ"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
3
|
+
// or more contributor license agreements. See the NOTICE file
|
|
4
|
+
// distributed with this work for additional information
|
|
5
|
+
// regarding copyright ownership. The SFC licenses this file
|
|
6
|
+
// to you under the Apache License, Version 2.0 (the
|
|
7
|
+
// "License"); you may not use this file except in compliance
|
|
8
|
+
// with the License. You may obtain a copy of the License at
|
|
9
|
+
//
|
|
10
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
//
|
|
12
|
+
// Unless required by applicable law or agreed to in writing,
|
|
13
|
+
// software distributed under the License is distributed on an
|
|
14
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
// KIND, either express or implied. See the License for the
|
|
16
|
+
// specific language governing permissions and limitations
|
|
17
|
+
// under the License.
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.State = void 0;
|
|
20
|
+
class State {
|
|
21
|
+
constructor() {
|
|
22
|
+
this._state = [];
|
|
23
|
+
}
|
|
24
|
+
empty() {
|
|
25
|
+
return this._state.length === 0;
|
|
26
|
+
}
|
|
27
|
+
push(obj) {
|
|
28
|
+
this._state.push(obj);
|
|
29
|
+
}
|
|
30
|
+
pop() {
|
|
31
|
+
this._state.pop();
|
|
32
|
+
}
|
|
33
|
+
top() {
|
|
34
|
+
return this._state[this._state.length - 1];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.State = State;
|
|
38
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/playback-tree/state.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,wDAAwD;AACxD,6DAA6D;AAC7D,oDAAoD;AACpD,6DAA6D;AAC7D,6DAA6D;AAC7D,EAAE;AACF,+CAA+C;AAC/C,EAAE;AACF,6DAA6D;AAC7D,8DAA8D;AAC9D,yDAAyD;AACzD,4DAA4D;AAC5D,0DAA0D;AAC1D,qBAAqB;;;AAErB,MAAa,KAAK;IAChB;QACE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;IAClB,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,CAAC,GAAQ;QACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IAED,GAAG;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC5C,CAAC;CACF;AApBD,sBAoBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax-validation.d.ts","sourceRoot":"","sources":["../../src/playback-tree/syntax-validation.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAErD,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,YAAY,EAAE,WAarE;AAiFD,wBAAgB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,QAKlD"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Licensed to the Software Freedom Conservancy (SFC) under one
|
|
3
|
+
// or more contributor license agreements. See the NOTICE file
|
|
4
|
+
// distributed with this work for additional information
|
|
5
|
+
// regarding copyright ownership. The SFC licenses this file
|
|
6
|
+
// to you under the Apache License, Version 2.0 (the
|
|
7
|
+
// "License"); you may not use this file except in compliance
|
|
8
|
+
// with the License. You may obtain a copy of the License at
|
|
9
|
+
//
|
|
10
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
//
|
|
12
|
+
// Unless required by applicable law or agreed to in writing,
|
|
13
|
+
// software distributed under the License is distributed on an
|
|
14
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
// KIND, either express or implied. See the License for the
|
|
16
|
+
// specific language governing permissions and limitations
|
|
17
|
+
// under the License.
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.repeatIfError = exports.validateControlFlowSyntax = void 0;
|
|
20
|
+
const commands_1 = require("./commands");
|
|
21
|
+
const state_1 = require("./state");
|
|
22
|
+
const control_flow_syntax_error_1 = require("./control-flow-syntax-error");
|
|
23
|
+
function validateControlFlowSyntax(commandStack) {
|
|
24
|
+
let state = new state_1.State();
|
|
25
|
+
commandStack.forEach(function (command, commandIndex) {
|
|
26
|
+
validateCommand(command, commandIndex, state);
|
|
27
|
+
});
|
|
28
|
+
if (!state.empty()) {
|
|
29
|
+
throw new control_flow_syntax_error_1.ControlFlowSyntaxError('Incomplete block at ' + state.top().command, state.top().index);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.validateControlFlowSyntax = validateControlFlowSyntax;
|
|
36
|
+
function validateCommand(command, commandIndex, state) {
|
|
37
|
+
if (!command.skip && commandValidators[command.command]) {
|
|
38
|
+
return commandValidators[command.command](command.command, commandIndex, state);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const commandValidators = {
|
|
42
|
+
[commands_1.ControlFlowCommandNames.do]: trackControlFlowBranchOpen,
|
|
43
|
+
[commands_1.ControlFlowCommandNames.else]: validateElse,
|
|
44
|
+
[commands_1.ControlFlowCommandNames.elseIf]: validateElseIf,
|
|
45
|
+
[commands_1.ControlFlowCommandNames.end]: validateEnd,
|
|
46
|
+
[commands_1.ControlFlowCommandNames.forEach]: trackControlFlowBranchOpen,
|
|
47
|
+
[commands_1.ControlFlowCommandNames.if]: trackControlFlowBranchOpen,
|
|
48
|
+
[commands_1.ControlFlowCommandNames.repeatIf]: validateRepeatIf,
|
|
49
|
+
[commands_1.ControlFlowCommandNames.times]: trackControlFlowBranchOpen,
|
|
50
|
+
[commands_1.ControlFlowCommandNames.while]: trackControlFlowBranchOpen,
|
|
51
|
+
};
|
|
52
|
+
function trackControlFlowBranchOpen(commandName, commandIndex, state) {
|
|
53
|
+
state.push({ command: commandName, index: commandIndex });
|
|
54
|
+
}
|
|
55
|
+
function validateElse(commandName, commandIndex, state) {
|
|
56
|
+
if (!commands_1.ControlFlowCommandChecks.isIfBlock(state.top())) {
|
|
57
|
+
throw new control_flow_syntax_error_1.ControlFlowSyntaxError('An else used outside of an if block', commandIndex);
|
|
58
|
+
}
|
|
59
|
+
if (commands_1.ControlFlowCommandChecks.isElse(state.top())) {
|
|
60
|
+
throw new control_flow_syntax_error_1.ControlFlowSyntaxError('Too many else commands used', commandIndex);
|
|
61
|
+
}
|
|
62
|
+
state.push({ command: commandName, index: commandIndex });
|
|
63
|
+
}
|
|
64
|
+
function validateElseIf(commandName, commandIndex, state) {
|
|
65
|
+
if (!commands_1.ControlFlowCommandChecks.isIfBlock(state.top())) {
|
|
66
|
+
throw new control_flow_syntax_error_1.ControlFlowSyntaxError('An else if used outside of an if block', commandIndex);
|
|
67
|
+
}
|
|
68
|
+
if (commands_1.ControlFlowCommandChecks.isElse(state.top())) {
|
|
69
|
+
throw new control_flow_syntax_error_1.ControlFlowSyntaxError('Incorrect command order of else if / else', commandIndex);
|
|
70
|
+
}
|
|
71
|
+
state.push({ command: commandName, index: commandIndex });
|
|
72
|
+
}
|
|
73
|
+
function validateEnd(commandName, commandIndex, state) {
|
|
74
|
+
if (commands_1.ControlFlowCommandChecks.isBlockOpen(state.top())) {
|
|
75
|
+
state.pop();
|
|
76
|
+
}
|
|
77
|
+
else if (commands_1.ControlFlowCommandChecks.isElseOrElseIf(state.top())) {
|
|
78
|
+
state.pop();
|
|
79
|
+
validateEnd(commandName, commandIndex, state);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
throw new control_flow_syntax_error_1.ControlFlowSyntaxError('Use of end without an opening keyword', commandIndex);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function validateRepeatIf(_commandName, commandIndex, state) {
|
|
86
|
+
if (!commands_1.ControlFlowCommandChecks.isDo(state.top())) {
|
|
87
|
+
repeatIfError(commandIndex);
|
|
88
|
+
}
|
|
89
|
+
state.pop();
|
|
90
|
+
}
|
|
91
|
+
function repeatIfError(commandIndex) {
|
|
92
|
+
throw new control_flow_syntax_error_1.ControlFlowSyntaxError('A repeat if used without a do block', commandIndex);
|
|
93
|
+
}
|
|
94
|
+
exports.repeatIfError = repeatIfError;
|
|
95
|
+
//# sourceMappingURL=syntax-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax-validation.js","sourceRoot":"","sources":["../../src/playback-tree/syntax-validation.ts"],"names":[],"mappings":"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"}
|