@vpmedia/simplify 1.70.0 โ†’ 1.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,59 @@
1
+ ## [1.72.0] - 2026-02-28
2
+
3
+ ### ๐Ÿ› Bug Fixes
4
+
5
+ - Fix runtime error with nodejs usage due to missing globalThis.location
6
+
7
+ ### ๐Ÿ’ผ Other
8
+
9
+ - *(deps)* Bump dependency versions
10
+ - *(deps)* Bump dependency versions
11
+ - *(deps)* Bump dependency versions
12
+ - *(deps)* Bump dependency versions
13
+ - *(deps)* Bump dependency versions
14
+ - *(deps)* Bump dependency versions
15
+ - *(deps)* Bump dependency versions
16
+ - *(deps)* Bump dependency versions
17
+ - *(deps)* Bump dependency versions
18
+ - *(deps)* Bump dependency versions
19
+ - *(deps)* Bump dependency versions
20
+ - *(deps)* Bump dependency versions
21
+ - *(deps)* Bump dependency versions
22
+ - *(deps)* Bump dependency versions
23
+ - *(deps)* Bump dependency versions
24
+ - *(deps)* Bump dependency versions
25
+ - *(deps)* Bump dependency versions
26
+ - *(deps)* Update cli scripts
27
+ - *(deps)* Bump dependency versions
28
+ - *(deps)* Bump dependency versions
29
+ - *(deps)* Bump dependency versions
30
+ - *(deps)* Bump dependency versions
31
+ - Improve npmignore
32
+ - *(deps)* Bump dependency versions
33
+
34
+ ### โš™๏ธ Miscellaneous Tasks
35
+
36
+ - Release
37
+ - Use oxlint only
38
+ - Use oxlint only
39
+ - Only audit production package
40
+ - *(release)* V1.72.0
41
+ ## [1.71.0] - 2026-02-05
42
+
43
+ ### ๐Ÿšœ Refactor
44
+
45
+ - Improve uuidv4 generator
46
+
47
+ ### ๐Ÿงช Testing
48
+
49
+ - Adjusted uuid test
50
+ - Improve uuid tests
51
+
52
+ ### โš™๏ธ Miscellaneous Tasks
53
+
54
+ - Release
55
+ - Regenerate types and source maps
56
+ - *(release)* V1.71.0
1
57
  ## [1.70.0] - 2026-02-04
2
58
 
3
59
  ### ๐Ÿš€ Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vpmedia/simplify",
3
- "version": "1.70.0",
3
+ "version": "1.72.0",
4
4
  "description": "@vpmedia/simplify",
5
5
  "author": "Andras Csizmadia <andras@vpmedia.hu> (www.vpmedia.hu)",
6
6
  "license": "MIT",
@@ -19,33 +19,27 @@
19
19
  "types": "./types/index.d.ts",
20
20
  "type": "module",
21
21
  "optionalDependencies": {
22
- "@sentry/browser": "^10.38.0"
22
+ "@sentry/browser": "^10.40.0"
23
23
  },
24
24
  "devDependencies": {
25
- "@commitlint/cli": "^20.4.1",
26
- "@commitlint/config-conventional": "^20.4.1",
27
- "@eslint/js": "^9.39.2",
28
- "@types/node": "^25.2.0",
25
+ "@commitlint/cli": "^20.4.2",
26
+ "@commitlint/config-conventional": "^20.4.2",
27
+ "@types/node": "^25.3.2",
29
28
  "@vitest/coverage-v8": "^4.0.18",
30
- "eslint": "^9.39.2",
31
- "eslint-plugin-jsdoc": "^62.5.1",
32
- "eslint-plugin-oxlint": "^1.43.0",
33
- "eslint-plugin-unicorn": "^62.0.0",
34
29
  "globals": "^17.3.0",
35
- "jsdom": "^28.0.0",
36
- "msw": "^2.12.8",
37
- "oxlint": "^1.43.0",
38
- "oxlint-tsgolint": "^0.11.4",
30
+ "jsdom": "^28.1.0",
31
+ "msw": "^2.12.10",
32
+ "oxlint": "^1.50.0",
33
+ "oxlint-tsgolint": "^0.15.0",
39
34
  "prettier": "^3.8.1",
40
35
  "typescript": "^5.9.3",
41
- "typescript-eslint": "^8.54.0",
42
36
  "vitest": "^4.0.18"
43
37
  },
