@vpmedia/simplify 1.71.0 → 1.73.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 (43) hide show
  1. package/.vscode/extensions.json +6 -0
  2. package/.vscode/settings.json +27 -0
  3. package/CHANGELOG.md +55 -0
  4. package/package.json +12 -19
  5. package/src/index.js +1 -1
  6. package/src/logging/util.js +0 -2
  7. package/src/pagelifecycle/util.js +0 -3
  8. package/src/util/async.js +27 -0
  9. package/src/util/event_emitter.js +0 -2
  10. package/src/util/fetch.js +0 -2
  11. package/src/util/query.js +1 -1
  12. package/src/util/uuid.js +0 -2
  13. package/src/util/validate.js +0 -2
  14. package/types/index.d.ts +1 -1
  15. package/types/logging/util.d.ts.map +1 -1
  16. package/types/pagelifecycle/util.d.ts.map +1 -1
  17. package/types/util/async.d.ts +1 -0
  18. package/types/util/async.d.ts.map +1 -1
  19. package/types/util/event_emitter.d.ts.map +1 -1
  20. package/types/util/fetch.d.ts.map +1 -1
  21. package/types/util/uuid.d.ts.map +1 -1
  22. package/types/util/validate.d.ts.map +1 -1
  23. package/src/const/http_status.test.js +0 -7
  24. package/src/logging/Logger.test.js +0 -73
  25. package/src/logging/util.test.js +0 -33
  26. package/src/pagelifecycle/util.test.js +0 -102
  27. package/src/typecheck/TypeChecker.test.js +0 -70
  28. package/src/typecheck/util.test.js +0 -35
  29. package/src/util/async.test.js +0 -31
  30. package/src/util/error.test.js +0 -34
  31. package/src/util/event_emitter.test.js +0 -231
  32. package/src/util/fetch.test.js +0 -62
  33. package/src/util/number.test.js +0 -126
  34. package/src/util/object.test.js +0 -205
  35. package/src/util/query.test.js +0 -73
  36. package/src/util/state.test.js +0 -47
  37. package/src/util/string.test.js +0 -66
  38. package/src/util/uuid.test.js +0 -53
  39. package/src/util/validate.test.js +0 -311
  40. package/tests/mocks/handlers/fetch.js +0 -34
  41. package/tests/mocks/handlers.js +0 -3
  42. package/tsconfig.build.json +0 -24
  43. package/vitest.setup.js +0 -17
