Skip to content

Commit

Permalink
Migrate utils modules to TS. (#3869)
Browse files Browse the repository at this point in the history

---------

Co-authored-by: Ravi Sawlani <ravisawlani04@gmail.com>
  • Loading branch information
garg3133 and gravityvi authored Aug 22, 2023
1 parent 2b7c29e commit 79367cd
Show file tree
Hide file tree
Showing 16 changed files with 591 additions and 84 deletions.
28 changes: 28 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"root": true,
"extends": [
"eslint:recommended"
],
Expand All @@ -13,6 +14,33 @@
"mocha": true,
"node": true
},
"overrides": [
{
"files": [
"**/*.ts"
],
"excludedFiles": [
"test/**/*.ts"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended"
],
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint"
],
"parserOptions": {
"ecmaVersion": 2020,
"sourceType": "module",
"ecmaFeatures": {
"jsx": false
},
"project": "./tsconfig.json"
}
}
],
"rules": {
"eqeqeq": [
"error",
Expand Down
19 changes: 10 additions & 9 deletions lib/utils/addDetailedError.js → lib/utils/addDetailedError.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import {NightwatchError} from './types';

/**
* @method addDetailedError
* @param {Error} err
*/
module.exports = function(err) {
let detailedErr;
export = function(err: NightwatchError) {
let detailedErr: string | undefined;

if (err instanceof TypeError) {
if (err.detailedErr && /browser\..+ is not a function$/.test(err.detailedErr)) {
Expand All @@ -25,14 +26,14 @@ module.exports = function(err) {
detailedErr = ' - writing an ES6 async test case? - keep in mind that commands return a Promise; \n - writing unit tests? - make sure to specify "unit_tests_mode=true" in your config.';
}
} else if (err instanceof SyntaxError) {
const stackParts = err.stack.split('SyntaxError:');
detailedErr = stackParts[0];
let modulePath = err.stack.split('\n')[0];
if (modulePath.includes(':')) {
const stackParts = err.stack?.split('SyntaxError:');
detailedErr = stackParts?.[0];
let modulePath = err.stack?.split('\n')[0];
if (modulePath?.includes(':')) {
modulePath = modulePath.split(':')[0];
}

if (stackParts[1]) {
if (stackParts?.[1]) {
if (detailedErr) {
err.stack = '';
}
Expand All @@ -46,7 +47,7 @@ module.exports = function(err) {
detailedErr = header + detailedErr;
}

if (modulePath.endsWith('.jsx') || modulePath.endsWith('.tsx')) {
if (modulePath?.endsWith('.jsx') || modulePath?.endsWith('.tsx')) {
detailedErr = `\n In order to be able to load JSX files, one of these plugins is needed:
- @nightwatch/react
- @nightwatch/storybook (only if using Storybook in your project)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module.exports = function(err) {
export = function(err: unknown) {
return (err instanceof Error) && [
'TypeError', 'SyntaxError', 'ReferenceError', 'RangeError'
].includes(err.name);
};
};
2 changes: 1 addition & 1 deletion lib/utils/beautifyStackTrace.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const fs = require('fs');
const stackTraceParser = require('stacktrace-parser');
const AssertionError = require('assertion-error');
const {filterStackTrace} = require('./stackTrace.js');
const alwaysDisplayError = require('./alwaysDisplayError.js');
const alwaysDisplayError = require('./alwaysDisplayError');
const {colors} = require('./chalkColors.js');

/**
Expand Down
16 changes: 8 additions & 8 deletions lib/utils/browsername.js → lib/utils/browsername.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
const BrowserName = module.exports = {
class BrowserName {
get CHROME() {
return 'chrome';
},
}

get FIREFOX() {
return 'firefox';
},
}

get SAFARI() {
return 'safari';
},
}

get EDGE() {
return 'MicrosoftEdge';
},
}

get INTERNET_EXPLORER() {
return 'internet explorer';
},
}

get OPERA() {
return 'opera';
}
};
}

Object.freeze(BrowserName);
export = new BrowserName();
17 changes: 0 additions & 17 deletions lib/utils/createPromise.js

This file was deleted.

16 changes: 16 additions & 0 deletions lib/utils/createPromise.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
interface Deferred<T> {
promise: Promise<T>;
resolve: ((value: T | PromiseLike<T>) => void);
reject: ((reason?: unknown) => void);
}

export = function createPromise<T>(): Deferred<T> {
const deferred = <Deferred<T>> {};

deferred.promise = new Promise((resolve, reject) => {
deferred.resolve = resolve;
deferred.reject = reject;
});

return deferred;
};
21 changes: 13 additions & 8 deletions lib/utils/getFreePort.js → lib/utils/getFreePort.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
import * as net from 'net';

/**
* @method getFreePort
* @param host
* @returns {Promise<number>}
*/
module.exports = function(host = 'localhost') {
const net = require('net');

export = function(host = 'localhost'): Promise<number> {
return new Promise((resolve, reject) => {
const server = net.createServer();

server.on('listening', function () {
resolve(server.address().port);
const serverAddress = server.address();

if (!serverAddress || typeof serverAddress === 'string') {
reject(new Error('Unable to get port from server address.'));
} else {
resolve(serverAddress.port);
}

server.close();
});

server.on('error', (e) => {
server.on('error', (e: NodeJS.ErrnoException) => {
let err;
if (e.code === 'EADDRINUSE' || e.code === 'EACCES') {
err = new Error('Unable to find a free port');
Expand All @@ -28,4 +33,4 @@ module.exports = function(host = 'localhost') {
// By providing 0 we let the operative system find an arbitrary port
server.listen(0, host);
});
};
};
11 changes: 5 additions & 6 deletions lib/utils/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ const {By, Capabilities} = require('selenium-webdriver');
const {inspect} = require('util');

const Logger = require('./logger');
const BrowserName = require('./browsername.js');
const BrowserName = require('./browsername');
const LocateStrategy = require('./locatestrategy.js');
const PeriodicPromise = require('./periodic-promise.js');
const createPromise = require('./createPromise.js');
const isErrorObject = require('./isErrorObject.js');
const alwaysDisplayError = require('./alwaysDisplayError.js');
const createPromise = require('./createPromise');
const isErrorObject = require('./isErrorObject');
const alwaysDisplayError = require('./alwaysDisplayError');
const Screenshots = require('./screenshots.js');
const Snapshots = require('./snapshots.js');
const TimedCallback = require('./timed-callback.js');
const getFreePort = require('./getFreePort.js');
const getFreePort = require('./getFreePort');
const requireModule = require('./requireModule.js');
const getAllClassMethodNames = require('./getAllClassMethodNames.js');
const VERSION = require('./version.js');
Expand Down Expand Up @@ -715,7 +715,6 @@ lodashMerge(Utils, {
Screenshots,
Snapshots,
TimedCallback,


getFreePort,
VERSION,
Expand Down
4 changes: 2 additions & 2 deletions lib/utils/isErrorObject.js → lib/utils/isErrorObject.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module.exports = function(err) {
export = function(err: unknown) {
return err instanceof Error || Object.prototype.toString.call(err) === '[object Error]';
};
};
4 changes: 2 additions & 2 deletions lib/utils/logger/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ const lodashEscape = require('lodash.escape');
const LogSettings = require('./log_settings.js');
const chalkColors = require('../chalkColors.js');

const addDetailedError = require('../addDetailedError.js');
const addDetailedError = require('../addDetailedError');

const Errors = require('../../transport/errors');
const beautifyStackTrace = require('../beautifyStackTrace');

const alwaysDisplayError = require('../alwaysDisplayError.js');
const alwaysDisplayError = require('../alwaysDisplayError');

const Severity = {
LOG: 'LOG',
Expand Down
2 changes: 1 addition & 1 deletion lib/utils/periodic-promise.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const EventEmitter = require('events');
const createPromise = require('./createPromise.js');
const createPromise = require('./createPromise');

class PeriodicPromise extends EventEmitter {
get rescheduleInterval() {
Expand Down
4 changes: 2 additions & 2 deletions lib/utils/stackTrace.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const boxen = require('boxen');
const {colors} = require('./chalkColors.js');
const isErrorObject = require('./isErrorObject.js');
const addDetailedError = require('./addDetailedError.js');
const isErrorObject = require('./isErrorObject');
const addDetailedError = require('./addDetailedError');
const indentRegex = /^/gm;

const stackTraceFilter = function (parts) {
Expand Down
5 changes: 5 additions & 0 deletions lib/utils/types/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export interface NightwatchError extends Error {
detailedErr: string;
link: string;
help: string[];
}
Loading

0 comments on commit 79367cd

Please sign in to comment.