testplane 8.40.6 → 8.40.8
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/package.json +1 -1
- package/build/src/browser/cdp/selectivity/constants.d.ts +2 -0
- package/build/src/browser/cdp/selectivity/constants.js +3 -1
- package/build/src/browser/cdp/selectivity/constants.js.map +1 -1
- package/build/src/browser/cdp/selectivity/css-selectivity.d.ts +1 -0
- package/build/src/browser/cdp/selectivity/css-selectivity.js +102 -64
- package/build/src/browser/cdp/selectivity/css-selectivity.js.map +1 -1
- package/build/src/browser/cdp/selectivity/fs-cache.d.ts +9 -0
- package/build/src/browser/cdp/selectivity/fs-cache.js +100 -0
- package/build/src/browser/cdp/selectivity/fs-cache.js.map +1 -0
- package/build/src/browser/cdp/selectivity/hash-provider.js +1 -1
- package/build/src/browser/cdp/selectivity/hash-provider.js.map +1 -1
- package/build/src/browser/cdp/selectivity/index.js +7 -1
- package/build/src/browser/cdp/selectivity/index.js.map +1 -1
- package/build/src/browser/cdp/selectivity/js-selectivity.d.ts +1 -0
- package/build/src/browser/cdp/selectivity/js-selectivity.js +143 -70
- package/build/src/browser/cdp/selectivity/js-selectivity.js.map +1 -1
- package/build/src/browser/cdp/selectivity/json-utils.js +3 -3
- package/build/src/browser/cdp/selectivity/json-utils.js.map +1 -1
- package/build/src/browser/cdp/selectivity/testplane-selectivity.js +34 -9
- package/build/src/browser/cdp/selectivity/testplane-selectivity.js.map +1 -1
- package/build/src/browser/cdp/selectivity/types.d.ts +3 -0
- package/build/src/browser/cdp/selectivity/utils.d.ts +3 -1
- package/build/src/browser/cdp/selectivity/utils.js +9 -8
- package/build/src/browser/cdp/selectivity/utils.js.map +1 -1
- package/build/src/browser/client-scripts/bundle.compat.js +1 -1
- package/build/src/browser/client-scripts/bundle.native.js +1 -1
- package/build/src/browser/client-scripts/index.js +5 -4
- package/build/src/utils/crypto.d.ts +1 -0
- package/build/src/utils/crypto.js +2 -1
- package/build/src/utils/crypto.js.map +1 -1
- package/build/src/worker/runner/test-runner/index.js +11 -0
- package/build/src/worker/runner/test-runner/index.js.map +1 -1
- package/package.json +1 -1
package/build/package.json
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WEBPACK_PROTOCOL = void 0;
|
|
3
|
+
exports.SELECTIVITY_CACHE_READY_SUFFIX = exports.SELECTIVITY_CACHE_DIRECTIRY = exports.WEBPACK_PROTOCOL = void 0;
|
|
4
4
|
exports.WEBPACK_PROTOCOL = "webpack://";
|
|
5
|
+
exports.SELECTIVITY_CACHE_DIRECTIRY = "testplane-selectivity-cache";
|
|
6
|
+
exports.SELECTIVITY_CACHE_READY_SUFFIX = "-ready";
|
|
5
7
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAChC,QAAA,2BAA2B,GAAG,6BAA6B,CAAC;AAC5D,QAAA,8BAA8B,GAAG,QAAQ,CAAC"}
|
|
@@ -6,6 +6,7 @@ export declare class CSSSelectivity {
|
|
|
6
6
|
private readonly _sourceRoot;
|
|
7
7
|
private _cssOnStyleSheetAddedFn;
|
|
8
8
|
private _stylesSourceMap;
|
|
9
|
+
private _styleSheetIdToSourceMapUrl;
|
|
9
10
|
constructor(cdp: CDP, sessionId: CDPSessionId, sourceRoot?: string);
|
|
10
11
|
private _processStyle;
|
|
11
12
|
start(): Promise<void>;
|
|
@@ -9,10 +9,13 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
9
9
|
const node_url_1 = require("node:url");
|
|
10
10
|
const constants_1 = require("../../../error-snippets/constants");
|
|
11
11
|
const utils_1 = require("./utils");
|
|
12
|
+
const fs_cache_1 = require("./fs-cache");
|
|
13
|
+
const debug_1 = require("./debug");
|
|
12
14
|
class CSSSelectivity {
|
|
13
15
|
constructor(cdp, sessionId, sourceRoot = "") {
|
|
14
16
|
this._cssOnStyleSheetAddedFn = null;
|
|
15
17
|
this._stylesSourceMap = {};
|
|
18
|
+
this._styleSheetIdToSourceMapUrl = {};
|
|
16
19
|
this._cdp = cdp;
|
|
17
20
|
this._sessionId = sessionId;
|
|
18
21
|
this._sourceRoot = sourceRoot;
|
|
@@ -22,10 +25,30 @@ class CSSSelectivity {
|
|
|
22
25
|
return;
|
|
23
26
|
}
|
|
24
27
|
if (!sourceURL || !sourceMapURL) {
|
|
25
|
-
this._stylesSourceMap[styleSheetId] ||= null;
|
|
28
|
+
this._stylesSourceMap[styleSheetId] ||= Promise.resolve(null);
|
|
26
29
|
return;
|
|
27
30
|
}
|
|
28
|
-
|
|
31
|
+
const sourceMapResolvedUrl = (0, node_url_1.resolve)(sourceURL, sourceMapURL);
|
|
32
|
+
// Embedded source maps are not cached on file system because of their large cache key
|
|
33
|
+
if ((0, utils_1.isDataProtocol)(sourceMapResolvedUrl)) {
|
|
34
|
+
this._styleSheetIdToSourceMapUrl[styleSheetId] = null;
|
|
35
|
+
this._stylesSourceMap[styleSheetId] ||= (0, utils_1.fetchTextWithBrowserFallback)(sourceMapResolvedUrl, this._cdp.runtime, this._sessionId).catch((err) => err);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this._styleSheetIdToSourceMapUrl[styleSheetId] = sourceMapResolvedUrl;
|
|
39
|
+
this._stylesSourceMap[styleSheetId] ||= (0, fs_cache_1.hasCachedSelectivityFile)(fs_cache_1.CacheType.Asset, sourceMapResolvedUrl).then(isCached => {
|
|
40
|
+
return isCached
|
|
41
|
+
? true
|
|
42
|
+
: (0, utils_1.fetchTextWithBrowserFallback)(sourceMapResolvedUrl, this._cdp.runtime, this._sessionId)
|
|
43
|
+
.then(data => (0, fs_cache_1.setCachedSelectivityFile)(fs_cache_1.CacheType.Asset, sourceMapResolvedUrl, data)
|
|
44
|
+
.then(() => true)
|
|
45
|
+
.catch(err => {
|
|
46
|
+
(0, debug_1.debugSelectivity)(`Couldn't offload asset from "${sourceMapResolvedUrl}" to fs-cache: %O`, err);
|
|
47
|
+
return data;
|
|
48
|
+
}))
|
|
49
|
+
.catch((err) => err);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
29
52
|
}
|
|
30
53
|
async start() {
|
|
31
54
|
const cssOnStyleSheetAdded = (this._cssOnStyleSheetAddedFn = this._processStyle.bind(this));
|
|
@@ -40,72 +63,87 @@ class CSSSelectivity {
|
|
|
40
63
|
}
|
|
41
64
|
/** @param drop only performs cleanup without providing actual deps. Should be "true" if test is failed */
|
|
42
65
|
async stop(drop) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
const coverage = await this._cdp.css.stopRuleUsageTracking(this._sessionId);
|
|
48
|
-
// If we haven't got "styleSheetAdded" event for the script, pull up styles + source map manually
|
|
49
|
-
coverage.ruleUsage.forEach(({ styleSheetId }) => {
|
|
50
|
-
if (Object.hasOwn(this._stylesSourceMap, styleSheetId)) {
|
|
51
|
-
return;
|
|
66
|
+
try {
|
|
67
|
+
if (drop) {
|
|
68
|
+
return null;
|
|
52
69
|
}
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
.
|
|
57
|
-
|
|
58
|
-
if (sourceCode instanceof Error) {
|
|
59
|
-
return sourceCode;
|
|
70
|
+
const coverage = await this._cdp.css.stopRuleUsageTracking(this._sessionId);
|
|
71
|
+
// If we haven't got "styleSheetAdded" event for the script, pull up styles + source map manually
|
|
72
|
+
coverage.ruleUsage.forEach(({ styleSheetId }) => {
|
|
73
|
+
if (Object.hasOwn(this._stylesSourceMap, styleSheetId)) {
|
|
74
|
+
return;
|
|
60
75
|
}
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
const scriptSourcePromise = this._cdp.css
|
|
77
|
+
.getStyleSheetText(this._sessionId, styleSheetId)
|
|
78
|
+
.then(res => res.text)
|
|
79
|
+
.catch((err) => err);
|
|
80
|
+
this._stylesSourceMap[styleSheetId] ||= scriptSourcePromise.then(sourceCode => {
|
|
81
|
+
if (sourceCode instanceof Error) {
|
|
82
|
+
return sourceCode;
|
|
83
|
+
}
|
|
84
|
+
const sourceMapsStartIndex = sourceCode.lastIndexOf(constants_1.CSS_SOURCE_MAP_URL_COMMENT);
|
|
85
|
+
const sourceMapsEndIndex = sourceCode.indexOf("*/", sourceMapsStartIndex);
|
|
86
|
+
// Source maps are not generated for this source file
|
|
87
|
+
if (sourceMapsStartIndex === -1) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
const sourceMapURL = sourceMapsEndIndex === -1
|
|
91
|
+
? sourceCode.slice(sourceMapsStartIndex + constants_1.CSS_SOURCE_MAP_URL_COMMENT.length)
|
|
92
|
+
: sourceCode.slice(sourceMapsStartIndex + constants_1.CSS_SOURCE_MAP_URL_COMMENT.length, sourceMapsEndIndex);
|
|
93
|
+
// If we encounter css stylesheet, that was not reported by "styleSheetAdded"
|
|
94
|
+
// We can only get sourcemaps if they are inlined
|
|
95
|
+
// Otherwise, we can't resolve actual sourcemaps url because we dont know css styles url itself.
|
|
96
|
+
if (!(0, utils_1.isDataProtocol)(sourceMapURL)) {
|
|
97
|
+
return new Error([
|
|
98
|
+
`Missed stylesheet url for stylesheet id ${styleSheetId}.`,
|
|
99
|
+
"Looks like Chrome Devtools 'styleSheetAdded' event was lost",
|
|
100
|
+
"It could happen due to network instability",
|
|
101
|
+
"Switching to inline sourcemaps for CSS will help at the cost of increased RAM usage",
|
|
102
|
+
].join("\n"));
|
|
103
|
+
}
|
|
104
|
+
return (0, utils_1.fetchTextWithBrowserFallback)(sourceMapURL, this._cdp.runtime, this._sessionId).catch((err) => err);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
const totalDependingSourceFiles = new Set();
|
|
108
|
+
const grouppedByStyleSheetCoverage = (0, lodash_1.groupBy)(coverage.ruleUsage, "styleSheetId");
|
|
109
|
+
const styleSheetIds = Object.keys(grouppedByStyleSheetCoverage);
|
|
110
|
+
await Promise.all(styleSheetIds.map(async (styleSheetId) => {
|
|
111
|
+
const sourceMap = await this._stylesSourceMap[styleSheetId];
|
|
112
|
+
const sourceMapUrl = this._styleSheetIdToSourceMapUrl[styleSheetId];
|
|
113
|
+
if (!sourceMap) {
|
|
114
|
+
return;
|
|
65
115
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
: sourceCode.slice(sourceMapsStartIndex + constants_1.CSS_SOURCE_MAP_URL_COMMENT.length, sourceMapsEndIndex);
|
|
69
|
-
const isSourceMapEmbedded = new node_url_1.URL(sourceMapURL).protocol === "data:";
|
|
70
|
-
// If we encounter css stylesheet, that was not reported by "styleSheetAdded"
|
|
71
|
-
// We can only get sourcemaps if they are inlined
|
|
72
|
-
// Otherwise, we can't resolve actual sourcemaps url because we dont know css styles url itself.
|
|
73
|
-
if (!isSourceMapEmbedded) {
|
|
74
|
-
return new Error([
|
|
75
|
-
`Missed stylesheet url for stylesheet id ${styleSheetId}.`,
|
|
76
|
-
"Switching to inline sourcemaps for CSS will help",
|
|
77
|
-
].join("\n"));
|
|
116
|
+
if (sourceMap instanceof Error) {
|
|
117
|
+
throw new Error(`CSS Selectivity: Couldn't load source maps for stylesheet id ${styleSheetId}`, { cause: sourceMap });
|
|
78
118
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
this._cssOnStyleSheetAddedFn && this._cdp.css.off("styleSheetAdded", this._cssOnStyleSheetAddedFn);
|
|
108
|
-
return totalDependingSourceFiles;
|
|
119
|
+
if ((0, utils_1.isCachedOnFs)(sourceMap) && !sourceMapUrl) {
|
|
120
|
+
throw new Error("Assertation failed: souce map url has to present if source maps are fs-cached");
|
|
121
|
+
}
|
|
122
|
+
const sourceMapString = (0, utils_1.isCachedOnFs)(sourceMap)
|
|
123
|
+
? await (0, fs_cache_1.getCachedSelectivityFile)(fs_cache_1.CacheType.Asset, sourceMapUrl)
|
|
124
|
+
: sourceMap;
|
|
125
|
+
if (!sourceMapString) {
|
|
126
|
+
throw new Error(`CSS Selectivity: fs-cache is broken for ${sourceMapUrl}`);
|
|
127
|
+
}
|
|
128
|
+
const rawSourceMap = (0, utils_1.patchSourceMapSources)(JSON.parse(sourceMapString), this._sourceRoot);
|
|
129
|
+
// We could check "if stylesheet was used" with utils.extractSourceFilesDeps
|
|
130
|
+
// But we dont, because if stylesheet was not used, it could be used after change
|
|
131
|
+
// So its safe to think "if stylesheet was loaded, it was used"
|
|
132
|
+
rawSourceMap.sources.forEach(sourceFilePath => {
|
|
133
|
+
// "Each entry is either a string that is a (potentially relative) URL", so we are using posix.jojn
|
|
134
|
+
// https://tc39.es/ecma426/#sec-source-map-format
|
|
135
|
+
// Except for file path with protocol ("turbopack://", "file://")
|
|
136
|
+
const sourceRootBasedPath = (0, utils_1.hasProtocol)(sourceFilePath)
|
|
137
|
+
? sourceFilePath
|
|
138
|
+
: node_path_1.default.posix.join(rawSourceMap.sourceRoot || "", sourceFilePath);
|
|
139
|
+
totalDependingSourceFiles.add(sourceRootBasedPath);
|
|
140
|
+
});
|
|
141
|
+
}));
|
|
142
|
+
return totalDependingSourceFiles;
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
this._cssOnStyleSheetAddedFn && this._cdp.css.off("styleSheetAdded", this._cssOnStyleSheetAddedFn);
|
|
146
|
+
}
|
|
109
147
|
}
|
|
110
148
|
}
|
|
111
149
|
exports.CSSSelectivity = CSSSelectivity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-selectivity.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/css-selectivity.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAiC;AACjC,0DAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"css-selectivity.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/css-selectivity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const CacheType: {
|
|
2
|
+
readonly TestFile: "t";
|
|
3
|
+
readonly Asset: "a";
|
|
4
|
+
};
|
|
5
|
+
type CacheTypeValue = (typeof CacheType)[keyof typeof CacheType];
|
|
6
|
+
export declare const hasCachedSelectivityFile: (cacheType: CacheTypeValue, key: string) => Promise<boolean>;
|
|
7
|
+
export declare const getCachedSelectivityFile: (cacheType: CacheTypeValue, key: string) => Promise<string | null>;
|
|
8
|
+
export declare const setCachedSelectivityFile: (cacheType: CacheTypeValue, key: string, utf8Contents: string) => Promise<void>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.setCachedSelectivityFile = exports.getCachedSelectivityFile = exports.hasCachedSelectivityFile = exports.CacheType = void 0;
|
|
7
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const proper_lockfile_1 = __importDefault(require("proper-lockfile"));
|
|
10
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
11
|
+
const crypto_1 = require("../../../utils/crypto");
|
|
12
|
+
const constants_1 = require("./constants");
|
|
13
|
+
exports.CacheType = {
|
|
14
|
+
TestFile: "t",
|
|
15
|
+
Asset: "a",
|
|
16
|
+
};
|
|
17
|
+
// Cache is considered fresh if it was created after process start
|
|
18
|
+
const processStartTime = Number(new Date());
|
|
19
|
+
const tmpDir = node_path_1.default.join(node_os_1.default.tmpdir(), constants_1.SELECTIVITY_CACHE_DIRECTIRY);
|
|
20
|
+
const ensureSelectivityCacheDirectory = async () => {
|
|
21
|
+
await fs_extra_1.default.ensureDir(tmpDir);
|
|
22
|
+
};
|
|
23
|
+
const wasModifiedAfterProcessStart = async (flagFilePath) => {
|
|
24
|
+
try {
|
|
25
|
+
const stats = await fs_extra_1.default.stat(flagFilePath);
|
|
26
|
+
return stats.mtimeMs >= processStartTime;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const hasCachedSelectivityFile = async (cacheType, key) => {
|
|
33
|
+
const hashName = cacheType + (0, crypto_1.getMD5)(key);
|
|
34
|
+
const cacheFilePath = node_path_1.default.join(tmpDir, hashName);
|
|
35
|
+
const flagFilePath = cacheFilePath + constants_1.SELECTIVITY_CACHE_READY_SUFFIX;
|
|
36
|
+
return wasModifiedAfterProcessStart(flagFilePath);
|
|
37
|
+
};
|
|
38
|
+
exports.hasCachedSelectivityFile = hasCachedSelectivityFile;
|
|
39
|
+
const getCachedSelectivityFile = async (cacheType, key) => {
|
|
40
|
+
const hashName = cacheType + (0, crypto_1.getMD5)(key);
|
|
41
|
+
const cacheFilePath = node_path_1.default.join(tmpDir, hashName);
|
|
42
|
+
const flagFilePath = cacheFilePath + constants_1.SELECTIVITY_CACHE_READY_SUFFIX;
|
|
43
|
+
if (await wasModifiedAfterProcessStart(flagFilePath)) {
|
|
44
|
+
const cacheContents = await fs_extra_1.default.readFile(cacheFilePath, "utf8").catch(() => null);
|
|
45
|
+
return cacheContents;
|
|
46
|
+
}
|
|
47
|
+
// Writing cache right now, should wait a little bit
|
|
48
|
+
if (await wasModifiedAfterProcessStart(cacheFilePath)) {
|
|
49
|
+
for (let i = 0; i < 10; i++) {
|
|
50
|
+
if (await wasModifiedAfterProcessStart(flagFilePath)) {
|
|
51
|
+
const cacheContents = await fs_extra_1.default.readFile(cacheFilePath, "utf8").catch(() => null);
|
|
52
|
+
return cacheContents;
|
|
53
|
+
}
|
|
54
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
};
|
|
59
|
+
exports.getCachedSelectivityFile = getCachedSelectivityFile;
|
|
60
|
+
const setCachedSelectivityFile = async (cacheType, key, utf8Contents) => {
|
|
61
|
+
const hashName = cacheType + (0, crypto_1.getMD5)(key);
|
|
62
|
+
const cacheFilePath = node_path_1.default.join(tmpDir, hashName);
|
|
63
|
+
const flagFilePath = cacheFilePath + constants_1.SELECTIVITY_CACHE_READY_SUFFIX;
|
|
64
|
+
// Cache was already written
|
|
65
|
+
if (await wasModifiedAfterProcessStart(flagFilePath)) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
await ensureSelectivityCacheDirectory();
|
|
69
|
+
const releaseLock = await proper_lockfile_1.default
|
|
70
|
+
.lock(flagFilePath, {
|
|
71
|
+
stale: 5000,
|
|
72
|
+
update: 1000,
|
|
73
|
+
retries: { minTimeout: 50, maxTimeout: 50, retries: 1 },
|
|
74
|
+
realpath: false,
|
|
75
|
+
})
|
|
76
|
+
.catch(() => null);
|
|
77
|
+
// Other process already aquired writing-lock
|
|
78
|
+
if (!releaseLock) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Cache was written while trying to get lock
|
|
82
|
+
if (await wasModifiedAfterProcessStart(flagFilePath)) {
|
|
83
|
+
await releaseLock();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
await fs_extra_1.default.writeFile(cacheFilePath, utf8Contents, { encoding: "utf8" }).catch(cause => {
|
|
88
|
+
throw new Error(`Couldn't write cache to "${cacheFilePath}"`, { cause });
|
|
89
|
+
});
|
|
90
|
+
// Using "writeFile" to trigger "mtime" update even if file exists
|
|
91
|
+
await fs_extra_1.default.writeFile(flagFilePath, "").catch(cause => {
|
|
92
|
+
throw new Error(`Couldn't mark cache as fresh at "${cacheFilePath}"`, { cause });
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
await releaseLock();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
exports.setCachedSelectivityFile = setCachedSelectivityFile;
|
|
100
|
+
//# sourceMappingURL=fs-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-cache.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/fs-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ const calculateFileMd5Hash = (filePath) => new Promise((resolve, reject) => {
|
|
|
35
35
|
const fileReadStream = node_fs_1.default.createReadStream(filePath);
|
|
36
36
|
fileReadStream.on("data", chunk => hash.update(chunk));
|
|
37
37
|
fileReadStream.on("end", () => resolve(hash.digest("hex")));
|
|
38
|
-
fileReadStream.on("error",
|
|
38
|
+
fileReadStream.on("error", cause => reject(new Error(`Selectivity: Couldn't calculate hash for ${filePath}`, { cause })));
|
|
39
39
|
});
|
|
40
40
|
class HashProvider {
|
|
41
41
|
async calculateForFile(filePath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-provider.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/hash-provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA6B;AAC7B,8DAAiC;AACjC,sDAAyB;AAEzB,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAmB,EAAE,CAC/D,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC5B,MAAM,IAAI,GAAG,qBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,iBAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAErD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5D,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hash-provider.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/hash-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,7 +59,13 @@ const startSelectivity = async (browser) => {
|
|
|
59
59
|
const sessionId = await cdpTaget.attachToTarget(cdpTargetId).then(r => r.sessionId);
|
|
60
60
|
const cssSelectivity = new css_selectivity_1.CSSSelectivity(browser.cdp, sessionId, sourceRoot);
|
|
61
61
|
const jsSelectivity = new js_selectivity_1.JSSelectivity(browser.cdp, sessionId, sourceRoot);
|
|
62
|
-
await Promise.
|
|
62
|
+
await Promise.allSettled([cssSelectivity.start(), jsSelectivity.start()]).then(async ([css, js]) => {
|
|
63
|
+
if (css.status === "rejected" || js.status === "rejected") {
|
|
64
|
+
await Promise.all([cssSelectivity.stop(true), jsSelectivity.stop(true)]);
|
|
65
|
+
const originalError = css.status === "rejected" ? css.reason : js.status === "rejected" ? js.reason : "unknown reason";
|
|
66
|
+
throw new Error("Selectivity: Couldn't start selectivity", { cause: originalError });
|
|
67
|
+
}
|
|
68
|
+
});
|
|
63
69
|
/** @param drop only performs cleanup without writing anything. Should be "true" if test is failed */
|
|
64
70
|
return async function stopSelectivity(test, drop) {
|
|
65
71
|
const [cssDependencies, jsDependencies] = await Promise.all([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export declare class JSSelectivity {
|
|
|
8
8
|
private _debuggerOnScriptParsedFn;
|
|
9
9
|
private _scriptsSource;
|
|
10
10
|
private _scriptsSourceMap;
|
|
11
|
+
private _scriptIdToSourceMapUrl;
|
|
11
12
|
constructor(cdp: CDP, sessionId: CDPSessionId, sourceRoot?: string);
|
|
12
13
|
private _processScript;
|
|
13
14
|
start(): Promise<void>;
|