@slingr/cli 0.0.1

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 (144) hide show
  1. package/README.md +320 -0
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +5 -0
  6. package/dist/commands/cli-build.d.ts +9 -0
  7. package/dist/commands/cli-build.d.ts.map +1 -0
  8. package/dist/commands/cli-build.js +36 -0
  9. package/dist/commands/cli-build.js.map +1 -0
  10. package/dist/commands/create-app.d.ts +20 -0
  11. package/dist/commands/create-app.d.ts.map +1 -0
  12. package/dist/commands/create-app.js +246 -0
  13. package/dist/commands/create-app.js.map +1 -0
  14. package/dist/commands/ds.d.ts +28 -0
  15. package/dist/commands/ds.d.ts.map +1 -0
  16. package/dist/commands/ds.js +529 -0
  17. package/dist/commands/ds.js.map +1 -0
  18. package/dist/commands/gql.d.ts +22 -0
  19. package/dist/commands/gql.d.ts.map +1 -0
  20. package/dist/commands/gql.js +340 -0
  21. package/dist/commands/gql.js.map +1 -0
  22. package/dist/commands/infra/down.d.ts +13 -0
  23. package/dist/commands/infra/down.d.ts.map +1 -0
  24. package/dist/commands/infra/down.js +80 -0
  25. package/dist/commands/infra/down.js.map +1 -0
  26. package/dist/commands/infra/up.d.ts +13 -0
  27. package/dist/commands/infra/up.d.ts.map +1 -0
  28. package/dist/commands/infra/up.js +69 -0
  29. package/dist/commands/infra/up.js.map +1 -0
  30. package/dist/commands/infra/update.d.ts +14 -0
  31. package/dist/commands/infra/update.d.ts.map +1 -0
  32. package/dist/commands/infra/update.js +321 -0
  33. package/dist/commands/infra/update.js.map +1 -0
  34. package/dist/commands/run.d.ts +19 -0
  35. package/dist/commands/run.d.ts.map +1 -0
  36. package/dist/commands/run.js +315 -0
  37. package/dist/commands/run.js.map +1 -0
  38. package/dist/commands/setup.d.ts +18 -0
  39. package/dist/commands/setup.d.ts.map +1 -0
  40. package/dist/commands/setup.js +189 -0
  41. package/dist/commands/setup.js.map +1 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +8 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/projectStructure.d.ts +10 -0
  47. package/dist/projectStructure.d.ts.map +1 -0
  48. package/dist/projectStructure.js +153 -0
  49. package/dist/projectStructure.js.map +1 -0
  50. package/dist/scripts/generate-schema.d.ts +10 -0
  51. package/dist/scripts/generate-schema.d.ts.map +1 -0
  52. package/dist/scripts/generate-schema.js +130 -0
  53. package/dist/scripts/generate-schema.js.map +1 -0
  54. package/dist/scripts/generate-schema.ts +143 -0
  55. package/dist/templates/.github/copilot-instructions.md.template +17 -0
  56. package/dist/templates/config/datasource.ts.template +9 -0
  57. package/dist/templates/config/jest.config.ts +30 -0
  58. package/dist/templates/config/jest.setup.ts +1 -0
  59. package/dist/templates/config/tsconfig.json.template +30 -0
  60. package/dist/templates/dataSources/mysql.ts.template +13 -0
  61. package/dist/templates/dataSources/postgres.ts.template +13 -0
  62. package/dist/templates/dataset-generator-script.ts.template +140 -0
  63. package/dist/templates/datasets/mysql-default/Address.jsonl.template +4 -0
  64. package/dist/templates/datasets/mysql-default/App.jsonl.template +5 -0
  65. package/dist/templates/datasets/mysql-default/Company.jsonl.template +4 -0
  66. package/dist/templates/datasets/mysql-default/Person.jsonl.template +3 -0
  67. package/dist/templates/datasets/postgres-default/Address.jsonl.template +4 -0
  68. package/dist/templates/datasets/postgres-default/App.jsonl.template +5 -0
  69. package/dist/templates/datasets/postgres-default/Company.jsonl.template +4 -0
  70. package/dist/templates/datasets/postgres-default/Person.jsonl.template +3 -0
  71. package/dist/templates/docs/app-description.md.template +34 -0
  72. package/dist/templates/gql/codegen.yml.template +25 -0
  73. package/dist/templates/gql/index.ts.template +24 -0
  74. package/dist/templates/gql/operations.graphql.template +30 -0
  75. package/dist/templates/package.json.template +38 -0
  76. package/dist/templates/prompt-analysis.md.template +111 -0
  77. package/dist/templates/prompt-script-generation.md.template +259 -0
  78. package/dist/templates/src/Address.ts.template +31 -0
  79. package/dist/templates/src/App.ts.template +61 -0
  80. package/dist/templates/src/Company.ts.template +48 -0
  81. package/dist/templates/src/Models.test.ts.template +655 -0
  82. package/dist/templates/src/Person.test.ts.template +289 -0
  83. package/dist/templates/src/Person.ts.template +105 -0
  84. package/dist/templates/src/actions/index.ts.template +12 -0
  85. package/dist/templates/src/index.ts +66 -0
  86. package/dist/templates/src/types/gql.d.ts.template +18 -0
  87. package/dist/templates/vscode/extensions.json +3 -0
  88. package/dist/templates/vscode/settings.json +11 -0
  89. package/dist/utils/datasourceParser.d.ts +12 -0
  90. package/dist/utils/datasourceParser.d.ts.map +1 -0
  91. package/dist/utils/datasourceParser.js +91 -0
  92. package/dist/utils/datasourceParser.js.map +1 -0
  93. package/dist/utils/jsonlLoader.d.ts +140 -0
  94. package/dist/utils/jsonlLoader.d.ts.map +1 -0
  95. package/dist/utils/jsonlLoader.js +583 -0
  96. package/dist/utils/jsonlLoader.js.map +1 -0
  97. package/dist/utils/model-analyzer.d.ts +86 -0
  98. package/dist/utils/model-analyzer.d.ts.map +1 -0
  99. package/dist/utils/model-analyzer.js +458 -0
  100. package/dist/utils/model-analyzer.js.map +1 -0
  101. package/dist/utils/portChecker.d.ts +36 -0
  102. package/dist/utils/portChecker.d.ts.map +1 -0
  103. package/dist/utils/portChecker.js +308 -0
  104. package/dist/utils/portChecker.js.map +1 -0
  105. package/dist/utils/synthetic-data-generator.d.ts +74 -0
  106. package/dist/utils/synthetic-data-generator.d.ts.map +1 -0
  107. package/dist/utils/synthetic-data-generator.js +443 -0
  108. package/dist/utils/synthetic-data-generator.js.map +1 -0
  109. package/oclif.manifest.json +435 -0
  110. package/package.json +118 -0
  111. package/src/templates/.github/copilot-instructions.md.template +17 -0
  112. package/src/templates/config/datasource.ts.template +9 -0
  113. package/src/templates/config/jest.config.ts +30 -0
  114. package/src/templates/config/jest.setup.ts +1 -0
  115. package/src/templates/config/tsconfig.json.template +30 -0
  116. package/src/templates/dataSources/mysql.ts.template +13 -0
  117. package/src/templates/dataSources/postgres.ts.template +13 -0
  118. package/src/templates/dataset-generator-script.ts.template +140 -0
  119. package/src/templates/datasets/mysql-default/Address.jsonl.template +4 -0
  120. package/src/templates/datasets/mysql-default/App.jsonl.template +5 -0
  121. package/src/templates/datasets/mysql-default/Company.jsonl.template +4 -0
  122. package/src/templates/datasets/mysql-default/Person.jsonl.template +3 -0
  123. package/src/templates/datasets/postgres-default/Address.jsonl.template +4 -0
  124. package/src/templates/datasets/postgres-default/App.jsonl.template +5 -0
  125. package/src/templates/datasets/postgres-default/Company.jsonl.template +4 -0
  126. package/src/templates/datasets/postgres-default/Person.jsonl.template +3 -0
  127. package/src/templates/docs/app-description.md.template +34 -0
  128. package/src/templates/gql/codegen.yml.template +25 -0
  129. package/src/templates/gql/index.ts.template +24 -0
  130. package/src/templates/gql/operations.graphql.template +30 -0
  131. package/src/templates/package.json.template +38 -0
  132. package/src/templates/prompt-analysis.md.template +111 -0
  133. package/src/templates/prompt-script-generation.md.template +259 -0
  134. package/src/templates/src/Address.ts.template +31 -0
  135. package/src/templates/src/App.ts.template +61 -0
  136. package/src/templates/src/Company.ts.template +48 -0
  137. package/src/templates/src/Models.test.ts.template +655 -0
  138. package/src/templates/src/Person.test.ts.template +289 -0
  139. package/src/templates/src/Person.ts.template +105 -0
  140. package/src/templates/src/actions/index.ts.template +12 -0
  141. package/src/templates/src/index.ts +66 -0
  142. package/src/templates/src/types/gql.d.ts.template +18 -0
  143. package/src/templates/vscode/extensions.json +3 -0
  144. package/src/templates/vscode/settings.json +11 -0
