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.
Files changed (178) hide show
  1. package/README.md +569 -8
  2. package/dist/scripts/init.js +436 -254
  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 +299 -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 +67 -0
  17. package/dist/tool/commands/plan.d.ts.map +1 -0
  18. package/dist/tool/commands/plan.js +851 -0
  19. package/dist/tool/commands/plan.js.map +1 -0
  20. package/dist/tool/questionnaire/composer.d.ts +16 -2
  21. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  22. package/dist/tool/questionnaire/composer.js +411 -200
  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 +62 -2
  42. package/dist/tool/schema/types.d.ts.map +1 -1
  43. package/dist/tool/utils/gitignore.d.ts +15 -0
  44. package/dist/tool/utils/gitignore.d.ts.map +1 -0
  45. package/dist/tool/utils/gitignore.js +41 -0
  46. package/dist/tool/utils/gitignore.js.map +1 -0
  47. package/dist/tool/utils/merge.d.ts +134 -0
  48. package/dist/tool/utils/merge.d.ts.map +1 -0
  49. package/dist/tool/utils/merge.js +277 -0
  50. package/dist/tool/utils/merge.js.map +1 -0
  51. package/dist/tool/utils/port-utils.d.ts +29 -0
  52. package/dist/tool/utils/port-utils.d.ts.map +1 -0
  53. package/dist/tool/utils/port-utils.js +128 -0
  54. package/dist/tool/utils/port-utils.js.map +1 -0
  55. package/dist/tool/utils/services-export.d.ts +14 -0
  56. package/dist/tool/utils/services-export.d.ts.map +1 -0
  57. package/dist/tool/utils/services-export.js +478 -0
  58. package/dist/tool/utils/services-export.js.map +1 -0
  59. package/dist/tool/utils/summary.d.ts +69 -0
  60. package/dist/tool/utils/summary.d.ts.map +1 -0
  61. package/dist/tool/utils/summary.js +260 -0
  62. package/dist/tool/utils/summary.js.map +1 -0
  63. package/dist/tool/utils/version.d.ts +9 -0
  64. package/dist/tool/utils/version.d.ts.map +1 -0
  65. package/dist/tool/utils/version.js +32 -0
  66. package/dist/tool/utils/version.js.map +1 -0
  67. package/docs/architecture.md +25 -21
  68. package/docs/deployment-targets.md +150 -0
  69. package/docs/discovery-commands.md +442 -0
  70. package/docs/merge-strategy.md +700 -0
  71. package/docs/minimal-and-editor.md +265 -0
  72. package/docs/overlay-imports.md +209 -0
  73. package/docs/overlay-manifest-refactoring.md +2 -2
  74. package/docs/overlay-metadata-archive.md +1 -1
  75. package/docs/overlays.md +139 -28
  76. package/docs/presets-architecture.md +3 -3
  77. package/docs/presets.md +1 -1
  78. package/docs/publishing.md +36 -35
  79. package/docs/team-workflow.md +540 -0
  80. package/overlays/.presets/data-engineering.yml +392 -0
  81. package/overlays/.presets/event-sourced-service.yml +262 -0
  82. package/overlays/.presets/frontend.yml +287 -0
  83. package/overlays/.presets/k8s-operator-dev.yml +462 -0
  84. package/overlays/{presets → .presets}/microservice.yml +32 -6
  85. package/overlays/.presets/web-api.yml +129 -0
  86. package/overlays/.registry/README.md +1 -1
  87. package/overlays/.registry/deployment-targets.yml +54 -0
  88. package/overlays/.shared/README.md +43 -0
  89. package/overlays/.shared/compose/common-healthchecks.yml +38 -0
  90. package/overlays/.shared/otel/instrumentation.env +20 -0
  91. package/overlays/.shared/otel/otel-base-config.yaml +30 -0
  92. package/overlays/.shared/vscode/recommended-extensions.json +14 -0
  93. package/overlays/README.md +1 -1
  94. package/overlays/cloudflared/README.md +190 -0
  95. package/overlays/cloudflared/devcontainer.patch.json +3 -0
  96. package/overlays/cloudflared/overlay.yml +15 -0
  97. package/overlays/cloudflared/setup.sh +49 -0
  98. package/overlays/cloudflared/verify.sh +21 -0
  99. package/overlays/codex/overlay.yml +1 -0
  100. package/overlays/direnv/README.md +6 -4
  101. package/overlays/direnv/setup.sh +0 -12
  102. package/overlays/duckdb/README.md +274 -0
  103. package/overlays/duckdb/devcontainer.patch.json +10 -0
  104. package/overlays/duckdb/overlay.yml +17 -0
  105. package/overlays/duckdb/setup.sh +45 -0
  106. package/overlays/duckdb/verify.sh +32 -0
  107. package/overlays/git-helpers/overlay.yml +1 -0
  108. package/overlays/grafana/README.md +5 -5
  109. package/overlays/grafana/dashboard-provider.yml +1 -1
  110. package/overlays/grafana/docker-compose.yml +2 -2
  111. package/overlays/grafana/overlay.yml +6 -1
  112. package/overlays/grpc-tools/README.md +242 -0
  113. package/overlays/grpc-tools/devcontainer.patch.json +14 -0
  114. package/overlays/grpc-tools/overlay.yml +14 -0
  115. package/overlays/grpc-tools/setup.sh +57 -0
  116. package/overlays/grpc-tools/verify.sh +47 -0
  117. package/overlays/jaeger/overlay.yml +16 -3
  118. package/overlays/jupyter/.env.example +6 -0
  119. package/overlays/jupyter/README.md +210 -0
  120. package/overlays/jupyter/devcontainer.patch.json +14 -0
  121. package/overlays/jupyter/docker-compose.yml +23 -0
  122. package/overlays/jupyter/overlay.yml +18 -0
  123. package/overlays/jupyter/verify.sh +35 -0
  124. package/overlays/keycloak/.env.example +5 -0
  125. package/overlays/keycloak/README.md +238 -0
  126. package/overlays/keycloak/devcontainer.patch.json +17 -0
  127. package/overlays/keycloak/docker-compose.yml +32 -0
  128. package/overlays/keycloak/overlay.yml +23 -0
  129. package/overlays/keycloak/verify.sh +54 -0
  130. package/overlays/kind/README.md +221 -0
  131. package/overlays/kind/devcontainer.patch.json +10 -0
  132. package/overlays/kind/overlay.yml +18 -0
  133. package/overlays/kind/setup.sh +43 -0
  134. package/overlays/kind/verify.sh +40 -0
  135. package/overlays/localstack/.env.example +6 -0
  136. package/overlays/localstack/README.md +188 -0
  137. package/overlays/localstack/devcontainer.patch.json +21 -0
  138. package/overlays/localstack/docker-compose.yml +25 -0
  139. package/overlays/localstack/overlay.yml +18 -0
  140. package/overlays/localstack/verify.sh +47 -0
  141. package/overlays/loki/overlay.yml +6 -1
  142. package/overlays/mailpit/.env.example +4 -0
  143. package/overlays/mailpit/README.md +191 -0
  144. package/overlays/mailpit/devcontainer.patch.json +20 -0
  145. package/overlays/mailpit/docker-compose.yml +17 -0
  146. package/overlays/mailpit/overlay.yml +26 -0
  147. package/overlays/mailpit/verify.sh +52 -0
  148. package/overlays/modern-cli-tools/overlay.yml +1 -0
  149. package/overlays/mongodb/overlay.yml +12 -2
  150. package/overlays/mysql/overlay.yml +12 -2
  151. package/overlays/nats/overlay.yml +12 -2
  152. package/overlays/ngrok/overlay.yml +2 -1
  153. package/overlays/openapi-tools/README.md +243 -0
  154. package/overlays/openapi-tools/devcontainer.patch.json +10 -0
  155. package/overlays/openapi-tools/overlay.yml +16 -0
  156. package/overlays/openapi-tools/setup.sh +45 -0
  157. package/overlays/openapi-tools/verify.sh +51 -0
  158. package/overlays/otel-collector/overlay.yml.example +26 -0
  159. package/overlays/postgres/overlay.yml +6 -1
  160. package/overlays/prometheus/overlay.yml +6 -1
  161. package/overlays/python/README.md +51 -35
  162. package/overlays/python/devcontainer.patch.json +7 -4
  163. package/overlays/python/setup.sh +50 -23
  164. package/overlays/python/verify.sh +29 -1
  165. package/overlays/rabbitmq/overlay.yml +12 -2
  166. package/overlays/redis/overlay.yml +6 -1
  167. package/overlays/tilt/README.md +259 -0
  168. package/overlays/tilt/devcontainer.patch.json +17 -0
  169. package/overlays/tilt/overlay.yml +19 -0
  170. package/overlays/tilt/setup.sh +25 -0
  171. package/overlays/tilt/verify.sh +24 -0
  172. package/package.json +8 -6
  173. package/tool/README.md +12 -16
  174. package/tool/schema/overlay-manifest.schema.json +64 -4
  175. package/tool/schema/superposition-manifest.schema.json +104 -0
  176. package/overlays/presets/web-api.yml +0 -109
  177. /package/overlays/{presets → .presets}/docs-site.yml +0 -0
  178. /package/overlays/{presets → .presets}/fullstack.yml +0 -0