44
38
  "scripts": {
45
39
  "build": "rm -rf types && tsc -p ./tsconfig.build.json",
46
40
  "check": "pnpm build && pnpm lint && pnpm test && pnpm typecheck",
47
41
  "format": "prettier --write \"./**/*.{js,jsx,mjs,cjs,ts,tsx,json,css}\"",
48
- "lint": "oxlint src && eslint",
42
+ "lint": "oxlint src",
49
43
  "test": "vitest --coverage",
50
44
  "typecheck": "tsc"
51
45
  }
@@ -1,5 +1,3 @@
1
- /* eslint-disable dot-notation */
2
-
3
1
  import { LOG_LEVEL_NAMES } from './const.js';
4
2
 
5
3
  /**
@@ -1,6 +1,3 @@
1
- /* oxlint-disable prefer-await-to-callbacks */
2
- /* eslint-disable unicorn/prefer-event-target */
3
-
4
1
  /**
5
2
  * Page lifecycle helper.
6
3
  * @see https://developer.chrome.com/docs/web-platform/page-lifecycle-api
@@ -9,7 +9,6 @@
9
9
  * Internal listener wrapper that stores metadata
10
10
  * about a registered event listener.
11
11
  */
12
- // oxlint-disable-next-line no-extraneous-class
13
12
  class Listener {
14
13
  /**
15
14
  * @param {EventListener} fn - The listener callback function.
@@ -85,7 +84,6 @@ export class EventEmitter {
85
84
  }
86
85
 
87
86
  // Clone to prevent mutation during iteration
88
- // eslint-disable-next-line unicorn/no-useless-spread
89
87
  for (const listener of [...listeners]) {
90
88
  listener.fn.apply(listener.context, args);
91
89
  if (listener.once) {
package/src/util/fetch.js CHANGED
@@ -1,5 +1,3 @@
1
- /* oxlint-disable no-await-in-loop */
2
-
3
1
  import {
4
2
  HTTP_401_UNAUTHORIZED,
5
3
  HTTP_403_FORBIDDEN,
package/src/util/query.js CHANGED
@@ -1,4 +1,4 @@
1
- const urlSearchParams = new URLSearchParams(globalThis.location.search);
1
+ const urlSearchParams = new URLSearchParams(globalThis.location?.search);
2
2
 
3
3
  /**
4
4
  * Sanitizes URL parameters allowing only alpha-numeric characters and dash.
package/src/util/uuid.js CHANGED
@@ -1,19 +1,35 @@
1
- /* eslint-disable no-bitwise, unicorn/number-literal-case */
2
-
3
- export const hex = (s, b) => s + (b >>> 4).toString(16) + (b & 0b1111).toString(16);
1
+ /**
2
+ * Convert a byte (0โ€“255) to a 2โ€‘character hex string.
3
+ * @param {number} byte - Byte value.
4
+ * @returns {string} Hex value.
5
+ */
6
+ export const byteToHex = (byte) => (byte >>> 4).toString(16) + (byte & 0b1111).toString(16);
4
7
 
8
+ /**
9
+ * UUIDv4 fallback generator (RFC 4122 compliant).
10
+ * @returns {string} UUIDv4 string.
11
+ */
5
12
  export const randomUUIDFallback = () => {
6
- const r = crypto.getRandomValues
13
+ const bytes = crypto.getRandomValues
7
14
  ? crypto.getRandomValues(new Uint8Array(16))
8
15
  : Array.from({ length: 16 }, () => Math.floor(Math.random() * 256));
9
- r[6] = (r[6] & 0x0f) | 0x40;
10
- r[8] = (r[8] & 0x3f) | 0x80;
11
- return [...r].reduce((uuid, b, i) => uuid + hex(i === 4 || i === 6 || i === 8 || i === 10 ? '-' : '', b), '');
12
- };
13
16
 
14
- if (!crypto.randomUUID) {
15
- // @ts-expect-error
16
- crypto.randomUUID = randomUUIDFallback;
17
- }
17
+ // RFC 4122 version & variant bits
18
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
19
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
20
+
21
+ let uuid = '';
22
+ for (const [index, byte] of bytes.entries()) {
23
+ if (index === 4 || index === 6 || index === 8 || index === 10) {
24
+ uuid += '-';
25
+ }
26
+ uuid += byteToHex(byte);
27
+ }
28
+ return uuid;
29
+ };
18
30
 
19
- export const uuidv4 = () => crypto.randomUUID();
31
+ /**
32
+ * Crypto UUIDv4 wrapper with fallback.
33
+ * @returns {string} UUIDv4 string.
34
+ */
35
+ export const uuidv4 = () => (typeof crypto.randomUUID === 'function' ? crypto.randomUUID() : randomUUIDFallback());
@@ -1,5 +1,3 @@
1
- /* eslint-disable jsdoc/reject-any-type */
2
-
3
1
  import { isEqual, isGreater, isGreaterOrEqual, isInRange, isLess, isLessOrEqual } from './number.js';
4
2
 
5
3
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/logging/util.js"],"names":[],"mappings":"AAYO,yCANI,OAAO,aAAa,EAAE,MAAM,aAC5B,MAAM,SACN,MAAM,WACN,MAAM,GACJ,MAAM,CAE8F;AAO1G,uCAHI,MAAM,GACJ,MAAM,CAE6C;AAMzD,qCAFM,MAAM,CAmBlB"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/logging/util.js"],"names":[],"mappings":"AAUO,yCANI,OAAO,aAAa,EAAE,MAAM,aAC5B,MAAM,SACN,MAAM,WACN,MAAM,GACJ,MAAM,CAE8F;AAO1G,uCAHI,MAAM,GACJ,MAAM,CAE6C;AAMzD,qCAFM,MAAM,CAmBlB"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/pagelifecycle/util.js"],"names":[],"mappings":"AAmGO,0CAyBN;AAMM,yCAFM,MAAM,GAAG,IAAI,GAAG,SAAS,CAE8B;AAM7D,oCAFM,OAAO,cAAc,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,CAEV;AAMnD,gDAFM,YAAY,CAOxB;AAMM,8CAFM,OAAO,CAEyC;AAOtD,gDAHI,OAAO,cAAc,EAAE,aAAa,GAAG,OAAO,cAAc,EAAE,kBAAkB,YAChF,MAAM,IAAI,QAMpB;6BA3J4B,0BAA0B"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/pagelifecycle/util.js"],"names":[],"mappings":"AAgGO,0CAyBN;AAMM,yCAFM,MAAM,GAAG,IAAI,GAAG,SAAS,CAE8B;AAM7D,oCAFM,OAAO,cAAc,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,CAEV;AAMnD,gDAFM,YAAY,CAOxB;AAMM,8CAFM,OAAO,CAEyC;AAOtD,gDAHI,OAAO,cAAc,EAAE,aAAa,GAAG,OAAO,cAAc,EAAE,kBAAkB,YAChF,MAAM,IAAI,QAMpB;6BA3J4B,0BAA0B"}
@@ -1 +1 @@
1
- {"version":3,"file":"event_emitter.d.ts","sourceRoot":"","sources":["../../src/util/event_emitter.js"],"names":[],"mappings":"AA8BA;;;GAGG;AACH;IAWE;;;OAGG;IACH,cAFa,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAI/B;IAED;;;;OAIG;IACH,iBAHW,MAAM,GAAG,MAAM,GACb,aAAa,EAAE,CAK3B;IAED;;;;OAIG;IACH,qBAHW,MAAM,GAAG,MAAM,GACb,MAAM,CAKlB;IAED;;;;;;OAMG;IACH,YAJW,MAAM,GAAG,MAAM,WACZ,GAAG,EAAA,GACJ,OAAO,CAkBnB;IA2BD;;;;;;OAMG;IACH,UALW,MAAM,GAAG,MAAM,MACf,aAAa,YACb,GAAG,GACD,YAAY,CAIxB;IAED;;;;;;;OAOG;IACH,YALW,MAAM,GAAG,MAAM,MACf,aAAa,YACb,GAAG,GACD,YAAY,CAIxB;IAED;;;;;;OAMG;IACH,WALW,MAAM,GAAG,MAAM,OACf,aAAa,YACb,GAAG,GACD,YAAY,CA6BxB;IAED;;;;;OAKG;IACH,2BAHW,MAAM,GAAG,MAAM,GACb,YAAY,CAUxB;;CACF;;;;sCAlMa,GAAG,EAAA,KACJ,IAAI"}
1
+ {"version":3,"file":"event_emitter.d.ts","sourceRoot":"","sources":["../../src/util/event_emitter.js"],"names":[],"mappings":"AA6BA;;;GAGG;AACH;IAWE;;;OAGG;IACH,cAFa,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAI/B;IAED;;;;OAIG;IACH,iBAHW,MAAM,GAAG,MAAM,GACb,aAAa,EAAE,CAK3B;IAED;;;;OAIG;IACH,qBAHW,MAAM,GAAG,MAAM,GACb,MAAM,CAKlB;IAED;;;;;;OAMG;IACH,YAJW,MAAM,GAAG,MAAM,WACZ,GAAG,EAAA,GACJ,OAAO,CAiBnB;IA2BD;;;;;;OAMG;IACH,UALW,MAAM,GAAG,MAAM,MACf,aAAa,YACb,GAAG,GACD,YAAY,CAIxB;IAED;;;;;;;OAOG;IACH,YALW,MAAM,GAAG,MAAM,MACf,aAAa,YACb,GAAG,GACD,YAAY,CAIxB;IAED;;;;;;OAMG;IACH,WALW,MAAM,GAAG,MAAM,OACf,aAAa,YACb,GAAG,GACD,YAAY,CA6BxB;IAED;;;;;OAKG;IACH,2BAHW,MAAM,GAAG,MAAM,GACb,YAAY,CAUxB;;CACF;;;;sCAhMa,GAAG,EAAA,KACJ,IAAI"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/util/fetch.js"],"names":[],"mappings":"AAcA,yBAA0B,CAAC,CAAC;AAE5B;IACE;;;;;;OAMG;IACH,qBALW,MAAM,YACN,MAAM,GAAG,GAAG,GAAG,OAAO,gBACtB,WAAW,YACX,QAAQ,EASlB;IAJC,iCAAwB;IACxB,0BAAgC;IAChC,mBAAwB;IACxB,cAAqC;CAExC;AASM,qCALI,MAAM,GAAG,GAAG,GAAG,OAAO,gBACtB,WAAW,iBACX;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAC,GAC9E,OAAO,CAAC,QAAQ,CAAC,CAmD7B"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/util/fetch.js"],"names":[],"mappings":"AAYA,yBAA0B,CAAC,CAAC;AAE5B;IACE;;;;;;OAMG;IACH,qBALW,MAAM,YACN,MAAM,GAAG,GAAG,GAAG,OAAO,gBACtB,WAAW,YACX,QAAQ,EASlB;IAJC,iCAAwB;IACxB,0BAAgC;IAChC,mBAAwB;IACxB,cAAqC;CAExC;AASM,qCALI,MAAM,GAAG,GAAG,GAAG,OAAO,gBACtB,WAAW,iBACX;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAC,GAC9E,OAAO,CAAC,QAAQ,CAAC,CAmD7B"}
@@ -1,4 +1,4 @@
1
- export function hex(s: any, b: any): string;
1
+ export function byteToHex(byte: number): string;
2
2
  export function randomUUIDFallback(): string;
