@xivdyetools/test-utils 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 (131) hide show
  1. package/LICENSE +37 -0
  2. package/README.md +144 -0
  3. package/dist/assertions/index.d.ts +7 -0
  4. package/dist/assertions/index.d.ts.map +1 -0
  5. package/dist/assertions/index.js +7 -0
  6. package/dist/assertions/index.js.map +1 -0
  7. package/dist/assertions/response.d.ts +84 -0
  8. package/dist/assertions/response.d.ts.map +1 -0
  9. package/dist/assertions/response.js +125 -0
  10. package/dist/assertions/response.js.map +1 -0
  11. package/dist/auth/context.d.ts +55 -0
  12. package/dist/auth/context.d.ts.map +1 -0
  13. package/dist/auth/context.js +95 -0
  14. package/dist/auth/context.js.map +1 -0
  15. package/dist/auth/headers.d.ts +64 -0
  16. package/dist/auth/headers.d.ts.map +1 -0
  17. package/dist/auth/headers.js +101 -0
  18. package/dist/auth/headers.js.map +1 -0
  19. package/dist/auth/index.d.ts +10 -0
  20. package/dist/auth/index.d.ts.map +1 -0
  21. package/dist/auth/index.js +10 -0
  22. package/dist/auth/index.js.map +1 -0
  23. package/dist/auth/jwt.d.ts +76 -0
  24. package/dist/auth/jwt.d.ts.map +1 -0
  25. package/dist/auth/jwt.js +77 -0
  26. package/dist/auth/jwt.js.map +1 -0
  27. package/dist/auth/signature.d.ts +64 -0
  28. package/dist/auth/signature.d.ts.map +1 -0
  29. package/dist/auth/signature.js +75 -0
  30. package/dist/auth/signature.js.map +1 -0
  31. package/dist/cloudflare/analytics.d.ts +55 -0
  32. package/dist/cloudflare/analytics.d.ts.map +1 -0
  33. package/dist/cloudflare/analytics.js +44 -0
  34. package/dist/cloudflare/analytics.js.map +1 -0
  35. package/dist/cloudflare/d1.d.ts +101 -0
  36. package/dist/cloudflare/d1.d.ts.map +1 -0
  37. package/dist/cloudflare/d1.js +148 -0
  38. package/dist/cloudflare/d1.js.map +1 -0
  39. package/dist/cloudflare/fetcher.d.ts +72 -0
  40. package/dist/cloudflare/fetcher.d.ts.map +1 -0
  41. package/dist/cloudflare/fetcher.js +136 -0
  42. package/dist/cloudflare/fetcher.js.map +1 -0
  43. package/dist/cloudflare/index.d.ts +12 -0
  44. package/dist/cloudflare/index.d.ts.map +1 -0
  45. package/dist/cloudflare/index.js +12 -0
  46. package/dist/cloudflare/index.js.map +1 -0
  47. package/dist/cloudflare/kv.d.ts +85 -0
  48. package/dist/cloudflare/kv.d.ts.map +1 -0
  49. package/dist/cloudflare/kv.js +138 -0
  50. package/dist/cloudflare/kv.js.map +1 -0
  51. package/dist/cloudflare/r2.d.ts +88 -0
  52. package/dist/cloudflare/r2.d.ts.map +1 -0
  53. package/dist/cloudflare/r2.js +127 -0
  54. package/dist/cloudflare/r2.js.map +1 -0
  55. package/dist/constants/index.d.ts +8 -0
  56. package/dist/constants/index.d.ts.map +1 -0
  57. package/dist/constants/index.js +8 -0
  58. package/dist/constants/index.js.map +1 -0
  59. package/dist/constants/pkce.d.ts +89 -0
  60. package/dist/constants/pkce.d.ts.map +1 -0
  61. package/dist/constants/pkce.js +107 -0
  62. package/dist/constants/pkce.js.map +1 -0
  63. package/dist/constants/secrets.d.ts +72 -0
  64. package/dist/constants/secrets.d.ts.map +1 -0
  65. package/dist/constants/secrets.js +73 -0
  66. package/dist/constants/secrets.js.map +1 -0
  67. package/dist/dom/canvas.d.ts +108 -0
  68. package/dist/dom/canvas.d.ts.map +1 -0
  69. package/dist/dom/canvas.js +125 -0
  70. package/dist/dom/canvas.js.map +1 -0
  71. package/dist/dom/fetch.d.ts +69 -0
  72. package/dist/dom/fetch.d.ts.map +1 -0
  73. package/dist/dom/fetch.js +107 -0
  74. package/dist/dom/fetch.js.map +1 -0
  75. package/dist/dom/index.d.ts +12 -0
  76. package/dist/dom/index.d.ts.map +1 -0
  77. package/dist/dom/index.js +12 -0
  78. package/dist/dom/index.js.map +1 -0
  79. package/dist/dom/localStorage.d.ts +80 -0
  80. package/dist/dom/localStorage.d.ts.map +1 -0
  81. package/dist/dom/localStorage.js +124 -0
  82. package/dist/dom/localStorage.js.map +1 -0
  83. package/dist/dom/matchMedia.d.ts +51 -0
  84. package/dist/dom/matchMedia.d.ts.map +1 -0
  85. package/dist/dom/matchMedia.js +120 -0
  86. package/dist/dom/matchMedia.js.map +1 -0
  87. package/dist/dom/resizeObserver.d.ts +68 -0
  88. package/dist/dom/resizeObserver.d.ts.map +1 -0
  89. package/dist/dom/resizeObserver.js +99 -0
  90. package/dist/dom/resizeObserver.js.map +1 -0
  91. package/dist/factories/category.d.ts +74 -0
  92. package/dist/factories/category.d.ts.map +1 -0
  93. package/dist/factories/category.js +99 -0
  94. package/dist/factories/category.js.map +1 -0
  95. package/dist/factories/dye.d.ts +76 -0
  96. package/dist/factories/dye.d.ts.map +1 -0
  97. package/dist/factories/dye.js +211 -0
  98. package/dist/factories/dye.js.map +1 -0
  99. package/dist/factories/index.d.ts +13 -0
  100. package/dist/factories/index.d.ts.map +1 -0
  101. package/dist/factories/index.js +14 -0
  102. package/dist/factories/index.js.map +1 -0
  103. package/dist/factories/preset.d.ts +105 -0
  104. package/dist/factories/preset.d.ts.map +1 -0
  105. package/dist/factories/preset.js +170 -0
  106. package/dist/factories/preset.js.map +1 -0
  107. package/dist/factories/user.d.ts +74 -0
  108. package/dist/factories/user.d.ts.map +1 -0
  109. package/dist/factories/user.js +115 -0
  110. package/dist/factories/user.js.map +1 -0
  111. package/dist/factories/vote.d.ts +55 -0
  112. package/dist/factories/vote.d.ts.map +1 -0
  113. package/dist/factories/vote.js +68 -0
  114. package/dist/factories/vote.js.map +1 -0
  115. package/dist/index.d.ts +17 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +24 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/utils/counters.d.ts +35 -0
  120. package/dist/utils/counters.d.ts.map +1 -0
  121. package/dist/utils/counters.js +53 -0
  122. package/dist/utils/counters.js.map +1 -0
  123. package/dist/utils/crypto.d.ts +42 -0
  124. package/dist/utils/crypto.d.ts.map +1 -0
  125. package/dist/utils/crypto.js +72 -0
  126. package/dist/utils/crypto.js.map +1 -0
  127. package/dist/utils/index.d.ts +6 -0
  128. package/dist/utils/index.d.ts.map +1 -0
  129. package/dist/utils/index.js +6 -0
  130. package/dist/utils/index.js.map +1 -0
  131. package/package.json +88 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Canvas mock utilities for testing
