@vibesdotdev/infra-core 0.0.1 → 1.0.0-rc.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/LICENSE +18 -0
- package/README.md +33 -63
- package/dist/bootstrap/seed.descriptor.d.ts +1 -1
- package/dist/bootstrap/seed.descriptor.d.ts.map +1 -1
- package/dist/bootstrap/seed.descriptor.js +1 -1
- package/dist/bootstrap/seed.descriptor.js.map +1 -1
- package/dist/bootstrap/seed.impl-shape.d.ts +1 -1
- package/dist/bootstrap/seed.impl-shape.d.ts.map +1 -1
- package/dist/bootstrap/seed.kind.d.ts +1 -3
- package/dist/bootstrap/seed.kind.d.ts.map +1 -1
- package/dist/bootstrap/seed.kind.js +17 -4
- package/dist/bootstrap/seed.kind.js.map +1 -1
- package/dist/bootstrap/seed.runner.d.ts +9 -2
- package/dist/bootstrap/seed.runner.d.ts.map +1 -1
- package/dist/bootstrap/seed.runner.js +37 -18
- package/dist/bootstrap/seed.runner.js.map +1 -1
- package/dist/capped-id.d.ts +19 -0
- package/dist/capped-id.d.ts.map +1 -0
- package/dist/capped-id.js +64 -0
- package/dist/capped-id.js.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.d.ts +23 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.js +33 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.js.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.d.ts +24 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.js +73 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.js.map +1 -0
- package/dist/cli/generate/context.d.ts +17 -0
- package/dist/cli/generate/context.d.ts.map +1 -0
- package/dist/cli/generate/context.js +24 -0
- package/dist/cli/generate/context.js.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.d.ts +30 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.js +25 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.js.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.d.ts +25 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.js +64 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.js.map +1 -0
- package/dist/cli/generate/generate-core.d.ts +51 -0
- package/dist/cli/generate/generate-core.d.ts.map +1 -0
- package/dist/cli/generate/generate-core.js +172 -0
- package/dist/cli/generate/generate-core.js.map +1 -0
- package/dist/cli/generate/index.d.ts +5 -0
- package/dist/cli/generate/index.d.ts.map +1 -0
- package/dist/cli/generate/index.js +5 -0
- package/dist/cli/generate/index.js.map +1 -0
- package/dist/credentials/resolve.d.ts +82 -22
- package/dist/credentials/resolve.d.ts.map +1 -1
- package/dist/credentials/resolve.js +251 -77
- package/dist/credentials/resolve.js.map +1 -1
- package/dist/deployment-environment.d.ts +30 -0
- package/dist/deployment-environment.d.ts.map +1 -0
- package/dist/deployment-environment.js +53 -0
- package/dist/deployment-environment.js.map +1 -0
- package/dist/deployment.d.ts +8 -4
- package/dist/deployment.d.ts.map +1 -1
- package/dist/deployment.js +30 -0
- package/dist/deployment.js.map +1 -1
- package/dist/doks/cloud/base.d.ts +49 -0
- package/dist/doks/cloud/base.d.ts.map +1 -0
- package/dist/doks/cloud/base.js +138 -0
- package/dist/doks/cloud/base.js.map +1 -0
- package/dist/doks/cloud/factory.d.ts +18 -0
- package/dist/doks/cloud/factory.d.ts.map +1 -0
- package/dist/doks/cloud/factory.js +22 -0
- package/dist/doks/cloud/factory.js.map +1 -0
- package/dist/doks/cloud/index.d.ts +5 -0
- package/dist/doks/cloud/index.d.ts.map +1 -0
- package/dist/doks/cloud/index.js +4 -0
- package/dist/doks/cloud/index.js.map +1 -0
- package/dist/doks/types.d.ts +95 -0
- package/dist/doks/types.d.ts.map +1 -0
- package/dist/doks/types.js +14 -0
- package/dist/doks/types.js.map +1 -0
- package/dist/generate/index.d.ts +29 -0
- package/dist/generate/index.d.ts.map +1 -0
- package/dist/generate/index.js +28 -0
- package/dist/generate/index.js.map +1 -0
- package/dist/generate/infra-generate.plugin.d.ts +3 -0
- package/dist/generate/infra-generate.plugin.d.ts.map +1 -0
- package/dist/generate/infra-generate.plugin.js +23 -0
- package/dist/generate/infra-generate.plugin.js.map +1 -0
- package/dist/generate/plugin.d.ts +2 -0
- package/dist/generate/plugin.d.ts.map +1 -0
- package/dist/generate/plugin.js +2 -0
- package/dist/generate/plugin.js.map +1 -0
- package/dist/heartbeat/cron-heartbeat.d.ts +97 -0
- package/dist/heartbeat/cron-heartbeat.d.ts.map +1 -0
- package/dist/heartbeat/cron-heartbeat.js +200 -0
- package/dist/heartbeat/cron-heartbeat.js.map +1 -0
- package/dist/index.d.ts +34 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -14
- package/dist/index.js.map +1 -1
- package/dist/infra.plugin.d.ts +1 -1
- package/dist/infra.plugin.d.ts.map +1 -1
- package/dist/infra.plugin.js +62 -12
- package/dist/infra.plugin.js.map +1 -1
- package/dist/kinds/alerts.kind.d.ts +64 -25
- package/dist/kinds/alerts.kind.d.ts.map +1 -1
- package/dist/kinds/alerts.kind.js +43 -16
- package/dist/kinds/alerts.kind.js.map +1 -1
- package/dist/kinds/artifact.kind.d.ts +58 -10
- package/dist/kinds/artifact.kind.d.ts.map +1 -1
- package/dist/kinds/artifact.kind.js +26 -9
- package/dist/kinds/artifact.kind.js.map +1 -1
- package/dist/kinds/billing.kind.d.ts +88 -0
- package/dist/kinds/billing.kind.d.ts.map +1 -0
- package/dist/kinds/billing.kind.js +48 -0
- package/dist/kinds/billing.kind.js.map +1 -0
- package/dist/kinds/build-job.kind.d.ts +381 -0
- package/dist/kinds/build-job.kind.d.ts.map +1 -0
- package/dist/kinds/build-job.kind.js +216 -0
- package/dist/kinds/build-job.kind.js.map +1 -0
- package/dist/kinds/cache.kind.d.ts +39 -92
- package/dist/kinds/cache.kind.d.ts.map +1 -1
- package/dist/kinds/cache.kind.js +26 -51
- package/dist/kinds/cache.kind.js.map +1 -1
- package/dist/kinds/cluster.kind.d.ts +154 -0
- package/dist/kinds/cluster.kind.d.ts.map +1 -0
- package/dist/kinds/cluster.kind.js +99 -0
- package/dist/kinds/cluster.kind.js.map +1 -0
- package/dist/kinds/compute-source.kind.d.ts +138 -0
- package/dist/kinds/compute-source.kind.d.ts.map +1 -0
- package/dist/kinds/compute-source.kind.js +145 -0
- package/dist/kinds/compute-source.kind.js.map +1 -0
- package/dist/kinds/compute-sources.descriptors.d.ts +45 -0
- package/dist/kinds/compute-sources.descriptors.d.ts.map +1 -0
- package/dist/kinds/compute-sources.descriptors.js +93 -0
- package/dist/kinds/compute-sources.descriptors.js.map +1 -0
- package/dist/kinds/container-registry.kind.d.ts +62 -0
- package/dist/kinds/container-registry.kind.d.ts.map +1 -0
- package/dist/kinds/container-registry.kind.js +47 -0
- package/dist/kinds/container-registry.kind.js.map +1 -0
- package/dist/kinds/database-migrator.kind.d.ts +6 -0
- package/dist/kinds/database-migrator.kind.d.ts.map +1 -0
- package/dist/kinds/database-migrator.kind.js +28 -0
- package/dist/kinds/database-migrator.kind.js.map +1 -0
- package/dist/kinds/database.kind.d.ts +114 -93
- package/dist/kinds/database.kind.d.ts.map +1 -1
- package/dist/kinds/database.kind.js +93 -54
- package/dist/kinds/database.kind.js.map +1 -1
- package/dist/kinds/deployment-provider.kind.d.ts +5 -0
- package/dist/kinds/deployment-provider.kind.d.ts.map +1 -0
- package/dist/kinds/deployment-provider.kind.js +11 -0
- package/dist/kinds/deployment-provider.kind.js.map +1 -0
- package/dist/kinds/discovery.d.ts +5 -12
- package/dist/kinds/discovery.d.ts.map +1 -1
- package/dist/kinds/discovery.js +5 -17
- package/dist/kinds/discovery.js.map +1 -1
- package/dist/kinds/dns.kind.d.ts +162 -0
- package/dist/kinds/dns.kind.d.ts.map +1 -0
- package/dist/kinds/dns.kind.js +54 -0
- package/dist/kinds/dns.kind.js.map +1 -0
- package/dist/kinds/drift.kind.d.ts +115 -0
- package/dist/kinds/drift.kind.d.ts.map +1 -0
- package/dist/kinds/drift.kind.js +60 -0
- package/dist/kinds/drift.kind.js.map +1 -0
- package/dist/kinds/edge-tls.kind.d.ts +194 -0
- package/dist/kinds/edge-tls.kind.d.ts.map +1 -0
- package/dist/kinds/edge-tls.kind.js +58 -0
- package/dist/kinds/edge-tls.kind.js.map +1 -0
- package/dist/kinds/firewall.kind.d.ts +92 -0
- package/dist/kinds/firewall.kind.d.ts.map +1 -0
- package/dist/kinds/firewall.kind.js +59 -0
- package/dist/kinds/firewall.kind.js.map +1 -0
- package/dist/kinds/git-hosting.kind.d.ts +36 -38
- package/dist/kinds/git-hosting.kind.d.ts.map +1 -1
- package/dist/kinds/git-hosting.kind.js +23 -34
- package/dist/kinds/git-hosting.kind.js.map +1 -1
- package/dist/kinds/index.d.ts +40 -15
- package/dist/kinds/index.d.ts.map +1 -1
- package/dist/kinds/index.js +39 -14
- package/dist/kinds/index.js.map +1 -1
- package/dist/kinds/inventory.kind.d.ts +326 -0
- package/dist/kinds/inventory.kind.d.ts.map +1 -0
- package/dist/kinds/inventory.kind.js +188 -0
- package/dist/kinds/inventory.kind.js.map +1 -0
- package/dist/kinds/load-balancer.kind.d.ts +135 -0
- package/dist/kinds/load-balancer.kind.d.ts.map +1 -0
- package/dist/kinds/load-balancer.kind.js +71 -0
- package/dist/kinds/load-balancer.kind.js.map +1 -0
- package/dist/kinds/logs.kind.d.ts +74 -3
- package/dist/kinds/logs.kind.d.ts.map +1 -1
- package/dist/kinds/logs.kind.js +26 -17
- package/dist/kinds/logs.kind.js.map +1 -1
- package/dist/kinds/nfs.kind.d.ts +67 -0
- package/dist/kinds/nfs.kind.d.ts.map +1 -0
- package/dist/kinds/nfs.kind.js +45 -0
- package/dist/kinds/nfs.kind.js.map +1 -0
- package/dist/kinds/node-pool.kind.d.ts +134 -0
- package/dist/kinds/node-pool.kind.d.ts.map +1 -0
- package/dist/kinds/node-pool.kind.js +88 -0
- package/dist/kinds/node-pool.kind.js.map +1 -0
- package/dist/kinds/object-storage.kind.d.ts +50 -24
- package/dist/kinds/object-storage.kind.d.ts.map +1 -1
- package/dist/kinds/object-storage.kind.js +40 -23
- package/dist/kinds/object-storage.kind.js.map +1 -1
- package/dist/kinds/observability.kind.d.ts +104 -6
- package/dist/kinds/observability.kind.d.ts.map +1 -1
- package/dist/kinds/observability.kind.js +67 -9
- package/dist/kinds/observability.kind.js.map +1 -1
- package/dist/kinds/package-registry.kind.d.ts +27 -31
- package/dist/kinds/package-registry.kind.d.ts.map +1 -1
- package/dist/kinds/package-registry.kind.js +13 -26
- package/dist/kinds/package-registry.kind.js.map +1 -1
- package/dist/kinds/queue.kind.d.ts +67 -63
- package/dist/kinds/queue.kind.d.ts.map +1 -1
- package/dist/kinds/queue.kind.js +55 -33
- package/dist/kinds/queue.kind.js.map +1 -1
- package/dist/kinds/read-descriptor.d.ts +15 -0
- package/dist/kinds/read-descriptor.d.ts.map +1 -0
- package/dist/kinds/read-descriptor.js +11 -0
- package/dist/kinds/read-descriptor.js.map +1 -0
- package/dist/kinds/rum.kind.d.ts +36 -6
- package/dist/kinds/rum.kind.d.ts.map +1 -1
- package/dist/kinds/rum.kind.js +6 -7
- package/dist/kinds/rum.kind.js.map +1 -1
- package/dist/kinds/sandbox.kind.d.ts +136 -36
- package/dist/kinds/sandbox.kind.d.ts.map +1 -1
- package/dist/kinds/sandbox.kind.js +80 -34
- package/dist/kinds/sandbox.kind.js.map +1 -1
- package/dist/kinds/select-compute-source.d.ts +72 -0
- package/dist/kinds/select-compute-source.d.ts.map +1 -0
- package/dist/kinds/select-compute-source.js +170 -0
- package/dist/kinds/select-compute-source.js.map +1 -0
- package/dist/kinds/service-release.kind.d.ts +771 -0
- package/dist/kinds/service-release.kind.d.ts.map +1 -0
- package/dist/kinds/service-release.kind.js +676 -0
- package/dist/kinds/service-release.kind.js.map +1 -0
- package/dist/kinds/spend-guard.kind.d.ts +40 -0
- package/dist/kinds/spend-guard.kind.d.ts.map +1 -0
- package/dist/kinds/spend-guard.kind.js +133 -0
- package/dist/kinds/spend-guard.kind.js.map +1 -0
- package/dist/kinds/utilization.kind.d.ts +88 -0
- package/dist/kinds/utilization.kind.d.ts.map +1 -0
- package/dist/kinds/utilization.kind.js +62 -0
- package/dist/kinds/utilization.kind.js.map +1 -0
- package/dist/kinds/volume.kind.d.ts +54 -0
- package/dist/kinds/volume.kind.d.ts.map +1 -0
- package/dist/kinds/volume.kind.js +39 -0
- package/dist/kinds/volume.kind.js.map +1 -0
- package/dist/kinds/vpc.kind.d.ts +61 -0
- package/dist/kinds/vpc.kind.d.ts.map +1 -0
- package/dist/kinds/vpc.kind.js +51 -0
- package/dist/kinds/vpc.kind.js.map +1 -0
- package/dist/kinds/web-app.kind.d.ts +115 -45
- package/dist/kinds/web-app.kind.d.ts.map +1 -1
- package/dist/kinds/web-app.kind.js +69 -42
- package/dist/kinds/web-app.kind.js.map +1 -1
- package/dist/kinds/worker.kind.d.ts +291 -188
- package/dist/kinds/worker.kind.d.ts.map +1 -1
- package/dist/kinds/worker.kind.js +45 -123
- package/dist/kinds/worker.kind.js.map +1 -1
- package/dist/schemas/database-migration.d.ts +173 -0
- package/dist/schemas/database-migration.d.ts.map +1 -0
- package/dist/schemas/database-migration.js +88 -0
- package/dist/schemas/database-migration.js.map +1 -0
- package/dist/schemas/deployment-environment.d.ts +11 -0
- package/dist/schemas/deployment-environment.d.ts.map +1 -0
- package/dist/schemas/deployment-environment.js +9 -0
- package/dist/schemas/deployment-environment.js.map +1 -0
- package/dist/schemas/deployment-provider.d.ts +336 -0
- package/dist/schemas/deployment-provider.d.ts.map +1 -0
- package/dist/schemas/deployment-provider.js +198 -0
- package/dist/schemas/deployment-provider.js.map +1 -0
- package/dist/schemas/log-stream.d.ts +27 -0
- package/dist/schemas/log-stream.d.ts.map +1 -0
- package/dist/schemas/log-stream.js +31 -0
- package/dist/schemas/log-stream.js.map +1 -0
- package/dist/schemas/spend-guard.d.ts +155 -0
- package/dist/schemas/spend-guard.d.ts.map +1 -0
- package/dist/schemas/spend-guard.js +61 -0
- package/dist/schemas/spend-guard.js.map +1 -0
- package/dist/schemas.d.ts +190 -20
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +137 -31
- package/dist/schemas.js.map +1 -1
- package/dist/service.d.ts +87 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +199 -0
- package/dist/service.js.map +1 -0
- package/dist/settle-work.d.ts +20 -0
- package/dist/settle-work.d.ts.map +1 -0
- package/dist/settle-work.js +22 -0
- package/dist/settle-work.js.map +1 -0
- package/dist/web-app-projection.d.ts +132 -0
- package/dist/web-app-projection.d.ts.map +1 -0
- package/dist/web-app-projection.js +93 -0
- package/dist/web-app-projection.js.map +1 -0
- package/package.json +89 -39
- package/SPEC.md +0 -169
- package/src/bootstrap/index.ts +0 -15
- package/src/bootstrap/seed.descriptor.ts +0 -24
- package/src/bootstrap/seed.impl-shape.ts +0 -5
- package/src/bootstrap/seed.kind.ts +0 -26
- package/src/bootstrap/seed.runner.ts +0 -87
- package/src/credentials/resolve.ts +0 -205
- package/src/deployment.ts +0 -57
- package/src/index.ts +0 -149
- package/src/infra.plugin.ts +0 -54
- package/src/kinds/alerts.kind.ts +0 -164
- package/src/kinds/artifact.kind.ts +0 -96
- package/src/kinds/cache.kind.ts +0 -104
- package/src/kinds/database.kind.ts +0 -120
- package/src/kinds/discovery.ts +0 -26
- package/src/kinds/git-hosting.kind.ts +0 -100
- package/src/kinds/index.ts +0 -139
- package/src/kinds/logs.kind.ts +0 -104
- package/src/kinds/object-storage.kind.ts +0 -101
- package/src/kinds/observability.kind.ts +0 -178
- package/src/kinds/package-registry.kind.ts +0 -95
- package/src/kinds/queue.kind.ts +0 -102
- package/src/kinds/rum.kind.ts +0 -135
- package/src/kinds/sandbox.kind.ts +0 -115
- package/src/kinds/web-app.kind.ts +0 -103
- package/src/kinds/worker.kind.ts +0 -203
- package/src/schemas.ts +0 -127
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one selection of a deployment environment and of a provider config's
|
|
3
|
+
* environment block. Generic over every provider whose config nests named
|
|
4
|
+
* environments under `env` (wrangler's `env.<name>`, and any provider with the
|
|
5
|
+
* same shape): the deploy driver and each provider implementation select
|
|
6
|
+
* through these, so the environment that picks credentials, ledgers and
|
|
7
|
+
* provider bindings is always the same one.
|
|
8
|
+
*/
|
|
9
|
+
import { ProviderConfigSchema } from "./schemas/deployment-environment.js";
|
|
10
|
+
export { ProviderConfigSchema, ResolvedProviderConfigSchema } from "./schemas/deployment-environment.js";
|
|
11
|
+
/** The record view of an admitted value, parsed once at the boundary. */
|
|
12
|
+
function asRecord(value) {
|
|
13
|
+
const parsed = ProviderConfigSchema.safeParse(value);
|
|
14
|
+
return parsed.success ? parsed.data : null;
|
|
15
|
+
}
|
|
16
|
+
/** `prod`/absent read as `production`, `dev` as `development`; every other name is kept, lower-cased. */
|
|
17
|
+
export function normalizeDeploymentEnvironment(environment) {
|
|
18
|
+
const value = environment?.trim().toLowerCase();
|
|
19
|
+
if (!value || value === 'prod')
|
|
20
|
+
return 'production';
|
|
21
|
+
if (value === 'dev')
|
|
22
|
+
return 'development';
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Select one semantic environment before any runtime, provider, secrets, or
|
|
27
|
+
* ledger work. `--wrangler-env` remains a compatibility spelling, but it no
|
|
28
|
+
* longer forms an independent provider-only selector that can drift from the
|
|
29
|
+
* environment used for credentials and deployment records.
|
|
30
|
+
*/
|
|
31
|
+
export function selectDeploymentEnvironment(input) {
|
|
32
|
+
return normalizeDeploymentEnvironment(input.environment ?? input.providerEnvironment);
|
|
33
|
+
}
|
|
34
|
+
/** Select a provider block without inheriting production bindings into named environments. */
|
|
35
|
+
export function resolveDeploymentProviderConfig(generatedConfig, environment) {
|
|
36
|
+
const selected = selectDeploymentEnvironment({ environment });
|
|
37
|
+
if (selected === 'production')
|
|
38
|
+
return { config: generatedConfig, providerEnvironment: null };
|
|
39
|
+
const providerEnvironment = selected === 'local' ? 'development' : selected;
|
|
40
|
+
const environments = asRecord(generatedConfig.env) ?? {};
|
|
41
|
+
return {
|
|
42
|
+
config: asRecord(environments[providerEnvironment]),
|
|
43
|
+
providerEnvironment
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** Refuse a missing named block before callers resolve credentials or execute provider commands. */
|
|
47
|
+
export function requireDeploymentProviderConfig(generatedConfig, environment) {
|
|
48
|
+
const selected = resolveDeploymentProviderConfig(generatedConfig, environment);
|
|
49
|
+
if (!selected.config)
|
|
50
|
+
throw new Error(`Missing explicit provider environment "${selected.providerEnvironment}"; refusing production fallback.`);
|
|
51
|
+
return { config: selected.config, providerEnvironment: selected.providerEnvironment };
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=deployment-environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-environment.js","sourceRoot":"","sources":["../src/deployment-environment.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,oBAAoB,EAAoD,MAAM,qCAAqC,CAAC;AAC7H,OAAO,EACN,oBAAoB,EACpB,4BAA4B,EAG5B,MAAM,qCAAqC,CAAC;AAE7C,yEAAyE;AACzE,SAAS,QAAQ,CAAC,KAAc;IAC/B,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,8BAA8B,CAAC,WAA+B;IAC7E,MAAM,KAAK,GAAG,WAAW,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IACpD,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,aAAa,CAAC;IAC1C,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAG3C;IACA,OAAO,8BAA8B,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACvF,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,+BAA+B,CAC9C,eAA+B,EAC/B,WAAoB;IAEpB,MAAM,QAAQ,GAAG,2BAA2B,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC9D,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAC7F,MAAM,mBAAmB,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5E,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACzD,OAAO;QACN,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QACnD,mBAAmB;KACnB,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,+BAA+B,CAAC,eAA+B,EAAE,WAAoB;IACpG,MAAM,QAAQ,GAAG,+BAA+B,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC/E,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,CAAC,mBAAmB,kCAAkC,CAAC,CAAC;IAChJ,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,EAAE,CAAC;AACvF,CAAC"}
|
package/dist/deployment.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type RuntimeRef } from '@vibesdotdev/kernel';
|
|
2
|
+
import type * as z from 'zod/v4';
|
|
3
|
+
import { deploymentDependencySchema, type AppDeployment, type AppDeploymentInput, type DeploymentDependency, type DeploymentEnvRequirement, type DeploymentOrigin, type DeploymentOriginEnv, type DeploymentUpstream } from './schemas.ts';
|
|
2
4
|
export declare function createAppDeployment(input: AppDeploymentInput): AppDeployment;
|
|
5
|
+
/** Validate admission using only capabilities selected in the caller's runtime. */
|
|
6
|
+
export declare function validateAppDeployment(runtime: RuntimeRef, deployment: AppDeployment): void;
|
|
3
7
|
export declare function createDeploymentOrigin(input: DeploymentOrigin): DeploymentOrigin;
|
|
4
8
|
export declare function createDeploymentEnvRequirement(input: DeploymentEnvRequirement): DeploymentEnvRequirement;
|
|
5
|
-
export declare function createDeploymentDependency(input:
|
|
9
|
+
export declare function createDeploymentDependency(input: z.input<typeof deploymentDependencySchema>): DeploymentDependency;
|
|
6
10
|
export declare function getPrimaryOrigin(deployment: AppDeployment): DeploymentOrigin;
|
|
7
|
-
export declare function getUpstreamOriginEnv(upstream: DeploymentUpstream):
|
|
8
|
-
export type { AppDeployment, AppDeploymentInput, DeploymentDependency, DeploymentEnvRequirement, DeploymentOrigin, DeploymentUpstream };
|
|
11
|
+
export declare function getUpstreamOriginEnv(upstream: DeploymentUpstream): DeploymentOriginEnv;
|
|
12
|
+
export type { AppDeployment, AppDeploymentInput, DeploymentDependency, DeploymentEnvRequirement, DeploymentOrigin, DeploymentOriginEnv, DeploymentUpstream };
|
|
9
13
|
//# sourceMappingURL=deployment.d.ts.map
|
package/dist/deployment.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAErF,OAAO,KAAK,KAAK,CAAC,MAAM,QAAQ,CAAC;AACjC,OAAO,EAEN,0BAA0B,EAG1B,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,MAAM,cAAc,CAAC;AAEtB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAE5E;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,GAAG,IAAI,CA0B1F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAEhF;AAED,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,wBAAwB,GAC7B,wBAAwB,CAE1B;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,GAAG,oBAAoB,CAElH;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,aAAa,GAAG,gBAAgB,CAI5E;AAED,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,kBAAkB,GAC1B,mBAAmB,CAQrB;AAED,YAAY,EACX,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,CAAC"}
|
package/dist/deployment.js
CHANGED
|
@@ -1,7 +1,37 @@
|
|
|
1
|
+
import { CapabilityError, matchesScope } from '@vibesdotdev/kernel';
|
|
2
|
+
import { DeploymentProviderDescriptorSchema } from "./kinds/deployment-provider.kind.js";
|
|
1
3
|
import { appDeploymentSchema, deploymentDependencySchema, deploymentEnvRequirementSchema, deploymentOriginSchema } from "./schemas.js";
|
|
2
4
|
export function createAppDeployment(input) {
|
|
3
5
|
return appDeploymentSchema.parse(input);
|
|
4
6
|
}
|
|
7
|
+
/** Validate admission using only capabilities selected in the caller's runtime. */
|
|
8
|
+
export function validateAppDeployment(runtime, deployment) {
|
|
9
|
+
const candidates = runtime.hasKind('infra/deployment-provider')
|
|
10
|
+
? runtime.query('infra/deployment-provider')
|
|
11
|
+
.withId(deployment.provider)
|
|
12
|
+
.enabled()
|
|
13
|
+
.filter((provider) => matchesScope(runtime.scope, { hardware: provider.hardware }))
|
|
14
|
+
.descriptors()
|
|
15
|
+
: [];
|
|
16
|
+
const descriptor = candidates[0];
|
|
17
|
+
if (!descriptor) {
|
|
18
|
+
throw new CapabilityError('The deployment provider is not registered.', 'UNAVAILABLE', {
|
|
19
|
+
reason: 'deployment-provider-unavailable', details: { provider: deployment.provider }
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
const capabilities = DeploymentProviderDescriptorSchema.parse(descriptor);
|
|
23
|
+
if (!capabilities.runtimes.includes(deployment.runtime)) {
|
|
24
|
+
throw new CapabilityError('The deployment provider does not support the requested runtime.', 'INVALID_INPUT', {
|
|
25
|
+
reason: 'deployment-runtime-unsupported',
|
|
26
|
+
details: { provider: deployment.provider, runtime: deployment.runtime }
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (deployment.execution?.pty === true && !capabilities.pty) {
|
|
30
|
+
throw new CapabilityError('The deployment provider does not support interactive PTY sessions.', 'INVALID_INPUT', {
|
|
31
|
+
reason: 'deployment-pty-unsupported', details: { provider: deployment.provider }
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
5
35
|
export function createDeploymentOrigin(input) {
|
|
6
36
|
return deploymentOriginSchema.parse(input);
|
|
7
37
|
}
|
package/dist/deployment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,8BAA8B,EAC9B,sBAAsB,
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { CloudProvider, CloudInstance, CloudProviderErrorDetails, InstanceConfig, InstanceFilters, CloudVolume, VolumeConfig, VolumeFilters, SSHKey } from '../types.ts';
|
|
2
|
+
import { CapabilityError, type CapabilityErrorDetails, type VibesRuntime } from '@vibesdotdev/kernel';
|
|
3
|
+
/**
|
|
4
|
+
* A provider failure in the `CapabilityError` taxonomy: `code` is the mapped
|
|
5
|
+
* taxonomy code (`TIMEOUT`, `NOT_FOUND` for `*_NOT_FOUND`, else
|
|
6
|
+
* `UNAVAILABLE`), `reason` is `cloud-provider-<providerCode>`, and the
|
|
7
|
+
* provider's own code stays on `providerCode`. Message and text details are
|
|
8
|
+
* redacted (credential shapes and control characters removed, bounded).
|
|
9
|
+
*/
|
|
10
|
+
export declare class CloudProviderError extends CapabilityError {
|
|
11
|
+
readonly provider: string;
|
|
12
|
+
readonly providerCode: string;
|
|
13
|
+
constructor(message: string, providerCode: string, provider: string, details?: CloudProviderErrorDetails, options?: {
|
|
14
|
+
readonly cause?: Error | CapabilityErrorDetails;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
/** Shared mechanics for provider-owned compute and volume implementations. */
|
|
18
|
+
export declare abstract class BaseCloudProvider implements CloudProvider {
|
|
19
|
+
#private;
|
|
20
|
+
protected defaultRegion?: string | undefined;
|
|
21
|
+
abstract name: string;
|
|
22
|
+
constructor(runtime: Pick<VibesRuntime, 'lifecycle'>, credentials: string, defaultRegion?: string | undefined);
|
|
23
|
+
/** Keep runtime internals out of serialization while preserving provider access. */
|
|
24
|
+
protected get runtime(): Pick<VibesRuntime, 'lifecycle'>;
|
|
25
|
+
protected set runtime(runtime: Pick<VibesRuntime, 'lifecycle'>);
|
|
26
|
+
/** The credential the provider was constructed with, for its own requests. */
|
|
27
|
+
protected get credentials(): string;
|
|
28
|
+
abstract createInstance(config: InstanceConfig): Promise<CloudInstance>;
|
|
29
|
+
abstract deleteInstance(instanceId: string): Promise<void>;
|
|
30
|
+
abstract getInstance(instanceId: string): Promise<CloudInstance | null>;
|
|
31
|
+
abstract listInstances(filters?: InstanceFilters): Promise<CloudInstance[]>;
|
|
32
|
+
abstract createVolume(config: VolumeConfig): Promise<CloudVolume>;
|
|
33
|
+
abstract attachVolume(volumeId: string, instanceId: string): Promise<void>;
|
|
34
|
+
abstract detachVolume(volumeId: string): Promise<void>;
|
|
35
|
+
abstract deleteVolume(volumeId: string): Promise<void>;
|
|
36
|
+
abstract listVolumes(filters?: VolumeFilters): Promise<CloudVolume[]>;
|
|
37
|
+
abstract getOrCreateVPC(name: string): Promise<string>;
|
|
38
|
+
abstract addSSHKey(name: string, publicKey: string): Promise<string>;
|
|
39
|
+
abstract listSSHKeys(): Promise<SSHKey[]>;
|
|
40
|
+
protected waitForInstanceStatus(instanceId: string, targetStatus: string, timeoutMs?: number, pollIntervalMs?: number): Promise<CloudInstance>;
|
|
41
|
+
protected waitForVolumeStatus(volumeId: string, targetStatus: string, timeoutMs?: number, pollIntervalMs?: number): Promise<CloudVolume>;
|
|
42
|
+
/** A typed provider failure; `cause` is the failure it replaces, kept for `-v` and logs. */
|
|
43
|
+
protected createError(message: string, code: string, details?: CloudProviderErrorDetails, cause?: Error): CloudProviderError;
|
|
44
|
+
protected buildTags(tags: Record<string, string>, additionalTags?: Record<string, string>): {
|
|
45
|
+
'managed-by': string;
|
|
46
|
+
provider: string;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/doks/cloud/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { CapabilityError, isCapabilityError } from '@vibesdotdev/kernel';
|
|
3
|
+
import { redactedExcerpt } from '@vibesdotdev/shared/utils';
|
|
4
|
+
/** The taxonomy code a provider's own failure code maps to. */
|
|
5
|
+
function capabilityCodeOf(providerCode) {
|
|
6
|
+
if (providerCode === 'TIMEOUT')
|
|
7
|
+
return 'TIMEOUT';
|
|
8
|
+
if (providerCode.endsWith('_NOT_FOUND'))
|
|
9
|
+
return 'NOT_FOUND';
|
|
10
|
+
return 'UNAVAILABLE';
|
|
11
|
+
}
|
|
12
|
+
/** `cloud-provider-<provider code in kebab form>`, bounded. */
|
|
13
|
+
function reasonOf(providerCode) {
|
|
14
|
+
const slug = providerCode.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 40);
|
|
15
|
+
return `cloud-provider-${slug || 'failure'}`;
|
|
16
|
+
}
|
|
17
|
+
/** One detail value as carried: text redacted, scalars as given. */
|
|
18
|
+
const DetailValueSchema = z.union([z.string().transform((text) => redactedExcerpt(text)), z.number(), z.boolean(), z.null()]);
|
|
19
|
+
function redactedDetails(provider, providerCode, details) {
|
|
20
|
+
const redacted = {};
|
|
21
|
+
for (const [key, value] of Object.entries(details ?? {})) {
|
|
22
|
+
if (value !== undefined)
|
|
23
|
+
redacted[key] = DetailValueSchema.parse(value);
|
|
24
|
+
}
|
|
25
|
+
return { ...redacted, provider, providerCode };
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A provider failure in the `CapabilityError` taxonomy: `code` is the mapped
|
|
29
|
+
* taxonomy code (`TIMEOUT`, `NOT_FOUND` for `*_NOT_FOUND`, else
|
|
30
|
+
* `UNAVAILABLE`), `reason` is `cloud-provider-<providerCode>`, and the
|
|
31
|
+
* provider's own code stays on `providerCode`. Message and text details are
|
|
32
|
+
* redacted (credential shapes and control characters removed, bounded).
|
|
33
|
+
*/
|
|
34
|
+
export class CloudProviderError extends CapabilityError {
|
|
35
|
+
provider;
|
|
36
|
+
providerCode;
|
|
37
|
+
constructor(message, providerCode, provider, details, options = {}) {
|
|
38
|
+
super(redactedExcerpt(message), capabilityCodeOf(providerCode), {
|
|
39
|
+
reason: reasonOf(providerCode),
|
|
40
|
+
details: redactedDetails(provider, providerCode, details),
|
|
41
|
+
cause: options.cause
|
|
42
|
+
});
|
|
43
|
+
this.name = 'CloudProviderError';
|
|
44
|
+
this.provider = provider;
|
|
45
|
+
this.providerCode = providerCode;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Shared mechanics for provider-owned compute and volume implementations. */
|
|
49
|
+
export class BaseCloudProvider {
|
|
50
|
+
defaultRegion;
|
|
51
|
+
/** The provider credential, private to this class: never an enumerable field that JSON or inspect would print. */
|
|
52
|
+
#credentials;
|
|
53
|
+
#runtime;
|
|
54
|
+
constructor(runtime, credentials, defaultRegion) {
|
|
55
|
+
this.defaultRegion = defaultRegion;
|
|
56
|
+
this.#credentials = credentials;
|
|
57
|
+
this.#runtime = runtime;
|
|
58
|
+
}
|
|
59
|
+
/** Keep runtime internals out of serialization while preserving provider access. */
|
|
60
|
+
get runtime() {
|
|
61
|
+
return this.#runtime;
|
|
62
|
+
}
|
|
63
|
+
set runtime(runtime) {
|
|
64
|
+
this.#runtime = runtime;
|
|
65
|
+
}
|
|
66
|
+
/** The credential the provider was constructed with, for its own requests. */
|
|
67
|
+
get credentials() {
|
|
68
|
+
return this.#credentials;
|
|
69
|
+
}
|
|
70
|
+
async waitForInstanceStatus(instanceId, targetStatus, timeoutMs = 300_000, pollIntervalMs = 5_000) {
|
|
71
|
+
try {
|
|
72
|
+
return await this.runtime.lifecycle.wait(async (signal) => {
|
|
73
|
+
while (true) {
|
|
74
|
+
const instance = await this.getInstance(instanceId);
|
|
75
|
+
if (!instance)
|
|
76
|
+
throw this.createError('Instance not found', 'INSTANCE_NOT_FOUND', { instanceId });
|
|
77
|
+
if (instance.status === targetStatus)
|
|
78
|
+
return instance;
|
|
79
|
+
if (instance.status === 'error' || instance.status === 'terminated') {
|
|
80
|
+
throw this.createError(`Instance entered error state: ${instance.status}`, 'INSTANCE_ERROR', {
|
|
81
|
+
instanceId,
|
|
82
|
+
status: instance.status
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
await this.runtime.lifecycle.delay(pollIntervalMs, signal);
|
|
86
|
+
}
|
|
87
|
+
}, { timeoutMs, reason: `waiting-for-instance-status-${targetStatus}` });
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
if (err instanceof Error && isCapabilityError(err) && err.reason === 'wait-timeout') {
|
|
91
|
+
throw new CloudProviderError(`Timeout waiting for instance status: ${targetStatus}`, 'TIMEOUT', this.name, {
|
|
92
|
+
instanceId,
|
|
93
|
+
targetStatus,
|
|
94
|
+
timeoutMs
|
|
95
|
+
}, { cause: err });
|
|
96
|
+
}
|
|
97
|
+
throw err;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async waitForVolumeStatus(volumeId, targetStatus, timeoutMs = 120_000, pollIntervalMs = 3_000) {
|
|
101
|
+
try {
|
|
102
|
+
return await this.runtime.lifecycle.wait(async (signal) => {
|
|
103
|
+
while (true) {
|
|
104
|
+
const volume = (await this.listVolumes()).find((candidate) => candidate.id === volumeId);
|
|
105
|
+
if (!volume)
|
|
106
|
+
throw this.createError('Volume not found', 'VOLUME_NOT_FOUND', { volumeId });
|
|
107
|
+
if (volume.status === targetStatus)
|
|
108
|
+
return volume;
|
|
109
|
+
if (volume.status === 'error' || volume.status === 'deleted') {
|
|
110
|
+
throw this.createError(`Volume entered error state: ${volume.status}`, 'VOLUME_ERROR', {
|
|
111
|
+
volumeId,
|
|
112
|
+
status: volume.status
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
await this.runtime.lifecycle.delay(pollIntervalMs, signal);
|
|
116
|
+
}
|
|
117
|
+
}, { timeoutMs, reason: `waiting-for-volume-status-${targetStatus}` });
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
if (err instanceof Error && isCapabilityError(err) && err.reason === 'wait-timeout') {
|
|
121
|
+
throw new CloudProviderError(`Timeout waiting for volume status: ${targetStatus}`, 'TIMEOUT', this.name, {
|
|
122
|
+
volumeId,
|
|
123
|
+
targetStatus,
|
|
124
|
+
timeoutMs
|
|
125
|
+
}, { cause: err });
|
|
126
|
+
}
|
|
127
|
+
throw err;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/** A typed provider failure; `cause` is the failure it replaces, kept for `-v` and logs. */
|
|
131
|
+
createError(message, code, details, cause) {
|
|
132
|
+
return new CloudProviderError(message, code, this.name, details, { cause });
|
|
133
|
+
}
|
|
134
|
+
buildTags(tags, additionalTags) {
|
|
135
|
+
return { 'managed-by': 'vibes', provider: this.name, ...tags, ...additionalTags };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/doks/cloud/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { VibesRuntime } from '@vibesdotdev/kernel';
|
|
2
|
+
import type { CloudProvider } from '../types.ts';
|
|
3
|
+
export type CloudProviderFactory = (runtime: Pick<VibesRuntime, 'lifecycle'>, credentials: string, region: string) => CloudProvider;
|
|
4
|
+
export interface CloudProviderFactoryImplementation {
|
|
5
|
+
create: CloudProviderFactory;
|
|
6
|
+
}
|
|
7
|
+
export interface CloudProviderFactoryRuntime {
|
|
8
|
+
resolve<T>(kind: string, id: string): Promise<T>;
|
|
9
|
+
readonly lifecycle: VibesRuntime['lifecycle'];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Resolve and construct the vendor implementation selected by the active
|
|
13
|
+
* runtime. A resolved implementation without `create` refuses
|
|
14
|
+
* `INVALID_INPUT cloud-provider-factory-invalid`; a resolution failure passes
|
|
15
|
+
* through as the runtime raised it.
|
|
16
|
+
*/
|
|
17
|
+
export declare function createRegisteredCloudProvider(runtime: CloudProviderFactoryRuntime, type: string, credentials: string, region: string): Promise<CloudProvider>;
|
|
18
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/doks/cloud/factory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,aAAa,CAAC;AAEpI,MAAM,WAAW,kCAAkC;IAClD,MAAM,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC3C,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;CAC9C;AAYD;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAClD,OAAO,EAAE,2BAA2B,EACpC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,CAAC,CAOxB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { readUntrusted } from '@vibesdotdev/config/manifest/read-untrusted';
|
|
3
|
+
/** A registered factory offers `create`; kept as the original object (its method may use `this`). */
|
|
4
|
+
const FactoryOperationsSchema = z.object({ create: z.function() });
|
|
5
|
+
const FactorySchema = z.custom((value) => FactoryOperationsSchema.safeParse(value).success);
|
|
6
|
+
const FACTORY_INVALID = {
|
|
7
|
+
code: 'INVALID_INPUT',
|
|
8
|
+
reason: 'cloud-provider-factory-invalid',
|
|
9
|
+
message: () => 'The registered infra/cloud-provider implementation offers no create().'
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Resolve and construct the vendor implementation selected by the active
|
|
13
|
+
* runtime. A resolved implementation without `create` refuses
|
|
14
|
+
* `INVALID_INPUT cloud-provider-factory-invalid`; a resolution failure passes
|
|
15
|
+
* through as the runtime raised it.
|
|
16
|
+
*/
|
|
17
|
+
export async function createRegisteredCloudProvider(runtime, type, credentials, region) {
|
|
18
|
+
const resolved = await runtime.resolve('infra/cloud-provider', type);
|
|
19
|
+
const factory = readUntrusted(FactorySchema, () => resolved, FACTORY_INVALID);
|
|
20
|
+
return factory.create(runtime, credentials, region);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/doks/cloud/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,aAAa,EAA6B,MAAM,6CAA6C,CAAC;AAevG,qGAAqG;AACrG,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnE,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAqC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;AAEhI,MAAM,eAAe,GAAyB;IAC7C,IAAI,EAAE,eAAe;IACrB,MAAM,EAAE,gCAAgC;IACxC,OAAO,EAAE,GAAG,EAAE,CAAC,wEAAwE;CACvF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAClD,OAAoC,EACpC,IAAY,EACZ,WAAmB,EACnB,MAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CACrC,sBAAsB,EACtB,IAAI,CACJ,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC9E,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { CloudProvider, InstanceConfig, CloudInstance, InstanceFilters, VolumeConfig, CloudVolume, VolumeFilters, SSHKey, CloudProviderConfig, CloudProviderErrorDetails, CloudInstanceMetadata, InstanceStatus, VolumeStatus } from '../types.ts';
|
|
2
|
+
export { CloudProviderError, CloudProviderConfigSchema } from '../types.ts';
|
|
3
|
+
export { BaseCloudProvider } from './base.ts';
|
|
4
|
+
export { createRegisteredCloudProvider, type CloudProviderFactory, type CloudProviderFactoryImplementation, type CloudProviderFactoryRuntime } from './factory.ts';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doks/cloud/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,EACX,aAAa,EACb,MAAM,EACN,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACN,6BAA6B,EAC7B,KAAK,oBAAoB,EACzB,KAAK,kCAAkC,EACvC,KAAK,2BAA2B,EAChC,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doks/cloud/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACN,6BAA6B,EAI7B,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/** Provider-neutral cloud compute and volume contracts. */
|
|
2
|
+
import * as z from 'zod/v4';
|
|
3
|
+
import type { CapabilityErrorDetails } from '@vibesdotdev/kernel';
|
|
4
|
+
export type InstanceStatus = 'pending' | 'running' | 'stopping' | 'stopped' | 'terminating' | 'terminated' | 'error';
|
|
5
|
+
export type VolumeStatus = 'creating' | 'available' | 'in-use' | 'deleting' | 'deleted' | 'error';
|
|
6
|
+
export interface CloudProvider {
|
|
7
|
+
name: string;
|
|
8
|
+
createInstance(config: InstanceConfig): Promise<CloudInstance>;
|
|
9
|
+
deleteInstance(instanceId: string): Promise<void>;
|
|
10
|
+
getInstance(instanceId: string): Promise<CloudInstance | null>;
|
|
11
|
+
listInstances(filters?: InstanceFilters): Promise<CloudInstance[]>;
|
|
12
|
+
createVolume(config: VolumeConfig): Promise<CloudVolume>;
|
|
13
|
+
attachVolume(volumeId: string, instanceId: string): Promise<void>;
|
|
14
|
+
detachVolume(volumeId: string): Promise<void>;
|
|
15
|
+
deleteVolume(volumeId: string): Promise<void>;
|
|
16
|
+
listVolumes(filters?: VolumeFilters): Promise<CloudVolume[]>;
|
|
17
|
+
getOrCreateVPC(name: string): Promise<string>;
|
|
18
|
+
addSSHKey(name: string, publicKey: string): Promise<string>;
|
|
19
|
+
listSSHKeys(): Promise<SSHKey[]>;
|
|
20
|
+
}
|
|
21
|
+
export interface InstanceConfig {
|
|
22
|
+
name: string;
|
|
23
|
+
type: string;
|
|
24
|
+
region: string;
|
|
25
|
+
image: string;
|
|
26
|
+
sshKeys?: string[];
|
|
27
|
+
vpcId?: string;
|
|
28
|
+
userData?: string;
|
|
29
|
+
tags: Record<string, string>;
|
|
30
|
+
}
|
|
31
|
+
export interface CloudInstance {
|
|
32
|
+
id: string;
|
|
33
|
+
name: string;
|
|
34
|
+
type: string;
|
|
35
|
+
region: string;
|
|
36
|
+
status: InstanceStatus;
|
|
37
|
+
publicIp?: string;
|
|
38
|
+
privateIp?: string;
|
|
39
|
+
createdAt: Date;
|
|
40
|
+
tags: Record<string, string>;
|
|
41
|
+
metadata?: CloudInstanceMetadata;
|
|
42
|
+
}
|
|
43
|
+
/** Provider-reported instance facts: JSON values only. */
|
|
44
|
+
export type CloudInstanceMetadata = CapabilityErrorDetails;
|
|
45
|
+
export interface InstanceFilters {
|
|
46
|
+
status?: InstanceStatus[];
|
|
47
|
+
tags?: Record<string, string>;
|
|
48
|
+
region?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface VolumeConfig {
|
|
51
|
+
name: string;
|
|
52
|
+
size: number;
|
|
53
|
+
region: string;
|
|
54
|
+
tags?: Record<string, string>;
|
|
55
|
+
}
|
|
56
|
+
export interface CloudVolume {
|
|
57
|
+
id: string;
|
|
58
|
+
name: string;
|
|
59
|
+
size: number;
|
|
60
|
+
region: string;
|
|
61
|
+
status: VolumeStatus;
|
|
62
|
+
attachedTo?: string;
|
|
63
|
+
createdAt: Date;
|
|
64
|
+
tags?: Record<string, string>;
|
|
65
|
+
}
|
|
66
|
+
export interface VolumeFilters {
|
|
67
|
+
status?: VolumeStatus[];
|
|
68
|
+
region?: string;
|
|
69
|
+
attachedTo?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface SSHKey {
|
|
72
|
+
id: string;
|
|
73
|
+
name: string;
|
|
74
|
+
fingerprint: string;
|
|
75
|
+
publicKey: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Provider-neutral cloud provider config. `type` is the open provider id,
|
|
79
|
+
* resolved through the registered cloud provider factory — never a closed
|
|
80
|
+
* provider enum.
|
|
81
|
+
*/
|
|
82
|
+
export declare const CloudProviderConfigSchema: z.ZodObject<{
|
|
83
|
+
type: z.ZodString;
|
|
84
|
+
credentials: z.ZodString;
|
|
85
|
+
region: z.ZodOptional<z.ZodString>;
|
|
86
|
+
}, z.core.$strip>;
|
|
87
|
+
export type CloudProviderConfig = z.infer<typeof CloudProviderConfigSchema>;
|
|
88
|
+
/**
|
|
89
|
+
* What a provider attaches to a failure: scalar facts (ids, statuses, HTTP
|
|
90
|
+
* codes). Text values are redacted at construction, so a provider that hands
|
|
91
|
+
* over a raw API body or an echoed token never carries it further.
|
|
92
|
+
*/
|
|
93
|
+
export type CloudProviderErrorDetails = Readonly<Record<string, string | number | boolean | null | undefined>>;
|
|
94
|
+
export { CloudProviderError } from './cloud/base.ts';
|
|
95
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/doks/types.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,MAAM,cAAc,GACvB,SAAS,GACT,SAAS,GACT,UAAU,GACV,SAAS,GACT,aAAa,GACb,YAAY,GACZ,OAAO,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAElG,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAC/D,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACnE,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACzD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7D,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED,0DAA0D;AAC1D,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC/B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;;iBAIpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;AAE/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Provider-neutral cloud compute and volume contracts. */
|
|
2
|
+
import * as z from 'zod/v4';
|
|
3
|
+
/**
|
|
4
|
+
* Provider-neutral cloud provider config. `type` is the open provider id,
|
|
5
|
+
* resolved through the registered cloud provider factory — never a closed
|
|
6
|
+
* provider enum.
|
|
7
|
+
*/
|
|
8
|
+
export const CloudProviderConfigSchema = z.object({
|
|
9
|
+
type: z.string().min(1),
|
|
10
|
+
credentials: z.string(),
|
|
11
|
+
region: z.string().min(1).optional()
|
|
12
|
+
});
|
|
13
|
+
export { CloudProviderError } from "./cloud/base.js";
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/doks/types.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AA8F5B;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAUH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vibesdotdev/infra-core/generate
|
|
3
|
+
*
|
|
4
|
+
* Infrastructure artifact generation package.
|
|
5
|
+
*
|
|
6
|
+
* Provides CLI commands and runtime plugin for generating infrastructure
|
|
7
|
+
* artifacts (K8s manifests, Helm charts, wrangler configs, etc.) from
|
|
8
|
+
* resource descriptors.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```bash
|
|
12
|
+
* # Generate all artifacts
|
|
13
|
+
* vibes infra generate
|
|
14
|
+
*
|
|
15
|
+
* # Generate specific artifact types
|
|
16
|
+
* vibes infra generate --target kubernetes-manifest
|
|
17
|
+
* vibes infra generate --target helm-chart
|
|
18
|
+
*
|
|
19
|
+
* # Dry-run (print to stdout)
|
|
20
|
+
* vibes infra generate --dry-run
|
|
21
|
+
*
|
|
22
|
+
* # Generate to specific output directory
|
|
23
|
+
* vibes infra generate --output ./infra/generated
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export { default as infraGeneratePlugin } from './infra-generate.plugin.ts';
|
|
27
|
+
export { generateArtifacts, type GenerateOptions, type GenerateResult } from '../cli/generate/generate-core.ts';
|
|
28
|
+
export type { ArtifactGenerator, ArtifactOutput, ArtifactDescriptor } from '@vibesdotdev/infra-core/kinds';
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAChH,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vibesdotdev/infra-core/generate
|
|
3
|
+
*
|
|
4
|
+
* Infrastructure artifact generation package.
|
|
5
|
+
*
|
|
6
|
+
* Provides CLI commands and runtime plugin for generating infrastructure
|
|
7
|
+
* artifacts (K8s manifests, Helm charts, wrangler configs, etc.) from
|
|
8
|
+
* resource descriptors.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```bash
|
|
12
|
+
* # Generate all artifacts
|
|
13
|
+
* vibes infra generate
|
|
14
|
+
*
|
|
15
|
+
* # Generate specific artifact types
|
|
16
|
+
* vibes infra generate --target kubernetes-manifest
|
|
17
|
+
* vibes infra generate --target helm-chart
|
|
18
|
+
*
|
|
19
|
+
* # Dry-run (print to stdout)
|
|
20
|
+
* vibes infra generate --dry-run
|
|
21
|
+
*
|
|
22
|
+
* # Generate to specific output directory
|
|
23
|
+
* vibes infra generate --output ./infra/generated
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export { default as infraGeneratePlugin } from "./infra-generate.plugin.js";
|
|
27
|
+
export { generateArtifacts } from "../cli/generate/generate-core.js";
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAA6C,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra-generate.plugin.d.ts","sourceRoot":"","sources":["../../src/generate/infra-generate.plugin.ts"],"names":[],"mappings":"AAaA,QAAA,MAAM,aAAa,6CAWjB,CAAC;AAEH,eAAe,aAAa,CAAC"}
|