playwright-automation-core 1.0.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.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +225 -0
  3. package/dist/api/api.assertions.d.ts +196 -0
  4. package/dist/api/api.assertions.d.ts.map +1 -0
  5. package/dist/api/api.assertions.js +462 -0
  6. package/dist/api/api.assertions.js.map +1 -0
  7. package/dist/api/api.builder.d.ts +134 -0
  8. package/dist/api/api.builder.d.ts.map +1 -0
  9. package/dist/api/api.builder.js +273 -0
  10. package/dist/api/api.builder.js.map +1 -0
  11. package/dist/api/api.client.d.ts +157 -0
  12. package/dist/api/api.client.d.ts.map +1 -0
  13. package/dist/api/api.client.js +493 -0
  14. package/dist/api/api.client.js.map +1 -0
  15. package/dist/api/index.d.ts +8 -0
  16. package/dist/api/index.d.ts.map +1 -0
  17. package/dist/api/index.js +17 -0
  18. package/dist/api/index.js.map +1 -0
  19. package/dist/core/base.driver.d.ts +130 -0
  20. package/dist/core/base.driver.d.ts.map +1 -0
  21. package/dist/core/base.driver.js +264 -0
  22. package/dist/core/base.driver.js.map +1 -0
  23. package/dist/core/driver.factory.d.ts +120 -0
  24. package/dist/core/driver.factory.d.ts.map +1 -0
  25. package/dist/core/driver.factory.js +222 -0
  26. package/dist/core/driver.factory.js.map +1 -0
  27. package/dist/core/element.actions.d.ts +119 -0
  28. package/dist/core/element.actions.d.ts.map +1 -0
  29. package/dist/core/element.actions.js +379 -0
  30. package/dist/core/element.actions.js.map +1 -0
  31. package/dist/core/hook.manager.d.ts +186 -0
  32. package/dist/core/hook.manager.d.ts.map +1 -0
  33. package/dist/core/hook.manager.js +297 -0
  34. package/dist/core/hook.manager.js.map +1 -0
  35. package/dist/core/index.d.ts +8 -0
  36. package/dist/core/index.d.ts.map +1 -0
  37. package/dist/core/index.js +22 -0
  38. package/dist/core/index.js.map +1 -0
  39. package/dist/index.d.ts +17 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +128 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/mobile/index.d.ts +7 -0
  44. package/dist/mobile/index.d.ts.map +1 -0
  45. package/dist/mobile/index.js +14 -0
  46. package/dist/mobile/index.js.map +1 -0
  47. package/dist/mobile/mobile.assertions.d.ts +146 -0
  48. package/dist/mobile/mobile.assertions.d.ts.map +1 -0
  49. package/dist/mobile/mobile.assertions.js +333 -0
  50. package/dist/mobile/mobile.assertions.js.map +1 -0
  51. package/dist/mobile/mobile.driver.d.ts +297 -0
  52. package/dist/mobile/mobile.driver.d.ts.map +1 -0
  53. package/dist/mobile/mobile.driver.js +808 -0
  54. package/dist/mobile/mobile.driver.js.map +1 -0
  55. package/dist/types/common.types.d.ts +200 -0
  56. package/dist/types/common.types.d.ts.map +1 -0
  57. package/dist/types/common.types.js +3 -0
  58. package/dist/types/common.types.js.map +1 -0
  59. package/dist/types/config.types.d.ts +192 -0
  60. package/dist/types/config.types.d.ts.map +1 -0
  61. package/dist/types/config.types.js +3 -0
  62. package/dist/types/config.types.js.map +1 -0
  63. package/dist/types/driver.types.d.ts +500 -0
  64. package/dist/types/driver.types.d.ts.map +1 -0
  65. package/dist/types/driver.types.js +3 -0
  66. package/dist/types/driver.types.js.map +1 -0
  67. package/dist/types/enums.d.ts +53 -0
  68. package/dist/types/enums.d.ts.map +1 -0
  69. package/dist/types/enums.js +62 -0
  70. package/dist/types/enums.js.map +1 -0
  71. package/dist/types/index.d.ts +8 -0
  72. package/dist/types/index.d.ts.map +1 -0
  73. package/dist/types/index.js +15 -0
  74. package/dist/types/index.js.map +1 -0
  75. package/dist/utils/config.manager.d.ts +144 -0
  76. package/dist/utils/config.manager.d.ts.map +1 -0
  77. package/dist/utils/config.manager.js +473 -0
  78. package/dist/utils/config.manager.js.map +1 -0
  79. package/dist/utils/errors.d.ts +149 -0
  80. package/dist/utils/errors.d.ts.map +1 -0
  81. package/dist/utils/errors.js +290 -0
  82. package/dist/utils/errors.js.map +1 -0
  83. package/dist/utils/helpers.d.ts +124 -0
  84. package/dist/utils/helpers.d.ts.map +1 -0
  85. package/dist/utils/helpers.js +421 -0
  86. package/dist/utils/helpers.js.map +1 -0
  87. package/dist/utils/index.d.ts +9 -0
  88. package/dist/utils/index.d.ts.map +1 -0
  89. package/dist/utils/index.js +78 -0
  90. package/dist/utils/index.js.map +1 -0
  91. package/dist/utils/logger.d.ts +145 -0
  92. package/dist/utils/logger.d.ts.map +1 -0
  93. package/dist/utils/logger.js +235 -0
  94. package/dist/utils/logger.js.map +1 -0
  95. package/dist/utils/wait.utils.d.ts +95 -0
  96. package/dist/utils/wait.utils.d.ts.map +1 -0
  97. package/dist/utils/wait.utils.js +306 -0
  98. package/dist/utils/wait.utils.js.map +1 -0
  99. package/dist/web/index.d.ts +8 -0
  100. package/dist/web/index.d.ts.map +1 -0
  101. package/dist/web/index.js +16 -0
  102. package/dist/web/index.js.map +1 -0
  103. package/dist/web/web.assertions.d.ts +164 -0
  104. package/dist/web/web.assertions.d.ts.map +1 -0
  105. package/dist/web/web.assertions.js +427 -0
  106. package/dist/web/web.assertions.js.map +1 -0
  107. package/dist/web/web.driver.d.ts +174 -0
  108. package/dist/web/web.driver.d.ts.map +1 -0
  109. package/dist/web/web.driver.js +571 -0
  110. package/dist/web/web.driver.js.map +1 -0
  111. package/dist/web/web.page.d.ts +286 -0
  112. package/dist/web/web.page.d.ts.map +1 -0
  113. package/dist/web/web.page.js +570 -0
  114. package/dist/web/web.page.js.map +1 -0
  115. package/package.json +115 -0
