container-superposition 0.1.1 → 0.1.4
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 +569 -8
- package/dist/scripts/init.js +436 -254
- 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 +299 -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 +67 -0
- package/dist/tool/commands/plan.d.ts.map +1 -0
- package/dist/tool/commands/plan.js +851 -0
- package/dist/tool/commands/plan.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +16 -2
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +411 -200
- 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 +62 -2
- package/dist/tool/schema/types.d.ts.map +1 -1
- package/dist/tool/utils/gitignore.d.ts +15 -0
- package/dist/tool/utils/gitignore.d.ts.map +1 -0
- package/dist/tool/utils/gitignore.js +41 -0
- package/dist/tool/utils/gitignore.js.map +1 -0
- 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/services-export.d.ts +14 -0
- package/dist/tool/utils/services-export.d.ts.map +1 -0
- package/dist/tool/utils/services-export.js +478 -0
- package/dist/tool/utils/services-export.js.map +1 -0
- package/dist/tool/utils/summary.d.ts +69 -0
- package/dist/tool/utils/summary.d.ts.map +1 -0
- package/dist/tool/utils/summary.js +260 -0
- package/dist/tool/utils/summary.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 +139 -28
- 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/{presets → .presets}/microservice.yml +32 -6
- package/overlays/.presets/web-api.yml +129 -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/cloudflared/README.md +190 -0
- package/overlays/cloudflared/devcontainer.patch.json +3 -0
- package/overlays/cloudflared/overlay.yml +15 -0
- package/overlays/cloudflared/setup.sh +49 -0
- package/overlays/cloudflared/verify.sh +21 -0
- package/overlays/codex/overlay.yml +1 -0
- package/overlays/direnv/README.md +6 -4
- package/overlays/direnv/setup.sh +0 -12
- 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/grpc-tools/README.md +242 -0
- package/overlays/grpc-tools/devcontainer.patch.json +14 -0
- package/overlays/grpc-tools/overlay.yml +14 -0
- package/overlays/grpc-tools/setup.sh +57 -0
- package/overlays/grpc-tools/verify.sh +47 -0
- 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/keycloak/.env.example +5 -0
- package/overlays/keycloak/README.md +238 -0
- package/overlays/keycloak/devcontainer.patch.json +17 -0
- package/overlays/keycloak/docker-compose.yml +32 -0
- package/overlays/keycloak/overlay.yml +23 -0
- package/overlays/keycloak/verify.sh +54 -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/mailpit/.env.example +4 -0
- package/overlays/mailpit/README.md +191 -0
- package/overlays/mailpit/devcontainer.patch.json +20 -0
- package/overlays/mailpit/docker-compose.yml +17 -0
- package/overlays/mailpit/overlay.yml +26 -0
- package/overlays/mailpit/verify.sh +52 -0
- 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/ngrok/overlay.yml +2 -1
- 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/python/README.md +51 -35
- package/overlays/python/devcontainer.patch.json +7 -4
- package/overlays/python/setup.sh +50 -23
- package/overlays/python/verify.sh +29 -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/web-api.yml +0 -109
- /package/overlays/{presets → .presets}/docs-site.yml +0 -0
- /package/overlays/{presets → .presets}/fullstack.yml +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-migrations.d.ts","sourceRoot":"","sources":["../../../tool/schema/manifest-migrations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,2BAA2B,UAAQ,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,CAAC;CACnC;AAqBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAc3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAyBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,GAAG,GAAG,qBAAqB,CAsDpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CASrD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAkBzD"}
|
|
@@ -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
|
|
@@ -135,6 +167,23 @@ export interface PresetGlueConfig {
|
|
|
135
167
|
portMappings?: Record<string, number>;
|
|
136
168
|
readme?: string;
|
|
137
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* A single option within a preset parameter
|
|
172
|
+
*/
|
|
173
|
+
export interface PresetParameterOption {
|
|
174
|
+
id: string;
|
|
175
|
+
overlays: string[];
|
|
176
|
+
description?: string;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* A parameterized slot in a preset definition (supports multiple overlays per option)
|
|
180
|
+
*/
|
|
181
|
+
export interface PresetParameter {
|
|
182
|
+
description?: string;
|
|
183
|
+
default: string;
|
|
184
|
+
required?: boolean;
|
|
185
|
+
options: PresetParameterOption[];
|
|
186
|
+
}
|
|
138
187
|
/**
|
|
139
188
|
* Meta-overlay (preset) definition
|
|
140
189
|
*/
|
|
@@ -150,8 +199,17 @@ export interface MetaOverlay {
|
|
|
150
199
|
required: string[];
|
|
151
200
|
userChoice?: Record<string, PresetUserChoice>;
|
|
152
201
|
};
|
|
202
|
+
parameters?: Record<string, PresetParameter>;
|
|
153
203
|
glueConfig?: PresetGlueConfig;
|
|
154
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Generated port documentation
|
|
207
|
+
*/
|
|
208
|
+
export interface PortsDocumentation {
|
|
209
|
+
portOffset: number;
|
|
210
|
+
ports: NormalizedPort[];
|
|
211
|
+
connectionStrings?: Record<string, string>;
|
|
212
|
+
}
|
|
155
213
|
/**
|
|
156
214
|
* Overlays configuration structure
|
|
157
215
|
*/
|
|
@@ -175,7 +233,9 @@ export interface OverlaysConfig {
|
|
|
175
233
|
* Superposition manifest generated alongside devcontainer.json
|
|
176
234
|
*/
|
|
177
235
|
export interface SuperpositionManifest {
|
|
178
|
-
|
|
236
|
+
manifestVersion: string;
|
|
237
|
+
generatedBy: string;
|
|
238
|
+
version?: string;
|
|
179
239
|
generated: string;
|
|
180
240
|
baseTemplate: Stack;
|
|
181
241
|
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,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Appends a named section of gitignore patterns to a .gitignore file.
|
|
3
|
+
*
|
|
4
|
+
* - Creates the file if it doesn't exist.
|
|
5
|
+
* - Skips any pattern already present anywhere in the file (line-level dedup).
|
|
6
|
+
* - Writes a labelled comment block: `# <sectionName>\n<patterns>\n`
|
|
7
|
+
* - Safe to call multiple times — idempotent due to deduplication.
|
|
8
|
+
*
|
|
9
|
+
* @param gitignorePath Absolute path to the .gitignore file.
|
|
10
|
+
* @param sectionName Label used as the comment header, e.g. `"python (container-superposition)"`.
|
|
11
|
+
* @param patterns Array of gitignore patterns to add (comment lines and blanks are ignored).
|
|
12
|
+
* @returns `true` if any new lines were written, `false` if all patterns already existed.
|
|
13
|
+
*/
|
|
14
|
+
export declare function appendGitignoreSection(gitignorePath: string, sectionName: string, patterns: string[]): boolean;
|
|
15
|
+
//# sourceMappingURL=gitignore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../../tool/utils/gitignore.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAClC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAAE,GACnB,OAAO,CA+BT"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
/**
|
|
3
|
+
* Appends a named section of gitignore patterns to a .gitignore file.
|
|
4
|
+
*
|
|
5
|
+
* - Creates the file if it doesn't exist.
|
|
6
|
+
* - Skips any pattern already present anywhere in the file (line-level dedup).
|
|
7
|
+
* - Writes a labelled comment block: `# <sectionName>\n<patterns>\n`
|
|
8
|
+
* - Safe to call multiple times — idempotent due to deduplication.
|
|
9
|
+
*
|
|
10
|
+
* @param gitignorePath Absolute path to the .gitignore file.
|
|
11
|
+
* @param sectionName Label used as the comment header, e.g. `"python (container-superposition)"`.
|
|
12
|
+
* @param patterns Array of gitignore patterns to add (comment lines and blanks are ignored).
|
|
13
|
+
* @returns `true` if any new lines were written, `false` if all patterns already existed.
|
|
14
|
+
*/
|
|
15
|
+
export function appendGitignoreSection(gitignorePath, sectionName, patterns) {
|
|
16
|
+
const existingContent = fs.existsSync(gitignorePath)
|
|
17
|
+
? fs.readFileSync(gitignorePath, 'utf-8')
|
|
18
|
+
: '';
|
|
19
|
+
const existingPatterns = new Set(existingContent
|
|
20
|
+
.split('\n')
|
|
21
|
+
.map((l) => l.trim())
|
|
22
|
+
.filter((l) => l.length > 0 && !l.startsWith('#')));
|
|
23
|
+
// Only take non-comment, non-blank patterns that aren't already present
|
|
24
|
+
const newLines = patterns
|
|
25
|
+
.map((l) => l.trim())
|
|
26
|
+
.filter((l) => l.length > 0 && !l.startsWith('#') && !existingPatterns.has(l));
|
|
27
|
+
if (newLines.length === 0)
|
|
28
|
+
return false;
|
|
29
|
+
const block = `# ${sectionName}\n${newLines.join('\n')}\n`;
|
|
30
|
+
if (existingContent.length > 0) {
|
|
31
|
+
const ensuredTrailingNewline = existingContent.endsWith('\n')
|
|
32
|
+
? existingContent
|
|
33
|
+
: existingContent + '\n';
|
|
34
|
+
fs.writeFileSync(gitignorePath, ensuredTrailingNewline + '\n' + block);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
fs.writeFileSync(gitignorePath, block);
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=gitignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../../tool/utils/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAClC,aAAqB,EACrB,WAAmB,EACnB,QAAkB;IAElB,MAAM,eAAe,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QAChD,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC;QACzC,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC5B,eAAe;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CACzD,CAAC;IAEF,wEAAwE;IACxE,MAAM,QAAQ,GAAG,QAAQ;SACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,MAAM,KAAK,GAAG,KAAK,WAAW,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAE3D,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,sBAAsB,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;YACzD,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,sBAAsB,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACJ,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
|