@interfere/next 0.0.9 → 0.0.11

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 (135) hide show
  1. package/README.md +308 -0
  2. package/dist/__tests__/build/with-interfere-coverage.test.d.ts +2 -0
  3. package/dist/__tests__/build/with-interfere-coverage.test.d.ts.map +1 -0
  4. package/dist/__tests__/build/with-interfere-coverage.test.js +338 -0
  5. package/dist/__tests__/build/with-interfere-coverage.test.js.map +1 -0
  6. package/dist/__tests__/build/with-interfere.test.d.ts +2 -0
  7. package/dist/__tests__/build/with-interfere.test.d.ts.map +1 -0
  8. package/dist/__tests__/build/with-interfere.test.js +466 -0
  9. package/dist/__tests__/build/with-interfere.test.js.map +1 -0
  10. package/dist/__tests__/core/client.test.d.ts.map +1 -0
  11. package/dist/__tests__/core/client.test.js +373 -0
  12. package/dist/__tests__/core/client.test.js.map +1 -0
  13. package/dist/__tests__/core/encoders.test.d.ts.map +1 -0
  14. package/dist/{core → __tests__/core}/encoders.test.js +20 -19
  15. package/dist/__tests__/core/encoders.test.js.map +1 -0
  16. package/dist/__tests__/core/rage-click.test.d.ts +2 -0
  17. package/dist/__tests__/core/rage-click.test.d.ts.map +1 -0
  18. package/dist/__tests__/core/rage-click.test.js +121 -0
  19. package/dist/__tests__/core/rage-click.test.js.map +1 -0
  20. package/dist/__tests__/core/session-manager.test.d.ts +2 -0
  21. package/dist/__tests__/core/session-manager.test.d.ts.map +1 -0
  22. package/dist/__tests__/core/session-manager.test.js +1132 -0
  23. package/dist/__tests__/core/session-manager.test.js.map +1 -0
  24. package/dist/__tests__/integration/release-upload.test.d.ts +2 -0
  25. package/dist/__tests__/integration/release-upload.test.d.ts.map +1 -0
  26. package/dist/__tests__/integration/release-upload.test.js +173 -0
  27. package/dist/__tests__/integration/release-upload.test.js.map +1 -0
  28. package/dist/__tests__/session/persistence.test.d.ts +2 -0
  29. package/dist/__tests__/session/persistence.test.d.ts.map +1 -0
  30. package/dist/__tests__/session/persistence.test.js +129 -0
  31. package/dist/__tests__/session/persistence.test.js.map +1 -0
  32. package/dist/__tests__/session/session-summary.test.d.ts +2 -0
  33. package/dist/__tests__/session/session-summary.test.d.ts.map +1 -0
  34. package/dist/__tests__/session/session-summary.test.js +763 -0
  35. package/dist/__tests__/session/session-summary.test.js.map +1 -0
  36. package/dist/build/index.d.ts +3 -0
  37. package/dist/build/index.d.ts.map +1 -0
  38. package/dist/build/index.js +2 -0
  39. package/dist/build/index.js.map +1 -0
  40. package/dist/build/with-interfere.d.ts +54 -0
  41. package/dist/build/with-interfere.d.ts.map +1 -0
  42. package/dist/build/with-interfere.js +267 -0
  43. package/dist/build/with-interfere.js.map +1 -0
  44. package/dist/core/client-core.d.ts +27 -0
  45. package/dist/core/client-core.d.ts.map +1 -0
  46. package/dist/core/client-core.js +152 -0
  47. package/dist/core/client-core.js.map +1 -0
  48. package/dist/core/client.d.ts +71 -18
  49. package/dist/core/client.d.ts.map +1 -1
  50. package/dist/core/client.js +107 -97
  51. package/dist/core/client.js.map +1 -1
  52. package/dist/core/constants.d.ts +12 -0
  53. package/dist/core/constants.d.ts.map +1 -0
  54. package/dist/core/constants.js +17 -0
  55. package/dist/core/constants.js.map +1 -0
  56. package/dist/core/debug.d.ts +47 -0
  57. package/dist/core/debug.d.ts.map +1 -0
  58. package/dist/core/debug.js +79 -0
  59. package/dist/core/debug.js.map +1 -0
  60. package/dist/core/error-handlers.d.ts +14 -0
  61. package/dist/core/error-handlers.d.ts.map +1 -0
  62. package/dist/core/error-handlers.js +192 -0
  63. package/dist/core/error-handlers.js.map +1 -0
  64. package/dist/core/runtime.d.ts +7 -0
  65. package/dist/core/runtime.d.ts.map +1 -0
  66. package/dist/core/runtime.js +16 -0
  67. package/dist/core/runtime.js.map +1 -0
  68. package/dist/index.d.ts +10 -5
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +9 -5
  71. package/dist/index.js.map +1 -1
  72. package/dist/next/middleware.d.ts +8 -0
  73. package/dist/next/middleware.d.ts.map +1 -0
  74. package/dist/next/middleware.js +139 -0
  75. package/dist/next/middleware.js.map +1 -0
  76. package/dist/persistence/storage.d.ts +5 -0
  77. package/dist/persistence/storage.d.ts.map +1 -0
  78. package/dist/persistence/storage.js +67 -0
  79. package/dist/persistence/storage.js.map +1 -0
  80. package/dist/react/provider.d.ts +12 -7
  81. package/dist/react/provider.d.ts.map +1 -1
  82. package/dist/react/provider.jsx +37 -10
  83. package/dist/react/provider.jsx.map +1 -1
  84. package/dist/session/constants.d.ts +19 -0
  85. package/dist/session/constants.d.ts.map +1 -0
  86. package/dist/session/constants.js +34 -0
  87. package/dist/session/constants.js.map +1 -0
  88. package/dist/session/persistence.d.ts +58 -0
  89. package/dist/session/persistence.d.ts.map +1 -0
  90. package/dist/session/persistence.js +180 -0
  91. package/dist/session/persistence.js.map +1 -0
  92. package/dist/session/rage-click.d.ts +17 -0
  93. package/dist/session/rage-click.d.ts.map +1 -0
  94. package/dist/session/rage-click.js +104 -0
  95. package/dist/session/rage-click.js.map +1 -0
  96. package/dist/session/replay.d.ts +3 -0
  97. package/dist/session/replay.d.ts.map +1 -0
  98. package/dist/session/replay.js +109 -0
  99. package/dist/session/replay.js.map +1 -0
  100. package/dist/session/session-manager.d.ts +126 -0
  101. package/dist/session/session-manager.d.ts.map +1 -0
  102. package/dist/session/session-manager.js +635 -0
  103. package/dist/session/session-manager.js.map +1 -0
  104. package/dist/session/session-summary.d.ts +3 -0
  105. package/dist/session/session-summary.d.ts.map +1 -0
  106. package/dist/session/session-summary.js +214 -0
  107. package/dist/session/session-summary.js.map +1 -0
  108. package/dist/types/storage.d.ts +7 -0
  109. package/dist/types/storage.d.ts.map +1 -0
  110. package/dist/types/storage.js +2 -0
  111. package/dist/types/storage.js.map +1 -0
  112. package/package.json +28 -9
  113. package/dist/core/client.test.d.ts.map +0 -1
  114. package/dist/core/client.test.js +0 -227
  115. package/dist/core/client.test.js.map +0 -1
  116. package/dist/core/encoders.test.d.ts.map +0 -1
  117. package/dist/core/encoders.test.js.map +0 -1
  118. package/dist/edge/edge.d.ts +0 -11
  119. package/dist/edge/edge.d.ts.map +0 -1
  120. package/dist/edge/edge.js +0 -41
  121. package/dist/edge/edge.js.map +0 -1
  122. package/dist/edge/edge.test.d.ts +0 -2
  123. package/dist/edge/edge.test.d.ts.map +0 -1
  124. package/dist/edge/edge.test.js +0 -109
  125. package/dist/edge/edge.test.js.map +0 -1
  126. package/dist/server/server.d.ts +0 -6
  127. package/dist/server/server.d.ts.map +0 -1
  128. package/dist/server/server.js +0 -35
  129. package/dist/server/server.js.map +0 -1
  130. package/dist/server/server.test.d.ts +0 -2
  131. package/dist/server/server.test.d.ts.map +0 -1
  132. package/dist/server/server.test.js +0 -88
  133. package/dist/server/server.test.js.map +0 -1
  134. /package/dist/{core → __tests__/core}/client.test.d.ts +0 -0
  135. /package/dist/{core → __tests__/core}/encoders.test.d.ts +0 -0
