container-superposition 0.1.1 → 0.1.3

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 (136) hide show
  1. package/README.md +206 -1
  2. package/dist/scripts/init.js +235 -179
  3. package/dist/scripts/init.js.map +1 -1
  4. package/dist/tool/commands/doctor.d.ts +15 -0
  5. package/dist/tool/commands/doctor.d.ts.map +1 -0
  6. package/dist/tool/commands/doctor.js +862 -0
  7. package/dist/tool/commands/doctor.js.map +1 -0
  8. package/dist/tool/commands/explain.d.ts +13 -0
  9. package/dist/tool/commands/explain.d.ts.map +1 -0
  10. package/dist/tool/commands/explain.js +211 -0
  11. package/dist/tool/commands/explain.js.map +1 -0
  12. package/dist/tool/commands/list.d.ts +16 -0
  13. package/dist/tool/commands/list.d.ts.map +1 -0
  14. package/dist/tool/commands/list.js +121 -0
  15. package/dist/tool/commands/list.js.map +1 -0
  16. package/dist/tool/commands/plan.d.ts +16 -0
  17. package/dist/tool/commands/plan.d.ts.map +1 -0
  18. package/dist/tool/commands/plan.js +329 -0
  19. package/dist/tool/commands/plan.js.map +1 -0
  20. package/dist/tool/questionnaire/composer.d.ts +6 -1
  21. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  22. package/dist/tool/questionnaire/composer.js +300 -202
  23. package/dist/tool/questionnaire/composer.js.map +1 -1
  24. package/dist/tool/readme/markdown-parser.d.ts.map +1 -1
  25. package/dist/tool/readme/markdown-parser.js.map +1 -1
  26. package/dist/tool/readme/readme-generator.d.ts.map +1 -1
  27. package/dist/tool/readme/readme-generator.js +11 -6
  28. package/dist/tool/readme/readme-generator.js.map +1 -1
  29. package/dist/tool/schema/deployment-targets.d.ts +77 -0
  30. package/dist/tool/schema/deployment-targets.d.ts.map +1 -0
  31. package/dist/tool/schema/deployment-targets.js +91 -0
  32. package/dist/tool/schema/deployment-targets.js.map +1 -0
  33. package/dist/tool/schema/manifest-migrations.d.ts +51 -0
  34. package/dist/tool/schema/manifest-migrations.d.ts.map +1 -0
  35. package/dist/tool/schema/manifest-migrations.js +159 -0
  36. package/dist/tool/schema/manifest-migrations.js.map +1 -0
  37. package/dist/tool/schema/overlay-loader.d.ts +1 -1
  38. package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
  39. package/dist/tool/schema/overlay-loader.js +42 -14
  40. package/dist/tool/schema/overlay-loader.js.map +1 -1
  41. package/dist/tool/schema/types.d.ts +44 -2
  42. package/dist/tool/schema/types.d.ts.map +1 -1
  43. package/dist/tool/utils/merge.d.ts +134 -0
  44. package/dist/tool/utils/merge.d.ts.map +1 -0
  45. package/dist/tool/utils/merge.js +277 -0
  46. package/dist/tool/utils/merge.js.map +1 -0
  47. package/dist/tool/utils/port-utils.d.ts +29 -0
  48. package/dist/tool/utils/port-utils.d.ts.map +1 -0
  49. package/dist/tool/utils/port-utils.js +128 -0
  50. package/dist/tool/utils/port-utils.js.map +1 -0
  51. package/dist/tool/utils/version.d.ts +9 -0
  52. package/dist/tool/utils/version.d.ts.map +1 -0
  53. package/dist/tool/utils/version.js +32 -0
  54. package/dist/tool/utils/version.js.map +1 -0
  55. package/docs/architecture.md +25 -21
  56. package/docs/deployment-targets.md +150 -0
  57. package/docs/discovery-commands.md +442 -0
  58. package/docs/merge-strategy.md +700 -0
  59. package/docs/minimal-and-editor.md +265 -0
  60. package/docs/overlay-imports.md +209 -0
  61. package/docs/overlay-manifest-refactoring.md +2 -2
  62. package/docs/overlay-metadata-archive.md +1 -1
  63. package/docs/overlays.md +91 -23
  64. package/docs/presets-architecture.md +3 -3
  65. package/docs/presets.md +1 -1
  66. package/docs/publishing.md +36 -35
  67. package/docs/team-workflow.md +540 -0
  68. package/overlays/.presets/data-engineering.yml +392 -0
  69. package/overlays/.presets/event-sourced-service.yml +262 -0
  70. package/overlays/.presets/frontend.yml +287 -0
  71. package/overlays/.presets/k8s-operator-dev.yml +462 -0
  72. package/overlays/.registry/README.md +1 -1
  73. package/overlays/.registry/deployment-targets.yml +54 -0
  74. package/overlays/.shared/README.md +43 -0
  75. package/overlays/.shared/compose/common-healthchecks.yml +38 -0
  76. package/overlays/.shared/otel/instrumentation.env +20 -0
  77. package/overlays/.shared/otel/otel-base-config.yaml +30 -0
  78. package/overlays/.shared/vscode/recommended-extensions.json +14 -0
  79. package/overlays/README.md +1 -1
  80. package/overlays/codex/overlay.yml +1 -0
  81. package/overlays/duckdb/README.md +274 -0
  82. package/overlays/duckdb/devcontainer.patch.json +10 -0
  83. package/overlays/duckdb/overlay.yml +17 -0
  84. package/overlays/duckdb/setup.sh +45 -0
  85. package/overlays/duckdb/verify.sh +32 -0
  86. package/overlays/git-helpers/overlay.yml +1 -0
  87. package/overlays/grafana/README.md +5 -5
  88. package/overlays/grafana/dashboard-provider.yml +1 -1
  89. package/overlays/grafana/docker-compose.yml +2 -2
  90. package/overlays/grafana/overlay.yml +6 -1
  91. package/overlays/jaeger/overlay.yml +16 -3
  92. package/overlays/jupyter/.env.example +6 -0
  93. package/overlays/jupyter/README.md +210 -0
  94. package/overlays/jupyter/devcontainer.patch.json +14 -0
  95. package/overlays/jupyter/docker-compose.yml +23 -0
  96. package/overlays/jupyter/overlay.yml +18 -0
  97. package/overlays/jupyter/verify.sh +35 -0
  98. package/overlays/kind/README.md +221 -0
  99. package/overlays/kind/devcontainer.patch.json +10 -0
  100. package/overlays/kind/overlay.yml +18 -0
  101. package/overlays/kind/setup.sh +43 -0
  102. package/overlays/kind/verify.sh +40 -0
  103. package/overlays/localstack/.env.example +6 -0
  104. package/overlays/localstack/README.md +188 -0
  105. package/overlays/localstack/devcontainer.patch.json +21 -0
  106. package/overlays/localstack/docker-compose.yml +25 -0
  107. package/overlays/localstack/overlay.yml +18 -0
  108. package/overlays/localstack/verify.sh +47 -0
  109. package/overlays/loki/overlay.yml +6 -1
  110. package/overlays/modern-cli-tools/overlay.yml +1 -0
  111. package/overlays/mongodb/overlay.yml +12 -2
  112. package/overlays/mysql/overlay.yml +12 -2
  113. package/overlays/nats/overlay.yml +12 -2
  114. package/overlays/openapi-tools/README.md +243 -0
  115. package/overlays/openapi-tools/devcontainer.patch.json +10 -0
  116. package/overlays/openapi-tools/overlay.yml +16 -0
  117. package/overlays/openapi-tools/setup.sh +45 -0
  118. package/overlays/openapi-tools/verify.sh +51 -0
  119. package/overlays/otel-collector/overlay.yml.example +26 -0
  120. package/overlays/postgres/overlay.yml +6 -1
  121. package/overlays/prometheus/overlay.yml +6 -1
  122. package/overlays/rabbitmq/overlay.yml +12 -2
  123. package/overlays/redis/overlay.yml +6 -1
  124. package/overlays/tilt/README.md +259 -0
  125. package/overlays/tilt/devcontainer.patch.json +17 -0
  126. package/overlays/tilt/overlay.yml +19 -0
  127. package/overlays/tilt/setup.sh +25 -0
  128. package/overlays/tilt/verify.sh +24 -0
  129. package/package.json +8 -6
  130. package/tool/README.md +12 -16
  131. package/tool/schema/overlay-manifest.schema.json +64 -4
  132. package/tool/schema/superposition-manifest.schema.json +104 -0
  133. /package/overlays/{presets → .presets}/docs-site.yml +0 -0
  134. /package/overlays/{presets → .presets}/fullstack.yml +0 -0
  135. /package/overlays/{presets → .presets}/microservice.yml +0 -0
  136. /package/overlays/{presets → .presets}/web-api.yml +0 -0
