@appium/support 2.55.3 → 2.56.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/build/lib/env.js +102 -0
- package/build/lib/fs.js +74 -56
- package/build/lib/image-util.js +4 -339
- package/build/lib/index.js +18 -6
- package/build/lib/log-internal.js +2 -4
- package/build/lib/logger.js +2 -4
- package/build/lib/logging.js +2 -4
- package/build/lib/mjpeg.js +2 -4
- package/build/lib/mkdirp.js +7 -11
- package/build/lib/net.js +2 -4
- package/build/lib/node.js +99 -2
- package/build/lib/npm.js +240 -0
- package/build/lib/plist.js +2 -4
- package/build/lib/process.js +2 -4
- package/build/lib/system.js +2 -4
- package/build/lib/tempdir.js +2 -4
- package/build/lib/timing.js +2 -4
- package/build/lib/util.js +6 -8
- package/build/lib/zip.js +4 -8
- package/lib/env.js +162 -0
- package/lib/fs.js +193 -69
- package/lib/image-util.js +3 -578
- package/lib/index.js +8 -2
- package/lib/log-internal.js +2 -2
- package/lib/logging.js +1 -1
- package/lib/mkdirp.js +3 -6
- package/lib/net.js +4 -4
- package/lib/node.js +104 -1
- package/lib/npm.js +335 -0
- package/lib/tempdir.js +6 -6
- package/lib/util.js +28 -24
- package/lib/zip.js +7 -8
- package/package.json +21 -9
- package/build/test/assets/sample_binary.plist +0 -0
- package/build/test/assets/sample_text.plist +0 -28
- package/build/test/fs-specs.js +0 -264
- package/build/test/helpers.js +0 -35
- package/build/test/image-util-e2e-specs.js +0 -227
- package/build/test/index-specs.js +0 -49
- package/build/test/log-internals-specs.js +0 -97
- package/build/test/logger/helpers.js +0 -71
- package/build/test/logger/logger-force-specs.js +0 -41
- package/build/test/logger/logger-normal-specs.js +0 -113
- package/build/test/logger/logger-test-specs.js +0 -40
- package/build/test/mjpeg-e2e-specs.js +0 -96
- package/build/test/net-e2e-specs.js +0 -32
- package/build/test/node-e2e-specs.js +0 -22
- package/build/test/plist-specs.js +0 -54
- package/build/test/process-specs.js +0 -104
- package/build/test/system-specs.js +0 -136
- package/build/test/tempdir-specs.js +0 -86
- package/build/test/timing-specs.js +0 -125
- package/build/test/util-e2e-specs.js +0 -136
- package/build/test/util-specs.js +0 -537
- package/build/test/zip-e2e-specs.js +0 -233
package/lib/zip.js
CHANGED
|
@@ -4,7 +4,6 @@ import yauzl from 'yauzl';
|
|
|
4
4
|
import archiver from 'archiver';
|
|
5
5
|
import { createWriteStream } from 'fs';
|
|
6
6
|
import path from 'path';
|
|
7
|
-
import { mkdirp } from '../lib/mkdirp';
|
|
8
7
|
import stream from 'stream';
|
|
9
8
|
import fs from './fs';
|
|
10
9
|
import { isWindows } from './system';
|
|
@@ -169,7 +168,7 @@ class ZipExtractor {
|
|
|
169
168
|
|
|
170
169
|
|
|
171
170
|
/**
|
|
172
|
-
* @typedef
|
|
171
|
+
* @typedef ExtractAllOptions
|
|
173
172
|
* @property {?string} fileNamesEncoding The encoding to use for extracted file names.
|
|
174
173
|
* For ZIP archives created on MacOS it is usually expected to be `utf8`.
|
|
175
174
|
* By default it is autodetected based on the entry metadata and is only needed to be set explicitly
|
|
@@ -261,11 +260,11 @@ async function _extractEntryTo (zipFile, entry, destDir) {
|
|
|
261
260
|
// Create dest directory if doesn't exist already
|
|
262
261
|
if (/\/$/.test(entry.fileName)) {
|
|
263
262
|
if (!await fs.exists(dstPath)) {
|
|
264
|
-
await mkdirp(dstPath);
|
|
263
|
+
await fs.mkdirp(dstPath);
|
|
265
264
|
}
|
|
266
265
|
return;
|
|
267
266
|
} else if (!await fs.exists(path.dirname(dstPath))) {
|
|
268
|
-
await mkdirp(path.dirname(dstPath));
|
|
267
|
+
await fs.mkdirp(path.dirname(dstPath));
|
|
269
268
|
}
|
|
270
269
|
|
|
271
270
|
// Create a write stream
|
|
@@ -294,7 +293,7 @@ async function _extractEntryTo (zipFile, entry, destDir) {
|
|
|
294
293
|
}
|
|
295
294
|
|
|
296
295
|
/**
|
|
297
|
-
* @typedef
|
|
296
|
+
* @typedef ZipEntry
|
|
298
297
|
* @property {yauzl.ZipEntry} entry The actual entry instance
|
|
299
298
|
* @property {function} extractEntryTo An async function, which accepts one parameter.
|
|
300
299
|
* This parameter contains the destination folder path to which this function is going to extract the entry.
|
|
@@ -335,7 +334,7 @@ async function readEntries (zipFilePath, onEntry) {
|
|
|
335
334
|
}
|
|
336
335
|
|
|
337
336
|
/**
|
|
338
|
-
* @typedef
|
|
337
|
+
* @typedef ZipOptions
|
|
339
338
|
* @property {boolean} encodeToBase64 [false] Whether to encode
|
|
340
339
|
* the resulting archive to a base64-encoded string
|
|
341
340
|
* @property {boolean} isMetered [true] Whether to log the actual
|
|
@@ -475,13 +474,13 @@ async function assertValidZip (filePath) {
|
|
|
475
474
|
}
|
|
476
475
|
|
|
477
476
|
/**
|
|
478
|
-
* @typedef
|
|
477
|
+
* @typedef ZipCompressionOptions
|
|
479
478
|
* @property {number} level [9] - Compression level in range 0..9
|
|
480
479
|
* (greater numbers mean better compression, but longer processing time)
|
|
481
480
|
*/
|
|
482
481
|
|
|
483
482
|
/**
|
|
484
|
-
* @typedef
|
|
483
|
+
* @typedef ZipSourceOptions
|
|
485
484
|
* @property {!string} pattern ['**\/*'] - GLOB pattern for compression
|
|
486
485
|
* @property {!string} cwd - The source root folder (the parent folder of
|
|
487
486
|
* the destination file by default)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appium/support",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.56.1",
|
|
4
4
|
"description": "Support libs used across appium packages",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"automation",
|
|
@@ -12,12 +12,14 @@
|
|
|
12
12
|
"firefoxos",
|
|
13
13
|
"testing"
|
|
14
14
|
],
|
|
15
|
+
"homepage": "https://appium.io",
|
|
15
16
|
"bugs": {
|
|
16
17
|
"url": "https://github.com/appium/appium/issues"
|
|
17
18
|
},
|
|
18
19
|
"repository": {
|
|
19
20
|
"type": "git",
|
|
20
|
-
"url": "https://github.com/appium/appium.git"
|
|
21
|
+
"url": "https://github.com/appium/appium.git",
|
|
22
|
+
"directory": "packages/support"
|
|
21
23
|
},
|
|
22
24
|
"license": "Apache-2.0",
|
|
23
25
|
"author": "https://github.com/appium",
|
|
@@ -29,15 +31,23 @@
|
|
|
29
31
|
"lib",
|
|
30
32
|
"build"
|
|
31
33
|
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "babel lib --root-mode=upward --delete-dir-on-start --out-dir=build/lib",
|
|
36
|
+
"dev": "npm run build -- --watch",
|
|
37
|
+
"fix": "npm run lint -- --fix",
|
|
38
|
+
"lint": "eslint -c ../../.eslintrc --ignore-path ../../.eslintignore .",
|
|
39
|
+
"test": "npm run test:unit",
|
|
40
|
+
"test:e2e": "mocha --require ../../test/setup-babel.js --timeout 20s --slow 10s \"./test/e2e/**/*.spec.js\"",
|
|
41
|
+
"test:unit": "mocha --require ../../test/setup-babel.js \"./test/unit/**/*.spec.js\""
|
|
42
|
+
},
|
|
32
43
|
"dependencies": {
|
|
33
|
-
"@babel/runtime": "7.
|
|
44
|
+
"@babel/runtime": "7.17.8",
|
|
34
45
|
"archiver": "5.3.0",
|
|
35
|
-
"axios": "0.
|
|
46
|
+
"axios": "0.26.1",
|
|
36
47
|
"base64-stream": "1.0.0",
|
|
37
48
|
"bluebird": "3.7.2",
|
|
38
49
|
"bplist-creator": "0.1.0",
|
|
39
50
|
"bplist-parser": "0.3.1",
|
|
40
|
-
"find-root": "1.1.0",
|
|
41
51
|
"form-data": "4.0.0",
|
|
42
52
|
"get-stream": "6.0.1",
|
|
43
53
|
"glob": "7.2.0",
|
|
@@ -46,14 +56,17 @@
|
|
|
46
56
|
"klaw": "3.0.0",
|
|
47
57
|
"lockfile": "1.0.4",
|
|
48
58
|
"lodash": "4.17.21",
|
|
49
|
-
"mkdirp": "1.0.4",
|
|
50
59
|
"moment": "2.29.1",
|
|
51
60
|
"mv": "2.1.1",
|
|
52
61
|
"ncp": "2.0.0",
|
|
53
|
-
"npmlog": "
|
|
62
|
+
"npmlog": "6.0.1",
|
|
63
|
+
"opencv-bindings": "4.5.5",
|
|
64
|
+
"pkg-dir": "5.0.0",
|
|
54
65
|
"plist": "3.0.4",
|
|
55
66
|
"pluralize": "8.0.0",
|
|
56
67
|
"pngjs": "6.0.0",
|
|
68
|
+
"read-pkg": "5.2.0",
|
|
69
|
+
"resolve-from": "5.0.0",
|
|
57
70
|
"rimraf": "3.0.2",
|
|
58
71
|
"sanitize-filename": "1.6.3",
|
|
59
72
|
"semver": "7.3.5",
|
|
@@ -71,6 +84,5 @@
|
|
|
71
84
|
"publishConfig": {
|
|
72
85
|
"access": "public"
|
|
73
86
|
},
|
|
74
|
-
"
|
|
75
|
-
"gitHead": "ca90a11813546ab4851e5b1f0406f420a53227e6"
|
|
87
|
+
"gitHead": "6d35def9ed754121fee691cdaf7b30e3a7ac3e8b"
|
|
76
88
|
}
|
|
Binary file
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
-
<plist version="1.0">
|
|
4
|
-
<dict>
|
|
5
|
-
<key>com.apple.locationd.bundle-/System/Library/PrivateFrameworks/Parsec.framework</key>
|
|
6
|
-
<dict>
|
|
7
|
-
<key>Whitelisted</key>
|
|
8
|
-
<false/>
|
|
9
|
-
<key>Executable</key>
|
|
10
|
-
<string></string>
|
|
11
|
-
<key>BundlePath</key>
|
|
12
|
-
<string>/System/Library/PrivateFrameworks/Parsec.framework</string>
|
|
13
|
-
<key>Registered</key>
|
|
14
|
-
<string></string>
|
|
15
|
-
</dict>
|
|
16
|
-
<key>com.apple.locationd.bundle-/System/Library/PrivateFrameworks/WirelessDiagnostics.framework</key>
|
|
17
|
-
<dict>
|
|
18
|
-
<key>Whitelisted</key>
|
|
19
|
-
<false/>
|
|
20
|
-
<key>Executable</key>
|
|
21
|
-
<string></string>
|
|
22
|
-
<key>BundlePath</key>
|
|
23
|
-
<string>/System/Library/PrivateFrameworks/WirelessDiagnostics.framework</string>
|
|
24
|
-
<key>Registered</key>
|
|
25
|
-
<string></string>
|
|
26
|
-
</dict>
|
|
27
|
-
</dict>
|
|
28
|
-
</plist>
|
package/build/test/fs-specs.js
DELETED
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
require("source-map-support/register");
|
|
6
|
-
|
|
7
|
-
var _index = require("../lib/index.js");
|
|
8
|
-
|
|
9
|
-
var _path = _interopRequireDefault(require("path"));
|
|
10
|
-
|
|
11
|
-
var _teen_process = require("teen_process");
|
|
12
|
-
|
|
13
|
-
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
14
|
-
|
|
15
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
16
|
-
|
|
17
|
-
const MOCHA_TIMEOUT = 20000;
|
|
18
|
-
describe('fs', function () {
|
|
19
|
-
this.timeout(MOCHA_TIMEOUT);
|
|
20
|
-
|
|
21
|
-
const existingPath = _path.default.resolve(__dirname, 'fs-specs.js');
|
|
22
|
-
|
|
23
|
-
it('should have expected methods', function () {
|
|
24
|
-
should.exist(_index.fs.open);
|
|
25
|
-
should.exist(_index.fs.close);
|
|
26
|
-
should.exist(_index.fs.access);
|
|
27
|
-
should.exist(_index.fs.mkdir);
|
|
28
|
-
should.exist(_index.fs.readlink);
|
|
29
|
-
should.exist(_index.fs.exists);
|
|
30
|
-
should.exist(_index.fs.rimraf);
|
|
31
|
-
should.exist(_index.fs.rimrafSync);
|
|
32
|
-
should.exist(_index.fs.readFile);
|
|
33
|
-
should.exist(_index.fs.writeFile);
|
|
34
|
-
should.exist(_index.fs.lstat);
|
|
35
|
-
should.exist(_index.fs.mv);
|
|
36
|
-
});
|
|
37
|
-
describe('mkdir', function () {
|
|
38
|
-
let dirName = _path.default.resolve(__dirname, 'tmp');
|
|
39
|
-
|
|
40
|
-
it('should make a directory that does not exist', async function () {
|
|
41
|
-
await _index.fs.rimraf(dirName);
|
|
42
|
-
await _index.fs.mkdir(dirName);
|
|
43
|
-
let exists = await _index.fs.hasAccess(dirName);
|
|
44
|
-
exists.should.be.true;
|
|
45
|
-
});
|
|
46
|
-
it('should not complain if the dir already exists', async function () {
|
|
47
|
-
let exists = await _index.fs.hasAccess(dirName);
|
|
48
|
-
exists.should.be.true;
|
|
49
|
-
await _index.fs.mkdir(dirName);
|
|
50
|
-
});
|
|
51
|
-
it('should still throw an error if something else goes wrong', async function () {
|
|
52
|
-
await _index.fs.mkdir('/bin/foo').should.be.rejected;
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
it('hasAccess', async function () {
|
|
56
|
-
(await _index.fs.exists(existingPath)).should.be.ok;
|
|
57
|
-
|
|
58
|
-
let nonExistingPath = _path.default.resolve(__dirname, 'wrong-specs.js');
|
|
59
|
-
|
|
60
|
-
(await _index.fs.hasAccess(nonExistingPath)).should.not.be.ok;
|
|
61
|
-
});
|
|
62
|
-
it('exists', async function () {
|
|
63
|
-
(await _index.fs.exists(existingPath)).should.be.ok;
|
|
64
|
-
|
|
65
|
-
let nonExistingPath = _path.default.resolve(__dirname, 'wrong-specs.js');
|
|
66
|
-
|
|
67
|
-
(await _index.fs.exists(nonExistingPath)).should.not.be.ok;
|
|
68
|
-
});
|
|
69
|
-
it('readFile', async function () {
|
|
70
|
-
(await _index.fs.readFile(existingPath, 'utf8')).should.contain('readFile');
|
|
71
|
-
});
|
|
72
|
-
describe('copyFile', function () {
|
|
73
|
-
it('should be able to copy a file', async function () {
|
|
74
|
-
let newPath = _path.default.resolve(await _index.tempDir.openDir(), 'fs-specs.js');
|
|
75
|
-
|
|
76
|
-
await _index.fs.copyFile(existingPath, newPath);
|
|
77
|
-
(await _index.fs.readFile(newPath, 'utf8')).should.contain('readFile');
|
|
78
|
-
});
|
|
79
|
-
it('should throw an error if the source does not exist', async function () {
|
|
80
|
-
await _index.fs.copyFile('/sdfsdfsdfsdf', '/tmp/bla').should.eventually.be.rejected;
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
it('rimraf', async function () {
|
|
84
|
-
let newPath = _path.default.resolve(await _index.tempDir.openDir(), 'fs-specs.js');
|
|
85
|
-
|
|
86
|
-
await _index.fs.copyFile(existingPath, newPath);
|
|
87
|
-
(await _index.fs.exists(newPath)).should.be.true;
|
|
88
|
-
await _index.fs.rimraf(newPath);
|
|
89
|
-
(await _index.fs.exists(newPath)).should.be.false;
|
|
90
|
-
});
|
|
91
|
-
it('sanitizeName', function () {
|
|
92
|
-
_index.fs.sanitizeName(':file?.txt', {
|
|
93
|
-
replacement: '-'
|
|
94
|
-
}).should.eql('-file-.txt');
|
|
95
|
-
});
|
|
96
|
-
it('rimrafSync', async function () {
|
|
97
|
-
let newPath = _path.default.resolve(await _index.tempDir.openDir(), 'fs-specs.js');
|
|
98
|
-
|
|
99
|
-
await _index.fs.copyFile(existingPath, newPath);
|
|
100
|
-
(await _index.fs.exists(newPath)).should.be.true;
|
|
101
|
-
|
|
102
|
-
_index.fs.rimrafSync(newPath);
|
|
103
|
-
|
|
104
|
-
(await _index.fs.exists(newPath)).should.be.false;
|
|
105
|
-
});
|
|
106
|
-
describe('md5', function () {
|
|
107
|
-
this.timeout(1200000);
|
|
108
|
-
let smallFilePath;
|
|
109
|
-
let bigFilePath;
|
|
110
|
-
before(async function () {
|
|
111
|
-
smallFilePath = existingPath;
|
|
112
|
-
bigFilePath = _path.default.resolve(await _index.tempDir.openDir(), 'enormous.txt');
|
|
113
|
-
let file = await _index.fs.open(bigFilePath, 'w');
|
|
114
|
-
let fileData = '';
|
|
115
|
-
|
|
116
|
-
for (let i = 0; i < 4096; i++) {
|
|
117
|
-
fileData += '1';
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
for (let i = 0; i < 40000; i++) {
|
|
121
|
-
await _index.fs.write(file, fileData);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
await _index.fs.close(file);
|
|
125
|
-
});
|
|
126
|
-
after(async function () {
|
|
127
|
-
await _index.fs.unlink(bigFilePath);
|
|
128
|
-
});
|
|
129
|
-
it('should calculate hash of correct length', async function () {
|
|
130
|
-
(await _index.fs.md5(smallFilePath)).should.have.length(32);
|
|
131
|
-
});
|
|
132
|
-
it('should be able to run on huge file', async function () {
|
|
133
|
-
(await _index.fs.md5(bigFilePath)).should.have.length(32);
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
describe('hash', function () {
|
|
137
|
-
it('should calculate sha1 hash', async function () {
|
|
138
|
-
(await _index.fs.hash(existingPath, 'sha1')).should.have.length(40);
|
|
139
|
-
});
|
|
140
|
-
it('should calculate md5 hash', async function () {
|
|
141
|
-
(await _index.fs.hash(existingPath, 'md5')).should.have.length(32);
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
it('stat', async function () {
|
|
145
|
-
let stat = await _index.fs.stat(existingPath);
|
|
146
|
-
stat.should.have.property('atime');
|
|
147
|
-
});
|
|
148
|
-
describe('which', function () {
|
|
149
|
-
it('should find correct executable', async function () {
|
|
150
|
-
let systemNpmPath = (await (0, _teen_process.exec)('which', ['npm'])).stdout.trim();
|
|
151
|
-
let npmPath = await _index.fs.which('npm');
|
|
152
|
-
npmPath.should.equal(systemNpmPath);
|
|
153
|
-
});
|
|
154
|
-
it('should fail gracefully', async function () {
|
|
155
|
-
await _index.fs.which('something_that_does_not_exist').should.eventually.be.rejected;
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
it('glob', async function () {
|
|
159
|
-
let glob = '*-specs.js';
|
|
160
|
-
let tests = await _index.fs.glob(glob, {
|
|
161
|
-
cwd: __dirname
|
|
162
|
-
});
|
|
163
|
-
tests.should.be.an('array');
|
|
164
|
-
tests.should.have.length.above(2);
|
|
165
|
-
});
|
|
166
|
-
describe('walkDir', function () {
|
|
167
|
-
it('walkDir recursive', async function () {
|
|
168
|
-
let inCallback = 0;
|
|
169
|
-
const filePath = await _index.fs.walkDir(__dirname, true, async item => {
|
|
170
|
-
if (item.endsWith('logger/helpers.js')) {
|
|
171
|
-
++inCallback;
|
|
172
|
-
await _bluebird.default.delay(500);
|
|
173
|
-
--inCallback;
|
|
174
|
-
return true;
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
inCallback.should.equal(0);
|
|
178
|
-
filePath.should.not.be.null;
|
|
179
|
-
});
|
|
180
|
-
it('should walk all elements recursive', async function () {
|
|
181
|
-
let inCallback = 0;
|
|
182
|
-
const filePath = await _index.fs.walkDir(__dirname, true, async () => {
|
|
183
|
-
++inCallback;
|
|
184
|
-
await _bluebird.default.delay(500);
|
|
185
|
-
--inCallback;
|
|
186
|
-
});
|
|
187
|
-
inCallback.should.equal(0);
|
|
188
|
-
_lodash.default.isNil(filePath).should.be.true;
|
|
189
|
-
});
|
|
190
|
-
it('should throw error through callback', async function () {
|
|
191
|
-
let processed = 0;
|
|
192
|
-
await chai.expect(_index.fs.walkDir(__dirname, true, () => {
|
|
193
|
-
++processed;
|
|
194
|
-
throw 'Callback error';
|
|
195
|
-
})).to.be.rejectedWith('Callback error');
|
|
196
|
-
processed.should.equal(1);
|
|
197
|
-
});
|
|
198
|
-
it('should traverse non-recursively', async function () {
|
|
199
|
-
const filePath = await _index.fs.walkDir(__dirname, false, item => item.endsWith('logger/helpers.js'));
|
|
200
|
-
_lodash.default.isNil(filePath).should.be.true;
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
describe('findRoot()', function () {
|
|
204
|
-
describe('when not provided an argument', function () {
|
|
205
|
-
it('should throw', function () {
|
|
206
|
-
(() => _index.fs.findRoot()).should.throw(TypeError);
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
describe('when provided a relative path', function () {
|
|
210
|
-
it('should throw', function () {
|
|
211
|
-
(() => _index.fs.findRoot('./foo')).should.throw(TypeError);
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
describe('when provided an empty string', function () {
|
|
215
|
-
it('should throw', function () {
|
|
216
|
-
(() => _index.fs.findRoot('')).should.throw(TypeError);
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
describe('when provided an absolute path', function () {
|
|
220
|
-
describe('when the path has a parent `package.json`', function () {
|
|
221
|
-
it('should locate the dir with the closest `package.json`', function () {
|
|
222
|
-
_index.fs.findRoot(__dirname).should.be.a('string');
|
|
223
|
-
});
|
|
224
|
-
});
|
|
225
|
-
describe('when the path does not have a parent `package.json`', function () {
|
|
226
|
-
it('should throw', function () {
|
|
227
|
-
(() => _index.fs.findRoot('/')).should.throw(Error);
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
describe('readPackageJsonFrom()', function () {
|
|
233
|
-
describe('when not provided an argument', function () {
|
|
234
|
-
it('should throw', function () {
|
|
235
|
-
(() => _index.fs.readPackageJsonFrom()).should.throw(TypeError, /non-empty, absolute path/);
|
|
236
|
-
});
|
|
237
|
-
});
|
|
238
|
-
describe('when provided a relative path', function () {
|
|
239
|
-
it('should throw', function () {
|
|
240
|
-
(() => _index.fs.readPackageJsonFrom('./foo')).should.throw(TypeError);
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
describe('when provided an empty string', function () {
|
|
244
|
-
it('should throw', function () {
|
|
245
|
-
(() => _index.fs.readPackageJsonFrom('')).should.throw(TypeError);
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
describe('when provided an absolute path', function () {
|
|
249
|
-
describe('when the path does not have a parent `package.json`', function () {
|
|
250
|
-
it('should throw', function () {
|
|
251
|
-
(() => _index.fs.readPackageJsonFrom('/')).should.throw(Error);
|
|
252
|
-
});
|
|
253
|
-
});
|
|
254
|
-
describe('when the path has a parent `package.json`', function () {
|
|
255
|
-
it('should read the `package.json` found in the root dir', function () {
|
|
256
|
-
_index.fs.readPackageJsonFrom(__dirname).should.be.an('object');
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
});require('source-map-support').install();
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZnMtc3BlY3MuanMiXSwibmFtZXMiOlsiTU9DSEFfVElNRU9VVCIsImRlc2NyaWJlIiwidGltZW91dCIsImV4aXN0aW5nUGF0aCIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiaXQiLCJzaG91bGQiLCJleGlzdCIsImZzIiwib3BlbiIsImNsb3NlIiwiYWNjZXNzIiwibWtkaXIiLCJyZWFkbGluayIsImV4aXN0cyIsInJpbXJhZiIsInJpbXJhZlN5bmMiLCJyZWFkRmlsZSIsIndyaXRlRmlsZSIsImxzdGF0IiwibXYiLCJkaXJOYW1lIiwiaGFzQWNjZXNzIiwiYmUiLCJ0cnVlIiwicmVqZWN0ZWQiLCJvayIsIm5vbkV4aXN0aW5nUGF0aCIsIm5vdCIsImNvbnRhaW4iLCJuZXdQYXRoIiwidGVtcERpciIsIm9wZW5EaXIiLCJjb3B5RmlsZSIsImV2ZW50dWFsbHkiLCJmYWxzZSIsInNhbml0aXplTmFtZSIsInJlcGxhY2VtZW50IiwiZXFsIiwic21hbGxGaWxlUGF0aCIsImJpZ0ZpbGVQYXRoIiwiYmVmb3JlIiwiZmlsZSIsImZpbGVEYXRhIiwiaSIsIndyaXRlIiwiYWZ0ZXIiLCJ1bmxpbmsiLCJtZDUiLCJoYXZlIiwibGVuZ3RoIiwiaGFzaCIsInN0YXQiLCJwcm9wZXJ0eSIsInN5c3RlbU5wbVBhdGgiLCJzdGRvdXQiLCJ0cmltIiwibnBtUGF0aCIsIndoaWNoIiwiZXF1YWwiLCJnbG9iIiwidGVzdHMiLCJjd2QiLCJhbiIsImFib3ZlIiwiaW5DYWxsYmFjayIsImZpbGVQYXRoIiwid2Fsa0RpciIsIml0ZW0iLCJlbmRzV2l0aCIsIkIiLCJkZWxheSIsIm51bGwiLCJfIiwiaXNOaWwiLCJwcm9jZXNzZWQiLCJjaGFpIiwiZXhwZWN0IiwidG8iLCJyZWplY3RlZFdpdGgiLCJmaW5kUm9vdCIsInRocm93IiwiVHlwZUVycm9yIiwiYSIsIkVycm9yIiwicmVhZFBhY2thZ2VKc29uRnJvbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FB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Qy9FLE1BQXhDLENBQStDMkUsS0FBL0MsQ0FBcURDLFNBQXJEO0FBQ0QsT0FGQyxDQUFGO0FBR0QsS0FKTyxDQUFSO0FBTUFuRixJQUFBQSxRQUFRLENBQUMsK0JBQUQsRUFBa0MsWUFBWTtBQUNwRE0sTUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QixTQUFDLE1BQU1HLFVBQUc2RSxtQkFBSCxDQUF1QixFQUF2QixDQUFQLEVBQW1DL0UsTUFBbkMsQ0FBMEMyRSxLQUExQyxDQUFnREMsU0FBaEQ7QUFDRCxPQUZDLENBQUY7QUFHRCxLQUpPLENBQVI7QUFNQW5GLElBQUFBLFFBQVEsQ0FBQyxnQ0FBRCxFQUFtQyxZQUFZO0FBQ3JEQSxNQUFBQSxRQUFRLENBQUMscURBQUQsRUFBd0QsWUFBWTtBQUMxRU0sUUFBQUEsRUFBRSxDQUFDLGNBQUQsRUFBaUIsWUFBWTtBQUM3QixXQUFDLE1BQU1HLFVBQUc2RSxtQkFBSCxDQUF1QixHQUF2QixDQUFQLEVBQW9DL0UsTUFBcEMsQ0FBMkMyRSxLQUEzQyxDQUFpREcsS0FBakQ7QUFDRCxTQUZDLENBQUY7QUFHRCxPQUpPLENBQVI7QUFNQXJGLE1BQUFBLFFBQVEsQ0FBQywyQ0FBRCxFQUE4QyxZQUFZO0FBQ2hFTSxRQUFBQSxFQUFFLENBQUMsc0RBQUQsRUFBeUQsWUFBWTtBQUNyRUcsb0JBQUc2RSxtQkFBSCxDQUF1QmpGLFNBQXZCLEVBQWtDRSxNQUFsQyxDQUF5Q2lCLEVBQXpDLENBQTRDd0MsRUFBNUMsQ0FBK0MsUUFBL0M7QUFDRCxTQUZDLENBQUY7QUFHRCxPQUpPLENBQVI7QUFLRCxLQVpPLENBQVI7QUFhRCxHQWhDTyxDQUFSO0FBaUNELENBOVBPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcywgdGVtcERpciB9IGZyb20gJy4uL2xpYi9pbmRleC5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5jb25zdCBNT0NIQV9USU1FT1VUID0gMjAwMDA7XG5cbmRlc2NyaWJlKCdmcycsIGZ1bmN0aW9uICgpIHtcbiAgdGhpcy50aW1lb3V0KE1PQ0hBX1RJTUVPVVQpO1xuXG4gIGNvbnN0IGV4aXN0aW5nUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdmcy1zcGVjcy5qcycpO1xuXG4gIGl0KCdzaG91bGQgaGF2ZSBleHBlY3RlZCBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgIHNob3VsZC5leGlzdChmcy5vcGVuKTtcbiAgICBzaG91bGQuZXhpc3QoZnMuY2xvc2UpO1xuICAgIHNob3VsZC5leGlzdChmcy5hY2Nlc3MpO1xuICAgIHNob3VsZC5leGlzdChmcy5ta2Rpcik7XG4gICAgc2hvdWxkLmV4aXN0KGZzLnJlYWRsaW5rKTtcbiAgICBzaG91bGQuZXhpc3QoZnMuZXhpc3RzKTtcbiAgICBzaG91bGQuZXhpc3QoZnMucmltcmFmKTtcbiAgICBzaG91bGQuZXhpc3QoZnMucmltcmFmU3luYyk7XG4gICAgc2hvdWxkLmV4aXN0KGZzLnJlYWRGaWxlKTtcbiAgICBzaG91bGQuZXhpc3QoZnMud3JpdGVGaWxlKTtcbiAgICBzaG91bGQuZXhpc3QoZnMubHN0YXQpO1xuICAgIHNob3VsZC5leGlzdChmcy5tdik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdta2RpcicsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZGlyTmFtZSA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICd0bXAnKTtcblxuICAgIGl0KCdzaG91bGQgbWFrZSBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGV4aXN0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZnMucmltcmFmKGRpck5hbWUpO1xuICAgICAgYXdhaXQgZnMubWtkaXIoZGlyTmFtZSk7XG4gICAgICBsZXQgZXhpc3RzID0gYXdhaXQgZnMuaGFzQWNjZXNzKGRpck5hbWUpO1xuICAgICAgZXhpc3RzLnNob3VsZC5iZS50cnVlO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgY29tcGxhaW4gaWYgdGhlIGRpciBhbHJlYWR5IGV4aXN0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBleGlzdHMgPSBhd2FpdCBmcy5oYXNBY2Nlc3MoZGlyTmFtZSk7XG4gICAgICBleGlzdHMuc2hvdWxkLmJlLnRydWU7XG4gICAgICBhd2FpdCBmcy5ta2RpcihkaXJOYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3RpbGwgdGhyb3cgYW4gZXJyb3IgaWYgc29tZXRoaW5nIGVsc2UgZ29lcyB3cm9uZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGZzLm1rZGlyKCcvYmluL2ZvbycpLnNob3VsZC5iZS5yZWplY3RlZDtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2hhc0FjY2VzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAoYXdhaXQgZnMuZXhpc3RzKGV4aXN0aW5nUGF0aCkpLnNob3VsZC5iZS5vaztcbiAgICBsZXQgbm9uRXhpc3RpbmdQYXRoID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3dyb25nLXNwZWNzLmpzJyk7XG4gICAgKGF3YWl0IGZzLmhhc0FjY2Vzcyhub25FeGlzdGluZ1BhdGgpKS5zaG91bGQubm90LmJlLm9rO1xuICB9KTtcbiAgaXQoJ2V4aXN0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAoYXdhaXQgZnMuZXhpc3RzKGV4aXN0aW5nUGF0aCkpLnNob3VsZC5iZS5vaztcbiAgICBsZXQgbm9uRXhpc3RpbmdQYXRoID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJ3dyb25nLXNwZWNzLmpzJyk7XG4gICAgKGF3YWl0IGZzLmV4aXN0cyhub25FeGlzdGluZ1BhdGgpKS5zaG91bGQubm90LmJlLm9rO1xuICB9KTtcbiAgaXQoJ3JlYWRGaWxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIChhd2FpdCBmcy5yZWFkRmlsZShleGlzdGluZ1BhdGgsICd1dGY4JykpLnNob3VsZC5jb250YWluKCdyZWFkRmlsZScpO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29weUZpbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGNvcHkgYSBmaWxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IG5ld1BhdGggPSBwYXRoLnJlc29sdmUoYXdhaXQgdGVtcERpci5vcGVuRGlyKCksICdmcy1zcGVjcy5qcycpO1xuICAgICAgYXdhaXQgZnMuY29weUZpbGUoZXhpc3RpbmdQYXRoLCBuZXdQYXRoKTtcbiAgICAgIChhd2FpdCBmcy5yZWFkRmlsZShuZXdQYXRoLCAndXRmOCcpKS5zaG91bGQuY29udGFpbigncmVhZEZpbGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHNvdXJjZSBkb2VzIG5vdCBleGlzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKCcvc2Rmc2Rmc2Rmc2RmJywgJy90bXAvYmxhJykuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyaW1yYWYnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IG5ld1BhdGggPSBwYXRoLnJlc29sdmUoYXdhaXQgdGVtcERpci5vcGVuRGlyKCksICdmcy1zcGVjcy5qcycpO1xuICAgIGF3YWl0IGZzLmNvcHlGaWxlKGV4aXN0aW5nUGF0aCwgbmV3UGF0aCk7XG4gICAgKGF3YWl0IGZzLmV4aXN0cyhuZXdQYXRoKSkuc2hvdWxkLmJlLnRydWU7XG4gICAgYXdhaXQgZnMucmltcmFmKG5ld1BhdGgpO1xuICAgIChhd2FpdCBmcy5leGlzdHMobmV3UGF0aCkpLnNob3VsZC5iZS5mYWxzZTtcbiAgfSk7XG4gIGl0KCdzYW5pdGl6ZU5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgZnMuc2FuaXRpemVOYW1lKCc6ZmlsZT8udHh0Jywge1xuICAgICAgcmVwbGFjZW1lbnQ6ICctJyxcbiAgICB9KS5zaG91bGQuZXFsKCctZmlsZS0udHh0Jyk7XG4gIH0pO1xuICBpdCgncmltcmFmU3luYycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgbmV3UGF0aCA9IHBhdGgucmVzb2x2ZShhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKSwgJ2ZzLXNwZWNzLmpzJyk7XG4gICAgYXdhaXQgZnMuY29weUZpbGUoZXhpc3RpbmdQYXRoLCBuZXdQYXRoKTtcbiAgICAoYXdhaXQgZnMuZXhpc3RzKG5ld1BhdGgpKS5zaG91bGQuYmUudHJ1ZTtcbiAgICBmcy5yaW1yYWZTeW5jKG5ld1BhdGgpO1xuICAgIChhd2FpdCBmcy5leGlzdHMobmV3UGF0aCkpLnNob3VsZC5iZS5mYWxzZTtcbiAgfSk7XG4gIGRlc2NyaWJlKCdtZDUnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy50aW1lb3V0KDEyMDAwMDApO1xuICAgIGxldCBzbWFsbEZpbGVQYXRoO1xuICAgIGxldCBiaWdGaWxlUGF0aDtcbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZ2V0IHRoZSBwYXRoIG9mIGEgc21hbGwgZmlsZSAodGhpcyBzb3VyY2UgZmlsZSlcbiAgICAgIHNtYWxsRmlsZVBhdGggPSBleGlzdGluZ1BhdGg7XG5cbiAgICAgIC8vIGNyZWF0ZSBhIGxhcmdlIGZpbGUgdG8gdGVzdCwgYWJvdXQgMTYzODQwMDAwIGJ5dGVzXG4gICAgICBiaWdGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKSwgJ2Vub3Jtb3VzLnR4dCcpO1xuICAgICAgbGV0IGZpbGUgPSBhd2FpdCBmcy5vcGVuKGJpZ0ZpbGVQYXRoLCAndycpO1xuICAgICAgbGV0IGZpbGVEYXRhID0gJyc7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwOTY7IGkrKykge1xuICAgICAgICBmaWxlRGF0YSArPSAnMSc7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQwMDAwOyBpKyspIHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGUoZmlsZSwgZmlsZURhdGEpO1xuICAgICAgfVxuICAgICAgYXdhaXQgZnMuY2xvc2UoZmlsZSk7XG4gICAgfSk7XG4gICAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKGJpZ0ZpbGVQYXRoKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGNhbGN1bGF0ZSBoYXNoIG9mIGNvcnJlY3QgbGVuZ3RoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgKGF3YWl0IGZzLm1kNShzbWFsbEZpbGVQYXRoKSkuc2hvdWxkLmhhdmUubGVuZ3RoKDMyKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gcnVuIG9uIGh1Z2UgZmlsZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIChhd2FpdCBmcy5tZDUoYmlnRmlsZVBhdGgpKS5zaG91bGQuaGF2ZS5sZW5ndGgoMzIpO1xuICAgIH0pO1xuICB9KTtcbiAgZGVzY3JpYmUoJ2hhc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjYWxjdWxhdGUgc2hhMSBoYXNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgKGF3YWl0IGZzLmhhc2goZXhpc3RpbmdQYXRoLCAnc2hhMScpKS5zaG91bGQuaGF2ZS5sZW5ndGgoNDApO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgY2FsY3VsYXRlIG1kNSBoYXNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgKGF3YWl0IGZzLmhhc2goZXhpc3RpbmdQYXRoLCAnbWQ1JykpLnNob3VsZC5oYXZlLmxlbmd0aCgzMik7XG4gICAgfSk7XG4gIH0pO1xuICBpdCgnc3RhdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgc3RhdCA9IGF3YWl0IGZzLnN0YXQoZXhpc3RpbmdQYXRoKTtcbiAgICBzdGF0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdhdGltZScpO1xuICB9KTtcbiAgZGVzY3JpYmUoJ3doaWNoJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZmluZCBjb3JyZWN0IGV4ZWN1dGFibGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgc3lzdGVtTnBtUGF0aCA9IChhd2FpdCBleGVjKCd3aGljaCcsIFsnbnBtJ10pKS5zdGRvdXQudHJpbSgpO1xuICAgICAgbGV0IG5wbVBhdGggPSBhd2FpdCBmcy53aGljaCgnbnBtJyk7XG4gICAgICBucG1QYXRoLnNob3VsZC5lcXVhbChzeXN0ZW1OcG1QYXRoKTtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgZ3JhY2VmdWxseScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGZzLndoaWNoKCdzb21ldGhpbmdfdGhhdF9kb2VzX25vdF9leGlzdCcpXG4gICAgICAgIC5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICB9KTtcbiAgfSk7XG4gIGl0KCdnbG9iJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGxldCBnbG9iID0gJyotc3BlY3MuanMnO1xuICAgIGxldCB0ZXN0cyA9IGF3YWl0IGZzLmdsb2IoZ2xvYiwge2N3ZDogX19kaXJuYW1lfSk7XG4gICAgdGVzdHMuc2hvdWxkLmJlLmFuKCdhcnJheScpO1xuICAgIHRlc3RzLnNob3VsZC5oYXZlLmxlbmd0aC5hYm92ZSgyKTtcbiAgfSk7XG4gIGRlc2NyaWJlKCd3YWxrRGlyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd3YWxrRGlyIHJlY3Vyc2l2ZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBpbkNhbGxiYWNrID0gMDtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZnMud2Fsa0RpcihfX2Rpcm5hbWUsIHRydWUsIGFzeW5jIChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmVuZHNXaXRoKCdsb2dnZXIvaGVscGVycy5qcycpKSB7XG4gICAgICAgICAgKytpbkNhbGxiYWNrO1xuICAgICAgICAgIC8vIFRoaXMgaXMgdG8gdmVyaWZ5IHByb3BlciBhd2FpdCBmdW5jdGlvbmFsaXR5IG9mIHRoZVxuICAgICAgICAgIC8vIGNhbGxiYWNrIGludm9jYXRpb24gaW5zaWRlIHRoZSBmaWxlIHN5c3RlbSB3YWxrZXJcbiAgICAgICAgICBhd2FpdCBCLmRlbGF5KDUwMCk7XG4gICAgICAgICAgLS1pbkNhbGxiYWNrO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGluQ2FsbGJhY2suc2hvdWxkLmVxdWFsKDApO1xuICAgICAgZmlsZVBhdGguc2hvdWxkLm5vdC5iZS5udWxsO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgd2FsayBhbGwgZWxlbWVudHMgcmVjdXJzaXZlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGluQ2FsbGJhY2sgPSAwO1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBhd2FpdCBmcy53YWxrRGlyKF9fZGlybmFtZSwgdHJ1ZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICArK2luQ2FsbGJhY2s7XG4gICAgICAgIGF3YWl0IEIuZGVsYXkoNTAwKTtcbiAgICAgICAgLS1pbkNhbGxiYWNrO1xuXG4gICAgICB9KTtcbiAgICAgIGluQ2FsbGJhY2suc2hvdWxkLmVxdWFsKDApO1xuICAgICAgXy5pc05pbChmaWxlUGF0aCkuc2hvdWxkLmJlLnRydWU7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB0aHJvdWdoIGNhbGxiYWNrJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHByb2Nlc3NlZCA9IDA7XG4gICAgICBhd2FpdCBjaGFpLmV4cGVjdChmcy53YWxrRGlyKF9fZGlybmFtZSwgdHJ1ZSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICsrcHJvY2Vzc2VkO1xuICAgICAgICAgIHRocm93ICdDYWxsYmFjayBlcnJvcic7XG4gICAgICAgIH0pKS50by5iZS5yZWplY3RlZFdpdGgoJ0NhbGxiYWNrIGVycm9yJyk7XG4gICAgICBwcm9jZXNzZWQuc2hvdWxkLmVxdWFsKDEpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdHJhdmVyc2Ugbm9uLXJlY3Vyc2l2ZWx5JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBhd2FpdCBmcy53YWxrRGlyKF9fZGlybmFtZSwgZmFsc2UsIChpdGVtKSA9PiBpdGVtLmVuZHNXaXRoKCdsb2dnZXIvaGVscGVycy5qcycpKTtcbiAgICAgIF8uaXNOaWwoZmlsZVBhdGgpLnNob3VsZC5iZS50cnVlO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmluZFJvb3QoKScsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnd2hlbiBub3QgcHJvdmlkZWQgYW4gYXJndW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gZnMuZmluZFJvb3QoKSkuc2hvdWxkLnRocm93KFR5cGVFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGEgcmVsYXRpdmUgcGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBmcy5maW5kUm9vdCgnLi9mb28nKSkuc2hvdWxkLnRocm93KFR5cGVFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBmcy5maW5kUm9vdCgnJykpLnNob3VsZC50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhbiBhYnNvbHV0ZSBwYXRoJywgZnVuY3Rpb24gKCkge1xuICAgICAgZGVzY3JpYmUoJ3doZW4gdGhlIHBhdGggaGFzIGEgcGFyZW50IGBwYWNrYWdlLmpzb25gJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGxvY2F0ZSB0aGUgZGlyIHdpdGggdGhlIGNsb3Nlc3QgYHBhY2thZ2UuanNvbmAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZnMuZmluZFJvb3QoX19kaXJuYW1lKS5zaG91bGQuYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBwYXRoIGRvZXMgbm90IGhhdmUgYSBwYXJlbnQgYHBhY2thZ2UuanNvbmAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgKCgpID0+IGZzLmZpbmRSb290KCcvJykpLnNob3VsZC50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWFkUGFja2FnZUpzb25Gcm9tKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ3doZW4gbm90IHByb3ZpZGVkIGFuIGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oKSkuc2hvdWxkLnRocm93KFR5cGVFcnJvciwgL25vbi1lbXB0eSwgYWJzb2x1dGUgcGF0aC8pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2hlbiBwcm92aWRlZCBhIHJlbGF0aXZlIHBhdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gZnMucmVhZFBhY2thZ2VKc29uRnJvbSgnLi9mb28nKSkuc2hvdWxkLnRocm93KFR5cGVFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKCcnKSkuc2hvdWxkLnRocm93KFR5cGVFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aGVuIHByb3ZpZGVkIGFuIGFic29sdXRlIHBhdGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXNjcmliZSgnd2hlbiB0aGUgcGF0aCBkb2VzIG5vdCBoYXZlIGEgcGFyZW50IGBwYWNrYWdlLmpzb25gJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICgoKSA9PiBmcy5yZWFkUGFja2FnZUpzb25Gcm9tKCcvJykpLnNob3VsZC50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZSBwYXRoIGhhcyBhIHBhcmVudCBgcGFja2FnZS5qc29uYCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZWFkIHRoZSBgcGFja2FnZS5qc29uYCBmb3VuZCBpbiB0aGUgcm9vdCBkaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZnMucmVhZFBhY2thZ2VKc29uRnJvbShfX2Rpcm5hbWUpLnNob3VsZC5iZS5hbignb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvZnMtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|
package/build/test/helpers.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.MockReadWriteStream = void 0;
|
|
7
|
-
|
|
8
|
-
require("source-map-support/register");
|
|
9
|
-
|
|
10
|
-
var _events = require("events");
|
|
11
|
-
|
|
12
|
-
class MockReadWriteStream extends _events.EventEmitter {
|
|
13
|
-
resume() {}
|
|
14
|
-
|
|
15
|
-
pause() {}
|
|
16
|
-
|
|
17
|
-
setEncoding() {}
|
|
18
|
-
|
|
19
|
-
flush() {}
|
|
20
|
-
|
|
21
|
-
write(msg) {
|
|
22
|
-
this.emit('data', msg);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
end() {
|
|
26
|
-
this.emit('end');
|
|
27
|
-
this.emit('finish');
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
exports.MockReadWriteStream = MockReadWriteStream;require('source-map-support').install();
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvaGVscGVycy5qcyJdLCJuYW1lcyI6WyJNb2NrUmVhZFdyaXRlU3RyZWFtIiwiRXZlbnRFbWl0dGVyIiwicmVzdW1lIiwicGF1c2UiLCJzZXRFbmNvZGluZyIsImZsdXNoIiwid3JpdGUiLCJtc2ciLCJlbWl0IiwiZW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxtQkFBTixTQUFrQ0Msb0JBQWxDLENBQStDO0FBQzdDQyxFQUFBQSxNQUFNLEdBQUksQ0FBRTs7QUFFWkMsRUFBQUEsS0FBSyxHQUFJLENBQUU7O0FBRVhDLEVBQUFBLFdBQVcsR0FBSSxDQUFFOztBQUVqQkMsRUFBQUEsS0FBSyxHQUFJLENBQUU7O0FBRVhDLEVBQUFBLEtBQUssQ0FBRUMsR0FBRixFQUFPO0FBQ1YsU0FBS0MsSUFBTCxDQUFVLE1BQVYsRUFBa0JELEdBQWxCO0FBQ0Q7O0FBRURFLEVBQUFBLEdBQUcsR0FBSTtBQUNMLFNBQUtELElBQUwsQ0FBVSxLQUFWO0FBQ0EsU0FBS0EsSUFBTCxDQUFVLFFBQVY7QUFDRDs7QUFoQjRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuY2xhc3MgTW9ja1JlYWRXcml0ZVN0cmVhbSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHJlc3VtZSAoKSB7fVxuXG4gIHBhdXNlICgpIHt9XG5cbiAgc2V0RW5jb2RpbmcgKCkge31cblxuICBmbHVzaCAoKSB7fVxuXG4gIHdyaXRlIChtc2cpIHtcbiAgICB0aGlzLmVtaXQoJ2RhdGEnLCBtc2cpO1xuICB9XG5cbiAgZW5kICgpIHtcbiAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgIHRoaXMuZW1pdCgnZmluaXNoJyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgTW9ja1JlYWRXcml0ZVN0cmVhbSB9O1xuIl0sImZpbGUiOiJ0ZXN0L2hlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
|