Skip to content

Commit 595fe59

Browse files
authored
Merge pull request #2 from pinanks/DOT-2154
Add JS packages
2 parents d2e54fd + cd86958 commit 595fe59

File tree

14 files changed

+542
-0
lines changed

14 files changed

+542
-0
lines changed

.github/workflows/release-js.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Publish JS packages
2+
3+
on:
4+
release:
5+
types: [published]
6+
7+
jobs:
8+
build-and-publish:
9+
runs-on: ubuntu-latest
10+
11+
steps:
12+
- name: Check out code
13+
uses: actions/checkout@v3
14+
15+
- name: Set up Node.js
16+
uses: actions/setup-node@v4
17+
with:
18+
node-version: '16'
19+
registry-url: 'https://registry.npmjs.org'
20+
21+
- name: Install pnpm
22+
run: npm install -g pnpm
23+
24+
- name: Install dependencies
25+
run: pnpm install
26+
27+
- name: Publish packages
28+
run: pnpm publish --recursive --access public --no-git-checks
29+
env:
30+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

js/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

js/packages/sdk-utils/index.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { isSmartUIRunning, fetchDOMSerializer, postSnapshot } from './src/smartui.js'
2+
import logger from './src/lib/logger.js'
3+
4+
export default {
5+
logger,
6+
fetchDOMSerializer,
7+
postSnapshot,
8+
isSmartUIRunning
9+
}

js/packages/sdk-utils/package.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"name": "@lambdatest/sdk-utils",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"repository": {
7+
"type": "git",
8+
"url": "git+https://github.com/LambdaTest/lambdatet-sdk",
9+
"directory": "js/packages/sdk-utils"
10+
},
11+
"type": "module",
12+
"scripts": {
13+
"test": "echo \"Error: no test specified\" && exit 1"
14+
},
15+
"keywords": [
16+
"lambdatest"
17+
],
18+
"author": "LambdaTest <[email protected]>",
19+
"license": "MIT",
20+
"dependencies": {
21+
"axios": "^1.6.2",
22+
"chalk": "^5.3.0",
23+
"winston": "^3.11.0"
24+
}
25+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import axios from 'axios'
2+
import utils from './utils.js'
3+
4+
class httpClient {
5+
async request(config) {
6+
return axios.request(config)
7+
.then(resp => {
8+
return {
9+
status: resp.status,
10+
statusMessage: resp.statusMessage,
11+
headers: resp.headers,
12+
body: resp.data
13+
};
14+
})
15+
.catch(error => {
16+
if (error.response) {
17+
throw new Error(JSON.stringify(error.response.data));
18+
}
19+
if (error.request) {
20+
throw new Error(error.toJSON().message);
21+
}
22+
throw error;
23+
});
24+
}
25+
26+
isSmartUIRunning() {
27+
return this.request({
28+
url: `${utils.getSmartUIServerAddress()}/healthcheck`,
29+
method: 'GET',
30+
})
31+
}
32+
33+
fetchDOMSerializer() {
34+
return this.request({
35+
url: `${utils.getSmartUIServerAddress()}/domserializer`,
36+
method: 'GET'
37+
})
38+
}
39+
40+
postSnapshot(data) {
41+
return this.request({
42+
url: `${utils.getSmartUIServerAddress()}/snapshot`,
43+
method: 'POST',
44+
data: data,
45+
headers: {
46+
'Content-Type': 'application/json',
47+
}
48+
})
49+
}
50+
}
51+
52+
export default new httpClient();
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { createLogger, transports, format, config } from 'winston'
2+
import chalk from 'chalk'
3+
4+
const logLevel = () => {
5+
let debug = (process.env.LT_SDK_DEBUG === 'true') ? 'debug' : undefined;
6+
return debug || process.env.LT_SDK_LOG_LEVEL || 'info'
7+
}
8+
9+
export default (logContext) => {
10+
return createLogger({
11+
level: logLevel(),
12+
format: format.combine(
13+
format.timestamp(),
14+
format.printf(({ message, level }) => {
15+
if (typeof message === 'object') {
16+
message = JSON.stringify(message);
17+
}
18+
switch (level) {
19+
case 'debug':
20+
message = chalk.blue(message);
21+
break;
22+
case 'warn':
23+
message = chalk.yellow(message);
24+
break;
25+
case 'error':
26+
message = chalk.red(message);
27+
break;
28+
}
29+
return `[${logContext}] ${message}`;
30+
})
31+
),
32+
transports: [new transports.Console()]
33+
});
34+
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import fs from 'fs';
2+
import { fileURLToPath } from 'url';
3+
import { dirname, join } from 'path';
4+
5+
export function getSmartUIServerAddress() {
6+
return process.env.SMARTUI_SERVER_ADDRESS || 'http://localhost:8080'
7+
}
8+
9+
export function getPackageName() {
10+
return JSON.parse(fs.readFileSync(join(dirname(fileURLToPath(import.meta.url)), '../../package.json'), 'utf-8')).name
11+
}
12+
13+
export * as default from './utils.js';

js/packages/sdk-utils/src/smartui.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import client from './lib/httpClient.js'
2+
import logger from './lib/logger.js'
3+
import utils from './lib/utils.js'
4+
const log = logger(utils.getPackageName())
5+
6+
export async function isSmartUIRunning() {
7+
try {
8+
await client.isSmartUIRunning();
9+
return true;
10+
} catch (error) {
11+
log.debug(error);
12+
return false;
13+
}
14+
}
15+
16+
export async function fetchDOMSerializer() {
17+
try {
18+
return await client.fetchDOMSerializer();
19+
} catch (error) {
20+
log.debug(error);
21+
throw new Error(`fetch DOMSerializer failed`);
22+
}
23+
}
24+
25+
export async function postSnapshot(snapshotDOM, snapshotName, testType) {
26+
const data = JSON.stringify({
27+
snapshot: {
28+
dom: snapshotDOM,
29+
name: snapshotName
30+
},
31+
testType
32+
});
33+
34+
try {
35+
return await client.postSnapshot(data);
36+
} catch (error) {
37+
log.debug(error);
38+
throw new Error(`post snapshot failed`);
39+
}
40+
}

js/packages/selenium-driver/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { smartuiSnapshot } from './src/smartui.js';
2+
3+
export {
4+
smartuiSnapshot
5+
};
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "@lambdatest/selenium-driver",
3+
"version": "1.0.0",
4+
"description": "Selenium driver for all Lambdatest functionalities",
5+
"main": "index.js",
6+
"repository": {
7+
"type": "git",
8+
"url": "git+https://github.com/LambdaTest/lambdatet-sdk",
9+
"directory": "js/packages/selenium-driver"
10+
},
11+
"scripts": {
12+
"test": "echo \"Error: no test specified\" && exit 1"
13+
},
14+
"type": "module",
15+
"keywords": [
16+
"lambdatest",
17+
"selenium"
18+
],
19+
"author": "LambdaTest <[email protected]>",
20+
"license": "MIT",
21+
"dependencies": {
22+
"@lambdatest/sdk-utils": "workspace:^"
23+
}
24+
}

0 commit comments

Comments
 (0)