@percy/sdk-utils 1.1.0 → 1.1.3
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/bundle.js +129 -445
- package/dist/index.js +72 -10
- package/dist/logger.js +140 -0
- package/dist/percy-dom.js +22 -8
- package/dist/percy-enabled.js +33 -37
- package/dist/percy-idle.js +18 -4
- package/dist/percy-info.js +9 -1
- package/dist/post-snapshot.js +21 -7
- package/dist/request.js +21 -5
- package/package.json +3 -13
- package/test/client.js +99 -153
- package/test/helpers.js +90 -8
- package/test/server.js +13 -16
package/test/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(function() {
|
|
2
2
|
this["null"] = this["null"] || {};
|
|
3
|
-
this.PercySDKUtils.TestHelpers = (function (
|
|
3
|
+
this.PercySDKUtils.TestHelpers = (function (require$$0) {
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
6
|
const process = (typeof globalThis !== "undefined" && globalThis.process) || {};
|
|
@@ -11,180 +11,73 @@
|
|
|
11
11
|
|
|
12
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
var utils__default = /*#__PURE__*/_interopDefaultLegacy(utils);
|
|
14
|
+
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
|
|
16
15
|
|
|
17
|
-
const
|
|
18
|
-
assign,
|
|
19
|
-
entries
|
|
20
|
-
} = Object; // matches ansi escape sequences
|
|
16
|
+
const utils = require$$0__default["default"];
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const ANSI_COLORS = {
|
|
25
|
-
'91m': 'red',
|
|
26
|
-
'32m': 'green',
|
|
27
|
-
'93m': 'yellow',
|
|
28
|
-
'34m': 'blue',
|
|
29
|
-
'95m': 'magenta',
|
|
30
|
-
'90m': 'grey'
|
|
31
|
-
}; // colorize each line of a string using an ansi escape sequence
|
|
32
|
-
|
|
33
|
-
const LINE_REG = /^.*$/gm;
|
|
34
|
-
|
|
35
|
-
function colorize(code, str) {
|
|
36
|
-
return str.replace(LINE_REG, line => `\u001b[${code}${line}\u001b[39m`);
|
|
37
|
-
} // map ansi colors to bound colorize functions
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
entries(ANSI_COLORS).reduce((colors, _ref) => {
|
|
41
|
-
let [code, name] = _ref;
|
|
42
|
-
return assign(colors, {
|
|
43
|
-
[name]: colorize.bind(null, code)
|
|
44
|
-
});
|
|
45
|
-
}, {});
|
|
46
|
-
|
|
47
|
-
const ELAPSED_REG = /\s\S*?\(\d+ms\)\S*/;
|
|
48
|
-
const NEWLINE_REG = /\r\n/g;
|
|
49
|
-
const LASTLINE_REG = /\n$/;
|
|
50
|
-
|
|
51
|
-
function sanitizeLog(str) {
|
|
52
|
-
let {
|
|
53
|
-
ansi,
|
|
54
|
-
elapsed
|
|
55
|
-
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
56
|
-
// normalize line endings
|
|
57
|
-
str = str.replace(NEWLINE_REG, '\n'); // strip ansi colors
|
|
58
|
-
|
|
59
|
-
if (!ansi) str = str.replace(ANSI_REG, ''); // strip elapsed time
|
|
60
|
-
|
|
61
|
-
if (!elapsed) str = str.replace(ELAPSED_REG, ''); // strip trailing line endings
|
|
62
|
-
|
|
63
|
-
return str.replace(LASTLINE_REG, '');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function spy(object, method, func) {
|
|
18
|
+
function stub(object, method, func) {
|
|
67
19
|
if (object[method].restore) object[method].restore();
|
|
68
|
-
let
|
|
20
|
+
let stub = object[method] = Object.assign(function stub() {
|
|
69
21
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
70
22
|
args[_key] = arguments[_key];
|
|
71
23
|
}
|
|
72
24
|
|
|
73
|
-
|
|
25
|
+
stub.calls.push(args);
|
|
74
26
|
if (func) return func.apply(this, args);
|
|
75
27
|
}, {
|
|
76
|
-
restore: () => object[method] =
|
|
77
|
-
reset: () => (
|
|
28
|
+
restore: () => object[method] = stub.originalValue,
|
|
29
|
+
reset: () => (stub.calls.length = 0) || stub,
|
|
78
30
|
originalValue: object[method],
|
|
79
31
|
calls: []
|
|
80
32
|
});
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const {
|
|
86
|
-
Logger,
|
|
87
|
-
loglevel
|
|
88
|
-
} = logger__default["default"];
|
|
89
|
-
const helpers$1 = {
|
|
90
|
-
stdout: [],
|
|
91
|
-
stderr: [],
|
|
92
|
-
loglevel,
|
|
93
|
-
|
|
94
|
-
async mock() {
|
|
95
|
-
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
96
|
-
helpers$1.reset();
|
|
97
|
-
|
|
98
|
-
if (options.level) {
|
|
99
|
-
loglevel(options.level);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
if (process.env.__PERCY_BROWSERIFIED__) {
|
|
103
|
-
spy(Logger.prototype, 'write', function (lvl, msg) {
|
|
104
|
-
let stdio = lvl === 'info' ? 'stdout' : 'stderr';
|
|
105
|
-
helpers$1[stdio].push(sanitizeLog(msg, options));
|
|
106
|
-
return this.write.originalValue.call(this, lvl, msg);
|
|
107
|
-
});
|
|
108
|
-
spy(console, 'log');
|
|
109
|
-
spy(console, 'warn');
|
|
110
|
-
spy(console, 'error');
|
|
111
|
-
} else {
|
|
112
|
-
let {
|
|
113
|
-
Writable
|
|
114
|
-
} = await import('stream');
|
|
33
|
+
return stub;
|
|
34
|
+
} // matches ansi escape sequences
|
|
115
35
|
|
|
116
|
-
for (let stdio of ['stdout', 'stderr']) {
|
|
117
|
-
Logger[stdio] = Object.assign(new Writable(), {
|
|
118
|
-
columns: options.isTTY ? 100 : null,
|
|
119
|
-
isTTY: options.isTTY,
|
|
120
36
|
|
|
121
|
-
|
|
37
|
+
const ANSI_REG = new RegExp('[\\u001B\\u009B][[\\]()#;?]*((?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)' + '|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))', 'g'); // strips a log message of excessive newlines and asni escape sequences
|
|
122
38
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
helpers$1[stdio].push(sanitizeLog(chunk.toString(), options));
|
|
127
|
-
callback();
|
|
128
|
-
}
|
|
39
|
+
function sanitizeLog(str) {
|
|
40
|
+
return str.replace(/\r\n/g, '\n').replace(ANSI_REG, '').replace(/\n$/, '');
|
|
41
|
+
}
|
|
129
42
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
43
|
+
const helpers = {
|
|
44
|
+
async setup() {
|
|
45
|
+
utils.percy.version = '';
|
|
46
|
+
delete utils.percy.config;
|
|
47
|
+
delete utils.percy.enabled;
|
|
48
|
+
delete utils.percy.domScript;
|
|
49
|
+
delete process.env.PERCY_SERVER_ADDRESS;
|
|
50
|
+
await helpers.call('server.mock');
|
|
51
|
+
await helpers.logger.mock();
|
|
133
52
|
},
|
|
134
53
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
helpers$1.stdout.length = 0;
|
|
138
|
-
helpers$1.stderr.length = 0;
|
|
54
|
+
async teardown() {
|
|
55
|
+
var _utils$logger$log$res, _utils$logger$log;
|
|
139
56
|
|
|
140
|
-
|
|
141
|
-
console.log.reset();
|
|
142
|
-
console.warn.reset();
|
|
143
|
-
console.error.reset();
|
|
144
|
-
}
|
|
145
|
-
},
|
|
57
|
+
(_utils$logger$log$res = (_utils$logger$log = utils.logger.log).restore) === null || _utils$logger$log$res === void 0 ? void 0 : _utils$logger$log$res.call(_utils$logger$log);
|
|
146
58
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
let log = m => process.env.__PERCY_BROWSERIFIED__ ? console.log.and ? console.log.and.originalFn(m) : console.log(m) : process.stderr.write(`${m}\n`);
|
|
152
|
-
|
|
153
|
-
logger__default["default"].loglevel('debug');
|
|
154
|
-
log(logger__default["default"].format('testing', 'warn', '--- DUMPING LOGS ---'));
|
|
155
|
-
msgs.reduce((last, _ref) => {
|
|
156
|
-
let {
|
|
157
|
-
debug,
|
|
158
|
-
level,
|
|
159
|
-
message,
|
|
160
|
-
timestamp
|
|
161
|
-
} = _ref;
|
|
162
|
-
log(logger__default["default"].format(debug, level, message, timestamp - last));
|
|
163
|
-
return timestamp;
|
|
164
|
-
}, msgs[0].timestamp);
|
|
165
|
-
}
|
|
59
|
+
if (process.env.__PERCY_BROWSERIFIED__) {
|
|
60
|
+
for (let m of ['warn', 'error', 'log']) {
|
|
61
|
+
var _console$m$restore, _console$m;
|
|
166
62
|
|
|
167
|
-
|
|
63
|
+
(_console$m$restore = (_console$m = console[m]).restore) === null || _console$m$restore === void 0 ? void 0 : _console$m$restore.call(_console$m);
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
for (let io of ['stdout', 'stderr']) {
|
|
67
|
+
var _process$io$write$res, _process$io$write;
|
|
168
68
|
|
|
169
|
-
|
|
170
|
-
|
|
69
|
+
(_process$io$write$res = (_process$io$write = process[io].write).restore) === null || _process$io$write$res === void 0 ? void 0 : _process$io$write$res.call(_process$io$write);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
171
72
|
|
|
172
|
-
|
|
173
|
-
utils__default["default"].percy.version = '';
|
|
174
|
-
delete utils__default["default"].percy.config;
|
|
175
|
-
delete utils__default["default"].percy.enabled;
|
|
176
|
-
delete utils__default["default"].percy.domScript;
|
|
177
|
-
delete process.env.PERCY_SERVER_ADDRESS;
|
|
178
|
-
await helpers.call('server.mock');
|
|
179
|
-
await helpers$1.mock();
|
|
73
|
+
return helpers.call('server.close');
|
|
180
74
|
},
|
|
181
75
|
|
|
182
|
-
teardown: () => helpers.call('server.close'),
|
|
183
76
|
getRequests: () => helpers.call('server.requests'),
|
|
184
77
|
testReply: (path, reply) => helpers.call('server.reply', path, reply),
|
|
185
78
|
testFailure: function () {
|
|
186
|
-
for (var
|
|
187
|
-
args[
|
|
79
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
80
|
+
args[_key2] = arguments[_key2];
|
|
188
81
|
}
|
|
189
82
|
|
|
190
83
|
return helpers.call('server.test.failure', ...args);
|
|
@@ -194,13 +87,64 @@
|
|
|
194
87
|
: helpers.call('server.test.serialize', fn),
|
|
195
88
|
// set
|
|
196
89
|
mockSite: () => helpers.call('site.mock'),
|
|
197
|
-
closeSite: () => helpers.call('site.close')
|
|
90
|
+
closeSite: () => helpers.call('site.close'),
|
|
91
|
+
logger: {
|
|
92
|
+
stdout: [],
|
|
93
|
+
stderr: [],
|
|
94
|
+
loglevel: utils.logger.loglevel,
|
|
95
|
+
|
|
96
|
+
async mock() {
|
|
97
|
+
helpers.logger.reset();
|
|
98
|
+
let shouldCaptureLogs = false;
|
|
99
|
+
stub(utils.logger, 'log', function () {
|
|
100
|
+
shouldCaptureLogs = true;
|
|
101
|
+
utils.logger.log.originalValue(...arguments);
|
|
102
|
+
shouldCaptureLogs = false;
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
let stubLogs = (ctx, method, err) => stub(ctx, method, msg => {
|
|
106
|
+
if (!shouldCaptureLogs) return ctx[method].originalValue.call(ctx, msg);else helpers.logger[err ? 'stderr' : 'stdout'].push(sanitizeLog(msg));
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
if (process.env.__PERCY_BROWSERIFIED__) {
|
|
110
|
+
for (let m of ['warn', 'error', 'log']) stubLogs(console, m, m !== 'log');
|
|
111
|
+
} else {
|
|
112
|
+
for (let io of ['stdout', 'stderr']) stubLogs(process[io], 'write', io === 'stderr');
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
reset() {
|
|
117
|
+
var _utils$logger$remote$, _utils$logger$log$res2, _utils$logger$log2;
|
|
118
|
+
|
|
119
|
+
(_utils$logger$remote$ = utils.logger.remote.socket) === null || _utils$logger$remote$ === void 0 ? void 0 : _utils$logger$remote$.close();
|
|
120
|
+
delete utils.logger.loglevel.lvl;
|
|
121
|
+
delete utils.logger.log.history;
|
|
122
|
+
helpers.logger.stdout.length = 0;
|
|
123
|
+
helpers.logger.stderr.length = 0;
|
|
124
|
+
(_utils$logger$log$res2 = (_utils$logger$log2 = utils.logger.log).reset) === null || _utils$logger$log$res2 === void 0 ? void 0 : _utils$logger$log$res2.call(_utils$logger$log2);
|
|
125
|
+
|
|
126
|
+
if (process.env.__PERCY_BROWSERIFIED__) {
|
|
127
|
+
for (let m of ['warn', 'error', 'log']) {
|
|
128
|
+
var _console$m$reset, _console$m2;
|
|
129
|
+
|
|
130
|
+
(_console$m$reset = (_console$m2 = console[m]).reset) === null || _console$m$reset === void 0 ? void 0 : _console$m$reset.call(_console$m2);
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
for (let io of ['stdout', 'stderr']) {
|
|
134
|
+
var _process$io$write$res2, _process$io$write2;
|
|
135
|
+
|
|
136
|
+
(_process$io$write$res2 = (_process$io$write2 = process[io].write).reset) === null || _process$io$write$res2 === void 0 ? void 0 : _process$io$write$res2.call(_process$io$write2);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
}
|
|
198
142
|
};
|
|
199
143
|
|
|
200
144
|
if (process.env.__PERCY_BROWSERIFIED__) {
|
|
201
145
|
helpers.call = async function call(event) {
|
|
202
|
-
for (var
|
|
203
|
-
args[
|
|
146
|
+
for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
|
|
147
|
+
args[_key3 - 1] = arguments[_key3];
|
|
204
148
|
}
|
|
205
149
|
|
|
206
150
|
let {
|
|
@@ -264,15 +208,17 @@
|
|
|
264
208
|
helpers.call = async function call() {
|
|
265
209
|
let {
|
|
266
210
|
context
|
|
267
|
-
} = await
|
|
211
|
+
} = await ({});
|
|
268
212
|
helpers.context = helpers.context || (await context());
|
|
269
213
|
return helpers.context.call(...arguments);
|
|
270
214
|
};
|
|
271
215
|
}
|
|
272
216
|
|
|
273
|
-
|
|
217
|
+
var helpers_1 = helpers;
|
|
218
|
+
|
|
219
|
+
return helpers_1;
|
|
274
220
|
|
|
275
|
-
})(PercySDKUtils
|
|
221
|
+
})(PercySDKUtils);
|
|
276
222
|
}).call(window);
|
|
277
223
|
|
|
278
224
|
if (typeof define === "function" && define.amd) {
|
package/test/helpers.js
CHANGED
|
@@ -1,9 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
import utils from '@percy/sdk-utils';
|
|
1
|
+
const utils = require('@percy/sdk-utils');
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
function stub(object, method, func) {
|
|
4
|
+
if (object[method].restore) object[method].restore();
|
|
6
5
|
|
|
6
|
+
let stub = object[method] = Object.assign(function stub(...args) {
|
|
7
|
+
stub.calls.push(args);
|
|
8
|
+
if (func) return func.apply(this, args);
|
|
9
|
+
}, {
|
|
10
|
+
restore: () => (object[method] = stub.originalValue),
|
|
11
|
+
reset: () => (stub.calls.length = 0) || stub,
|
|
12
|
+
originalValue: object[method],
|
|
13
|
+
calls: []
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
return stub;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// matches ansi escape sequences
|
|
20
|
+
const ANSI_REG = new RegExp((
|
|
21
|
+
'[\\u001B\\u009B][[\\]()#;?]*((?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)' +
|
|
22
|
+
'|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
|
|
23
|
+
), 'g');
|
|
24
|
+
|
|
25
|
+
// strips a log message of excessive newlines and asni escape sequences
|
|
26
|
+
function sanitizeLog(str) {
|
|
27
|
+
return str.replace(/\r\n/g, '\n')
|
|
28
|
+
.replace(ANSI_REG, '')
|
|
29
|
+
.replace(/\n$/, '');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const helpers = {
|
|
7
33
|
async setup() {
|
|
8
34
|
utils.percy.version = '';
|
|
9
35
|
delete utils.percy.config;
|
|
@@ -11,10 +37,21 @@ export const helpers = {
|
|
|
11
37
|
delete utils.percy.domScript;
|
|
12
38
|
delete process.env.PERCY_SERVER_ADDRESS;
|
|
13
39
|
await helpers.call('server.mock');
|
|
14
|
-
await logger.mock();
|
|
40
|
+
await helpers.logger.mock();
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
async teardown() {
|
|
44
|
+
utils.logger.log.restore?.();
|
|
45
|
+
|
|
46
|
+
if (process.env.__PERCY_BROWSERIFIED__) {
|
|
47
|
+
for (let m of ['warn', 'error', 'log']) console[m].restore?.();
|
|
48
|
+
} else {
|
|
49
|
+
for (let io of ['stdout', 'stderr']) process[io].write.restore?.();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return helpers.call('server.close');
|
|
15
53
|
},
|
|
16
54
|
|
|
17
|
-
teardown: () => helpers.call('server.close'),
|
|
18
55
|
getRequests: () => helpers.call('server.requests'),
|
|
19
56
|
testReply: (path, reply) => helpers.call('server.reply', path, reply),
|
|
20
57
|
testFailure: (...args) => helpers.call('server.test.failure', ...args),
|
|
@@ -23,7 +60,52 @@ export const helpers = {
|
|
|
23
60
|
? helpers.call('server.test.serialize') // get
|
|
24
61
|
: helpers.call('server.test.serialize', fn), // set
|
|
25
62
|
mockSite: () => helpers.call('site.mock'),
|
|
26
|
-
closeSite: () => helpers.call('site.close')
|
|
63
|
+
closeSite: () => helpers.call('site.close'),
|
|
64
|
+
|
|
65
|
+
logger: {
|
|
66
|
+
stdout: [],
|
|
67
|
+
stderr: [],
|
|
68
|
+
loglevel: utils.logger.loglevel,
|
|
69
|
+
|
|
70
|
+
async mock() {
|
|
71
|
+
helpers.logger.reset();
|
|
72
|
+
|
|
73
|
+
let shouldCaptureLogs = false;
|
|
74
|
+
|
|
75
|
+
stub(utils.logger, 'log', (...args) => {
|
|
76
|
+
shouldCaptureLogs = true;
|
|
77
|
+
utils.logger.log.originalValue(...args);
|
|
78
|
+
shouldCaptureLogs = false;
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
let stubLogs = (ctx, method, err) => stub(ctx, method, msg => {
|
|
82
|
+
if (!shouldCaptureLogs) return ctx[method].originalValue.call(ctx, msg);
|
|
83
|
+
else helpers.logger[err ? 'stderr' : 'stdout'].push(sanitizeLog(msg));
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (process.env.__PERCY_BROWSERIFIED__) {
|
|
87
|
+
for (let m of ['warn', 'error', 'log']) stubLogs(console, m, m !== 'log');
|
|
88
|
+
} else {
|
|
89
|
+
for (let io of ['stdout', 'stderr']) stubLogs(process[io], 'write', io === 'stderr');
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
reset() {
|
|
94
|
+
utils.logger.remote.socket?.close();
|
|
95
|
+
delete utils.logger.loglevel.lvl;
|
|
96
|
+
delete utils.logger.log.history;
|
|
97
|
+
|
|
98
|
+
helpers.logger.stdout.length = 0;
|
|
99
|
+
helpers.logger.stderr.length = 0;
|
|
100
|
+
utils.logger.log.reset?.();
|
|
101
|
+
|
|
102
|
+
if (process.env.__PERCY_BROWSERIFIED__) {
|
|
103
|
+
for (let m of ['warn', 'error', 'log']) console[m].reset?.();
|
|
104
|
+
} else {
|
|
105
|
+
for (let io of ['stdout', 'stderr']) process[io].write.reset?.();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
27
109
|
};
|
|
28
110
|
|
|
29
111
|
if (process.env.__PERCY_BROWSERIFIED__) {
|
|
@@ -77,4 +159,4 @@ if (process.env.__PERCY_BROWSERIFIED__) {
|
|
|
77
159
|
};
|
|
78
160
|
}
|
|
79
161
|
|
|
80
|
-
|
|
162
|
+
module.exports = helpers;
|
package/test/server.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import path from 'path';
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
4
3
|
|
|
5
4
|
// create a testing context for mocking the local percy server and a local testing site
|
|
6
|
-
|
|
5
|
+
async function context() {
|
|
7
6
|
let { createTestServer } = await import('@percy/core/test/helpers/server');
|
|
8
7
|
|
|
9
8
|
let ctx = {
|
|
@@ -65,7 +64,7 @@ export async function context() {
|
|
|
65
64
|
return next();
|
|
66
65
|
});
|
|
67
66
|
|
|
68
|
-
ctx.server.websocket(ws => {
|
|
67
|
+
ctx.server.websocket('/(logger)?', ws => {
|
|
69
68
|
if (!allowSocketConnections) return ws.terminate();
|
|
70
69
|
ws.onmessage = ({ data }) => ctx.server.messages.push(data);
|
|
71
70
|
});
|
|
@@ -109,7 +108,7 @@ export async function context() {
|
|
|
109
108
|
}
|
|
110
109
|
|
|
111
110
|
// start a testing server to control a context remotely
|
|
112
|
-
|
|
111
|
+
async function start(args) {
|
|
113
112
|
let { logger } = await import('@percy/logger');
|
|
114
113
|
let { WebSocketServer } = await import('ws');
|
|
115
114
|
let log = logger('utils:test/server');
|
|
@@ -158,7 +157,7 @@ export async function start(args) {
|
|
|
158
157
|
}
|
|
159
158
|
|
|
160
159
|
// stop any existing testing server
|
|
161
|
-
|
|
160
|
+
async function stop() {
|
|
162
161
|
let { default: WS } = await import('ws');
|
|
163
162
|
|
|
164
163
|
await new Promise(resolve => {
|
|
@@ -169,7 +168,7 @@ export async function stop() {
|
|
|
169
168
|
}
|
|
170
169
|
|
|
171
170
|
// start & stop a testing server around a command
|
|
172
|
-
|
|
171
|
+
async function exec(args) {
|
|
173
172
|
let argsep = args.indexOf('--');
|
|
174
173
|
if (argsep < 0) throw new Error('Must supply a command after `--`');
|
|
175
174
|
|
|
@@ -187,22 +186,20 @@ export async function exec(args) {
|
|
|
187
186
|
}
|
|
188
187
|
|
|
189
188
|
// allow invoking start/stop/exec as CLI commands
|
|
190
|
-
|
|
191
|
-
const
|
|
192
|
-
|
|
193
|
-
if (program === filename || `${program}.js` === filename) {
|
|
189
|
+
if (require.main === module) {
|
|
190
|
+
const args = process.argv.slice(2);
|
|
194
191
|
const run = { start, stop, exec }[args[0]];
|
|
195
192
|
|
|
196
193
|
if (!run) {
|
|
197
194
|
process.stderr.write('usage: node test/server <start|stop|exec>\n');
|
|
198
|
-
} else if (!process.send && fs.existsSync(path.join(
|
|
199
|
-
|
|
195
|
+
} else if (!process.send && fs.existsSync(path.join(__filename, '../../src'))) {
|
|
196
|
+
import('child_process').then(cp => cp.fork(__filename, args, {
|
|
200
197
|
execArgv: ['--no-warnings', '--loader=../../scripts/loader.js']
|
|
201
198
|
}));
|
|
202
199
|
} else {
|
|
203
|
-
|
|
200
|
+
run(args.slice(1)).catch(console.error);
|
|
204
201
|
}
|
|
205
202
|
}
|
|
206
203
|
|
|
207
204
|
// export the namespace by default
|
|
208
|
-
|
|
205
|
+
module.exports = { context, start, stop, exec };
|