projax 3.3.57 → 3.3.59

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 (80) hide show
  1. package/dist/electron/script-runner.js +52 -20
  2. package/dist/index.js +1 -1
  3. package/dist/prxi.js +846 -111
  4. package/dist/prxi.tsx +1236 -181
  5. package/dist/script-runner.js +52 -20
  6. package/package.json +1 -1
  7. package/coverage/base.css +0 -224
  8. package/coverage/block-navigation.js +0 -87
  9. package/coverage/core-bridge.ts.html +0 -292
  10. package/coverage/favicon.png +0 -0
  11. package/coverage/index.html +0 -191
  12. package/coverage/lcov-report/base.css +0 -224
  13. package/coverage/lcov-report/block-navigation.js +0 -87
  14. package/coverage/lcov-report/core-bridge.ts.html +0 -292
  15. package/coverage/lcov-report/favicon.png +0 -0
  16. package/coverage/lcov-report/index.html +0 -191
  17. package/coverage/lcov-report/port-extractor.ts.html +0 -1174
  18. package/coverage/lcov-report/port-scanner.ts.html +0 -301
  19. package/coverage/lcov-report/port-utils.ts.html +0 -670
  20. package/coverage/lcov-report/prettify.css +0 -1
  21. package/coverage/lcov-report/prettify.js +0 -2
  22. package/coverage/lcov-report/script-runner.ts.html +0 -3346
  23. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  24. package/coverage/lcov-report/sorter.js +0 -210
  25. package/coverage/lcov-report/test-parser.ts.html +0 -799
  26. package/coverage/lcov.info +0 -1338
  27. package/coverage/port-extractor.ts.html +0 -1174
  28. package/coverage/port-scanner.ts.html +0 -301
  29. package/coverage/port-utils.ts.html +0 -670
  30. package/coverage/prettify.css +0 -1
  31. package/coverage/prettify.js +0 -2
  32. package/coverage/script-runner.ts.html +0 -3346
  33. package/coverage/sort-arrow-sprite.png +0 -0
  34. package/coverage/sorter.js +0 -210
  35. package/coverage/test-parser.ts.html +0 -799
  36. package/dist/__tests__/core-bridge.test.d.ts +0 -1
  37. package/dist/__tests__/core-bridge.test.js +0 -135
  38. package/dist/__tests__/port-extractor.test.d.ts +0 -1
  39. package/dist/__tests__/port-extractor.test.js +0 -407
  40. package/dist/__tests__/port-scanner.test.d.ts +0 -1
  41. package/dist/__tests__/port-scanner.test.js +0 -170
  42. package/dist/__tests__/port-utils.test.d.ts +0 -1
  43. package/dist/__tests__/port-utils.test.js +0 -127
  44. package/dist/__tests__/script-runner.test.d.ts +0 -1
  45. package/dist/__tests__/script-runner.test.js +0 -491
  46. package/dist/__tests__/test-parser.test.d.ts +0 -1
  47. package/dist/__tests__/test-parser.test.js +0 -276
  48. package/dist/api/__tests__/database.test.d.ts +0 -2
  49. package/dist/api/__tests__/database.test.d.ts.map +0 -1
  50. package/dist/api/__tests__/database.test.js +0 -485
  51. package/dist/api/__tests__/database.test.js.map +0 -1
  52. package/dist/api/__tests__/routes.test.d.ts +0 -2
  53. package/dist/api/__tests__/routes.test.d.ts.map +0 -1
  54. package/dist/api/__tests__/routes.test.js +0 -484
  55. package/dist/api/__tests__/routes.test.js.map +0 -1
  56. package/dist/api/__tests__/scanner.test.d.ts +0 -2
  57. package/dist/api/__tests__/scanner.test.d.ts.map +0 -1
  58. package/dist/api/__tests__/scanner.test.js +0 -403
  59. package/dist/api/__tests__/scanner.test.js.map +0 -1
  60. package/dist/core/__tests__/database.test.d.ts +0 -1
  61. package/dist/core/__tests__/database.test.js +0 -557
  62. package/dist/core/__tests__/detector.test.d.ts +0 -1
  63. package/dist/core/__tests__/detector.test.js +0 -375
  64. package/dist/core/__tests__/index.test.d.ts +0 -1
  65. package/dist/core/__tests__/index.test.js +0 -469
  66. package/dist/core/__tests__/scanner.test.d.ts +0 -1
  67. package/dist/core/__tests__/scanner.test.js +0 -406
  68. package/dist/core/__tests__/settings.test.d.ts +0 -1
  69. package/dist/core/__tests__/settings.test.js +0 -280
  70. package/dist/electron/core/__tests__/database.test.d.ts +0 -1
  71. package/dist/electron/core/__tests__/database.test.js +0 -557
  72. package/dist/electron/core/__tests__/detector.test.d.ts +0 -1
  73. package/dist/electron/core/__tests__/detector.test.js +0 -375
  74. package/dist/electron/core/__tests__/index.test.d.ts +0 -1
  75. package/dist/electron/core/__tests__/index.test.js +0 -469
  76. package/dist/electron/core/__tests__/scanner.test.d.ts +0 -1
  77. package/dist/electron/core/__tests__/scanner.test.js +0 -406
  78. package/dist/electron/core/__tests__/settings.test.d.ts +0 -1
  79. package/dist/electron/core/__tests__/settings.test.js +0 -280
  80. package/jest.config.js +0 -26
