@parcel/utils 2.0.0-nightly.97 → 2.0.0-nightly.970
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/.eslintrc.js +6 -6
- package/lib/DefaultMap.js +0 -8
- package/lib/Deferred.js +10 -2
- package/lib/PromiseQueue.js +21 -30
- package/lib/TapStream.js +10 -10
- package/lib/alternatives.js +134 -0
- package/lib/ansi-html.js +10 -2
- package/lib/blob.js +26 -8
- package/lib/collection.js +14 -11
- package/lib/config.js +145 -35
- package/lib/countLines.js +2 -2
- package/lib/dependency-location.js +3 -3
- package/lib/generateBuildMetrics.js +148 -0
- package/lib/generateCertificate.js +33 -8
- package/lib/getExisting.js +11 -3
- package/lib/getRootDir.js +18 -7
- package/lib/glob.js +53 -19
- package/lib/hash.js +44 -0
- package/lib/http-server.js +48 -10
- package/lib/index.js +298 -224
- package/lib/is-url.js +12 -2
- package/lib/isDirectoryInside.js +24 -0
- package/lib/objectHash.js +10 -2
- package/lib/openInBrowser.js +94 -0
- package/lib/path.js +33 -6
- package/lib/prettyDiagnostic.js +107 -25
- package/lib/relativeBundlePath.js +13 -7
- package/lib/relativeUrl.js +19 -3
- package/lib/replaceBundleReferences.js +91 -35
- package/lib/schema.js +104 -33
- package/lib/shared-buffer.js +31 -0
- package/lib/sourcemap.js +147 -0
- package/lib/stream.js +38 -3
- package/lib/urlJoin.js +25 -6
- package/package.json +27 -16
- package/src/DefaultMap.js +1 -1
- package/src/PromiseQueue.js +16 -12
- package/src/alternatives.js +143 -0
- package/src/ansi-html.js +2 -2
- package/src/blob.js +4 -3
- package/src/bundle-url.js +1 -1
- package/src/collection.js +14 -14
- package/src/config.js +100 -35
- package/src/countLines.js +5 -2
- package/src/debounce.js +1 -1
- package/src/dependency-location.js +11 -6
- package/src/generateBuildMetrics.js +158 -0
- package/src/generateCertificate.js +1 -1
- package/src/getCertificate.js +1 -1
- package/src/getExisting.js +1 -4
- package/src/getRootDir.js +1 -2
- package/src/glob.js +29 -11
- package/src/hash.js +34 -0
- package/src/http-server.js +10 -12
- package/src/index.js +52 -23
- package/src/is-url.js +1 -1
- package/src/isDirectoryInside.js +11 -0
- package/src/openInBrowser.js +64 -0
- package/src/path.js +38 -6
- package/src/prettyDiagnostic.js +58 -24
- package/src/relativeBundlePath.js +8 -13
- package/src/replaceBundleReferences.js +75 -39
- package/src/schema.js +101 -44
- package/src/shared-buffer.js +24 -0
- package/src/sourcemap.js +135 -0
- package/src/stream.js +31 -1
- package/src/urlJoin.js +3 -1
- package/test/DefaultMap.test.js +7 -4
- package/test/config.test.js +50 -0
- package/test/input/config/config.json +3 -0
- package/test/input/config/empty.json +0 -0
- package/test/input/config/empty.toml +0 -0
- package/test/input/sourcemap/referenced-min.js +2 -0
- package/test/input/sourcemap/referenced-min.js.map +6 -0
- package/test/input/sourcemap/source-root.js +2 -0
- package/test/input/sourcemap/source-root.js.map +7 -0
- package/test/objectHash.test.js +33 -0
- package/test/prettifyTime.test.js +17 -0
- package/test/replaceBundleReferences.test.js +268 -0
- package/test/sourcemap.test.js +207 -0
- package/test/throttle.test.js +1 -2
- package/test/urlJoin.test.js +37 -0
- package/lib/generateBundleReport.js +0 -38
- package/lib/loadSourceMapUrl.js +0 -33
- package/lib/md5.js +0 -35
- package/lib/prettyError.js +0 -43
- package/lib/promisify.js +0 -13
- package/lib/resolve.js +0 -93
- package/lib/serializeObject.js +0 -28
- package/src/.babelrc +0 -3
- package/src/generateBundleReport.js +0 -51
- package/src/loadSourceMapUrl.js +0 -33
- package/src/md5.js +0 -44
- package/src/prettyError.js +0 -54
- package/src/promisify.js +0 -13
- package/src/resolve.js +0 -123
- package/src/serializeObject.js +0 -22
- package/test/input/sourcemap/referenced.js +0 -7
- package/test/loadSourceMapUrl.test.js +0 -37
- package/test/prettyError.test.js +0 -104
|
@@ -5,17 +5,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = createDependencyLocation;
|
|
7
7
|
|
|
8
|
-
function createDependencyLocation(start,
|
|
8
|
+
function createDependencyLocation(start, specifier, lineOffset = 0, columnOffset = 0, // Imports are usually wrapped in quotes
|
|
9
9
|
importWrapperLength = 2) {
|
|
10
10
|
return {
|
|
11
|
-
filePath:
|
|
11
|
+
filePath: specifier,
|
|
12
12
|
start: {
|
|
13
13
|
line: start.line + lineOffset,
|
|
14
14
|
column: start.column + columnOffset
|
|
15
15
|
},
|
|
16
16
|
end: {
|
|
17
17
|
line: start.line + lineOffset,
|
|
18
|
-
column: start.column +
|
|
18
|
+
column: start.column + specifier.length - 1 + importWrapperLength + columnOffset
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
21
|
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = generateBuildMetrics;
|
|
7
|
+
|
|
8
|
+
function _sourceMap() {
|
|
9
|
+
const data = _interopRequireDefault(require("@parcel/source-map"));
|
|
10
|
+
|
|
11
|
+
_sourceMap = function () {
|
|
12
|
+
return data;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function _nullthrows() {
|
|
19
|
+
const data = _interopRequireDefault(require("nullthrows"));
|
|
20
|
+
|
|
21
|
+
_nullthrows = function () {
|
|
22
|
+
return data;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function _path() {
|
|
29
|
+
const data = _interopRequireDefault(require("path"));
|
|
30
|
+
|
|
31
|
+
_path = function () {
|
|
32
|
+
return data;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
var _ = require("./");
|
|
39
|
+
|
|
40
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
41
|
+
|
|
42
|
+
async function getSourcemapSizes(filePath, fs, projectRoot) {
|
|
43
|
+
let bundleContents = await fs.readFile(filePath, 'utf-8');
|
|
44
|
+
let mapUrlData = await (0, _.loadSourceMapUrl)(fs, filePath, bundleContents);
|
|
45
|
+
|
|
46
|
+
if (!mapUrlData) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let rawMap = mapUrlData.map;
|
|
51
|
+
let sourceMap = new (_sourceMap().default)(projectRoot);
|
|
52
|
+
sourceMap.addVLQMap(rawMap);
|
|
53
|
+
let parsedMapData = sourceMap.getMap();
|
|
54
|
+
|
|
55
|
+
if (parsedMapData.mappings.length > 2) {
|
|
56
|
+
let sources = parsedMapData.sources.map(s => _path().default.normalize(_path().default.join(projectRoot, s)));
|
|
57
|
+
let currLine = 1;
|
|
58
|
+
let currColumn = 0;
|
|
59
|
+
let currMappingIndex = 0;
|
|
60
|
+
let currMapping = parsedMapData.mappings[currMappingIndex];
|
|
61
|
+
let nextMapping = parsedMapData.mappings[currMappingIndex + 1];
|
|
62
|
+
let sourceSizes = new Array(sources.length).fill(0);
|
|
63
|
+
let unknownOrigin = 0;
|
|
64
|
+
|
|
65
|
+
for (let i = 0; i < bundleContents.length; i++) {
|
|
66
|
+
let character = bundleContents[i];
|
|
67
|
+
|
|
68
|
+
while (nextMapping && nextMapping.generated.line === currLine && nextMapping.generated.column <= currColumn) {
|
|
69
|
+
currMappingIndex++;
|
|
70
|
+
currMapping = parsedMapData.mappings[currMappingIndex];
|
|
71
|
+
nextMapping = parsedMapData.mappings[currMappingIndex + 1];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
let currentSource = currMapping.source;
|
|
75
|
+
let charSize = Buffer.byteLength(character, 'utf8');
|
|
76
|
+
|
|
77
|
+
if (currentSource != null && currMapping.generated.line === currLine && currMapping.generated.column <= currColumn) {
|
|
78
|
+
sourceSizes[currentSource] += charSize;
|
|
79
|
+
} else {
|
|
80
|
+
unknownOrigin += charSize;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (character === '\n') {
|
|
84
|
+
currColumn = 0;
|
|
85
|
+
currLine++;
|
|
86
|
+
} else {
|
|
87
|
+
currColumn++;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
let sizeMap = new Map();
|
|
92
|
+
|
|
93
|
+
for (let i = 0; i < sourceSizes.length; i++) {
|
|
94
|
+
sizeMap.set(sources[i], sourceSizes[i]);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
sizeMap.set('', unknownOrigin);
|
|
98
|
+
return sizeMap;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
async function createBundleStats(bundle, fs, projectRoot) {
|
|
103
|
+
let filePath = bundle.filePath;
|
|
104
|
+
let sourcemapSizes = await getSourcemapSizes(filePath, fs, projectRoot);
|
|
105
|
+
let assets = new Map();
|
|
106
|
+
bundle.traverseAssets(asset => {
|
|
107
|
+
let filePath = _path().default.normalize(asset.filePath);
|
|
108
|
+
|
|
109
|
+
assets.set(filePath, {
|
|
110
|
+
filePath,
|
|
111
|
+
size: asset.stats.size,
|
|
112
|
+
originalSize: asset.stats.size,
|
|
113
|
+
time: asset.stats.time
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
let assetsReport = [];
|
|
117
|
+
|
|
118
|
+
if (sourcemapSizes && sourcemapSizes.size) {
|
|
119
|
+
assetsReport = Array.from(sourcemapSizes.keys()).map(filePath => {
|
|
120
|
+
let foundSize = sourcemapSizes.get(filePath) || 0;
|
|
121
|
+
let stats = assets.get(filePath) || {
|
|
122
|
+
filePath,
|
|
123
|
+
size: foundSize,
|
|
124
|
+
originalSize: foundSize,
|
|
125
|
+
time: 0
|
|
126
|
+
};
|
|
127
|
+
return { ...stats,
|
|
128
|
+
size: foundSize
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
} else {
|
|
132
|
+
assetsReport = Array.from(assets.values());
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return {
|
|
136
|
+
filePath: (0, _nullthrows().default)(bundle.filePath),
|
|
137
|
+
size: bundle.stats.size,
|
|
138
|
+
time: bundle.stats.time,
|
|
139
|
+
assets: assetsReport.sort((a, b) => b.size - a.size)
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async function generateBuildMetrics(bundles, fs, projectRoot) {
|
|
144
|
+
bundles.sort((a, b) => b.stats.size - a.stats.size).filter(b => !!b.filePath);
|
|
145
|
+
return {
|
|
146
|
+
bundles: (await Promise.all(bundles.map(b => createBundleStats(b, fs, projectRoot)))).filter(e => !!e)
|
|
147
|
+
};
|
|
148
|
+
}
|
|
@@ -5,20 +5,44 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = generateCertificate;
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
function _nodeForge() {
|
|
9
|
+
const data = _interopRequireDefault(require("node-forge"));
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
_nodeForge = function () {
|
|
12
|
+
return data;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function _path() {
|
|
19
|
+
const data = _interopRequireDefault(require("path"));
|
|
20
|
+
|
|
21
|
+
_path = function () {
|
|
22
|
+
return data;
|
|
23
|
+
};
|
|
11
24
|
|
|
12
|
-
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function _logger() {
|
|
29
|
+
const data = _interopRequireDefault(require("@parcel/logger"));
|
|
30
|
+
|
|
31
|
+
_logger = function () {
|
|
32
|
+
return data;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
13
37
|
|
|
14
38
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
39
|
|
|
16
40
|
async function generateCertificate(fs, cacheDir, host) {
|
|
17
41
|
let certDirectory = cacheDir;
|
|
18
42
|
|
|
19
|
-
const privateKeyPath = _path.default.join(certDirectory, 'private.pem');
|
|
43
|
+
const privateKeyPath = _path().default.join(certDirectory, 'private.pem');
|
|
20
44
|
|
|
21
|
-
const certPath = _path.default.join(certDirectory, 'primary.crt');
|
|
45
|
+
const certPath = _path().default.join(certDirectory, 'primary.crt');
|
|
22
46
|
|
|
23
47
|
const cachedKey = (await fs.exists(privateKeyPath)) && (await fs.readFile(privateKeyPath));
|
|
24
48
|
const cachedCert = (await fs.exists(certPath)) && (await fs.readFile(certPath));
|
|
@@ -30,9 +54,10 @@ async function generateCertificate(fs, cacheDir, host) {
|
|
|
30
54
|
};
|
|
31
55
|
}
|
|
32
56
|
|
|
33
|
-
_logger.default.progress('Generating SSL Certificate...');
|
|
57
|
+
_logger().default.progress('Generating SSL Certificate...');
|
|
58
|
+
|
|
59
|
+
const pki = _nodeForge().default.pki;
|
|
34
60
|
|
|
35
|
-
const pki = _nodeForge.default.pki;
|
|
36
61
|
const keys = pki.rsa.generateKeyPair(2048);
|
|
37
62
|
const cert = pki.createCertificate();
|
|
38
63
|
cert.publicKey = keys.publicKey;
|
|
@@ -111,7 +136,7 @@ async function generateCertificate(fs, cacheDir, host) {
|
|
|
111
136
|
}, {
|
|
112
137
|
name: 'subjectKeyIdentifier'
|
|
113
138
|
}]);
|
|
114
|
-
cert.sign(keys.privateKey, _nodeForge.default.md.sha256.create());
|
|
139
|
+
cert.sign(keys.privateKey, _nodeForge().default.md.sha256.create());
|
|
115
140
|
const privPem = pki.privateKeyToPem(keys.privateKey);
|
|
116
141
|
const certPem = pki.certificateToPem(cert);
|
|
117
142
|
await fs.mkdirp(certDirectory);
|
package/lib/getExisting.js
CHANGED
|
@@ -5,7 +5,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = getExisting;
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
function _fs() {
|
|
9
|
+
const data = _interopRequireDefault(require("fs"));
|
|
10
|
+
|
|
11
|
+
_fs = function () {
|
|
12
|
+
return data;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
9
17
|
|
|
10
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
19
|
|
|
@@ -14,10 +22,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
14
22
|
* e.g. builtins.min.js and builtins.js.
|
|
15
23
|
*/
|
|
16
24
|
function getExisting(minifiedPath, sourcePath) {
|
|
17
|
-
let source = _fs.default.readFileSync(sourcePath, 'utf8').trim();
|
|
25
|
+
let source = _fs().default.readFileSync(sourcePath, 'utf8').trim();
|
|
18
26
|
|
|
19
27
|
return {
|
|
20
28
|
source,
|
|
21
|
-
minified: _fs.default.existsSync(minifiedPath) ? _fs.default.readFileSync(minifiedPath, 'utf8').trim().replace(/;$/, '') : source
|
|
29
|
+
minified: _fs().default.existsSync(minifiedPath) ? _fs().default.readFileSync(minifiedPath, 'utf8').trim().replace(/;$/, '') : source
|
|
22
30
|
};
|
|
23
31
|
}
|
package/lib/getRootDir.js
CHANGED
|
@@ -7,13 +7,24 @@ exports.default = getRootDir;
|
|
|
7
7
|
|
|
8
8
|
var _glob = require("./glob");
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
function _path() {
|
|
11
|
+
const data = _interopRequireDefault(require("path"));
|
|
12
|
+
|
|
13
|
+
_path = function () {
|
|
14
|
+
return data;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
return data;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
21
|
|
|
12
22
|
function getRootDir(files) {
|
|
13
23
|
let cur = null;
|
|
14
24
|
|
|
15
25
|
for (let file of files) {
|
|
16
|
-
let parsed =
|
|
26
|
+
let parsed = _path().default.parse(file);
|
|
27
|
+
|
|
17
28
|
parsed.dir = findGlobRoot(parsed.dir);
|
|
18
29
|
|
|
19
30
|
if (!cur) {
|
|
@@ -24,8 +35,8 @@ function getRootDir(files) {
|
|
|
24
35
|
return process.cwd();
|
|
25
36
|
} else {
|
|
26
37
|
// find the common path parts.
|
|
27
|
-
let curParts = cur.dir.split(
|
|
28
|
-
let newParts = parsed.dir.split(
|
|
38
|
+
let curParts = cur.dir.split(_path().default.sep);
|
|
39
|
+
let newParts = parsed.dir.split(_path().default.sep);
|
|
29
40
|
let len = Math.min(curParts.length, newParts.length);
|
|
30
41
|
let i = 0;
|
|
31
42
|
|
|
@@ -33,7 +44,7 @@ function getRootDir(files) {
|
|
|
33
44
|
i++;
|
|
34
45
|
}
|
|
35
46
|
|
|
36
|
-
cur.dir = i > 1 ? curParts.slice(0, i).join(
|
|
47
|
+
cur.dir = i > 1 ? curParts.slice(0, i).join(_path().default.sep) : cur.root;
|
|
37
48
|
}
|
|
38
49
|
}
|
|
39
50
|
|
|
@@ -42,7 +53,7 @@ function getRootDir(files) {
|
|
|
42
53
|
|
|
43
54
|
|
|
44
55
|
function findGlobRoot(dir) {
|
|
45
|
-
let parts = dir.split(
|
|
56
|
+
let parts = dir.split(_path().default.sep);
|
|
46
57
|
let last = parts.length;
|
|
47
58
|
|
|
48
59
|
for (let i = parts.length - 1; i >= 0; i--) {
|
|
@@ -51,5 +62,5 @@ function findGlobRoot(dir) {
|
|
|
51
62
|
}
|
|
52
63
|
}
|
|
53
64
|
|
|
54
|
-
return parts.slice(0, last).join(
|
|
65
|
+
return parts.slice(0, last).join(_path().default.sep);
|
|
55
66
|
}
|
package/lib/glob.js
CHANGED
|
@@ -8,43 +8,76 @@ exports.isGlobMatch = isGlobMatch;
|
|
|
8
8
|
exports.globSync = globSync;
|
|
9
9
|
exports.glob = glob;
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
function _isGlob2() {
|
|
12
|
+
const data = _interopRequireDefault(require("is-glob"));
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
_isGlob2 = function () {
|
|
15
|
+
return data;
|
|
16
|
+
};
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
16
20
|
|
|
17
|
-
function
|
|
21
|
+
function _fastGlob() {
|
|
22
|
+
const data = _interopRequireDefault(require("fast-glob"));
|
|
18
23
|
|
|
19
|
-
|
|
24
|
+
_fastGlob = function () {
|
|
25
|
+
return data;
|
|
26
|
+
};
|
|
20
27
|
|
|
21
|
-
|
|
28
|
+
return data;
|
|
29
|
+
}
|
|
22
30
|
|
|
23
|
-
function
|
|
31
|
+
function _micromatch() {
|
|
32
|
+
const data = require("micromatch");
|
|
24
33
|
|
|
25
|
-
function
|
|
26
|
-
|
|
34
|
+
_micromatch = function () {
|
|
35
|
+
return data;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return data;
|
|
27
39
|
}
|
|
28
40
|
|
|
41
|
+
var _path = require("./path");
|
|
42
|
+
|
|
43
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
44
|
+
|
|
29
45
|
function isGlob(p) {
|
|
30
|
-
return (0, _isGlob2.default)(
|
|
46
|
+
return (0, _isGlob2().default)((0, _path.normalizeSeparators)(p));
|
|
31
47
|
}
|
|
32
48
|
|
|
33
49
|
function isGlobMatch(filePath, glob) {
|
|
34
|
-
return (0, _micromatch.isMatch)(filePath,
|
|
50
|
+
return (0, _micromatch().isMatch)(filePath, (0, _path.normalizeSeparators)(glob));
|
|
35
51
|
}
|
|
36
52
|
|
|
37
|
-
function globSync(p, options) {
|
|
38
|
-
|
|
53
|
+
function globSync(p, fs, options) {
|
|
54
|
+
// $FlowFixMe
|
|
55
|
+
options = { ...options,
|
|
56
|
+
fs: {
|
|
57
|
+
statSync: p => {
|
|
58
|
+
return fs.statSync(p);
|
|
59
|
+
},
|
|
60
|
+
lstatSync: p => {
|
|
61
|
+
// Our FileSystem interface doesn't have lstat support at the moment,
|
|
62
|
+
// but this is fine for our purposes since we follow symlinks by default.
|
|
63
|
+
return fs.statSync(p);
|
|
64
|
+
},
|
|
65
|
+
readdirSync: (p, opts) => {
|
|
66
|
+
return fs.readdirSync(p, opts);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}; // $FlowFixMe
|
|
70
|
+
|
|
71
|
+
return _fastGlob().default.sync((0, _path.normalizeSeparators)(p), options);
|
|
39
72
|
}
|
|
40
73
|
|
|
41
74
|
function glob(p, fs, options) {
|
|
42
75
|
// $FlowFixMe
|
|
43
|
-
options =
|
|
76
|
+
options = { ...options,
|
|
44
77
|
fs: {
|
|
45
78
|
stat: async (p, cb) => {
|
|
46
79
|
try {
|
|
47
|
-
cb(null,
|
|
80
|
+
cb(null, await fs.stat(p));
|
|
48
81
|
} catch (err) {
|
|
49
82
|
cb(err);
|
|
50
83
|
}
|
|
@@ -53,7 +86,7 @@ function glob(p, fs, options) {
|
|
|
53
86
|
// Our FileSystem interface doesn't have lstat support at the moment,
|
|
54
87
|
// but this is fine for our purposes since we follow symlinks by default.
|
|
55
88
|
try {
|
|
56
|
-
cb(null,
|
|
89
|
+
cb(null, await fs.stat(p));
|
|
57
90
|
} catch (err) {
|
|
58
91
|
cb(err);
|
|
59
92
|
}
|
|
@@ -65,12 +98,13 @@ function glob(p, fs, options) {
|
|
|
65
98
|
}
|
|
66
99
|
|
|
67
100
|
try {
|
|
68
|
-
cb(null,
|
|
101
|
+
cb(null, await fs.readdir(p, opts));
|
|
69
102
|
} catch (err) {
|
|
70
103
|
cb(err);
|
|
71
104
|
}
|
|
72
105
|
}
|
|
73
106
|
}
|
|
74
|
-
}
|
|
75
|
-
|
|
107
|
+
}; // $FlowFixMe Added in Flow 0.121.0 upgrade in #4381
|
|
108
|
+
|
|
109
|
+
return (0, _fastGlob().default)((0, _path.normalizeSeparators)(p), options);
|
|
76
110
|
}
|
package/lib/hash.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.hashStream = hashStream;
|
|
7
|
+
exports.hashObject = hashObject;
|
|
8
|
+
exports.hashFile = hashFile;
|
|
9
|
+
|
|
10
|
+
var _collection = require("./collection");
|
|
11
|
+
|
|
12
|
+
function _hash() {
|
|
13
|
+
const data = require("@parcel/hash");
|
|
14
|
+
|
|
15
|
+
_hash = function () {
|
|
16
|
+
return data;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
return data;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function hashStream(stream) {
|
|
23
|
+
let hash = new (_hash().Hash)();
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
stream.on('error', err => {
|
|
26
|
+
reject(err);
|
|
27
|
+
});
|
|
28
|
+
stream.on('data', chunk => {
|
|
29
|
+
hash.writeBuffer(chunk);
|
|
30
|
+
}).on('end', function () {
|
|
31
|
+
resolve(hash.finish());
|
|
32
|
+
}).on('error', err => {
|
|
33
|
+
reject(err);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function hashObject(obj) {
|
|
39
|
+
return (0, _hash().hashString)(JSON.stringify((0, _collection.objectSortedEntriesDeep)(obj)));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function hashFile(fs, filePath) {
|
|
43
|
+
return hashStream(fs.createReadStream(filePath));
|
|
44
|
+
}
|
package/lib/http-server.js
CHANGED
|
@@ -5,13 +5,37 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.createHTTPServer = createHTTPServer;
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
function _http() {
|
|
9
|
+
const data = _interopRequireDefault(require("http"));
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
_http = function () {
|
|
12
|
+
return data;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function _https() {
|
|
19
|
+
const data = _interopRequireDefault(require("https"));
|
|
20
|
+
|
|
21
|
+
_https = function () {
|
|
22
|
+
return data;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function _nullthrows() {
|
|
29
|
+
const data = _interopRequireDefault(require("nullthrows"));
|
|
30
|
+
|
|
31
|
+
_nullthrows = function () {
|
|
32
|
+
return data;
|
|
33
|
+
};
|
|
11
34
|
|
|
12
|
-
|
|
35
|
+
return data;
|
|
36
|
+
}
|
|
13
37
|
|
|
14
|
-
var _ = require("
|
|
38
|
+
var _ = require("./");
|
|
15
39
|
|
|
16
40
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
41
|
|
|
@@ -21,11 +45,25 @@ async function createHTTPServer(options) {
|
|
|
21
45
|
let server;
|
|
22
46
|
|
|
23
47
|
if (!options.https) {
|
|
24
|
-
server = _http.default.createServer(options.listener);
|
|
48
|
+
server = _http().default.createServer(options.listener);
|
|
25
49
|
} else if (options.https === true) {
|
|
26
|
-
|
|
50
|
+
let {
|
|
51
|
+
cert,
|
|
52
|
+
key
|
|
53
|
+
} = await (0, _.generateCertificate)(options.outputFS, options.cacheDir, options.host);
|
|
54
|
+
server = _https().default.createServer({
|
|
55
|
+
cert,
|
|
56
|
+
key
|
|
57
|
+
}, options.listener);
|
|
27
58
|
} else {
|
|
28
|
-
|
|
59
|
+
let {
|
|
60
|
+
cert,
|
|
61
|
+
key
|
|
62
|
+
} = await (0, _.getCertificate)(options.inputFS, options.https);
|
|
63
|
+
server = _https().default.createServer({
|
|
64
|
+
cert,
|
|
65
|
+
key
|
|
66
|
+
}, options.listener);
|
|
29
67
|
} // HTTPServer#close only stops accepting new connections, and does not close existing ones.
|
|
30
68
|
// Before closing, destroy any active connections through their sockets. Additionally, remove sockets when they close:
|
|
31
69
|
// https://stackoverflow.com/questions/18874689/force-close-all-connections-in-a-node-js-http-server
|
|
@@ -34,9 +72,9 @@ async function createHTTPServer(options) {
|
|
|
34
72
|
|
|
35
73
|
let sockets = new Set();
|
|
36
74
|
server.on('connection', socket => {
|
|
37
|
-
(0, _nullthrows.default)(sockets).add(socket);
|
|
75
|
+
(0, _nullthrows().default)(sockets).add(socket);
|
|
38
76
|
socket.on('close', () => {
|
|
39
|
-
(0, _nullthrows.default)(sockets).delete(socket);
|
|
77
|
+
(0, _nullthrows().default)(sockets).delete(socket);
|
|
40
78
|
});
|
|
41
79
|
});
|
|
42
80
|
return {
|
|
@@ -44,7 +82,7 @@ async function createHTTPServer(options) {
|
|
|
44
82
|
|
|
45
83
|
stop() {
|
|
46
84
|
return new Promise((resolve, reject) => {
|
|
47
|
-
for (let socket of (0, _nullthrows.default)(sockets)) {
|
|
85
|
+
for (let socket of (0, _nullthrows().default)(sockets)) {
|
|
48
86
|
socket.destroy();
|
|
49
87
|
}
|
|
50
88
|
|