@argos-ci/playwright 0.0.1 → 0.0.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.
package/dist/index.cjs ADDED
@@ -0,0 +1,6 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */ const argosScreenshot = async (...args)=>{
2
+ // @ts-ignore
3
+ const { argosScreenshot } = await import('./index.mjs');
4
+ return argosScreenshot(...args);
5
+ };
6
+ exports.argosScreenshot = argosScreenshot;
@@ -0,0 +1,13 @@
1
+ import { ElementHandle, LocatorScreenshotOptions, PageScreenshotOptions, Page } from '@playwright/test';
2
+
3
+ type LocatorOptions = Parameters<Page["locator"]>[1];
4
+ type ScreenshotOptions<TBase extends PageScreenshotOptions | LocatorScreenshotOptions> = Omit<TBase, "encoding" | "type" | "omitBackground" | "path">;
5
+ type ArgosScreenshotOptions = {
6
+ /**
7
+ * ElementHandle or string selector of the element to take a screenshot of.
8
+ */
9
+ element?: string | ElementHandle;
10
+ } & LocatorOptions & ScreenshotOptions<LocatorScreenshotOptions> & ScreenshotOptions<PageScreenshotOptions>;
11
+ declare function argosScreenshot(page: Page, name: string, { element, has, hasText, ...options }?: ArgosScreenshotOptions): Promise<void>;
12
+
13
+ export { ArgosScreenshotOptions, argosScreenshot };
package/dist/index.mjs ADDED
@@ -0,0 +1,67 @@
1
+ import { mkdir } from 'node:fs/promises';
2
+ import { resolve } from 'node:path';
3
+
4
+ const screenshotFolder = "./screenshots";
5
+ const GLOBAL_STYLES = `
6
+ /* Hide carets */
7
+ * { caret-color: transparent !important; }
8
+
9
+ /* Hide scrollbars */
10
+ ::-webkit-scrollbar {
11
+ display: none !important;
12
+ }
13
+
14
+ /* Generic hide */
15
+ [data-visual-test="transparent"] {
16
+ color: transparent !important;
17
+ font-family: monospace !important;
18
+ opacity: 0 !important;
19
+ }
20
+
21
+ [data-visual-test="removed"] {
22
+ display: none !important;
23
+ }
24
+ `;
25
+ // Check if the fonts are loaded
26
+ function waitForFontLoading() {
27
+ return document.fonts.status === "loaded";
28
+ }
29
+ // Check if the images are loaded
30
+ async function waitForImagesLoading() {
31
+ return Promise.all(Array.from(document.images).filter((img)=>!img.complete).map((img)=>new Promise((resolve)=>{
32
+ img.onload = img.onerror = resolve;
33
+ })));
34
+ }
35
+ async function argosScreenshot(page, name, { element , has , hasText , ...options } = {}) {
36
+ if (!page) throw new Error("A Playwright `page` object is required.");
37
+ if (!name) throw new Error("The `name` argument is required.");
38
+ const handle = typeof element === "string" ? page.locator(element, {
39
+ has,
40
+ hasText
41
+ }) : element ?? page;
42
+ mkdir(screenshotFolder, {
43
+ recursive: true
44
+ });
45
+ await Promise.all([
46
+ page.addStyleTag({
47
+ content: GLOBAL_STYLES
48
+ }),
49
+ page.waitForSelector('[aria-busy="true"]', {
50
+ state: "hidden"
51
+ }),
52
+ page.waitForFunction(waitForImagesLoading),
53
+ page.waitForFunction(waitForFontLoading)
54
+ ]);
55
+ await handle.screenshot({
56
+ path: resolve(screenshotFolder, `${name}.png`),
57
+ type: "png",
58
+ fullPage: true,
59
+ mask: [
60
+ page.locator('[data-visual-test="blackout"]')
61
+ ],
62
+ animations: "disabled",
63
+ ...options
64
+ });
65
+ }
66
+
67
+ export { argosScreenshot };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@argos-ci/playwright",
3
3
  "description": "Visual testing solution to avoid visual regression. Playwright commands and utilities for Argos visual testing.",
4
- "version": "0.0.1",
4
+ "version": "0.0.2",
5
5
  "author": "Smooth Code",
6
6
  "license": "MIT",
7
7
  "repository": "github:argos-ci/argos-playwright",
@@ -24,27 +24,36 @@
24
24
  "type": "module",
25
25
  "exports": {
26
26
  ".": {
27
- "import": "./index.js",
28
- "require": "./index.cjs",
29
- "types": "./index.d.ts",
30
- "default": "./index.js"
27
+ "import": "./dist/index.mjs",
28
+ "require": "./dist/index.cjs",
29
+ "types": "./dist/index.d.ts",
30
+ "default": "./dist/index.mjs"
31
31
  },
32
32
  "./package.json": "./package.json"
33
33
  },
34
34
  "scripts": {
35
+ "prebuild": "rm -rf dist",
36
+ "build": "rollup -c",
35
37
  "test": "npx playwright test",
36
- "format": "prettier --write .",
38
+ "format": "prettier --write . --ignore-path .gitignore",
37
39
  "check-format": "prettier --check .",
38
40
  "lint": "eslint --ignore-path .gitignore .",
39
41
  "release": "standard-version && conventional-github-releaser --preset angular"
40
42
  },
