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.
- package/README.md +206 -1
- package/dist/scripts/init.js +235 -179
- package/dist/scripts/init.js.map +1 -1
- package/dist/tool/commands/doctor.d.ts +15 -0
- package/dist/tool/commands/doctor.d.ts.map +1 -0
- package/dist/tool/commands/doctor.js +862 -0
- package/dist/tool/commands/doctor.js.map +1 -0
- package/dist/tool/commands/explain.d.ts +13 -0
- package/dist/tool/commands/explain.d.ts.map +1 -0
- package/dist/tool/commands/explain.js +211 -0
- package/dist/tool/commands/explain.js.map +1 -0
- package/dist/tool/commands/list.d.ts +16 -0
- package/dist/tool/commands/list.d.ts.map +1 -0
- package/dist/tool/commands/list.js +121 -0
- package/dist/tool/commands/list.js.map +1 -0
- package/dist/tool/commands/plan.d.ts +16 -0
- package/dist/tool/commands/plan.d.ts.map +1 -0
- package/dist/tool/commands/plan.js +329 -0
- package/dist/tool/commands/plan.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -1
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +300 -202
- package/dist/tool/questionnaire/composer.js.map +1 -1
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -1
- package/dist/tool/readme/markdown-parser.js.map +1 -1
- package/dist/tool/readme/readme-generator.d.ts.map +1 -1
- package/dist/tool/readme/readme-generator.js +11 -6
- package/dist/tool/readme/readme-generator.js.map +1 -1
- package/dist/tool/schema/deployment-targets.d.ts +77 -0
- package/dist/tool/schema/deployment-targets.d.ts.map +1 -0
- package/dist/tool/schema/deployment-targets.js +91 -0
- package/dist/tool/schema/deployment-targets.js.map +1 -0
- package/dist/tool/schema/manifest-migrations.d.ts +51 -0
- package/dist/tool/schema/manifest-migrations.d.ts.map +1 -0
- package/dist/tool/schema/manifest-migrations.js +159 -0
- package/dist/tool/schema/manifest-migrations.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +1 -1
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
- package/dist/tool/schema/overlay-loader.js +42 -14
- package/dist/tool/schema/overlay-loader.js.map +1 -1
- package/dist/tool/schema/types.d.ts +44 -2
- package/dist/tool/schema/types.d.ts.map +1 -1
- package/dist/tool/utils/merge.d.ts +134 -0
- package/dist/tool/utils/merge.d.ts.map +1 -0
- package/dist/tool/utils/merge.js +277 -0
- package/dist/tool/utils/merge.js.map +1 -0
- package/dist/tool/utils/port-utils.d.ts +29 -0
- package/dist/tool/utils/port-utils.d.ts.map +1 -0
- package/dist/tool/utils/port-utils.js +128 -0
- package/dist/tool/utils/port-utils.js.map +1 -0
- package/dist/tool/utils/version.d.ts +9 -0
- package/dist/tool/utils/version.d.ts.map +1 -0
- package/dist/tool/utils/version.js +32 -0
- package/dist/tool/utils/version.js.map +1 -0
- package/docs/architecture.md +25 -21
- package/docs/deployment-targets.md +150 -0
- package/docs/discovery-commands.md +442 -0
- package/docs/merge-strategy.md +700 -0
- package/docs/minimal-and-editor.md +265 -0
- package/docs/overlay-imports.md +209 -0
- package/docs/overlay-manifest-refactoring.md +2 -2
- package/docs/overlay-metadata-archive.md +1 -1
- package/docs/overlays.md +91 -23
- package/docs/presets-architecture.md +3 -3
- package/docs/presets.md +1 -1
- package/docs/publishing.md +36 -35
- package/docs/team-workflow.md +540 -0
- package/overlays/.presets/data-engineering.yml +392 -0
- package/overlays/.presets/event-sourced-service.yml +262 -0
- package/overlays/.presets/frontend.yml +287 -0
- package/overlays/.presets/k8s-operator-dev.yml +462 -0
- package/overlays/.registry/README.md +1 -1
- package/overlays/.registry/deployment-targets.yml +54 -0
- package/overlays/.shared/README.md +43 -0
- package/overlays/.shared/compose/common-healthchecks.yml +38 -0
- package/overlays/.shared/otel/instrumentation.env +20 -0
- package/overlays/.shared/otel/otel-base-config.yaml +30 -0
- package/overlays/.shared/vscode/recommended-extensions.json +14 -0
- package/overlays/README.md +1 -1
- package/overlays/codex/overlay.yml +1 -0
- package/overlays/duckdb/README.md +274 -0
- package/overlays/duckdb/devcontainer.patch.json +10 -0
- package/overlays/duckdb/overlay.yml +17 -0
- package/overlays/duckdb/setup.sh +45 -0
- package/overlays/duckdb/verify.sh +32 -0
- package/overlays/git-helpers/overlay.yml +1 -0
- package/overlays/grafana/README.md +5 -5
- package/overlays/grafana/dashboard-provider.yml +1 -1
- package/overlays/grafana/docker-compose.yml +2 -2
- package/overlays/grafana/overlay.yml +6 -1
- package/overlays/jaeger/overlay.yml +16 -3
- package/overlays/jupyter/.env.example +6 -0
- package/overlays/jupyter/README.md +210 -0
- package/overlays/jupyter/devcontainer.patch.json +14 -0
- package/overlays/jupyter/docker-compose.yml +23 -0
- package/overlays/jupyter/overlay.yml +18 -0
- package/overlays/jupyter/verify.sh +35 -0
- package/overlays/kind/README.md +221 -0
- package/overlays/kind/devcontainer.patch.json +10 -0
- package/overlays/kind/overlay.yml +18 -0
- package/overlays/kind/setup.sh +43 -0
- package/overlays/kind/verify.sh +40 -0
- package/overlays/localstack/.env.example +6 -0
- package/overlays/localstack/README.md +188 -0
- package/overlays/localstack/devcontainer.patch.json +21 -0
- package/overlays/localstack/docker-compose.yml +25 -0
- package/overlays/localstack/overlay.yml +18 -0
- package/overlays/localstack/verify.sh +47 -0
- package/overlays/loki/overlay.yml +6 -1
- package/overlays/modern-cli-tools/overlay.yml +1 -0
- package/overlays/mongodb/overlay.yml +12 -2
- package/overlays/mysql/overlay.yml +12 -2
- package/overlays/nats/overlay.yml +12 -2
- package/overlays/openapi-tools/README.md +243 -0
- package/overlays/openapi-tools/devcontainer.patch.json +10 -0
- package/overlays/openapi-tools/overlay.yml +16 -0
- package/overlays/openapi-tools/setup.sh +45 -0
- package/overlays/openapi-tools/verify.sh +51 -0
- package/overlays/otel-collector/overlay.yml.example +26 -0
- package/overlays/postgres/overlay.yml +6 -1
- package/overlays/prometheus/overlay.yml +6 -1
- package/overlays/rabbitmq/overlay.yml +12 -2
- package/overlays/redis/overlay.yml +6 -1
- package/overlays/tilt/README.md +259 -0
- package/overlays/tilt/devcontainer.patch.json +17 -0
- package/overlays/tilt/overlay.yml +19 -0
- package/overlays/tilt/setup.sh +25 -0
- package/overlays/tilt/verify.sh +24 -0
- package/package.json +8 -6
- package/tool/README.md +12 -16
- package/tool/schema/overlay-manifest.schema.json +64 -4
- package/tool/schema/superposition-manifest.schema.json +104 -0
- /package/overlays/{presets → .presets}/docs-site.yml +0 -0
- /package/overlays/{presets → .presets}/fullstack.yml +0 -0
- /package/overlays/{presets → .presets}/microservice.yml +0 -0
- /package/overlays/{presets → .presets}/web-api.yml +0 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manifest migration framework
|
|
3
|
+
*
|
|
4
|
+
* Handles automatic migration of superposition.json manifests between schema versions.
|
|
5
|
+
* Migrations are pure functions that transform manifests from one version to another.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Current manifest schema version
|
|
9
|
+
* Only increment when schema changes require migration
|
|
10
|
+
*/
|
|
11
|
+
export const CURRENT_MANIFEST_VERSION = '1';
|
|
12
|
+
/**
|
|
13
|
+
* Supported manifest versions (current + N-1)
|
|
14
|
+
* Older versions require manual intervention
|
|
15
|
+
*/
|
|
16
|
+
export const SUPPORTED_MANIFEST_VERSIONS = ['1'];
|
|
17
|
+
/**
|
|
18
|
+
* Registry of all migrations
|
|
19
|
+
* Migrations form a chain: v1 → v2 → v3, etc.
|
|
20
|
+
*/
|
|
21
|
+
const MIGRATIONS = [
|
|
22
|
+
// Future migrations will be added here
|
|
23
|
+
// Example:
|
|
24
|
+
// {
|
|
25
|
+
// from: '1',
|
|
26
|
+
// to: '2',
|
|
27
|
+
// description: 'Split overlays into presets and overlays',
|
|
28
|
+
// migrate: (m) => ({
|
|
29
|
+
// ...m,
|
|
30
|
+
// manifestVersion: '2',
|
|
31
|
+
// // apply transformations
|
|
32
|
+
// }),
|
|
33
|
+
// },
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* Detect manifest version from any manifest format
|
|
37
|
+
*/
|
|
38
|
+
export function detectManifestVersion(manifest) {
|
|
39
|
+
// New format: manifestVersion field
|
|
40
|
+
if (manifest.manifestVersion) {
|
|
41
|
+
return manifest.manifestVersion;
|
|
42
|
+
}
|
|
43
|
+
// Legacy format: version field represents manifest format
|
|
44
|
+
if (manifest.version) {
|
|
45
|
+
// Legacy manifests use version '0.1.0' for manifest format
|
|
46
|
+
return '1'; // Map legacy to version 1
|
|
47
|
+
}
|
|
48
|
+
// Unknown/invalid format
|
|
49
|
+
return '0';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check if a manifest version is supported
|
|
53
|
+
*/
|
|
54
|
+
export function isVersionSupported(version) {
|
|
55
|
+
return SUPPORTED_MANIFEST_VERSIONS.includes(version);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get migration path from one version to another
|
|
59
|
+
*/
|
|
60
|
+
function getMigrationPath(fromVersion, toVersion) {
|
|
61
|
+
const path = [];
|
|
62
|
+
let currentVersion = fromVersion;
|
|
63
|
+
// Build migration chain
|
|
64
|
+
while (currentVersion !== toVersion) {
|
|
65
|
+
const migration = MIGRATIONS.find((m) => m.from === currentVersion);
|
|
66
|
+
if (!migration) {
|
|
67
|
+
throw new Error(`No migration path from version ${fromVersion} to ${toVersion}. ` +
|
|
68
|
+
`Stuck at version ${currentVersion}.`);
|
|
69
|
+
}
|
|
70
|
+
path.push(migration);
|
|
71
|
+
currentVersion = migration.to;
|
|
72
|
+
}
|
|
73
|
+
return path;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Migrate manifest to current version
|
|
77
|
+
*
|
|
78
|
+
* @param manifest - Manifest in any supported version
|
|
79
|
+
* @returns Migrated manifest in current version
|
|
80
|
+
* @throws Error if manifest version is unsupported or migration fails
|
|
81
|
+
*/
|
|
82
|
+
export function migrateManifest(manifest) {
|
|
83
|
+
const currentVersion = detectManifestVersion(manifest);
|
|
84
|
+
// Handle legacy format (version field, no manifestVersion)
|
|
85
|
+
if (currentVersion === '1' && !manifest.manifestVersion) {
|
|
86
|
+
// This is a legacy v0.1.0 manifest - migrate to new format
|
|
87
|
+
const migrated = {
|
|
88
|
+
manifestVersion: '1',
|
|
89
|
+
generatedBy: manifest.version || 'unknown',
|
|
90
|
+
version: manifest.version, // Keep for backward compatibility
|
|
91
|
+
generated: manifest.generated,
|
|
92
|
+
baseTemplate: manifest.baseTemplate,
|
|
93
|
+
baseImage: manifest.baseImage,
|
|
94
|
+
overlays: manifest.overlays,
|
|
95
|
+
portOffset: manifest.portOffset,
|
|
96
|
+
preset: manifest.preset,
|
|
97
|
+
presetChoices: manifest.presetChoices,
|
|
98
|
+
autoResolved: manifest.autoResolved,
|
|
99
|
+
containerName: manifest.containerName,
|
|
100
|
+
customizations: manifest.customizations,
|
|
101
|
+
};
|
|
102
|
+
return migrated;
|
|
103
|
+
}
|
|
104
|
+
// Check if version is supported
|
|
105
|
+
if (!isVersionSupported(currentVersion)) {
|
|
106
|
+
throw new Error(`Manifest version ${currentVersion} is not supported. ` +
|
|
107
|
+
`Supported versions: ${SUPPORTED_MANIFEST_VERSIONS.join(', ')}. ` +
|
|
108
|
+
`Please upgrade your tool or regenerate the manifest.`);
|
|
109
|
+
}
|
|
110
|
+
// Already at current version
|
|
111
|
+
if (currentVersion === CURRENT_MANIFEST_VERSION) {
|
|
112
|
+
return manifest;
|
|
113
|
+
}
|
|
114
|
+
// Apply migration chain
|
|
115
|
+
const migrationPath = getMigrationPath(currentVersion, CURRENT_MANIFEST_VERSION);
|
|
116
|
+
let migrated = { ...manifest };
|
|
117
|
+
for (const migration of migrationPath) {
|
|
118
|
+
try {
|
|
119
|
+
migrated = migration.migrate(migrated);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
throw new Error(`Migration from ${migration.from} to ${migration.to} failed: ` +
|
|
123
|
+
`${error instanceof Error ? error.message : String(error)}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return migrated;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Check if a manifest needs migration
|
|
130
|
+
*/
|
|
131
|
+
export function needsMigration(manifest) {
|
|
132
|
+
const currentVersion = detectManifestVersion(manifest);
|
|
133
|
+
// Legacy format always needs migration
|
|
134
|
+
if (currentVersion === '1' && !manifest.manifestVersion) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
return currentVersion !== CURRENT_MANIFEST_VERSION;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get human-readable migration summary
|
|
141
|
+
*/
|
|
142
|
+
export function getMigrationSummary(manifest) {
|
|
143
|
+
const currentVersion = detectManifestVersion(manifest);
|
|
144
|
+
if (currentVersion === '1' && !manifest.manifestVersion) {
|
|
145
|
+
return `Legacy manifest (v${manifest.version || 'unknown'}) → v${CURRENT_MANIFEST_VERSION}`;
|
|
146
|
+
}
|
|
147
|
+
if (currentVersion === CURRENT_MANIFEST_VERSION) {
|
|
148
|
+
return 'No migration needed';
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
const path = getMigrationPath(currentVersion, CURRENT_MANIFEST_VERSION);
|
|
152
|
+
const steps = path.map((m) => `${m.from} → ${m.to}`).join(', ');
|
|
153
|
+
return `Migration path: ${steps}`;
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
return `Unsupported version ${currentVersion}`;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=manifest-migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-migrations.js","sourceRoot":"","sources":["../../../tool/schema/manifest-migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export declare function loadOverlayManifest(overlayDir: string): OverlayMetadata
|
|
|
15
15
|
*/
|
|
16
16
|
export declare function loadOverlayManifests(overlaysDir: string): Map<string, OverlayMetadata>;
|
|
17
17
|
/**
|
|
18
|
-
* Load preset metadata from presets directory
|
|
18
|
+
* Load preset metadata from .presets directory
|
|
19
19
|
*/
|
|
20
20
|
export declare function loadPresetMetadata(overlaysDir: string): OverlayMetadata[];
|
|
21
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay-loader.d.ts","sourceRoot":"","sources":["../../../tool/schema/overlay-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAElF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"overlay-loader.d.ts","sourceRoot":"","sources":["../../../tool/schema/overlay-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAElF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAsG9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAoCtF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE,CAyCzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;IACvD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,cAAc,CAAC;CACpC,CAAC,CAeD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1D,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC,CAeD;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CA0BpF;AACD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,CA+C5F"}
|
|
@@ -41,17 +41,47 @@ export function loadOverlayManifest(overlayDir) {
|
|
|
41
41
|
}
|
|
42
42
|
return [];
|
|
43
43
|
};
|
|
44
|
-
const
|
|
44
|
+
const ensurePortsArray = (value) => {
|
|
45
45
|
if (Array.isArray(value)) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
const normalized = [];
|
|
47
|
+
let hadInvalidValues = false;
|
|
48
|
+
for (const item of value) {
|
|
49
|
+
// Handle numeric port (legacy format)
|
|
50
|
+
if (typeof item === 'number' && Number.isFinite(item)) {
|
|
51
|
+
normalized.push(item);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
// Accept numeric strings (common in YAML authored by hand)
|
|
55
|
+
if (typeof item === 'string' && /^\d+$/.test(item.trim())) {
|
|
56
|
+
normalized.push(Number(item.trim()));
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
// Handle rich port metadata object
|
|
60
|
+
if (typeof item === 'object' && item !== null && 'port' in item) {
|
|
61
|
+
const port = item.port;
|
|
62
|
+
if (typeof port === 'number' && Number.isFinite(port)) {
|
|
63
|
+
normalized.push(item);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
hadInvalidValues = true;
|
|
50
68
|
}
|
|
51
|
-
|
|
69
|
+
if (hadInvalidValues) {
|
|
70
|
+
console.warn(`Warning: Invalid values in ports array in ${overlayDir}`);
|
|
71
|
+
}
|
|
72
|
+
return normalized;
|
|
52
73
|
}
|
|
53
74
|
return [];
|
|
54
75
|
};
|
|
76
|
+
const ensureBoolean = (value) => {
|
|
77
|
+
if (typeof value === 'boolean') {
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
80
|
+
if (typeof value === 'string') {
|
|
81
|
+
return value.toLowerCase() === 'true';
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
};
|
|
55
85
|
// Set defaults for optional fields with type validation
|
|
56
86
|
return {
|
|
57
87
|
...manifest,
|
|
@@ -60,7 +90,9 @@ export function loadOverlayManifest(overlayDir) {
|
|
|
60
90
|
suggests: ensureArray(manifest.suggests),
|
|
61
91
|
conflicts: ensureArray(manifest.conflicts),
|
|
62
92
|
tags: ensureArray(manifest.tags),
|
|
63
|
-
ports:
|
|
93
|
+
ports: ensurePortsArray(manifest.ports),
|
|
94
|
+
imports: ensureArray(manifest.imports),
|
|
95
|
+
minimal: manifest.minimal !== undefined ? ensureBoolean(manifest.minimal) : false,
|
|
64
96
|
};
|
|
65
97
|
}
|
|
66
98
|
catch (error) {
|
|
@@ -81,14 +113,10 @@ export function loadOverlayManifests(overlaysDir) {
|
|
|
81
113
|
if (!entry.isDirectory()) {
|
|
82
114
|
continue;
|
|
83
115
|
}
|
|
84
|
-
// Skip special directories
|
|
116
|
+
// Skip special directories
|
|
85
117
|
if (entry.name.startsWith('.')) {
|
|
86
118
|
continue;
|
|
87
119
|
}
|
|
88
|
-
// Skip presets directory (presets are loaded separately)
|
|
89
|
-
if (entry.name === 'presets') {
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
120
|
const overlayDir = path.join(overlaysDir, entry.name);
|
|
93
121
|
const manifest = loadOverlayManifest(overlayDir);
|
|
94
122
|
if (manifest) {
|
|
@@ -103,10 +131,10 @@ export function loadOverlayManifests(overlaysDir) {
|
|
|
103
131
|
return manifests;
|
|
104
132
|
}
|
|
105
133
|
/**
|
|
106
|
-
* Load preset metadata from presets directory
|
|
134
|
+
* Load preset metadata from .presets directory
|
|
107
135
|
*/
|
|
108
136
|
export function loadPresetMetadata(overlaysDir) {
|
|
109
|
-
const presetsDir = path.join(overlaysDir, 'presets');
|
|
137
|
+
const presetsDir = path.join(overlaysDir, '.presets');
|
|
110
138
|
const presets = [];
|
|
111
139
|
if (!fs.existsSync(presetsDir)) {
|
|
112
140
|
return presets;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay-loader.js","sourceRoot":"","sources":["../../../tool/schema/overlay-loader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAE1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB,CAAC;QAEvD,2BAA2B;QAC3B,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,oEAAoE;QACpE,MAAM,WAAW,GAAG,CAAC,KAAU,EAAY,EAAE;YACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvB,oCAAoC;gBACpC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;oBACnD,OAAO,CAAC,IAAI,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAC;oBAC3E,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;gBAC5D,CAAC;gBACD,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CACR,6CAA6C,UAAU,qBAAqB,CAC/E,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;YACD,OAAO,EAAE,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"overlay-loader.js","sourceRoot":"","sources":["../../../tool/schema/overlay-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
export type Stack = 'plain' | 'compose';
|
|
5
5
|
export type BaseImage = 'bookworm' | 'trixie' | 'alpine' | 'ubuntu' | 'custom';
|
|
6
6
|
export type PackageManager = 'apt' | 'apk';
|
|
7
|
+
/**
|
|
8
|
+
* Deployment target/runtime environment
|
|
9
|
+
* Determines environment-specific optimizations and compatibility checks
|
|
10
|
+
*/
|
|
11
|
+
export type DeploymentTarget = 'local' | 'codespaces' | 'gitpod' | 'devpod';
|
|
7
12
|
export type LanguageOverlay = 'dotnet' | 'nodejs' | 'python' | 'mkdocs' | 'java' | 'go' | 'rust' | 'bun' | 'powershell';
|
|
8
13
|
export type DatabaseOverlay = 'postgres' | 'redis' | 'mongodb' | 'mysql' | 'sqlserver' | 'sqlite' | 'minio' | 'rabbitmq' | 'redpanda' | 'nats';
|
|
9
14
|
export type CloudTool = 'azure-cli' | 'aws-cli' | 'gcloud' | 'kubectl-helm' | 'terraform' | 'pulumi';
|
|
@@ -40,6 +45,10 @@ export interface DevContainerConfig {
|
|
|
40
45
|
*/
|
|
41
46
|
outputPath?: string;
|
|
42
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Editor profile for customizations
|
|
50
|
+
*/
|
|
51
|
+
export type EditorProfile = 'vscode' | 'jetbrains' | 'none';
|
|
43
52
|
/**
|
|
44
53
|
* Questionnaire response interface
|
|
45
54
|
*/
|
|
@@ -60,6 +69,9 @@ export interface QuestionnaireAnswers {
|
|
|
60
69
|
observability: ObservabilityTool[];
|
|
61
70
|
outputPath: string;
|
|
62
71
|
portOffset?: number;
|
|
72
|
+
target?: DeploymentTarget;
|
|
73
|
+
minimal?: boolean;
|
|
74
|
+
editor?: EditorProfile;
|
|
63
75
|
}
|
|
64
76
|
/**
|
|
65
77
|
* Port attributes configuration
|
|
@@ -102,6 +114,24 @@ export interface DevContainer {
|
|
|
102
114
|
* Overlay categories - just metadata for grouping in UI
|
|
103
115
|
*/
|
|
104
116
|
export type OverlayCategory = 'language' | 'database' | 'observability' | 'cloud' | 'dev' | 'preset';
|
|
117
|
+
/**
|
|
118
|
+
* Port metadata - can be simple number or rich object
|
|
119
|
+
*/
|
|
120
|
+
export interface PortMetadata {
|
|
121
|
+
port: number;
|
|
122
|
+
service?: string;
|
|
123
|
+
protocol?: 'http' | 'https' | 'tcp' | 'udp' | 'grpc';
|
|
124
|
+
description?: string;
|
|
125
|
+
path?: string;
|
|
126
|
+
onAutoForward?: 'notify' | 'openBrowser' | 'openPreview' | 'silent' | 'ignore';
|
|
127
|
+
connectionStringTemplate?: string;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Normalized port information (always in object form)
|
|
131
|
+
*/
|
|
132
|
+
export interface NormalizedPort extends PortMetadata {
|
|
133
|
+
actualPort: number;
|
|
134
|
+
}
|
|
105
135
|
/**
|
|
106
136
|
* Overlay metadata from overlays.yml
|
|
107
137
|
*/
|
|
@@ -115,8 +145,10 @@ export interface OverlayMetadata {
|
|
|
115
145
|
suggests?: string[];
|
|
116
146
|
conflicts?: string[];
|
|
117
147
|
tags?: string[];
|
|
118
|
-
ports?: number[];
|
|
148
|
+
ports?: (number | PortMetadata)[];
|
|
119
149
|
order?: number;
|
|
150
|
+
imports?: string[];
|
|
151
|
+
minimal?: boolean;
|
|
120
152
|
}
|
|
121
153
|
/**
|
|
122
154
|
* User choice configuration for presets
|
|
@@ -152,6 +184,14 @@ export interface MetaOverlay {
|
|
|
152
184
|
};
|
|
153
185
|
glueConfig?: PresetGlueConfig;
|
|
154
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Generated port documentation
|
|
189
|
+
*/
|
|
190
|
+
export interface PortsDocumentation {
|
|
191
|
+
portOffset: number;
|
|
192
|
+
ports: NormalizedPort[];
|
|
193
|
+
connectionStrings?: Record<string, string>;
|
|
194
|
+
}
|
|
155
195
|
/**
|
|
156
196
|
* Overlays configuration structure
|
|
157
197
|
*/
|
|
@@ -175,7 +215,9 @@ export interface OverlaysConfig {
|
|
|
175
215
|
* Superposition manifest generated alongside devcontainer.json
|
|
176
216
|
*/
|
|
177
217
|
export interface SuperpositionManifest {
|
|
178
|
-
|
|
218
|
+
manifestVersion: string;
|
|
219
|
+
generatedBy: string;
|
|
220
|
+
version?: string;
|
|
179
221
|
generated: string;
|
|
180
222
|
baseTemplate: Stack;
|
|
181
223
|
baseImage: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../tool/schema/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;AACxC,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/E,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../tool/schema/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge utilities for container-superposition
|
|
3
|
+
*
|
|
4
|
+
* This module implements the formal merge strategy specification for combining
|
|
5
|
+
* devcontainer configurations, docker-compose files, and environment variables.
|
|
6
|
+
*
|
|
7
|
+
* See docs/merge-strategy.md for the complete specification.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Deep merge two objects with special handling for arrays and specific fields.
|
|
11
|
+
*
|
|
12
|
+
* Merge strategy:
|
|
13
|
+
* - Objects: Recursively merged
|
|
14
|
+
* - Arrays: Concatenated and deduplicated (union strategy)
|
|
15
|
+
* - Primitives: Source overwrites target (last writer wins)
|
|
16
|
+
* - Special cases: remoteEnv (PATH handling), features, etc.
|
|
17
|
+
*
|
|
18
|
+
* @param target - Base object to merge into
|
|
19
|
+
* @param source - Object to merge from (takes precedence)
|
|
20
|
+
* @returns Merged object
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* const base = { features: { "node:1": { version: "lts" } } };
|
|
24
|
+
* const overlay = { features: { "node:1": { nodeGypDependencies: true } } };
|
|
25
|
+
* const result = deepMerge(base, overlay);
|
|
26
|
+
* // Result: { features: { "node:1": { version: "lts", nodeGypDependencies: true } } }
|
|
27
|
+
*/
|
|
28
|
+
export declare function deepMerge(target: any, source: any): any;
|
|
29
|
+
/**
|
|
30
|
+
* Merge remoteEnv objects with intelligent PATH handling.
|
|
31
|
+
*
|
|
32
|
+
* For PATH variables:
|
|
33
|
+
* 1. Split on colons (preserving ${...} references)
|
|
34
|
+
* 2. Remove ${containerEnv:PATH} placeholders
|
|
35
|
+
* 3. Concatenate and deduplicate
|
|
36
|
+
* 4. Append ${containerEnv:PATH} at end
|
|
37
|
+
*
|
|
38
|
+
* For other variables:
|
|
39
|
+
* - Source overwrites target (last writer wins)
|
|
40
|
+
*
|
|
41
|
+
* @param target - Base environment variables
|
|
42
|
+
* @param source - Overlay environment variables
|
|
43
|
+
* @returns Merged environment variables
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* mergeRemoteEnv(
|
|
47
|
+
* { PATH: "/usr/local/bin:${containerEnv:PATH}", NODE_ENV: "development" },
|
|
48
|
+
* { PATH: "${containerEnv:HOME}/.local/bin:${containerEnv:PATH}", NODE_ENV: "production" }
|
|
49
|
+
* )
|
|
50
|
+
* // Returns:
|
|
51
|
+
* // {
|
|
52
|
+
* // PATH: "/usr/local/bin:${containerEnv:HOME}/.local/bin:${containerEnv:PATH}",
|
|
53
|
+
* // NODE_ENV: "production"
|
|
54
|
+
* // }
|
|
55
|
+
*/
|
|
56
|
+
export declare function mergeRemoteEnv(target: Record<string, string>, source: Record<string, string>): Record<string, string>;
|
|
57
|
+
/**
|
|
58
|
+
* Merge space-separated package lists with deduplication.
|
|
59
|
+
*
|
|
60
|
+
* Used for apt, apk, and other package manager lists.
|
|
61
|
+
*
|
|
62
|
+
* @param existing - Current package list (space-separated)
|
|
63
|
+
* @param additional - Additional packages to merge (space-separated)
|
|
64
|
+
* @returns Merged package list (space-separated, deduplicated)
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* mergePackages("curl wget", "wget jq")
|
|
68
|
+
* // Returns: "curl wget jq"
|
|
69
|
+
*/
|
|
70
|
+
export declare function mergePackages(existing: string, additional: string): string;
|
|
71
|
+
/**
|
|
72
|
+
* Filter depends_on to only include services that exist in the final composition.
|
|
73
|
+
*
|
|
74
|
+
* Supports both Docker Compose syntaxes:
|
|
75
|
+
* - Array form: depends_on: [serviceA, serviceB]
|
|
76
|
+
* - Object form: depends_on: { serviceA: { condition: ... } }
|
|
77
|
+
*
|
|
78
|
+
* @param dependsOn - Original depends_on configuration
|
|
79
|
+
* @param existingServices - Set of service names that exist
|
|
80
|
+
* @returns Filtered depends_on (undefined if empty after filtering)
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* filterDependsOn(
|
|
84
|
+
* ["postgres", "redis", "rabbitmq"],
|
|
85
|
+
* new Set(["postgres", "redis"])
|
|
86
|
+
* )
|
|
87
|
+
* // Returns: ["postgres", "redis"]
|
|
88
|
+
*/
|
|
89
|
+
export declare function filterDependsOn(dependsOn: unknown, existingServices: Set<string>): unknown;
|
|
90
|
+
/**
|
|
91
|
+
* Apply port offset to port string or number.
|
|
92
|
+
*
|
|
93
|
+
* @param port - Port value (string or number)
|
|
94
|
+
* @param offset - Offset to apply
|
|
95
|
+
* @returns Port with offset applied
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* applyPortOffset("5432:5432", 100)
|
|
99
|
+
* // Returns: "5532:5432" (only host port offset)
|
|
100
|
+
*
|
|
101
|
+
* applyPortOffset(3000, 100)
|
|
102
|
+
* // Returns: 3100
|
|
103
|
+
*/
|
|
104
|
+
export declare function applyPortOffset(port: string | number, offset: number): string | number;
|
|
105
|
+
/**
|
|
106
|
+
* Apply port offset to environment variable content.
|
|
107
|
+
*
|
|
108
|
+
* Finds variables matching *PORT*=number pattern and applies offset.
|
|
109
|
+
*
|
|
110
|
+
* @param envContent - Environment file content
|
|
111
|
+
* @param offset - Port offset to apply
|
|
112
|
+
* @returns Modified environment content
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* applyPortOffsetToEnv("POSTGRES_PORT=5432\nAPP_NAME=myapp", 100)
|
|
116
|
+
* // Returns: "POSTGRES_PORT=5532\nAPP_NAME=myapp"
|
|
117
|
+
*/
|
|
118
|
+
export declare function applyPortOffsetToEnv(envContent: string, offset: number): string;
|
|
119
|
+
/**
|
|
120
|
+
* Merge strategy metadata for documentation and testing.
|
|
121
|
+
*/
|
|
122
|
+
export declare const MERGE_STRATEGY: {
|
|
123
|
+
readonly version: "1.0.0";
|
|
124
|
+
readonly description: "Formal merge strategy specification for container-superposition";
|
|
125
|
+
readonly rules: {
|
|
126
|
+
readonly objects: "deep-merge";
|
|
127
|
+
readonly arrays: "union-deduplicate";
|
|
128
|
+
readonly primitives: "last-writer-wins";
|
|
129
|
+
readonly remoteEnv: "intelligent-PATH-merging";
|
|
130
|
+
readonly packages: "space-separated-union";
|
|
131
|
+
readonly dependsOn: "filter-to-existing-services";
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../tool/utils/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CA6BvD;AAiDD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyBxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAS1E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAgB1F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAuBtF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAe/E;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;CAWjB,CAAC"}
|