@@ -68,11 +68,58 @@
68
68
  },
69
69
  "ports": {
70
70
  "type": "array",
71
- "description": "Ports used by the overlay (for offset calculation)",
71
+ "description": "Ports used by the overlay (for offset calculation and documentation)",
72
72
  "items": {
73
- "type": "integer",
74
- "minimum": 1,
75
- "maximum": 65535
73
+ "oneOf": [
74
+ {
75
+ "type": "integer",
76
+ "minimum": 1,
77
+ "maximum": 65535,
78
+ "description": "Simple port number (legacy format)"
79
+ },
80
+ {
81
+ "type": "object",
82
+ "description": "Rich port metadata with service info and connection details",
83
+ "required": ["port"],
84
+ "properties": {
85
+ "port": {
86
+ "type": "integer",
87
+ "minimum": 1,
88
+ "maximum": 65535,
89
+ "description": "Port number"
90
+ },
91
+ "service": {
92
+ "type": "string",
93
+ "description": "Service name (e.g., postgres, grafana, jaeger)",
94
+ "pattern": "^[a-z0-9-]+$"
95
+ },
96
+ "protocol": {
97
+ "type": "string",
98
+ "description": "Protocol type",
99
+ "enum": ["http", "https", "tcp", "udp", "grpc"]
100
+ },
101
+ "description": {
102
+ "type": "string",
103
+ "description": "Human-readable description of what this port is for"
104
+ },
105
+ "path": {
106
+ "type": "string",
107
+ "description": "Default path for HTTP/HTTPS services (e.g., /, /metrics)",
108
+ "pattern": "^/"
109
+ },
110
+ "onAutoForward": {
111
+ "type": "string",
112
+ "description": "VS Code port auto-forward behavior",
113
+ "enum": ["notify", "openBrowser", "openPreview", "silent", "ignore"]
114
+ },
115
+ "connectionStringTemplate": {
116
+ "type": "string",
117
+ "description": "Template for connection string (e.g., postgresql://{user}:{password}@{host}:{port}/{database})"
118
+ }
119
+ },
120
+ "additionalProperties": false
121
+ }
122
+ ]
76
123
  },
77
124
  "default": []
78
125
  },