@@ -0,0 +1,6 @@
1
+ {
2
+ "recommendations": [
3
+ "oxc.oxc-vscode",
4
+ "vitest.explorer"
5
+ ]
6
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "files.watcherExclude": {
3
+ "**/.git/objects/**": true,
4
+ "**/.git/subtree-cache/**": true,
5
+ "**/build/**": true,
6
+ "**/node_modules/**": true
7
+ },
8
+ "editor.codeActionsOnSave": {
9
+ "source.removeUnusedImports": "explicit",
10
+ "source.organizeImports": "explicit"
11
+ },
12
+ "oxc.enable": true,
13
+ "[javascript]": {
14
+ "editor.defaultFormatter": "oxc.oxc-vscode"
15
+ },
16
+ "[javascriptreact]": {
17
+ "editor.defaultFormatter": "oxc.oxc-vscode"
18
+ },
19
+ "javascript.updateImportsOnFileMove.enabled": "always",
20
+ "[typescript]": {
21
+ "editor.defaultFormatter": "oxc.oxc-vscode",
22
+ },
23
+ "[typescriptreact]": {
24
+ "editor.defaultFormatter": "oxc.oxc-vscode"
25
+ },
26
+ "typescript.updateImportsOnFileMove.enabled": "always",
27
+ }
package/CHANGELOG.md CHANGED
@@ -1,3 +1,58 @@
1
+ ## [1.73.0] - 2026-03-01
2
+
3
+ ### 🚀 Features
4
+
5
+ - Added generic async retry helper
6
+
7
+ ### 💼 Other
8
+
9
+ - *(deps)* Bump dependency versions
10
+
11
+ ### ⚙️ Miscellaneous Tasks
12
+
13
+ - Release
14
+ - Migrate from prettier to oxfmt
15
+ - *(release)* V1.73.0
16
+ ## [1.72.0] - 2026-02-28
17
+
18
+ ### 🐛 Bug Fixes
19
+
20
+ - Fix runtime error with nodejs usage due to missing globalThis.location
21
+
22
+ ### 💼 Other
23
+
24
+ - *(deps)* Bump dependency versions
25
+ - *(deps)* Bump dependency versions
26
+ - *(deps)* Bump dependency versions
27
+ - *(deps)* Bump dependency versions
28
+ - *(deps)* Bump dependency versions
29
+ - *(deps)* Bump dependency versions
30
+ - *(deps)* Bump dependency versions
31
+ - *(deps)* Bump dependency versions
32
+ - *(deps)* Bump dependency versions
33
+ - *(deps)* Bump dependency versions
34
+ - *(deps)* Bump dependency versions
35
+ - *(deps)* Bump dependency versions
36
+ - *(deps)* Bump dependency versions
37
+ - *(deps)* Bump dependency versions
38
+ - *(deps)* Bump dependency versions
39
+ - *(deps)* Bump dependency versions
40
+ - *(deps)* Bump dependency versions
41
+ - *(deps)* Update cli scripts
42
+ - *(deps)* Bump dependency versions
43
+ - *(deps)* Bump dependency versions
44
+ - *(deps)* Bump dependency versions
45
+ - *(deps)* Bump dependency versions
46
+ - Improve npmignore
47
+ - *(deps)* Bump dependency versions
48
+
49
+ ### ⚙️ Miscellaneous Tasks
50
+
51
+ - Release
52
+ - Use oxlint only
53
+ - Use oxlint only
54
+ - Only audit production package
55
+ - *(release)* V1.72.0
1
56
  ## [1.71.0] - 2026-02-05
2
57
 
3
58
  ### 🚜 Refactor
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vpmedia/simplify",
3
- "version": "1.71.0",
3
+ "version": "1.73.0",
4
4
  "description": "@vpmedia/simplify",
5
5
  "author": "Andras Csizmadia <andras@vpmedia.hu> (www.vpmedia.hu)",
6
6
  "license": "MIT",
@@ -19,33 +19,26 @@
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.3",
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
- "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",
39
- "prettier": "^3.8.1",
29
+ "jsdom": "^28.1.0",
30
+ "msw": "^2.12.10",
31
+ "oxfmt": "^0.35.0",
32
+ "oxlint": "^1.50.0",
33
+ "oxlint-tsgolint": "^0.15.0",
40
34
  "typescript": "^5.9.3",
41
- "typescript-eslint": "^8.54.0",
42
35
  "vitest": "^4.0.18"
43
36
  },
44
37
  "scripts": {
45
38
  "build": "rm -rf types && tsc -p ./tsconfig.build.json",
46
39
  "check": "pnpm build && pnpm lint && pnpm test && pnpm typecheck",
47
- "format": "prettier --write \"./**/*.{js,jsx,mjs,cjs,ts,tsx,json,css}\"",
48
- "lint": "oxlint src && eslint",
40
+ "format": "oxfmt --write \"./**/*.{js,jsx,mjs,cjs,ts,tsx,json,css}\"",
41
+ "lint": "oxlint src",
49
42
  "test": "vitest --coverage",
50
43
  "typecheck": "tsc"
51
44
  }