3
- export function uuidv4(): `${string}-${string}-${string}-${string}-${string}`;
3
+ export function uuidv4(): string;
4
4
  //# sourceMappingURL=uuid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/util/uuid.js"],"names":[],"mappings":"AAEO,4CAA4E;AAE5E,6CAON;AAOM,8EAAwC"}
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/util/uuid.js"],"names":[],"mappings":"AAKO,gCAHI,MAAM,GACJ,MAAM,CAEwE;AAMpF,sCAFM,MAAM,CAmBlB;AAMM,0BAFM,MAAM,CAE+F"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/util/validate.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/util/validate.js"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { HTTP_100_CONTINUE, HTTP_STATUS_MAP } from './http_status.js';
2
-
3
- describe('http_status', () => {
4
- test('HTTP status name from code', () => {
5
- expect(HTTP_STATUS_MAP[HTTP_100_CONTINUE]).toBe('HTTP_100_CONTINUE');
6
- });
7
- });
@@ -1,73 +0,0 @@
1
- import { AbstractLogHandler } from './AbstractLogHandler.js';
2
- import { LOG_LEVEL_DEBUG, LOG_LEVEL_ERROR, LOG_LEVEL_FATAL, LOG_LEVEL_INFO, LOG_LEVEL_WARNING } from './const.js';
3
- import { Logger } from './Logger.js';
4
-
5
- class TestLogHandler extends AbstractLogHandler {
6
- /**
7
- * Test log handler.
8
- */
9
- constructor() {
10
- super(LOG_LEVEL_DEBUG);
11
- this.emitLogLogger = null;
12
- this.emitLogTimestamp = null;
13
- this.emitLogLevel = null;
14
- this.emitLogMessage = null;
15
- this.emitLogExtra = null;
16
- this.emitLogError = null;
17
- }
18
-
19
- /**
20
- * Emit log record.
21
- * @param {import('./Logger.js').Logger} logger - Logger instance.
22
- * @param {number} timestamp - Log timestamp.
23
- * @param {number} level - Log level.
24
- * @param {string} message - Log message.
25
- * @param {object} extra - Log extra data.
26
- * @param {Error} error - Log error.
27
- */
28
- emit(logger, timestamp, level, message, extra, error) {
29
- this.emitLogLogger = logger;
30
- this.emitLogTimestamp = timestamp;
31
- this.emitLogLevel = level;
32
- this.emitLogMessage = message;
33
- this.emitLogExtra = extra;
34
- this.emitLogError = error;
35
- }
36
- }
37
-
38
- test('Tests Logger default level', () => {
39
- const logger = new Logger('test');
40
- expect(logger.level).toBe(LOG_LEVEL_DEBUG);
41
- });
42
-
43
- test('Tests Logger custom handler', () => {
44
- const logger = new Logger('test');
45
- const testLogHandler = new TestLogHandler();
46
- Logger.addHandler(testLogHandler);
47
- // debug
48
- logger.debug('debug');
49
- expect(testLogHandler.emitLogLevel).toBe(LOG_LEVEL_DEBUG);
50
- expect(testLogHandler.emitLogMessage).toBe('debug');
51
- // info
52
- logger.info('info');
53
- expect(testLogHandler.emitLogLevel).toBe(LOG_LEVEL_INFO);
54
- expect(testLogHandler.emitLogMessage).toBe('info');
55
- // warning
56
- logger.warn('warning');
57
- expect(testLogHandler.emitLogLevel).toBe(LOG_LEVEL_WARNING);
58
- expect(testLogHandler.emitLogMessage).toBe('warning');
59
- logger.warning('warning');
60
- expect(testLogHandler.emitLogLevel).toBe(LOG_LEVEL_WARNING);
61
- expect(testLogHandler.emitLogMessage).toBe('warning');
62
- // error
63
- logger.error('error');
64
- expect(testLogHandler.emitLogLevel).toBe(LOG_LEVEL_ERROR);
65
- expect(testLogHandler.emitLogMessage).toBe('error');
66
- // exception
67
- logger.exception('test', new Error('test_error'), { context: 'ctx' });
68
- expect(testLogHandler.emitLogLevel).toBe(LOG_LEVEL_FATAL);
69
- expect(testLogHandler.emitLogMessage).toBe('test');
70
- expect(testLogHandler.emitLogError.message).toBe('test_error');
71
- expect(testLogHandler.emitLogLogger).toBe(logger);
72
- expect(testLogHandler.emitLogExtra.context).toBe('ctx');
73
- });
@@ -1,33 +0,0 @@
1
- import {
2
- LOG_LEVEL_DEBUG,
3
- LOG_LEVEL_ERROR,
4
- LOG_LEVEL_FATAL,
5
- LOG_LEVEL_INFO,
6
- LOG_LEVEL_NAME_DEBUG,
7
- LOG_LEVEL_NAME_ERROR,
8
- LOG_LEVEL_NAME_FATAL,
9
- LOG_LEVEL_NAME_INFO,
10
- LOG_LEVEL_NAME_SILENT,
11
- LOG_LEVEL_NAME_WARNING,
12
- LOG_LEVEL_SILENT,
13
- LOG_LEVEL_WARNING,
14
- } from './const.js';
15
- import { Logger } from './Logger.js';
16
- import { formatLogMessage, getLogLevelName } from './util.js';
17
-
18
- test('formatLogMessage()', () => {
19
- expect(
20
- formatLogMessage(new Logger('loggerName'), Date.now(), LOG_LEVEL_INFO, 'logMessage').endsWith(
21
- '[loggerName] logMessage'
22
- )
23
- ).toBe(true);
24
- });
25
-
26
- test('getLogLevelName()', () => {
27
- expect(getLogLevelName(LOG_LEVEL_DEBUG)).toBe(LOG_LEVEL_NAME_DEBUG);
28
- expect(getLogLevelName(LOG_LEVEL_INFO)).toBe(LOG_LEVEL_NAME_INFO);
29
- expect(getLogLevelName(LOG_LEVEL_WARNING)).toBe(LOG_LEVEL_NAME_WARNING);
30
- expect(getLogLevelName(LOG_LEVEL_ERROR)).toBe(LOG_LEVEL_NAME_ERROR);
31
- expect(getLogLevelName(LOG_LEVEL_FATAL)).toBe(LOG_LEVEL_NAME_FATAL);
32
- expect(getLogLevelName(LOG_LEVEL_SILENT)).toBe(LOG_LEVEL_NAME_SILENT);
33
- });
@@ -1,102 +0,0 @@
1
- import { beforeAll, describe, expect, it } from 'vitest';
2
- import {
3
- DOCUMENT_STATE_CHANGE_EVENT,
4
- DOCUMENT_STATES,
5
- PAGE_LIFECYCLE_STATE_CHANGE_EVENT,
6
- PAGE_LIFECYCLE_STATE_HIDDEN,
7
- PAGE_LIFECYCLE_STATES,
8
- } from './const.js';
9
- import {
10
- addPageLifecycleCallback,
11
- getDocumentState,
12
- getPageLifecycleEventEmitter,
13
- getPageLifecycleState,
14
- initPageLifecycle,
15
- isPageLifecycleInitialized,
16
- } from './util.js';
17
- import { delayPromise } from '../util/async.js';
18
-
19
- describe('Page Lifecycle', () => {
20
- beforeAll(() => {
21
- initPageLifecycle();
22
- });
23
-
24
- it('should initialize page lifecycle', () => {
25
- expect(isPageLifecycleInitialized()).toBe(true);
26
- });
27
-
28
- it('should return current page lifecycle state', () => {
29
- const state = getPageLifecycleState();
30
- expect(state).toBeOneOf(PAGE_LIFECYCLE_STATES);
31
- });
32
-
33
- it('should return current document state', () => {
34
- const state = getDocumentState();
35
- expect(state).toBeOneOf(DOCUMENT_STATES);
36
- });
37
-
38
- it('should return event emitter instance', () => {
39
- const emitter = getPageLifecycleEventEmitter();
40
- expect(emitter).toBeDefined();
41
- });
42
-
43
- it('should handle page lifecycle state changes', () => {
44
- const emitter = getPageLifecycleEventEmitter();
45
- let stateChanged = false;
46
-
47
- emitter.on(PAGE_LIFECYCLE_STATE_CHANGE_EVENT, (data) => {
48
- stateChanged = true;
49
- expect(data).toHaveProperty('previousState');
50
- expect(data).toHaveProperty('nextState');
51
- });
52
-
53
- // Trigger visibility change
54
- const originalVisibilityState = document.visibilityState;
55
- Object.defineProperty(document, 'visibilityState', {
56
- value: originalVisibilityState === 'visible' ? 'hidden' : 'visible',
57
- writable: true,
58
- configurable: true,
59
- });
60
-
61
- document.dispatchEvent(new Event('visibilitychange'));
62
-
63
- // Restore original state
64
- Object.defineProperty(document, 'visibilityState', {
65
- value: originalVisibilityState,
66
- writable: true,
67
- configurable: true,
68
- });
69
-
70
- expect(stateChanged).toBe(true);
71
- });
72
-
73
- it('should handle document state changes', () => {
74
- const emitter = getPageLifecycleEventEmitter();
75
- let stateChanged = false;
76
-
77
- emitter.on(DOCUMENT_STATE_CHANGE_EVENT, (data) => {
78
- stateChanged = true;
79
- expect(data).toHaveProperty('previousState');
80
- expect(data).toHaveProperty('nextState');
81
- });
82
-
83
- // Trigger ready state change
84
- const originalReadyState = document.readyState;
85
- Object.defineProperty(document, 'readyState', {
86
- value: originalReadyState === 'complete' ? 'interactive' : 'complete',
87
- writable: true,
88
- configurable: true,
89
- });
90
-
91
- document.dispatchEvent(new Event('readystatechange'));
92
-
93
- // Restore original state
94
- Object.defineProperty(document, 'readyState', {
95
- value: originalReadyState,
96
- writable: true,
97
- configurable: true,
98
- });
99
-
100
- expect(stateChanged).toBe(true);
101
- });
102
- });
@@ -1,70 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { typeChecker } from './TypeChecker.js';
3
- import { TypeCheckError } from './TypeCheckError.js';
4
-
5
- const stringValidator = (value) => typeof value === 'string';
6
-
7
- describe('TypeChecker', () => {
8
- it('should check value type correctly', () => {
9
- const result = typeChecker.check('test', stringValidator);
10
- expect(result).toBe('test');
11
- });
12
-
13
- it('should throw TypeCheckError for invalid type', () => {
14
- expect(() => typeChecker.check(123, stringValidator)).toThrow(TypeCheckError);
15
- });
16
-
17
- it('should swallow errors when enabled', () => {
18
- typeChecker.setSwallowErrors(true);
19
- const result = typeChecker.check(123, stringValidator);
20
- expect(result).toBe(123);
21
- typeChecker.setSwallowErrors(false);
22
- });
23
-
24
- it('should check array type correctly', () => {
25
- const result = typeChecker.checkArray(['a', 'b', 'c'], stringValidator);
26
- expect(result).toEqual(['a', 'b', 'c']);
27
- });
28
-
29
- it('should throw TypeCheckError for invalid array type', () => {
30
- expect(() => typeChecker.checkArray([1, 2, 3], stringValidator)).toThrow(TypeCheckError);
31
- });
32
-
33
- it('should swallow array errors when enabled', () => {
34
- typeChecker.setSwallowErrors(true);
35
- const result = typeChecker.checkArray([1, 2, 3], stringValidator);
36
- expect(result).toEqual([1, 2, 3]);
37
- typeChecker.setSwallowErrors(false);
38
- });
39
-
40
- it('should check enum value correctly', () => {
41
- const choices = ['option1', 'option2', 'option3'];
42
- const result = typeChecker.checkEnum('option2', choices);
43
- expect(result).toBe('option2');
44
- });
45
-
46
- it('should throw TypeCheckError for invalid enum value', () => {
47
- const choices = ['option1', 'option2', 'option3'];
48
- expect(() => typeChecker.checkEnum('invalid', choices)).toThrow(TypeCheckError);
49
- });
50
-
51
- it('should swallow enum errors when enabled', () => {
52
- typeChecker.setSwallowErrors(true);
53
- const choices = ['option1', 'option2', 'option3'];
54
- const result = typeChecker.checkEnum('invalid', choices);
55
- expect(result).toBe('invalid');
56
- typeChecker.setSwallowErrors(false);
57
- });
58
-
59
- it('should handle number enum values', () => {
60
- const choices = [1, 2, 3];
61
- const result = typeChecker.checkEnum(2, choices);
62
- expect(result).toBe(2);
63
- });
64
-
65
- it('should handle mixed string and number enum values', () => {
66
- const choices = ['option1', 2, 'option3'];
67
- const result = typeChecker.checkEnum(2, choices);
68
- expect(result).toBe(2);
69
- });
70
- });
@@ -1,35 +0,0 @@
1
- import { isNumber, isPositiveInteger } from '../util/validate.js';
2
- import { TypeCheckError } from './TypeCheckError.js';
3
- import { typeCheck, typeCheckArray, typeCheckEnum } from './util.js';
4
-
5
- describe('typecheck', () => {
6
- test('typeCheck', () => {
7
- expect(() => typeCheck(0.1, isNumber)).not.toThrowError(TypeCheckError);
8
- expect(() => typeCheck(-0.1, isPositiveInteger)).toThrowError(TypeCheckError);
9
- expect(() => typeCheck('string', isNumber)).toThrowError(TypeCheckError);
10
- });
11
-
12
- test('typeCheckArray', () => {
13
- expect(() => typeCheckArray([0.1], isNumber)).not.toThrowError(TypeCheckError);
14
- expect(() => typeCheckArray(['string'], isNumber)).toThrowError(TypeCheckError);
15
- // @ts-expect-error
16
- expect(() => typeCheckArray(-0.1, isPositiveInteger)).toThrowError(TypeCheckError);
17
- // @ts-expect-error
18
- expect(() => typeCheckArray('string', isNumber)).toThrowError(TypeCheckError);
19
- });
20
-
21
- test('typeCheckEnum', () => {
22
- expect(() => typeCheckEnum('AA', ['AA'])).not.toThrowError(TypeCheckError);
23
- expect(() => typeCheckEnum('AA', ['BB'])).toThrowError(TypeCheckError);
24
- expect(() => typeCheckEnum(null, ['BB'])).toThrowError(TypeCheckError);
25
- // @ts-expect-error
26
- expect(() => typeCheckEnum(['AA'], null)).toThrowError(TypeCheckError);
27
- try {
28
- typeCheckEnum('AA', ['BB']);
29
- } catch (error) {
30
- if (error instanceof Error) {
31
- expect(error.message).toBe('Validation failed: isEnum - "AA" (string)');
32
- }
33
- }
34
- });
35
- });
@@ -1,31 +0,0 @@
1
- import { delayPromise, loadJSON } from './async.js';
2
-
3
- describe('delayPromise', () => {
4
- test('Returns a promise that resolves after specified delay', async () => {
5
- const start = Date.now();
6
- await delayPromise(10);
7
- const end = Date.now();
8
-
9
- // Should resolve within a reasonable time frame
10
- expect(end - start).toBeGreaterThanOrEqual(9);
11
- });
12
-
13
- test('delayPromise with zero delay', async () => {
14
- const start = Date.now();
15
- await delayPromise(0);
16
- const end = Date.now();
17
-
18
- // Should resolve immediately
19
- expect(end - start).toBeGreaterThanOrEqual(0);
20
- });
21
- });
22
-
23
- describe('loadJSON', () => {
24
- test('Load JSON data', async () => {
25
- const data = await loadJSON('/test.json');
26
- expect(data).toMatchObject({
27
- method: 'GET',
28
- success: true,
29
- });
30
- });
31
- });
@@ -1,34 +0,0 @@
1
- /* eslint-disable unicorn/no-useless-undefined */
2
-
3
- import { getErrorDetails, getTypedError } from './error.js';
4
-
5
- describe('error', () => {
6
- test('getErrorDetails', () => {
7
- const error = new Error('Test error', { cause: 'Test cause' });
8
- const errorDetails = getErrorDetails(error);
9
- expect(errorDetails.type).toBe('Error');
10
- expect(errorDetails.message).toBe('Test error');
11
- expect(errorDetails.cause).toBe('Test cause');
12
- expect(errorDetails.stack).toBe(undefined);
13
- });
14
-
15
- test('getErrorDetails with Error cause', () => {
16
- const error = new SyntaxError('Test error', { cause: new TypeError('Cause error') });
17
- const errorDetails = getErrorDetails(error);
18
- expect(errorDetails.type).toBe('SyntaxError');
19
- expect(errorDetails.message).toBe('Test error');
20
- expect(errorDetails.cause instanceof Error).toBe(true);
21
- if (errorDetails.cause instanceof Error) {
22
- expect(errorDetails.cause.message).toBe('Cause error');
23
- }
24
- });
25
-
26
- test('getTypedError', () => {
27
- expect(getTypedError(new Error('Error message')).message).toBe('Error message');
28
- expect(getTypedError('Error message').message).toBe('Error message');
29
- expect(getTypedError(1).message).toBe('1');
30
- expect(getTypedError(true).message).toBe('true');
31
- expect(getTypedError(null).message).toBe('null');
32
- expect(getTypedError(undefined).message).toBe('undefined');
33
- });
34
- });