41
43
  "devDependencies": {
42
- "@argos-ci/cli": "^0.4.2",
43
- "@playwright/test": "^1.29.2",
44
+ "@argos-ci/cli": "^0.4.4",
45
+ "@playwright/test": "^1.30.0",
46
+ "@swc/cli": "^0.1.62",
47
+ "@swc/core": "^1.3.35",
48
+ "@typescript-eslint/eslint-plugin": "^5.52.0",
49
+ "@typescript-eslint/parser": "^5.52.0",
44
50
  "conventional-github-releaser": "^3.1.5",
45
- "eslint": "^8.23.0",
46
- "eslint-plugin-html": "^7.1.0",
47
- "prettier": "^2.7.1",
48
- "standard-version": "^9.5.0"
51
+ "eslint": "^8.34.0",
52
+ "prettier": "^2.8.4",
53
+ "rollup": "^3.17.1",
54
+ "rollup-plugin-dts": "^5.2.0",
55
+ "rollup-plugin-swc3": "^0.8.0",
56
+ "standard-version": "^9.5.0",
57
+ "typescript": "^4.9.5"
49
58
  }
50
59
  }
package/index.cjs DELETED
@@ -1,6 +0,0 @@
1
- const argosScreenshot = async (...args) => {
2
- const { argosScreenshot } = await import("./index.js");
3
- return argosScreenshot(...args);
4
- };
5
-
6
- exports.argosScreenshot = argosScreenshot;
package/index.d.ts DELETED
@@ -1,29 +0,0 @@
1
- import {
2
- Page,
3
- PageScreenshotOptions,
4
- LocatorScreenshotOptions,
5
- ElementHandle,
6
- } from "@playwright/test";
7
-
8
- export interface ArgosScreenshotOptions
9
- extends Omit<
10
- PageScreenshotOptions | LocatorScreenshotOptions,
11
- "encoding" | "type" | "omitBackground" | "path"
12
- > {
13
- /**
14
- * ElementHandle or string selector of the element to take a screenshot of.
15
- */
16
- element?: string | ElementHandle;
17
- }
18
-
19
- /**
20
- * Stabilize the UI and takes a screenshot of the application under test.
21
- * @example
22
- * await argosScreenshot(page, "my-screenshot")
23
- * await argosScreenshot(page, "my-screenshot", { fullPage: true })
24
- */
25
- export function argosScreenshot(
26
- page: Page,
27
- name: string,
28
- options?: ArgosScreenshotOptions
29
- ): Promise<void>;
package/index.js DELETED
@@ -1,76 +0,0 @@
1
- import { mkdir } from "node:fs/promises";
2
- import { resolve } from "node:path";
3
-
4
- const screenshotFolder = "./screenshots";
5
-
6
- export async function goto({ page, link }) {
7
- await page.goto(link, { waitUntil: "networkidle" });
8
- }
9
-
10
- const GLOBAL_STYLES = `
11
- /* Hide carets */
12
- * { caret-color: transparent !important; }
13
-
14
- /* Hide scrollbars */
15
- ::-webkit-scrollbar {
16
- display: none !important;
17
- }
18
-
19
- /* Generic hide */
20
- [data-visual-test="transparent"] {
21
- color: transparent !important;
22
- font-family: monospace !important;
23
- opacity: 0 !important;
24
- }
25
-
26
- [data-visual-test="removed"] {
27
- display: none !important;
28
- }
29
- `;
30
-
31
- // Check if the fonts are loaded
32
- function waitForFontLoading() {
33
- return document.fonts.status === "loaded";
34
- }
35
-
36
- // Check if the images are loaded
37
- async function waitForImagesLoading() {
38
- return Promise.all(
39
- Array.from(document.images)
40
- .filter((img) => !img.complete)
41
- .map(
42
- (img) =>
43
- new Promise((resolve) => {
44
- img.onload = img.onerror = resolve;
45
- })
46
- )
47
- );
48
- }
49
-
50
- export async function argosScreenshot(
51
- page,
52
- name,
53
- { element = page, ...options } = {}
54
- ) {
55
- if (!page) throw new Error("A Playwright `page` object is required.");
56
- if (!name) throw new Error("The `name` argument is required.");
57
-
58
- mkdir(screenshotFolder, { recursive: true });
59
-
60
- const [resolvedElement] = await Promise.all([
61
- typeof element === "string" ? page.locator(element) : element,
62
- page.addStyleTag({ content: GLOBAL_STYLES }),
63
- page.waitForSelector('[aria-busy="true"]', { state: "hidden" }),
64
- page.waitForFunction(waitForImagesLoading),
65
- page.waitForFunction(waitForFontLoading),
66
- ]);
67
-
68
- await resolvedElement.screenshot({
69
- path: resolve(screenshotFolder, `${name}.png`),
70
- type: "png",
71
- fullPage: true,
72
- mask: [page.locator('[data-visual-test="blackout"]')],
73
- animations: "disabled",
74
- ...options,
75
- });
76
- }