testplane 8.35.1 → 8.35.2

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.
Files changed (47) hide show
  1. package/build/package.json +3 -1
  2. package/build/src/browser/cdp/selectivity/debug.d.ts +2 -0
  3. package/build/src/browser/cdp/selectivity/debug.js +9 -0
  4. package/build/src/browser/cdp/selectivity/debug.js.map +1 -0
  5. package/build/src/browser/cdp/selectivity/hash-provider.d.ts +6 -0
  6. package/build/src/browser/cdp/selectivity/hash-provider.js +81 -0
  7. package/build/src/browser/cdp/selectivity/hash-provider.js.map +1 -0
  8. package/build/src/browser/cdp/selectivity/hash-reader.d.ts +17 -0
  9. package/build/src/browser/cdp/selectivity/hash-reader.js +70 -0
  10. package/build/src/browser/cdp/selectivity/hash-reader.js.map +1 -0
  11. package/build/src/browser/cdp/selectivity/{file-hash-writer.d.ts → hash-writer.d.ts} +7 -6
  12. package/build/src/browser/cdp/selectivity/hash-writer.js +141 -0
  13. package/build/src/browser/cdp/selectivity/hash-writer.js.map +1 -0
  14. package/build/src/browser/cdp/selectivity/index.d.ts +11 -0
  15. package/build/src/browser/cdp/selectivity/index.js +100 -4
  16. package/build/src/browser/cdp/selectivity/index.js.map +1 -1
  17. package/build/src/browser/cdp/selectivity/test-dependencies-reader.d.ts +10 -0
  18. package/build/src/browser/cdp/selectivity/test-dependencies-reader.js +41 -0
  19. package/build/src/browser/cdp/selectivity/test-dependencies-reader.js.map +1 -0
  20. package/build/src/browser/cdp/selectivity/test-dependencies-writer.js +22 -11
  21. package/build/src/browser/cdp/selectivity/test-dependencies-writer.js.map +1 -1
  22. package/build/src/browser/cdp/selectivity/testplane-selectivity.d.ts +1 -0
  23. package/build/src/browser/cdp/selectivity/testplane-selectivity.js +29 -9
  24. package/build/src/browser/cdp/selectivity/testplane-selectivity.js.map +1 -1
  25. package/build/src/browser/cdp/selectivity/types.d.ts +5 -0
  26. package/build/src/browser/cdp/selectivity/utils.d.ts +8 -1
  27. package/build/src/browser/cdp/selectivity/utils.js +66 -3
  28. package/build/src/browser/cdp/selectivity/utils.js.map +1 -1
  29. package/build/src/bundle/cjs/index.js +207 -108
  30. package/build/src/config/defaults.d.ts +1 -0
  31. package/build/src/config/defaults.js +1 -0
  32. package/build/src/config/defaults.js.map +1 -1
  33. package/build/src/config/types.d.ts +1 -0
  34. package/build/src/runner/index.js +24 -1
  35. package/build/src/runner/index.js.map +1 -1
  36. package/build/src/testplane.js +4 -0
  37. package/build/src/testplane.js.map +1 -1
  38. package/build/src/utils/typescript.js +3 -0
  39. package/build/src/utils/typescript.js.map +1 -1
  40. package/build/src/worker/runner/index.js +7 -5
  41. package/build/src/worker/runner/index.js.map +1 -1
  42. package/package.json +3 -1
  43. package/build/src/browser/cdp/selectivity/file-hash-provider.d.ts +0 -4
  44. package/build/src/browser/cdp/selectivity/file-hash-provider.js +0 -28
  45. package/build/src/browser/cdp/selectivity/file-hash-provider.js.map +0 -1
  46. package/build/src/browser/cdp/selectivity/file-hash-writer.js +0 -123
  47. package/build/src/browser/cdp/selectivity/file-hash-writer.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testplane",
3
- "version": "8.35.1",
3
+ "version": "8.35.2",
4
4
  "description": "Tests framework based on mocha and wdio",
5
5
  "main": "build/src/index.js",