@@ -1,109 +0,0 @@
1
- import { NextRequest, NextResponse } from 'next/server';
2
- import { beforeEach, describe, expect, it, vi } from 'vitest';
3
- import { capture, init } from '../core/client.js';
4
- import { config, interfereMiddleware, withInterfereEdge } from './edge.js';
5
- vi.mock('../core/client.js', () => ({
6
- init: vi.fn(),
7
- capture: vi.fn(),
8
- }));
9
- // Top level regex for static asset matching
10
- const STATIC_ASSET_REGEX = /^\/(?!_next\/static|_next\/image|favicon\.ico).*/;
11
- describe('withInterfereEdge', () => {
12
- beforeEach(() => {
13
- vi.clearAllMocks();
14
- });
15
- it('wraps handler and captures successful requests', async () => {
16
- const mockResponse = NextResponse.json({ success: true });
17
- const handler = vi.fn().mockResolvedValue(mockResponse);
18
- const wrapped = withInterfereEdge(handler);
19
- const req = new NextRequest('http://localhost/api/edge', {
20
- method: 'POST',
21
- });
22
- const response = await wrapped(req);
23
- expect(handler).toHaveBeenCalledWith(req);
24
- expect(response).toBe(mockResponse);
25
- expect(capture).toHaveBeenCalledWith('edge_req', {
26
- method: 'POST',
27
- url: 'http://localhost/api/edge',
28
- latency: expect.any(Number),
29
- status: 200,
30
- });
31
- });
32
- it('captures errors and rethrows them', async () => {
33
- const testError = new Error('Edge error');
34
- const handler = vi.fn().mockRejectedValue(testError);
35
- const wrapped = withInterfereEdge(handler);
36
- const req = new NextRequest('http://localhost/api/edge');
37
- await expect(wrapped(req)).rejects.toThrow('Edge error');
38
- expect(capture).toHaveBeenCalledWith('edge_error', {
39
- method: 'GET',
40
- url: 'http://localhost/api/edge',
41
- latency: expect.any(Number),
42
- error: 'Edge error',
43
- stack: expect.stringContaining('Error: Edge error'),
44
- });
45
- });
46
- it('uses session ID from headers', async () => {
47
- const handler = vi.fn().mockResolvedValue(NextResponse.json({}));
48
- const wrapped = withInterfereEdge(handler);
49
- const req = new NextRequest('http://localhost/api/edge', {
50
- headers: {
51
- 'x-interfere-session': 'edge-session-456',
52
- },
53
- });
54
- await wrapped(req);
55
- expect(init).toHaveBeenCalledWith({
56
- sessionId: 'edge-session-456',
57
- });
58
- });
59
- it('initializes with edge config if provided', async () => {
60
- const edgeConfig = { projectId: 'if_p_edge', env: 'production' };
61
- const handler = vi.fn().mockResolvedValue(NextResponse.json({}));
62
- const wrapped = withInterfereEdge(handler, edgeConfig);
63
- await wrapped(new NextRequest('http://localhost/api/edge'));
64
- expect(init).toHaveBeenCalledWith(edgeConfig);
65
- });
66
- });
67
- describe('interfereMiddleware', () => {
68
- beforeEach(() => {
69
- vi.clearAllMocks();
70
- });
71
- it('returns NextResponse.next() for requests', async () => {
72
- const req = new NextRequest('http://localhost/some-page');
73
- const response = await interfereMiddleware(req);
74
- expect(response).toBeInstanceOf(NextResponse);
75
- expect(response.headers.get('x-middleware-next')).toBe('1');
76
- });
77
- it('captures edge requests', async () => {
78
- const req = new NextRequest('http://localhost/some-page');
79
- await interfereMiddleware(req);
80
- expect(capture).toHaveBeenCalledWith('edge_req', {
81
- method: 'GET',
82
- url: 'http://localhost/some-page',
83
- latency: expect.any(Number),
84
- status: 200,
85
- });
86
- });
87
- });
88
- describe('config export', () => {
89
- it('has correct matcher pattern', () => {
90
- expect(config).toEqual({
91
- matcher: ['/(?!_next/static|_next/image|favicon.ico).*'],
92
- });
93
- });
94
- it('excludes static assets', () => {
95
- const matcher = config.matcher?.[0];
96
- if (!matcher) {
97
- throw new Error('Matcher not found');
98
- }
99
- // Should match regular routes
100
- expect('/api/users'.match(STATIC_ASSET_REGEX)).toBeTruthy();
101
- expect('/dashboard'.match(STATIC_ASSET_REGEX)).toBeTruthy();
102
- expect('/'.match(STATIC_ASSET_REGEX)).toBeTruthy();
103
- // Should not match static assets
104
- expect('/_next/static/chunk.js'.match(STATIC_ASSET_REGEX)).toBeFalsy();
105
- expect('/_next/image'.match(STATIC_ASSET_REGEX)).toBeFalsy();
106
- expect('/favicon.ico'.match(STATIC_ASSET_REGEX)).toBeFalsy();
107
- });
108
- });
109
- //# sourceMappingURL=edge.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edge.test.js","sourceRoot":"","sources":["../../src/edge/edge.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { Config } from '@interfere/types';
2
- import type { NextRequest, NextResponse } from 'next/server';
3
- type Handler = (req: NextRequest) => Promise<NextResponse | Response>;
4
- export declare function withInterfereApi(handler: Handler, config?: Partial<Config>): Handler;
5
- export {};
6
- //# sourceMappingURL=server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG7D,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,GAAG,QAAQ,CAAC,CAAC;AAEtE,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,GACvB,OAAO,CAoCT"}
@@ -1,35 +0,0 @@
1
- import { headers } from 'next/headers';
2
- import { capture, init } from '../core/client.js';
3
- export function withInterfereApi(handler, config) {
4
- return async (req) => {
5
- const start = Date.now();
6
- const headersList = await headers();
7
- const sessionId = headersList.get('x-interfere-session') || undefined;
8
- if (config || sessionId) {
9
- init({ ...config, sessionId });
10
- }
11
- try {
12
- const response = await handler(req);
13
- const latency = Date.now() - start;
14
- capture('server_req', {
15
- method: req.method,
16
- url: req.url,
17
- latency,
18
- status: response.status,
19
- });
20
- return response;
21
- }
22
- catch (error) {
23
- const latency = Date.now() - start;
24
- capture('server_error', {
25
- method: req.method,
26
- url: req.url,
27
- latency,
28
- error: error instanceof Error ? error.message : String(error),
29
- stack: error instanceof Error ? error.stack : undefined,
30
- });
31
- throw error;
32
- }
33
- };
34
- }
35
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAIlD,MAAM,UAAU,gBAAgB,CAC9B,OAAgB,EAChB,MAAwB;IAExB,OAAO,KAAK,EAAE,GAAgB,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,SAAS,CAAC;QAEtE,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAEnC,OAAO,CAAC,YAAY,EAAE;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO;gBACP,MAAM,EAAE,QAAQ,CAAC,MAAM;aACxB,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAEnC,OAAO,CAAC,cAAc,EAAE;gBACtB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO;gBACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACxD,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=server.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../../src/server/server.test.ts"],"names":[],"mappings":""}
@@ -1,88 +0,0 @@
1
- import { NextRequest, NextResponse } from 'next/server';
2
- import { beforeEach, describe, expect, it, vi } from 'vitest';
3
- import { capture, init } from '../core/client.js';
4
- import { withInterfereApi } from './server.js';
5
- vi.mock('../core/client.js', () => ({
6
- init: vi.fn(),
7
- capture: vi.fn(),
8
- }));
9
- vi.mock('next/headers', () => ({
10
- headers: vi.fn().mockResolvedValue({
11
- get: vi.fn(() => null),
12
- }),
13
- }));
14
- describe('withInterfereApi', () => {
15
- beforeEach(() => {
16
- vi.clearAllMocks();
17
- });
18
- it('wraps handler and captures successful requests', async () => {
19
- const mockResponse = new NextResponse('Success', { status: 200 });
20
- const handler = vi.fn().mockResolvedValue(mockResponse);
21
- const wrapped = withInterfereApi(handler);
22
- const req = new NextRequest('http://localhost/api/test', {
23
- method: 'POST',
24
- });
25
- const response = await wrapped(req);
26
- expect(handler).toHaveBeenCalledWith(req);
27
- expect(response).toBe(mockResponse);
28
- expect(capture).toHaveBeenCalledWith('server_req', {
29
- method: 'POST',
30
- url: 'http://localhost/api/test',
31
- latency: expect.any(Number),
32
- status: 200,
33
- });
34
- });
35
- it('captures errors and rethrows them', async () => {
36
- const testError = new Error('Test error');
37
- const handler = vi.fn().mockRejectedValue(testError);
38
- const wrapped = withInterfereApi(handler);
39
- const req = new NextRequest('http://localhost/api/test');
40
- await expect(wrapped(req)).rejects.toThrow('Test error');
41
- expect(capture).toHaveBeenCalledWith('server_error', {
42
- method: 'GET',
43
- url: 'http://localhost/api/test',
44
- latency: expect.any(Number),
45
- error: 'Test error',
46
- stack: expect.stringContaining('Error: Test error'),
47
- });
48
- });
49
- it('uses session ID from headers', async () => {
50
- const { headers } = await import('next/headers');
51
- vi.mocked(headers).mockResolvedValue({
52
- get: vi.fn((key) => key === 'x-interfere-session' ? 'session-123' : null),
53
- });
54
- const handler = vi.fn().mockResolvedValue(new NextResponse());
55
- const wrapped = withInterfereApi(handler);
56
- await wrapped(new NextRequest('http://localhost/api/test'));
57
- expect(init).toHaveBeenCalledWith({
58
- sessionId: 'session-123',
59
- });
60
- });
61
- it('initializes with config if provided', async () => {
62
- // Reset headers mock to return null for session ID
63
- const { headers } = await import('next/headers');
64
- vi.mocked(headers).mockResolvedValue({
65
- get: vi.fn(() => null),
66
- });
67
- const config = { projectId: 'if_p_test', env: 'production' };
68
- const handler = vi.fn().mockResolvedValue(new NextResponse());
69
- const wrapped = withInterfereApi(handler, config);
70
- await wrapped(new NextRequest('http://localhost/api/test'));
71
- expect(init).toHaveBeenCalledWith(config);
72
- });
73
- it('measures latency accurately', async () => {
74
- let capturedLatency = 0;
75
- vi.mocked(capture).mockImplementation((_type, payload) => {
76
- capturedLatency = payload.latency;
77
- });
78
- const handler = vi.fn().mockImplementation(async () => {
79
- await new Promise((resolve) => setTimeout(resolve, 50));
80
- return new NextResponse();
81
- });
82
- const wrapped = withInterfereApi(handler);
83
- await wrapped(new NextRequest('http://localhost/api/test'));
84
- expect(capturedLatency).toBeGreaterThanOrEqual(50);
85
- expect(capturedLatency).toBeLessThan(100);
86
- });
87
- });
88
- //# sourceMappingURL=server.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.test.js","sourceRoot":"","sources":["../../src/server/server.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;IACb,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;CACjB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;QACjC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KACvB,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,2BAA2B,EAAE;YACvD,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEpC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,2BAA2B;YAChC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC3B,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAEzD,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEzD,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE;YACnD,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,2BAA2B;YAChC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC3B,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;SACpD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACjD,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;YACnC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CACzB,GAAG,KAAK,qBAAqB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CACrD;SACgD,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE1C,MAAM,OAAO,CAAC,IAAI,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAE5D,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;YAChC,SAAS,EAAE,aAAa;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,mDAAmD;QACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACjD,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;YACnC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;SAC2B,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,YAAqB,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAElD,MAAM,OAAO,CAAC,IAAI,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAE5D,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,OAAgB,EAAE,EAAE;YAChE,eAAe,GAAI,OAA+B,CAAC,OAAO,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;YACpD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,OAAO,CAAC,IAAI,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAE5D,MAAM,CAAC,eAAe,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
File without changes