@applitools/eyes-cypress 3.27.9 → 3.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/bin/eyes-setup.js +21 -21
- package/index.d.ts +12 -12
- package/index.js +2 -2
- package/package.json +13 -11
- package/src/browser/commands.js +79 -84
- package/src/browser/eyesCheckMapping.js +69 -71
- package/src/browser/eyesOpenMapping.js +28 -32
- package/src/browser/makeSend.js +5 -10
- package/src/browser/refer.js +28 -28
- package/src/browser/sendRequest.js +6 -6
- package/src/browser/socket.js +72 -73
- package/src/browser/socketCommands.js +34 -45
- package/src/plugin/concurrencyMsg.js +4 -4
- package/src/plugin/config.js +16 -17
- package/src/plugin/configParams.js +3 -3
- package/src/plugin/defaultPort.js +1 -1
- package/src/plugin/errorDigest.js +27 -35
- package/src/plugin/getErrorsAndDiffs.js +11 -11
- package/src/plugin/handleTestResults.js +16 -19
- package/src/plugin/hooks.js +12 -12
- package/src/plugin/isGlobalHooksSupported.js +6 -7
- package/src/plugin/pluginExport.js +38 -43
- package/src/plugin/server.js +50 -53
- package/src/plugin/startPlugin.js +9 -9
- package/src/plugin/webSocket.js +63 -64
- package/src/setup/addEyesCommands.js +12 -12
- package/src/setup/addEyesCypressPlugin.js +6 -6
- package/src/setup/getCypressPaths.js +28 -32
- package/src/setup/getCypressVersion.js +7 -9
- package/src/setup/getFilePath.js +8 -8
- package/src/setup/handleCommands.js +11 -11
- package/src/setup/handlePlugin.js +10 -10
- package/src/setup/handleTypeScript.js +8 -8
- package/src/setup/isCommandsDefined.js +3 -3
- package/src/setup/isPluginDefined.js +3 -3
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/* global Node */
|
|
2
2
|
function eyesCheckMapValues({args, refer}) {
|
|
3
3
|
if (typeof args === `string`) {
|
|
4
|
-
args = {tag: args}
|
|
4
|
+
args = {tag: args}
|
|
5
5
|
}
|
|
6
|
-
const config = args
|
|
6
|
+
const config = args // just did it for having less git changes at this moment
|
|
7
7
|
const mappedValues = [
|
|
8
8
|
'tag',
|
|
9
9
|
'scriptHooks',
|
|
@@ -16,10 +16,10 @@ function eyesCheckMapValues({args, refer}) {
|
|
|
16
16
|
'region',
|
|
17
17
|
'selector',
|
|
18
18
|
'element',
|
|
19
|
-
]
|
|
19
|
+
]
|
|
20
20
|
|
|
21
|
-
let regionSettings = {}
|
|
22
|
-
let shadowDomSettings = {}
|
|
21
|
+
let regionSettings = {}
|
|
22
|
+
let shadowDomSettings = {}
|
|
23
23
|
const checkSettings = {
|
|
24
24
|
name: config.tag,
|
|
25
25
|
hooks: config.scriptHooks,
|
|
@@ -29,7 +29,7 @@ function eyesCheckMapValues({args, refer}) {
|
|
|
29
29
|
layoutRegions: convertPaddedRegion(config.layout),
|
|
30
30
|
contentRegions: convertPaddedRegion(config.content),
|
|
31
31
|
accessibilityRegions: convertAccessabilityRegions(config.accessibility),
|
|
32
|
-
}
|
|
32
|
+
}
|
|
33
33
|
|
|
34
34
|
if (config.target === 'region') {
|
|
35
35
|
if (!Array.isArray(config.selector)) {
|
|
@@ -37,12 +37,12 @@ function eyesCheckMapValues({args, refer}) {
|
|
|
37
37
|
if (isHTMLElement(config.element)) {
|
|
38
38
|
regionSettings = {
|
|
39
39
|
region: Object.assign(refer.ref(config.element), {type: 'element'}),
|
|
40
|
-
}
|
|
40
|
+
}
|
|
41
41
|
} else {
|
|
42
42
|
// JQuery element
|
|
43
43
|
regionSettings = {
|
|
44
44
|
region: Object.assign(refer.ref(config.element[0]), {type: 'element'}),
|
|
45
|
-
}
|
|
45
|
+
}
|
|
46
46
|
}
|
|
47
47
|
} else if (
|
|
48
48
|
config.region &&
|
|
@@ -58,114 +58,114 @@ function eyesCheckMapValues({args, refer}) {
|
|
|
58
58
|
width: config.region.width,
|
|
59
59
|
height: config.region.height,
|
|
60
60
|
},
|
|
61
|
-
}
|
|
61
|
+
}
|
|
62
62
|
} else if (!config.hasOwnProperty('selector')) {
|
|
63
63
|
regionSettings = {
|
|
64
64
|
region: config.region,
|
|
65
|
-
}
|
|
65
|
+
}
|
|
66
66
|
} else {
|
|
67
67
|
regionSettings = {
|
|
68
68
|
region: config.selector,
|
|
69
|
-
}
|
|
69
|
+
}
|
|
70
70
|
}
|
|
71
71
|
} else {
|
|
72
|
-
const selectors = config.selector
|
|
72
|
+
const selectors = config.selector
|
|
73
73
|
for (let i = selectors.length - 1; i > -1; i--) {
|
|
74
74
|
if (i === selectors.length - 1) {
|
|
75
|
-
shadowDomSettings['shadow'] = selectors[i].selector
|
|
75
|
+
shadowDomSettings['shadow'] = selectors[i].selector
|
|
76
76
|
} else {
|
|
77
|
-
const prevSettings = Object.assign({}, shadowDomSettings)
|
|
78
|
-
shadowDomSettings['selector'] = selectors[i].selector
|
|
77
|
+
const prevSettings = Object.assign({}, shadowDomSettings)
|
|
78
|
+
shadowDomSettings['selector'] = selectors[i].selector
|
|
79
79
|
if (!prevSettings.hasOwnProperty('selector')) {
|
|
80
|
-
shadowDomSettings['shadow'] = prevSettings.shadow
|
|
80
|
+
shadowDomSettings['shadow'] = prevSettings.shadow
|
|
81
81
|
} else {
|
|
82
|
-
shadowDomSettings['shadow'] = prevSettings
|
|
82
|
+
shadowDomSettings['shadow'] = prevSettings
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
|
-
regionSettings = {region: shadowDomSettings}
|
|
86
|
+
regionSettings = {region: shadowDomSettings}
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
for (const val of mappedValues) {
|
|
91
91
|
if (config.hasOwnProperty(val)) {
|
|
92
|
-
delete config[val]
|
|
92
|
+
delete config[val]
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
return Object.assign({}, checkSettings, regionSettings, config)
|
|
96
|
+
return Object.assign({}, checkSettings, regionSettings, config)
|
|
97
97
|
|
|
98
98
|
// #region helper functions
|
|
99
99
|
|
|
100
100
|
function convertPaddedRegion(regions) {
|
|
101
|
-
if (!regions) return
|
|
102
|
-
if (!Array.isArray(regions)) regions = [regions]
|
|
103
|
-
let resRegions = []
|
|
101
|
+
if (!regions) return
|
|
102
|
+
if (!Array.isArray(regions)) regions = [regions]
|
|
103
|
+
let resRegions = []
|
|
104
104
|
for (const region of regions) {
|
|
105
105
|
if (region.element || isHTMLElement(region) || region.jquery) {
|
|
106
106
|
if (region.padding || region.regionId) {
|
|
107
|
-
let currRefElements = refElements(region.element)
|
|
107
|
+
let currRefElements = refElements(region.element)
|
|
108
108
|
for (const refElement of currRefElements) {
|
|
109
|
-
let curr = {region: refElement}
|
|
109
|
+
let curr = {region: refElement}
|
|
110
110
|
if (region.padding) {
|
|
111
|
-
curr.padding = region.padding
|
|
111
|
+
curr.padding = region.padding
|
|
112
112
|
}
|
|
113
113
|
if (region.regionId) {
|
|
114
|
-
curr.regionId = region.regionId
|
|
114
|
+
curr.regionId = region.regionId
|
|
115
115
|
}
|
|
116
|
-
resRegions.push(curr)
|
|
116
|
+
resRegions.push(curr)
|
|
117
117
|
}
|
|
118
118
|
} else {
|
|
119
|
-
resRegions = [...resRegions, ...refElements(region)]
|
|
119
|
+
resRegions = [...resRegions, ...refElements(region)]
|
|
120
120
|
}
|
|
121
121
|
} else {
|
|
122
122
|
if (region.selector && !region.type) {
|
|
123
|
-
region.region = region.selector
|
|
124
|
-
delete region.selector
|
|
123
|
+
region.region = region.selector
|
|
124
|
+
delete region.selector
|
|
125
125
|
}
|
|
126
|
-
resRegions.push(region)
|
|
126
|
+
resRegions.push(region)
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
return resRegions
|
|
129
|
+
return resRegions
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
function convertAccessabilityRegions(accessibilityRegions) {
|
|
133
|
-
if (!accessibilityRegions) return accessibilityRegions
|
|
134
|
-
const accessibility = []
|
|
133
|
+
if (!accessibilityRegions) return accessibilityRegions
|
|
134
|
+
const accessibility = []
|
|
135
135
|
|
|
136
136
|
accessibilityRegions.map(region => {
|
|
137
137
|
const accessabilityRegion = {
|
|
138
138
|
type: region.accessibilityType,
|
|
139
|
-
}
|
|
139
|
+
}
|
|
140
140
|
if (region.hasOwnProperty('selector')) {
|
|
141
|
-
accessabilityRegion.region = region.selector
|
|
142
|
-
accessibility.push(accessabilityRegion)
|
|
141
|
+
accessabilityRegion.region = region.selector
|
|
142
|
+
accessibility.push(accessabilityRegion)
|
|
143
143
|
} else if (region.hasOwnProperty('element')) {
|
|
144
|
-
const elements = refElements(region.element)
|
|
144
|
+
const elements = refElements(region.element)
|
|
145
145
|
for (const element of elements) {
|
|
146
|
-
accessibility.push(Object.assign({}, accessabilityRegion, {region: element}))
|
|
146
|
+
accessibility.push(Object.assign({}, accessabilityRegion, {region: element}))
|
|
147
147
|
}
|
|
148
148
|
} else if (region.hasOwnProperty('region')) {
|
|
149
|
-
region.type = region.region.accessibilityType
|
|
150
|
-
delete region.region.accessibilityType
|
|
151
|
-
accessibility.push(region)
|
|
149
|
+
region.type = region.region.accessibilityType
|
|
150
|
+
delete region.region.accessibilityType
|
|
151
|
+
accessibility.push(region)
|
|
152
152
|
} else {
|
|
153
153
|
accessabilityRegion.region = {
|
|
154
154
|
y: region.top,
|
|
155
155
|
x: region.left,
|
|
156
156
|
width: region.width,
|
|
157
157
|
height: region.height,
|
|
158
|
-
}
|
|
159
|
-
accessibility.push(accessabilityRegion)
|
|
158
|
+
}
|
|
159
|
+
accessibility.push(accessabilityRegion)
|
|
160
160
|
}
|
|
161
|
-
})
|
|
161
|
+
})
|
|
162
162
|
|
|
163
|
-
return accessibility
|
|
163
|
+
return accessibility
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
function convertFloatingRegion(floatingRegions) {
|
|
167
|
-
if (!floatingRegions) return floatingRegions
|
|
168
|
-
const floating = []
|
|
167
|
+
if (!floatingRegions) return floatingRegions
|
|
168
|
+
const floating = []
|
|
169
169
|
|
|
170
170
|
for (const region of floatingRegions) {
|
|
171
171
|
const floatingRegion = {
|
|
@@ -173,49 +173,47 @@ function eyesCheckMapValues({args, refer}) {
|
|
|
173
173
|
maxLeftOffset: region.maxLeftOffset || 0,
|
|
174
174
|
maxUpOffset: region.maxUpOffset || 0,
|
|
175
175
|
maxRightOffset: region.maxRightOffset || 0,
|
|
176
|
-
}
|
|
176
|
+
}
|
|
177
177
|
if (region.hasOwnProperty('selector')) {
|
|
178
|
-
floatingRegion.region = region.selector
|
|
179
|
-
floating.push(floatingRegion)
|
|
178
|
+
floatingRegion.region = region.selector
|
|
179
|
+
floating.push(floatingRegion)
|
|
180
180
|
} else if (region.hasOwnProperty('element')) {
|
|
181
|
-
const elements = refElements(region.element)
|
|
181
|
+
const elements = refElements(region.element)
|
|
182
182
|
for (const element of elements) {
|
|
183
|
-
floating.push(Object.assign({}, floatingRegion, {region: element}))
|
|
183
|
+
floating.push(Object.assign({}, floatingRegion, {region: element}))
|
|
184
184
|
}
|
|
185
185
|
} else if (region.hasOwnProperty('region')) {
|
|
186
|
-
floating.push(region)
|
|
186
|
+
floating.push(region)
|
|
187
187
|
} else {
|
|
188
188
|
floatingRegion.region = {
|
|
189
189
|
y: region.top,
|
|
190
190
|
x: region.left,
|
|
191
191
|
width: region.width,
|
|
192
192
|
height: region.height,
|
|
193
|
-
}
|
|
194
|
-
floating.push(floatingRegion)
|
|
193
|
+
}
|
|
194
|
+
floating.push(floatingRegion)
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
|
-
return floating
|
|
197
|
+
return floating
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
function refElements(regions) {
|
|
201
|
-
if (!regions) return regions
|
|
202
|
-
if (!Array.isArray(regions)) regions = [regions]
|
|
203
|
-
const elements = []
|
|
201
|
+
if (!regions) return regions
|
|
202
|
+
if (!Array.isArray(regions)) regions = [regions]
|
|
203
|
+
const elements = []
|
|
204
204
|
for (const region of regions) {
|
|
205
205
|
if (isHTMLElement(region)) {
|
|
206
|
-
elements.push(Object.assign(refer.ref(region), {type: 'element'}))
|
|
206
|
+
elements.push(Object.assign(refer.ref(region), {type: 'element'}))
|
|
207
207
|
} else if (region.jquery) {
|
|
208
|
-
region.each(function() {
|
|
208
|
+
region.each(function () {
|
|
209
209
|
// there's a small chance that `this` is not an HTML element. So we just verify it.
|
|
210
|
-
elements.push(
|
|
211
|
-
|
|
212
|
-
);
|
|
213
|
-
});
|
|
210
|
+
elements.push(isHTMLElement(this) ? Object.assign(refer.ref(this), {type: 'element'}) : this)
|
|
211
|
+
})
|
|
214
212
|
} else {
|
|
215
|
-
elements.push(region)
|
|
213
|
+
elements.push(region)
|
|
216
214
|
}
|
|
217
215
|
}
|
|
218
|
-
return elements
|
|
216
|
+
return elements
|
|
219
217
|
}
|
|
220
218
|
|
|
221
219
|
// #endregion
|
|
@@ -224,7 +222,7 @@ function eyesCheckMapValues({args, refer}) {
|
|
|
224
222
|
function isHTMLElement(element) {
|
|
225
223
|
// Avoiding instanceof here since the element might come from an iframe, and `instanceof HTMLElement` would fail.
|
|
226
224
|
// This check looks naive, but if anyone passes something like {nodeType: 1} as a region, then I'm fine with them crashing :)
|
|
227
|
-
return element.nodeType && element.nodeType === Node.ELEMENT_NODE
|
|
225
|
+
return element.nodeType && element.nodeType === Node.ELEMENT_NODE
|
|
228
226
|
}
|
|
229
227
|
|
|
230
|
-
module.exports = {eyesCheckMapValues}
|
|
228
|
+
module.exports = {eyesCheckMapValues}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
const batchPropertiesRetriever = (args, appliConfFile) => {
|
|
2
|
-
return function(prop, nestedProp) {
|
|
3
|
-
nestedProp = nestedProp || prop
|
|
2
|
+
return function (prop, nestedProp) {
|
|
3
|
+
nestedProp = nestedProp || prop
|
|
4
4
|
if (args.hasOwnProperty(prop)) {
|
|
5
|
-
return args[prop]
|
|
5
|
+
return args[prop]
|
|
6
6
|
} else if (args.batch && args.batch.hasOwnProperty(nestedProp)) {
|
|
7
|
-
return args.batch[nestedProp]
|
|
7
|
+
return args.batch[nestedProp]
|
|
8
8
|
} else if (appliConfFile.hasOwnProperty(prop)) {
|
|
9
|
-
return appliConfFile[prop]
|
|
9
|
+
return appliConfFile[prop]
|
|
10
10
|
} else if (appliConfFile.batch && appliConfFile.batch.hasOwnProperty(nestedProp)) {
|
|
11
|
-
return appliConfFile.batch[nestedProp]
|
|
11
|
+
return appliConfFile.batch[nestedProp]
|
|
12
12
|
}
|
|
13
|
-
return undefined
|
|
14
|
-
}
|
|
15
|
-
}
|
|
13
|
+
return undefined
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
16
|
function eyesOpenMapValues({args, appliConfFile, testName, shouldUseBrowserHooks}) {
|
|
17
|
-
let browsersInfo = args.browser || appliConfFile.browser
|
|
18
|
-
let accessibilitySettings = args.accessibilityValidation || appliConfFile.accessibilityValidation
|
|
19
|
-
const batchProperties = batchPropertiesRetriever(args, appliConfFile)
|
|
17
|
+
let browsersInfo = args.browser || appliConfFile.browser
|
|
18
|
+
let accessibilitySettings = args.accessibilityValidation || appliConfFile.accessibilityValidation
|
|
19
|
+
const batchProperties = batchPropertiesRetriever(args, appliConfFile)
|
|
20
20
|
const batch = {
|
|
21
21
|
id: batchProperties('batchId', 'id'),
|
|
22
22
|
name: batchProperties('batchName', 'name'),
|
|
@@ -25,10 +25,10 @@ function eyesOpenMapValues({args, appliConfFile, testName, shouldUseBrowserHooks
|
|
|
25
25
|
properties:
|
|
26
26
|
(args.batch ? args.batch.properties : undefined) ||
|
|
27
27
|
(appliConfFile.batch ? appliConfFile.batch.properties : undefined),
|
|
28
|
-
}
|
|
28
|
+
}
|
|
29
29
|
for (let prop in batch) {
|
|
30
30
|
if (typeof batch[prop] === 'undefined') {
|
|
31
|
-
delete batch[prop]
|
|
31
|
+
delete batch[prop]
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -43,15 +43,15 @@ function eyesOpenMapValues({args, appliConfFile, testName, shouldUseBrowserHooks
|
|
|
43
43
|
'batchName',
|
|
44
44
|
'batchId',
|
|
45
45
|
'batchSequenceName',
|
|
46
|
-
]
|
|
46
|
+
]
|
|
47
47
|
|
|
48
48
|
if (browsersInfo) {
|
|
49
49
|
if (Array.isArray(browsersInfo)) {
|
|
50
50
|
for (const [index, value] of browsersInfo.entries()) {
|
|
51
|
-
browsersInfo[index] = fillDefaultBrowserName(value)
|
|
51
|
+
browsersInfo[index] = fillDefaultBrowserName(value)
|
|
52
52
|
}
|
|
53
53
|
} else {
|
|
54
|
-
browsersInfo = [fillDefaultBrowserName(browsersInfo)]
|
|
54
|
+
browsersInfo = [fillDefaultBrowserName(browsersInfo)]
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -62,15 +62,15 @@ function eyesOpenMapValues({args, appliConfFile, testName, shouldUseBrowserHooks
|
|
|
62
62
|
useDom: args.useDom || appliConfFile.useDom,
|
|
63
63
|
enablePatterns: args.enablePatterns || appliConfFile.enablePatterns,
|
|
64
64
|
ignoreDisplacements: args.ignoreDisplacements || appliConfFile.ignoreDisplacements,
|
|
65
|
-
}
|
|
65
|
+
}
|
|
66
66
|
|
|
67
|
-
const appliConfFileCopy = {...appliConfFile}
|
|
67
|
+
const appliConfFileCopy = {...appliConfFile}
|
|
68
68
|
for (const val of mappedValues) {
|
|
69
69
|
if (args.hasOwnProperty(val)) {
|
|
70
|
-
delete args[val]
|
|
70
|
+
delete args[val]
|
|
71
71
|
}
|
|
72
72
|
if (appliConfFileCopy.hasOwnProperty(val)) {
|
|
73
|
-
delete appliConfFileCopy[val]
|
|
73
|
+
delete appliConfFileCopy[val]
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
|
|
@@ -79,27 +79,23 @@ function eyesOpenMapValues({args, appliConfFile, testName, shouldUseBrowserHooks
|
|
|
79
79
|
browsersInfo,
|
|
80
80
|
defaultMatchSettings,
|
|
81
81
|
batch,
|
|
82
|
-
}
|
|
82
|
+
}
|
|
83
83
|
|
|
84
|
-
return Object.assign(
|
|
85
|
-
{testName, dontCloseBatches: !shouldUseBrowserHooks},
|
|
86
|
-
appliConfFileCopy,
|
|
87
|
-
mappedArgs,
|
|
88
|
-
);
|
|
84
|
+
return Object.assign({testName, dontCloseBatches: !shouldUseBrowserHooks}, appliConfFileCopy, mappedArgs)
|
|
89
85
|
}
|
|
90
86
|
|
|
91
87
|
function fillDefaultBrowserName(browser) {
|
|
92
88
|
if (!browser.iosDeviceInfo && !browser.chromeEmulationInfo) {
|
|
93
89
|
if (!browser.name) {
|
|
94
|
-
browser.name = 'chrome'
|
|
90
|
+
browser.name = 'chrome'
|
|
95
91
|
}
|
|
96
92
|
if (browser.deviceName) {
|
|
97
|
-
browser = {chromeEmulationInfo: browser}
|
|
93
|
+
browser = {chromeEmulationInfo: browser}
|
|
98
94
|
}
|
|
99
|
-
return browser
|
|
95
|
+
return browser
|
|
100
96
|
} else {
|
|
101
|
-
return browser
|
|
97
|
+
return browser
|
|
102
98
|
}
|
|
103
99
|
}
|
|
104
100
|
|
|
105
|
-
module.exports = {eyesOpenMapValues}
|
|
101
|
+
module.exports = {eyesOpenMapValues}
|
package/src/browser/makeSend.js
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
'use strict'
|
|
1
|
+
'use strict'
|
|
2
2
|
|
|
3
3
|
function makeSend(port, fetch) {
|
|
4
|
-
return function send({
|
|
5
|
-
command,
|
|
6
|
-
data,
|
|
7
|
-
method = 'POST',
|
|
8
|
-
headers = {'Content-Type': 'application/json'},
|
|
9
|
-
}) {
|
|
4
|
+
return function send({command, data, method = 'POST', headers = {'Content-Type': 'application/json'}}) {
|
|
10
5
|
return fetch(`https://localhost:${port}/eyes/${command}`, {
|
|
11
6
|
method,
|
|
12
7
|
body: headers['Content-Type'] === 'application/json' ? JSON.stringify(data) : data,
|
|
13
8
|
headers,
|
|
14
|
-
})
|
|
15
|
-
}
|
|
9
|
+
})
|
|
10
|
+
}
|
|
16
11
|
}
|
|
17
12
|
|
|
18
|
-
module.exports = makeSend
|
|
13
|
+
module.exports = makeSend
|
package/src/browser/refer.js
CHANGED
|
@@ -1,70 +1,70 @@
|
|
|
1
1
|
/* global Node */
|
|
2
2
|
|
|
3
|
-
const uuid = require('uuid')
|
|
4
|
-
const REF_ID = 'applitools-ref-id'
|
|
3
|
+
const uuid = require('uuid')
|
|
4
|
+
const REF_ID = 'applitools-ref-id'
|
|
5
5
|
|
|
6
6
|
class Refer {
|
|
7
7
|
constructor() {
|
|
8
|
-
this.store = new Map()
|
|
9
|
-
this.relation = new Map()
|
|
8
|
+
this.store = new Map()
|
|
9
|
+
this.relation = new Map()
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
isRef(ref) {
|
|
13
|
-
return Boolean(ref && ref[REF_ID])
|
|
13
|
+
return Boolean(ref && ref[REF_ID])
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
check(value) {
|
|
17
|
-
if (!value) return
|
|
17
|
+
if (!value) return
|
|
18
18
|
if (value.nodeType === Node.ELEMENT_NODE) {
|
|
19
|
-
return 'element'
|
|
19
|
+
return 'element'
|
|
20
20
|
} else if (value.nodeType === Node.DOCUMENT_NODE || value.ownerDocument) {
|
|
21
|
-
return 'context'
|
|
21
|
+
return 'context'
|
|
22
22
|
} else if (value.constructor && value.constructor.name === 'Window') {
|
|
23
|
-
return 'driver'
|
|
23
|
+
return 'driver'
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
ref(value, parentRef) {
|
|
28
|
-
const refType = this.check(value)
|
|
28
|
+
const refType = this.check(value)
|
|
29
29
|
if (refType) {
|
|
30
|
-
const ref = uuid.v4()
|
|
31
|
-
this.store.set(ref, value)
|
|
30
|
+
const ref = uuid.v4()
|
|
31
|
+
this.store.set(ref, value)
|
|
32
32
|
if (parentRef) {
|
|
33
|
-
let childRefs = this.relation.get(parentRef[REF_ID])
|
|
33
|
+
let childRefs = this.relation.get(parentRef[REF_ID])
|
|
34
34
|
if (!childRefs) {
|
|
35
|
-
childRefs = new Set()
|
|
36
|
-
this.relation.set(parentRef[REF_ID], childRefs)
|
|
35
|
+
childRefs = new Set()
|
|
36
|
+
this.relation.set(parentRef[REF_ID], childRefs)
|
|
37
37
|
}
|
|
38
|
-
childRefs.add({[REF_ID]: ref})
|
|
38
|
+
childRefs.add({[REF_ID]: ref})
|
|
39
39
|
}
|
|
40
|
-
return {[REF_ID]: ref, type: refType}
|
|
40
|
+
return {[REF_ID]: ref, type: refType}
|
|
41
41
|
} else if (Array.isArray(value)) {
|
|
42
|
-
return value.map(value => this.ref(value, parentRef))
|
|
42
|
+
return value.map(value => this.ref(value, parentRef))
|
|
43
43
|
} else if (typeof value === 'object' && value !== null) {
|
|
44
44
|
return Object.entries(value).reduce((obj, [key, value]) => {
|
|
45
|
-
return Object.assign(obj, {[key]: this.ref(value, parentRef)})
|
|
46
|
-
}, {})
|
|
45
|
+
return Object.assign(obj, {[key]: this.ref(value, parentRef)})
|
|
46
|
+
}, {})
|
|
47
47
|
} else {
|
|
48
|
-
return value
|
|
48
|
+
return value
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
deref(ref) {
|
|
53
53
|
if (this.isRef(ref)) {
|
|
54
|
-
return this.store.get(ref[REF_ID])
|
|
54
|
+
return this.store.get(ref[REF_ID])
|
|
55
55
|
} else {
|
|
56
|
-
return ref
|
|
56
|
+
return ref
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
destroy(ref) {
|
|
61
|
-
if (!this.isRef(ref)) return
|
|
62
|
-
const childRefs = this.relation.get(ref[REF_ID])
|
|
61
|
+
if (!this.isRef(ref)) return
|
|
62
|
+
const childRefs = this.relation.get(ref[REF_ID])
|
|
63
63
|
if (childRefs) {
|
|
64
|
-
childRefs.forEach(childRef => this.destroy(childRef))
|
|
64
|
+
childRefs.forEach(childRef => this.destroy(childRef))
|
|
65
65
|
}
|
|
66
|
-
this.store.delete(ref[REF_ID])
|
|
66
|
+
this.store.delete(ref[REF_ID])
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
module.exports = Refer
|
|
70
|
+
module.exports = Refer
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict'
|
|
1
|
+
'use strict'
|
|
2
2
|
|
|
3
3
|
function makeSendRequest(send) {
|
|
4
4
|
return function sendRequest(args) {
|
|
@@ -6,11 +6,11 @@ function makeSendRequest(send) {
|
|
|
6
6
|
.then(resp => resp.json())
|
|
7
7
|
.then(body => {
|
|
8
8
|
if (!body.success) {
|
|
9
|
-
throw new Error(body.error)
|
|
9
|
+
throw new Error(body.error)
|
|
10
10
|
}
|
|
11
|
-
return body.result
|
|
12
|
-
})
|
|
13
|
-
}
|
|
11
|
+
return body.result
|
|
12
|
+
})
|
|
13
|
+
}
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
module.exports = makeSendRequest
|
|
16
|
+
module.exports = makeSendRequest
|