micro-contracts 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +351 -0
  3. package/dist/cli/templates.d.ts +16 -0
  4. package/dist/cli/templates.d.ts.map +1 -0
  5. package/dist/cli/templates.js +377 -0
  6. package/dist/cli/templates.js.map +1 -0
  7. package/dist/cli.d.ts +9 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +978 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/generator/dependencyGenerator.d.ts +43 -0
  12. package/dist/generator/dependencyGenerator.d.ts.map +1 -0
  13. package/dist/generator/dependencyGenerator.js +159 -0
  14. package/dist/generator/dependencyGenerator.js.map +1 -0
  15. package/dist/generator/domainGenerator.d.ts +16 -0
  16. package/dist/generator/domainGenerator.d.ts.map +1 -0
  17. package/dist/generator/domainGenerator.js +212 -0
  18. package/dist/generator/domainGenerator.js.map +1 -0
  19. package/dist/generator/index.d.ts +37 -0
  20. package/dist/generator/index.d.ts.map +1 -0
  21. package/dist/generator/index.js +747 -0
  22. package/dist/generator/index.js.map +1 -0
  23. package/dist/generator/linter.d.ts +24 -0
  24. package/dist/generator/linter.d.ts.map +1 -0
  25. package/dist/generator/linter.js +202 -0
  26. package/dist/generator/linter.js.map +1 -0
  27. package/dist/generator/overlayProcessor.d.ts +90 -0
  28. package/dist/generator/overlayProcessor.d.ts.map +1 -0
  29. package/dist/generator/overlayProcessor.js +532 -0
  30. package/dist/generator/overlayProcessor.js.map +1 -0
  31. package/dist/generator/schemaGenerator.d.ts +10 -0
  32. package/dist/generator/schemaGenerator.d.ts.map +1 -0
  33. package/dist/generator/schemaGenerator.js +299 -0
  34. package/dist/generator/schemaGenerator.js.map +1 -0
  35. package/dist/generator/templateProcessor.d.ts +178 -0
  36. package/dist/generator/templateProcessor.d.ts.map +1 -0
  37. package/dist/generator/templateProcessor.js +607 -0
  38. package/dist/generator/templateProcessor.js.map +1 -0
  39. package/dist/generator/typeGenerator.d.ts +9 -0
  40. package/dist/generator/typeGenerator.d.ts.map +1 -0
  41. package/dist/generator/typeGenerator.js +395 -0
  42. package/dist/generator/typeGenerator.js.map +1 -0
  43. package/dist/guardrails/allowlist.d.ts +45 -0
  44. package/dist/guardrails/allowlist.d.ts.map +1 -0
  45. package/dist/guardrails/allowlist.js +261 -0
  46. package/dist/guardrails/allowlist.js.map +1 -0
  47. package/dist/guardrails/config.d.ts +40 -0
  48. package/dist/guardrails/config.d.ts.map +1 -0
  49. package/dist/guardrails/config.js +174 -0
  50. package/dist/guardrails/config.js.map +1 -0
  51. package/dist/guardrails/docs.d.ts +24 -0
  52. package/dist/guardrails/docs.d.ts.map +1 -0
  53. package/dist/guardrails/docs.js +138 -0
  54. package/dist/guardrails/docs.js.map +1 -0
  55. package/dist/guardrails/drift.d.ts +23 -0
  56. package/dist/guardrails/drift.d.ts.map +1 -0
  57. package/dist/guardrails/drift.js +127 -0
  58. package/dist/guardrails/drift.js.map +1 -0
  59. package/dist/guardrails/index.d.ts +19 -0
  60. package/dist/guardrails/index.d.ts.map +1 -0
  61. package/dist/guardrails/index.js +25 -0
  62. package/dist/guardrails/index.js.map +1 -0
  63. package/dist/guardrails/lint.d.ts +20 -0
  64. package/dist/guardrails/lint.d.ts.map +1 -0
  65. package/dist/guardrails/lint.js +274 -0
  66. package/dist/guardrails/lint.js.map +1 -0
  67. package/dist/guardrails/manifest.d.ts +43 -0
  68. package/dist/guardrails/manifest.d.ts.map +1 -0
  69. package/dist/guardrails/manifest.js +231 -0
  70. package/dist/guardrails/manifest.js.map +1 -0
  71. package/dist/guardrails/runner.d.ts +31 -0
  72. package/dist/guardrails/runner.d.ts.map +1 -0
  73. package/dist/guardrails/runner.js +268 -0
  74. package/dist/guardrails/runner.js.map +1 -0
  75. package/dist/guardrails/security.d.ts +31 -0
  76. package/dist/guardrails/security.d.ts.map +1 -0
  77. package/dist/guardrails/security.js +181 -0
  78. package/dist/guardrails/security.js.map +1 -0
  79. package/dist/guardrails/typecheck.d.ts +15 -0
  80. package/dist/guardrails/typecheck.d.ts.map +1 -0
  81. package/dist/guardrails/typecheck.js +104 -0
  82. package/dist/guardrails/typecheck.js.map +1 -0
  83. package/dist/guardrails/types.d.ts +196 -0
  84. package/dist/guardrails/types.d.ts.map +1 -0
  85. package/dist/guardrails/types.js +8 -0
  86. package/dist/guardrails/types.js.map +1 -0
  87. package/dist/index.d.ts +7 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +7 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/types.d.ts +489 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +297 -0
  94. package/dist/types.js.map +1 -0
  95. package/docs/architecture.svg +226 -0
  96. package/docs/development-guardrails.md +541 -0
  97. package/docs/guardrails-concept.svg +252 -0
  98. package/docs/overlays-deep-dive.md +298 -0
  99. package/package.json +66 -0
