@flemist/simple-utils 2.1.6 → 2.1.8

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.
@@ -1,6 +1,6 @@
1
- import { C as e, b as s, aF as r, ac as c, ak as o, al as n, am as h, an as m, af as b, aM as l, av as i, aw as u, by as M, bz as d, bA as g, bB as C, bC as f, bD as y, bE as O, bN as I, bF as p, bG as v, bH as R, bI as T, bJ as S, bK as A, bL as N, bM as j, M as E, R as D, as as F, at as L, U as W, ab as k, a7 as B, az as P, aG as x, aH as G, y as U, aa as w, a8 as z, ad as J, V as K, r as _, o as q, q as V, p as H, aD as Q, aC as X, aB as Z, ap as Y, Q as $, S as aa, A as ta, a1 as ea, a2 as sa, a3 as ra, a4 as ca, W as oa, X as na, ay as ha, aJ as ma, aI as ba, ag as la, Y as ia, Z as ua, _ as Ma, a9 as da, T as ga, a as Ca, g as fa, a5 as ya, $ as Oa, H as Ia, G as pa, ah as va, z as Ra, ax as Ta, ar as Sa, s as Aa, aE as Na, b8 as ja, ba as Ea, aP as Da, aN as Fa, bx as La, aO as Wa, aS as ka, bc as Ba, bf as Pa, b4 as xa, b3 as Ga, aT as Ua, bq as wa, a_ as za, bp as Ja, aY as Ka, bo as _a, b1 as qa, aX as Va, br as Ha, aV as Qa, aU as Xa, aR as Za, bu as Ya, b6 as $a, b5 as at, aW as tt, aZ as et, bi as st, bj as rt, bk as ct, bm as ot, bg as nt, bn as ht, a$ as mt, bl as bt, bh as lt, be as it, bb as ut, b7 as Mt, b9 as dt, bs as gt, bt as Ct, aQ as ft, aK as yt, aL as Ot, b0 as It, bd as pt, b2 as vt, bv as Rt, bw as Tt, D as St, B as At, E as Nt, F as jt, aq as Et, K as Dt, P as Ft, I as Lt, L as Wt, J as kt, N as Bt, O as Pt, u as xt, a6 as Gt, w as Ut, v as wt, ai as zt, k as Jt, j as Kt, e as _t, d as qt, n as Vt, m as Ht, l as Qt, i as Xt, h as Zt, f as Yt, c as $t, t as ae, x as te, a0 as ee, bT as se, bV as re, bU as ce, bO as oe, bS as ne, bP as he, bR as me, bQ as be, aA as le, au as ie, ae as ue, ao as Me, aj as de } from "../urlGet-OHY_Qdk-.mjs";
1
+ import { C as t, b as s, aI as r, af as c, an as o, ao as n, ap as h, aq as m, ai as b, aP as l, ay as i, az as u, bB as M, bC as d, bD as C, bE as g, bF as f, bG as p, bH as v, bQ as y, bI as O, bJ as I, bK as T, bL as R, bM as S, bN as A, bO as N, bP as j, M as E, R as D, av as F, aw as L, U as W, ae as k, aa as B, aC as G, aJ as P, aK as z, B as x, ad as U, ab as J, ag as w, Y as K, u as _, o as q, q as V, p as H, r as X, v as Q, s as Y, aG as Z, aF as $, aE as aa, as as ea, V as ta, W as sa, E as ra, a4 as ca, a5 as oa, a6 as na, a7 as ha, Z as ma, _ as ba, aB as la, aM as ia, aL as ua, aj as Ma, $ as da, a0 as Ca, a1 as ga, ac as fa, X as pa, a as va, g as ya, a8 as Oa, a2 as Ia, K as Ta, J as Ra, ak as Sa, D as Aa, aA as Na, au as ja, w as Ea, aH as Da, bb as Fa, bd as La, aS as Wa, aQ as ka, bA as Ba, aR as Ga, aV as Pa, bf as za, bi as xa, b7 as Ua, b6 as Ja, aW as wa, bt as Ka, b1 as _a, bs as qa, a$ as Va, br as Ha, b4 as Xa, a_ as Qa, bu as Ya, aY as Za, aX as $a, aU as ae, bx as ee, b9 as te, b8 as se, aZ as re, b0 as ce, bl as oe, bm as ne, bn as he, bp as me, bj as be, bq as le, b2 as ie, bo as ue, bk as Me, bh as de, be as Ce, ba as ge, bc as fe, bv as pe, bw as ve, aT as ye, aN as Oe, aO as Ie, b3 as Te, bg as Re, b5 as Se, by as Ae, bz as Ne, G as je, F as Ee, H as De, I as Fe, at as Le, O as We, T as ke, L as Be, P as Ge, N as Pe, Q as ze, S as xe, x as Ue, a9 as Je, z as we, y as Ke, al as _e, k as qe, j as Ve, e as He, d as Xe, n as Qe, m as Ye, l as Ze, i as $e, h as at, f as et, c as tt, t as st, A as rt, a3 as ct, bW as ot, bY as nt, bX as ht, bR as mt, bV as bt, bS as lt, bU as it, bT as ut, aD as Mt, ax as dt, ah as Ct, ar as gt, am as ft } from "../urlGet-BtyqjC2r.mjs";
2
2
  export {
3
- e as Cache,
3
+ t as Cache,
4
4
  s as CacheStats,
5
5
  r as CheckError,
6
6
  c as ConsoleMessageLevel,
@@ -14,16 +14,16 @@ export {
14
14
  u as Matcher,
15
15
  M as MatcherAny,
16
16
  d as MatcherArray,
17
- g as MatcherArrayItem,
18
- C as MatcherConvert,
17
+ C as MatcherArrayItem,
18
+ g as MatcherConvert,
19
19
  f as MatcherCustom,
20
- y as MatcherFew,
21
- O as MatcherIn,
22
- I as MatcherInstanceOf,
23
- p as MatcherIs,
24
- v as MatcherNever,
25
- R as MatcherNot,
26
- T as MatcherNumber,
20
+ p as MatcherFew,
21
+ v as MatcherIn,
22
+ y as MatcherInstanceOf,
23
+ O as MatcherIs,
24
+ I as MatcherNever,
25
+ T as MatcherNot,
26
+ R as MatcherNumber,
27
27
  S as MatcherObject,
28
28
  A as MatcherObjectEntry,
29
29
  N as MatcherRef,
@@ -35,145 +35,148 @@ export {
35
35
  W as UNIQUE_PSEUDO_RANDOM_MAX_COUNT,
36
36
  k as alertConsole,
37
37
  B as alertReplace,
38
- P as argsToString,
39
- x as check,
40
- G as checkFunc,
41
- U as compressGzip,
42
- w as consoleIntercept,
43
- z as consoleMessageToString,
44
- J as consoleReplace,
38
+ G as argsToString,
39
+ P as check,
40
+ z as checkFunc,
41
+ x as compressGzip,
42
+ U as consoleIntercept,
43
+ J as consoleMessageToString,
44
+ w as consoleReplace,
45
45
  K as convertTimeZone,
46
46
  _ as converterErrorToBuffer,
47
47
  q as converterJson,
48
48
  V as converterJsonBuffer,
49
49
  H as converterStringToBuffer,
50
- Q as createMatchResult,
51
- X as createMatchResultBoolean,
52
- Z as createMatchResultError,
53
- Y as createTaskDelayRetry,
54
- $ as createUniquePseudoRandom,
55
- aa as dateNowUnique,
56
- ta as decompressGzip,
57
- ea as deepCloneJsonLike,
58
- sa as deepEqualJsonLike,
59
- ra as deepEqualJsonLikeMap,
60
- ca as equalArray,
61
- oa as escapeHtml,
62
- na as escapeRegExp,
63
- ha as expectedToString,
64
- ma as filterMatchResult,
65
- ba as filterMatchResultNested,
66
- la as fixStackTrace,
67
- ia as formatAny,
68
- ua as formatDate,
69
- Ma as formatDateFileName,
70
- da as getConsoleMessages,
71
- ga as getDateInet,
72
- Ca as getHashKey,
73
- fa as getJsonKey,
74
- ya as getNormalizedObject,
75
- Oa as getObjectId,
76
- Ia as getRandomFunc,
77
- pa as getRandomSeed,
78
- va as getStackTrace,
79
- Ra as isGzipCompressed,
80
- Ta as isMatcher,
81
- Sa as isObservable,
82
- Aa as mapObjectConverter,
83
- Na as match,
84
- ja as matchAnd,
85
- Ea as matchAndPipe,
86
- Da as matchAny,
87
- Fa as matchArray,
88
- La as matchArrayBuffer,
89
- Wa as matchArrayIncludes,
90
- ka as matchArrayItem,
91
- Ba as matchArrayLength,
92
- Pa as matchArrayWith,
93
- xa as matchBoolean,
94
- Ga as matchConstructor,
95
- Ua as matchConvert,
96
- wa as matchCustom,
97
- za as matchDeep,
98
- Ja as matchEnum,
99
- Ka as matchFloat,
100
- _a as matchIn,
101
- qa as matchInstanceOf,
102
- Va as matchInt,
103
- Ha as matchIntDate,
104
- Qa as matchIs,
105
- Xa as matchIsNonStrict,
106
- Za as matchNever,
107
- Ya as matchNot,
108
- $a as matchNotNullish,
109
- at as matchNullish,
110
- tt as matchNumber,
111
- et as matchObject,
112
- st as matchObjectEntries,
113
- rt as matchObjectEntry,
114
- ct as matchObjectKey,
115
- ot as matchObjectKeyValue,
116
- nt as matchObjectKeys,
117
- ht as matchObjectKeysNotNull,
118
- mt as matchObjectPartial,
119
- bt as matchObjectValue,
120
- lt as matchObjectValues,
121
- it as matchObjectWith,
122
- ut as matchOptional,
123
- Mt as matchOr,
124
- dt as matchOrPipe,
125
- gt as matchRange,
126
- Ct as matchRangeDate,
127
- ft as matchRef,
128
- yt as matchResultNestedToString,
129
- Ot as matchResultToString,
130
- It as matchString,
131
- pt as matchStringLength,
132
- vt as matchTypeOf,
133
- Rt as matchUuid,
134
- Tt as matchValueState,
135
- St as max,
136
- At as min,
137
- Nt as minMax,
138
- jt as numberMod,
139
- Et as promiseAllWait,
140
- Dt as randomBoolean,
141
- Ft as randomEnum,
142
- Lt as randomFloat,
143
- Wt as randomIndexWeighted,
144
- kt as randomInt,
145
- Bt as randomItem,
146
- Pt as randomItems,
147
- xt as setArrayConverter,
148
- Gt as setFuncName,
149
- Ut as sha256,
150
- wt as sha256Buffer,
151
- zt as timeoutAbortController,
152
- Jt as toConvertFrom,
153
- Kt as toConvertTo,
154
- _t as toConvertWithDefaultFrom,
155
- qt as toConvertWithDefaultTo,
156
- Vt as toConverter,
157
- Ht as toConverterFrom,
158
- Qt as toConverterTo,
159
- Xt as toConverterWithDefault,
160
- Zt as toConverterWithDefaultFrom,
161
- Yt as toConverterWithDefaultTo,
162
- $t as toCorrect,
163
- ae as toCorrectWithDefault,
164
- te as toHex,
165
- ee as truncateString,
166
- se as urlGetBoolean,
167
- re as urlGetFloat,
168
- ce as urlGetInt,
169
- oe as urlGetParams,
170
- ne as urlGetString,
171
- he as urlParamToBoolean,
172
- me as urlParamToFloat,
173
- be as urlParamToInt,
174
- le as validateMatchResult,
175
- ie as waitObservable,
176
- ue as withConsoleReplace,
177
- Me as withRetry,
178
- de as withTimeout
50
+ X as createConverterBufferToGzip,
51
+ Q as createConverterErrorToGzip,
52
+ Y as createConverterJsonGzip,
53
+ Z as createMatchResult,
54
+ $ as createMatchResultBoolean,
55
+ aa as createMatchResultError,
56
+ ea as createTaskDelayRetry,
57
+ ta as createUniquePseudoRandom,
58
+ sa as dateNowUnique,
59
+ ra as decompressGzip,
60
+ ca as deepCloneJsonLike,
61
+ oa as deepEqualJsonLike,
62
+ na as deepEqualJsonLikeMap,
63
+ ha as equalArray,
64
+ ma as escapeHtml,
65
+ ba as escapeRegExp,
66
+ la as expectedToString,
67
+ ia as filterMatchResult,
68
+ ua as filterMatchResultNested,
69
+ Ma as fixStackTrace,
70
+ da as formatAny,
71
+ Ca as formatDate,
72
+ ga as formatDateFileName,
73
+ fa as getConsoleMessages,
74
+ pa as getDateInet,
75
+ va as getHashKey,
76
+ ya as getJsonKey,
77
+ Oa as getNormalizedObject,
78
+ Ia as getObjectId,
79
+ Ta as getRandomFunc,
80
+ Ra as getRandomSeed,
81
+ Sa as getStackTrace,
82
+ Aa as isGzipCompressed,
83
+ Na as isMatcher,
84
+ ja as isObservable,
85
+ Ea as mapObjectConverter,
86
+ Da as match,
87
+ Fa as matchAnd,
88
+ La as matchAndPipe,
89
+ Wa as matchAny,
90
+ ka as matchArray,
91
+ Ba as matchArrayBuffer,
92
+ Ga as matchArrayIncludes,
93
+ Pa as matchArrayItem,
94
+ za as matchArrayLength,
95
+ xa as matchArrayWith,
96
+ Ua as matchBoolean,
97
+ Ja as matchConstructor,
98
+ wa as matchConvert,
99
+ Ka as matchCustom,
100
+ _a as matchDeep,
101
+ qa as matchEnum,
102
+ Va as matchFloat,
103
+ Ha as matchIn,
104
+ Xa as matchInstanceOf,
105
+ Qa as matchInt,
106
+ Ya as matchIntDate,
107
+ Za as matchIs,
108
+ $a as matchIsNonStrict,
109
+ ae as matchNever,
110
+ ee as matchNot,
111
+ te as matchNotNullish,
112
+ se as matchNullish,
113
+ re as matchNumber,
114
+ ce as matchObject,
115
+ oe as matchObjectEntries,
116
+ ne as matchObjectEntry,
117
+ he as matchObjectKey,
118
+ me as matchObjectKeyValue,
119
+ be as matchObjectKeys,
120
+ le as matchObjectKeysNotNull,
121
+ ie as matchObjectPartial,
122
+ ue as matchObjectValue,
123
+ Me as matchObjectValues,
124
+ de as matchObjectWith,
125
+ Ce as matchOptional,
126
+ ge as matchOr,
127
+ fe as matchOrPipe,
128
+ pe as matchRange,
129
+ ve as matchRangeDate,
130
+ ye as matchRef,
131
+ Oe as matchResultNestedToString,
132
+ Ie as matchResultToString,
133
+ Te as matchString,
134
+ Re as matchStringLength,
135
+ Se as matchTypeOf,
136
+ Ae as matchUuid,
137
+ Ne as matchValueState,
138
+ je as max,
139
+ Ee as min,
140
+ De as minMax,
141
+ Fe as numberMod,
142
+ Le as promiseAllWait,
143
+ We as randomBoolean,
144
+ ke as randomEnum,
145
+ Be as randomFloat,
146
+ Ge as randomIndexWeighted,
147
+ Pe as randomInt,
148
+ ze as randomItem,
149
+ xe as randomItems,
150
+ Ue as setArrayConverter,
151
+ Je as setFuncName,
152
+ we as sha256,
153
+ Ke as sha256Buffer,
154
+ _e as timeoutAbortController,
155
+ qe as toConvertFrom,
156
+ Ve as toConvertTo,
157
+ He as toConvertWithDefaultFrom,
158
+ Xe as toConvertWithDefaultTo,
159
+ Qe as toConverter,
160
+ Ye as toConverterFrom,
161
+ Ze as toConverterTo,
162
+ $e as toConverterWithDefault,
163
+ at as toConverterWithDefaultFrom,
164
+ et as toConverterWithDefaultTo,
165
+ tt as toCorrect,
166
+ st as toCorrectWithDefault,
167
+ rt as toHex,
168
+ ct as truncateString,
169
+ ot as urlGetBoolean,
170
+ nt as urlGetFloat,
171
+ ht as urlGetInt,
172
+ mt as urlGetParams,
173
+ bt as urlGetString,
174
+ lt as urlParamToBoolean,
175
+ it as urlParamToFloat,
176
+ ut as urlParamToInt,
177
+ Mt as validateMatchResult,
178
+ dt as waitObservable,
179
+ Ct as withConsoleReplace,
180
+ gt as withRetry,
181
+ ft as withTimeout
179
182
  };
@@ -7,7 +7,9 @@ export type FileStorageOptionsBase = {
7
7
  };
8
8
  export type FileStorageOptions = FileStorageOptionsBase & {
9
9
  /**
10
- * Temp dir should be on the same device as dir to be meaningful.
10
+ * Temp dir should be on the same device as dir to be meaningful
11
+ * The cache writes files via atomic rename from tmp to target,
12
+ * which requires same device.
11
13
  * The temp dir can be shared between multiple cache instances
12
14
  */
13
15
  tmpDir: string;
@@ -1,10 +1,13 @@
1
1
  import { ConverterAsync, ConvertToAsync } from '../../common/converter';
2
2
  import { CacheOptions } from '../../common/cache/Cache';
3
3
  import { CacheStat, NumberRange } from '../../common';
4
+ import { CompressGzipOptions } from '../../common/gzip/compressGzip';
4
5
  export declare function createFileCacheOptions<Input, Value>(options: {
5
6
  dir: string;
6
7
  /**
7
- * Temp dir should be on the same device as dir to be meaningful.
8
+ * Temp dir should be on the same device as dir to be meaningful
9
+ * The cache writes files via atomic rename from tmp to target,
10
+ * which requires same device.
8
11
  * The temp dir can be shared between multiple cache instances
9
12
  */
10
13
  tmpDir: string;
@@ -12,4 +15,5 @@ export declare function createFileCacheOptions<Input, Value>(options: {
12
15
  converterInput?: null | ConvertToAsync<Input, string>;
13
16
  converterValue?: null | ConverterAsync<Value, Uint8Array>;
14
17
  isExpired?: null | ((stat: CacheStat) => boolean);
18
+ compressOptions?: null | CompressGzipOptions;
15
19
  }): CacheOptions<Input, Value, any, CacheStat, string, Uint8Array, Uint8Array, CacheStat>;
@@ -1,9 +1,9 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../urlGet-BoqnOos7.js"),L=require("path"),_=require("@flemist/time-limits"),ze=require("node:os"),W=require("fs"),K=require("@flemist/priority-queue"),J=require("@flemist/async-utils"),Je=require("picomatch"),X=require("child_process"),ee=require("@flemist/abort-controller-fast"),Ue=require("@flemist/test-variants");function pe(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const s=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,s.get?s:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const k=pe(L),A=pe(W),N=new _.Pool(ze.cpus().length);async function ye(e,t,o,s){e=L.resolve(e),t=L.resolve(t),await _.poolRunWait({pool:s??N,count:1,func:async()=>{let n=!1;try{await r.promiseAllWait([W.promises.mkdir(L.dirname(e),{recursive:!0}),(async()=>{await W.promises.mkdir(L.dirname(t),{recursive:!0}),await W.promises.writeFile(t,o),n=!0})()]),await W.promises.rename(t,e)}catch(a){throw n&&await W.promises.unlink(t).catch(()=>{}),a}}})}function we(){return`${Date.now().toString(36)}${Math.random().toString(36).substring(2)}.tmp`}function R(e){return e.replace(/[\\/]+/g,"/")}const Ge=new r.LockerWithId;function Ke(e){const{filePath:t,func:o}=e;return Ge.lock(R(t),()=>_.poolRunWait({pool:N,count:1,func:o}))}function ge(e){return e.match(/^[/\\]?[^/\\]+/)[0]}function be(e,t){return ge(e)+"|"+t.ino}function Ee(e){return e.endsWith(":")&&(e+="/"),k.resolve(e)}function me(e,t){e.totalSize+=t.totalSize,e.maxFileDateModified=Math.max(e.maxFileDateModified,t.maxFileDateModified),e.countFiles+=t.countFiles,e.countDirs+=t.countDirs,e.countLinks+=t.countLinks}const Se=function(t){return t.code==="ENOENT"};function Oe(e){const t=e.paths;if(!t||t.length===0)return Promise.resolve({totalSize:0,maxFileDateModified:0,countFiles:0,countDirs:0,countLinks:0});const o=e.level??0,s=e.walkedIds??new Set,n=e.abortSignal,a=e.pool??N,i=e.handleError,c=e.priority??K.priorityCreate(0),l=e.walkLinks??!1,u=e.log,E=e.handlePath,d=e.matchPath;async function m(h){if(!(i&&await i(h))&&!Se(h))throw h}function C(h){return!(!u||u.minTotalContentSize!=null&&h<u.minTotalContentSize||u.maxNestedLevel!=null&&o>u.maxNestedLevel)}return J.useAbortController(async h=>{const p=J.combineAbortSignals(n,h),y={totalSize:0,maxFileDateModified:0,countFiles:0,countDirs:0,countLinks:0};function M(w,v){if(C(v.totalSize)){const T=`${v.totalSize.toLocaleString("en-US").replace(/,/g," ").padStart(19)}: ${w}`;u?.handleLog?u.handleLog(T):console.log(T)}}async function f(w,v,O,T){return E?await _.poolRunWait({pool:a,func:async()=>{try{return await E({level:o,path:w,stat:v,itemStat:O,totalStat:y,abortSignal:p})}catch(x){return await m(x),!1}},count:1,priority:T,abortSignal:p}):!0}async function g(w,v,O,T){T||(T=w);const x=await _.poolRunWait({pool:a,func:()=>A.promises.lstat(w).catch(m),count:1,priority:K.priorityCreate(v,K.priorityCreate(1,c)),abortSignal:p});if(!x||!O&&x.isFile())return null;const D=be(w,x);if(s.has(D))return null;s.add(D);let b={totalSize:x.size,maxFileDateModified:x.isDirectory()?0:x.mtimeMs,countFiles:0,countDirs:0,countLinks:0};const j=K.priorityCreate(v,K.priorityCreate(x.isDirectory()?2:3,c));if(x.isSymbolicLink()){if(l){const P=await _.poolRunWait({pool:a,func:()=>A.promises.readlink(w).catch(m).then(I=>I??null),count:1,priority:j,abortSignal:p});if(P){const I=k.isAbsolute(P)?P:k.resolve(k.dirname(T),P),$=await g(I,v,O,T);$&&(b=$)}}return(O||b.countFiles+b.countDirs+b.countLinks>=1)&&(b.countLinks+=1,await f(T,x,b,j)&&(me(y,b),M(T,b))),b}else if(x.isDirectory()){const P=await _.poolRunWait({pool:a,func:()=>A.promises.readdir(w).catch(m),count:1,priority:c,abortSignal:p});if(P){for(let I=0,$=P.length;I<$;I++)P[I]=k.join(T,P[I]);b=await Oe({...e,paths:P,abortSignal:p,priority:j,level:o+1,walkedIds:s})}}return(O||b.countFiles+b.countDirs+b.countLinks>=1)&&(x.isDirectory()?b.countDirs+=1:x.isFile()&&(b.countFiles+=1),await f(T,x,b,j)&&(me(y,b),M(T,b))),b}const S=[];for(let w=0,v=t.length;w<v;w++){const O=Ee(t[w]),T=d?d(O):!0;T!==!1&&S.push(g(O,w,T))}return await Promise.all(S),y})}function qe(e){return Oe(e)}function He({globs:e,rootDir:t,noCase:o}){const s=[];return e.forEach(n=>{n=R(n).trim();const a=n.startsWith("^");a&&(n=n.substring(1).trim());const i=n.startsWith("!");if(i&&(n=n.substring(1).trim()),n.startsWith("!")||n.startsWith("^"))throw new Error(`Invalid glob pattern: "${n}". The syntax '${n.substring(0,2)}' is not supported. Valid glob patterns use: * (match any characters), ** (match any directories), ? (match single character), [abc] (character class), ! (negate pattern), ^ (exclude if included). Examples of valid patterns: "*.js", "src/**/*.ts", "!node_modules", "^dist". Avoid starting with '!' after '^' or multiple special prefixes.`);n.startsWith("/")&&(n="."+n);const c=R(t?k.resolve(t,n):n);if(!c)return;let l;try{l=Je(c,{nocase:o??!1,dot:!0,strictBrackets:!0})}catch(u){throw new Error(`Invalid glob pattern: "${n}". ${u instanceof Error?u.message:"Unknown error"}. Valid glob patterns use: * (match any characters), ** (match any directories), ? (match single character), [abc] (character class with balanced brackets), ! (negate pattern), ^ (exclude if included). Examples: "*.js", "src/**/*.ts", "!node_modules", "[abc]def.txt". Ensure all brackets [ ] are properly closed and balanced.`)}s.push({exclude:a,negative:i,debugInfo:c,match:l})}),function(a){a=R(a);let i=null,c=!1;for(let l=0,u=s.length;l<u;l++){const E=s[l];E.match(a)&&(E.exclude?c=!E.negative:(i=!E.negative,c=!1))}return c?!1:i}}function Ce(e){const t=e.startsWith("!");return t&&(e=e.substring(1)),e.startsWith("/")?e=e.substring(1):!e.startsWith("**")&&!e.startsWith("../")&&(e=`**/${e}`),t&&(e="!"+e),e}function Te(e,t){if(!t||t===".")return e;const o=e.startsWith("^");o&&(e=e.substring(1));const s=e.startsWith("!");return s&&(e=e.substring(1)),e.startsWith("/")?(t.endsWith("/")&&(t=t.substring(0,t.length-1)),e=t+e):(t.endsWith("/")||(t+="/"),e.startsWith("./")?e=t+e.substring(2):e.startsWith("../")?e=t+e:(t.startsWith("..")&&(t=""),e.startsWith("**")?e=t+e:e=t+"**/"+e)),e=R(k.normalize(e)),s&&(e="!"+e),o&&(e="^"+e),e}function de(e){return"^"+e}async function xe(e){const o=(await A.promises.readFile(e,"utf-8")).split(`
2
- `),s=[];return o.forEach(n=>{n=n.trim(),!(!n||n.startsWith("#"))&&s.push(n)}),s}async function Ve(e){const t=e.rootDir??".",o=[];if(!e.globs?.length)return o;const s=[];return e.globs.forEach(n=>{n.value&&(n.valueType==="file-contains-patterns"?s.push(n):n.valueType==="pattern"&&o.push(n.exclude?de(n.value):n.value))}),s.length&&await Promise.all(s.map(async n=>{await _.poolRunWait({pool:N,count:1,func:async()=>{const a=k.resolve(t,n.value),i=await xe(a),c=k.relative(t,k.dirname(a));i.forEach(l=>{l=Ce(l),l=Te(l,c),o.push(n.exclude?de(l):l)})}})})),o}function Xe(e,t){return _.poolRunWait({pool:t??N,count:1,func:()=>A.promises.readdir(e,{withFileTypes:!0})})}async function ve(e,t){const o=[];async function s(n,a){let i;try{i=await Xe(n,t)}catch(l){if(a!==""&&l.code==="ENOENT")return;throw l}let c=null;i.forEach(l=>{const u=k.join(a,l.name);o.push([R(u),l]),l.isDirectory()&&(c==null&&(c=[]),c.push(s(k.join(n,l.name),u)))}),c!=null&&await Promise.all(c)}return await s(e,""),o}class oe{_options;constructor(t){this._options=t}get options(){return this._options}async set(t,o){const s=this._options.converterSubPath.to(t),n=k.join(this._options.dir,s),a=this._options.getTempFileName?this._options.getTempFileName(t):we(),i=k.join(this._options.tmpDir,a);await ye(n,i,o,this._options.pool)}async get(t){const o=this._options.converterSubPath.to(t),s=k.join(this._options.dir,o);try{const n=await _.poolRunWait({pool:this._options.pool??N,count:1,func:()=>A.promises.readFile(s)});return new Uint8Array(n)}catch(n){if(n.code==="ENOENT")return;throw n}}async delete(t){const o=this._options.converterSubPath.to(t),s=k.join(this._options.dir,o);try{await _.poolRunWait({pool:this._options.pool??N,count:1,func:()=>A.promises.unlink(s)})}catch(n){if(n.code==="ENOENT")return;throw n}}async clear(){const t=await this.getKeys();await r.promiseAllWait(t.map(o=>this.delete(o)))}async getKeys(){try{const t=await ve(this._options.dir,this._options.pool),o=[];return t.forEach(([s,n])=>{if(!n.isFile())return;const a=this._options.converterSubPath.from(s);a!=null&&o.push(a)}),o}catch(t){if(t.code==="ENOENT")return[];throw t}}}function se(e){const t=e.prefix?R(e.prefix):"",o=e.suffix?R(e.suffix):"",s=e.splitKeyLetters??0;return{to(n){if(s<=0)return R(t+n+o);const a=Math.min(s,n.length);let i=t;for(let c=0;c<a;c++)i+=(c===0?"":"/")+n[c];return a<n.length&&(i+=(a===0?"":"/")+n.slice(a)),R(i+o)},from(n){return s<=0?!n.startsWith(t)||!n.endsWith(o)?null:n.slice(t.length,n.length-o.length):!n.startsWith(t)||!n.endsWith(o)?null:n.slice(t.length,n.length-o.length).replace(/\//g,"")}}}class Me{_options;_entries=new Map;_entriesLoaded=!1;constructor(t){this._options=t}async set(t,o){const s=o.hasError?this._options.storages.error:this._options.storages.value,n=s.options.converterSubPath.to(t),a=L.resolve(s.options.dir,n);await _.poolRunWait({pool:this._options.pool??N,count:1,func:async()=>{await W.promises.utimes(a,o.dateUsed/1e3,o.dateModified/1e3),this._entries.set(t,o)}})}async get(t){const o=this._options.storages.value.options.converterSubPath.to(t),s=this._options.storages.error.options.converterSubPath.to(t),n=L.resolve(this._options.storages.value.options.dir,o),a=L.resolve(this._options.storages.error.options.dir,s);return await _.poolRunWait({pool:this._options.pool??N,count:1,func:async()=>{const[i,c]=await Promise.all([W.promises.stat(n).catch(l=>{if(l.code==="ENOENT")return null;throw l}),W.promises.stat(a).catch(l=>{if(l.code==="ENOENT")return null;throw l})]);if(i!=null&&c!=null){const l=c.mtimeMs>=i.mtimeMs,u=l?c:i;return{dateModified:u.mtimeMs,dateUsed:u.atimeMs,size:u.size,hasError:l}}else return i!=null?{dateModified:i.mtimeMs,dateUsed:i.atimeMs,size:i.size,hasError:!1}:c!=null?{dateModified:c.mtimeMs,dateUsed:c.atimeMs,size:c.size,hasError:!0}:void 0}})}async delete(t){this._entries.delete(t)}async clear(){this._entries.clear()}async _getKeys(){const[t,o]=await Promise.all([this._options.storages.value.getKeys(),this._options.storages.error.getKeys()]);return[...t,...o]}async getEntries(){if(!this._entriesLoaded){const t=await this._getKeys();await Promise.all(t.map(async o=>{if(this._entries.has(o))return;const s=await this.get(o);s!=null&&this._entries.set(o,s)})),this._entriesLoaded=!0}return this._entries}async getKeys(){const t=await this.getEntries();return Array.from(t.keys())}}function Qe(e){const t=new oe({dir:e.dir,tmpDir:e.tmpDir,converterSubPath:se({suffix:".value"})}),o=new oe({dir:e.dir,tmpDir:e.tmpDir,converterSubPath:se({suffix:".error"})});return{converterInput:e.converterInput??r.getHashKey,converterValue:e.converterValue??r.converterJsonBuffer,converterError:r.converterErrorToBuffer,totalSize:e.totalSize,getSize:{value:s=>s.byteLength,error:s=>s.byteLength,stat:()=>0},isExpired:e.isExpired,storages:{value:t,error:o,stat:new Me({storages:{value:t,error:o}})}}}function Pe(e,t={}){return new Promise((o,s)=>{const n=X.spawn(e,{shell:!0,...t}),a=[];n.stdout.on("data",i=>{a.push(i)}),n.on("error",i=>{s(i)}),n.on("exit",i=>{const c=Buffer.concat(a).toString("utf8");if(i!==0){s(new Error(`[exec][exit] code: ${i}`));return}o(c)})})}async function Ye(){let e;switch(process.platform){case"darwin":e=X.spawn("afplay",["/System/Library/Sounds/Ping.aiff"],{stdio:"ignore"});break;case"linux":e=X.spawn("beep",[],{stdio:"ignore",shell:!0});break;case"win32":e=X.spawn("powershell",["-c","[console]::beep(1000,300)"],{stdio:"ignore"});break;default:throw new Error(`[nodeBeep] Beep not supported on platform: ${process.platform}`)}await new Promise((t,o)=>{e.on("error",o),e.on("close",s=>{s!==0?o(new Error(`[nodeBeep] Beep process exited with code ${s}`)):t()})})}async function ke({page:e,urlFilters:t,timeouts:o}){return o||(o={}),o.downloadInternal||(o.downloadInternal=10*1e3),o.downloadExternal||(o.downloadExternal=60*1e3),o.total||(o.total=300*1e3),await r.withTimeout(()=>e.evaluate(({urlFilters:n,timeouts:a})=>{function i(u){return function(d){let m=!1;for(let C=0,h=u.length;C<h;C++){const p=u[C];p.pattern.test(d)&&(m=p.value)}return m}}const c=n&&i(n);let l=performance.getEntries&&performance.getEntries();return l||(l=[]),l.push({name:location.href}),Promise.all(l.map(u=>{if(u.entryType!=null&&u.entryType!=="resource"||c&&!c(u.name))return null;if(u.responseStatus!=null)return u.responseStatus>=400?Promise.resolve({url:u.name,error:u.responseStatus}):null;if(navigator.userAgent.indexOf("Chrome")===-1)return null;const E=typeof AbortController<"u"?new AbortController:null,d=new URL(u.name).origin===location.origin,m=d?a.downloadInternal:a.downloadExternal;let C;const h=new Promise((f,g)=>{C=g}),p=m&&setTimeout(()=>{E?.abort(),C(new Error("[test][getPageHttpErrors] fetch timeout"))},m);let y=fetch(u.name,{mode:d?"same-origin":"no-cors",signal:E?.signal,cache:d?"force-cache":void 0,method:"HEAD"}).then(f=>f.ok?null:{url:u.name,error:f.status+" "+f.statusText}).catch(f=>({url:u.name,error:f.message}));E||(y=Promise.race([y,h]));function M(){p&&clearTimeout(p)}return y.then(f=>(M(),f),f=>{throw M(),f})})).then(u=>{const E=u.filter(d=>d).map(d=>({url:new URL(d.url),error:d.error}));return E.length>0?E:null})},{urlFilters:t,timeouts:o}),{timeout:o.total})}async function De({page:e,urlFilters:t,errorFilter:o}){let s=await ke({page:e,urlFilters:t});if(s&&(o&&(s=s.filter(o)),s.length>0))throw new Error(`[test][checkPageHttpErrors] Page has http errors: ${JSON.stringify(s,null,2)}`)}async function _e({page:e,filter:t,onError:o}){const s="callback_191b355ea6f64499a6607ad571da5d4d",n=e.context().browser()?.browserType().name(),a=r.getStackTrace();function i(c){try{if(t&&!t({url:new URL(e.url()),error:c}))return}catch(l){c=String(l)}try{console.error(`[test][subscribeJsErrors] BROWSER JS ERROR (${n}): ${c}`);const l=new Error(c);l.stack=a,o(l)}catch(l){console.error("[test][subscribeJsErrors] error",l)}}await e.exposeFunction(s,i),await e.addInitScript(c=>{function l(d){if(Array.isArray(d))return d.map(l).join(`\r
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../urlGet-BukRa7Gq.js"),L=require("path"),_=require("@flemist/time-limits"),Be=require("node:os"),W=require("fs"),K=require("@flemist/priority-queue"),G=require("@flemist/async-utils"),Ge=require("picomatch"),X=require("child_process"),ee=require("@flemist/abort-controller-fast"),Je=require("@flemist/test-variants");function pe(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const s=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,s.get?s:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const k=pe(L),A=pe(W),N=new _.Pool(Be.cpus().length);async function ye(e,t,o,s){e=L.resolve(e),t=L.resolve(t),await _.poolRunWait({pool:s??N,count:1,func:async()=>{let n=!1;try{await r.promiseAllWait([W.promises.mkdir(L.dirname(e),{recursive:!0}),(async()=>{await W.promises.mkdir(L.dirname(t),{recursive:!0}),await W.promises.writeFile(t,o),n=!0})()]),await W.promises.rename(t,e)}catch(a){throw n&&await W.promises.unlink(t).catch(()=>{}),a}}})}function we(){return`${Date.now().toString(36)}${Math.random().toString(36).substring(2)}.tmp`}function R(e){return e.replace(/[\\/]+/g,"/")}const Ue=new r.LockerWithId;function Ke(e){const{filePath:t,func:o}=e;return Ue.lock(R(t),()=>_.poolRunWait({pool:N,count:1,func:o}))}function ge(e){return e.match(/^[/\\]?[^/\\]+/)[0]}function be(e,t){return ge(e)+"|"+t.ino}function Ee(e){return e.endsWith(":")&&(e+="/"),k.resolve(e)}function me(e,t){e.totalSize+=t.totalSize,e.maxFileDateModified=Math.max(e.maxFileDateModified,t.maxFileDateModified),e.countFiles+=t.countFiles,e.countDirs+=t.countDirs,e.countLinks+=t.countLinks}const Se=function(t){return t.code==="ENOENT"};function Ce(e){const t=e.paths;if(!t||t.length===0)return Promise.resolve({totalSize:0,maxFileDateModified:0,countFiles:0,countDirs:0,countLinks:0});const o=e.level??0,s=e.walkedIds??new Set,n=e.abortSignal,a=e.pool??N,i=e.handleError,c=e.priority??K.priorityCreate(0),l=e.walkLinks??!1,u=e.log,E=e.handlePath,d=e.matchPath;async function m(h){if(!(i&&await i(h))&&!Se(h))throw h}function O(h){return!(!u||u.minTotalContentSize!=null&&h<u.minTotalContentSize||u.maxNestedLevel!=null&&o>u.maxNestedLevel)}return G.useAbortController(async h=>{const p=G.combineAbortSignals(n,h),y={totalSize:0,maxFileDateModified:0,countFiles:0,countDirs:0,countLinks:0};function M(w,v){if(O(v.totalSize)){const T=`${v.totalSize.toLocaleString("en-US").replace(/,/g," ").padStart(19)}: ${w}`;u?.handleLog?u.handleLog(T):console.log(T)}}async function f(w,v,C,T){return E?await _.poolRunWait({pool:a,func:async()=>{try{return await E({level:o,path:w,stat:v,itemStat:C,totalStat:y,abortSignal:p})}catch(x){return await m(x),!1}},count:1,priority:T,abortSignal:p}):!0}async function g(w,v,C,T){T||(T=w);const x=await _.poolRunWait({pool:a,func:()=>A.promises.lstat(w).catch(m),count:1,priority:K.priorityCreate(v,K.priorityCreate(1,c)),abortSignal:p});if(!x||!C&&x.isFile())return null;const D=be(w,x);if(s.has(D))return null;s.add(D);let b={totalSize:x.size,maxFileDateModified:x.isDirectory()?0:x.mtimeMs,countFiles:0,countDirs:0,countLinks:0};const j=K.priorityCreate(v,K.priorityCreate(x.isDirectory()?2:3,c));if(x.isSymbolicLink()){if(l){const P=await _.poolRunWait({pool:a,func:()=>A.promises.readlink(w).catch(m).then(I=>I??null),count:1,priority:j,abortSignal:p});if(P){const I=k.isAbsolute(P)?P:k.resolve(k.dirname(T),P),z=await g(I,v,C,T);z&&(b=z)}}return(C||b.countFiles+b.countDirs+b.countLinks>=1)&&(b.countLinks+=1,await f(T,x,b,j)&&(me(y,b),M(T,b))),b}else if(x.isDirectory()){const P=await _.poolRunWait({pool:a,func:()=>A.promises.readdir(w).catch(m),count:1,priority:c,abortSignal:p});if(P){for(let I=0,z=P.length;I<z;I++)P[I]=k.join(T,P[I]);b=await Ce({...e,paths:P,abortSignal:p,priority:j,level:o+1,walkedIds:s})}}return(C||b.countFiles+b.countDirs+b.countLinks>=1)&&(x.isDirectory()?b.countDirs+=1:x.isFile()&&(b.countFiles+=1),await f(T,x,b,j)&&(me(y,b),M(T,b))),b}const S=[];for(let w=0,v=t.length;w<v;w++){const C=Ee(t[w]),T=d?d(C):!0;T!==!1&&S.push(g(C,w,T))}return await Promise.all(S),y})}function qe(e){return Ce(e)}function He({globs:e,rootDir:t,noCase:o}){const s=[];return e.forEach(n=>{n=R(n).trim();const a=n.startsWith("^");a&&(n=n.substring(1).trim());const i=n.startsWith("!");if(i&&(n=n.substring(1).trim()),n.startsWith("!")||n.startsWith("^"))throw new Error(`Invalid glob pattern: "${n}". The syntax '${n.substring(0,2)}' is not supported. Valid glob patterns use: * (match any characters), ** (match any directories), ? (match single character), [abc] (character class), ! (negate pattern), ^ (exclude if included). Examples of valid patterns: "*.js", "src/**/*.ts", "!node_modules", "^dist". Avoid starting with '!' after '^' or multiple special prefixes.`);n.startsWith("/")&&(n="."+n);const c=R(t?k.resolve(t,n):n);if(!c)return;let l;try{l=Ge(c,{nocase:o??!1,dot:!0,strictBrackets:!0})}catch(u){throw new Error(`Invalid glob pattern: "${n}". ${u instanceof Error?u.message:"Unknown error"}. Valid glob patterns use: * (match any characters), ** (match any directories), ? (match single character), [abc] (character class with balanced brackets), ! (negate pattern), ^ (exclude if included). Examples: "*.js", "src/**/*.ts", "!node_modules", "[abc]def.txt". Ensure all brackets [ ] are properly closed and balanced.`)}s.push({exclude:a,negative:i,debugInfo:c,match:l})}),function(a){a=R(a);let i=null,c=!1;for(let l=0,u=s.length;l<u;l++){const E=s[l];E.match(a)&&(E.exclude?c=!E.negative:(i=!E.negative,c=!1))}return c?!1:i}}function Oe(e){const t=e.startsWith("!");return t&&(e=e.substring(1)),e.startsWith("/")?e=e.substring(1):!e.startsWith("**")&&!e.startsWith("../")&&(e=`**/${e}`),t&&(e="!"+e),e}function Te(e,t){if(!t||t===".")return e;const o=e.startsWith("^");o&&(e=e.substring(1));const s=e.startsWith("!");return s&&(e=e.substring(1)),e.startsWith("/")?(t.endsWith("/")&&(t=t.substring(0,t.length-1)),e=t+e):(t.endsWith("/")||(t+="/"),e.startsWith("./")?e=t+e.substring(2):e.startsWith("../")?e=t+e:(t.startsWith("..")&&(t=""),e.startsWith("**")?e=t+e:e=t+"**/"+e)),e=R(k.normalize(e)),s&&(e="!"+e),o&&(e="^"+e),e}function de(e){return"^"+e}async function xe(e){const o=(await A.promises.readFile(e,"utf-8")).split(`
2
+ `),s=[];return o.forEach(n=>{n=n.trim(),!(!n||n.startsWith("#"))&&s.push(n)}),s}async function Ve(e){const t=e.rootDir??".",o=[];if(!e.globs?.length)return o;const s=[];return e.globs.forEach(n=>{n.value&&(n.valueType==="file-contains-patterns"?s.push(n):n.valueType==="pattern"&&o.push(n.exclude?de(n.value):n.value))}),s.length&&await Promise.all(s.map(async n=>{await _.poolRunWait({pool:N,count:1,func:async()=>{const a=k.resolve(t,n.value),i=await xe(a),c=k.relative(t,k.dirname(a));i.forEach(l=>{l=Oe(l),l=Te(l,c),o.push(n.exclude?de(l):l)})}})})),o}function Xe(e,t){return _.poolRunWait({pool:t??N,count:1,func:()=>A.promises.readdir(e,{withFileTypes:!0})})}async function ve(e,t){const o=[];async function s(n,a){let i;try{i=await Xe(n,t)}catch(l){if(a!==""&&l.code==="ENOENT")return;throw l}let c=null;i.forEach(l=>{const u=k.join(a,l.name);o.push([R(u),l]),l.isDirectory()&&(c==null&&(c=[]),c.push(s(k.join(n,l.name),u)))}),c!=null&&await Promise.all(c)}return await s(e,""),o}class oe{_options;constructor(t){this._options=t}get options(){return this._options}async set(t,o){const s=this._options.converterSubPath.to(t),n=k.join(this._options.dir,s),a=this._options.getTempFileName?this._options.getTempFileName(t):we(),i=k.join(this._options.tmpDir,a);await ye(n,i,o,this._options.pool)}async get(t){const o=this._options.converterSubPath.to(t),s=k.join(this._options.dir,o);try{const n=await _.poolRunWait({pool:this._options.pool??N,count:1,func:()=>A.promises.readFile(s)});return new Uint8Array(n)}catch(n){if(n.code==="ENOENT")return;throw n}}async delete(t){const o=this._options.converterSubPath.to(t),s=k.join(this._options.dir,o);try{await _.poolRunWait({pool:this._options.pool??N,count:1,func:()=>A.promises.unlink(s)})}catch(n){if(n.code==="ENOENT")return;throw n}}async clear(){const t=await this.getKeys();await r.promiseAllWait(t.map(o=>this.delete(o)))}async getKeys(){try{const t=await ve(this._options.dir,this._options.pool),o=[];return t.forEach(([s,n])=>{if(!n.isFile())return;const a=this._options.converterSubPath.from(s);a!=null&&o.push(a)}),o}catch(t){if(t.code==="ENOENT")return[];throw t}}}function se(e){const t=e.prefix?R(e.prefix):"",o=e.suffix?R(e.suffix):"",s=e.splitKeyLetters??0;return{to(n){if(s<=0)return R(t+n+o);const a=Math.min(s,n.length);let i=t;for(let c=0;c<a;c++)i+=(c===0?"":"/")+n[c];return a<n.length&&(i+=(a===0?"":"/")+n.slice(a)),R(i+o)},from(n){return s<=0?!n.startsWith(t)||!n.endsWith(o)?null:n.slice(t.length,n.length-o.length):!n.startsWith(t)||!n.endsWith(o)?null:n.slice(t.length,n.length-o.length).replace(/\//g,"")}}}class Me{_options;_entries=new Map;_entriesLoaded=!1;constructor(t){this._options=t}async set(t,o){const s=o.hasError?this._options.storages.error:this._options.storages.value,n=s.options.converterSubPath.to(t),a=L.resolve(s.options.dir,n);await _.poolRunWait({pool:this._options.pool??N,count:1,func:async()=>{await W.promises.utimes(a,o.dateUsed/1e3,o.dateModified/1e3),this._entries.set(t,o)}})}async get(t){const o=this._options.storages.value.options.converterSubPath.to(t),s=this._options.storages.error.options.converterSubPath.to(t),n=L.resolve(this._options.storages.value.options.dir,o),a=L.resolve(this._options.storages.error.options.dir,s);return await _.poolRunWait({pool:this._options.pool??N,count:1,func:async()=>{const[i,c]=await Promise.all([W.promises.stat(n).catch(l=>{if(l.code==="ENOENT")return null;throw l}),W.promises.stat(a).catch(l=>{if(l.code==="ENOENT")return null;throw l})]);if(i!=null&&c!=null){const l=c.mtimeMs>=i.mtimeMs,u=l?c:i;return{dateModified:u.mtimeMs,dateUsed:u.atimeMs,size:u.size,hasError:l}}else return i!=null?{dateModified:i.mtimeMs,dateUsed:i.atimeMs,size:i.size,hasError:!1}:c!=null?{dateModified:c.mtimeMs,dateUsed:c.atimeMs,size:c.size,hasError:!0}:void 0}})}async delete(t){this._entries.delete(t)}async clear(){this._entries.clear()}async _getKeys(){const[t,o]=await Promise.all([this._options.storages.value.getKeys(),this._options.storages.error.getKeys()]);return[...t,...o]}async getEntries(){if(!this._entriesLoaded){const t=await this._getKeys();await Promise.all(t.map(async o=>{if(this._entries.has(o))return;const s=await this.get(o);s!=null&&this._entries.set(o,s)})),this._entriesLoaded=!0}return this._entries}async getKeys(){const t=await this.getEntries();return Array.from(t.keys())}}function Qe(e){const t=new oe({dir:e.dir,tmpDir:e.tmpDir,converterSubPath:se({suffix:".value"})}),o=new oe({dir:e.dir,tmpDir:e.tmpDir,converterSubPath:se({suffix:".error"})}),s=e.compressOptions;return{converterInput:e.converterInput??r.getHashKey,converterValue:e.converterValue??r.createConverterJsonGzip(s),converterError:r.createConverterErrorToGzip(s),totalSize:e.totalSize,getSize:{value:n=>n.byteLength,error:n=>n.byteLength,stat:()=>0},isExpired:e.isExpired,storages:{value:t,error:o,stat:new Me({storages:{value:t,error:o}})}}}function Pe(e,t={}){return new Promise((o,s)=>{const n=X.spawn(e,{shell:!0,...t}),a=[];n.stdout.on("data",i=>{a.push(i)}),n.on("error",i=>{s(i)}),n.on("exit",i=>{const c=Buffer.concat(a).toString("utf8");if(i!==0){s(new Error(`[exec][exit] code: ${i}`));return}o(c)})})}async function Ye(){let e;switch(process.platform){case"darwin":e=X.spawn("afplay",["/System/Library/Sounds/Ping.aiff"],{stdio:"ignore"});break;case"linux":e=X.spawn("beep",[],{stdio:"ignore",shell:!0});break;case"win32":e=X.spawn("powershell",["-c","[console]::beep(1000,300)"],{stdio:"ignore"});break;default:throw new Error(`[nodeBeep] Beep not supported on platform: ${process.platform}`)}await new Promise((t,o)=>{e.on("error",o),e.on("close",s=>{s!==0?o(new Error(`[nodeBeep] Beep process exited with code ${s}`)):t()})})}async function ke({page:e,urlFilters:t,timeouts:o}){return o||(o={}),o.downloadInternal||(o.downloadInternal=10*1e3),o.downloadExternal||(o.downloadExternal=60*1e3),o.total||(o.total=300*1e3),await r.withTimeout(()=>e.evaluate(({urlFilters:n,timeouts:a})=>{function i(u){return function(d){let m=!1;for(let O=0,h=u.length;O<h;O++){const p=u[O];p.pattern.test(d)&&(m=p.value)}return m}}const c=n&&i(n);let l=performance.getEntries&&performance.getEntries();return l||(l=[]),l.push({name:location.href}),Promise.all(l.map(u=>{if(u.entryType!=null&&u.entryType!=="resource"||c&&!c(u.name))return null;if(u.responseStatus!=null)return u.responseStatus>=400?Promise.resolve({url:u.name,error:u.responseStatus}):null;if(navigator.userAgent.indexOf("Chrome")===-1)return null;const E=typeof AbortController<"u"?new AbortController:null,d=new URL(u.name).origin===location.origin,m=d?a.downloadInternal:a.downloadExternal;let O;const h=new Promise((f,g)=>{O=g}),p=m&&setTimeout(()=>{E?.abort(),O(new Error("[test][getPageHttpErrors] fetch timeout"))},m);let y=fetch(u.name,{mode:d?"same-origin":"no-cors",signal:E?.signal,cache:d?"force-cache":void 0,method:"HEAD"}).then(f=>f.ok?null:{url:u.name,error:f.status+" "+f.statusText}).catch(f=>({url:u.name,error:f.message}));E||(y=Promise.race([y,h]));function M(){p&&clearTimeout(p)}return y.then(f=>(M(),f),f=>{throw M(),f})})).then(u=>{const E=u.filter(d=>d).map(d=>({url:new URL(d.url),error:d.error}));return E.length>0?E:null})},{urlFilters:t,timeouts:o}),{timeout:o.total})}async function De({page:e,urlFilters:t,errorFilter:o}){let s=await ke({page:e,urlFilters:t});if(s&&(o&&(s=s.filter(o)),s.length>0))throw new Error(`[test][checkPageHttpErrors] Page has http errors: ${JSON.stringify(s,null,2)}`)}async function _e({page:e,filter:t,onError:o}){const s="callback_191b355ea6f64499a6607ad571da5d4d",n=e.context().browser()?.browserType().name(),a=r.getStackTrace();function i(c){try{if(t&&!t({url:new URL(e.url()),error:c}))return}catch(l){c=String(l)}try{console.error(`[test][subscribeJsErrors] BROWSER JS ERROR (${n}): ${c}`);const l=new Error(c);l.stack=a,o(l)}catch(l){console.error("[test][subscribeJsErrors] error",l)}}await e.exposeFunction(s,i),await e.addInitScript(c=>{function l(d){if(Array.isArray(d))return d.map(l).join(`\r
3
3
  \r
4
- `);if(d instanceof Error)return d.stack||d.toString();if(typeof d=="object"&&d!=null){const m=new Set;return JSON.stringify(d,(C,h)=>{if(typeof h=="object"&&h!=null){if(m.has(h))return"[Circular]";m.add(h)}return h},2)}return String(d)}function u(d){window[c](d)}const E={warn:console.warn.bind(console),error:console.error.bind(console)};console.warn=function(...m){return u("console.warn: "+l(m)),E.warn.apply(this,m)},console.error=function(...m){return u("console.error: "+l(m)),E.error.apply(this,m)},window.addEventListener("error",function(d){u("window error: "+(d.message||JSON.stringify(d)))},!0),window.addEventListener("unhandledrejection",function(d){u("window unhandledrejection: "+l(d.reason))},!0)},s)}async function ce(){try{process.platform==="win32"&&await Pe(`wmic process where "commandline like '%ms-playwright%' and not commandline like '%wmic.exe%' and priority != 4" CALL setpriority "idle"`)}catch(e){const t=e?.message?.trim();if(/exit code: 2147749890/.test(t))return;console.warn("[test][setPlaywrightPriorityLow] error: "+t)}}let Q=null,ae=null;function Ze(e){ae=e}function Ae(){if(Q)return;const e=ae||(process.env.DELAY_ON_ERROR?parseInt(process.env.DELAY_ON_ERROR,10):0);if(ae)return console.log(`[test][delayOnError] Delay on error: ${e} ms`),Q=J.delay(e),Q}function et(){return Q}async function je(e){const{page:t}=e,o=t.context().browser()?.browserType().name(),s=new ee.AbortControllerFast,n=J.combineAbortSignals(s.signal,e.abortSignal),a=c=>{let l=`Error in (${o}) ${t.url()}
4
+ `);if(d instanceof Error)return d.stack||d.toString();if(typeof d=="object"&&d!=null){const m=new Set;return JSON.stringify(d,(O,h)=>{if(typeof h=="object"&&h!=null){if(m.has(h))return"[Circular]";m.add(h)}return h},2)}return String(d)}function u(d){window[c](d)}const E={warn:console.warn.bind(console),error:console.error.bind(console)};console.warn=function(...m){return u("console.warn: "+l(m)),E.warn.apply(this,m)},console.error=function(...m){return u("console.error: "+l(m)),E.error.apply(this,m)},window.addEventListener("error",function(d){u("window error: "+(d.message||JSON.stringify(d)))},!0),window.addEventListener("unhandledrejection",function(d){u("window unhandledrejection: "+l(d.reason))},!0)},s)}async function ce(){try{process.platform==="win32"&&await Pe(`wmic process where "commandline like '%ms-playwright%' and not commandline like '%wmic.exe%' and priority != 4" CALL setpriority "idle"`)}catch(e){const t=e?.message?.trim();if(/exit code: 2147749890/.test(t))return;console.warn("[test][setPlaywrightPriorityLow] error: "+t)}}let Q=null,ae=null;function Ze(e){ae=e}function Ae(){if(Q)return;const e=ae||(process.env.DELAY_ON_ERROR?parseInt(process.env.DELAY_ON_ERROR,10):0);if(ae)return console.log(`[test][delayOnError] Delay on error: ${e} ms`),Q=G.delay(e),Q}function et(){return Q}async function je(e){const{page:t}=e,o=t.context().browser()?.browserType().name(),s=new ee.AbortControllerFast,n=G.combineAbortSignals(s.signal,e.abortSignal),a=c=>{let l=`Error in (${o}) ${t.url()}
5
5
  `;e.pageFilePath&&(l+=` at _ (${L.resolve(e.pageFilePath)}:0:0)
6
6
  `),c.stack=l+(c.stack||c.message),c.message=l+c.message,console.error("[test][initPage] error",c),s.abort(c)};return await _e({page:t,filter:e.filters?.js?.filter,onError:a}),{abortSignal:n,checkErrors:async()=>{await De({page:t,urlFilters:e.filters?.http?.urlFilters,errorFilter:e.filters?.http?.errorFilter}),n.throwIfAborted()}}}async function Fe({page:e,abortSignal:t,filters:o,func:s,pageFilePath:n}){const a=e.context().browser()?.browserType().name();try{const{abortSignal:i,checkErrors:c}=await je({page:e,abortSignal:t,filters:o,pageFilePath:n});await s({page:e,abortSignal:i,checkErrors:c}),await c()}catch(i){let c=`Error in (${a}) ${e.url()}
7
7
  `;throw n&&(c+=` at _ (${L.resolve(n)}:0:0)
8
- `),i.stack=c+(i.stack||i.message),i.message=c+i.message,i}}function tt({browserType:e,options:t}){return async function(s){const n=await e.launch(t??void 0);try{return await s(n)}finally{await n.close()}}}function Re({browser:e,options:t}){return async function(s){const n=await e.newContext(t??void 0);await ce();try{const a=await s(n);return await n.close(),a}catch(a){const i=Ae?.();throw i?(console.error("[test][useBrowserContext] error",a),i.finally(()=>n.close())):await n.close(),a}}}async function rt(e,t){const o=await e.$$(t);for(const s of o)await s.click()}const ne=new ee.AbortControllerFast;let nt=0;function Ie(e){return async function({browser:o,contextOptions:s,name:n,url:a,pool:i,priority:c,filters:l,...u},E){const d=J.combineAbortSignals(ne.signal,E);try{await _.poolRunWait({pool:i,count:1,priority:c,abortSignal:d,func:async(m,C)=>{C.throwIfAborted(),await Re({browser:o,options:s})(async h=>{C.throwIfAborted();const p=await h.newPage();await ce();const y=o.browserType().name(),M=C.subscribe(()=>{p.isClosed()||(p.close({runBeforeUnload:!1}),h.close({}))});try{console.log(`START ${n} (${y}): ${a}`),await Fe({page:p,abortSignal:C,filters:l,func:async({page:f,checkErrors:g,abortSignal:S})=>{await e({page:f,url:a,checkErrors:g,abortSignal:S,args:u})}}),console.log(`END [${nt++}] ${n} (${y}): ${a}`)}catch(f){if(C.aborted||f instanceof ee.AbortError){console.log(`ABORTED ${n} (${y}): ${a}`);return}throw console.log(`ERROR ${n} (${y}): ${a}`),ne.signal.aborted||(console.log("unsubscribe on first error"),M()),ne.abort(),f}})}})}catch(m){if(m instanceof ee.AbortError)return;throw m}}}function ot(e){const t=Ie(e);return Ue.createTestVariants(async o=>await t(o))}function st(e,t){const o=t.stableTime,s=t.timeout,n=t.mutation?{childList:!!t.mutation.childList,attributes:!!t.mutation.attributes,characterData:!!t.mutation.characterData,subtree:!!t.mutation.subtree,selector:t.mutation.selector??null}:null,a=t.resource?{resource:!!t.resource.resource,navigation:!!t.resource.navigation,paint:!!t.resource.paint,longTask:!!t.resource.longTask}:null;return e.evaluate(({stableTime:i,timeout:c,mutation:l,resource:u})=>{return new Promise((m,C)=>{let h=Date.now(),p=null,y=null;const M=[];function f(){h=Date.now()}function g(){p!=null&&(clearTimeout(p),p=null),y!=null&&(clearTimeout(y),y=null);for(let w=0,v=M.length;w<v;w++)M[w]()}function S(){const w=i-(Date.now()-h);w<=0?(g(),m()):p=setTimeout(S,w)}if(l){const w=E(l,f);M.push(w)}if(u){const w=d(u,f);M.push(w)}p=setTimeout(S,i),y=setTimeout(()=>{g(),C(new Error(`[waitPageStable] timed out after ${c}ms waiting for page to stabilize`))},c)});function E(m,C){const h=m.selector?document.querySelector(m.selector):document.documentElement;if(!h)throw new Error(`[waitPageStable] element not found: ${m.selector}`);const p=new MutationObserver(C);return p.observe(h,{childList:m.childList,attributes:m.attributes,characterData:m.characterData,subtree:m.subtree}),()=>{p.disconnect()}}function d(m,C){const h=[];m.resource&&h.push("resource"),m.navigation&&h.push("navigation"),m.paint&&h.push("paint"),m.longTask&&h.push("longtask");const p=new PerformanceObserver(C);return p.observe({entryTypes:h}),()=>{p.disconnect()}}},{stableTime:o,timeout:s,mutation:n,resource:a})}async function Y(e,t){const o=k.dirname(e);await A.promises.stat(o).catch(()=>null)||await A.promises.mkdir(o,{recursive:!0}),await A.promises.writeFile(e,JSON.stringify(t,null,4),{encoding:"utf-8"})}async function Le(e){if(!await A.promises.stat(e).catch(()=>null))return null;const t=await A.promises.readFile(e,{encoding:"utf-8"});return JSON.parse(t)}const te="-",re="+";function q(e,t,o){if(e===t)return null;if(Array.isArray(e)){if(Array.isArray(t)){let n=null;for(let a=0,i=Math.max(t.length,t.length);a<i;a++){const c=q(e[a],t[a],o);c!=null&&(n||(n=[]),n.push(c))}return n!=null&&o&&(n=o(e,t,n)),n}}else if(e instanceof Object&&t instanceof Object){let n=null;for(const a in e)if(Object.prototype.hasOwnProperty.call(e,a)){const i=q(e[a],t[a],o);i!=null&&(n||(n={}),n[a]=i)}for(const a in t)if(Object.prototype.hasOwnProperty.call(t,a)&&!Object.prototype.hasOwnProperty.call(e,a)){const i=q(e[a],t[a],o);i!=null&&(n||(n={}),n[a]=i)}return n!=null&&o&&(n=o(e,t,n)),n}let s={[te]:e,[re]:t};return o&&(s=o(e,t,s)),s}function ie(e){function t(f){return f.sort((g,S)=>g[0]>S[0]?1:-1).reduce((g,S)=>(g[S[0]]=S[1],g),{})}function o(f){return f.reduce((g,S)=>(g[S]=!0,g),{})}const s=e.filters&&e.filters.excludeAttrs&&o(e.filters.excludeAttrs),n=e.filters&&e.filters.fixAttrs,a=e.filters&&e.filters.fixStyles,i=e.filters&&e.filters.excludeStyles&&o(e.filters.excludeStyles),c=e.filters&&e.filters.fixTags,l=e.filters&&e.filters.excludeClasses,u=e.filters&&e.filters.excludeIds,E=e.filters&&e.filters.excludeSelectorClasses,d=e.filters&&e.filters.excludeSelectorIds;let m;if(e.filters&&e.filters.excludeSelectors&&e.filters.excludeSelectors.length>0){const f=Array.from(document.querySelectorAll(e.filters.excludeSelectors.join(",")));f.length>0&&(m=new Set(f))}function C(f,g,S,w){const v=getComputedStyle(f,g),O=[];for(let T=0,x=v.length;T<x;T++){const D=v[T];if(i&&i[D])continue;let b=v[D];if(b&&a)for(let j=0,P=a.length;j<P;j++)a[j].name.test(D)&&(b=b.replace(a[j].search,a[j].replace));(!S||S[D]!==b)&&(!w||w[D]===b)&&O.push([D,b])}return t(O)}function h(f,g,S){return{_:C(f,void 0,g&&g._,S&&S._),before:C(f,"before",g&&g.before,S&&S.before),after:C(f,"after",g&&g.after,S&&S.after)}}function p(f,g,S,w,v){for(let O=0,T=f.childNodes.length;O<T;O++){const x=f.childNodes[O];if(!x)throw new Error(`child is null; index=${O}; ${w}, ${f.className}\r
9
- You should wait js executions before test`);x instanceof Element&&y(x,g,S,w,v)}}function y(f,g,S,w,v){const O=v&&v[g.length];if(v&&!O||m&&m.has(f))return;let T=f.tagName&&f.tagName.toLowerCase();if(T==="head"&&(S=!1),c)for(let F=0,U=c.length;F<U;F++)T=T.replace(c[F].search,c[F].replace);if(O&&O.tag!==T)return;const x=[];for(let F=0,U=f.attributes.length;F<U;F++){const B=f.attributes.item(F);let z=B.name,V=B.value;if(z=z.toLowerCase(),z!=="class"&&!(s&&s[z])){if(n)for(let G=0,Be=n.length;G<Be;G++)n[G].name.test(z)&&(V=V.replace(n[G].search,n[G].replace));(!O||O.attrs&&O.attrs[z]===V)&&x.push([z,V])}}const D=[],b=[];for(let F=0,U=f.classList.length;F<U;F++){const B=f.classList.item(F);(!l||!l.test(B))&&D.push(B),(!E||!E.test(B))&&b.push(B)}const j=S?h(f,e.defaultStyle,O&&O.style):null,P=f.childElementCount?[]:null;f.id&&(!u||!u.test(f.id))&&f.id;const I=f.id&&(!d||!d.test(f.id))?f.id:"",$=(T||"")+(I?"#"+I:"")+(b.length>0?"."+b.join("."):""),he=$?w?w+" > "+$:$:w,$e={tag:T,selector:he,classes:D,attrs:x.length>0?t(x):null,style:j,childs:P};g.push($e),P&&p(f,P,S,he,O&&O.childs)}const M=[];return y(document.documentElement,M,!0,"",e.shouldEqualResult&&[e.shouldEqualResult]),M[0]}async function le(e){const t=await e.context().newCDPSession(e);return await t.send("DOM.enable"),await t.send("CSS.enable"),t}async function ue(e){await e.send("CSS.disable"),await e.send("DOM.disable"),await e.detach()}async function at(e,t){const o=await le(e);try{return await t(o)}finally{await ue(o)}}async function Ne(e,t){const{nodes:o}=await e.send("DOM.getFlattenedDocument",{depth:-1,pierce:!0}),s=o.filter(n=>n.nodeType===1).map(n=>n.nodeId);for(const n of s)await e.send("CSS.forcePseudoState",{nodeId:n,forcedPseudoClasses:t})}function Z(e,t){if(!e||!t)return t||null;let o=null;for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&t[s]!==e[s]&&(o||(o={}),o[s]=t[s]);for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&!Object.prototype.hasOwnProperty.call(t,s)&&(o||(o={}),o[s]="");return o}function it(e,t){if(!e||!t)return t||null;const o=Z(e._,t._),s=Z(e.before,t.before),n=Z(e.after,t.after);return!o&&!s&&!n?null:{_:o||{},before:s||{},after:n||{}}}function ct(e,t){if(!e||!t)return t||null;if(e.length!==t.length)return t;for(let o=0,s=e.length;o<s;o++)if(e[o]!==t[o])return t;return null}function fe(e,t){const o=ct(e.classes,t.classes),s=Z(e.attrs,t.attrs),n=it(e.style,t.style);let a=null;if(e.childs&&t.childs){const i=Math.min(e.childs.length,t.childs.length);for(let c=0;c<i;c++){const l=fe(e.childs[c],t.childs[c]);if(l){if(!a){a=[];for(let u=0;u<i;u++)a.push({})}a[c]=l}}}return!o&&!s&&!n&&!a?null:{tag:t.tag,selector:t.selector,classes:o,attrs:s,style:n,childs:a}}const H=(e,t,o,s)=>{const n=s(e,t,o,s);if(n==null)return n;if(Array.isArray(n))return n.map((a,i,c)=>H(a,i,c,s));if(typeof n=="object"){const a={};for(const i in n)Object.prototype.hasOwnProperty.call(n,i)&&(a[i]=H(n[i],i,n,s));return a}return n};function We(e,t){if(e.attrs&&t.excludeAttrs){for(let o=0,s=t.excludeAttrs.length;o<s;o++)delete e.attrs[t.excludeAttrs[o]];Object.keys(e.attrs).length===0&&(e.attrs=null)}if(e.classes&&t.excludeClasses&&(e.classes=e.classes.filter(o=>!t.excludeClasses.test(o))),e.style&&t.excludeStyles)for(const o of["_","before","after"]){const s=e.style[o];if(s)for(let n=0,a=t.excludeStyles.length;n<a;n++)delete s[t.excludeStyles[n]]}if(e.childs)for(let o=0,s=e.childs.length;o<s;o++)We(e.childs[o],t)}function lt(e,t){for(const o in e){if(!Object.prototype.hasOwnProperty.call(e,o))continue;const s=e[o];for(const n in s){if(!Object.prototype.hasOwnProperty.call(s,n))continue;const a=s[n];for(const i in a)Object.prototype.hasOwnProperty.call(a,i)&&We(a[i],t)}}}function ut({actualResultFile:e,expectedResultFile:t,diffResultFile:o,filters:s,transform:n,pseudoStates:a}){let i,c,l,u={};return{async init(E){i=await Le(t),n&&(i=H(i,null,null,n)),i&&s&&lt(i,s),await E.goto("about:blank"),c=await E.evaluate(ie,{filters:s}),l=c.style},async handlePage({page:E,testId:d,url:m,stateId:C,_filters:h}){let p=u[d];p||(p={},u[d]=p);let y=p[m.href];y||(y={},p[m.href]=y),await E.addStyleTag({content:"*, *::before, *::after { animation-name: none!important; transition-duration: 0s !important; }"});const M=a??[{states:[]}];let f=null,g;try{for(let S=0;S<M.length;S++){const w=M[S],v=w.states.length>0?C+":"+w.states.join(":"):C;let O=null;if(w.states.length>0){f||(f=await le(E));const b=performance.now();await Ne(f,w.states),O=performance.now()-b}w.delay&&await J.delay(w.delay);const T=performance.now(),x=await E.evaluate(ie,{filters:h||s,defaultStyle:l,shouldEqualResult:y[v]}),D=performance.now()-T;if(console.log(`SNAPSHOT ${v}:`+(O!=null?` forcePseudoClasses ${O.toFixed(0)}ms,`:"")+` getAllElements ${D.toFixed(0)}ms`),!g)g=x,y[v]=x;else{const b=fe(g,x);b&&(y[v]=b)}}}finally{f&&await ue(f)}},async end({checkExistUrlsOnly:E}){if(u=r.getNormalizedObject(u),n&&(u=H(u,null,null,n)),i){let d,m;if(!E)d=i,m=u;else{d={},m={};for(const h in i)if(Object.prototype.hasOwnProperty.call(i,h)&&Object.prototype.hasOwnProperty.call(u,h)){d[h]={},m[h]={};for(const p in i[h])Object.prototype.hasOwnProperty.call(i[h],p)&&Object.prototype.hasOwnProperty.call(u[h],p)&&(d[h][p]=i[h][p],m[h][p]=u[h][p])}}const C=q(d,m,(h,p,y)=>y.selector&&(delete y.selector,Object.keys(y).length===0)?null:y.childs&&y.childs.length===1?y.childs[0]:(p&&p.selector?y[re]?y[re]=p.selector:y={selector:p.selector,...y}:h&&h.selector&&(y[te]?y[te]=h.selector:y={selector:h.selector,...y}),y));if(o&&await Y(o,C||{}),C)throw await Y(e,u),console.error("Pages elements changes: "+JSON.stringify(C,null,4).substring(0,5e3)),new Error("Pages elements changes detected");await A.promises.stat(e).catch(()=>null)&&await A.promises.unlink(e)}else await Y(t,u);return u}}}exports.Cache=r.Cache;exports.CacheStats=r.CacheStats;exports.CheckError=r.CheckError;exports.ConsoleMessageLevel=r.ConsoleMessageLevel;exports.Lazy=r.Lazy;exports.LazyWithId=r.LazyWithId;exports.Locker=r.Locker;exports.LockerWithId=r.LockerWithId;exports.LogLevel=r.LogLevel;exports.MAX_REPORT_ITEMS_DEFAULT=r.MAX_REPORT_ITEMS_DEFAULT;exports.MatchInternalError=r.MatchInternalError;exports.Matcher=r.Matcher;exports.MatcherAny=r.MatcherAny;exports.MatcherArray=r.MatcherArray;exports.MatcherArrayItem=r.MatcherArrayItem;exports.MatcherConvert=r.MatcherConvert;exports.MatcherCustom=r.MatcherCustom;exports.MatcherFew=r.MatcherFew;exports.MatcherIn=r.MatcherIn;exports.MatcherInstanceOf=r.MatcherInstanceOf;exports.MatcherIs=r.MatcherIs;exports.MatcherNever=r.MatcherNever;exports.MatcherNot=r.MatcherNot;exports.MatcherNumber=r.MatcherNumber;exports.MatcherObject=r.MatcherObject;exports.MatcherObjectEntry=r.MatcherObjectEntry;exports.MatcherRef=r.MatcherRef;exports.MatcherString=r.MatcherString;exports.MemoryStorage=r.MemoryStorage;exports.Random=r.Random;exports.Subject=r.Subject;exports.SubjectWithId=r.SubjectWithId;exports.UNIQUE_PSEUDO_RANDOM_MAX_COUNT=r.UNIQUE_PSEUDO_RANDOM_MAX_COUNT;exports.alertConsole=r.alertConsole;exports.alertReplace=r.alertReplace;exports.argsToString=r.argsToString;exports.check=r.check;exports.checkFunc=r.checkFunc;exports.compressGzip=r.compressGzip;exports.consoleIntercept=r.consoleIntercept;exports.consoleMessageToString=r.consoleMessageToString;exports.consoleReplace=r.consoleReplace;exports.convertTimeZone=r.convertTimeZone;exports.converterErrorToBuffer=r.converterErrorToBuffer;exports.converterJson=r.converterJson;exports.converterJsonBuffer=r.converterJsonBuffer;exports.converterStringToBuffer=r.converterStringToBuffer;exports.createMatchResult=r.createMatchResult;exports.createMatchResultBoolean=r.createMatchResultBoolean;exports.createMatchResultError=r.createMatchResultError;exports.createTaskDelayRetry=r.createTaskDelayRetry;exports.createUniquePseudoRandom=r.createUniquePseudoRandom;exports.dateNowUnique=r.dateNowUnique;exports.decompressGzip=r.decompressGzip;exports.deepCloneJsonLike=r.deepCloneJsonLike;exports.deepEqualJsonLike=r.deepEqualJsonLike;exports.deepEqualJsonLikeMap=r.deepEqualJsonLikeMap;exports.equalArray=r.equalArray;exports.escapeHtml=r.escapeHtml;exports.escapeRegExp=r.escapeRegExp;exports.expectedToString=r.expectedToString;exports.filterMatchResult=r.filterMatchResult;exports.filterMatchResultNested=r.filterMatchResultNested;exports.fixStackTrace=r.fixStackTrace;exports.formatAny=r.formatAny;exports.formatDate=r.formatDate;exports.formatDateFileName=r.formatDateFileName;exports.getConsoleMessages=r.getConsoleMessages;exports.getDateInet=r.getDateInet;exports.getHashKey=r.getHashKey;exports.getJsonKey=r.getJsonKey;exports.getNormalizedObject=r.getNormalizedObject;exports.getObjectId=r.getObjectId;exports.getRandomFunc=r.getRandomFunc;exports.getRandomSeed=r.getRandomSeed;exports.getStackTrace=r.getStackTrace;exports.isGzipCompressed=r.isGzipCompressed;exports.isMatcher=r.isMatcher;exports.isObservable=r.isObservable;exports.mapObjectConverter=r.mapObjectConverter;exports.match=r.match;exports.matchAnd=r.matchAnd;exports.matchAndPipe=r.matchAndPipe;exports.matchAny=r.matchAny;exports.matchArray=r.matchArray;exports.matchArrayBuffer=r.matchArrayBuffer;exports.matchArrayIncludes=r.matchArrayIncludes;exports.matchArrayItem=r.matchArrayItem;exports.matchArrayLength=r.matchArrayLength;exports.matchArrayWith=r.matchArrayWith;exports.matchBoolean=r.matchBoolean;exports.matchConstructor=r.matchConstructor;exports.matchConvert=r.matchConvert;exports.matchCustom=r.matchCustom;exports.matchDeep=r.matchDeep;exports.matchEnum=r.matchEnum;exports.matchFloat=r.matchFloat;exports.matchIn=r.matchIn;exports.matchInstanceOf=r.matchInstanceOf;exports.matchInt=r.matchInt;exports.matchIntDate=r.matchIntDate;exports.matchIs=r.matchIs;exports.matchIsNonStrict=r.matchIsNonStrict;exports.matchNever=r.matchNever;exports.matchNot=r.matchNot;exports.matchNotNullish=r.matchNotNullish;exports.matchNullish=r.matchNullish;exports.matchNumber=r.matchNumber;exports.matchObject=r.matchObject;exports.matchObjectEntries=r.matchObjectEntries;exports.matchObjectEntry=r.matchObjectEntry;exports.matchObjectKey=r.matchObjectKey;exports.matchObjectKeyValue=r.matchObjectKeyValue;exports.matchObjectKeys=r.matchObjectKeys;exports.matchObjectKeysNotNull=r.matchObjectKeysNotNull;exports.matchObjectPartial=r.matchObjectPartial;exports.matchObjectValue=r.matchObjectValue;exports.matchObjectValues=r.matchObjectValues;exports.matchObjectWith=r.matchObjectWith;exports.matchOptional=r.matchOptional;exports.matchOr=r.matchOr;exports.matchOrPipe=r.matchOrPipe;exports.matchRange=r.matchRange;exports.matchRangeDate=r.matchRangeDate;exports.matchRef=r.matchRef;exports.matchResultNestedToString=r.matchResultNestedToString;exports.matchResultToString=r.matchResultToString;exports.matchString=r.matchString;exports.matchStringLength=r.matchStringLength;exports.matchTypeOf=r.matchTypeOf;exports.matchUuid=r.matchUuid;exports.matchValueState=r.matchValueState;exports.max=r.max;exports.min=r.min;exports.minMax=r.minMax;exports.numberMod=r.numberMod;exports.promiseAllWait=r.promiseAllWait;exports.randomBoolean=r.randomBoolean;exports.randomEnum=r.randomEnum;exports.randomFloat=r.randomFloat;exports.randomIndexWeighted=r.randomIndexWeighted;exports.randomInt=r.randomInt;exports.randomItem=r.randomItem;exports.randomItems=r.randomItems;exports.setArrayConverter=r.setArrayConverter;exports.setFuncName=r.setFuncName;exports.sha256=r.sha256;exports.sha256Buffer=r.sha256Buffer;exports.timeoutAbortController=r.timeoutAbortController;exports.toConvertFrom=r.toConvertFrom;exports.toConvertTo=r.toConvertTo;exports.toConvertWithDefaultFrom=r.toConvertWithDefaultFrom;exports.toConvertWithDefaultTo=r.toConvertWithDefaultTo;exports.toConverter=r.toConverter;exports.toConverterFrom=r.toConverterFrom;exports.toConverterTo=r.toConverterTo;exports.toConverterWithDefault=r.toConverterWithDefault;exports.toConverterWithDefaultFrom=r.toConverterWithDefaultFrom;exports.toConverterWithDefaultTo=r.toConverterWithDefaultTo;exports.toCorrect=r.toCorrect;exports.toCorrectWithDefault=r.toCorrectWithDefault;exports.toHex=r.toHex;exports.truncateString=r.truncateString;exports.urlGetBoolean=r.urlGetBoolean;exports.urlGetFloat=r.urlGetFloat;exports.urlGetInt=r.urlGetInt;exports.urlGetParams=r.urlGetParams;exports.urlGetString=r.urlGetString;exports.urlParamToBoolean=r.urlParamToBoolean;exports.urlParamToFloat=r.urlParamToFloat;exports.urlParamToInt=r.urlParamToInt;exports.validateMatchResult=r.validateMatchResult;exports.waitObservable=r.waitObservable;exports.withConsoleReplace=r.withConsoleReplace;exports.withRetry=r.withRetry;exports.withTimeout=r.withTimeout;exports.DIFF_NEW=re;exports.DIFF_OLD=te;exports.FileStatStorage=Me;exports.FileStorage=oe;exports.checkPageHttpErrors=De;exports.clickAll=rt;exports.createCDPSession=le;exports.createConverterSubPath=se;exports.createFileCacheOptions=Qe;exports.createMatchPath=He;exports.createPagesElementsChangesTest=ut;exports.createTestE2e=Ie;exports.createTestE2eVariants=ot;exports.delayOnErrorCall=Ae;exports.delayOnErrorSet=Ze;exports.delayOnErrorWait=et;exports.destroyCDPSession=ue;exports.exec=Pe;exports.fileLock=Ke;exports.forcePseudoClasses=Ne;exports.generateTempFileName=we;exports.getAllElements=ie;exports.getDrive=ge;exports.getElementsStyleDiff=fe;exports.getFileId=be;exports.getObjectsDiff=q;exports.getPageHttpErrors=ke;exports.globGitIgnoreToPicomatch=Ce;exports.globToRelative=Te;exports.initPage=je;exports.loadGlobs=Ve;exports.loadGlobsFromFile=xe;exports.loadJson=Le;exports.nodeBeep=Ye;exports.objectTransform=H;exports.pathNormalize=R;exports.pathResolve=Ee;exports.poolFs=N;exports.readDirRecursive=ve;exports.saveJson=Y;exports.setPlaywrightPriorityLow=ce;exports.subscribeJsErrors=_e;exports.testPage=Fe;exports.useBrowser=tt;exports.useBrowserContext=Re;exports.usingCDPSession=at;exports.waitPageStable=st;exports.walkPathHandleErrorDefault=Se;exports.walkPaths=qe;exports.writeFileThroughTmp=ye;
8
+ `),i.stack=c+(i.stack||i.message),i.message=c+i.message,i}}function tt({browserType:e,options:t}){return async function(s){const n=await e.launch(t??void 0);try{return await s(n)}finally{await n.close()}}}function Re({browser:e,options:t}){return async function(s){const n=await e.newContext(t??void 0);await ce();try{const a=await s(n);return await n.close(),a}catch(a){const i=Ae?.();throw i?(console.error("[test][useBrowserContext] error",a),i.finally(()=>n.close())):await n.close(),a}}}async function rt(e,t){const o=await e.$$(t);for(const s of o)await s.click()}const ne=new ee.AbortControllerFast;let nt=0;function Ie(e){return async function({browser:o,contextOptions:s,name:n,url:a,pool:i,priority:c,filters:l,...u},E){const d=G.combineAbortSignals(ne.signal,E);try{await _.poolRunWait({pool:i,count:1,priority:c,abortSignal:d,func:async(m,O)=>{O.throwIfAborted(),await Re({browser:o,options:s})(async h=>{O.throwIfAborted();const p=await h.newPage();await ce();const y=o.browserType().name(),M=O.subscribe(()=>{p.isClosed()||(p.close({runBeforeUnload:!1}),h.close({}))});try{console.log(`START ${n} (${y}): ${a}`),await Fe({page:p,abortSignal:O,filters:l,func:async({page:f,checkErrors:g,abortSignal:S})=>{await e({page:f,url:a,checkErrors:g,abortSignal:S,args:u})}}),console.log(`END [${nt++}] ${n} (${y}): ${a}`)}catch(f){if(O.aborted||f instanceof ee.AbortError){console.log(`ABORTED ${n} (${y}): ${a}`);return}throw console.log(`ERROR ${n} (${y}): ${a}`),ne.signal.aborted||(console.log("unsubscribe on first error"),M()),ne.abort(),f}})}})}catch(m){if(m instanceof ee.AbortError)return;throw m}}}function ot(e){const t=Ie(e);return Je.createTestVariants(async o=>await t(o))}function st(e,t){const o=t.stableTime,s=t.timeout,n=t.mutation?{childList:!!t.mutation.childList,attributes:!!t.mutation.attributes,characterData:!!t.mutation.characterData,subtree:!!t.mutation.subtree,selector:t.mutation.selector??null}:null,a=t.resource?{resource:!!t.resource.resource,navigation:!!t.resource.navigation,paint:!!t.resource.paint,longTask:!!t.resource.longTask}:null;return e.evaluate(({stableTime:i,timeout:c,mutation:l,resource:u})=>{return new Promise((m,O)=>{let h=Date.now(),p=null,y=null;const M=[];function f(){h=Date.now()}function g(){p!=null&&(clearTimeout(p),p=null),y!=null&&(clearTimeout(y),y=null);for(let w=0,v=M.length;w<v;w++)M[w]()}function S(){const w=i-(Date.now()-h);w<=0?(g(),m()):p=setTimeout(S,w)}if(l){const w=E(l,f);M.push(w)}if(u){const w=d(u,f);M.push(w)}p=setTimeout(S,i),y=setTimeout(()=>{g(),O(new Error(`[waitPageStable] timed out after ${c}ms waiting for page to stabilize`))},c)});function E(m,O){const h=m.selector?document.querySelector(m.selector):document.documentElement;if(!h)throw new Error(`[waitPageStable] element not found: ${m.selector}`);const p=new MutationObserver(O);return p.observe(h,{childList:m.childList,attributes:m.attributes,characterData:m.characterData,subtree:m.subtree}),()=>{p.disconnect()}}function d(m,O){const h=[];m.resource&&h.push("resource"),m.navigation&&h.push("navigation"),m.paint&&h.push("paint"),m.longTask&&h.push("longtask");const p=new PerformanceObserver(O);return p.observe({entryTypes:h}),()=>{p.disconnect()}}},{stableTime:o,timeout:s,mutation:n,resource:a})}async function Y(e,t){const o=k.dirname(e);await A.promises.stat(o).catch(()=>null)||await A.promises.mkdir(o,{recursive:!0}),await A.promises.writeFile(e,JSON.stringify(t,null,4),{encoding:"utf-8"})}async function Le(e){if(!await A.promises.stat(e).catch(()=>null))return null;const t=await A.promises.readFile(e,{encoding:"utf-8"});return JSON.parse(t)}const te="-",re="+";function q(e,t,o){if(e===t)return null;if(Array.isArray(e)){if(Array.isArray(t)){let n=null;for(let a=0,i=Math.max(t.length,t.length);a<i;a++){const c=q(e[a],t[a],o);c!=null&&(n||(n=[]),n.push(c))}return n!=null&&o&&(n=o(e,t,n)),n}}else if(e instanceof Object&&t instanceof Object){let n=null;for(const a in e)if(Object.prototype.hasOwnProperty.call(e,a)){const i=q(e[a],t[a],o);i!=null&&(n||(n={}),n[a]=i)}for(const a in t)if(Object.prototype.hasOwnProperty.call(t,a)&&!Object.prototype.hasOwnProperty.call(e,a)){const i=q(e[a],t[a],o);i!=null&&(n||(n={}),n[a]=i)}return n!=null&&o&&(n=o(e,t,n)),n}let s={[te]:e,[re]:t};return o&&(s=o(e,t,s)),s}function ie(e){function t(f){return f.sort((g,S)=>g[0]>S[0]?1:-1).reduce((g,S)=>(g[S[0]]=S[1],g),{})}function o(f){return f.reduce((g,S)=>(g[S]=!0,g),{})}const s=e.filters&&e.filters.excludeAttrs&&o(e.filters.excludeAttrs),n=e.filters&&e.filters.fixAttrs,a=e.filters&&e.filters.fixStyles,i=e.filters&&e.filters.excludeStyles&&o(e.filters.excludeStyles),c=e.filters&&e.filters.fixTags,l=e.filters&&e.filters.excludeClasses,u=e.filters&&e.filters.excludeIds,E=e.filters&&e.filters.excludeSelectorClasses,d=e.filters&&e.filters.excludeSelectorIds;let m;if(e.filters&&e.filters.excludeSelectors&&e.filters.excludeSelectors.length>0){const f=Array.from(document.querySelectorAll(e.filters.excludeSelectors.join(",")));f.length>0&&(m=new Set(f))}function O(f,g,S,w){const v=getComputedStyle(f,g),C=[];for(let T=0,x=v.length;T<x;T++){const D=v[T];if(i&&i[D])continue;let b=v[D];if(b&&a)for(let j=0,P=a.length;j<P;j++)a[j].name.test(D)&&(b=b.replace(a[j].search,a[j].replace));(!S||S[D]!==b)&&(!w||w[D]===b)&&C.push([D,b])}return t(C)}function h(f,g,S){return{_:O(f,void 0,g&&g._,S&&S._),before:O(f,"before",g&&g.before,S&&S.before),after:O(f,"after",g&&g.after,S&&S.after)}}function p(f,g,S,w,v){for(let C=0,T=f.childNodes.length;C<T;C++){const x=f.childNodes[C];if(!x)throw new Error(`child is null; index=${C}; ${w}, ${f.className}\r
9
+ You should wait js executions before test`);x instanceof Element&&y(x,g,S,w,v)}}function y(f,g,S,w,v){const C=v&&v[g.length];if(v&&!C||m&&m.has(f))return;let T=f.tagName&&f.tagName.toLowerCase();if(T==="head"&&(S=!1),c)for(let F=0,J=c.length;F<J;F++)T=T.replace(c[F].search,c[F].replace);if(C&&C.tag!==T)return;const x=[];for(let F=0,J=f.attributes.length;F<J;F++){const $=f.attributes.item(F);let B=$.name,V=$.value;if(B=B.toLowerCase(),B!=="class"&&!(s&&s[B])){if(n)for(let U=0,$e=n.length;U<$e;U++)n[U].name.test(B)&&(V=V.replace(n[U].search,n[U].replace));(!C||C.attrs&&C.attrs[B]===V)&&x.push([B,V])}}const D=[],b=[];for(let F=0,J=f.classList.length;F<J;F++){const $=f.classList.item(F);(!l||!l.test($))&&D.push($),(!E||!E.test($))&&b.push($)}const j=S?h(f,e.defaultStyle,C&&C.style):null,P=f.childElementCount?[]:null;f.id&&(!u||!u.test(f.id))&&f.id;const I=f.id&&(!d||!d.test(f.id))?f.id:"",z=(T||"")+(I?"#"+I:"")+(b.length>0?"."+b.join("."):""),he=z?w?w+" > "+z:z:w,ze={tag:T,selector:he,classes:D,attrs:x.length>0?t(x):null,style:j,childs:P};g.push(ze),P&&p(f,P,S,he,C&&C.childs)}const M=[];return y(document.documentElement,M,!0,"",e.shouldEqualResult&&[e.shouldEqualResult]),M[0]}async function le(e){const t=await e.context().newCDPSession(e);return await t.send("DOM.enable"),await t.send("CSS.enable"),t}async function ue(e){await e.send("CSS.disable"),await e.send("DOM.disable"),await e.detach()}async function at(e,t){const o=await le(e);try{return await t(o)}finally{await ue(o)}}async function Ne(e,t){const{nodes:o}=await e.send("DOM.getFlattenedDocument",{depth:-1,pierce:!0}),s=o.filter(n=>n.nodeType===1).map(n=>n.nodeId);for(const n of s)await e.send("CSS.forcePseudoState",{nodeId:n,forcedPseudoClasses:t})}function Z(e,t){if(!e||!t)return t||null;let o=null;for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&t[s]!==e[s]&&(o||(o={}),o[s]=t[s]);for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&!Object.prototype.hasOwnProperty.call(t,s)&&(o||(o={}),o[s]="");return o}function it(e,t){if(!e||!t)return t||null;const o=Z(e._,t._),s=Z(e.before,t.before),n=Z(e.after,t.after);return!o&&!s&&!n?null:{_:o||{},before:s||{},after:n||{}}}function ct(e,t){if(!e||!t)return t||null;if(e.length!==t.length)return t;for(let o=0,s=e.length;o<s;o++)if(e[o]!==t[o])return t;return null}function fe(e,t){const o=ct(e.classes,t.classes),s=Z(e.attrs,t.attrs),n=it(e.style,t.style);let a=null;if(e.childs&&t.childs){const i=Math.min(e.childs.length,t.childs.length);for(let c=0;c<i;c++){const l=fe(e.childs[c],t.childs[c]);if(l){if(!a){a=[];for(let u=0;u<i;u++)a.push({})}a[c]=l}}}return!o&&!s&&!n&&!a?null:{tag:t.tag,selector:t.selector,classes:o,attrs:s,style:n,childs:a}}const H=(e,t,o,s)=>{const n=s(e,t,o,s);if(n==null)return n;if(Array.isArray(n))return n.map((a,i,c)=>H(a,i,c,s));if(typeof n=="object"){const a={};for(const i in n)Object.prototype.hasOwnProperty.call(n,i)&&(a[i]=H(n[i],i,n,s));return a}return n};function We(e,t){if(e.attrs&&t.excludeAttrs){for(let o=0,s=t.excludeAttrs.length;o<s;o++)delete e.attrs[t.excludeAttrs[o]];Object.keys(e.attrs).length===0&&(e.attrs=null)}if(e.classes&&t.excludeClasses&&(e.classes=e.classes.filter(o=>!t.excludeClasses.test(o))),e.style&&t.excludeStyles)for(const o of["_","before","after"]){const s=e.style[o];if(s)for(let n=0,a=t.excludeStyles.length;n<a;n++)delete s[t.excludeStyles[n]]}if(e.childs)for(let o=0,s=e.childs.length;o<s;o++)We(e.childs[o],t)}function lt(e,t){for(const o in e){if(!Object.prototype.hasOwnProperty.call(e,o))continue;const s=e[o];for(const n in s){if(!Object.prototype.hasOwnProperty.call(s,n))continue;const a=s[n];for(const i in a)Object.prototype.hasOwnProperty.call(a,i)&&We(a[i],t)}}}function ut({actualResultFile:e,expectedResultFile:t,diffResultFile:o,filters:s,transform:n,pseudoStates:a}){let i,c,l,u={};return{async init(E){i=await Le(t),n&&(i=H(i,null,null,n)),i&&s&&lt(i,s),await E.goto("about:blank"),c=await E.evaluate(ie,{filters:s}),l=c.style},async handlePage({page:E,testId:d,url:m,stateId:O,_filters:h}){let p=u[d];p||(p={},u[d]=p);let y=p[m.href];y||(y={},p[m.href]=y),await E.addStyleTag({content:"*, *::before, *::after { animation-name: none!important; transition-duration: 0s !important; }"});const M=a??[{states:[]}];let f=null,g;try{for(let S=0;S<M.length;S++){const w=M[S],v=w.states.length>0?O+":"+w.states.join(":"):O;let C=null;if(w.states.length>0){f||(f=await le(E));const b=performance.now();await Ne(f,w.states),C=performance.now()-b}w.delay&&await G.delay(w.delay);const T=performance.now(),x=await E.evaluate(ie,{filters:h||s,defaultStyle:l,shouldEqualResult:y[v]}),D=performance.now()-T;if(console.log(`SNAPSHOT ${v}:`+(C!=null?` forcePseudoClasses ${C.toFixed(0)}ms,`:"")+` getAllElements ${D.toFixed(0)}ms`),!g)g=x,y[v]=x;else{const b=fe(g,x);b&&(y[v]=b)}}}finally{f&&await ue(f)}},async end({checkExistUrlsOnly:E}){if(u=r.getNormalizedObject(u),n&&(u=H(u,null,null,n)),i){let d,m;if(!E)d=i,m=u;else{d={},m={};for(const h in i)if(Object.prototype.hasOwnProperty.call(i,h)&&Object.prototype.hasOwnProperty.call(u,h)){d[h]={},m[h]={};for(const p in i[h])Object.prototype.hasOwnProperty.call(i[h],p)&&Object.prototype.hasOwnProperty.call(u[h],p)&&(d[h][p]=i[h][p],m[h][p]=u[h][p])}}const O=q(d,m,(h,p,y)=>y.selector&&(delete y.selector,Object.keys(y).length===0)?null:y.childs&&y.childs.length===1?y.childs[0]:(p&&p.selector?y[re]?y[re]=p.selector:y={selector:p.selector,...y}:h&&h.selector&&(y[te]?y[te]=h.selector:y={selector:h.selector,...y}),y));if(o&&await Y(o,O||{}),O)throw await Y(e,u),console.error("Pages elements changes: "+JSON.stringify(O,null,4).substring(0,5e3)),new Error("Pages elements changes detected");await A.promises.stat(e).catch(()=>null)&&await A.promises.unlink(e)}else await Y(t,u);return u}}}exports.Cache=r.Cache;exports.CacheStats=r.CacheStats;exports.CheckError=r.CheckError;exports.ConsoleMessageLevel=r.ConsoleMessageLevel;exports.Lazy=r.Lazy;exports.LazyWithId=r.LazyWithId;exports.Locker=r.Locker;exports.LockerWithId=r.LockerWithId;exports.LogLevel=r.LogLevel;exports.MAX_REPORT_ITEMS_DEFAULT=r.MAX_REPORT_ITEMS_DEFAULT;exports.MatchInternalError=r.MatchInternalError;exports.Matcher=r.Matcher;exports.MatcherAny=r.MatcherAny;exports.MatcherArray=r.MatcherArray;exports.MatcherArrayItem=r.MatcherArrayItem;exports.MatcherConvert=r.MatcherConvert;exports.MatcherCustom=r.MatcherCustom;exports.MatcherFew=r.MatcherFew;exports.MatcherIn=r.MatcherIn;exports.MatcherInstanceOf=r.MatcherInstanceOf;exports.MatcherIs=r.MatcherIs;exports.MatcherNever=r.MatcherNever;exports.MatcherNot=r.MatcherNot;exports.MatcherNumber=r.MatcherNumber;exports.MatcherObject=r.MatcherObject;exports.MatcherObjectEntry=r.MatcherObjectEntry;exports.MatcherRef=r.MatcherRef;exports.MatcherString=r.MatcherString;exports.MemoryStorage=r.MemoryStorage;exports.Random=r.Random;exports.Subject=r.Subject;exports.SubjectWithId=r.SubjectWithId;exports.UNIQUE_PSEUDO_RANDOM_MAX_COUNT=r.UNIQUE_PSEUDO_RANDOM_MAX_COUNT;exports.alertConsole=r.alertConsole;exports.alertReplace=r.alertReplace;exports.argsToString=r.argsToString;exports.check=r.check;exports.checkFunc=r.checkFunc;exports.compressGzip=r.compressGzip;exports.consoleIntercept=r.consoleIntercept;exports.consoleMessageToString=r.consoleMessageToString;exports.consoleReplace=r.consoleReplace;exports.convertTimeZone=r.convertTimeZone;exports.converterErrorToBuffer=r.converterErrorToBuffer;exports.converterJson=r.converterJson;exports.converterJsonBuffer=r.converterJsonBuffer;exports.converterStringToBuffer=r.converterStringToBuffer;exports.createConverterBufferToGzip=r.createConverterBufferToGzip;exports.createConverterErrorToGzip=r.createConverterErrorToGzip;exports.createConverterJsonGzip=r.createConverterJsonGzip;exports.createMatchResult=r.createMatchResult;exports.createMatchResultBoolean=r.createMatchResultBoolean;exports.createMatchResultError=r.createMatchResultError;exports.createTaskDelayRetry=r.createTaskDelayRetry;exports.createUniquePseudoRandom=r.createUniquePseudoRandom;exports.dateNowUnique=r.dateNowUnique;exports.decompressGzip=r.decompressGzip;exports.deepCloneJsonLike=r.deepCloneJsonLike;exports.deepEqualJsonLike=r.deepEqualJsonLike;exports.deepEqualJsonLikeMap=r.deepEqualJsonLikeMap;exports.equalArray=r.equalArray;exports.escapeHtml=r.escapeHtml;exports.escapeRegExp=r.escapeRegExp;exports.expectedToString=r.expectedToString;exports.filterMatchResult=r.filterMatchResult;exports.filterMatchResultNested=r.filterMatchResultNested;exports.fixStackTrace=r.fixStackTrace;exports.formatAny=r.formatAny;exports.formatDate=r.formatDate;exports.formatDateFileName=r.formatDateFileName;exports.getConsoleMessages=r.getConsoleMessages;exports.getDateInet=r.getDateInet;exports.getHashKey=r.getHashKey;exports.getJsonKey=r.getJsonKey;exports.getNormalizedObject=r.getNormalizedObject;exports.getObjectId=r.getObjectId;exports.getRandomFunc=r.getRandomFunc;exports.getRandomSeed=r.getRandomSeed;exports.getStackTrace=r.getStackTrace;exports.isGzipCompressed=r.isGzipCompressed;exports.isMatcher=r.isMatcher;exports.isObservable=r.isObservable;exports.mapObjectConverter=r.mapObjectConverter;exports.match=r.match;exports.matchAnd=r.matchAnd;exports.matchAndPipe=r.matchAndPipe;exports.matchAny=r.matchAny;exports.matchArray=r.matchArray;exports.matchArrayBuffer=r.matchArrayBuffer;exports.matchArrayIncludes=r.matchArrayIncludes;exports.matchArrayItem=r.matchArrayItem;exports.matchArrayLength=r.matchArrayLength;exports.matchArrayWith=r.matchArrayWith;exports.matchBoolean=r.matchBoolean;exports.matchConstructor=r.matchConstructor;exports.matchConvert=r.matchConvert;exports.matchCustom=r.matchCustom;exports.matchDeep=r.matchDeep;exports.matchEnum=r.matchEnum;exports.matchFloat=r.matchFloat;exports.matchIn=r.matchIn;exports.matchInstanceOf=r.matchInstanceOf;exports.matchInt=r.matchInt;exports.matchIntDate=r.matchIntDate;exports.matchIs=r.matchIs;exports.matchIsNonStrict=r.matchIsNonStrict;exports.matchNever=r.matchNever;exports.matchNot=r.matchNot;exports.matchNotNullish=r.matchNotNullish;exports.matchNullish=r.matchNullish;exports.matchNumber=r.matchNumber;exports.matchObject=r.matchObject;exports.matchObjectEntries=r.matchObjectEntries;exports.matchObjectEntry=r.matchObjectEntry;exports.matchObjectKey=r.matchObjectKey;exports.matchObjectKeyValue=r.matchObjectKeyValue;exports.matchObjectKeys=r.matchObjectKeys;exports.matchObjectKeysNotNull=r.matchObjectKeysNotNull;exports.matchObjectPartial=r.matchObjectPartial;exports.matchObjectValue=r.matchObjectValue;exports.matchObjectValues=r.matchObjectValues;exports.matchObjectWith=r.matchObjectWith;exports.matchOptional=r.matchOptional;exports.matchOr=r.matchOr;exports.matchOrPipe=r.matchOrPipe;exports.matchRange=r.matchRange;exports.matchRangeDate=r.matchRangeDate;exports.matchRef=r.matchRef;exports.matchResultNestedToString=r.matchResultNestedToString;exports.matchResultToString=r.matchResultToString;exports.matchString=r.matchString;exports.matchStringLength=r.matchStringLength;exports.matchTypeOf=r.matchTypeOf;exports.matchUuid=r.matchUuid;exports.matchValueState=r.matchValueState;exports.max=r.max;exports.min=r.min;exports.minMax=r.minMax;exports.numberMod=r.numberMod;exports.promiseAllWait=r.promiseAllWait;exports.randomBoolean=r.randomBoolean;exports.randomEnum=r.randomEnum;exports.randomFloat=r.randomFloat;exports.randomIndexWeighted=r.randomIndexWeighted;exports.randomInt=r.randomInt;exports.randomItem=r.randomItem;exports.randomItems=r.randomItems;exports.setArrayConverter=r.setArrayConverter;exports.setFuncName=r.setFuncName;exports.sha256=r.sha256;exports.sha256Buffer=r.sha256Buffer;exports.timeoutAbortController=r.timeoutAbortController;exports.toConvertFrom=r.toConvertFrom;exports.toConvertTo=r.toConvertTo;exports.toConvertWithDefaultFrom=r.toConvertWithDefaultFrom;exports.toConvertWithDefaultTo=r.toConvertWithDefaultTo;exports.toConverter=r.toConverter;exports.toConverterFrom=r.toConverterFrom;exports.toConverterTo=r.toConverterTo;exports.toConverterWithDefault=r.toConverterWithDefault;exports.toConverterWithDefaultFrom=r.toConverterWithDefaultFrom;exports.toConverterWithDefaultTo=r.toConverterWithDefaultTo;exports.toCorrect=r.toCorrect;exports.toCorrectWithDefault=r.toCorrectWithDefault;exports.toHex=r.toHex;exports.truncateString=r.truncateString;exports.urlGetBoolean=r.urlGetBoolean;exports.urlGetFloat=r.urlGetFloat;exports.urlGetInt=r.urlGetInt;exports.urlGetParams=r.urlGetParams;exports.urlGetString=r.urlGetString;exports.urlParamToBoolean=r.urlParamToBoolean;exports.urlParamToFloat=r.urlParamToFloat;exports.urlParamToInt=r.urlParamToInt;exports.validateMatchResult=r.validateMatchResult;exports.waitObservable=r.waitObservable;exports.withConsoleReplace=r.withConsoleReplace;exports.withRetry=r.withRetry;exports.withTimeout=r.withTimeout;exports.DIFF_NEW=re;exports.DIFF_OLD=te;exports.FileStatStorage=Me;exports.FileStorage=oe;exports.checkPageHttpErrors=De;exports.clickAll=rt;exports.createCDPSession=le;exports.createConverterSubPath=se;exports.createFileCacheOptions=Qe;exports.createMatchPath=He;exports.createPagesElementsChangesTest=ut;exports.createTestE2e=Ie;exports.createTestE2eVariants=ot;exports.delayOnErrorCall=Ae;exports.delayOnErrorSet=Ze;exports.delayOnErrorWait=et;exports.destroyCDPSession=ue;exports.exec=Pe;exports.fileLock=Ke;exports.forcePseudoClasses=Ne;exports.generateTempFileName=we;exports.getAllElements=ie;exports.getDrive=ge;exports.getElementsStyleDiff=fe;exports.getFileId=be;exports.getObjectsDiff=q;exports.getPageHttpErrors=ke;exports.globGitIgnoreToPicomatch=Oe;exports.globToRelative=Te;exports.initPage=je;exports.loadGlobs=Ve;exports.loadGlobsFromFile=xe;exports.loadJson=Le;exports.nodeBeep=Ye;exports.objectTransform=H;exports.pathNormalize=R;exports.pathResolve=Ee;exports.poolFs=N;exports.readDirRecursive=ve;exports.saveJson=Y;exports.setPlaywrightPriorityLow=ce;exports.subscribeJsErrors=_e;exports.testPage=Fe;exports.useBrowser=tt;exports.useBrowserContext=Re;exports.usingCDPSession=at;exports.waitPageStable=st;exports.walkPathHandleErrorDefault=Se;exports.walkPaths=qe;exports.writeFileThroughTmp=ye;