6
6
  "files": [
@@ -98,6 +98,7 @@
98
98
  "pirates": "4.0.7",
99
99
  "plugins-loader": "1.3.4",
100
100
  "png-validator": "1.1.0",
101
+ "proper-lockfile": "4.1.2",
101
102
  "recast": "0.23.6",
102
103
  "resolve.exports": "2.0.2",
103
104
  "sizzle": "2.3.6",
@@ -138,6 +139,7 @@
138
139
  "@types/micromatch": "4.0.9",
139
140
  "@types/mocha": "10.0.1",
140
141
  "@types/node": "18.19.3",
142
+ "@types/proper-lockfile": "4.1.4",
141
143
  "@types/proxyquire": "1.3.28",
142
144
  "@types/set-cookie-parser": "2.4.10",
143
145
  "@types/sinon": "17.0.1",
@@ -0,0 +1,2 @@
1
+ import debugModule from "debug";
2
+ export declare const debugSelectivity: debugModule.Debugger;
@@ -0,0 +1,9 @@
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.debugSelectivity = void 0;
7
+ const debug_1 = __importDefault(require("debug"));
8
+ exports.debugSelectivity = (0, debug_1.default)("testplane:selectivity");
9
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/debug.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAgC;AAEnB,QAAA,gBAAgB,GAAG,IAAA,eAAW,EAAC,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare class HashProvider {
2
+ private static readonly _fileHashStore;
3
+ private static readonly _patternHashStore;
4
+ calculateForFile(filePath: string): Promise<string>;
5
+ calculateForPattern(pattern: string): Promise<string>;
6
+ }
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.HashProvider = void 0;
30
+ const node_path_1 = __importDefault(require("node:path"));
31
+ const node_crypto_1 = __importDefault(require("node:crypto"));
32
+ const node_fs_1 = __importDefault(require("node:fs"));
33
+ const calculateFileMd5Hash = (filePath) => new Promise((resolve, reject) => {
34
+ const hash = node_crypto_1.default.createHash("md5");
35
+ const fileReadStream = node_fs_1.default.createReadStream(filePath);
36
+ fileReadStream.on("data", chunk => hash.update(chunk));
37
+ fileReadStream.on("end", () => resolve(hash.digest("hex")));
38
+ fileReadStream.on("error", err => reject(new Error(`Selectivity: Couldn't calculate hash for ${filePath}: ${err}`)));
39
+ });
40
+ class HashProvider {
41
+ async calculateForFile(filePath) {
42
+ const cachedHash = HashProvider._fileHashStore.get(filePath);
43
+ if (cachedHash) {
44
+ return cachedHash;
45
+ }
46
+ const hashPromise = calculateFileMd5Hash(filePath);
47
+ HashProvider._fileHashStore.set(filePath, hashPromise);
48
+ return hashPromise;
49
+ }
50
+ async calculateForPattern(pattern) {
51
+ const cachedHash = HashProvider._patternHashStore.get(pattern);
52
+ if (cachedHash) {
53
+ return cachedHash;
54
+ }
55
+ const calculatePatternHashPromise = (async () => {
56
+ const globExtra = await Promise.resolve().then(() => __importStar(require("../../../bundle/glob-extra")));
57
+ const cwd = process.cwd();
58
+ const files = await globExtra.expandPaths(pattern, { root: cwd });
59
+ const filesSorted = files.sort();
60
+ const hash = node_crypto_1.default.createHash("md5");
61
+ let promiseQue = Promise.resolve();
62
+ for (const filePath of filesSorted) {
63
+ const fileHashPromise = calculateFileMd5Hash(filePath);
64
+ const cwdRelativePath = node_path_1.default.relative(cwd, filePath);
65
+ const posixRelativePath = node_path_1.default.sep === node_path_1.default.posix.sep
66
+ ? cwdRelativePath
67
+ : cwdRelativePath.replaceAll(node_path_1.default.sep, node_path_1.default.posix.sep);
68
+ promiseQue = promiseQue.then(() => fileHashPromise.then(fileHash => {
69
+ hash.update(`/${posixRelativePath}/${fileHash}`);
70
+ }));
71
+ }
72
+ return promiseQue.then(() => hash.digest("hex"));
73
+ })();
74
+ HashProvider._patternHashStore.set(pattern, calculatePatternHashPromise);
75
+ return calculatePatternHashPromise;
76
+ }
77
+ }
78
+ exports.HashProvider = HashProvider;
79
+ HashProvider._fileHashStore = new Map();
80
+ HashProvider._patternHashStore = new Map();
81
+ //# sourceMappingURL=hash-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-provider.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/hash-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /// <reference types="lodash" />
2
+ import type { NormalizedDependencies, SelectivityCompressionType } from "./types";
3
+ export declare class HashReader {
4
+ private readonly _hashProvider;
5
+ private readonly _selectivityHashesPath;
6
+ private readonly _compresion;
7
+ private _hashFileContents;
8
+ constructor(selectivityRootPath: string, compression: SelectivityCompressionType);
9
+ private _getHashFileContents;
10
+ private _readHashForFile;
11
+ private _readHashForModule;
12
+ private _readHashForPattern;
13
+ patternHasChanged(pattern: string): Promise<boolean>;
14
+ /** @returns changed deps or null, if nothing changed */
15
+ getTestChangedDeps(testDeps: NormalizedDependencies): Promise<NormalizedDependencies | null>;
16
+ }
17
+ export declare const getHashReader: ((selectivityRootPath: string, compression: SelectivityCompressionType) => HashReader) & import("lodash").MemoizedFunction;
@@ -0,0 +1,70 @@
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.getHashReader = exports.HashReader = void 0;
7
+ const lodash_1 = require("lodash");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const hash_provider_1 = require("./hash-provider");
10
+ const utils_1 = require("./utils");
11
+ const debug_1 = require("./debug");
12
+ class HashReader {
13
+ constructor(selectivityRootPath, compression) {
14
+ this._hashProvider = new hash_provider_1.HashProvider();
15
+ this._hashFileContents = null;
16
+ this._selectivityHashesPath = (0, utils_1.getSelectivityHashesPath)(selectivityRootPath);
17
+ this._compresion = compression;
18
+ }
19
+ _getHashFileContents() {
20
+ if (this._hashFileContents) {
21
+ return this._hashFileContents;
22
+ }
23
+ return (this._hashFileContents = (0, utils_1.readHashFileContents)(this._selectivityHashesPath, this._compresion));
24
+ }
25
+ _readHashForFile(filePath) {
26
+ return this._getHashFileContents().then(hashFileContents => hashFileContents.files[filePath]);
27
+ }
28
+ _readHashForModule(moduleName) {
29
+ return this._getHashFileContents().then(hashFileContents => hashFileContents.modules[moduleName]);
30
+ }
31
+ _readHashForPattern(pattern) {
32
+ return this._getHashFileContents().then(hashFileContents => hashFileContents.patterns[pattern]);
33
+ }
34
+ async patternHasChanged(pattern) {
35
+ const [cachedPatternHash, calculatedPatternHash] = await Promise.all([
36
+ this._readHashForPattern(pattern),
37
+ this._hashProvider.calculateForPattern(pattern),
38
+ ]);
39
+ return cachedPatternHash !== calculatedPatternHash;
40
+ }
41
+ /** @returns changed deps or null, if nothing changed */
42
+ async getTestChangedDeps(testDeps) {
43
+ const depFileTypes = ["css", "js", "modules"];
44
+ const result = { css: [], js: [], modules: [] };
45
+ let hasAnythingChanged = false;
46
+ const checkForDepFileType = async (depFileType) => {
47
+ await Promise.all(testDeps[depFileType].map(async (filePath) => {
48
+ const adjustedFilePath = depFileType === "modules" ? node_path_1.default.join(filePath, "package.json") : filePath;
49
+ const [cachedFileHash, calculatedFileHash] = await Promise.all([
50
+ depFileType === "modules" ? this._readHashForModule(filePath) : this._readHashForFile(filePath),
51
+ this._hashProvider.calculateForFile(adjustedFilePath).catch((err) => err),
52
+ ]);
53
+ if (calculatedFileHash instanceof Error) {
54
+ (0, debug_1.debugSelectivity)(`Couldn't calculate hash for ${adjustedFilePath}: ${calculatedFileHash.message}`);
55
+ }
56
+ if (cachedFileHash !== calculatedFileHash) {
57
+ hasAnythingChanged = true;
58
+ result[depFileType].push(filePath);
59
+ }
60
+ }));
61
+ };
62
+ await Promise.all(depFileTypes.map(depFileType => checkForDepFileType(depFileType)));
63
+ return hasAnythingChanged ? result : null;
64
+ }
65
+ }
66
+ exports.HashReader = HashReader;
67
+ exports.getHashReader = (0, lodash_1.memoize)((selectivityRootPath, compression) => {
68
+ return new HashReader(selectivityRootPath, compression);
69
+ }, (selectivityRootPath, compression) => `${selectivityRootPath}#${compression}`);
70
+ //# sourceMappingURL=hash-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-reader.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/hash-reader.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAiC;AACjC,0DAA6B;AAC7B,mDAA+C;AAC/C,mCAAyE;AACzE,mCAA2C;AAG3C,MAAa,UAAU;IAMnB,YAAY,mBAA2B,EAAE,WAAuC;QAL/D,kBAAa,GAAG,IAAI,4BAAY,EAAE,CAAC;QAG5C,sBAAiB,GAAqC,IAAI,CAAC;QAG/D,IAAI,CAAC,sBAAsB,GAAG,IAAA,gCAAwB,EAAC,mBAAmB,CAAC,CAAC;QAC5E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAEO,oBAAoB;QACxB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAClC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAA,4BAAoB,EAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1G,CAAC;IAEO,gBAAgB,CAAC,QAAgB;QACrC,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClG,CAAC;IAEO,kBAAkB,CAAC,UAAkB;QACzC,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACtG,CAAC;IAEO,mBAAmB,CAAC,OAAe;QACvC,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACpG,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe;QACnC,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,CAAC;SAClD,CAAC,CAAC;QAEH,OAAO,iBAAiB,KAAK,qBAAqB,CAAC;IACvD,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,kBAAkB,CAAC,QAAgC;QACrD,MAAM,YAAY,GAAwC,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAU,CAAC;QAC5F,MAAM,MAAM,GAA2B,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAExE,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,MAAM,mBAAmB,GAAG,KAAK,EAAE,WAAyC,EAAiB,EAAE;YAC3F,MAAM,OAAO,CAAC,GAAG,CACb,QAAQ,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE;gBACvC,MAAM,gBAAgB,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACpG,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC3D,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;oBAC/F,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC;iBACnF,CAAC,CAAC;gBAEH,IAAI,kBAAkB,YAAY,KAAK,EAAE,CAAC;oBACtC,IAAA,wBAAgB,EACZ,+BAA+B,gBAAgB,KAAK,kBAAkB,CAAC,OAAO,EAAE,CACnF,CAAC;gBACN,CAAC;gBAED,IAAI,cAAc,KAAK,kBAAkB,EAAE,CAAC;oBACxC,kBAAkB,GAAG,IAAI,CAAC;oBAC1B,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvC,CAAC;YACL,CAAC,CAAC,CACL,CAAC;QACN,CAAC,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAErF,OAAO,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;CACJ;AA1ED,gCA0EC;AAEY,QAAA,aAAa,GAAG,IAAA,gBAAO,EAChC,CAAC,mBAA2B,EAAE,WAAuC,EAAc,EAAE;IACjF,OAAO,IAAI,UAAU,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;AAC5D,CAAC,EACD,CAAC,mBAAmB,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,mBAAmB,IAAI,WAAW,EAAE,CAChF,CAAC"}
@@ -1,17 +1,18 @@
1
1
  /// <reference types="lodash" />
2
2
  import type { NormalizedDependencies, SelectivityCompressionType } from "./types";
3
- export declare class FileHashWriter {
4
- private readonly _fileHashProvider;
3
+ export declare class HashWriter {
4
+ private readonly _hashProvider;
5
5
  private readonly _stagedFileHashes;
6
6
  private readonly _stagedModuleHashes;
7
+ private readonly _stagedPatternHashes;
7
8
  private readonly _selectivityHashesPath;
8
9
  private readonly _compresion;
9
- private _hashFileContents;
10
10
  constructor(selectivityRootPath: string, compression: SelectivityCompressionType);
11
11
  private _addFileDependency;
12
+ private _addPatternDependency;
12
13
  private _addModuleDependency;
13
- private _ensureInited;
14
- add(dependencies: NormalizedDependencies): void;
14
+ addPatternDependencyHash(dependencyPatterns: string): void;
15
+ addTestDependencyHashes(dependencies: NormalizedDependencies): void;
15
16
  commit(): Promise<void>;
16
17
  }
17
- export declare const getFileHashWriter: ((selectivityRootPath: string, compression: SelectivityCompressionType) => FileHashWriter) & import("lodash").MemoizedFunction;
18
+ export declare const getHashWriter: ((selectivityRootPath: string, compression: SelectivityCompressionType) => HashWriter) & import("lodash").MemoizedFunction;
@@ -0,0 +1,141 @@
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.getHashWriter = exports.HashWriter = void 0;
7
+ const lodash_1 = require("lodash");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const proper_lockfile_1 = __importDefault(require("proper-lockfile"));
10
+ const hash_provider_1 = require("./hash-provider");
11
+ const utils_1 = require("./utils");
12
+ const json_utils_1 = require("./json-utils");
13
+ class HashWriter {
14
+ constructor(selectivityRootPath, compression) {
15
+ this._hashProvider = new hash_provider_1.HashProvider();
16
+ // "null" - successfully writed, "Promise<string>" - file/module hash, "Promise<Error>" - calculating hash error
17
+ this._stagedFileHashes = new Map();
18
+ this._stagedModuleHashes = new Map();
19
+ this._stagedPatternHashes = new Map();
20
+ this._selectivityHashesPath = (0, utils_1.getSelectivityHashesPath)(selectivityRootPath);
21
+ this._compresion = compression;
22
+ }
23
+ _addFileDependency(filePath) {
24
+ if (this._stagedFileHashes.has(filePath)) {
25
+ return;
26
+ }
27
+ const value = this._hashProvider.calculateForFile(filePath).catch(err => err);
28
+ this._stagedFileHashes.set(filePath, value);
29
+ }
30
+ _addPatternDependency(pattern) {
31
+ if (this._stagedPatternHashes.has(pattern)) {
32
+ return;
33
+ }
34
+ const value = this._hashProvider.calculateForPattern(pattern).catch(err => err);
35
+ this._stagedPatternHashes.set(pattern, value);
36
+ }
37
+ _addModuleDependency(modulePath) {
38
+ if (this._stagedModuleHashes.has(modulePath)) {
39
+ return;
40
+ }
41
+ const filePath = node_path_1.default.join(modulePath, "package.json");
42
+ const value = this._hashProvider.calculateForFile(filePath).catch(err => err);
43
+ this._stagedModuleHashes.set(modulePath, value);
44
+ }
45
+ addPatternDependencyHash(dependencyPatterns) {
46
+ return this._addPatternDependency(dependencyPatterns);
47
+ }
48
+ addTestDependencyHashes(dependencies) {
49
+ dependencies.css.forEach(dependency => this._addFileDependency(dependency));
50
+ dependencies.js.forEach(dependency => this._addFileDependency(dependency));
51
+ dependencies.modules.forEach(dependency => this._addModuleDependency(dependency));
52
+ }
53
+ async commit() {
54
+ const hasStaged = Boolean(this._stagedFileHashes.size || this._stagedModuleHashes.size || this._stagedPatternHashes.size);
55
+ if (!hasStaged) {
56
+ return;
57
+ }
58
+ const stagedModuleNames = Array.from(this._stagedModuleHashes.keys());
59
+ const stagedFileNames = Array.from(this._stagedFileHashes.keys());
60
+ const stagedPatternNames = Array.from(this._stagedPatternHashes.keys());
61
+ const filterMatchingHashes = async (keys, src, dest) => {
62
+ const remainingKeys = [];
63
+ for (const key of keys) {
64
+ const oldValue = dest[key];
65
+ const newValue = await src.get(key);
66
+ if (newValue === null) {
67
+ continue;
68
+ }
69
+ if (newValue === oldValue) {
70
+ src.set(key, null);
71
+ }
72
+ else {
73
+ remainingKeys.push(key);
74
+ }
75
+ }
76
+ return remainingKeys;
77
+ };
78
+ const writeTo = async (keys, src, dest) => {
79
+ let needsReSort = false;
80
+ for (const key of keys) {
81
+ const hash = await src.get(key);
82
+ if (!hash) {
83
+ continue;
84
+ }
85
+ if (hash instanceof Error) {
86
+ throw hash;
87
+ }
88
+ needsReSort = needsReSort || !Object.hasOwn(dest, key);
89
+ dest[key] = hash;
90
+ }
91
+ if (needsReSort) {
92
+ (0, utils_1.shallowSortObject)(dest);
93
+ }
94
+ };
95
+ const markAsCommited = (keys, src) => {
96
+ keys.forEach(key => src.set(key, null));
97
+ };
98
+ // Waiting for hashes to be calculated before locking file to reduce lock time
99
+ await Promise.all([
100
+ ...Object.values(this._stagedFileHashes),
101
+ ...Object.values(this._stagedModuleHashes),
102
+ ...Object.values(this._stagedPatternHashes),
103
+ ]);
104
+ const releaseLock = await proper_lockfile_1.default.lock(this._selectivityHashesPath, {
105
+ stale: 5000,
106
+ update: 1000,
107
+ retries: { minTimeout: 100, maxTimeout: 1000, retries: 15 },
108
+ realpath: false,
109
+ });
110
+ try {
111
+ const existingHashesContent = await (0, utils_1.readHashFileContents)(this._selectivityHashesPath, this._compresion);
112
+ const [updatedModules, updatedFiles, updatedPatterns] = await Promise.all([
113
+ filterMatchingHashes(stagedModuleNames, this._stagedModuleHashes, existingHashesContent.modules),
114
+ filterMatchingHashes(stagedFileNames, this._stagedFileHashes, existingHashesContent.files),
115
+ filterMatchingHashes(stagedPatternNames, this._stagedPatternHashes, existingHashesContent.patterns),
116
+ ]);
117
+ if (!updatedFiles.length && !updatedModules.length && !updatedPatterns.length) {
118
+ await releaseLock();
119
+ return;
120
+ }
121
+ await Promise.all([
122
+ writeTo(updatedModules, this._stagedModuleHashes, existingHashesContent.modules),
123
+ writeTo(updatedFiles, this._stagedFileHashes, existingHashesContent.files),
124
+ writeTo(updatedPatterns, this._stagedPatternHashes, existingHashesContent.patterns),
125
+ ]);
126
+ await (0, json_utils_1.writeJsonWithCompression)(this._selectivityHashesPath, existingHashesContent, this._compresion);
127
+ await releaseLock();
128
+ markAsCommited(updatedModules, this._stagedModuleHashes);
129
+ markAsCommited(updatedFiles, this._stagedFileHashes);
130
+ }
131
+ catch (err) {
132
+ await releaseLock();
133
+ throw err;
134
+ }
135
+ }
136
+ }
137
+ exports.HashWriter = HashWriter;
138
+ exports.getHashWriter = (0, lodash_1.memoize)((selectivityRootPath, compression) => {
139
+ return new HashWriter(selectivityRootPath, compression);
140
+ }, (selectivityRootPath, compression) => `${selectivityRootPath}#${compression}`);
141
+ //# sourceMappingURL=hash-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-writer.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/hash-writer.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,16 @@
1
+ import _ from "lodash";
1
2
  import type { ExistingBrowser } from "../../existing-browser";
2
3
  import type { Test } from "../../../types";
4
+ import type { BrowserConfig } from "../../../config/browser-config";
5
+ import type { Config } from "../../../config";
3
6
  type StopSelectivityFn = (test: Test, shouldWrite: boolean) => Promise<void>;
7
+ /** Called at the start of testplane run per each browser */
8
+ export declare const shouldDisableSelectivity: ((config: BrowserConfig, browserId: string) => Promise<boolean>) & _.MemoizedFunction;
9
+ /**
10
+ * Called at the end of successfull testplane run
11
+ * Not using "Promise.all" here because all hashes are already calculated and cached at the start
12
+ */
13
+ export declare const updateDisableSelectivityPatternsHashes: (config: Config) => Promise<void>;
14
+ export declare const shouldDisableTestBySelectivity: ((config: BrowserConfig, test: Test) => Promise<boolean>) & _.MemoizedFunction;
4
15
  export declare const startSelectivity: (browser: ExistingBrowser) => Promise<StopSelectivityFn>;
5
16
  export {};
@@ -1,13 +1,109 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startSelectivity = void 0;
6
+ exports.startSelectivity = exports.shouldDisableTestBySelectivity = exports.updateDisableSelectivityPatternsHashes = exports.shouldDisableSelectivity = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
4
8
  const css_selectivity_1 = require("./css-selectivity");
5
9
  const js_selectivity_1 = require("./js-selectivity");
6
10
  const test_dependencies_writer_1 = require("./test-dependencies-writer");
7
11
  const utils_1 = require("./utils");
8
- const file_hash_writer_1 = require("./file-hash-writer");
12
+ const hash_writer_1 = require("./hash-writer");
9
13
  const types_1 = require("./types");
10
14
  const testplane_selectivity_1 = require("./testplane-selectivity");
15
+ const hash_reader_1 = require("./hash-reader");
16
+ const debug_1 = require("./debug");
17
+ const test_dependencies_reader_1 = require("./test-dependencies-reader");
18
+ /** Called at the start of testplane run per each browser */
19
+ exports.shouldDisableSelectivity = lodash_1.default.memoize(async (config, browserId) => {
20
+ if (!config.selectivity.enabled) {
21
+ return true;
22
+ }
23
+ if (!config.selectivity.disableSelectivityPatterns.length) {
24
+ return false;
25
+ }
26
+ const hashReader = (0, hash_reader_1.getHashReader)(config.selectivity.testDependenciesPath, config.selectivity.compression);
27
+ return new Promise(resolve => {
28
+ let isSettled = false;
29
+ Promise.all(config.selectivity.disableSelectivityPatterns.map(pattern => {
30
+ return hashReader
31
+ .patternHasChanged(pattern)
32
+ .then(hasChanged => {
33
+ if (hasChanged && !isSettled) {
34
+ isSettled = true;
35
+ (0, debug_1.debugSelectivity)(`Disabling selectivity for ${browserId}: file change by pattern "${pattern}" is detected`);
36
+ resolve(true);
37
+ }
38
+ })
39
+ .catch(err => {
40
+ if (!isSettled) {
41
+ isSettled = true;
42
+ (0, debug_1.debugSelectivity)(`Disabling selectivity for ${browserId}: got an error while checking 'disableSelectivityPatterns': %O`, err);
43
+ resolve(true);
44
+ }
45
+ });
46
+ })).then(() => {
47
+ if (!isSettled) {
48
+ (0, debug_1.debugSelectivity)(`None of 'disableSelectivityPatterns' is changed for ${browserId}`);
49
+ resolve(false);
50
+ }
51
+ });
52
+ });
53
+ }, config => {
54
+ const { enabled, testDependenciesPath, compression, disableSelectivityPatterns } = config.selectivity;
55
+ return enabled
56
+ ? enabled + "#" + testDependenciesPath + "#" + compression + "#" + disableSelectivityPatterns.join("#")
57
+ : "";
58
+ });
59
+ /**
60
+ * Called at the end of successfull testplane run
61
+ * Not using "Promise.all" here because all hashes are already calculated and cached at the start
62
+ */
63
+ const updateDisableSelectivityPatternsHashes = async (config) => {
64
+ const browserIds = config.getBrowserIds();
65
+ for (const browserId of browserIds) {
66
+ const browserConfig = config.forBrowser(browserId);
67
+ const { enabled, testDependenciesPath, compression, disableSelectivityPatterns } = browserConfig.selectivity;
68
+ if (!enabled) {
69
+ continue;
70
+ }
71
+ const hashReader = (0, hash_reader_1.getHashReader)(testDependenciesPath, compression);
72
+ const hashWriter = (0, hash_writer_1.getHashWriter)(testDependenciesPath, compression);
73
+ for (const pattern of disableSelectivityPatterns) {
74
+ const isChanged = await hashReader.patternHasChanged(pattern);
75
+ if (isChanged) {
76
+ hashWriter.addPatternDependencyHash(pattern);
77
+ }
78
+ }
79
+ await hashWriter.commit();
80
+ }
81
+ };
82
+ exports.updateDisableSelectivityPatternsHashes = updateDisableSelectivityPatternsHashes;
83
+ exports.shouldDisableTestBySelectivity = lodash_1.default.memoize(async (config, test) => {
84
+ const { enabled, testDependenciesPath, compression } = config.selectivity;
85
+ if (!enabled) {
86
+ return false;
87
+ }
88
+ const testDepsReader = (0, test_dependencies_reader_1.getTestDependenciesReader)(testDependenciesPath, compression);
89
+ const hashReader = (0, hash_reader_1.getHashReader)(testDependenciesPath, compression);
90
+ const testDeps = await testDepsReader.getFor(test);
91
+ if (!testDeps.js.length) {
92
+ (0, debug_1.debugSelectivity)(`Not disabling "${test.fullTitle()}" as it has no js deps and therefore it was considered as new`);
93
+ return false;
94
+ }
95
+ const changedDeps = await hashReader.getTestChangedDeps(testDeps);
96
+ if (changedDeps) {
97
+ (0, debug_1.debugSelectivity)(`Not disabling "${test.fullTitle()}" as its dependencies were changed: %O`, changedDeps);
98
+ }
99
+ else {
100
+ (0, debug_1.debugSelectivity)(`Disabling "${test.fullTitle()}" as its dependencies were not changed`);
101
+ }
102
+ return !changedDeps;
103
+ }, (config, test) => {
104
+ const { enabled, testDependenciesPath, compression } = config.selectivity;
105
+ return enabled ? enabled + "#" + testDependenciesPath + "#" + compression + "#" + test.id : "";
106
+ });
11
107
  const startSelectivity = async (browser) => {
12
108
  if (!browser.config.selectivity.enabled || !browser.publicAPI.isChromium) {
13
109
  return () => Promise.resolve();
@@ -46,10 +142,10 @@ const startSelectivity = async (browser) => {
46
142
  const testDependenciesPath = browser.config.selectivity.testDependenciesPath;
47
143
  const compression = browser.config.selectivity.compression;
48
144
  const testDependencyWriter = (0, test_dependencies_writer_1.getTestDependenciesWriter)(testDependenciesPath, compression);
49
- const hashWriter = (0, file_hash_writer_1.getFileHashWriter)(testDependenciesPath, compression);
145
+ const hashWriter = (0, hash_writer_1.getHashWriter)(testDependenciesPath, compression);
50
146
  const browserDeps = (0, utils_1.transformSourceDependencies)(cssDependencies, jsDependencies);
51
147
  const testplaneDeps = (0, utils_1.transformSourceDependencies)([], (0, testplane_selectivity_1.getCollectedTestplaneDependencies)());
52
- hashWriter.add((0, utils_1.mergeSourceDependencies)(browserDeps, testplaneDeps));
148
+ hashWriter.addTestDependencyHashes((0, utils_1.mergeSourceDependencies)(browserDeps, testplaneDeps));
53
149
  await Promise.all([testDependencyWriter.saveFor(test, browserDeps, testplaneDeps), hashWriter.commit()]);
54
150
  };
55
151
  };
@@ -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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"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="lodash" />
2
+ import type { Test } from "../../../types";
3
+ import type { NormalizedDependencies, SelectivityCompressionType } from "./types";
4
+ export declare class TestDependenciesReader {
5
+ private readonly _selectivityTestsPath;
6
+ private readonly _compression;
7
+ constructor(selectivityRootPath: string, compression: SelectivityCompressionType);
8
+ getFor(test: Test): Promise<NormalizedDependencies>;
9
+ }
10
+ export declare const getTestDependenciesReader: ((selectivityRootPath: string, compression: SelectivityCompressionType) => TestDependenciesReader) & import("lodash").MemoizedFunction;
@@ -0,0 +1,41 @@
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.getTestDependenciesReader = exports.TestDependenciesReader = void 0;
7
+ const lodash_1 = require("lodash");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const utils_1 = require("./utils");
10
+ class TestDependenciesReader {
11
+ constructor(selectivityRootPath, compression) {
12
+ this._selectivityTestsPath = node_path_1.default.join(selectivityRootPath, "tests");
13
+ this._compression = compression;
14
+ }
15
+ async getFor(test) {
16
+ const testDeps = await (0, utils_1.readTestDependencies)(this._selectivityTestsPath, test, this._compression);
17
+ let result = { css: [], js: [], modules: [] };
18
+ for (const browserId of Object.keys(testDeps)) {
19
+ const depTypes = Object.keys(testDeps[browserId]);
20
+ if (!depTypes.length) {
21
+ continue;
22
+ }
23
+ else if (depTypes.length === 1) {
24
+ result = (0, utils_1.mergeSourceDependencies)(result, testDeps[browserId][depTypes[0]]);
25
+ }
26
+ else {
27
+ let browserDeps = testDeps[browserId][depTypes[0]];
28
+ for (let i = 1; i < depTypes.length; i++) {
29
+ browserDeps = (0, utils_1.mergeSourceDependencies)(browserDeps, testDeps[browserId][depTypes[i]]);
30
+ }
31
+ result = (0, utils_1.mergeSourceDependencies)(result, browserDeps);
32
+ }
33
+ }
34
+ return result;
35
+ }
36
+ }
37
+ exports.TestDependenciesReader = TestDependenciesReader;
38
+ exports.getTestDependenciesReader = (0, lodash_1.memoize)((selectivityRootPath, compression) => {
39
+ return new TestDependenciesReader(selectivityRootPath, compression);
40
+ }, (selectivityRootPath, compression) => `${selectivityRootPath}#${compression}`);
41
+ //# sourceMappingURL=test-dependencies-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-dependencies-reader.js","sourceRoot":"","sources":["../../../../../src/browser/cdp/selectivity/test-dependencies-reader.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAiC;AACjC,0DAA6B;AAC7B,mCAAwE;AAIxE,MAAa,sBAAsB;IAI/B,YAAY,mBAA2B,EAAE,WAAuC;QAC5E,IAAI,CAAC,qBAAqB,GAAG,mBAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAU;QACnB,MAAM,QAAQ,GAAG,MAAM,IAAA,4BAAoB,EAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACjG,IAAI,MAAM,GAA2B,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAEtE,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;YAElD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACnB,SAAS;YACb,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,GAAG,IAAA,+BAAuB,EAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACJ,IAAI,WAAW,GAA2B,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,WAAW,GAAG,IAAA,+BAAuB,EAAC,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzF,CAAC;gBAED,MAAM,GAAG,IAAA,+BAAuB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAjCD,wDAiCC;AAEY,QAAA,yBAAyB,GAAG,IAAA,gBAAO,EAC5C,CAAC,mBAA2B,EAAE,WAAuC,EAA0B,EAAE;IAC7F,OAAO,IAAI,sBAAsB,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;AACxE,CAAC,EACD,CAAC,mBAAmB,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,mBAAmB,IAAI,WAAW,EAAE,CAChF,CAAC"}