@@ -80,6 +127,19 @@
80
127
  "type": "integer",
81
128
  "description": "Display order within category (lower = first)",
82
129
  "minimum": 1
130
+ },
131
+ "imports": {
132
+ "type": "array",
133
+ "description": "Shared files to import from overlays/.shared/",
134
+ "items": {
135
+ "type": "string"
136
+ },
137
+ "default": []
138
+ },
139
+ "minimal": {
140
+ "type": "boolean",
141
+ "description": "Whether this overlay is excluded in minimal mode (true = extra/optional)",
142
+ "default": false
83
143
  }
84
144
  },
85
145
  "additionalProperties": false
@@ -0,0 +1,104 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "Superposition Manifest",
5
+ "description": "Manifest file (superposition.json) generated by container-superposition to track devcontainer configuration",
6
+ "properties": {
7
+ "manifestVersion": {
8
+ "type": "string",
9
+ "description": "Schema version of the manifest (increments on breaking changes)",
10
+ "pattern": "^[0-9]+$"
11
+ },
12
+ "generatedBy": {
13
+ "type": "string",
14
+ "description": "Version of container-superposition that created this manifest"
15
+ },
16
+ "version": {
17
+ "type": "string",
18
+ "description": "Legacy field for backward compatibility (deprecated, use manifestVersion instead)"
19
+ },
20
+ "generated": {
21
+ "type": "string",
22
+ "format": "date-time",
23
+ "description": "ISO 8601 timestamp when the manifest was generated"
24
+ },
25
+ "baseTemplate": {
26
+ "type": "string",
27
+ "enum": ["plain", "compose"],
28
+ "description": "Base devcontainer template used (plain for single image, compose for multi-service)"
29
+ },
30
+ "baseImage": {
31
+ "type": "string",
32
+ "description": "Base container image used for the devcontainer"
33
+ },
34
+ "overlays": {
35
+ "type": "array",
36
+ "items": {
37
+ "type": "string"
38
+ },
39
+ "description": "List of overlay IDs that were applied to create this configuration"
40
+ },
41
+ "portOffset": {
42
+ "type": "number",
43
+ "minimum": 0,
44
+ "description": "Port offset applied to all service ports (optional)"
45
+ },
46
+ "preset": {
47
+ "type": "string",
48
+ "description": "ID of the preset used to generate this configuration (optional)"
49
+ },
50
+ "presetChoices": {
51
+ "type": "object",
52
+ "additionalProperties": {
53
+ "type": "string"
54
+ },
55
+ "description": "User choices made within preset user-choice sections (optional)"
56
+ },
57
+ "autoResolved": {
58
+ "type": "object",
59
+ "properties": {
60
+ "added": {
61
+ "type": "array",
62
+ "items": {
63
+ "type": "string"
64
+ },
65
+ "description": "List of overlays that were automatically added as dependencies"
66
+ },
67
+ "reason": {
68
+ "type": "string",
69
+ "description": "Human-readable reason why dependencies were added"
70
+ }
71
+ },
72
+ "required": ["added", "reason"],
73
+ "description": "Information about automatically resolved dependencies (optional)"
74
+ },
75
+ "containerName": {
76
+ "type": "string",
77
+ "description": "Name of the container/project from devcontainer.json (optional)"
78
+ },
79
+ "customizations": {
80
+ "type": "object",
81
+ "properties": {
82
+ "enabled": {
83
+ "type": "boolean",
84
+ "description": "Whether custom patches are enabled"
85
+ },
86
+ "location": {
87
+ "type": "string",
88
+ "description": "Path to custom patches directory relative to workspace"
89
+ }
90
+ },
91
+ "required": ["enabled", "location"],
92
+ "description": "Information about custom patches/overrides (optional)"
93
+ }
94
+ },
95
+ "required": [
96
+ "manifestVersion",
97
+ "generatedBy",
98
+ "generated",
99
+ "baseTemplate",
100
+ "baseImage",
101
+ "overlays"
102
+ ],
103
+ "additionalProperties": false
104
+ }
@@ -1,109 +0,0 @@
1
- # Web API Stack Preset
2
- # Complete environment for REST/GraphQL API development
3
-
4
- id: web-api
5
- name: Web API Stack
6
- description: Complete REST/GraphQL API development environment with database, cache, and observability
7
- type: meta
8
- category: preset
9
- supports: [compose] # Requires Docker Compose for services
10
- tags: [preset, api, web, backend, observability]
11
-
12
- # Overlays to select
13
- selects:
14
- # Always included
15
- required:
16
- - postgres
17
- - redis
18
- - otel-collector
19
- - prometheus
20
- - grafana
21
- - loki
22
-
23
- # User makes choices
24
- userChoice:
25
- language:
26
- id: language
27
- prompt: Select API language/framework
28
- options: [dotnet, nodejs, python, go, java]
29
- defaultOption: nodejs
30
-
31
- # Glue configuration - integration helpers
32
- glueConfig:
33
- # Pre-configured environment variables
34
- environment:
35
- # Database connection
36
- DATABASE_URL: 'postgresql://postgres:postgres@postgres:5432/myapp'
37
- POSTGRES_HOST: 'postgres'
38
- POSTGRES_PORT: '5432'
39
- POSTGRES_DB: 'myapp'
40
- POSTGRES_USER: 'postgres'
41
- POSTGRES_PASSWORD: 'postgres'
42
-
43
- # Redis connection
44
- REDIS_URL: 'redis://redis:6379'
45
- REDIS_HOST: 'redis'
46
- REDIS_PORT: '6379'
47
-
48
- # OpenTelemetry configuration
49
- OTEL_EXPORTER_OTLP_ENDPOINT: 'http://otel-collector:4317'
50
- OTEL_SERVICE_NAME: 'api-service'
51
- OTEL_METRICS_EXPORTER: 'otlp'
52
- OTEL_TRACES_EXPORTER: 'otlp'
53
- OTEL_LOGS_EXPORTER: 'otlp'
54
-
55
- # Suggested port mappings
56
- portMappings:
57
- api: 8000
58
- grafana: 3000
59
- prometheus: 9090
60
-
61
- # README snippet to add to generated devcontainer
62
- readme: |
63
- ## Web API Stack
64
-
65
- This devcontainer is configured with a complete API development stack:
66
-
67
- ### Services
68
-
69
- - **PostgreSQL**: Primary database (port 5432)
70
- - **Redis**: Cache and session store (port 6379)
71
- - **OpenTelemetry Collector**: Telemetry aggregation (ports 4317, 4318)
72
- - **Prometheus**: Metrics storage (port 9090)
73
- - **Grafana**: Observability dashboard (port 3000)
74
- - **Loki**: Log aggregation (port 3100)
75
-
76
- ### Connection Strings
77
-
78
- ```bash
79
- # PostgreSQL
80
- DATABASE_URL="postgresql://postgres:postgres@postgres:5432/myapp"
81
-
82
- # Redis
83
- REDIS_URL="redis://redis:6379"
84
-
85
- # OpenTelemetry
86
- OTEL_EXPORTER_OTLP_ENDPOINT="http://otel-collector:4317"
87
- ```
88
-
89
- ### Quick Start
90
-
91
- 1. Start your API on port 8000 (configured in this preset)
92
- 2. Access Grafana at http://localhost:3000 (admin/admin)
93
- 3. View metrics in Prometheus at http://localhost:9090
94
- 4. Check logs in Loki via Grafana
95
-
96
- ### Health Checks
97
-
98
- All services include health checks. Verify with:
99
-
100
- ```bash
101
- docker-compose ps
102
- ```
103
-
104
- ### Next Steps
105
-
106
- - Configure your API to use the DATABASE_URL and REDIS_URL
107
- - Add OpenTelemetry SDK to your application
108
- - Create custom Grafana dashboards for your API metrics
109
- - Set up log forwarding to Loki
File without changes
File without changes