@@ -0,0 +1,329 @@
1
+ /**
2
+ * Plan command - Preview what will happen before generation
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import chalk from 'chalk';
7
+ import boxen from 'boxen';
8
+ import { extractPorts } from '../utils/port-utils.js';
9
+ /**
10
+ * Resolve dependencies recursively
11
+ */
12
+ function resolveDependencies(selectedIds, overlaysConfig) {
13
+ const overlayMap = new Map(overlaysConfig.overlays.map((o) => [o.id, o]));
14
+ const resolved = new Set(selectedIds);
15
+ const autoAdded = [];
16
+ const processDeps = (id) => {
17
+ const overlay = overlayMap.get(id);
18
+ if (!overlay || !overlay.requires)
19
+ return;
20
+ for (const reqId of overlay.requires) {
21
+ if (!resolved.has(reqId)) {
22
+ resolved.add(reqId);
23
+ autoAdded.push(reqId);
24
+ processDeps(reqId); // Recursive
25
+ }
26
+ }
27
+ };
28
+ for (const id of selectedIds) {
29
+ processDeps(id);
30
+ }
31
+ return {
32
+ resolved: Array.from(resolved),
33
+ autoAdded,
34
+ };
35
+ }
36
+ /**
37
+ * Detect conflicts in selected overlays
38
+ */
39
+ function detectConflicts(overlayIds, overlaysConfig) {
40
+ const overlayMap = new Map(overlaysConfig.overlays.map((o) => [o.id, o]));
41
+ const conflicts = [];
42
+ for (const id of overlayIds) {
43
+ const overlay = overlayMap.get(id);
44
+ if (!overlay || !overlay.conflicts || overlay.conflicts.length === 0)
45
+ continue;
46
+ const conflicting = overlay.conflicts.filter((c) => overlayIds.includes(c));
47
+ if (conflicting.length > 0) {
48
+ conflicts.push({
49
+ overlay: id,
50
+ conflictsWith: conflicting,
51
+ });
52
+ }
53
+ }
54
+ return conflicts;
55
+ }
56
+ /**
57
+ * Get all files that will be created/modified
58
+ */
59
+ function getFilesToCreate(overlayIds, overlaysDir, outputPath) {
60
+ const files = [];
61
+ // Base devcontainer files
62
+ files.push(path.join(outputPath, 'devcontainer.json'));
63
+ files.push(path.join(outputPath, 'superposition.json'));
64
+ files.push(path.join(outputPath, 'README.md'));
65
+ // Check if any overlay has .env.example
66
+ let hasEnvExample = false;
67
+ for (const id of overlayIds) {
68
+ const envPath = path.join(overlaysDir, id, '.env.example');
69
+ if (fs.existsSync(envPath)) {
70
+ hasEnvExample = true;
71
+ break;
72
+ }
73
+ }
74
+ if (hasEnvExample) {
75
+ files.push(path.join(outputPath, '.env.example'));
76
+ }
77
+ // Check for docker-compose
78
+ for (const id of overlayIds) {
79
+ const composePath = path.join(overlaysDir, id, 'docker-compose.yml');
80
+ if (fs.existsSync(composePath)) {
81
+ files.push(path.join(outputPath, 'docker-compose.yml'));
82
+ break;
83
+ }
84
+ }
85
+ // Check if we need scripts directory
86
+ const hasScripts = overlayIds.some((id) => fs.existsSync(path.join(overlaysDir, id, 'setup.sh')) ||
87
+ fs.existsSync(path.join(overlaysDir, id, 'verify.sh')));
88
+ // Overlay-specific files (mirroring composer behavior)
89
+ for (const id of overlayIds) {
90
+ const overlayDir = path.join(overlaysDir, id);
91
+ if (!fs.existsSync(overlayDir))
92
+ continue;
93
+ const overlayEntries = fs.readdirSync(overlayDir, { withFileTypes: true });
94
+ for (const entry of overlayEntries) {
95
+ const name = entry.name;
96
+ // Setup and verify scripts are copied into .devcontainer/scripts with overlay suffix
97
+ if (entry.isFile() && name.startsWith('setup') && name.endsWith('.sh')) {
98
+ files.push(path.join(outputPath, 'scripts', `setup-${id}.sh`));
99
+ }
100
+ if (entry.isFile() && name.startsWith('verify') && name.endsWith('.sh')) {
101
+ files.push(path.join(outputPath, 'scripts', `verify-${id}.sh`));
102
+ }
103
+ // Global packages/tools files and directories get an <overlay> suffix
104
+ if (name.startsWith('global-')) {
105
+ if (entry.isFile()) {
106
+ const ext = path.extname(name);
107
+ const base = ext.length > 0 ? name.slice(0, -ext.length) : name;
108
+ const targetName = `${base}-${id}${ext}`;
109
+ files.push(path.join(outputPath, targetName));
110
+ }
111
+ else if (entry.isDirectory()) {
112
+ const targetName = `${name}-${id}`;
113
+ files.push(path.join(outputPath, targetName));
114
+ }
115
+ }
116
+ }
117
+ }
118
+ // Deduplicate and sort
119
+ return Array.from(new Set(files)).sort();
120
+ }
121
+ /**
122
+ * Get port mappings with offset applied
123
+ */
124
+ function getPortMappings(overlayIds, overlaysConfig, portOffset) {
125
+ const overlayMap = new Map(overlaysConfig.overlays.map((o) => [o.id, o]));
126
+ const mappings = [];
127
+ for (const id of overlayIds) {
128
+ const overlay = overlayMap.get(id);
129
+ if (!overlay || !overlay.ports || overlay.ports.length === 0)
130
+ continue;
131
+ // Extract numeric ports from overlay
132
+ const ports = extractPorts([overlay]);
133
+ mappings.push({
134
+ overlay: id,
135
+ ports: ports,
136
+ offsetPorts: ports.map((p) => p + portOffset),
137
+ });
138
+ }
139
+ return mappings;
140
+ }
141
+ /**
142
+ * Format plan as text
143
+ */
144
+ function formatAsText(plan, overlaysConfig) {
145
+ const lines = [];
146
+ const overlayMap = new Map(overlaysConfig.overlays.map((o) => [o.id, o]));
147
+ lines.push(boxen(chalk.bold('Generation Plan'), {
148
+ padding: 0.5,
149
+ borderColor: 'cyan',
150
+ borderStyle: 'round',
151
+ }));
152
+ // Stack
153
+ lines.push('');
154
+ lines.push(chalk.bold('Stack:') + ` ${plan.stack}`);
155
+ // Overlays
156
+ lines.push('');
157
+ lines.push(chalk.bold('Overlays Selected:'));
158
+ for (const id of plan.selectedOverlays) {
159
+ const overlay = overlayMap.get(id);
160
+ const name = overlay ? ` (${overlay.name})` : '';
161
+ lines.push(` ✓ ${chalk.cyan(id)}${chalk.gray(name)}`);
162
+ }
163
+ // Auto-added dependencies
164
+ if (plan.autoAddedOverlays.length > 0) {
165
+ lines.push('');
166
+ lines.push(chalk.bold('Auto-Added Dependencies:'));
167
+ for (const id of plan.autoAddedOverlays) {
168
+ const overlay = overlayMap.get(id);
169
+ const name = overlay ? ` (${overlay.name})` : '';
170
+ lines.push(` ${chalk.yellow('+')} ${chalk.cyan(id)}${chalk.gray(name)}`);
171
+ }
172
+ }
173
+ // Conflicts
174
+ if (plan.conflicts.length > 0) {
175
+ lines.push('');
176
+ lines.push(chalk.bold.red('⚠ Conflicts Detected:'));
177
+ for (const conflict of plan.conflicts) {
178
+ lines.push(` ${chalk.red('✗')} ${chalk.cyan(conflict.overlay)} conflicts with: ${conflict.conflictsWith.join(', ')}`);
179
+ }
180
+ lines.push('');
181
+ lines.push(chalk.yellow(' These conflicts must be resolved before generation.'));
182
+ }
183
+ // Port mappings
184
+ if (plan.portMappings.length > 0) {
185
+ lines.push('');
186
+ lines.push(chalk.bold('Port Mappings:'));
187
+ if (plan.portOffset > 0) {
188
+ lines.push(chalk.dim(` (Offset: +${plan.portOffset})`));
189
+ }
190
+ for (const mapping of plan.portMappings) {
191
+ for (let i = 0; i < mapping.ports.length; i++) {
192
+ const original = mapping.ports[i];
193
+ const offset = mapping.offsetPorts[i];
194
+ const arrow = plan.portOffset > 0 ? ` → ${offset}` : '';
195
+ lines.push(` ${chalk.cyan(mapping.overlay)}: ${original}${arrow}`);
196
+ }
197
+ }
198
+ }
199
+ // Files
200
+ lines.push('');
201
+ lines.push(chalk.bold('Files to Create/Modify:'));
202
+ const grouped = new Map();
203
+ for (const file of plan.files) {
204
+ const dir = path.dirname(file);
205
+ if (!grouped.has(dir)) {
206
+ grouped.set(dir, []);
207
+ }
208
+ grouped.get(dir).push(path.basename(file));
209
+ }
210
+ for (const [dir, files] of grouped) {
211
+ lines.push(` ${chalk.dim(dir)}/`);
212
+ for (const file of files) {
213
+ lines.push(` 📄 ${file}`);
214
+ }
215
+ }
216
+ return lines.join('\n');
217
+ }
218
+ /**
219
+ * Execute plan command
220
+ */
221
+ export async function planCommand(overlaysConfig, overlaysDir, options) {
222
+ try {
223
+ // Validate required options
224
+ if (!options.stack) {
225
+ console.error(chalk.red('✗ --stack is required for plan command'));
226
+ console.log(chalk.dim(' Example: container-superposition plan --stack compose --overlays postgres,grafana'));
227
+ process.exit(1);
228
+ }
229
+ // Validate stack value
230
+ const validStacks = ['plain', 'compose'];
231
+ if (!validStacks.includes(options.stack)) {
232
+ console.error(chalk.red(`✗ Invalid --stack value: ${options.stack}`));
233
+ console.log(chalk.dim(` Valid values are: ${validStacks.join(', ')}\n` +
234
+ ' Example: container-superposition plan --stack compose --overlays postgres,grafana'));
235
+ process.exit(1);
236
+ }
237
+ if (!options.overlays) {
238
+ console.error(chalk.red('✗ --overlays is required for plan command'));
239
+ console.log(chalk.dim(' Example: container-superposition plan --stack compose --overlays postgres,grafana'));
240
+ process.exit(1);
241
+ }
242
+ // Parse overlays - filter empty entries and deduplicate
243
+ const seenOverlayIds = new Set();
244
+ const selectedOverlays = options.overlays
245
+ .split(',')
246
+ .map((o) => o.trim())
247
+ .filter((id) => {
248
+ if (!id) {
249
+ return false;
250
+ }
251
+ if (seenOverlayIds.has(id)) {
252
+ return false;
253
+ }
254
+ seenOverlayIds.add(id);
255
+ return true;
256
+ });
257
+ const portOffset = options.portOffset || 0;
258
+ // Validate overlays exist
259
+ const overlayMap = new Map(overlaysConfig.overlays.map((o) => [o.id, o]));
260
+ for (const id of selectedOverlays) {
261
+ if (!overlayMap.has(id)) {
262
+ console.error(chalk.red(`✗ Unknown overlay: ${id}`));
263
+ console.log(chalk.dim('\n💡 Use "container-superposition list" to see available overlays\n'));
264
+ process.exit(1);
265
+ }
266
+ }
267
+ // Resolve dependencies
268
+ const { resolved, autoAdded } = resolveDependencies(selectedOverlays, overlaysConfig);
269
+ // Apply stack compatibility filtering (match composeDevContainer behavior)
270
+ let compatibleResolved = resolved;
271
+ const incompatible = [];
272
+ compatibleResolved = resolved.filter((id) => {
273
+ const overlay = overlayMap.get(id);
274
+ if (!overlay) {
275
+ return false;
276
+ }
277
+ // Check if overlay supports this stack
278
+ if (overlay.supports && overlay.supports.length > 0) {
279
+ const isCompatible = overlay.supports.includes(options.stack);
280
+ if (!isCompatible) {
281
+ incompatible.push(id);
282
+ }
283
+ return isCompatible;
284
+ }
285
+ // Empty supports array means supports all stacks
286
+ return true;
287
+ });
288
+ // Warn about incompatible overlays
289
+ for (const id of incompatible) {
290
+ console.warn(chalk.yellow(`⚠ Overlay "${id}" does not support stack "${options.stack}" and will be skipped.`));
291
+ }
292
+ // Detect conflicts
293
+ const conflicts = detectConflicts(compatibleResolved, overlaysConfig);
294
+ // Get port mappings
295
+ const portMappings = getPortMappings(compatibleResolved, overlaysConfig, portOffset);
296
+ // Get files to create
297
+ const files = getFilesToCreate(compatibleResolved, overlaysDir, '.devcontainer');
298
+ const plan = {
299
+ stack: options.stack,
300
+ selectedOverlays,
301
+ autoAddedOverlays: autoAdded,
302
+ conflicts,
303
+ portMappings,
304
+ files,
305
+ portOffset,
306
+ };
307
+ // Output as JSON
308
+ if (options.json) {
309
+ console.log(JSON.stringify(plan, null, 2));
310
+ return;
311
+ }
312
+ // Output as formatted text
313
+ console.log('\n' + formatAsText(plan, overlaysConfig) + '\n');
314
+ // Summary
315
+ if (conflicts.length > 0) {
316
+ console.log(chalk.yellow('⚠ Cannot proceed with generation due to conflicts. Remove conflicting overlays.\n'));
317
+ process.exit(1);
318
+ }
319
+ else {
320
+ console.log(chalk.green('✓ No conflicts detected. Ready to generate!\n') +
321
+ chalk.dim(` Run: container-superposition init --stack ${options.stack} --overlays ${options.overlays}${portOffset > 0 ? ` --port-offset ${portOffset}` : ''}\n`));
322
+ }
323
+ }
324
+ catch (error) {
325
+ console.error(chalk.red('✗ Error creating plan:'), error);
326
+ process.exit(1);
327
+ }
328
+ }
329
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../tool/commands/plan.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,11 @@
1
1
  import type { QuestionnaireAnswers } from '../schema/types.js';
2
+ /**
3
+ * Generate only the superposition.json manifest without creating .devcontainer files
4
+ * Used for team collaboration workflow where manifest is committed but .devcontainer is gitignored
5
+ */
6
+ export declare function generateManifestOnly(answers: QuestionnaireAnswers, overlaysDir?: string): Promise<void>;
2
7
  /**
3
8
  * Main composition logic
4
9
  */
5
- export declare function composeDevContainer(answers: QuestionnaireAnswers): Promise<void>;
10
+ export declare function composeDevContainer(answers: QuestionnaireAnswers, overlaysDir?: string): Promise<void>;
6
11
  //# sourceMappingURL=composer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../../tool/questionnaire/composer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,oBAAoB,EAQvB,MAAM,oBAAoB,CAAC;AA4/B5B;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0TtF"}
1
+ {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../../tool/questionnaire/composer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,oBAAoB,EASvB,MAAM,oBAAoB,CAAC;AAwnC5B;;;GAGG;AACH,wBAAsB,oBAAoB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,oBAAoB,EAC7B,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAkUf"}