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
package/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # container-superposition
2
2
 
3
+ [![Validate Overlays](https://github.com/veggerby/container-superposition/actions/workflows/validate-overlays.yml/badge.svg)](https://github.com/veggerby/container-superposition/actions/workflows/validate-overlays.yml)
4
+ [![Build DevContainers](https://github.com/veggerby/container-superposition/actions/workflows/build-devcontainers.yml/badge.svg)](https://github.com/veggerby/container-superposition/actions/workflows/build-devcontainers.yml)
5
+ [![npm version](https://badge.fury.io/js/container-superposition.svg)](https://www.npmjs.com/package/container-superposition)
6
+
3
7
  Composable devcontainer scaffolds that collapse into working environments.
4
8
 
5
9
  ## 🎯 Purpose
@@ -253,9 +257,110 @@ npm run init
253
257
 
254
258
  - **`init`** - Initialize a new devcontainer configuration (default command)
255
259
  - **`regen`** - Regenerate devcontainer from existing manifest
256
- - **`list`** - List all available overlays and presets
260
+ - **`list`** - List all available overlays and presets with filtering options
261
+ - **`explain`** - Show detailed information about a specific overlay
262
+ - **`plan`** - Preview what will be generated before creating devcontainer
257
263
  - **`doctor`** - Check environment and validate configuration
258
264
 
265
+ #### Discovery Commands
266
+
267
+ **List available overlays:**
268
+
269
+ ```bash
270
+ # List all overlays grouped by category
271
+ npx container-superposition list
272
+
273
+ # Filter by category
274
+ npx container-superposition list --category database
275
+
276
+ # Filter by tags
277
+ npx container-superposition list --tags observability
278
+
279
+ # Filter by stack support
280
+ npx container-superposition list --supports compose
281
+
282
+ # JSON output for scripting
283
+ npx container-superposition list --json
284
+ ```
285
+
286
+ **Explain an overlay in detail:**
287
+
288
+ ```bash
289
+ # Show detailed information about an overlay
290
+ npx container-superposition explain postgres
291
+
292
+ # JSON output
293
+ npx container-superposition explain nodejs --json
294
+ ```
295
+
296
+ **Plan before generating:**
297
+
298
+ ```bash
299
+ # Preview what will be created
300
+ npx container-superposition plan --stack compose --overlays postgres,grafana
301
+
302
+ # Include port offset
303
+ npx container-superposition plan --stack compose --overlays postgres,redis --port-offset 100
304
+
305
+ # JSON output
306
+ npx container-superposition plan --stack compose --overlays nodejs,postgres --json
307
+ ```
308
+
309
+ The `plan` command shows:
310
+
311
+ - Selected overlays and auto-added dependencies
312
+ - Port mappings (with offset applied)
313
+ - Files that will be created/modified
314
+ - Conflict detection
315
+
316
+ #### Environment Validation
317
+
318
+ The `doctor` command provides comprehensive environment diagnostics:
319
+
320
+ ```bash
321
+ # Check environment and configuration
322
+ npx container-superposition doctor
323
+
324
+ # Check specific devcontainer
325
+ npx container-superposition doctor --output /path/to/.devcontainer
326
+
327
+ # Get JSON output for CI/CD
328
+ npx container-superposition doctor --json
329
+
330
+ # Apply automatic fixes (where possible)
331
+ npx container-superposition doctor --fix
332
+ ```
333
+
334
+ **Doctor checks:**
335
+
336
+ - ✅ Node.js version compatibility (>= 18)
337
+ - ✅ Docker daemon connectivity
338
+ - ✅ Docker Compose v2 availability (when using compose stack)
339
+ - ✅ Overlay integrity (valid manifests, required files)
340
+ - ✅ Manifest compatibility
341
+ - ⚠️ Port conflicts (best-effort detection)
342
+
343
+ **Example output:**
344
+
345
+ ```
346
+ 🔍 Running diagnostics...
347
+
348
+ Environment:
349
+ ✓ Node.js version: v20.10.0 (>= 18.0.0 required)
350
+ ✓ Docker daemon: Docker version 24.0.5
351
+ ✓ Docker Compose: v2.23.0 (v2 required)
352
+
353
+ Overlays:
354
+ ✓ All 46 overlays valid
355
+
356
+ Manifest:
357
+ ✓ Manifest version: Format version 0.1.0
358
+ ✓ DevContainer config: devcontainer.json valid
359
+
360
+ Summary:
361
+ ✓ 51 passed
362
+ ```
363
+
259
364
  The questionnaire guides you through:
260
365
 
261
366
  1. **Preset or Custom** - Start from a pre-configured stack or build custom?
@@ -357,6 +462,26 @@ npm run init -- --stack compose --language nodejs --postgres --port-offset 200 -
357
462
 
358
463
  This automatically adjusts all exposed ports in docker-compose.yml and documents the offset in .env.example.
359
464
 
465
+ ### Deployment Target Support
466
+
467
+ Container Superposition validates overlay compatibility with different deployment environments (local, Codespaces, Gitpod, DevPod) using the `--target` flag.
468
+
469
+ ```bash
470
+ # Specify deployment target
471
+ npx container-superposition init --target codespaces
472
+ npx container-superposition init --target gitpod
473
+ npx container-superposition init --target local # default
474
+ ```
475
+
476
+ The tool automatically validates overlay compatibility and warns you when selecting overlays that won't work in your target environment (e.g., `docker-sock` doesn't work in Codespaces).
477
+
478
+ **📖 See [Deployment Targets Documentation](docs/deployment-targets.md) for:**
479
+
480
+ - Complete target comparison table
481
+ - Interactive mode examples
482
+ - Environment-specific configuration
483
+ - Compatibility rules and best practices
484
+
360
485
  ### Regenerating from Manifest
361
486
 
362
487
  Every devcontainer generation creates a `superposition.json` manifest file that records your configuration choices. You can use this manifest to:
@@ -485,6 +610,86 @@ npm run init -- --from-manifest .devcontainer/superposition.json
485
610
 
486
611
  See **[Custom Patches Guide](docs/custom-patches.md)** for complete documentation and examples.
487
612
 
613
+ ### Team Collaboration Workflow
614
+
615
+ **Use Case:** Standardize dev environments across a team while allowing personal customizations.
616
+
617
+ Container Superposition supports a **manifest-first workflow** where:
618
+
619
+ - **Manifest** (`superposition.json`) is committed to version control
620
+ - **.devcontainer/** is generated locally and gitignored
621
+ - **Custom patches** (`.devcontainer/custom/`) can be committed for shared customizations
622
+
623
+ #### Quick Setup
624
+
625
+ **1. Team lead creates the manifest:**
626
+
627
+ ```bash
628
+ # Generate manifest only (no .devcontainer/ files)
629
+ npx container-superposition init --write-manifest-only \
630
+ --stack compose \
631
+ --language nodejs \
632
+ --database postgres,redis
633
+
634
+ # Commit to repo
635
+ git add superposition.json .gitignore
636
+ git commit -m "Add team devcontainer manifest"
637
+ ```
638
+
639
+ **2. Add to `.gitignore`:**
640
+
641
+ ```gitignore
642
+ # DevContainer - generated locally
643
+ .devcontainer/
644
+
645
+ # Except custom directory (personal/shared customizations)
646
+ !.devcontainer/custom/
647
+ ```
648
+
649
+ **3. Team members clone and generate:**
650
+
651
+ ```bash
652
+ git clone <repo>
653
+ cd <repo>
654
+
655
+ # Generate .devcontainer/ from manifest
656
+ npx container-superposition regen
657
+
658
+ # Open in VS Code and rebuild container
659
+ code .
660
+ ```
661
+
662
+ **4. Personal customizations (optional):**
663
+
664
+ ```bash
665
+ # Add personal VS Code extensions, themes, etc.
666
+ mkdir -p .devcontainer/custom
667
+ cat > .devcontainer/custom/devcontainer.patch.json << 'EOF'
668
+ {
669
+ "customizations": {
670
+ "vscode": {
671
+ "extensions": ["eamodio.gitlens"],
672
+ "settings": {
673
+ "editor.fontSize": 14
674
+ }
675
+ }
676
+ }
677
+ }
678
+ EOF
679
+
680
+ # Regenerate to apply
681
+ npx container-superposition regen
682
+ ```
683
+
684
+ **Benefits:**
685
+
686
+ - ✅ One command onboarding for new developers
687
+ - ✅ No lock-in - generated files are plain JSON/YAML
688
+ - ✅ Personal customizations don't conflict with team standard
689
+ - ✅ CI can validate manifest without committing generated files
690
+
691
+ See **[Team Workflow Guide](docs/team-workflow.md)** for complete documentation, CI examples, and troubleshooting.
692
+
488
693
  ### Option 2: Manual Composition
489
694
 
490
695
  1. **Copy a base template:**