@@ -0,0 +1,395 @@
1
+ /**
2
+ * TypeScript type generator from OpenAPI schemas
3
+ */
4
+ import { isReference, getRefName } from '../types.js';
5
+ /**
6
+ * Generate TypeScript type definitions from OpenAPI spec
7
+ */
8
+ export function generateTypes(spec) {
9
+ const lines = [];
10
+ lines.push('/**');
11
+ lines.push(' * Auto-generated TypeScript types from OpenAPI specification');
12
+ lines.push(` * Generated from: ${spec.info.title} v${spec.info.version}`);
13
+ lines.push(' * DO NOT EDIT MANUALLY');
14
+ lines.push(' */');
15
+ lines.push('');
16
+ // Always include ProblemDetails (RFC 9457) for error handling
17
+ lines.push(generateProblemDetailsType());
18
+ lines.push('');
19
+ // Generate types from components/schemas
20
+ if (spec.components?.schemas) {
21
+ for (const [name, schema] of Object.entries(spec.components.schemas)) {
22
+ // Skip if already generated (e.g., ProblemDetails)
23
+ if (name === 'ProblemDetails')
24
+ continue;
25
+ lines.push(generateSchemaType(name, schema, spec));
26
+ lines.push('');
27
+ }
28
+ }
29
+ // Generate request/response types from paths
30
+ const operationTypes = generateOperationTypes(spec);
31
+ if (operationTypes) {
32
+ lines.push('// Operation-specific types');
33
+ lines.push(operationTypes);
34
+ }
35
+ return lines.join('\n');
36
+ }
37
+ /**
38
+ * Generate ProblemDetails type (RFC 9457)
39
+ * This is always included for standardized error handling
40
+ */
41
+ function generateProblemDetailsType() {
42
+ return `/**
43
+ * RFC 9457 Problem Details for HTTP APIs
44
+ * @see https://www.rfc-editor.org/rfc/rfc9457.html
45
+ */
46
+ export interface ProblemDetails {
47
+ /** A URI reference that identifies the problem type */
48
+ type: string;
49
+ /** A short, human-readable summary */
50
+ title: string;
51
+ /** The HTTP status code */
52
+ status: number;
53
+ /** A human-readable explanation specific to this occurrence */
54
+ detail?: string;
55
+ /** A URI reference to the specific occurrence */
56
+ instance?: string;
57
+ /** Application-specific error code (SCREAMING_SNAKE_CASE) */
58
+ code?: string;
59
+ /** Request trace ID for debugging */
60
+ traceId?: string;
61
+ /** Detailed validation errors */
62
+ errors?: ValidationError[];
63
+ /** Additional properties */
64
+ [key: string]: unknown;
65
+ }
66
+
67
+ /**
68
+ * Validation error detail
69
+ */
70
+ export interface ValidationError {
71
+ /** JSON Pointer to the invalid field */
72
+ pointer: string;
73
+ /** Error message for this field */
74
+ detail: string;
75
+ }`;
76
+ }
77
+ /**
78
+ * Generate TypeScript type for a single schema
79
+ */
80
+ function generateSchemaType(name, schema, spec) {
81
+ if (isReference(schema)) {
82
+ const refName = getRefName(schema.$ref);
83
+ return `export type ${name} = ${refName};`;
84
+ }
85
+ // Handle allOf, oneOf, anyOf
86
+ if (schema.allOf) {
87
+ const types = schema.allOf.map(s => schemaToTypeString(s, spec)).join(' & ');
88
+ return `export type ${name} = ${types};`;
89
+ }
90
+ if (schema.oneOf) {
91
+ const types = schema.oneOf.map(s => schemaToTypeString(s, spec)).join(' | ');
92
+ return `export type ${name} = ${types};`;
93
+ }
94
+ if (schema.anyOf) {
95
+ const types = schema.anyOf.map(s => schemaToTypeString(s, spec)).join(' | ');
96
+ return `export type ${name} = ${types};`;
97
+ }
98
+ // Handle object type
99
+ if (schema.type === 'object' || schema.properties) {
100
+ return generateInterfaceType(name, schema, spec);
101
+ }
102
+ // Handle enum
103
+ if (schema.enum) {
104
+ const enumValues = schema.enum.map(v => typeof v === 'string' ? `'${v}'` : String(v)).join(' | ');
105
+ return `export type ${name} = ${enumValues};`;
106
+ }
107
+ // Handle array
108
+ if (schema.type === 'array' && schema.items) {
109
+ const itemType = schemaToTypeString(schema.items, spec);
110
+ return `export type ${name} = ${itemType}[];`;
111
+ }
112
+ // Handle primitive types
113
+ const tsType = primitiveToTsType(schema);
114
+ return `export type ${name} = ${tsType};`;
115
+ }
116
+ /**
117
+ * Generate interface type for object schema
118
+ */
119
+ function generateInterfaceType(name, schema, spec) {
120
+ const lines = [];
121
+ const required = new Set(schema.required || []);
122
+ if (schema.description) {
123
+ lines.push(`/** ${schema.description} */`);
124
+ }
125
+ lines.push(`export interface ${name} {`);
126
+ if (schema.properties) {
127
+ for (const [propName, propSchema] of Object.entries(schema.properties)) {
128
+ const isRequired = required.has(propName);
129
+ const tsType = schemaToTypeString(propSchema, spec);
130
+ const optional = isRequired ? '' : '?';
131
+ // Add description as JSDoc if available
132
+ if (!isReference(propSchema) && propSchema.description) {
133
+ lines.push(` /** ${propSchema.description} */`);
134
+ }
135
+ lines.push(` ${propName}${optional}: ${tsType};`);
136
+ }
137
+ }
138
+ // Handle additionalProperties
139
+ if (schema.additionalProperties) {
140
+ if (typeof schema.additionalProperties === 'boolean') {
141
+ lines.push(' [key: string]: unknown;');
142
+ }
143
+ else {
144
+ const valueType = schemaToTypeString(schema.additionalProperties, spec);
145
+ lines.push(` [key: string]: ${valueType};`);
146
+ }
147
+ }
148
+ lines.push('}');
149
+ return lines.join('\n');
150
+ }
151
+ /**
152
+ * Convert schema to TypeScript type string
153
+ */
154
+ function schemaToTypeString(schema, spec) {
155
+ if (isReference(schema)) {
156
+ return getRefName(schema.$ref);
157
+ }
158
+ // Handle nullable
159
+ const nullable = schema.nullable ? ' | null' : '';
160
+ // Handle allOf, oneOf, anyOf
161
+ if (schema.allOf) {
162
+ const types = schema.allOf.map(s => schemaToTypeString(s, spec)).join(' & ');
163
+ return `(${types})${nullable}`;
164
+ }
165
+ if (schema.oneOf) {
166
+ const types = schema.oneOf.map(s => schemaToTypeString(s, spec)).join(' | ');
167
+ return `(${types})${nullable}`;
168
+ }
169
+ if (schema.anyOf) {
170
+ const types = schema.anyOf.map(s => schemaToTypeString(s, spec)).join(' | ');
171
+ return `(${types})${nullable}`;
172
+ }
173
+ // Handle enum
174
+ if (schema.enum) {
175
+ const enumValues = schema.enum.map(v => typeof v === 'string' ? `'${v}'` : String(v)).join(' | ');
176
+ return `(${enumValues})${nullable}`;
177
+ }
178
+ // Handle array
179
+ if (schema.type === 'array' && schema.items) {
180
+ const itemType = schemaToTypeString(schema.items, spec);
181
+ // Wrap item type in parentheses if it contains union types
182
+ const wrappedItemType = itemType.includes(' | ') || itemType.includes(' & ')
183
+ ? `(${itemType})`
184
+ : itemType;
185
+ return `${wrappedItemType}[]${nullable}`;
186
+ }
187
+ // Handle object with inline properties
188
+ if (schema.type === 'object' || schema.properties) {
189
+ if (!schema.properties) {
190
+ if (schema.additionalProperties) {
191
+ if (typeof schema.additionalProperties === 'boolean') {
192
+ return `Record<string, unknown>${nullable}`;
193
+ }
194
+ const valueType = schemaToTypeString(schema.additionalProperties, spec);
195
+ return `Record<string, ${valueType}>${nullable}`;
196
+ }
197
+ return `Record<string, unknown>${nullable}`;
198
+ }
199
+ // Inline object - generate inline type
200
+ const props = [];
201
+ const required = new Set(schema.required || []);
202
+ for (const [propName, propSchema] of Object.entries(schema.properties)) {
203
+ const isRequired = required.has(propName);
204
+ const tsType = schemaToTypeString(propSchema, spec);
205
+ const optional = isRequired ? '' : '?';
206
+ props.push(`${propName}${optional}: ${tsType}`);
207
+ }
208
+ return `{ ${props.join('; ')} }${nullable}`;
209
+ }
210
+ // Handle primitive types
211
+ return primitiveToTsType(schema) + nullable;
212
+ }
213
+ /**
214
+ * Convert primitive OpenAPI type to TypeScript type
215
+ */
216
+ function primitiveToTsType(schema) {
217
+ switch (schema.type) {
218
+ case 'string':
219
+ if (schema.format === 'date' || schema.format === 'date-time') {
220
+ return 'string'; // Keep as string, not Date
221
+ }
222
+ return 'string';
223
+ case 'integer':
224
+ case 'number':
225
+ return 'number';
226
+ case 'boolean':
227
+ return 'boolean';
228
+ case 'null':
229
+ return 'null';
230
+ default:
231
+ return 'unknown';
232
+ }
233
+ }
234
+ /**
235
+ * Generate a valid TypeScript identifier from domain and method
236
+ * e.g., "DashboardDomain" + "getSchema" -> "DashboardDomain_getSchema"
237
+ */
238
+ function getOperationTypeName(operation) {
239
+ const domain = operation['x-micro-contracts-domain'];
240
+ const method = operation['x-micro-contracts-method'];
241
+ if (domain && method) {
242
+ // Use x-micro-contracts-domain + _ + x-micro-contracts-method for type name
243
+ return `${domain}_${method}`;
244
+ }
245
+ // Fallback: sanitize operationId (replace dots with underscores, etc.)
246
+ if (operation.operationId) {
247
+ return operation.operationId.replace(/[^a-zA-Z0-9]/g, '_');
248
+ }
249
+ return 'Unknown';
250
+ }
251
+ /**
252
+ * Generate parameter types for operations
253
+ */
254
+ function generateOperationTypes(spec) {
255
+ const lines = [];
256
+ const generatedTypes = new Set();
257
+ for (const [path, pathItem] of Object.entries(spec.paths)) {
258
+ for (const method of ['get', 'post', 'put', 'patch', 'delete']) {
259
+ const operation = pathItem[method];
260
+ if (!operation)
261
+ continue;
262
+ const baseTypeName = getOperationTypeName(operation);
263
+ // Collect all parameters (path + query) into a single Params type
264
+ const allParams = (operation.parameters || []).filter((p) => !isReference(p) && (p.in === 'query' || p.in === 'path'));
265
+ let paramsTypeName;
266
+ if (allParams.length > 0) {
267
+ paramsTypeName = `${baseTypeName}Params`;
268
+ if (!generatedTypes.has(paramsTypeName)) {
269
+ generatedTypes.add(paramsTypeName);
270
+ lines.push(generateParamsType(paramsTypeName, allParams, spec));
271
+ lines.push('');
272
+ }
273
+ }
274
+ // Get request body type name
275
+ let bodyTypeName;
276
+ if (operation.requestBody) {
277
+ if (isReference(operation.requestBody)) {
278
+ // Referenced request body - extract name
279
+ bodyTypeName = getRefName(operation.requestBody.$ref);
280
+ }
281
+ else {
282
+ const content = operation.requestBody.content?.['application/json'];
283
+ if (content?.schema) {
284
+ if (isReference(content.schema)) {
285
+ bodyTypeName = getRefName(content.schema.$ref);
286
+ }
287
+ else if (content.schema.properties || content.schema.type === 'object') {
288
+ // Generate inline body type
289
+ bodyTypeName = `${baseTypeName}Body`;
290
+ if (!generatedTypes.has(bodyTypeName)) {
291
+ generatedTypes.add(bodyTypeName);
292
+ lines.push(generateRequestBodyType(bodyTypeName, content.schema, spec));
293
+ lines.push('');
294
+ }
295
+ }
296
+ }
297
+ }
298
+ }
299
+ // Generate Input type that combines params and body
300
+ // - params are flattened (path + query combined)
301
+ // - body becomes 'data' (not HTTP-specific)
302
+ // - Always generate (empty object for parameterless operations)
303
+ const inputTypeName = `${baseTypeName}Input`;
304
+ if (!generatedTypes.has(inputTypeName)) {
305
+ generatedTypes.add(inputTypeName);
306
+ lines.push(generateInputType(inputTypeName, paramsTypeName, bodyTypeName));
307
+ lines.push('');
308
+ }
309
+ }
310
+ }
311
+ return lines.join('\n');
312
+ }
313
+ /**
314
+ * Generate Input type that combines params and body
315
+ * - params (path + query) are flattened (HTTP details hidden)
316
+ * - body is renamed to 'data' (not HTTP-specific naming)
317
+ * - parameterless operations get empty object type
318
+ *
319
+ * Examples:
320
+ * - No params: type Input = Record<string, never>; (empty object)
321
+ * - Params only: type Input = Params;
322
+ * - Body only: type Input = { data: Body };
323
+ * - Params + Body: type Input = Params & { data: Body };
324
+ */
325
+ function generateInputType(name, paramsType, bodyType) {
326
+ const parts = [];
327
+ // Flatten params (path + query parameters become direct properties)
328
+ if (paramsType) {
329
+ parts.push(paramsType);
330
+ }
331
+ // Body becomes 'data' property (not HTTP-specific naming)
332
+ if (bodyType) {
333
+ parts.push(`{ data: ${bodyType} }`);
334
+ }
335
+ // Generate type alias
336
+ if (parts.length === 0) {
337
+ // Parameterless operation: empty object type
338
+ return `export type ${name} = Record<string, never>;`;
339
+ }
340
+ else if (parts.length === 1) {
341
+ return `export type ${name} = ${parts[0]};`;
342
+ }
343
+ else {
344
+ return `export type ${name} = ${parts.join(' & ')};`;
345
+ }
346
+ }
347
+ /**
348
+ * Generate request body interface
349
+ */
350
+ function generateRequestBodyType(name, schema, spec) {
351
+ const lines = [];
352
+ lines.push(`export interface ${name} {`);
353
+ if (schema.properties) {
354
+ const required = new Set(schema.required || []);
355
+ for (const [propName, propSchema] of Object.entries(schema.properties)) {
356
+ const isRequired = required.has(propName);
357
+ const optional = isRequired ? '' : '?';
358
+ const tsType = schemaToTypeString(propSchema, spec);
359
+ if (isReference(propSchema)) {
360
+ // No description for refs
361
+ }
362
+ else if (propSchema.description) {
363
+ lines.push(` /** ${propSchema.description} */`);
364
+ }
365
+ lines.push(` ${propName}${optional}: ${tsType};`);
366
+ }
367
+ }
368
+ lines.push('}');
369
+ return lines.join('\n');
370
+ }
371
+ /**
372
+ * Generate params interface (combines path + query parameters)
373
+ */
374
+ function generateParamsType(name, params, spec) {
375
+ const lines = [];
376
+ lines.push(`export interface ${name} {`);
377
+ for (const param of params) {
378
+ const optional = param.required ? '' : '?';
379
+ let tsType = 'unknown';
380
+ if (param.schema) {
381
+ tsType = schemaToTypeString(param.schema, spec);
382
+ }
383
+ if (param.description) {
384
+ lines.push(` /** ${param.description} */`);
385
+ }
386
+ // Use OpenAPI parameter name as-is (quoted for names with special chars)
387
+ lines.push(` '${param.name}'${optional}: ${tsType};`);
388
+ }
389
+ lines.push('}');
390
+ return lines.join('\n');
391
+ }
392
+ function capitalize(str) {
393
+ return str.charAt(0).toUpperCase() + str.slice(1);
394
+ }
395
+ //# sourceMappingURL=typeGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeGenerator.js","sourceRoot":"","sources":["../../src/generator/typeGenerator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Allowlist verification for guardrails
3
+ *
4
+ * Verifies that changed files are within allowed boundaries.
5
+ */
6
+ import type { GuardrailsConfig, AllowlistResult, CheckResult, CheckOptions } from './types.js';
7
+ /**
8
+ * Simple glob pattern matching with negation support
9
+ * Patterns are evaluated top-to-bottom; last match wins.
10
+ * - "!pattern" → if matched, result becomes false (exclude)
11
+ * - "pattern" → if matched, result becomes true (include)
12
+ */
13
+ export declare function matchWithNegation(patterns: string[] | undefined, file: string): boolean;
14
+ /**
15
+ * Simple glob pattern matching
16
+ * Supports:
17
+ * - * matches any characters except /
18
+ * - ** matches any characters including / (zero or more path segments)
19
+ * - ? matches single character
20
+ */
21
+ export declare function matchGlob(file: string, pattern: string): boolean;
22
+ /**
23
+ * Get list of changed files, filtered to a specific base directory
24
+ */
25
+ export declare function getChangedFiles(options: {
26
+ /** Path to file containing list of changed files */
27
+ changedFilesPath?: string;
28
+ /** Base ref for git diff (default: HEAD) */
29
+ baseRef?: string;
30
+ /** Base directory to filter files (only files under this dir are returned) */
31
+ baseDir?: string;
32
+ }): string[];
33
+ /**
34
+ * Verify changed files against allowlist
35
+ */
36
+ export declare function verifyAllowlist(changedFiles: string[], config: GuardrailsConfig): AllowlistResult;
37
+ /**
38
+ * Run allowlist check
39
+ */
40
+ export declare function runAllowlistCheck(options: CheckOptions): Promise<CheckResult>;
41
+ /**
42
+ * Format allowlist result for CLI output
43
+ */
44
+ export declare function formatAllowlistResult(result: AllowlistResult): string;
45
+ //# sourceMappingURL=allowlist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allowlist.d.ts","sourceRoot":"","sources":["../../src/guardrails/allowlist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAsB,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGnH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAgBvF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAMhE;AA8DD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,EAAE,CA2DX;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EAAE,EACtB,MAAM,EAAE,gBAAgB,GACvB,eAAe,CA2BjB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAyDnF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAiBrE"}