@smartbit4all/playwright-qa 0.1.0
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/README.md +334 -0
- package/dist/config/defaults.d.ts +18 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +25 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +82 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +58 -0
- package/dist/core/index.js.map +1 -0
- package/dist/datapool/index.d.ts +29 -0
- package/dist/datapool/index.d.ts.map +1 -0
- package/dist/datapool/index.js +84 -0
- package/dist/datapool/index.js.map +1 -0
- package/dist/datapool/loader.d.ts +12 -0
- package/dist/datapool/loader.d.ts.map +1 -0
- package/dist/datapool/loader.js +68 -0
- package/dist/datapool/loader.js.map +1 -0
- package/dist/datapool/locale.d.ts +2 -0
- package/dist/datapool/locale.d.ts.map +1 -0
- package/dist/datapool/locale.js +60 -0
- package/dist/datapool/locale.js.map +1 -0
- package/dist/datapool/unique.d.ts +4 -0
- package/dist/datapool/unique.d.ts.map +1 -0
- package/dist/datapool/unique.js +17 -0
- package/dist/datapool/unique.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/screenshot/directory.d.ts +9 -0
- package/dist/screenshot/directory.d.ts.map +1 -0
- package/dist/screenshot/directory.js +122 -0
- package/dist/screenshot/directory.js.map +1 -0
- package/dist/screenshot/highlight.d.ts +10 -0
- package/dist/screenshot/highlight.d.ts.map +1 -0
- package/dist/screenshot/highlight.js +36 -0
- package/dist/screenshot/highlight.js.map +1 -0
- package/dist/screenshot/index.d.ts +12 -0
- package/dist/screenshot/index.d.ts.map +1 -0
- package/dist/screenshot/index.js +54 -0
- package/dist/screenshot/index.js.map +1 -0
- package/dist/seed/index.d.ts +41 -0
- package/dist/seed/index.d.ts.map +1 -0
- package/dist/seed/index.js +143 -0
- package/dist/seed/index.js.map +1 -0
- package/dist/steps/grid.steps.d.ts +21 -0
- package/dist/steps/grid.steps.d.ts.map +1 -0
- package/dist/steps/grid.steps.js +154 -0
- package/dist/steps/grid.steps.js.map +1 -0
- package/dist/steps/index.d.ts +4 -0
- package/dist/steps/index.d.ts.map +1 -0
- package/dist/steps/index.js +14 -0
- package/dist/steps/index.js.map +1 -0
- package/dist/steps/navigation.steps.d.ts +4 -0
- package/dist/steps/navigation.steps.d.ts.map +1 -0
- package/dist/steps/navigation.steps.js +79 -0
- package/dist/steps/navigation.steps.js.map +1 -0
- package/dist/steps/wait.d.ts +8 -0
- package/dist/steps/wait.d.ts.map +1 -0
- package/dist/steps/wait.js +14 -0
- package/dist/steps/wait.js.map +1 -0
- package/package.json +55 -0
- package/templates/ci/playwright-qa-pipeline.yml +54 -0
- package/templates/playwright-qa/datapools/.gitkeep +0 -0
- package/templates/playwright-qa/package.json +14 -0
- package/templates/playwright-qa/playwright.config.ts +20 -0
- package/templates/playwright-qa/steps/.gitkeep +0 -0
- package/templates/playwright-qa/suites/.gitkeep +0 -0
- package/templates/playwright-qa/tsconfig.json +11 -0
- package/templates/playwright-qa/types/.gitkeep +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataPool = exports.resetUniqueSeq = exports.uniqueSeq = exports.unique = void 0;
|
|
4
|
+
exports.configureDatapool = configureDatapool;
|
|
5
|
+
exports.resetDatapoolConfig = resetDatapoolConfig;
|
|
6
|
+
exports.datapool = datapool;
|
|
7
|
+
const loader_1 = require("./loader");
|
|
8
|
+
const locale_1 = require("./locale");
|
|
9
|
+
const config_1 = require("../config");
|
|
10
|
+
var unique_1 = require("./unique");
|
|
11
|
+
Object.defineProperty(exports, "unique", { enumerable: true, get: function () { return unique_1.unique; } });
|
|
12
|
+
Object.defineProperty(exports, "uniqueSeq", { enumerable: true, get: function () { return unique_1.uniqueSeq; } });
|
|
13
|
+
Object.defineProperty(exports, "resetUniqueSeq", { enumerable: true, get: function () { return unique_1.resetUniqueSeq; } });
|
|
14
|
+
let globalLocale = null;
|
|
15
|
+
let globalBasePath = null;
|
|
16
|
+
function configureDatapool(options) {
|
|
17
|
+
if (options.locale !== undefined)
|
|
18
|
+
globalLocale = options.locale;
|
|
19
|
+
if (options.basePath !== undefined)
|
|
20
|
+
globalBasePath = options.basePath;
|
|
21
|
+
}
|
|
22
|
+
function resetDatapoolConfig() {
|
|
23
|
+
globalLocale = null;
|
|
24
|
+
globalBasePath = null;
|
|
25
|
+
}
|
|
26
|
+
class DataPool {
|
|
27
|
+
items;
|
|
28
|
+
locale;
|
|
29
|
+
locales;
|
|
30
|
+
keyField;
|
|
31
|
+
meta;
|
|
32
|
+
constructor(items, meta, locale) {
|
|
33
|
+
this.items = items;
|
|
34
|
+
this.meta = meta;
|
|
35
|
+
this.locale = locale;
|
|
36
|
+
this.locales = meta.locales;
|
|
37
|
+
this.keyField = meta.key ?? 'code';
|
|
38
|
+
}
|
|
39
|
+
byKey(key) {
|
|
40
|
+
const item = this.items.find((i) => i[this.keyField] === key);
|
|
41
|
+
if (!item) {
|
|
42
|
+
const available = this.items.map((i) => i[this.keyField]).join(', ');
|
|
43
|
+
throw new Error(`Item with ${this.keyField}='${key}' not found in datapool '${this.meta.entity}'. Available: ${available}`);
|
|
44
|
+
}
|
|
45
|
+
return (0, locale_1.createLocaleProxy)(item, this.locale, this.locales);
|
|
46
|
+
}
|
|
47
|
+
derive(key, overrides) {
|
|
48
|
+
const base = this.byKey(key);
|
|
49
|
+
return { ...base, ...overrides };
|
|
50
|
+
}
|
|
51
|
+
findFirst(field, value) {
|
|
52
|
+
const item = this.items.find((i) => i[field] === value);
|
|
53
|
+
if (!item) {
|
|
54
|
+
throw new Error(`No item with ${String(field)}='${value}' found in datapool '${this.meta.entity}'`);
|
|
55
|
+
}
|
|
56
|
+
return (0, locale_1.createLocaleProxy)(item, this.locale, this.locales);
|
|
57
|
+
}
|
|
58
|
+
findAll(field, value) {
|
|
59
|
+
const matches = this.items.filter((i) => i[field] === value);
|
|
60
|
+
return matches.map((item) => (0, locale_1.createLocaleProxy)(item, this.locale, this.locales));
|
|
61
|
+
}
|
|
62
|
+
random() {
|
|
63
|
+
if (this.items.length === 0) {
|
|
64
|
+
throw new Error(`Datapool '${this.meta.entity}' is empty`);
|
|
65
|
+
}
|
|
66
|
+
const index = Math.floor(Math.random() * this.items.length);
|
|
67
|
+
return (0, locale_1.createLocaleProxy)(this.items[index], this.locale, this.locales);
|
|
68
|
+
}
|
|
69
|
+
all() {
|
|
70
|
+
return this.items.map((item) => (0, locale_1.createLocaleProxy)(item, this.locale, this.locales));
|
|
71
|
+
}
|
|
72
|
+
count() {
|
|
73
|
+
return this.items.length;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.DataPool = DataPool;
|
|
77
|
+
function datapool(name, options = {}) {
|
|
78
|
+
const config = (0, config_1.loadConfig)();
|
|
79
|
+
const basePath = options.basePath ?? globalBasePath ?? config.datapoolsDir;
|
|
80
|
+
const locale = options.locale ?? globalLocale ?? config.locale;
|
|
81
|
+
const json = (0, loader_1.loadDatapoolJson)(name, basePath);
|
|
82
|
+
return new DataPool(json.items, json.meta, locale);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/datapool/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface DatapoolMeta {
|
|
2
|
+
entity: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
locales: string[];
|
|
5
|
+
key?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DatapoolJson<T = unknown> {
|
|
8
|
+
meta: DatapoolMeta;
|
|
9
|
+
items: T[];
|
|
10
|
+
}
|
|
11
|
+
export declare function loadDatapoolJson<T>(name: string, basePath: string): DatapoolJson<T>;
|
|
12
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/datapool/loader.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,CAAC,EAAE,CAAC;CACZ;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAmCnF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadDatapoolJson = loadDatapoolJson;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
function loadDatapoolJson(name, basePath) {
|
|
40
|
+
const filePath = path.resolve(basePath, `${name}.json`);
|
|
41
|
+
if (!fs.existsSync(filePath)) {
|
|
42
|
+
throw new Error(`Datapool file not found: ${filePath}`);
|
|
43
|
+
}
|
|
44
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
45
|
+
let parsed;
|
|
46
|
+
try {
|
|
47
|
+
parsed = JSON.parse(raw);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
throw new Error(`Invalid JSON in datapool file: ${filePath}`);
|
|
51
|
+
}
|
|
52
|
+
const data = parsed;
|
|
53
|
+
if (!data.meta || typeof data.meta !== 'object') {
|
|
54
|
+
throw new Error(`Datapool '${name}' missing required 'meta' field`);
|
|
55
|
+
}
|
|
56
|
+
const meta = data.meta;
|
|
57
|
+
if (!meta.entity || typeof meta.entity !== 'string') {
|
|
58
|
+
throw new Error(`Datapool '${name}' meta missing required 'entity' field`);
|
|
59
|
+
}
|
|
60
|
+
if (!Array.isArray(meta.locales) || meta.locales.length === 0) {
|
|
61
|
+
throw new Error(`Datapool '${name}' meta missing required 'locales' array`);
|
|
62
|
+
}
|
|
63
|
+
if (!Array.isArray(data.items)) {
|
|
64
|
+
throw new Error(`Datapool '${name}' missing required 'items' array`);
|
|
65
|
+
}
|
|
66
|
+
return data;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/datapool/loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,4CAmCC;AAlDD,uCAAyB;AACzB,2CAA6B;AAc7B,SAAgB,gBAAgB,CAAI,IAAY,EAAE,QAAgB;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAExD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,IAAI,GAAG,MAAiC,CAAC;IAE/C,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,iCAAiC,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAA+B,CAAC;IAClD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,wCAAwC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,yCAAyC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,kCAAkC,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,IAAkC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../../src/datapool/locale.ts"],"names":[],"mappings":"AA0BA,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAyCxF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createLocaleProxy = createLocaleProxy;
|
|
4
|
+
function isLocaleObject(value, locales) {
|
|
5
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const obj = value;
|
|
9
|
+
const keys = Object.keys(obj);
|
|
10
|
+
if (keys.length === 0)
|
|
11
|
+
return false;
|
|
12
|
+
return keys.every((key) => locales.includes(key) && typeof obj[key] === 'string');
|
|
13
|
+
}
|
|
14
|
+
function resolveLocaleValue(localeObj, locale, locales) {
|
|
15
|
+
if (locale in localeObj) {
|
|
16
|
+
return localeObj[locale];
|
|
17
|
+
}
|
|
18
|
+
if ('en' in localeObj) {
|
|
19
|
+
return localeObj['en'];
|
|
20
|
+
}
|
|
21
|
+
const firstAvailable = locales.find((l) => l in localeObj);
|
|
22
|
+
if (firstAvailable) {
|
|
23
|
+
return localeObj[firstAvailable];
|
|
24
|
+
}
|
|
25
|
+
throw new Error(`No locale value found for '${locale}'. Available keys: ${Object.keys(localeObj).join(', ')}`);
|
|
26
|
+
}
|
|
27
|
+
function createLocaleProxy(item, locale, locales) {
|
|
28
|
+
if (item === null || item === undefined) {
|
|
29
|
+
return item;
|
|
30
|
+
}
|
|
31
|
+
if (typeof item !== 'object') {
|
|
32
|
+
return item;
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(item)) {
|
|
35
|
+
return item.map((element) => createLocaleProxy(element, locale, locales));
|
|
36
|
+
}
|
|
37
|
+
return new Proxy(item, {
|
|
38
|
+
get(target, prop) {
|
|
39
|
+
if (typeof prop === 'symbol') {
|
|
40
|
+
return Reflect.get(target, prop);
|
|
41
|
+
}
|
|
42
|
+
const value = target[prop];
|
|
43
|
+
if (value === null || value === undefined) {
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
if (typeof value !== 'object') {
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(value)) {
|
|
50
|
+
return value.map((element) => createLocaleProxy(element, locale, locales));
|
|
51
|
+
}
|
|
52
|
+
if (isLocaleObject(value, locales)) {
|
|
53
|
+
return resolveLocaleValue(value, locale, locales);
|
|
54
|
+
}
|
|
55
|
+
// Nested object — wrap recursively
|
|
56
|
+
return createLocaleProxy(value, locale, locales);
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=locale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../../src/datapool/locale.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unique.d.ts","sourceRoot":"","sources":["../../src/datapool/unique.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAElE;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAGrE;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unique = unique;
|
|
4
|
+
exports.uniqueSeq = uniqueSeq;
|
|
5
|
+
exports.resetUniqueSeq = resetUniqueSeq;
|
|
6
|
+
let sequenceCounter = 0;
|
|
7
|
+
function unique(prefix, suffix = '') {
|
|
8
|
+
return `${prefix}-${Date.now()}${suffix}`;
|
|
9
|
+
}
|
|
10
|
+
function uniqueSeq(prefix, suffix = '') {
|
|
11
|
+
sequenceCounter++;
|
|
12
|
+
return `${prefix}-${String(sequenceCounter).padStart(4, '0')}${suffix}`;
|
|
13
|
+
}
|
|
14
|
+
function resetUniqueSeq() {
|
|
15
|
+
sequenceCounter = 0;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=unique.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unique.js","sourceRoot":"","sources":["../../src/datapool/unique.ts"],"names":[],"mappings":";;AAEA,wBAEC;AAED,8BAGC;AAED,wCAEC;AAbD,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,SAAgB,MAAM,CAAC,MAAc,EAAE,SAAiB,EAAE;IACxD,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,SAAgB,SAAS,CAAC,MAAc,EAAE,SAAiB,EAAE;IAC3D,eAAe,EAAE,CAAC;IAClB,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;AAC1E,CAAC;AAED,SAAgB,cAAc;IAC5B,eAAe,GAAG,CAAC,CAAC;AACtB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { screenshot, screenshotHighlight, screenshotRegion, screenshotRegionHighlight, initScreenshotDir, resetScreenshotDir, setScreenshotDir, isScreenshotEnabled, setAutoPrefix, resetScreenshotCounter, type ScreenshotOptions, } from './screenshot';
|
|
2
|
+
export { loadConfig, loadHighlightStyles, getHighlightStyle, resetConfig, type PlatformPlaywrightConfig, type HighlightStyle, type ViewportSize, } from './config';
|
|
3
|
+
export { datapool, DataPool, configureDatapool, resetDatapoolConfig, unique, uniqueSeq, resetUniqueSeq, type DatapoolOptions, type DatapoolMeta, } from './datapool';
|
|
4
|
+
export { initSuite, type SuiteConfig, type InitSuiteOptions } from './core';
|
|
5
|
+
export { seed, seedViaApi, seedViaUi, registerSeedHandler, registerUiSeedStep, resetSeedHandlers, type SeedHandler, type SeedOptions, type SeedResult, type SeedProfileJson, } from './seed';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE5E,OAAO,EACL,IAAI,EACJ,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,QAAQ,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resetSeedHandlers = exports.registerUiSeedStep = exports.registerSeedHandler = exports.seedViaUi = exports.seedViaApi = exports.seed = exports.initSuite = exports.resetUniqueSeq = exports.uniqueSeq = exports.unique = exports.resetDatapoolConfig = exports.configureDatapool = exports.DataPool = exports.datapool = exports.resetConfig = exports.getHighlightStyle = exports.loadHighlightStyles = exports.loadConfig = exports.resetScreenshotCounter = exports.setAutoPrefix = exports.isScreenshotEnabled = exports.setScreenshotDir = exports.resetScreenshotDir = exports.initScreenshotDir = exports.screenshotRegionHighlight = exports.screenshotRegion = exports.screenshotHighlight = exports.screenshot = void 0;
|
|
4
|
+
var screenshot_1 = require("./screenshot");
|
|
5
|
+
Object.defineProperty(exports, "screenshot", { enumerable: true, get: function () { return screenshot_1.screenshot; } });
|
|
6
|
+
Object.defineProperty(exports, "screenshotHighlight", { enumerable: true, get: function () { return screenshot_1.screenshotHighlight; } });
|
|
7
|
+
Object.defineProperty(exports, "screenshotRegion", { enumerable: true, get: function () { return screenshot_1.screenshotRegion; } });
|
|
8
|
+
Object.defineProperty(exports, "screenshotRegionHighlight", { enumerable: true, get: function () { return screenshot_1.screenshotRegionHighlight; } });
|
|
9
|
+
Object.defineProperty(exports, "initScreenshotDir", { enumerable: true, get: function () { return screenshot_1.initScreenshotDir; } });
|
|
10
|
+
Object.defineProperty(exports, "resetScreenshotDir", { enumerable: true, get: function () { return screenshot_1.resetScreenshotDir; } });
|
|
11
|
+
Object.defineProperty(exports, "setScreenshotDir", { enumerable: true, get: function () { return screenshot_1.setScreenshotDir; } });
|
|
12
|
+
Object.defineProperty(exports, "isScreenshotEnabled", { enumerable: true, get: function () { return screenshot_1.isScreenshotEnabled; } });
|
|
13
|
+
Object.defineProperty(exports, "setAutoPrefix", { enumerable: true, get: function () { return screenshot_1.setAutoPrefix; } });
|
|
14
|
+
Object.defineProperty(exports, "resetScreenshotCounter", { enumerable: true, get: function () { return screenshot_1.resetScreenshotCounter; } });
|
|
15
|
+
var config_1 = require("./config");
|
|
16
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_1.loadConfig; } });
|
|
17
|
+
Object.defineProperty(exports, "loadHighlightStyles", { enumerable: true, get: function () { return config_1.loadHighlightStyles; } });
|
|
18
|
+
Object.defineProperty(exports, "getHighlightStyle", { enumerable: true, get: function () { return config_1.getHighlightStyle; } });
|
|
19
|
+
Object.defineProperty(exports, "resetConfig", { enumerable: true, get: function () { return config_1.resetConfig; } });
|
|
20
|
+
var datapool_1 = require("./datapool");
|
|
21
|
+
Object.defineProperty(exports, "datapool", { enumerable: true, get: function () { return datapool_1.datapool; } });
|
|
22
|
+
Object.defineProperty(exports, "DataPool", { enumerable: true, get: function () { return datapool_1.DataPool; } });
|
|
23
|
+
Object.defineProperty(exports, "configureDatapool", { enumerable: true, get: function () { return datapool_1.configureDatapool; } });
|
|
24
|
+
Object.defineProperty(exports, "resetDatapoolConfig", { enumerable: true, get: function () { return datapool_1.resetDatapoolConfig; } });
|
|
25
|
+
Object.defineProperty(exports, "unique", { enumerable: true, get: function () { return datapool_1.unique; } });
|
|
26
|
+
Object.defineProperty(exports, "uniqueSeq", { enumerable: true, get: function () { return datapool_1.uniqueSeq; } });
|
|
27
|
+
Object.defineProperty(exports, "resetUniqueSeq", { enumerable: true, get: function () { return datapool_1.resetUniqueSeq; } });
|
|
28
|
+
var core_1 = require("./core");
|
|
29
|
+
Object.defineProperty(exports, "initSuite", { enumerable: true, get: function () { return core_1.initSuite; } });
|
|
30
|
+
var seed_1 = require("./seed");
|
|
31
|
+
Object.defineProperty(exports, "seed", { enumerable: true, get: function () { return seed_1.seed; } });
|
|
32
|
+
Object.defineProperty(exports, "seedViaApi", { enumerable: true, get: function () { return seed_1.seedViaApi; } });
|
|
33
|
+
Object.defineProperty(exports, "seedViaUi", { enumerable: true, get: function () { return seed_1.seedViaUi; } });
|
|
34
|
+
Object.defineProperty(exports, "registerSeedHandler", { enumerable: true, get: function () { return seed_1.registerSeedHandler; } });
|
|
35
|
+
Object.defineProperty(exports, "registerUiSeedStep", { enumerable: true, get: function () { return seed_1.registerUiSeedStep; } });
|
|
36
|
+
Object.defineProperty(exports, "resetSeedHandlers", { enumerable: true, get: function () { return seed_1.resetSeedHandlers; } });
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAYsB;AAXpB,wGAAA,UAAU,OAAA;AACV,iHAAA,mBAAmB,OAAA;AACnB,8GAAA,gBAAgB,OAAA;AAChB,uHAAA,yBAAyB,OAAA;AACzB,+GAAA,iBAAiB,OAAA;AACjB,gHAAA,kBAAkB,OAAA;AAClB,8GAAA,gBAAgB,OAAA;AAChB,iHAAA,mBAAmB,OAAA;AACnB,2GAAA,aAAa,OAAA;AACb,oHAAA,sBAAsB,OAAA;AAIxB,mCAQkB;AAPhB,oGAAA,UAAU,OAAA;AACV,6GAAA,mBAAmB,OAAA;AACnB,2GAAA,iBAAiB,OAAA;AACjB,qGAAA,WAAW,OAAA;AAMb,uCAUoB;AATlB,oGAAA,QAAQ,OAAA;AACR,oGAAA,QAAQ,OAAA;AACR,6GAAA,iBAAiB,OAAA;AACjB,+GAAA,mBAAmB,OAAA;AACnB,kGAAA,MAAM,OAAA;AACN,qGAAA,SAAS,OAAA;AACT,0GAAA,cAAc,OAAA;AAKhB,+BAA4E;AAAnE,iGAAA,SAAS,OAAA;AAElB,+BAWgB;AAVd,4FAAA,IAAI,OAAA;AACJ,kGAAA,UAAU,OAAA;AACV,iGAAA,SAAS,OAAA;AACT,2GAAA,mBAAmB,OAAA;AACnB,0GAAA,kBAAkB,OAAA;AAClB,yGAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function initScreenshotDir(baseDir?: string): string;
|
|
2
|
+
export declare function getScreenshotDir(): string;
|
|
3
|
+
export declare function resolveScreenshotPath(name: string, subdirectory?: string): string;
|
|
4
|
+
export declare function isScreenshotEnabled(): boolean;
|
|
5
|
+
export declare function resetScreenshotDir(): void;
|
|
6
|
+
export declare function setAutoPrefix(enabled: boolean): void;
|
|
7
|
+
export declare function resetScreenshotCounter(): void;
|
|
8
|
+
export declare function setScreenshotDir(dir: string): void;
|
|
9
|
+
//# sourceMappingURL=directory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../../src/screenshot/directory.ts"],"names":[],"mappings":"AAWA,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAwB,GAAG,MAAM,CA2B3E;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAOzC;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBjF;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEpD;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAElD"}
|
|
@@ -0,0 +1,122 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.initScreenshotDir = initScreenshotDir;
|
|
37
|
+
exports.getScreenshotDir = getScreenshotDir;
|
|
38
|
+
exports.resolveScreenshotPath = resolveScreenshotPath;
|
|
39
|
+
exports.isScreenshotEnabled = isScreenshotEnabled;
|
|
40
|
+
exports.resetScreenshotDir = resetScreenshotDir;
|
|
41
|
+
exports.setAutoPrefix = setAutoPrefix;
|
|
42
|
+
exports.resetScreenshotCounter = resetScreenshotCounter;
|
|
43
|
+
exports.setScreenshotDir = setScreenshotDir;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
let currentRunDir = null;
|
|
47
|
+
let autoPrefix = false;
|
|
48
|
+
let screenshotCounter = 0;
|
|
49
|
+
function formatTimestamp(date) {
|
|
50
|
+
return date.toISOString().replace(/[:.]/g, '-').replace('Z', '');
|
|
51
|
+
}
|
|
52
|
+
function initScreenshotDir(baseDir = './screenshots') {
|
|
53
|
+
const resolvedBase = path.resolve(baseDir);
|
|
54
|
+
const timestamp = formatTimestamp(new Date());
|
|
55
|
+
const runDir = path.join(resolvedBase, timestamp);
|
|
56
|
+
fs.mkdirSync(runDir, { recursive: true });
|
|
57
|
+
const latestPath = path.join(resolvedBase, 'latest');
|
|
58
|
+
try {
|
|
59
|
+
if (fs.existsSync(latestPath)) {
|
|
60
|
+
fs.rmSync(latestPath, { recursive: true });
|
|
61
|
+
}
|
|
62
|
+
fs.symlinkSync(runDir, latestPath, 'junction');
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
try {
|
|
66
|
+
if (fs.existsSync(latestPath)) {
|
|
67
|
+
fs.rmSync(latestPath, { recursive: true });
|
|
68
|
+
}
|
|
69
|
+
fs.cpSync(runDir, latestPath, { recursive: true });
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
console.warn('Warning: Could not create screenshots/latest symlink or copy');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
currentRunDir = runDir;
|
|
76
|
+
return runDir;
|
|
77
|
+
}
|
|
78
|
+
function getScreenshotDir() {
|
|
79
|
+
if (!currentRunDir) {
|
|
80
|
+
throw new Error('Screenshot directory not initialized. Call initScreenshotDir() in Playwright globalSetup, or ensure the screenshot module is properly configured.');
|
|
81
|
+
}
|
|
82
|
+
return currentRunDir;
|
|
83
|
+
}
|
|
84
|
+
function resolveScreenshotPath(name, subdirectory) {
|
|
85
|
+
const runDir = getScreenshotDir();
|
|
86
|
+
const normalized = name.replace(/\.png$/, '');
|
|
87
|
+
const nameParts = normalized.split('/');
|
|
88
|
+
let baseName = nameParts.pop();
|
|
89
|
+
if (autoPrefix) {
|
|
90
|
+
screenshotCounter++;
|
|
91
|
+
const prefix = String(screenshotCounter).padStart(4, '0');
|
|
92
|
+
baseName = `${prefix}-${baseName}`;
|
|
93
|
+
}
|
|
94
|
+
const fileName = baseName + '.png';
|
|
95
|
+
const nameDir = nameParts.length > 0 ? nameParts.join('/') : '';
|
|
96
|
+
const segments = [runDir];
|
|
97
|
+
if (subdirectory)
|
|
98
|
+
segments.push(subdirectory);
|
|
99
|
+
if (nameDir)
|
|
100
|
+
segments.push(nameDir);
|
|
101
|
+
const dir = path.join(...segments);
|
|
102
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
103
|
+
return path.join(dir, fileName);
|
|
104
|
+
}
|
|
105
|
+
function isScreenshotEnabled() {
|
|
106
|
+
return currentRunDir !== null;
|
|
107
|
+
}
|
|
108
|
+
function resetScreenshotDir() {
|
|
109
|
+
currentRunDir = null;
|
|
110
|
+
autoPrefix = false;
|
|
111
|
+
screenshotCounter = 0;
|
|
112
|
+
}
|
|
113
|
+
function setAutoPrefix(enabled) {
|
|
114
|
+
autoPrefix = enabled;
|
|
115
|
+
}
|
|
116
|
+
function resetScreenshotCounter() {
|
|
117
|
+
screenshotCounter = 0;
|
|
118
|
+
}
|
|
119
|
+
function setScreenshotDir(dir) {
|
|
120
|
+
currentRunDir = dir;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/screenshot/directory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Page } from '@playwright/test';
|
|
2
|
+
import { type HighlightStyle } from '../config';
|
|
3
|
+
interface SavedStyle {
|
|
4
|
+
outline: string;
|
|
5
|
+
backgroundColor: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function applyHighlight(page: Page, selector: string, style?: HighlightStyle): Promise<SavedStyle>;
|
|
8
|
+
export declare function removeHighlight(page: Page, selector: string, savedStyle: SavedStyle): Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=highlight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/screenshot/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAEnE,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyHighlight = applyHighlight;
|
|
4
|
+
exports.removeHighlight = removeHighlight;
|
|
5
|
+
const config_1 = require("../config");
|
|
6
|
+
async function applyHighlight(page, selector, style) {
|
|
7
|
+
const highlightStyle = style ?? (0, config_1.getHighlightStyle)('default');
|
|
8
|
+
const locator = page.locator(selector).first();
|
|
9
|
+
await locator.waitFor({ state: 'visible' });
|
|
10
|
+
const savedStyle = await locator.evaluate((el, hl) => {
|
|
11
|
+
const htmlEl = el;
|
|
12
|
+
const saved = {
|
|
13
|
+
outline: htmlEl.style.outline,
|
|
14
|
+
backgroundColor: htmlEl.style.backgroundColor,
|
|
15
|
+
};
|
|
16
|
+
htmlEl.style.outline = hl.outline;
|
|
17
|
+
htmlEl.style.backgroundColor = hl.backgroundColor;
|
|
18
|
+
return saved;
|
|
19
|
+
}, highlightStyle);
|
|
20
|
+
await page.evaluate(() => new Promise((resolve) => requestAnimationFrame(resolve)));
|
|
21
|
+
return savedStyle;
|
|
22
|
+
}
|
|
23
|
+
async function removeHighlight(page, selector, savedStyle) {
|
|
24
|
+
try {
|
|
25
|
+
const locator = page.locator(selector).first();
|
|
26
|
+
await locator.evaluate((el, saved) => {
|
|
27
|
+
const htmlEl = el;
|
|
28
|
+
htmlEl.style.outline = saved.outline;
|
|
29
|
+
htmlEl.style.backgroundColor = saved.backgroundColor;
|
|
30
|
+
}, savedStyle);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Element may have been removed or page navigated; safe to ignore
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=highlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../src/screenshot/highlight.ts"],"names":[],"mappings":";;AAQA,wCA2BC;AAED,0CAkBC;AAtDD,sCAAmE;AAO5D,KAAK,UAAU,cAAc,CAClC,IAAU,EACV,QAAgB,EAChB,KAAsB;IAEtB,MAAM,cAAc,GAAG,KAAK,IAAI,IAAA,0BAAiB,EAAC,SAAS,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/C,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CACvC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACT,MAAM,MAAM,GAAG,EAAiB,CAAC;QACjC,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;YAC7B,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe;SAC9C,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,eAAe,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC,EACD,cAAc,CACf,CAAC;IAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEpF,OAAO,UAAU,CAAC;AACpB,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,IAAU,EACV,QAAgB,EAChB,UAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/C,MAAM,OAAO,CAAC,QAAQ,CACpB,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;YACZ,MAAM,MAAM,GAAG,EAAiB,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QACvD,CAAC,EACD,UAAU,CACX,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;IACpE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Page } from '@playwright/test';
|
|
2
|
+
export { initScreenshotDir, resetScreenshotDir, setScreenshotDir, isScreenshotEnabled, setAutoPrefix, resetScreenshotCounter } from './directory';
|
|
3
|
+
export interface ScreenshotOptions {
|
|
4
|
+
fullPage?: boolean;
|
|
5
|
+
subdirectory?: string;
|
|
6
|
+
style?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function screenshot(page: Page, name: string, options?: ScreenshotOptions): Promise<string | null>;
|
|
9
|
+
export declare function screenshotHighlight(page: Page, name: string, highlightSelector: string, options?: ScreenshotOptions): Promise<string | null>;
|
|
10
|
+
export declare function screenshotRegion(page: Page, name: string, regionSelector: string, options?: ScreenshotOptions): Promise<string | null>;
|
|
11
|
+
export declare function screenshotRegionHighlight(page: Page, name: string, regionSelector: string, highlightSelector: string, options?: ScreenshotOptions): Promise<string | null>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/screenshot/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAK7C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAElJ,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYxB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resetScreenshotCounter = exports.setAutoPrefix = exports.isScreenshotEnabled = exports.setScreenshotDir = exports.resetScreenshotDir = exports.initScreenshotDir = void 0;
|
|
4
|
+
exports.screenshot = screenshot;
|
|
5
|
+
exports.screenshotHighlight = screenshotHighlight;
|
|
6
|
+
exports.screenshotRegion = screenshotRegion;
|
|
7
|
+
exports.screenshotRegionHighlight = screenshotRegionHighlight;
|
|
8
|
+
const directory_1 = require("./directory");
|
|
9
|
+
const highlight_1 = require("./highlight");
|
|
10
|
+
const config_1 = require("../config");
|
|
11
|
+
var directory_2 = require("./directory");
|
|
12
|
+
Object.defineProperty(exports, "initScreenshotDir", { enumerable: true, get: function () { return directory_2.initScreenshotDir; } });
|
|
13
|
+
Object.defineProperty(exports, "resetScreenshotDir", { enumerable: true, get: function () { return directory_2.resetScreenshotDir; } });
|
|
14
|
+
Object.defineProperty(exports, "setScreenshotDir", { enumerable: true, get: function () { return directory_2.setScreenshotDir; } });
|
|
15
|
+
Object.defineProperty(exports, "isScreenshotEnabled", { enumerable: true, get: function () { return directory_2.isScreenshotEnabled; } });
|
|
16
|
+
Object.defineProperty(exports, "setAutoPrefix", { enumerable: true, get: function () { return directory_2.setAutoPrefix; } });
|
|
17
|
+
Object.defineProperty(exports, "resetScreenshotCounter", { enumerable: true, get: function () { return directory_2.resetScreenshotCounter; } });
|
|
18
|
+
async function screenshot(page, name, options = {}) {
|
|
19
|
+
if (!(0, directory_1.isScreenshotEnabled)())
|
|
20
|
+
return null;
|
|
21
|
+
const filePath = (0, directory_1.resolveScreenshotPath)(name, options.subdirectory);
|
|
22
|
+
await page.screenshot({ path: filePath, fullPage: options.fullPage ?? false });
|
|
23
|
+
return filePath;
|
|
24
|
+
}
|
|
25
|
+
async function screenshotHighlight(page, name, highlightSelector, options = {}) {
|
|
26
|
+
if (!(0, directory_1.isScreenshotEnabled)())
|
|
27
|
+
return null;
|
|
28
|
+
const style = options.style ? (0, config_1.getHighlightStyle)(options.style) : undefined;
|
|
29
|
+
const savedStyle = await (0, highlight_1.applyHighlight)(page, highlightSelector, style);
|
|
30
|
+
const filePath = (0, directory_1.resolveScreenshotPath)(name, options.subdirectory);
|
|
31
|
+
await page.screenshot({ path: filePath, fullPage: options.fullPage ?? false });
|
|
32
|
+
await (0, highlight_1.removeHighlight)(page, highlightSelector, savedStyle);
|
|
33
|
+
return filePath;
|
|
34
|
+
}
|
|
35
|
+
async function screenshotRegion(page, name, regionSelector, options = {}) {
|
|
36
|
+
if (!(0, directory_1.isScreenshotEnabled)())
|
|
37
|
+
return null;
|
|
38
|
+
const filePath = (0, directory_1.resolveScreenshotPath)(name, options.subdirectory);
|
|
39
|
+
const element = page.locator(regionSelector);
|
|
40
|
+
await element.screenshot({ path: filePath });
|
|
41
|
+
return filePath;
|
|
42
|
+
}
|
|
43
|
+
async function screenshotRegionHighlight(page, name, regionSelector, highlightSelector, options = {}) {
|
|
44
|
+
if (!(0, directory_1.isScreenshotEnabled)())
|
|
45
|
+
return null;
|
|
46
|
+
const style = options.style ? (0, config_1.getHighlightStyle)(options.style) : undefined;
|
|
47
|
+
const savedStyle = await (0, highlight_1.applyHighlight)(page, highlightSelector, style);
|
|
48
|
+
const filePath = (0, directory_1.resolveScreenshotPath)(name, options.subdirectory);
|
|
49
|
+
const element = page.locator(regionSelector);
|
|
50
|
+
await element.screenshot({ path: filePath });
|
|
51
|
+
await (0, highlight_1.removeHighlight)(page, highlightSelector, savedStyle);
|
|
52
|
+
return filePath;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/screenshot/index.ts"],"names":[],"mappings":";;;AAaA,gCAUC;AAED,kDAgBC;AAED,4CAYC;AAED,8DAkBC;AA1ED,2CAAyE;AACzE,2CAA8D;AAC9D,sCAA8C;AAE9C,yCAAkJ;AAAzI,8GAAA,iBAAiB,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,mHAAA,sBAAsB,OAAA;AAQrH,KAAK,UAAU,UAAU,CAC9B,IAAU,EACV,IAAY,EACZ,UAA6B,EAAE;IAE/B,IAAI,CAAC,IAAA,+BAAmB,GAAE;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,QAAQ,GAAG,IAAA,iCAAqB,EAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;IAC/E,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,mBAAmB,CACvC,IAAU,EACV,IAAY,EACZ,iBAAyB,EACzB,UAA6B,EAAE;IAE/B,IAAI,CAAC,IAAA,+BAAmB,GAAE;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,0BAAiB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,MAAM,UAAU,GAAG,MAAM,IAAA,0BAAc,EAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAExE,MAAM,QAAQ,GAAG,IAAA,iCAAqB,EAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;IAE/E,MAAM,IAAA,2BAAe,EAAC,IAAI,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAC3D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,IAAU,EACV,IAAY,EACZ,cAAsB,EACtB,UAA6B,EAAE;IAE/B,IAAI,CAAC,IAAA,+BAAmB,GAAE;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,QAAQ,GAAG,IAAA,iCAAqB,EAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,yBAAyB,CAC7C,IAAU,EACV,IAAY,EACZ,cAAsB,EACtB,iBAAyB,EACzB,UAA6B,EAAE;IAE/B,IAAI,CAAC,IAAA,+BAAmB,GAAE;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,0BAAiB,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,MAAM,UAAU,GAAG,MAAM,IAAA,0BAAc,EAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAExE,MAAM,QAAQ,GAAG,IAAA,iCAAqB,EAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE7C,MAAM,IAAA,2BAAe,EAAC,IAAI,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAC3D,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|