@@ -0,0 +1,308 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.isDockerRunning = isDockerRunning;
37
+ exports.isPortUsedByProjectDocker = isPortUsedByProjectDocker;
38
+ exports.isPortInUse = isPortInUse;
39
+ exports.getProcessUsingPort = getProcessUsingPort;
40
+ exports.findAvailablePort = findAvailablePort;
41
+ exports.checkPortsUsage = checkPortsUsage;
42
+ const node_child_process_1 = require("node:child_process");
43
+ const net = __importStar(require("node:net"));
44
+ const path = __importStar(require("node:path"));
45
+ /**
46
+ * Check if Docker daemon is running
47
+ */
48
+ function isDockerRunning() {
49
+ try {
50
+ (0, node_child_process_1.execSync)('docker info', { stdio: 'pipe' });
51
+ return true;
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ }
57
+ /**
58
+ * Check if a port is being used by a Docker container from the current project
59
+ */
60
+ function isPortUsedByProjectDocker(port) {
61
+ try {
62
+ // Get current working directory name as project identifier (Windows compatible)
63
+ const projectName = path.basename(process.cwd()).toLowerCase();
64
+ // First, try to check using Docker Compose project labels
65
+ try {
66
+ const composeContainers = (0, node_child_process_1.execSync)(`docker ps --filter "label=com.docker.compose.project=${projectName}" --format "{{.Names}}\t{{.Ports}}\t{{.ID}}"`, {
67
+ encoding: 'utf-8',
68
+ stdio: 'pipe',
69
+ }).trim();
70
+ if (composeContainers) {
71
+ const lines = composeContainers.split('\n').filter(line => {
72
+ const parts = line.split('\t');
73
+ if (parts.length >= 2) {
74
+ const ports = parts[1];
75
+ return ports.includes(`:${port}->`) || ports.includes(`0.0.0.0:${port}->`) || ports.includes(`*:${port}->`);
76
+ }
77
+ return false;
78
+ });
79
+ if (lines.length > 0) {
80
+ const [containerName, ports, containerId] = lines[0].split('\t');
81
+ return {
82
+ containerId,
83
+ containerName,
84
+ isDocker: true,
85
+ };
86
+ }
87
+ }
88
+ }
89
+ catch {
90
+ // Continue with fallback approach
91
+ }
92
+ // Fallback: Get all running Docker containers with their ports
93
+ const dockerPs = (0, node_child_process_1.execSync)(`docker ps --format "{{.Names}}\t{{.Ports}}\t{{.ID}}"`, {
94
+ encoding: 'utf-8',
95
+ stdio: 'pipe',
96
+ });
97
+ // Filter lines that contain the specific port we're looking for
98
+ const lines = dockerPs
99
+ .trim()
100
+ .split('\n')
101
+ .filter(line => {
102
+ const parts = line.split('\t');
103
+ if (parts.length >= 2) {
104
+ const ports = parts[1];
105
+ // Check if this container is using our target port
106
+ return ports.includes(`:${port}->`) || ports.includes(`0.0.0.0:${port}->`) || ports.includes(`*:${port}->`);
107
+ }
108
+ return false;
109
+ });
110
+ for (const line of lines) {
111
+ const parts = line.split('\t');
112
+ if (parts.length < 2) {
113
+ continue;
114
+ }
115
+ const [containerName, ports, containerId] = parts;
116
+ // Enhanced project container detection - must match the EXACT project name
117
+ const isProjectContainer =
118
+ // Direct project name match - must be exact
119
+ containerName.toLowerCase().includes(projectName.toLowerCase()) &&
120
+ // Docker compose naming patterns (projectname_service_1, projectname-service-1)
121
+ (containerName.startsWith(`${projectName}_`) ||
122
+ containerName.startsWith(`${projectName}-`) ||
123
+ // Common Slingr app container patterns with project name
124
+ containerName.startsWith(`${projectName}`) ||
125
+ // Database service patterns WITH project name
126
+ (containerName.includes('-db') && containerName.includes(projectName)) ||
127
+ (containerName.includes('_db') && containerName.includes(projectName)));
128
+ if (isProjectContainer) {
129
+ return {
130
+ containerId,
131
+ containerName,
132
+ isDocker: true,
133
+ };
134
+ }
135
+ }
136
+ return { isDocker: false };
137
+ }
138
+ catch {
139
+ return { isDocker: false };
140
+ }
141
+ }
142
+ /**
143
+ * Check if a port is currently in use using system tools
144
+ */
145
+ async function isPortInUse(port, host = 'localhost') {
146
+ // Detect OS for appropriate command
147
+ const isWindows = process.platform === 'win32';
148
+ try {
149
+ if (isWindows) {
150
+ // Windows: use netstat command
151
+ const netstatResult = (0, node_child_process_1.execSync)(`netstat -an | findstr :${port}`, {
152
+ encoding: 'utf-8',
153
+ stdio: 'pipe',
154
+ });
155
+ return netstatResult.trim().length > 0;
156
+ }
157
+ else {
158
+ // Unix/Linux/macOS: try lsof first
159
+ const lsofResult = (0, node_child_process_1.execSync)(`lsof -ti:${port}`, { encoding: 'utf-8', stdio: 'pipe' });
160
+ return lsofResult.trim().length > 0;
161
+ }
162
+ }
163
+ catch {
164
+ try {
165
+ if (!isWindows) {
166
+ // Fallback: try netstat for Unix systems
167
+ const netstatResult = (0, node_child_process_1.execSync)(`netstat -tulpn 2>/dev/null | grep :${port}`, {
168
+ encoding: 'utf-8',
169
+ stdio: 'pipe',
170
+ });
171
+ return netstatResult.trim().length > 0;
172
+ }
173
+ }
174
+ catch {
175
+ // Continue to final fallback
176
+ }
177
+ // Final fallback: try to bind to the port
178
+ return new Promise(resolve => {
179
+ const server = net.createServer();
180
+ server.listen(port, host, () => {
181
+ server.once('close', () => {
182
+ resolve(false); // Port is available
183
+ });
184
+ server.close();
185
+ });
186
+ server.on('error', () => {
187
+ resolve(true); // Port is in use
188
+ });
189
+ });
190
+ }
191
+ }
192
+ /**
193
+ * Find what process is using a specific port
194
+ */
195
+ function getProcessUsingPort(port) {
196
+ const isWindows = process.platform === 'win32';
197
+ try {
198
+ if (isWindows) {
199
+ // Windows: use netstat to get process info
200
+ const result = (0, node_child_process_1.execSync)(`netstat -ano | findstr :${port}`, {
201
+ encoding: 'utf-8',
202
+ stdio: 'pipe',
203
+ });
204
+ if (result.trim()) {
205
+ // Extract PID from netstat output (last column)
206
+ const lines = result.trim().split('\n');
207
+ for (const line of lines) {
208
+ const parts = line.trim().split(/\s+/);
209
+ if (parts.length >= 5) {
210
+ const pid = parts[parts.length - 1];
211
+ try {
212
+ // Get process name using tasklist
213
+ const processInfo = (0, node_child_process_1.execSync)(`tasklist /FI "PID eq ${pid}" /FO CSV /NH`, {
214
+ encoding: 'utf-8',
215
+ stdio: 'pipe',
216
+ });
217
+ if (processInfo.trim()) {
218
+ const processName = processInfo.split(',')[0].replace(/"/g, '');
219
+ return `${processName} (PID: ${pid})`;
220
+ }
221
+ }
222
+ catch {
223
+ return `Process ID: ${pid}`;
224
+ }
225
+ }
226
+ }
227
+ }
228
+ }
229
+ else {
230
+ // Unix/Linux/macOS: use lsof
231
+ const result = (0, node_child_process_1.execSync)(`lsof -ti:${port}`, { encoding: 'utf-8', stdio: 'pipe' });
232
+ const pid = result.trim();
233
+ if (pid) {
234
+ try {
235
+ // Get process info
236
+ const processInfo = (0, node_child_process_1.execSync)(`ps -p ${pid} -o pid,comm,args --no-headers`, {
237
+ encoding: 'utf-8',
238
+ stdio: 'pipe',
239
+ });
240
+ return processInfo.trim();
241
+ }
242
+ catch {
243
+ return `Process ID: ${pid}`;
244
+ }
245
+ }
246
+ }
247
+ }
248
+ catch {
249
+ // Commands failed, try alternative approaches
250
+ try {
251
+ if (!isWindows) {
252
+ // Fallback for Unix: try netstat
253
+ const result = (0, node_child_process_1.execSync)(`netstat -tulpn 2>/dev/null | grep :${port}`, {
254
+ encoding: 'utf-8',
255
+ stdio: 'pipe',
256
+ });
257
+ return result.trim();
258
+ }
259
+ }
260
+ catch {
261
+ // If all approaches fail, we can't determine what's using the port
262
+ }
263
+ }
264
+ return null;
265
+ }
266
+ /**
267
+ * Find an available port starting from a given port
268
+ */
269
+ async function findAvailablePort(startingPort, maxAttempts = 10) {
270
+ for (let port = startingPort; port < startingPort + maxAttempts; port++) {
271
+ if (!(await isPortInUse(port))) {
272
+ return port;
273
+ }
274
+ }
275
+ return null;
276
+ }
277
+ /**
278
+ * Check multiple ports and return information about their usage
279
+ */
280
+ async function checkPortsUsage(ports) {
281
+ const results = [];
282
+ for (const port of ports) {
283
+ const inUse = await isPortInUse(port);
284
+ const dockerInfo = isPortUsedByProjectDocker(port);
285
+ const result = {
286
+ inUse,
287
+ isProjectDocker: dockerInfo.isDocker,
288
+ port,
289
+ };
290
+ // Only add optional properties if they have values
291
+ if (dockerInfo.containerId) {
292
+ result.containerId = dockerInfo.containerId;
293
+ }
294
+ if (dockerInfo.containerName) {
295
+ result.containerName = dockerInfo.containerName;
296
+ }
297
+ if (inUse && !dockerInfo.isDocker) {
298
+ // Only get process info if it's not a project Docker container
299
+ const process = getProcessUsingPort(port);
300
+ if (process) {
301
+ result.process = process;
302
+ }
303
+ }
304
+ results.push(result);
305
+ }
306
+ return results;
307
+ }
308
+ //# sourceMappingURL=portChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portChecker.js","sourceRoot":"","sources":["../../src/utils/portChecker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { ModelMetadata } from './model-analyzer.js';
2
+ export interface DataGenerationOptions {
3
+ count?: number;
4
+ locale?: string;
5
+ seed?: number;
6
+ relationships?: boolean;
7
+ verbose?: boolean;
8
+ }
9
+ export interface GeneratedRecord {
10
+ [key: string]: any;
11
+ }
12
+ export interface DatasetGenerationResult {
13
+ modelName: string;
14
+ records: GeneratedRecord[];
15
+ filePath: string;
16
+ }
17
+ export declare class SyntheticDataGenerator {
18
+ private options;
19
+ private generatedData;
20
+ constructor(options?: DataGenerationOptions);
21
+ /**
22
+ * Generate synthetic datasets for multiple models
23
+ */
24
+ generateDatasets(models: ModelMetadata[], outputDir: string, datasetName: string): Promise<DatasetGenerationResult[]>;
25
+ /**
26
+ * Generate records for a single model using Faker
27
+ */
28
+ private generateRecordsForModel;
29
+ /**
30
+ * Generate records using Faker
31
+ */
32
+ private generateRecordsWithFaker;
33
+ /**
34
+ * Generate a value for a specific field using Faker
35
+ */
36
+ private generateFieldValue;
37
+ /**
38
+ * Generate a relationship value (reference, composition, or shared composition)
39
+ */
40
+ private generateRelationshipValue;
41
+ /**
42
+ * Generate an object dynamically based on model metadata
43
+ */
44
+ private generateObjectFromModel;
45
+ /**
46
+ * Generate a simple field value without relationships to avoid recursion
47
+ */
48
+ private generateSimpleFieldValue;
49
+ /**
50
+ * Generate text value respecting constraints
51
+ */
52
+ private generateTextValue;
53
+ /**
54
+ * Generate integer value respecting constraints
55
+ */
56
+ private generateIntegerValue;
57
+ /**
58
+ * Generate float value respecting constraints
59
+ */
60
+ private generateFloatValue;
61
+ /**
62
+ * Evaluate required field condition
63
+ */
64
+ private evaluateRequired;
65
+ /**
66
+ * Evaluate available field condition
67
+ */
68
+ private evaluateAvailable;
69
+ /**
70
+ * Sort models by dependencies to handle relationships properly
71
+ */
72
+ private sortModelsByDependencies;
73
+ }
74
+ //# sourceMappingURL=synthetic-data-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthetic-data-generator.d.ts","sourceRoot":"","sources":["../../src/utils/synthetic-data-generator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAiB,MAAM,qBAAqB,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAA6C;gBAEtD,OAAO,GAAE,qBAA0B;IAa/C;;OAEG;IACG,gBAAgB,CACpB,MAAM,EAAE,aAAa,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAoCrC;;OAEG;YACW,uBAAuB;IAMrC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA+BhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuE1B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA+CjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwD/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqChC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyDzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;CA0DjC"}