@@ -1,484 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- /* eslint-disable @typescript-eslint/no-var-requires */
40
- const supertest_1 = __importDefault(require("supertest"));
41
- const express_1 = __importDefault(require("express"));
42
- const fs = __importStar(require("fs"));
43
- const path = __importStar(require("path"));
44
- const os = __importStar(require("os"));
45
- // Use an object to hold testDataDir so it can be accessed before initialization
46
- const testConfig = { dataDir: '' };
47
- // Mock core-bridge module (used by routes/projects.ts for git branch detection)
48
- jest.mock('../core-bridge', () => ({
49
- getCurrentBranch: jest.fn(() => 'main'),
50
- parseWorkspaceFile: jest.fn(() => ({ folders: [] })),
51
- generateWorkspaceFile: jest.fn(),
52
- validateWorkspacePath: jest.fn(() => true),
53
- createBackup: jest.fn(),
54
- restoreBackup: jest.fn(),
55
- validateBackup: jest.fn(),
56
- }));
57
- // Mock os module
58
- jest.mock('os', () => ({
59
- ...jest.requireActual('os'),
60
- homedir: jest.fn(() => testConfig.dataDir || os.tmpdir()),
61
- }));
62
- // Import after mocking
63
- const routes_1 = __importDefault(require("../routes"));
64
- const database_1 = require("../database");
65
- describe('API Routes', () => {
66
- let app;
67
- let testProjectDir;
68
- beforeEach(() => {
69
- // Create test directories with truly unique names
70
- const uniqueId = `${Date.now()}-${process.hrtime.bigint()}-${Math.random().toString(36).substring(7)}`;
71
- testConfig.dataDir = path.join(os.tmpdir(), `projax-api-test-${uniqueId}`);
72
- testProjectDir = path.join(testConfig.dataDir, 'test-project');
73
- // Ensure clean slate
74
- if (fs.existsSync(testConfig.dataDir)) {
75
- fs.rmSync(testConfig.dataDir, { recursive: true, force: true });
76
- }
77
- fs.mkdirSync(testProjectDir, { recursive: true });
78
- // Create Express app with routes
79
- app = (0, express_1.default)();
80
- app.use(express_1.default.json());
81
- app.use('/api', routes_1.default);
82
- // Initialize database
83
- new database_1.JSONDatabase();
84
- });
85
- afterEach(() => {
86
- // Reset singleton before cleanup
87
- (0, database_1.resetDatabase)();
88
- // Clean up
89
- if (fs.existsSync(testConfig.dataDir)) {
90
- fs.rmSync(testConfig.dataDir, { recursive: true, force: true });
91
- }
92
- });
93
- describe('GET /api/projects', () => {
94
- it('should return empty array when no projects exist', async () => {
95
- const response = await (0, supertest_1.default)(app).get('/api/projects');
96
- expect(response.status).toBe(200);
97
- expect(response.body).toEqual([]);
98
- });
99
- it('should return all projects', async () => {
100
- // Add projects directly via database
101
- const db = new database_1.JSONDatabase();
102
- db.addProject('Project 1', testProjectDir);
103
- const dir2 = path.join(testConfig.dataDir, 'project2');
104
- fs.mkdirSync(dir2, { recursive: true });
105
- db.addProject('Project 2', dir2);
106
- const response = await (0, supertest_1.default)(app).get('/api/projects');
107
- expect(response.status).toBe(200);
108
- expect(response.body).toHaveLength(2);
109
- expect(response.body[0].name).toBe('Project 1');
110
- expect(response.body[1].name).toBe('Project 2');
111
- });
112
- });
113
- describe('POST /api/projects', () => {
114
- it('should create a new project', async () => {
115
- const response = await (0, supertest_1.default)(app)
116
- .post('/api/projects')
117
- .send({
118
- name: 'My Project',
119
- path: testProjectDir,
120
- });
121
- expect(response.status).toBe(201);
122
- expect(response.body).toMatchObject({
123
- id: 1,
124
- name: 'My Project',
125
- path: testProjectDir,
126
- });
127
- });
128
- it('should return 400 if name is missing', async () => {
129
- const response = await (0, supertest_1.default)(app)
130
- .post('/api/projects')
131
- .send({
132
- path: testProjectDir,
133
- });
134
- expect(response.status).toBe(400);
135
- expect(response.body.error).toBe('Name and path are required');
136
- });
137
- it('should return 400 if path is missing', async () => {
138
- const response = await (0, supertest_1.default)(app)
139
- .post('/api/projects')
140
- .send({
141
- name: 'My Project',
142
- });
143
- expect(response.status).toBe(400);
144
- expect(response.body.error).toBe('Name and path are required');
145
- });
146
- it('should return 400 if path does not exist', async () => {
147
- const response = await (0, supertest_1.default)(app)
148
- .post('/api/projects')
149
- .send({
150
- name: 'My Project',
151
- path: '/non/existent/path',
152
- });
153
- expect(response.status).toBe(400);
154
- expect(response.body.error).toBe('Path does not exist');
155
- });
156
- it('should return 400 if path is not a directory', async () => {
157
- const filePath = path.join(testConfig.dataDir, 'file.txt');
158
- fs.writeFileSync(filePath, 'test');
159
- const response = await (0, supertest_1.default)(app)
160
- .post('/api/projects')
161
- .send({
162
- name: 'My Project',
163
- path: filePath,
164
- });
165
- expect(response.status).toBe(400);
166
- expect(response.body.error).toBe('Path must be a directory');
167
- });
168
- it('should return 409 if project with path already exists', async () => {
169
- // Create first project
170
- await (0, supertest_1.default)(app)
171
- .post('/api/projects')
172
- .send({
173
- name: 'Project 1',
174
- path: testProjectDir,
175
- });
176
- // Try to create duplicate
177
- const response = await (0, supertest_1.default)(app)
178
- .post('/api/projects')
179
- .send({
180
- name: 'Project 2',
181
- path: testProjectDir,
182
- });
183
- expect(response.status).toBe(409);
184
- expect(response.body.error).toBe('Project with this path already exists');
185
- });
186
- });
187
- describe('GET /api/projects/:id', () => {
188
- it('should return a project by ID', async () => {
189
- const db = new database_1.JSONDatabase();
190
- const project = db.addProject('Test Project', testProjectDir);
191
- const response = await (0, supertest_1.default)(app).get(`/api/projects/${project.id}`);
192
- expect(response.status).toBe(200);
193
- expect(response.body).toMatchObject({
194
- id: project.id,
195
- name: 'Test Project',
196
- });
197
- });
198
- it('should return 404 for non-existent project', async () => {
199
- const response = await (0, supertest_1.default)(app).get('/api/projects/999');
200
- expect(response.status).toBe(404);
201
- expect(response.body.error).toBe('Project not found');
202
- });
203
- it('should return 404 for invalid ID format', async () => {
204
- const response = await (0, supertest_1.default)(app).get('/api/projects/invalid');
205
- // The route regex only matches numeric IDs, so non-numeric IDs return 404
206
- expect(response.status).toBe(404);
207
- });
208
- });
209
- describe('PUT /api/projects/:id', () => {
210
- it('should update project name', async () => {
211
- const db = new database_1.JSONDatabase();
212
- const project = db.addProject('Old Name', testProjectDir);
213
- const response = await (0, supertest_1.default)(app)
214
- .put(`/api/projects/${project.id}`)
215
- .send({ name: 'New Name' });
216
- expect(response.status).toBe(200);
217
- expect(response.body.name).toBe('New Name');
218
- });
219
- it('should update project description', async () => {
220
- const db = new database_1.JSONDatabase();
221
- const project = db.addProject('Test', testProjectDir);
222
- const response = await (0, supertest_1.default)(app)
223
- .put(`/api/projects/${project.id}`)
224
- .send({ description: 'A test project' });
225
- expect(response.status).toBe(200);
226
- expect(response.body.description).toBe('A test project');
227
- });
228
- it('should update project framework', async () => {
229
- const db = new database_1.JSONDatabase();
230
- const project = db.addProject('Test', testProjectDir);
231
- const response = await (0, supertest_1.default)(app)
232
- .put(`/api/projects/${project.id}`)
233
- .send({ framework: 'Node.js' });
234
- expect(response.status).toBe(200);
235
- expect(response.body.framework).toBe('Node.js');
236
- });
237
- it('should update project tags', async () => {
238
- const db = new database_1.JSONDatabase();
239
- const project = db.addProject('Test', testProjectDir);
240
- const response = await (0, supertest_1.default)(app)
241
- .put(`/api/projects/${project.id}`)
242
- .send({ tags: ['web', 'api'] });
243
- expect(response.status).toBe(200);
244
- expect(response.body.tags).toEqual(['web', 'api']);
245
- });
246
- it('should update multiple fields at once', async () => {
247
- const db = new database_1.JSONDatabase();
248
- const project = db.addProject('Test', testProjectDir);
249
- const response = await (0, supertest_1.default)(app)
250
- .put(`/api/projects/${project.id}`)
251
- .send({
252
- name: 'Updated Name',
253
- description: 'Updated description',
254
- framework: 'React',
255
- tags: ['frontend'],
256
- });
257
- expect(response.status).toBe(200);
258
- expect(response.body).toMatchObject({
259
- name: 'Updated Name',
260
- description: 'Updated description',
261
- framework: 'React',
262
- tags: ['frontend'],
263
- });
264
- });
265
- it('should return 400 when no fields to update', async () => {
266
- const db = new database_1.JSONDatabase();
267
- const project = db.addProject('Test', testProjectDir);
268
- const response = await (0, supertest_1.default)(app)
269
- .put(`/api/projects/${project.id}`)
270
- .send({});
271
- expect(response.status).toBe(400);
272
- expect(response.body.error).toBe('No valid fields to update');
273
- });
274
- it('should return 404 for invalid ID format', async () => {
275
- const response = await (0, supertest_1.default)(app)
276
- .put('/api/projects/invalid')
277
- .send({ name: 'New Name' });
278
- // The route regex only matches numeric IDs, so non-numeric IDs return 404
279
- expect(response.status).toBe(404);
280
- });
281
- });
282
- describe('DELETE /api/projects/:id', () => {
283
- it('should delete a project', async () => {
284
- const db = new database_1.JSONDatabase();
285
- const project = db.addProject('Test', testProjectDir);
286
- const response = await (0, supertest_1.default)(app).delete(`/api/projects/${project.id}`);
287
- expect(response.status).toBe(204);
288
- // Use getDatabase() to verify deletion from the singleton
289
- const { getDatabase } = require('../database');
290
- expect(getDatabase().getProject(project.id)).toBeNull();
291
- });
292
- it('should return 404 for non-existent project', async () => {
293
- const response = await (0, supertest_1.default)(app).delete('/api/projects/999');
294
- expect(response.status).toBe(404);
295
- expect(response.body.error).toBe('Project not found');
296
- });
297
- it('should return 404 for invalid ID format', async () => {
298
- const response = await (0, supertest_1.default)(app).delete('/api/projects/invalid');
299
- // The route regex only matches numeric IDs, so non-numeric IDs return 404
300
- expect(response.status).toBe(404);
301
- });
302
- });
303
- describe('GET /api/projects/:id/tests', () => {
304
- it('should return tests for a project', async () => {
305
- const db = new database_1.JSONDatabase();
306
- const project = db.addProject('Test', testProjectDir);
307
- db.addTest(project.id, 'test1.js', 'jest');
308
- db.addTest(project.id, 'test2.js', 'jest');
309
- const response = await (0, supertest_1.default)(app).get(`/api/projects/${project.id}/tests`);
310
- expect(response.status).toBe(200);
311
- expect(response.body).toHaveLength(2);
312
- });
313
- it('should return empty array when no tests exist', async () => {
314
- const db = new database_1.JSONDatabase();
315
- const project = db.addProject('Test', testProjectDir);
316
- const response = await (0, supertest_1.default)(app).get(`/api/projects/${project.id}/tests`);
317
- expect(response.status).toBe(200);
318
- expect(response.body).toEqual([]);
319
- });
320
- it('should return 404 for non-existent project', async () => {
321
- const response = await (0, supertest_1.default)(app).get('/api/projects/999/tests');
322
- expect(response.status).toBe(404);
323
- expect(response.body.error).toBe('Project not found');
324
- });
325
- });
326
- describe('GET /api/projects/:id/ports', () => {
327
- it('should return ports for a project', async () => {
328
- const db = new database_1.JSONDatabase();
329
- const project = db.addProject('Test', testProjectDir);
330
- db.addProjectPort(project.id, 3000, 'package.json', 'dev');
331
- db.addProjectPort(project.id, 8080, 'package.json', 'api');
332
- const response = await (0, supertest_1.default)(app).get(`/api/projects/${project.id}/ports`);
333
- expect(response.status).toBe(200);
334
- expect(response.body).toHaveLength(2);
335
- expect(response.body.map((p) => p.port)).toEqual([3000, 8080]);
336
- });
337
- it('should return empty array when no ports exist', async () => {
338
- const db = new database_1.JSONDatabase();
339
- const project = db.addProject('Test', testProjectDir);
340
- const response = await (0, supertest_1.default)(app).get(`/api/projects/${project.id}/ports`);
341
- expect(response.status).toBe(200);
342
- expect(response.body).toEqual([]);
343
- });
344
- it('should return 404 for non-existent project', async () => {
345
- const response = await (0, supertest_1.default)(app).get('/api/projects/999/ports');
346
- expect(response.status).toBe(404);
347
- expect(response.body.error).toBe('Project not found');
348
- });
349
- });
350
- describe('POST /api/projects/:id/scan', () => {
351
- it('should scan a project for tests', async () => {
352
- // Create project with test files
353
- const packageJson = {
354
- devDependencies: { jest: '^29.0.0' },
355
- };
356
- fs.writeFileSync(path.join(testProjectDir, 'package.json'), JSON.stringify(packageJson));
357
- fs.mkdirSync(path.join(testProjectDir, 'src'), { recursive: true });
358
- fs.writeFileSync(path.join(testProjectDir, 'src', 'app.test.ts'), '');
359
- const db = new database_1.JSONDatabase();
360
- const project = db.addProject('Test', testProjectDir);
361
- const response = await (0, supertest_1.default)(app).post(`/api/projects/${project.id}/scan`);
362
- expect(response.status).toBe(200);
363
- expect(response.body).toMatchObject({
364
- testsFound: 1,
365
- });
366
- expect(response.body.tests).toHaveLength(1);
367
- expect(response.body.project.last_scanned).toBeGreaterThan(0);
368
- });
369
- it('should return 404 for invalid ID format', async () => {
370
- const response = await (0, supertest_1.default)(app).post('/api/projects/invalid/scan');
371
- // The route regex only matches numeric IDs, so non-numeric IDs return 404
372
- expect(response.status).toBe(404);
373
- });
374
- });
375
- describe('POST /api/projects/scan/all', () => {
376
- it('should scan all projects', async () => {
377
- // Create two projects with test files
378
- const packageJson = { devDependencies: { jest: '^29.0.0' } };
379
- const dir1 = path.join(testConfig.dataDir, 'project1');
380
- fs.mkdirSync(dir1, { recursive: true });
381
- fs.writeFileSync(path.join(dir1, 'package.json'), JSON.stringify(packageJson));
382
- fs.writeFileSync(path.join(dir1, 'test.spec.ts'), '');
383
- const dir2 = path.join(testConfig.dataDir, 'project2');
384
- fs.mkdirSync(dir2, { recursive: true });
385
- fs.writeFileSync(path.join(dir2, 'package.json'), JSON.stringify(packageJson));
386
- fs.writeFileSync(path.join(dir2, 'test.spec.ts'), '');
387
- const db = new database_1.JSONDatabase();
388
- db.addProject('Project 1', dir1);
389
- db.addProject('Project 2', dir2);
390
- const response = await (0, supertest_1.default)(app).post('/api/projects/scan/all');
391
- expect(response.status).toBe(200);
392
- expect(response.body).toHaveLength(2);
393
- expect(response.body[0].testsFound).toBe(1);
394
- expect(response.body[1].testsFound).toBe(1);
395
- });
396
- it('should return empty array when no projects exist', async () => {
397
- const response = await (0, supertest_1.default)(app).post('/api/projects/scan/all');
398
- expect(response.status).toBe(200);
399
- expect(response.body).toEqual([]);
400
- });
401
- });
402
- describe('GET /api/projects/tags', () => {
403
- it('should return all unique tags', async () => {
404
- const db = new database_1.JSONDatabase();
405
- const dir1 = path.join(testConfig.dataDir, 'p1');
406
- const dir2 = path.join(testConfig.dataDir, 'p2');
407
- fs.mkdirSync(dir1, { recursive: true });
408
- fs.mkdirSync(dir2, { recursive: true });
409
- db.addProject('Project 1', dir1);
410
- db.updateProject(1, { tags: ['web', 'api'] });
411
- db.addProject('Project 2', dir2);
412
- db.updateProject(2, { tags: ['api', 'mobile'] });
413
- const response = await (0, supertest_1.default)(app).get('/api/projects/tags');
414
- expect(response.status).toBe(200);
415
- expect(response.body).toEqual(['api', 'mobile', 'web']);
416
- });
417
- it('should return empty array when no tags exist', async () => {
418
- const response = await (0, supertest_1.default)(app).get('/api/projects/tags');
419
- expect(response.status).toBe(200);
420
- expect(response.body).toEqual([]);
421
- });
422
- });
423
- describe('GET /api/settings', () => {
424
- it('should return all settings', async () => {
425
- const db = new database_1.JSONDatabase();
426
- db.setSetting('theme', 'dark');
427
- db.setSetting('language', 'en');
428
- const response = await (0, supertest_1.default)(app).get('/api/settings');
429
- expect(response.status).toBe(200);
430
- expect(response.body).toEqual({
431
- theme: 'dark',
432
- language: 'en',
433
- });
434
- });
435
- it('should return empty object when no settings exist', async () => {
436
- const response = await (0, supertest_1.default)(app).get('/api/settings');
437
- expect(response.status).toBe(200);
438
- expect(response.body).toEqual({});
439
- });
440
- });
441
- describe('PUT /api/settings/:key', () => {
442
- it('should create a new setting', async () => {
443
- const response = await (0, supertest_1.default)(app)
444
- .put('/api/settings/theme')
445
- .send({ value: 'dark' });
446
- expect(response.status).toBe(200);
447
- expect(response.body).toEqual({
448
- key: 'theme',
449
- value: 'dark',
450
- });
451
- });
452
- it('should update an existing setting', async () => {
453
- const db = new database_1.JSONDatabase();
454
- db.setSetting('theme', 'dark');
455
- const response = await (0, supertest_1.default)(app)
456
- .put('/api/settings/theme')
457
- .send({ value: 'light' });
458
- expect(response.status).toBe(200);
459
- expect(response.body).toEqual({
460
- key: 'theme',
461
- value: 'light',
462
- });
463
- });
464
- it('should return 400 if value is missing', async () => {
465
- const response = await (0, supertest_1.default)(app)
466
- .put('/api/settings/theme')
467
- .send({});
468
- expect(response.status).toBe(400);
469
- expect(response.body.error).toBe('Value is required');
470
- });
471
- it('should convert value to string', async () => {
472
- const response = await (0, supertest_1.default)(app)
473
- .put('/api/settings/count')
474
- .send({ value: 42 });
475
- expect(response.status).toBe(200);
476
- // The response returns the original value, but it's stored as a string in DB
477
- expect(response.body.value).toBe(42);
478
- // Verify it was actually stored as a string
479
- const { getDatabase } = require('../database');
480
- expect(getDatabase().getSetting('count')).toBe('42');
481
- });
482
- });
483
- });
484
- //# sourceMappingURL=routes.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routes.test.js","sourceRoot":"","sources":["../../src/__tests__/routes.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAuD;AACvD,0DAAgC;AAChC,sDAA2C;AAC3C,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,gFAAgF;AAChF,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAEnC,gFAAgF;AAChF,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IACvC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACpD,qBAAqB,EAAE,IAAI,CAAC,EAAE,EAAE;IAChC,qBAAqB,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;IAC1C,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE;IACvB,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;IACxB,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AAEJ,iBAAiB;AACjB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACrB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IAC3B,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;CAC1D,CAAC,CAAC,CAAC;AAEJ,uBAAuB;AACvB,uDAAkC;AAClC,0CAA0D;AAE1D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,GAAY,CAAC;IACjB,IAAI,cAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,kDAAkD;QAClD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACvG,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QAC3E,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAE/D,qBAAqB;QACrB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,iCAAiC;QACjC,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;QAChB,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAS,CAAC,CAAC;QAE3B,sBAAsB;QACtB,IAAI,uBAAY,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,iCAAiC;QACjC,IAAA,wBAAa,GAAE,CAAC;QAEhB,WAAW;QACX,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAEzD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,qCAAqC;YACrC,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACvD,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAEjC,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAEzD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,IAAI,CAAC,eAAe,CAAC;iBACrB,IAAI,CAAC;gBACJ,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,cAAc;aACrB,CAAC,CAAC;YAEL,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;gBAClC,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,cAAc;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,IAAI,CAAC,eAAe,CAAC;iBACrB,IAAI,CAAC;gBACJ,IAAI,EAAE,cAAc;aACrB,CAAC,CAAC;YAEL,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,IAAI,CAAC,eAAe,CAAC;iBACrB,IAAI,CAAC;gBACJ,IAAI,EAAE,YAAY;aACnB,CAAC,CAAC;YAEL,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,IAAI,CAAC,eAAe,CAAC;iBACrB,IAAI,CAAC;gBACJ,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,oBAAoB;aAC3B,CAAC,CAAC;YAEL,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC3D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEnC,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,IAAI,CAAC,eAAe,CAAC;iBACrB,IAAI,CAAC;gBACJ,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YAEL,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,uBAAuB;YACvB,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBACf,IAAI,CAAC,eAAe,CAAC;iBACrB,IAAI,CAAC;gBACJ,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,cAAc;aACrB,CAAC,CAAC;YAEL,0BAA0B;YAC1B,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,IAAI,CAAC,eAAe,CAAC;iBACrB,IAAI,CAAC;gBACJ,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,cAAc;aACrB,CAAC,CAAC;YAEL,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;YAE9D,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YAEvE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;gBAClC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,cAAc;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAE7D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YAEjE,0EAA0E;YAC1E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAE1D,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,EAAE,CAAC;iBAClC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAE9B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,EAAE,CAAC;iBAClC,IAAI,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAE3C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,EAAE,CAAC;iBAClC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAElC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,EAAE,CAAC;iBAClC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAElC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,EAAE,CAAC;iBAClC,IAAI,CAAC;gBACJ,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,qBAAqB;gBAClC,SAAS,EAAE,OAAO;gBAClB,IAAI,EAAE,CAAC,UAAU,CAAC;aACnB,CAAC,CAAC;YAEL,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;gBAClC,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,qBAAqB;gBAClC,SAAS,EAAE,OAAO;gBAClB,IAAI,EAAE,CAAC,UAAU,CAAC;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,EAAE,CAAC;iBAClC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEZ,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,uBAAuB,CAAC;iBAC5B,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAE9B,0EAA0E;YAC1E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,MAAM,CAAC,iBAAiB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YAE1E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,0DAA0D;YAC1D,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAEhE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAEpE,0EAA0E;YAC1E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YACtD,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAC3C,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YAE3C,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;YAE7E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;YAE7E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YAEnE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YACtD,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;YAC3D,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;YAE3D,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;YAE7E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;YAE7E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YAEnE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,iCAAiC;YACjC,MAAM,WAAW,GAAG;gBAClB,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aACrC,CAAC;YACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YACzF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;YAEtE,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YAE7E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;gBAClC,UAAU,EAAE,CAAC;aACd,CAAC,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAEvE,0EAA0E;YAC1E,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YACxC,sCAAsC;YACtC,MAAM,WAAW,GAAG,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;YAE7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACvD,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/E,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;YAEtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACvD,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/E,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;YAEtD,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACjC,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAEjC,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAEnE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAEnE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACjD,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAExC,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACjC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAE9C,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACjC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAEjD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAE9D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAE9D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC/B,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAEhC,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAEzD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;gBAC5B,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAEzD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,qBAAqB,CAAC;iBAC1B,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAE3B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;gBAC5B,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,EAAE,GAAG,IAAI,uBAAY,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE/B,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,qBAAqB,CAAC;iBAC1B,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAE5B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;gBAC5B,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,OAAO;aACf,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,qBAAqB,CAAC;iBAC1B,IAAI,CAAC,EAAE,CAAC,CAAC;YAEZ,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC;iBAChC,GAAG,CAAC,qBAAqB,CAAC;iBAC1B,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YAEvB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,6EAA6E;YAC7E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAErC,4CAA4C;YAC5C,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;YAC/C,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=scanner.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scanner.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/scanner.test.ts"],"names":[],"mappings":""}