package/src/index.js CHANGED
@@ -19,7 +19,7 @@ export {
19
19
  export { typeChecker } from './typecheck/TypeChecker.js';
20
20
  export { TypeCheckError } from './typecheck/TypeCheckError.js';
21
21
  export { typeCheck, typeCheckArray, typeCheckEnum } from './typecheck/util.js';
22
- export { delayPromise, loadJSON } from './util/async.js';
22
+ export { delayPromise, loadJSON, retryAsync } from './util/async.js';
23
23
  export { getErrorDetails, getTypedError } from './util/error.js';
24
24
  export { EventEmitter } from './util/event_emitter.js';
25
25
  export { FetchError, fetchRetry, HTTP_0_ANY } from './util/fetch.js';
@@ -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
package/src/util/async.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { getTypedError } from './error.js';
2
+
1
3
  /**
2
4
  * Returns a promise with delayed resolve.
3
5
  * @param {number} delayMS - Promise resolve delay in milliseconds.
@@ -8,6 +10,31 @@ export const delayPromise = (delayMS) =>
8
10
  setTimeout(resolve, delayMS);
9
11
  });
10
12
 
13
+ /**
14
+ * Async method call retry helper.
15
+ * @param {Function} method - Async function to call.
16
+ * @param {number} numTries - Max retries.
17
+ * @param {number} delayMs - Delay between attempts in ms.
18
+ * @returns {Promise<any>} Async function result.
19
+ */
20
+ export const retryAsync = async (method, numTries = 1, delayMs = 100) => {
21
+ for (let attempt = 0; attempt <= numTries; attempt += 1) {
22
+ try {
23
+ // oxlint-disable-next-line no-await-in-loop
24
+ return await method();
25
+ } catch (error) {
26
+ if (attempt === numTries) {
27
+ throw getTypedError(error);
28
+ }
29
+ if (delayMs > 0) {
30
+ // oxlint-disable-next-line no-await-in-loop
31
+ await delayPromise(delayMs);
32
+ }
33
+ }
34
+ }
35
+ throw new Error('Unknown error');
36
+ };
37
+
11
38
  /**
12
39
  * Load JSON file using a fetch GET request.
13
40
  * @param {string} url - URL to load.
@@ -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,5 +1,3 @@
1
- /* eslint-disable no-bitwise, unicorn/number-literal-case */
2
-
3
1
  /**
4
2
  * Convert a byte (0–255) to a 2‑character hex string.
5
3
  * @param {number} byte - Byte value.
@@ -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
  /**
package/types/index.d.ts CHANGED
@@ -16,7 +16,7 @@ export { uuidv4 } from "./util/uuid.js";
16
16
  export { formatLogMessage, getLogLevelName } from "./logging/util.js";
17
17
  export { addPageLifecycleCallback, getDocumentState, getPageLifecycleEventEmitter, getPageLifecycleState, initPageLifecycle, isPageLifecycleInitialized } from "./pagelifecycle/util.js";
18
18
  export { typeCheck, typeCheckArray, typeCheckEnum } from "./typecheck/util.js";
19
- export { delayPromise, loadJSON } from "./util/async.js";
19
+ export { delayPromise, loadJSON, retryAsync } from "./util/async.js";
20
20
  export { getErrorDetails, getTypedError } from "./util/error.js";
21
21
  export { FetchError, fetchRetry, HTTP_0_ANY } from "./util/fetch.js";
22
22
  export { deg2rad, fixFloatPrecision, getRandomInt, isEqual, isGreater, isGreaterOrEqual, isInRange, isLess, isLessOrEqual, rad2deg } from "./util/number.js";
@@ -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,3 +1,4 @@
1
1
  export function delayPromise(delayMS: number): Promise<void>;
2
+ export function retryAsync(method: Function, numTries?: number, delayMs?: number): Promise<any>;
2
3
  export function loadJSON(url: string): Promise<unknown>;
3
4
  //# sourceMappingURL=async.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/util/async.js"],"names":[],"mappings":"AAKO,sCAHI,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAKtB;AAOG,8BAHI,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAQ5B"}
1
+ {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/util/async.js"],"names":[],"mappings":"AAOO,sCAHI,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAKtB;AASG,wDAJI,MAAM,YACN,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CAkBxB;AAOM,8BAHI,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAQ5B"}
@@ -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 +1 @@
1
- {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/util/uuid.js"],"names":[],"mappings":"AAOO,gCAHI,MAAM,GACJ,MAAM,CAEwE;AAMpF,sCAFM,MAAM,CAmBlB;AAMM,0BAFM,MAAM,CAE+F"}
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
- });