@@ -0,0 +1,145 @@
1
+ import winston from "winston";
2
+ import { LogLevel } from "../types";
3
+ /**
4
+ * Log metadata interface
5
+ */
6
+ export interface LogMetadata {
7
+ [key: string]: unknown;
8
+ }
9
+ /**
10
+ * Logger configuration options
11
+ */
12
+ export interface LoggerOptions {
13
+ /** Log level */
14
+ level?: LogLevel;
15
+ /** Include timestamps */
16
+ timestamp?: boolean;
17
+ /** Log to file */
18
+ logToFile?: boolean;
19
+ /** Log file path */
20
+ logFilePath?: string;
21
+ /** Log format: 'json' or 'simple' */
22
+ format?: "json" | "simple";
23
+ /** Logger name/label */
24
+ label?: string;
25
+ /** Colorize console output */
26
+ colorize?: boolean;
27
+ }
28
+ /**
29
+ * Logger class providing consistent logging across the framework
30
+ */
31
+ export declare class Logger {
32
+ private logger;
33
+ private static instance;
34
+ private options;
35
+ /**
36
+ * Create a new Logger instance
37
+ */
38
+ constructor(options?: LoggerOptions);
39
+ /**
40
+ * Get singleton instance of Logger
41
+ */
42
+ static getInstance(options?: LoggerOptions): Logger;
43
+ /**
44
+ * Reset the singleton instance (useful for testing)
45
+ */
46
+ static resetInstance(): void;
47
+ /**
48
+ * Create a child logger with a specific label
49
+ */
50
+ static createLogger(label: string, options?: LoggerOptions): Logger;
51
+ /**
52
+ * Create winston logger instance
53
+ */
54
+ private createLogger;
55
+ /**
56
+ * Log error message
57
+ */
58
+ error(message: string, metadata?: LogMetadata): void;
59
+ /**
60
+ * Log warning message
61
+ */
62
+ warn(message: string, metadata?: LogMetadata): void;
63
+ /**
64
+ * Log info message
65
+ */
66
+ info(message: string, metadata?: LogMetadata): void;
67
+ /**
68
+ * Log debug message
69
+ */
70
+ debug(message: string, metadata?: LogMetadata): void;
71
+ /**
72
+ * Log trace message (uses silly level in winston)
73
+ */
74
+ trace(message: string, metadata?: LogMetadata): void;
75
+ /**
76
+ * Log a step in the test
77
+ */
78
+ step(stepNumber: number, description: string, metadata?: LogMetadata): void;
79
+ /**
80
+ * Log start of an action
81
+ */
82
+ actionStart(action: string, metadata?: LogMetadata): void;
83
+ /**
84
+ * Log end of an action
85
+ */
86
+ actionEnd(action: string, duration?: number, metadata?: LogMetadata): void;
87
+ /**
88
+ * Log action failure
89
+ */
90
+ actionFailed(action: string, error: Error, metadata?: LogMetadata): void;
91
+ /**
92
+ * Log API request
93
+ */
94
+ apiRequest(method: string, url: string, metadata?: LogMetadata): void;
95
+ /**
96
+ * Log API response
97
+ */
98
+ apiResponse(method: string, url: string, status: number, duration: number, metadata?: LogMetadata): void;
99
+ /**
100
+ * Log navigation
101
+ */
102
+ navigation(url: string, metadata?: LogMetadata): void;
103
+ /**
104
+ * Log element action
105
+ */
106
+ elementAction(action: string, locator: string, metadata?: LogMetadata): void;
107
+ /**
108
+ * Log screenshot taken
109
+ */
110
+ screenshot(path: string, metadata?: LogMetadata): void;
111
+ /**
112
+ * Log test start
113
+ */
114
+ testStart(testName: string, metadata?: LogMetadata): void;
115
+ /**
116
+ * Log test end
117
+ */
118
+ testEnd(testName: string, passed: boolean, duration: number, metadata?: LogMetadata): void;
119
+ /**
120
+ * Log suite start
121
+ */
122
+ suiteStart(suiteName: string, metadata?: LogMetadata): void;
123
+ /**
124
+ * Log suite end
125
+ */
126
+ suiteEnd(suiteName: string, passed: number, failed: number, duration: number, metadata?: LogMetadata): void;
127
+ /**
128
+ * Create a divider line in logs
129
+ */
130
+ divider(char?: string, length?: number): void;
131
+ /**
132
+ * Set log level dynamically
133
+ */
134
+ setLevel(level: LogLevel): void;
135
+ /**
136
+ * Get current log level
137
+ */
138
+ getLevel(): LogLevel;
139
+ /**
140
+ * Get the underlying winston logger
141
+ */
142
+ getWinstonLogger(): winston.Logger;
143
+ }
144
+ export declare const getLogger: (options?: LoggerOptions) => Logger;
145
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getLogger = exports.Logger = void 0;
7
+ const winston_1 = __importDefault(require("winston"));
8
+ const types_1 = require("../types");
9
+ /**
10
+ * Default logger options
11
+ */
12
+ const defaultOptions = {
13
+ level: types_1.LogLevel.INFO,
14
+ timestamp: true,
15
+ logToFile: false,
16
+ logFilePath: "./logs/automation.log",
17
+ format: "simple",
18
+ label: "playwright-core",
19
+ colorize: true,
20
+ };
21
+ /**
22
+ * Custom log format for simple output
23
+ */
24
+ const simpleFormat = winston_1.default.format.printf(({ level, message, label, timestamp, ...metadata }) => {
25
+ let msg = `${timestamp} [${label}] ${level}: ${message}`;
26
+ if (Object.keys(metadata).length > 0) {
27
+ msg += ` ${JSON.stringify(metadata)}`;
28
+ }
29
+ return msg;
30
+ });
31
+ /**
32
+ * Logger class providing consistent logging across the framework
33
+ */
34
+ class Logger {
35
+ logger;
36
+ static instance = null;
37
+ options;
38
+ /**
39
+ * Create a new Logger instance
40
+ */
41
+ constructor(options = {}) {
42
+ this.options = { ...defaultOptions, ...options };
43
+ this.logger = this.createLogger();
44
+ }
45
+ /**
46
+ * Get singleton instance of Logger
47
+ */
48
+ static getInstance(options) {
49
+ if (!Logger.instance) {
50
+ Logger.instance = new Logger(options);
51
+ }
52
+ return Logger.instance;
53
+ }
54
+ /**
55
+ * Reset the singleton instance (useful for testing)
56
+ */
57
+ static resetInstance() {
58
+ Logger.instance = null;
59
+ }
60
+ /**
61
+ * Create a child logger with a specific label
62
+ */
63
+ static createLogger(label, options) {
64
+ return new Logger({ ...options, label });
65
+ }
66
+ /**
67
+ * Create winston logger instance
68
+ */
69
+ createLogger() {
70
+ const transports = [];
71
+ // Console transport
72
+ const consoleFormat = winston_1.default.format.combine(winston_1.default.format.label({ label: this.options.label }), winston_1.default.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss.SSS" }), this.options.colorize
73
+ ? winston_1.default.format.colorize()
74
+ : winston_1.default.format.uncolorize(), this.options.format === "json" ? winston_1.default.format.json() : simpleFormat);
75
+ transports.push(new winston_1.default.transports.Console({
76
+ format: consoleFormat,
77
+ }));
78
+ // File transport (if enabled)
79
+ if (this.options.logToFile && this.options.logFilePath) {
80
+ const fileFormat = winston_1.default.format.combine(winston_1.default.format.label({ label: this.options.label }), winston_1.default.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss.SSS" }), winston_1.default.format.uncolorize(), winston_1.default.format.json());
81
+ transports.push(new winston_1.default.transports.File({
82
+ filename: this.options.logFilePath,
83
+ format: fileFormat,
84
+ }));
85
+ }
86
+ return winston_1.default.createLogger({
87
+ level: this.options.level,
88
+ transports,
89
+ });
90
+ }
91
+ /**
92
+ * Log error message
93
+ */
94
+ error(message, metadata) {
95
+ this.logger.error(message, metadata);
96
+ }
97
+ /**
98
+ * Log warning message
99
+ */
100
+ warn(message, metadata) {
101
+ this.logger.warn(message, metadata);
102
+ }
103
+ /**
104
+ * Log info message
105
+ */
106
+ info(message, metadata) {
107
+ this.logger.info(message, metadata);
108
+ }
109
+ /**
110
+ * Log debug message
111
+ */
112
+ debug(message, metadata) {
113
+ this.logger.debug(message, metadata);
114
+ }
115
+ /**
116
+ * Log trace message (uses silly level in winston)
117
+ */
118
+ trace(message, metadata) {
119
+ this.logger.silly(message, metadata);
120
+ }
121
+ /**
122
+ * Log a step in the test
123
+ */
124
+ step(stepNumber, description, metadata) {
125
+ this.info(`Step ${stepNumber}: ${description}`, metadata);
126
+ }
127
+ /**
128
+ * Log start of an action
129
+ */
130
+ actionStart(action, metadata) {
131
+ this.debug(`▶ Starting: ${action}`, metadata);
132
+ }
133
+ /**
134
+ * Log end of an action
135
+ */
136
+ actionEnd(action, duration, metadata) {
137
+ const durationStr = duration !== undefined ? ` (${duration}ms)` : "";
138
+ this.debug(`✓ Completed: ${action}${durationStr}`, metadata);
139
+ }
140
+ /**
141
+ * Log action failure
142
+ */
143
+ actionFailed(action, error, metadata) {
144
+ this.error(`✗ Failed: ${action} - ${error.message}`, {
145
+ ...metadata,
146
+ stack: error.stack,
147
+ });
148
+ }
149
+ /**
150
+ * Log API request
151
+ */
152
+ apiRequest(method, url, metadata) {
153
+ this.debug(`→ ${method} ${url}`, metadata);
154
+ }
155
+ /**
156
+ * Log API response
157
+ */
158
+ apiResponse(method, url, status, duration, metadata) {
159
+ const statusIcon = status >= 200 && status < 300 ? "✓" : "✗";
160
+ this.debug(`← ${statusIcon} ${method} ${url} [${status}] (${duration}ms)`, metadata);
161
+ }
162
+ /**
163
+ * Log navigation
164
+ */
165
+ navigation(url, metadata) {
166
+ this.info(`🌐 Navigating to: ${url}`, metadata);
167
+ }
168
+ /**
169
+ * Log element action
170
+ */
171
+ elementAction(action, locator, metadata) {
172
+ this.debug(`🎯 ${action}: ${locator}`, metadata);
173
+ }
174
+ /**
175
+ * Log screenshot taken
176
+ */
177
+ screenshot(path, metadata) {
178
+ this.info(`📸 Screenshot saved: ${path}`, metadata);
179
+ }
180
+ /**
181
+ * Log test start
182
+ */
183
+ testStart(testName, metadata) {
184
+ this.info(`\n${"=".repeat(60)}\n🧪 TEST START: ${testName}\n${"=".repeat(60)}`, metadata);
185
+ }
186
+ /**
187
+ * Log test end
188
+ */
189
+ testEnd(testName, passed, duration, metadata) {
190
+ const status = passed ? "✅ PASSED" : "❌ FAILED";
191
+ this.info(`\n${"=".repeat(60)}\n${status}: ${testName} (${duration}ms)\n${"=".repeat(60)}\n`, metadata);
192
+ }
193
+ /**
194
+ * Log suite start
195
+ */
196
+ suiteStart(suiteName, metadata) {
197
+ this.info(`\n${"#".repeat(60)}\n📦 SUITE: ${suiteName}\n${"#".repeat(60)}`, metadata);
198
+ }
199
+ /**
200
+ * Log suite end
201
+ */
202
+ suiteEnd(suiteName, passed, failed, duration, metadata) {
203
+ this.info(`\n${"#".repeat(60)}\n📊 SUITE COMPLETE: ${suiteName}\n Passed: ${passed}, Failed: ${failed}, Duration: ${duration}ms\n${"#".repeat(60)}\n`, metadata);
204
+ }
205
+ /**
206
+ * Create a divider line in logs
207
+ */
208
+ divider(char = "-", length = 60) {
209
+ this.info(char.repeat(length));
210
+ }
211
+ /**
212
+ * Set log level dynamically
213
+ */
214
+ setLevel(level) {
215
+ this.options.level = level;
216
+ this.logger.level = level;
217
+ }
218
+ /**
219
+ * Get current log level
220
+ */
221
+ getLevel() {
222
+ return this.options.level;
223
+ }
224
+ /**
225
+ * Get the underlying winston logger
226
+ */
227
+ getWinstonLogger() {
228
+ return this.logger;
229
+ }
230
+ }
231
+ exports.Logger = Logger;
232
+ // Export singleton getter for convenience
233
+ const getLogger = (options) => Logger.getInstance(options);
234
+ exports.getLogger = getLogger;
235
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import { WaitOptions, RetryOptions } from "../types";
2
+ import { Logger } from "./logger";
3
+ /**
4
+ * Condition function type
5
+ */
6
+ export type ConditionFn<T> = () => Promise<T> | T;
7
+ /**
8
+ * Predicate function type
9
+ */
10
+ export type PredicateFn<T> = (value: T) => boolean;
11
+ /**
12
+ * Wait timeout error
13
+ */
14
+ export declare class WaitTimeoutError extends Error {
15
+ readonly timeout: number;
16
+ constructor(message: string, timeout: number);
17
+ }
18
+ /**
19
+ * Retry exhausted error
20
+ */
21
+ export declare class RetryExhaustedError extends Error {
22
+ readonly attempts: number;
23
+ readonly lastError?: Error | undefined;
24
+ constructor(message: string, attempts: number, lastError?: Error | undefined);
25
+ }
26
+ /**
27
+ * Wait utilities class providing various wait mechanisms
28
+ */
29
+ export declare class WaitUtils {
30
+ private logger;
31
+ constructor(logger?: Logger);
32
+ /**
33
+ * Sleep for specified milliseconds
34
+ */
35
+ sleep(ms: number): Promise<void>;
36
+ /**
37
+ * Wait for a condition to be truthy
38
+ * @param condition - Function that returns a value to check
39
+ * @param options - Wait options
40
+ * @returns The truthy value returned by condition
41
+ */
42
+ waitFor<T>(condition: ConditionFn<T>, options?: WaitOptions): Promise<T>;
43
+ /**
44
+ * Wait for a condition to match a predicate
45
+ * @param condition - Function that returns a value
46
+ * @param predicate - Function to check the value
47
+ * @param options - Wait options
48
+ */
49
+ waitForCondition<T>(condition: ConditionFn<T>, predicate: PredicateFn<T>, options?: WaitOptions): Promise<T>;
50
+ /**
51
+ * Wait for a condition to be false/falsy
52
+ */
53
+ waitForNot<T>(condition: ConditionFn<T>, options?: WaitOptions): Promise<void>;
54
+ /**
55
+ * Wait for any of the conditions to be truthy
56
+ * @returns Object with index and result of the first truthy condition
57
+ */
58
+ waitForAny<T>(conditions: ConditionFn<T>[], options?: WaitOptions): Promise<{
59
+ index: number;
60
+ result: T;
61
+ }>;
62
+ /**
63
+ * Wait for all conditions to be truthy
64
+ */
65
+ waitForAll<T>(conditions: ConditionFn<T>[], options?: WaitOptions): Promise<T[]>;
66
+ /**
67
+ * Retry a function until it succeeds or retries are exhausted
68
+ */
69
+ retry<T>(fn: () => Promise<T>, options?: Partial<RetryOptions>): Promise<T>;
70
+ /**
71
+ * Retry with a condition check
72
+ */
73
+ retryUntil<T>(fn: () => Promise<T>, predicate: PredicateFn<T>, options?: Partial<RetryOptions>): Promise<T>;
74
+ /**
75
+ * Execute with timeout
76
+ */
77
+ withTimeout<T>(fn: () => Promise<T>, timeout: number, message?: string): Promise<T>;
78
+ /**
79
+ * Poll a function at regular intervals
80
+ */
81
+ poll<T>(fn: ConditionFn<T>, interval: number, timeout: number): Promise<T>;
82
+ /**
83
+ * Wait for a value to stabilize (not change for a period)
84
+ */
85
+ waitForStable<T>(getValue: ConditionFn<T>, stableTime?: number, options?: WaitOptions): Promise<T>;
86
+ /**
87
+ * Execute functions in sequence with delay between each
88
+ */
89
+ sequence<T>(fns: (() => Promise<T>)[], delayBetween?: number): Promise<T[]>;
90
+ }
91
+ export declare const waitUtils: WaitUtils;
92
+ export declare const sleep: (ms: number) => Promise<void>;
93
+ export declare const waitFor: <T>(condition: ConditionFn<T>, options?: WaitOptions) => Promise<T>;
94
+ export declare const retry: <T>(fn: () => Promise<T>, options?: Partial<RetryOptions>) => Promise<T>;
95
+ //# sourceMappingURL=wait.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.utils.d.ts","sourceRoot":"","sources":["../../src/utils/wait.utils.ts"],"names":[],"mappings":"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"}