@brillout/test-e2e 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/bin.js +2 -0
  2. package/dist/Logs.d.ts +29 -0
  3. package/dist/Logs.js +77 -0
  4. package/dist/buildTs.d.ts +2 -0
  5. package/dist/buildTs.js +22 -0
  6. package/dist/chai/JestChaiExpect.d.ts +2 -0
  7. package/dist/chai/JestChaiExpect.js +27 -0
  8. package/dist/chai/expect.d.ts +2 -0
  9. package/dist/chai/expect.js +30 -0
  10. package/dist/chai/types.d.ts +15 -0
  11. package/dist/chai/types.js +2 -0
  12. package/dist/cli.d.ts +1 -0
  13. package/dist/cli.js +43 -0
  14. package/dist/editFile.d.ts +6 -0
  15. package/dist/editFile.js +49 -0
  16. package/dist/findTestFiles.d.ts +3 -0
  17. package/dist/findTestFiles.js +26 -0
  18. package/dist/getBrowser.d.ts +3 -0
  19. package/dist/getBrowser.js +15 -0
  20. package/dist/getTestInfo.d.ts +21 -0
  21. package/dist/getTestInfo.js +14 -0
  22. package/dist/index.d.ts +4 -0
  23. package/dist/index.js +24 -0
  24. package/dist/logProgress.d.ts +2 -0
  25. package/dist/logProgress.js +41 -0
  26. package/dist/page.d.ts +3 -0
  27. package/dist/page.js +13 -0
  28. package/dist/runTestSuites.d.ts +6 -0
  29. package/dist/runTestSuites.js +41 -0
  30. package/dist/runTests.d.ts +3 -0
  31. package/dist/runTests.js +111 -0
  32. package/dist/setup.d.ts +36 -0
  33. package/dist/setup.js +465 -0
  34. package/dist/test.d.ts +2 -0
  35. package/dist/test.js +15 -0
  36. package/dist/utils/assert.d.ts +14 -0
  37. package/dist/utils/assert.js +72 -0
  38. package/dist/utils/createErrorWithCleanStackTrace.d.ts +2 -0
  39. package/dist/utils/createErrorWithCleanStackTrace.js +43 -0
  40. package/dist/utils/findFiles.d.ts +7 -0
  41. package/dist/utils/findFiles.js +46 -0
  42. package/dist/utils/humanizeTime.d.ts +1 -0
  43. package/dist/utils/humanizeTime.js +15 -0
  44. package/dist/utils/index.d.ts +6 -0
  45. package/dist/utils/index.js +22 -0
  46. package/dist/utils/isTTY.d.ts +1 -0
  47. package/dist/utils/isTTY.js +5 -0
  48. package/dist/utils/projectInfo.d.ts +5 -0
  49. package/dist/utils/projectInfo.js +8 -0
  50. package/dist/utils/runCommand.d.ts +6 -0
  51. package/dist/utils/runCommand.js +46 -0
  52. package/dist/utils/sleep.d.ts +2 -0
  53. package/dist/utils/sleep.js +7 -0
  54. package/package.json +37 -0
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.projectErrorPrefix = exports.getProjectError = exports.assertInfo = exports.assertWarning = exports.assertUsage = exports.assert = void 0;
4
+ const createErrorWithCleanStackTrace_1 = require("./createErrorWithCleanStackTrace");
5
+ const projectInfo_1 = require("./projectInfo");
6
+ const errorPrefix = `[${projectInfo_1.projectInfo.npmPackageName}]`;
7
+ exports.projectErrorPrefix = errorPrefix;
8
+ const internalErrorPrefix = `${errorPrefix}[Bug]`;
9
+ const usageErrorPrefix = `${errorPrefix}[Wrong Usage]`;
10
+ const warningPrefix = `${errorPrefix}[Warning]`;
11
+ const infoPrefix = `${errorPrefix}[Info]`;
12
+ const numberOfStackTraceLinesToRemove = 2;
13
+ function assert(condition, debugInfo) {
14
+ if (condition) {
15
+ return;
16
+ }
17
+ const debugStr = (() => {
18
+ if (!debugInfo) {
19
+ return '';
20
+ }
21
+ const debugInfoSerialized = typeof debugInfo === 'string' ? debugInfo : '`' + JSON.stringify(debugInfo) + '`';
22
+ return `Debug info (this is for the ${projectInfo_1.projectInfo.projectName} maintainers; you can ignore this): ${debugInfoSerialized}.`;
23
+ })();
24
+ const internalError = (0, createErrorWithCleanStackTrace_1.createErrorWithCleanStackTrace)([
25
+ `${internalErrorPrefix} You stumbled upon a bug in ${projectInfo_1.projectInfo.projectName}'s source code.`,
26
+ `Reach out at ${projectInfo_1.projectInfo.githubRepository}/issues/new and include this error stack (the error stack is usually enough to fix the problem).`,
27
+ 'A maintainer will fix the bug (usually under 24 hours).',
28
+ `Do not hesitate to reach out as it makes ${projectInfo_1.projectInfo.projectName} more robust.`,
29
+ debugStr
30
+ ].join(' '), numberOfStackTraceLinesToRemove);
31
+ throw internalError;
32
+ }
33
+ exports.assert = assert;
34
+ function assertUsage(condition, errorMessage) {
35
+ if (condition) {
36
+ return;
37
+ }
38
+ const whiteSpace = errorMessage.startsWith('[') ? '' : ' ';
39
+ const usageError = (0, createErrorWithCleanStackTrace_1.createErrorWithCleanStackTrace)(`${usageErrorPrefix}${whiteSpace}${errorMessage}`, numberOfStackTraceLinesToRemove);
40
+ throw usageError;
41
+ }
42
+ exports.assertUsage = assertUsage;
43
+ function getProjectError(errorMessage) {
44
+ const pluginError = (0, createErrorWithCleanStackTrace_1.createErrorWithCleanStackTrace)(`${errorPrefix} ${errorMessage}`, numberOfStackTraceLinesToRemove);
45
+ return pluginError;
46
+ }
47
+ exports.getProjectError = getProjectError;
48
+ let loggedWarnings = new Set();
49
+ function assertWarning(condition, errorMessage, { onlyOnce }) {
50
+ if (condition) {
51
+ return;
52
+ }
53
+ const msg = `${warningPrefix} ${errorMessage}`;
54
+ if (onlyOnce) {
55
+ const key = onlyOnce === true ? msg : onlyOnce;
56
+ if (loggedWarnings.has(key)) {
57
+ return;
58
+ }
59
+ else {
60
+ loggedWarnings.add(key);
61
+ }
62
+ }
63
+ console.warn(msg);
64
+ }
65
+ exports.assertWarning = assertWarning;
66
+ function assertInfo(condition, errorMessage) {
67
+ if (condition) {
68
+ return;
69
+ }
70
+ console.warn(`${infoPrefix} ${errorMessage}`);
71
+ }
72
+ exports.assertInfo = assertInfo;
@@ -0,0 +1,2 @@
1
+ export { createErrorWithCleanStackTrace };
2
+ declare function createErrorWithCleanStackTrace(errorMessage: string, numberOfStackTraceLinesToRemove: number): Error;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createErrorWithCleanStackTrace = void 0;
4
+ function createErrorWithCleanStackTrace(errorMessage, numberOfStackTraceLinesToRemove) {
5
+ let err;
6
+ {
7
+ var stackTraceLimit__original = Error.stackTraceLimit;
8
+ Error.stackTraceLimit = Infinity;
9
+ err = new Error(errorMessage);
10
+ Error.stackTraceLimit = stackTraceLimit__original;
11
+ }
12
+ err.stack = clean(err.stack, numberOfStackTraceLinesToRemove);
13
+ return err;
14
+ }
15
+ exports.createErrorWithCleanStackTrace = createErrorWithCleanStackTrace;
16
+ function clean(errStack, numberOfStackTraceLinesToRemove) {
17
+ if (!errStack) {
18
+ return errStack;
19
+ }
20
+ const stackLines = splitByLine(errStack);
21
+ let linesRemoved = 0;
22
+ const stackLine__cleaned = stackLines
23
+ .filter((line) => {
24
+ // Remove internal stack traces
25
+ if (line.includes(' (internal/') || line.includes(' (node:internal')) {
26
+ return false;
27
+ }
28
+ if (linesRemoved < numberOfStackTraceLinesToRemove && isStackTraceLine(line)) {
29
+ linesRemoved++;
30
+ return false;
31
+ }
32
+ return true;
33
+ })
34
+ .join('\n');
35
+ return stackLine__cleaned;
36
+ }
37
+ function isStackTraceLine(line) {
38
+ return line.startsWith(' at ');
39
+ }
40
+ function splitByLine(str) {
41
+ // https://stackoverflow.com/questions/21895233/how-in-node-to-split-string-by-newline-n
42
+ return str.split(/\r?\n/);
43
+ }
@@ -0,0 +1,7 @@
1
+ export { findFiles };
2
+ export type { FindFilter };
3
+ declare type FindFilter = {
4
+ terms: string[];
5
+ exclude: boolean;
6
+ };
7
+ declare function findFiles(pattern: string, findFilter: null | FindFilter): Promise<string[]>;
@@ -0,0 +1,46 @@
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.findFiles = void 0;
7
+ const fast_glob_1 = __importDefault(require("fast-glob"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const runCommand_1 = require("./runCommand");
10
+ const cwd = process.cwd();
11
+ let gitFiles;
12
+ async function findFiles(pattern, findFilter) {
13
+ let files = (await (0, fast_glob_1.default)([pattern], { ignore: ['**/node_modules/**', '**/.git/**'], cwd, dot: true }))
14
+ .filter((filePathRelative) => applyFilter(filePathRelative, findFilter))
15
+ .map((filePathRelative) => path_1.default.join(cwd, filePathRelative));
16
+ files = await filterGitIgnoredFiles(files);
17
+ return files;
18
+ }
19
+ exports.findFiles = findFiles;
20
+ async function filterGitIgnoredFiles(files) {
21
+ if (!gitFiles) {
22
+ const stdout1 = await (0, runCommand_1.runCommand)('git ls-files', { cwd });
23
+ // Also include untracked files.
24
+ // - In other words, we remove git ignored files. (Staged files are tracked and listed by `$ git ls-files`.)
25
+ // - `git ls-files --others --exclude-standard` from https://stackoverflow.com/questions/3801321/git-list-only-untracked-files-also-custom-commands/3801554#3801554
26
+ const stdout2 = await (0, runCommand_1.runCommand)('git ls-files --others --exclude-standard', { cwd });
27
+ gitFiles = [...stdout1.split(' '), ...stdout2.split(' ')].map((filePathRelative) => path_1.default.join(cwd, filePathRelative));
28
+ }
29
+ const filesFiltered = files.filter((file) => gitFiles.includes(file));
30
+ return filesFiltered;
31
+ }
32
+ function applyFilter(filePathRelative, findFilter) {
33
+ if (!findFilter) {
34
+ return true;
35
+ }
36
+ const { terms, exclude } = findFilter;
37
+ for (const term of terms) {
38
+ if (!filePathRelative.includes(term) && !exclude) {
39
+ return false;
40
+ }
41
+ if (filePathRelative.includes(term) && exclude) {
42
+ return false;
43
+ }
44
+ }
45
+ return true;
46
+ }
@@ -0,0 +1 @@
1
+ export declare function humanizeTime(milliseconds: number): string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.humanizeTime = void 0;
4
+ function humanizeTime(milliseconds) {
5
+ const seconds = milliseconds / 1000;
6
+ if (seconds < 120) {
7
+ return `${round(seconds)} seconds`;
8
+ }
9
+ const minutes = seconds / 60;
10
+ return `${round(minutes)} minutes`;
11
+ }
12
+ exports.humanizeTime = humanizeTime;
13
+ function round(n) {
14
+ return n.toFixed(1);
15
+ }
@@ -0,0 +1,6 @@
1
+ export * from './sleep';
2
+ export * from './runCommand';
3
+ export * from './assert';
4
+ export * from './humanizeTime';
5
+ export * from './isTTY';
6
+ export * from './findFiles';
@@ -0,0 +1,22 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./sleep"), exports);
18
+ __exportStar(require("./runCommand"), exports);
19
+ __exportStar(require("./assert"), exports);
20
+ __exportStar(require("./humanizeTime"), exports);
21
+ __exportStar(require("./isTTY"), exports);
22
+ __exportStar(require("./findFiles"), exports);
@@ -0,0 +1 @@
1
+ export declare const isTTY: boolean;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTTY = void 0;
4
+ // https://stackoverflow.com/questions/34570452/node-js-stdout-clearline-and-cursorto-functions#comment80319576_34570694
5
+ exports.isTTY = !!process.stdout.clearLine;
@@ -0,0 +1,5 @@
1
+ export declare const projectInfo: {
2
+ projectName: "@brillout/test-e2e";
3
+ npmPackageName: "@brillout/test-e2e";
4
+ githubRepository: "https://github.com/brillout/test-e2e";
5
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.projectInfo = void 0;
4
+ exports.projectInfo = {
5
+ projectName: '@brillout/test-e2e',
6
+ npmPackageName: '@brillout/test-e2e',
7
+ githubRepository: 'https://github.com/brillout/test-e2e'
8
+ };
@@ -0,0 +1,6 @@
1
+ export { runCommand };
2
+ declare function runCommand(cmd: string, { swallowError, timeout, cwd }?: {
3
+ swallowError?: true;
4
+ timeout?: number;
5
+ cwd?: string;
6
+ }): Promise<string>;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runCommand = void 0;
4
+ const child_process_1 = require("child_process");
5
+ function runCommand(cmd, { swallowError, timeout = 5000, cwd } = {}) {
6
+ const { promise, resolvePromise } = genPromise();
7
+ const t = setTimeout(() => {
8
+ console.error(`Command call \`${cmd}\` timeout [${timeout / 1000} seconds][${cwd}].`);
9
+ process.exit(1);
10
+ }, timeout);
11
+ const options = { cwd };
12
+ (0, child_process_1.exec)(cmd, options, (err, stdout, stderr) => {
13
+ clearTimeout(t);
14
+ if (err || stderr) {
15
+ if (swallowError) {
16
+ resolvePromise('SWALLOWED_ERROR');
17
+ }
18
+ else {
19
+ if (stdout) {
20
+ console.log(stdout);
21
+ }
22
+ if (stderr) {
23
+ console.error(stderr);
24
+ }
25
+ if (err) {
26
+ console.error(err);
27
+ }
28
+ throw new Error(`Command \`${cmd}\` failed [cwd: ${cwd}]`);
29
+ }
30
+ }
31
+ else {
32
+ resolvePromise(stdout);
33
+ }
34
+ });
35
+ return promise;
36
+ }
37
+ exports.runCommand = runCommand;
38
+ function genPromise() {
39
+ let resolvePromise;
40
+ let rejectPromise;
41
+ const promise = new Promise((resolve, reject) => {
42
+ resolvePromise = resolve;
43
+ rejectPromise = reject;
44
+ });
45
+ return { promise, resolvePromise, rejectPromise };
46
+ }
@@ -0,0 +1,2 @@
1
+ export { sleep };
2
+ declare function sleep(milliseconds: number): Promise<void>;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sleep = void 0;
4
+ function sleep(milliseconds) {
5
+ return new Promise((r) => setTimeout(r, milliseconds));
6
+ }
7
+ exports.sleep = sleep;
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@brillout/test-e2e",
3
+ "version": "0.1.3",
4
+ "bin": "./bin.js",
5
+ "main": "./dist/index.js",
6
+ "scripts": {
7
+ "// === Dev ===": "",
8
+ "dev": "tsc --watch --project ./tsconfig.dev.json",
9
+ "// === Build ===": "",
10
+ "build": "rm -rf dist/ && tsc",
11
+ "// === Release ===": "",
12
+ "prepublishOnly": "pnpm run build",
13
+ "release": "npm version patch && npm publish && git push && git push --tags"
14
+ },
15
+ "dependencies": {
16
+ "@brillout/part-regex": "^0.1.2",
17
+ "@types/chai": "^4.3.3",
18
+ "@types/node": "^15.6.1",
19
+ "@types/node-fetch": "^2.5.12",
20
+ "chai": "^4.3.6",
21
+ "esbuild": "^0.15.9",
22
+ "fast-glob": "^3.2.12",
23
+ "kolorist": "^1.4.1",
24
+ "node-fetch": "^2.6.1",
25
+ "playwright-chromium": "^1.22.2",
26
+ "source-map-support": "^0.5.21",
27
+ "strip-ansi": "^6.0.1",
28
+ "typescript": "^4.8.3"
29
+ },
30
+ "repository": "github:brillout/test-e2e",
31
+ "files": [
32
+ "dist/"
33
+ ],
34
+ "publishConfig": {
35
+ "access": "public"
36
+ }
37
+ }