3
+ *
4
+ * Provides mock implementations of Canvas 2D context
5
+ * for testing chart and graphics code.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Setup canvas mocks before tests
10
+ * setupCanvasMocks();
11
+ *
12
+ * // Now canvas operations won't throw
13
+ * const canvas = document.createElement('canvas');
14
+ * const ctx = canvas.getContext('2d');
15
+ * ctx.fillRect(0, 0, 100, 100); // Works in jsdom
16
+ * ```
17
+ */
18
+ /**
19
+ * Mock Canvas 2D rendering context
20
+ */
21
+ export interface MockCanvasContext {
22
+ fillRect: () => void;
23
+ clearRect: () => void;
24
+ strokeRect: () => void;
25
+ fillText: () => void;
26
+ strokeText: () => void;
27
+ measureText: (text: string) => {
28
+ width: number;
29
+ };
30
+ beginPath: () => void;
31
+ closePath: () => void;
32
+ moveTo: () => void;
33
+ lineTo: () => void;
34
+ arc: () => void;
35
+ arcTo: () => void;
36
+ bezierCurveTo: () => void;
37
+ quadraticCurveTo: () => void;
38
+ rect: () => void;
39
+ fill: () => void;
40
+ stroke: () => void;
41
+ clip: () => void;
42
+ save: () => void;
43
+ restore: () => void;
44
+ scale: () => void;
45
+ rotate: () => void;
46
+ translate: () => void;
47
+ transform: () => void;
48
+ setTransform: () => void;
49
+ resetTransform: () => void;
50
+ drawImage: () => void;
51
+ createImageData: () => {
52
+ data: Uint8ClampedArray;
53
+ width: number;
54
+ height: number;
55
+ };
56
+ getImageData: () => {
57
+ data: Uint8ClampedArray;
58
+ width: number;
59
+ height: number;
60
+ };
61
+ putImageData: () => void;
62
+ createLinearGradient: () => {
63
+ addColorStop: () => void;
64
+ };
65
+ createRadialGradient: () => {
66
+ addColorStop: () => void;
67
+ };
68
+ createPattern: () => null;
69
+ isPointInPath: () => boolean;
70
+ isPointInStroke: () => boolean;
71
+ getLineDash: () => number[];
72
+ setLineDash: () => void;
73
+ canvas: {
74
+ width: number;
75
+ height: number;
76
+ };
77
+ fillStyle: string;
78
+ strokeStyle: string;
79
+ lineWidth: number;
80
+ lineCap: string;
81
+ lineJoin: string;
82
+ miterLimit: number;
83
+ lineDashOffset: number;
84
+ font: string;
85
+ textAlign: string;
86
+ textBaseline: string;
87
+ globalAlpha: number;
88
+ globalCompositeOperation: string;
89
+ shadowBlur: number;
90
+ shadowColor: string;
91
+ shadowOffsetX: number;
92
+ shadowOffsetY: number;
93
+ imageSmoothingEnabled: boolean;
94
+ }
95
+ /**
96
+ * Creates a mock Canvas 2D context
97
+ *
98
+ * @returns A mock context object
99
+ */
100
+ export declare function createMockCanvasContext(): MockCanvasContext;
101
+ /**
102
+ * Sets up canvas mocks on HTMLCanvasElement prototype
103
+ *
104
+ * Call this in your test setup (beforeAll/beforeEach) to enable
105
+ * canvas operations in jsdom environment.
106
+ */
107
+ export declare function setupCanvasMocks(): void;
108
+ //# sourceMappingURL=canvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../src/dom/canvas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Canvas mock utilities for testing
3
+ *
4
+ * Provides mock implementations of Canvas 2D context
5
+ * for testing chart and graphics code.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Setup canvas mocks before tests
10
+ * setupCanvasMocks();
11
+ *
12
+ * // Now canvas operations won't throw
13
+ * const canvas = document.createElement('canvas');
14
+ * const ctx = canvas.getContext('2d');
15
+ * ctx.fillRect(0, 0, 100, 100); // Works in jsdom
16
+ * ```
17
+ */
18
+ /**
19
+ * Creates a mock Canvas 2D context
20
+ *
21
+ * @returns A mock context object
22
+ */
23
+ export function createMockCanvasContext() {
24
+ return {
25
+ fillRect: () => { },
26
+ clearRect: () => { },
27
+ strokeRect: () => { },
28
+ fillText: () => { },
29
+ strokeText: () => { },
30
+ measureText: (text) => ({ width: text.length * 8 }),
31
+ beginPath: () => { },
32
+ closePath: () => { },
33
+ moveTo: () => { },
34
+ lineTo: () => { },
35
+ arc: () => { },
36
+ arcTo: () => { },
37
+ bezierCurveTo: () => { },
38
+ quadraticCurveTo: () => { },
39
+ rect: () => { },
40
+ fill: () => { },
41
+ stroke: () => { },
42
+ clip: () => { },
43
+ save: () => { },
44
+ restore: () => { },
45
+ scale: () => { },
46
+ rotate: () => { },
47
+ translate: () => { },
48
+ transform: () => { },
49
+ setTransform: () => { },
50
+ resetTransform: () => { },
51
+ drawImage: () => { },
52
+ createImageData: () => ({
53
+ data: new Uint8ClampedArray(400),
54
+ width: 10,
55
+ height: 10,
56
+ }),
57
+ getImageData: () => ({
58
+ data: new Uint8ClampedArray(400),
59
+ width: 10,
60
+ height: 10,
61
+ }),
62
+ putImageData: () => { },
63
+ createLinearGradient: () => ({ addColorStop: () => { } }),
64
+ createRadialGradient: () => ({ addColorStop: () => { } }),
65
+ createPattern: () => null,
66
+ isPointInPath: () => false,
67
+ isPointInStroke: () => false,
68
+ getLineDash: () => [],
69
+ setLineDash: () => { },
70
+ // Default property values
71
+ canvas: { width: 300, height: 150 },
72
+ fillStyle: '#000000',
73
+ strokeStyle: '#000000',
74
+ lineWidth: 1,
75
+ lineCap: 'butt',
76
+ lineJoin: 'miter',
77
+ miterLimit: 10,
78
+ lineDashOffset: 0,
79
+ font: '10px sans-serif',
80
+ textAlign: 'start',
81
+ textBaseline: 'alphabetic',
82
+ globalAlpha: 1,
83
+ globalCompositeOperation: 'source-over',
84
+ shadowBlur: 0,
85
+ shadowColor: 'rgba(0, 0, 0, 0)',
86
+ shadowOffsetX: 0,
87
+ shadowOffsetY: 0,
88
+ imageSmoothingEnabled: true,
89
+ };
90
+ }
91
+ /**
92
+ * Sets up canvas mocks on HTMLCanvasElement prototype
93
+ *
94
+ * Call this in your test setup (beforeAll/beforeEach) to enable
95
+ * canvas operations in jsdom environment.
96
+ */
97
+ export function setupCanvasMocks() {
98
+ // Check if we're in a browser-like environment
99
+ if (typeof HTMLCanvasElement === 'undefined') {
100
+ return;
101
+ }
102
+ const mockContext = createMockCanvasContext();
103
+ // Mock getContext - cast to any to satisfy TypeScript's strict overload signatures
104
+ // This is intentional for testing purposes where we don't need the full context API
105
+ HTMLCanvasElement.prototype.getContext = function (contextId
106
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
+ ) {
108
+ if (contextId === '2d') {
109
+ return {
110
+ ...mockContext,
111
+ canvas: { width: this.width || 300, height: this.height || 150 },
112
+ };
113
+ }
114
+ return null;
115
+ };
116
+ // Mock toDataURL
117
+ HTMLCanvasElement.prototype.toDataURL = function () {
118
+ return 'data:image/png;base64,mock';
119
+ };
120
+ // Mock toBlob
121
+ HTMLCanvasElement.prototype.toBlob = function (callback) {
122
+ callback(new Blob(['mock'], { type: 'image/png' }));
123
+ };
124
+ }
125
+ //# sourceMappingURL=canvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/dom/canvas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAiEH;;;;GAIG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;QACnB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;QACpB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;QACpB,WAAW,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;QACnB,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;QACnB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;QAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;QAChB,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;QACb,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;QACvB,gBAAgB,EAAE,GAAG,EAAE,GAAE,CAAC;QAC1B,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;QAChB,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;QAChB,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;QACnB,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;QACnB,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;QACtB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;QACxB,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;QACnB,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;YACtB,IAAI,EAAE,IAAI,iBAAiB,CAAC,GAAG,CAAC;YAChC,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;SACX,CAAC;QACF,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;YACnB,IAAI,EAAE,IAAI,iBAAiB,CAAC,GAAG,CAAC;YAChC,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;SACX,CAAC;QACF,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;QACtB,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;QACxD,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;QACxD,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;QACzB,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;QAC1B,eAAe,EAAE,GAAG,EAAE,CAAC,KAAK;QAC5B,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;QACrB,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;QAErB,0BAA0B;QAC1B,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QACnC,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,EAAE;QACd,cAAc,EAAE,CAAC;QACjB,IAAI,EAAE,iBAAiB;QACvB,SAAS,EAAE,OAAO;QAClB,YAAY,EAAE,YAAY;QAC1B,WAAW,EAAE,CAAC;QACd,wBAAwB,EAAE,aAAa;QACvC,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,kBAAkB;QAC/B,aAAa,EAAE,CAAC;QAChB,aAAa,EAAE,CAAC;QAChB,qBAAqB,EAAE,IAAI;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC9B,+CAA+C;IAC/C,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,uBAAuB,EAAE,CAAC;IAE9C,mFAAmF;IACnF,oFAAoF;IACpF,iBAAiB,CAAC,SAAS,CAAC,UAAU,GAAG,UACvC,SAAiB;IACjB,8DAA8D;;QAE9D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO;gBACL,GAAG,WAAW;gBACd,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;aACjE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,iBAAiB;IACjB,iBAAiB,CAAC,SAAS,CAAC,SAAS,GAAG;QACtC,OAAO,4BAA4B,CAAC;IACtC,CAAC,CAAC;IAEF,cAAc;IACd,iBAAiB,CAAC,SAAS,CAAC,MAAM,GAAG,UACnC,QAAsB;QAEtB,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Fetch mock utilities for testing
3
+ *
4
+ * Provides utilities for mocking the global fetch function.
5
+ * For more complex scenarios, consider using MSW (Mock Service Worker).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Simple mock
10
+ * const mockFetch = setupFetchMock({ data: 'test' });
11
+ *
12
+ * // Make request
13
+ * const response = await fetch('/api/test');
14
+ * const data = await response.json();
15
+ *
16
+ * // Assert
17
+ * expect(data).toEqual({ data: 'test' });
18
+ * expect(mockFetch.calls).toHaveLength(1);
19
+ *
20
+ * // Reset
21
+ * mockFetch.restore();
22
+ * ```
23
+ */
24
+ type MockResponseInit = {
25
+ status?: number;
26
+ statusText?: string;
27
+ headers?: Record<string, string>;
28
+ };
29
+ /**
30
+ * Mock fetch tracking interface
31
+ */
32
+ export interface MockFetchTracker {
33
+ /** All recorded fetch calls */
34
+ calls: Array<{
35
+ url: string;
36
+ init?: RequestInit;
37
+ }>;
38
+ /** Restore original fetch */
39
+ restore: () => void;
40
+ /** Clear recorded calls */
41
+ clear: () => void;
42
+ /** Update mock response */
43
+ setResponse: (body: unknown, init?: MockResponseInit) => void;
44
+ }
45
+ /**
46
+ * Sets up a simple fetch mock that returns a fixed response
47
+ *
48
+ * @param responseBody - The response body (will be JSON stringified)
49
+ * @param responseInit - Optional response configuration
50
+ * @returns A tracker object with calls array and restore function
51
+ */
52
+ export declare function setupFetchMock(responseBody: unknown, responseInit?: MockResponseInit): MockFetchTracker;
53
+ /**
54
+ * Sets up a fetch mock with custom handler
55
+ *
56
+ * @param handler - Function to handle fetch requests
57
+ * @returns A tracker object with calls array and restore function
58
+ */
59
+ export declare function setupFetchMockHandler(handler: (url: string, init?: RequestInit) => Promise<Response> | Response): MockFetchTracker;
60
+ /**
61
+ * Creates a mock Response object
62
+ *
63
+ * @param body - Response body
64
+ * @param init - Response init options
65
+ * @returns A Response object
66
+ */
67
+ export declare function createMockResponse(body: unknown, init?: MockResponseInit): Response;
68
+ export {};
69
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/dom/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,KAAK,gBAAgB,GAAG;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,KAAK,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IAElD,6BAA6B;IAC7B,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,IAAI,CAAC;IAElB,2BAA2B;IAC3B,WAAW,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,OAAO,EACrB,YAAY,GAAE,gBAAqB,GAClC,gBAAgB,CAkClB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GACzE,gBAAgB,CAsBlB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,EACb,IAAI,GAAE,gBAAqB,GAC1B,QAAQ,CASV"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Fetch mock utilities for testing
3
+ *
4
+ * Provides utilities for mocking the global fetch function.
5
+ * For more complex scenarios, consider using MSW (Mock Service Worker).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // Simple mock
10
+ * const mockFetch = setupFetchMock({ data: 'test' });
11
+ *
12
+ * // Make request
13
+ * const response = await fetch('/api/test');
14
+ * const data = await response.json();
15
+ *
16
+ * // Assert
17
+ * expect(data).toEqual({ data: 'test' });
18
+ * expect(mockFetch.calls).toHaveLength(1);
19
+ *
20
+ * // Reset
21
+ * mockFetch.restore();
22
+ * ```
23
+ */
24
+ /**
25
+ * Sets up a simple fetch mock that returns a fixed response
26
+ *
27
+ * @param responseBody - The response body (will be JSON stringified)
28
+ * @param responseInit - Optional response configuration
29
+ * @returns A tracker object with calls array and restore function
30
+ */
31
+ export function setupFetchMock(responseBody, responseInit = {}) {
32
+ const calls = [];
33
+ const originalFetch = globalThis.fetch;
34
+ let currentBody = responseBody;
35
+ let currentInit = responseInit;
36
+ globalThis.fetch = async (input, init) => {
37
+ const url = input instanceof Request ? input.url : input.toString();
38
+ calls.push({ url, init });
39
+ return new Response(JSON.stringify(currentBody), {
40
+ status: currentInit.status ?? 200,
41
+ statusText: currentInit.statusText ?? 'OK',
42
+ headers: {
43
+ 'Content-Type': 'application/json',
44
+ ...currentInit.headers,
45
+ },
46
+ });
47
+ };
48
+ return {
49
+ calls,
50
+ restore: () => {
51
+ globalThis.fetch = originalFetch;
52
+ },
53
+ clear: () => {
54
+ calls.length = 0;
55
+ },
56
+ setResponse: (body, init) => {
57
+ currentBody = body;
58
+ if (init)
59
+ currentInit = init;
60
+ },
61
+ };
62
+ }
63
+ /**
64
+ * Sets up a fetch mock with custom handler
65
+ *
66
+ * @param handler - Function to handle fetch requests
67
+ * @returns A tracker object with calls array and restore function
68
+ */
69
+ export function setupFetchMockHandler(handler) {
70
+ const calls = [];
71
+ const originalFetch = globalThis.fetch;
72
+ globalThis.fetch = async (input, init) => {
73
+ const url = input instanceof Request ? input.url : input.toString();
74
+ calls.push({ url, init });
75
+ return handler(url, init);
76
+ };
77
+ return {
78
+ calls,
79
+ restore: () => {
80
+ globalThis.fetch = originalFetch;
81
+ },
82
+ clear: () => {
83
+ calls.length = 0;
84
+ },
85
+ setResponse: () => {
86
+ // No-op for handler-based mock
87
+ },
88
+ };
89
+ }
90
+ /**
91
+ * Creates a mock Response object
92
+ *
93
+ * @param body - Response body
94
+ * @param init - Response init options
95
+ * @returns A Response object
96
+ */
97
+ export function createMockResponse(body, init = {}) {
98
+ return new Response(JSON.stringify(body), {
99
+ status: init.status ?? 200,
100
+ statusText: init.statusText ?? 'OK',
101
+ headers: {
102
+ 'Content-Type': 'application/json',
103
+ ...init.headers,
104
+ },
105
+ });
106
+ }
107
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/dom/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAyBH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,YAAqB,EACrB,eAAiC,EAAE;IAEnC,MAAM,KAAK,GAA+C,EAAE,CAAC;IAC7D,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IAEvC,IAAI,WAAW,GAAG,YAAY,CAAC;IAC/B,IAAI,WAAW,GAAG,YAAY,CAAC;IAE/B,UAAU,CAAC,KAAK,GAAG,KAAK,EAAE,KAAwB,EAAE,IAAkB,EAAqB,EAAE;QAC3F,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;YAC/C,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,GAAG;YACjC,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,IAAI;YAC1C,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,WAAW,CAAC,OAAO;aACvB;SACF,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,KAAK;QACL,OAAO,EAAE,GAAG,EAAE;YACZ,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;QACnC,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,WAAW,EAAE,CAAC,IAAa,EAAE,IAAuB,EAAE,EAAE;YACtD,WAAW,GAAG,IAAI,CAAC;YACnB,IAAI,IAAI;gBAAE,WAAW,GAAG,IAAI,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA0E;IAE1E,MAAM,KAAK,GAA+C,EAAE,CAAC;IAC7D,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IAEvC,UAAU,CAAC,KAAK,GAAG,KAAK,EAAE,KAAwB,EAAE,IAAkB,EAAqB,EAAE;QAC3F,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,OAAO;QACL,KAAK;QACL,OAAO,EAAE,GAAG,EAAE;YACZ,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;QACnC,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,WAAW,EAAE,GAAG,EAAE;YAChB,+BAA+B;QACjC,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAa,EACb,OAAyB,EAAE;IAE3B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG;QAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;QACnC,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,GAAG,IAAI,CAAC,OAAO;SAChB;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * DOM/Browser utilities for testing
3
+ *
4
+ * Provides mocks for browser APIs commonly used in testing:
5
+ * localStorage, canvas, ResizeObserver, fetch, etc.
6
+ */
7
+ export * from './localStorage.js';
8
+ export * from './canvas.js';
9
+ export * from './resizeObserver.js';
10
+ export * from './fetch.js';
11
+ export * from './matchMedia.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dom/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * DOM/Browser utilities for testing
3
+ *
4
+ * Provides mocks for browser APIs commonly used in testing:
5
+ * localStorage, canvas, ResizeObserver, fetch, etc.
6
+ */
7
+ export * from './localStorage.js';
8
+ export * from './canvas.js';
9
+ export * from './resizeObserver.js';
10
+ export * from './fetch.js';
11
+ export * from './matchMedia.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dom/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Mock localStorage for testing
3
+ *
4
+ * Provides a Map-backed implementation of the Storage interface
5
+ * for testing localStorage-dependent code.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const storage = new MockLocalStorage();
10
+ *
11
+ * // Use as global localStorage
12
+ * Object.defineProperty(globalThis, 'localStorage', { value: storage });
13
+ *
14
+ * // Or use directly
15
+ * storage.setItem('key', 'value');
16
+ * expect(storage.getItem('key')).toBe('value');
17
+ *
18
+ * // Check internal storage
19
+ * expect(storage._store.get('key')).toBe('value');
20
+ *
21
+ * // Reset between tests
22
+ * storage.clear();
23
+ * ```
24
+ */
25
+ /**
26
+ * Mock implementation of the Storage interface
27
+ */
28
+ export declare class MockLocalStorage implements Storage {
29
+ /** Internal storage map */
30
+ readonly _store: Map<string, string>;
31
+ get length(): number;
32
+ key(index: number): string | null;
33
+ getItem(key: string): string | null;
34
+ setItem(key: string, value: string): void;
35
+ removeItem(key: string): void;
36
+ clear(): void;
37
+ /**
38
+ * Get all keys in storage
39
+ */
40
+ keys(): string[];
41
+ /**
42
+ * Get all entries as an object
43
+ */
44
+ toObject(): Record<string, string>;
45
+ /**
46
+ * Populate storage from an object
47
+ */
48
+ fromObject(obj: Record<string, string>): void;
49
+ }
50
+ /**
51
+ * Creates a mock localStorage instance
52
+ *
53
+ * @returns A new MockLocalStorage instance
54
+ */
55
+ export declare function createMockLocalStorage(): MockLocalStorage;
56
+ /**
57
+ * Sets up mock localStorage on globalThis
58
+ *
59
+ * @returns The mock localStorage instance (for assertions)
60
+ */
61
+ export declare function setupLocalStorageMock(): MockLocalStorage;
62
+ /**
63
+ * Mock implementation of sessionStorage
64
+ * (Same interface as localStorage)
65
+ */
66
+ export declare class MockSessionStorage extends MockLocalStorage {
67
+ }
68
+ /**
69
+ * Creates a mock sessionStorage instance
70
+ *
71
+ * @returns A new MockSessionStorage instance
72
+ */
73
+ export declare function createMockSessionStorage(): MockSessionStorage;
74
+ /**
75
+ * Sets up mock sessionStorage on globalThis
76
+ *
77
+ * @returns The mock sessionStorage instance
78
+ */
79
+ export declare function setupSessionStorageMock(): MockSessionStorage;
80
+ //# sourceMappingURL=localStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localStorage.d.ts","sourceRoot":"","sources":["../../src/dom/localStorage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;GAEG;AACH,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,2BAA2B;IAC3B,QAAQ,CAAC,MAAM,sBAA6B;IAE5C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKjC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAInC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIlC;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;CAM9C;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CAQxD;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,gBAAgB;CAAG;AAE3D;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,kBAAkB,CAQ5D"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Mock localStorage for testing
3
+ *
4
+ * Provides a Map-backed implementation of the Storage interface
5
+ * for testing localStorage-dependent code.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const storage = new MockLocalStorage();
10
+ *
11
+ * // Use as global localStorage
12
+ * Object.defineProperty(globalThis, 'localStorage', { value: storage });
13
+ *
14
+ * // Or use directly
15
+ * storage.setItem('key', 'value');
16
+ * expect(storage.getItem('key')).toBe('value');
17
+ *
18
+ * // Check internal storage
19
+ * expect(storage._store.get('key')).toBe('value');
20
+ *
21
+ * // Reset between tests
22
+ * storage.clear();
23
+ * ```
24
+ */
25
+ /**
26
+ * Mock implementation of the Storage interface
27
+ */
28
+ export class MockLocalStorage {
29
+ constructor() {
30
+ /** Internal storage map */
31
+ this._store = new Map();
32
+ }
33
+ get length() {
34
+ return this._store.size;
35
+ }
36
+ key(index) {
37
+ const keys = Array.from(this._store.keys());
38
+ return keys[index] ?? null;
39
+ }
40
+ getItem(key) {
41
+ return this._store.get(key) ?? null;
42
+ }
43
+ setItem(key, value) {
44
+ this._store.set(key, value);
45
+ }
46
+ removeItem(key) {
47
+ this._store.delete(key);
48
+ }
49
+ clear() {
50
+ this._store.clear();
51
+ }
52
+ /**
53
+ * Get all keys in storage
54
+ */
55
+ keys() {
56
+ return Array.from(this._store.keys());
57
+ }
58
+ /**
59
+ * Get all entries as an object
60
+ */
61
+ toObject() {
62
+ return Object.fromEntries(this._store);
63
+ }
64
+ /**
65
+ * Populate storage from an object
66
+ */
67
+ fromObject(obj) {
68
+ this._store.clear();
69
+ for (const [key, value] of Object.entries(obj)) {
70
+ this._store.set(key, value);
71
+ }
72
+ }
73
+ }
74
+ /**
75
+ * Creates a mock localStorage instance
76
+ *
77
+ * @returns A new MockLocalStorage instance
78
+ */
79
+ export function createMockLocalStorage() {
80
+ return new MockLocalStorage();
81
+ }
82
+ /**
83
+ * Sets up mock localStorage on globalThis
84
+ *
85
+ * @returns The mock localStorage instance (for assertions)
86
+ */
87
+ export function setupLocalStorageMock() {
88
+ const storage = new MockLocalStorage();
89
+ Object.defineProperty(globalThis, 'localStorage', {
90
+ value: storage,
91
+ writable: true,
92
+ configurable: true,
93
+ });
94
+ return storage;
95
+ }
96
+ /**
97
+ * Mock implementation of sessionStorage
98
+ * (Same interface as localStorage)
99
+ */
100
+ export class MockSessionStorage extends MockLocalStorage {
101
+ }
102
+ /**
103
+ * Creates a mock sessionStorage instance
104
+ *
105
+ * @returns A new MockSessionStorage instance
106
+ */
107
+ export function createMockSessionStorage() {
108
+ return new MockSessionStorage();
109
+ }
110
+ /**
111
+ * Sets up mock sessionStorage on globalThis
112
+ *
113
+ * @returns The mock sessionStorage instance
114
+ */
115
+ export function setupSessionStorageMock() {
116
+ const storage = new MockSessionStorage();
117
+ Object.defineProperty(globalThis, 'sessionStorage', {
118
+ value: storage,
119
+ writable: true,
120
+ configurable: true,
121
+ });
122
+ return storage;
123
+ }
124
+ //# sourceMappingURL=localStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localStorage.js","sourceRoot":"","sources":["../../src/dom/localStorage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAA7B;QACE,2BAA2B;QAClB,WAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAkD9C,CAAC;IAhDC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,GAAG,CAAC,KAAa;QACf,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,GAA2B;QACpC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,gBAAgB,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACvC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,EAAE;QAChD,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;CAAG;AAE3D;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACzC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE;QAClD,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC"}