@vibesdotdev/infra-core 0.0.1
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 +78 -0
- package/SPEC.md +169 -0
- package/dist/bootstrap/index.d.ts +5 -0
- package/dist/bootstrap/index.d.ts.map +1 -0
- package/dist/bootstrap/index.js +4 -0
- package/dist/bootstrap/index.js.map +1 -0
- package/dist/bootstrap/seed.descriptor.d.ts +31 -0
- package/dist/bootstrap/seed.descriptor.d.ts.map +1 -0
- package/dist/bootstrap/seed.descriptor.js +18 -0
- package/dist/bootstrap/seed.descriptor.js.map +1 -0
- package/dist/bootstrap/seed.impl-shape.d.ts +5 -0
- package/dist/bootstrap/seed.impl-shape.d.ts.map +1 -0
- package/dist/bootstrap/seed.impl-shape.js +2 -0
- package/dist/bootstrap/seed.impl-shape.js.map +1 -0
- package/dist/bootstrap/seed.kind.d.ts +5 -0
- package/dist/bootstrap/seed.kind.d.ts.map +1 -0
- package/dist/bootstrap/seed.kind.js +14 -0
- package/dist/bootstrap/seed.kind.js.map +1 -0
- package/dist/bootstrap/seed.runner.d.ts +18 -0
- package/dist/bootstrap/seed.runner.d.ts.map +1 -0
- package/dist/bootstrap/seed.runner.js +59 -0
- package/dist/bootstrap/seed.runner.js.map +1 -0
- package/dist/credentials/resolve.d.ts +80 -0
- package/dist/credentials/resolve.d.ts.map +1 -0
- package/dist/credentials/resolve.js +128 -0
- package/dist/credentials/resolve.js.map +1 -0
- package/dist/deployment.d.ts +9 -0
- package/dist/deployment.d.ts.map +1 -0
- package/dist/deployment.js +25 -0
- package/dist/deployment.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/infra.plugin.d.ts +18 -0
- package/dist/infra.plugin.d.ts.map +1 -0
- package/dist/infra.plugin.js +52 -0
- package/dist/infra.plugin.js.map +1 -0
- package/dist/kinds/alerts.kind.d.ts +192 -0
- package/dist/kinds/alerts.kind.d.ts.map +1 -0
- package/dist/kinds/alerts.kind.js +116 -0
- package/dist/kinds/alerts.kind.js.map +1 -0
- package/dist/kinds/artifact.kind.d.ts +96 -0
- package/dist/kinds/artifact.kind.d.ts.map +1 -0
- package/dist/kinds/artifact.kind.js +53 -0
- package/dist/kinds/artifact.kind.js.map +1 -0
- package/dist/kinds/cache.kind.d.ts +128 -0
- package/dist/kinds/cache.kind.d.ts.map +1 -0
- package/dist/kinds/cache.kind.js +90 -0
- package/dist/kinds/cache.kind.js.map +1 -0
- package/dist/kinds/database.kind.d.ts +141 -0
- package/dist/kinds/database.kind.d.ts.map +1 -0
- package/dist/kinds/database.kind.js +103 -0
- package/dist/kinds/database.kind.js.map +1 -0
- package/dist/kinds/discovery.d.ts +20 -0
- package/dist/kinds/discovery.d.ts.map +1 -0
- package/dist/kinds/discovery.js +25 -0
- package/dist/kinds/discovery.js.map +1 -0
- package/dist/kinds/git-hosting.kind.d.ts +98 -0
- package/dist/kinds/git-hosting.kind.d.ts.map +1 -0
- package/dist/kinds/git-hosting.kind.js +81 -0
- package/dist/kinds/git-hosting.kind.js.map +1 -0
- package/dist/kinds/index.d.ts +16 -0
- package/dist/kinds/index.d.ts.map +1 -0
- package/dist/kinds/index.js +16 -0
- package/dist/kinds/index.js.map +1 -0
- package/dist/kinds/logs.kind.d.ts +91 -0
- package/dist/kinds/logs.kind.d.ts.map +1 -0
- package/dist/kinds/logs.kind.js +73 -0
- package/dist/kinds/logs.kind.js.map +1 -0
- package/dist/kinds/object-storage.kind.d.ts +85 -0
- package/dist/kinds/object-storage.kind.d.ts.map +1 -0
- package/dist/kinds/object-storage.kind.js +81 -0
- package/dist/kinds/object-storage.kind.js.map +1 -0
- package/dist/kinds/observability.kind.d.ts +176 -0
- package/dist/kinds/observability.kind.d.ts.map +1 -0
- package/dist/kinds/observability.kind.js +120 -0
- package/dist/kinds/observability.kind.js.map +1 -0
- package/dist/kinds/package-registry.kind.d.ts +89 -0
- package/dist/kinds/package-registry.kind.d.ts.map +1 -0
- package/dist/kinds/package-registry.kind.js +78 -0
- package/dist/kinds/package-registry.kind.js.map +1 -0
- package/dist/kinds/queue.kind.d.ts +113 -0
- package/dist/kinds/queue.kind.d.ts.map +1 -0
- package/dist/kinds/queue.kind.js +86 -0
- package/dist/kinds/queue.kind.js.map +1 -0
- package/dist/kinds/rum.kind.d.ts +113 -0
- package/dist/kinds/rum.kind.d.ts.map +1 -0
- package/dist/kinds/rum.kind.js +80 -0
- package/dist/kinds/rum.kind.js.map +1 -0
- package/dist/kinds/sandbox.kind.d.ts +111 -0
- package/dist/kinds/sandbox.kind.d.ts.map +1 -0
- package/dist/kinds/sandbox.kind.js +94 -0
- package/dist/kinds/sandbox.kind.js.map +1 -0
- package/dist/kinds/web-app.kind.d.ts +99 -0
- package/dist/kinds/web-app.kind.d.ts.map +1 -0
- package/dist/kinds/web-app.kind.js +86 -0
- package/dist/kinds/web-app.kind.js.map +1 -0
- package/dist/kinds/worker.kind.d.ts +244 -0
- package/dist/kinds/worker.kind.d.ts.map +1 -0
- package/dist/kinds/worker.kind.js +171 -0
- package/dist/kinds/worker.kind.js.map +1 -0
- package/dist/schemas.d.ts +125 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +102 -0
- package/dist/schemas.js.map +1 -0
- package/package.json +92 -0
- package/src/bootstrap/index.ts +15 -0
- package/src/bootstrap/seed.descriptor.ts +24 -0
- package/src/bootstrap/seed.impl-shape.ts +5 -0
- package/src/bootstrap/seed.kind.ts +26 -0
- package/src/bootstrap/seed.runner.ts +87 -0
- package/src/credentials/resolve.ts +205 -0
- package/src/deployment.ts +57 -0
- package/src/index.ts +149 -0
- package/src/infra.plugin.ts +54 -0
- package/src/kinds/alerts.kind.ts +164 -0
- package/src/kinds/artifact.kind.ts +96 -0
- package/src/kinds/cache.kind.ts +104 -0
- package/src/kinds/database.kind.ts +120 -0
- package/src/kinds/discovery.ts +26 -0
- package/src/kinds/git-hosting.kind.ts +100 -0
- package/src/kinds/index.ts +139 -0
- package/src/kinds/logs.kind.ts +104 -0
- package/src/kinds/object-storage.kind.ts +101 -0
- package/src/kinds/observability.kind.ts +178 -0
- package/src/kinds/package-registry.kind.ts +95 -0
- package/src/kinds/queue.kind.ts +102 -0
- package/src/kinds/rum.kind.ts +135 -0
- package/src/kinds/sandbox.kind.ts +115 -0
- package/src/kinds/web-app.kind.ts +103 -0
- package/src/kinds/worker.kind.ts +203 -0
- package/src/schemas.ts +127 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind: infra/web-app
|
|
3
|
+
*
|
|
4
|
+
* Describes a deployable web application (SvelteKit, static site, etc.).
|
|
5
|
+
*
|
|
6
|
+
* Schema shape: strict common base + `config` discriminated union.
|
|
7
|
+
*
|
|
8
|
+
* - The base defines fields universal across every adapter:
|
|
9
|
+
* id/kind/name + the deployment shape every web-app declares
|
|
10
|
+
* (domain, appDir, outputDir, runtime, env, dependsOn).
|
|
11
|
+
* - Adapter-specific fields (cfWorkerName, secretsStoreId, digitaloceanAppName, …)
|
|
12
|
+
* live exclusively under `config`. Each adapter package defines its own
|
|
13
|
+
* concrete schema under its discriminator key.
|
|
14
|
+
*/
|
|
15
|
+
import * as z from 'zod/v4';
|
|
16
|
+
import type { RuntimeKindDescriptorRecord } from '@vibesdotdev/runtime/schemas/kind';
|
|
17
|
+
import type { RuntimeDescriptor } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
18
|
+
export declare const WebAppDependencySchema: z.ZodObject<{
|
|
19
|
+
serviceId: z.ZodString;
|
|
20
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export type WebAppDependency = z.infer<typeof WebAppDependencySchema>;
|
|
23
|
+
export declare const CloudflareWorkersWebAppConfigSchema: z.ZodObject<{
|
|
24
|
+
cfWorkerName: z.ZodString;
|
|
25
|
+
workerEntry: z.ZodDefault<z.ZodString>;
|
|
26
|
+
compatibilityDate: z.ZodOptional<z.ZodString>;
|
|
27
|
+
compatibilityFlags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
28
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
29
|
+
secretsStoreId: z.ZodOptional<z.ZodString>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export declare const DigitalOceanAppWebAppConfigSchema: z.ZodObject<{
|
|
32
|
+
digitaloceanAppName: z.ZodString;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export declare const WebAppConfigSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
35
|
+
cfWorkerName: z.ZodString;
|
|
36
|
+
workerEntry: z.ZodDefault<z.ZodString>;
|
|
37
|
+
compatibilityDate: z.ZodOptional<z.ZodString>;
|
|
38
|
+
compatibilityFlags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
39
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
40
|
+
secretsStoreId: z.ZodOptional<z.ZodString>;
|
|
41
|
+
adapter: z.ZodLiteral<"cloudflare-workers">;
|
|
42
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
43
|
+
digitaloceanAppName: z.ZodString;
|
|
44
|
+
adapter: z.ZodLiteral<"digitalocean-apps">;
|
|
45
|
+
}, z.core.$strip>]>;
|
|
46
|
+
export declare const WebAppDescriptorSchema: z.ZodObject<{
|
|
47
|
+
id: z.ZodString;
|
|
48
|
+
name: z.ZodOptional<z.ZodString>;
|
|
49
|
+
description: z.ZodOptional<z.ZodString>;
|
|
50
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
51
|
+
hardware: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
52
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
53
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
54
|
+
requiredContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
55
|
+
optionalContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
56
|
+
kind: z.ZodLiteral<"infra/web-app">;
|
|
57
|
+
domain: z.ZodString;
|
|
58
|
+
appDir: z.ZodString;
|
|
59
|
+
outputDir: z.ZodString;
|
|
60
|
+
runtime: z.ZodEnum<{
|
|
61
|
+
edge: "edge";
|
|
62
|
+
node: "node";
|
|
63
|
+
}>;
|
|
64
|
+
env: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
65
|
+
name: z.ZodString;
|
|
66
|
+
public: z.ZodOptional<z.ZodBoolean>;
|
|
67
|
+
required: z.ZodOptional<z.ZodBoolean>;
|
|
68
|
+
value: z.ZodOptional<z.ZodString>;
|
|
69
|
+
secret: z.ZodOptional<z.ZodBoolean>;
|
|
70
|
+
description: z.ZodOptional<z.ZodString>;
|
|
71
|
+
storeKey: z.ZodOptional<z.ZodString>;
|
|
72
|
+
}, z.core.$strip>>>;
|
|
73
|
+
dependsOn: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
74
|
+
serviceId: z.ZodString;
|
|
75
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
76
|
+
}, z.core.$strip>>>;
|
|
77
|
+
config: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
|
|
78
|
+
cfWorkerName: z.ZodString;
|
|
79
|
+
workerEntry: z.ZodDefault<z.ZodString>;
|
|
80
|
+
compatibilityDate: z.ZodOptional<z.ZodString>;
|
|
81
|
+
compatibilityFlags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
82
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
83
|
+
secretsStoreId: z.ZodOptional<z.ZodString>;
|
|
84
|
+
adapter: z.ZodLiteral<"cloudflare-workers">;
|
|
85
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
86
|
+
digitaloceanAppName: z.ZodString;
|
|
87
|
+
adapter: z.ZodLiteral<"digitalocean-apps">;
|
|
88
|
+
}, z.core.$strip>]>>;
|
|
89
|
+
}, z.core.$strip>;
|
|
90
|
+
export type WebAppDescriptor = z.infer<typeof WebAppDescriptorSchema>;
|
|
91
|
+
declare class DefaultWebAppImplementation {
|
|
92
|
+
readonly descriptor: RuntimeDescriptor;
|
|
93
|
+
readonly context: unknown;
|
|
94
|
+
constructor(descriptor: RuntimeDescriptor, context: unknown);
|
|
95
|
+
get config(): WebAppDescriptor;
|
|
96
|
+
}
|
|
97
|
+
export declare const webAppKind: RuntimeKindDescriptorRecord<DefaultWebAppImplementation>;
|
|
98
|
+
export {};
|
|
99
|
+
//# sourceMappingURL=web-app.kind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-app.kind.d.ts","sourceRoot":"","sources":["../../src/kinds/web-app.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAErF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAIjF,eAAO,MAAM,sBAAsB;;;iBAGjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAwBtE,eAAO,MAAM,mCAAmC;;;;;;;iBAa9C,CAAC;AAEH,eAAO,MAAM,iCAAiC;;iBAG5C,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;mBAG7B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,cAAM,2BAA2B;aAEf,UAAU,EAAE,iBAAiB;aAC7B,OAAO,EAAE,OAAO;gBADhB,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,OAAO;IAGjC,IAAI,MAAM,IAAI,gBAAgB,CAE7B;CACD;AAED,eAAO,MAAM,UAAU,0DAMrB,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind: infra/web-app
|
|
3
|
+
*
|
|
4
|
+
* Describes a deployable web application (SvelteKit, static site, etc.).
|
|
5
|
+
*
|
|
6
|
+
* Schema shape: strict common base + `config` discriminated union.
|
|
7
|
+
*
|
|
8
|
+
* - The base defines fields universal across every adapter:
|
|
9
|
+
* id/kind/name + the deployment shape every web-app declares
|
|
10
|
+
* (domain, appDir, outputDir, runtime, env, dependsOn).
|
|
11
|
+
* - Adapter-specific fields (cfWorkerName, secretsStoreId, digitaloceanAppName, …)
|
|
12
|
+
* live exclusively under `config`. Each adapter package defines its own
|
|
13
|
+
* concrete schema under its discriminator key.
|
|
14
|
+
*/
|
|
15
|
+
import * as z from 'zod/v4';
|
|
16
|
+
import { createRuntimeKind } from '@vibesdotdev/runtime/factory/kind';
|
|
17
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
18
|
+
import { deploymentEnvRequirementSchema } from "../schemas.js";
|
|
19
|
+
import { INFRA_DISCOVERY_PATTERN, extractStem } from "./discovery.js";
|
|
20
|
+
export const WebAppDependencySchema = z.object({
|
|
21
|
+
serviceId: z.string().min(1),
|
|
22
|
+
reason: z.string().optional()
|
|
23
|
+
});
|
|
24
|
+
const WebAppBaseSchema = RuntimeDescriptorSchema.extend({
|
|
25
|
+
kind: z.literal('infra/web-app'),
|
|
26
|
+
/** Primary domain for this app (e.g., 'auth.vibes.dev'). */
|
|
27
|
+
domain: z.string().min(1),
|
|
28
|
+
/** Application source directory (e.g., 'apps/auth-web'). */
|
|
29
|
+
appDir: z.string().min(1),
|
|
30
|
+
/** Build output directory (e.g., '.svelte-kit/cloudflare'). */
|
|
31
|
+
outputDir: z.string().min(1),
|
|
32
|
+
/** Runtime environment for app deployments. */
|
|
33
|
+
runtime: z.enum(['edge', 'node']),
|
|
34
|
+
/** Environment variable requirements. */
|
|
35
|
+
env: z.array(deploymentEnvRequirementSchema).optional(),
|
|
36
|
+
/** Service dependencies. */
|
|
37
|
+
dependsOn: z.array(WebAppDependencySchema).optional()
|
|
38
|
+
});
|
|
39
|
+
export const CloudflareWorkersWebAppConfigSchema = z.object({
|
|
40
|
+
/** Cloudflare Workers script name (e.g., "vibes-ai"). */
|
|
41
|
+
cfWorkerName: z.string().min(1),
|
|
42
|
+
/** Path to the `_worker.js` entry point relative to outputDir. */
|
|
43
|
+
workerEntry: z.string().min(1).default('_worker.js'),
|
|
44
|
+
/** Compatibility date for wrangler. */
|
|
45
|
+
compatibilityDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
46
|
+
/** Compatibility flags for wrangler. */
|
|
47
|
+
compatibilityFlags: z.array(z.string()).default(['nodejs_compat']),
|
|
48
|
+
/** Environment variables to include. */
|
|
49
|
+
env: z.record(z.string(), z.string()).default({}),
|
|
50
|
+
/** Cloudflare Secrets Store ID for secret bindings. */
|
|
51
|
+
secretsStoreId: z.string().min(1).optional()
|
|
52
|
+
});
|
|
53
|
+
export const DigitalOceanAppWebAppConfigSchema = z.object({
|
|
54
|
+
/** DigitalOcean App name. */
|
|
55
|
+
digitaloceanAppName: z.string().min(1)
|
|
56
|
+
});
|
|
57
|
+
export const WebAppConfigSchema = z.union([
|
|
58
|
+
CloudflareWorkersWebAppConfigSchema.extend({ adapter: z.literal('cloudflare-workers') }),
|
|
59
|
+
DigitalOceanAppWebAppConfigSchema.extend({ adapter: z.literal('digitalocean-apps') })
|
|
60
|
+
]);
|
|
61
|
+
export const WebAppDescriptorSchema = WebAppBaseSchema.extend({
|
|
62
|
+
/**
|
|
63
|
+
* Adapter-specific configuration. Discriminated union — each adapter
|
|
64
|
+
* package defines its own config schema under its discriminator key.
|
|
65
|
+
*/
|
|
66
|
+
config: WebAppConfigSchema.optional()
|
|
67
|
+
});
|
|
68
|
+
class DefaultWebAppImplementation {
|
|
69
|
+
descriptor;
|
|
70
|
+
context;
|
|
71
|
+
constructor(descriptor, context) {
|
|
72
|
+
this.descriptor = descriptor;
|
|
73
|
+
this.context = context;
|
|
74
|
+
}
|
|
75
|
+
get config() {
|
|
76
|
+
return this.descriptor;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export const webAppKind = createRuntimeKind({
|
|
80
|
+
id: 'infra/web-app',
|
|
81
|
+
descriptorSchema: WebAppDescriptorSchema,
|
|
82
|
+
defaultImplementation: DefaultWebAppImplementation,
|
|
83
|
+
discoveryPattern: INFRA_DISCOVERY_PATTERN,
|
|
84
|
+
extractStem
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=web-app.kind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-app.kind.js","sourceRoot":"","sources":["../../src/kinds/web-app.kind.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind: infra/worker
|
|
3
|
+
*
|
|
4
|
+
* Describes a background worker process.
|
|
5
|
+
*
|
|
6
|
+
* Schema shape: strict common base + `config` discriminated union.
|
|
7
|
+
*
|
|
8
|
+
* - The base defines fields universal across adapters: id/kind/name +
|
|
9
|
+
* the worker shape (entrypoint, queues, concurrency, scaling, env).
|
|
10
|
+
* - Adapter-specific fields (namespace, image, healthPort, …) live under
|
|
11
|
+
* `config`. Each adapter package defines its own concrete schema.
|
|
12
|
+
*/
|
|
13
|
+
import * as z from 'zod/v4';
|
|
14
|
+
import type { RuntimeKindDescriptorRecord } from '@vibesdotdev/runtime/schemas/kind';
|
|
15
|
+
import type { RuntimeDescriptor } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
16
|
+
export declare const WorkerScalingSchema: z.ZodObject<{
|
|
17
|
+
min: z.ZodDefault<z.ZodNumber>;
|
|
18
|
+
max: z.ZodDefault<z.ZodNumber>;
|
|
19
|
+
cpu: z.ZodOptional<z.ZodString>;
|
|
20
|
+
memory: z.ZodOptional<z.ZodString>;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
export type WorkerScaling = z.infer<typeof WorkerScalingSchema>;
|
|
23
|
+
export declare const DoksDeploymentWorkerConfigSchema: z.ZodObject<{
|
|
24
|
+
namespace: z.ZodDefault<z.ZodString>;
|
|
25
|
+
image: z.ZodOptional<z.ZodString>;
|
|
26
|
+
healthPort: z.ZodDefault<z.ZodNumber>;
|
|
27
|
+
healthPath: z.ZodDefault<z.ZodString>;
|
|
28
|
+
readyPath: z.ZodDefault<z.ZodString>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
export declare const CloudflareWorkersWorkerConfigSchema: z.ZodObject<{
|
|
31
|
+
cfWorkerName: z.ZodString;
|
|
32
|
+
workerEntry: z.ZodDefault<z.ZodString>;
|
|
33
|
+
compatibilityDate: z.ZodOptional<z.ZodString>;
|
|
34
|
+
compatibilityFlags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
35
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
36
|
+
secretsStoreId: z.ZodOptional<z.ZodString>;
|
|
37
|
+
consumers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
38
|
+
queue: z.ZodString;
|
|
39
|
+
maxBatchSize: z.ZodDefault<z.ZodNumber>;
|
|
40
|
+
maxRetries: z.ZodDefault<z.ZodNumber>;
|
|
41
|
+
deadLetterQueue: z.ZodOptional<z.ZodString>;
|
|
42
|
+
}, z.core.$strip>>>;
|
|
43
|
+
durableObjects: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
44
|
+
binding: z.ZodString;
|
|
45
|
+
className: z.ZodString;
|
|
46
|
+
scriptName: z.ZodOptional<z.ZodString>;
|
|
47
|
+
}, z.core.$strip>>>;
|
|
48
|
+
migrations: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
49
|
+
tag: z.ZodString;
|
|
50
|
+
newClasses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
51
|
+
renamedClasses: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
52
|
+
from: z.ZodString;
|
|
53
|
+
to: z.ZodString;
|
|
54
|
+
}, z.core.$strip>>>;
|
|
55
|
+
deletedClasses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
56
|
+
newSqliteClasses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
57
|
+
}, z.core.$strip>>>;
|
|
58
|
+
services: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
59
|
+
binding: z.ZodString;
|
|
60
|
+
service: z.ZodString;
|
|
61
|
+
environment: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, z.core.$strip>>>;
|
|
63
|
+
d1Databases: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
64
|
+
binding: z.ZodString;
|
|
65
|
+
databaseName: z.ZodString;
|
|
66
|
+
databaseId: z.ZodString;
|
|
67
|
+
}, z.core.$strip>>>;
|
|
68
|
+
kvNamespaces: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
69
|
+
binding: z.ZodString;
|
|
70
|
+
id: z.ZodString;
|
|
71
|
+
}, z.core.$strip>>>;
|
|
72
|
+
r2Buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
73
|
+
binding: z.ZodString;
|
|
74
|
+
bucketName: z.ZodString;
|
|
75
|
+
}, z.core.$strip>>>;
|
|
76
|
+
queueProducers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
77
|
+
queue: z.ZodString;
|
|
78
|
+
binding: z.ZodString;
|
|
79
|
+
}, z.core.$strip>>>;
|
|
80
|
+
smartPlacement: z.ZodDefault<z.ZodBoolean>;
|
|
81
|
+
jobConsumer: z.ZodDefault<z.ZodBoolean>;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
export declare const WorkerConfigSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
84
|
+
namespace: z.ZodDefault<z.ZodString>;
|
|
85
|
+
image: z.ZodOptional<z.ZodString>;
|
|
86
|
+
healthPort: z.ZodDefault<z.ZodNumber>;
|
|
87
|
+
healthPath: z.ZodDefault<z.ZodString>;
|
|
88
|
+
readyPath: z.ZodDefault<z.ZodString>;
|
|
89
|
+
adapter: z.ZodLiteral<"doks-deployment">;
|
|
90
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
91
|
+
cfWorkerName: z.ZodString;
|
|
92
|
+
workerEntry: z.ZodDefault<z.ZodString>;
|
|
93
|
+
compatibilityDate: z.ZodOptional<z.ZodString>;
|
|
94
|
+
compatibilityFlags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
95
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
96
|
+
secretsStoreId: z.ZodOptional<z.ZodString>;
|
|
97
|
+
consumers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
98
|
+
queue: z.ZodString;
|
|
99
|
+
maxBatchSize: z.ZodDefault<z.ZodNumber>;
|
|
100
|
+
maxRetries: z.ZodDefault<z.ZodNumber>;
|
|
101
|
+
deadLetterQueue: z.ZodOptional<z.ZodString>;
|
|
102
|
+
}, z.core.$strip>>>;
|
|
103
|
+
durableObjects: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
104
|
+
binding: z.ZodString;
|
|
105
|
+
className: z.ZodString;
|
|
106
|
+
scriptName: z.ZodOptional<z.ZodString>;
|
|
107
|
+
}, z.core.$strip>>>;
|
|
108
|
+
migrations: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
109
|
+
tag: z.ZodString;
|
|
110
|
+
newClasses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
111
|
+
renamedClasses: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
112
|
+
from: z.ZodString;
|
|
113
|
+
to: z.ZodString;
|
|
114
|
+
}, z.core.$strip>>>;
|
|
115
|
+
deletedClasses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
116
|
+
newSqliteClasses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
117
|
+
}, z.core.$strip>>>;
|
|
118
|
+
services: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
119
|
+
binding: z.ZodString;
|
|
120
|
+
service: z.ZodString;
|
|
121
|
+
environment: z.ZodOptional<z.ZodString>;
|
|
122
|
+
}, z.core.$strip>>>;
|
|
123
|
+
d1Databases: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
124
|
+
binding: z.ZodString;
|
|
125
|
+
databaseName: z.ZodString;
|
|
126
|
+
databaseId: z.ZodString;
|
|
127
|
+
}, z.core.$strip>>>;
|
|
128
|
+
kvNamespaces: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
129
|
+
binding: z.ZodString;
|
|
130
|
+
id: z.ZodString;
|
|
131
|
+
}, z.core.$strip>>>;
|
|
132
|
+
r2Buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
133
|
+
binding: z.ZodString;
|
|
134
|
+
bucketName: z.ZodString;
|
|
135
|
+
}, z.core.$strip>>>;
|
|
136
|
+
queueProducers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
137
|
+
queue: z.ZodString;
|
|
138
|
+
binding: z.ZodString;
|
|
139
|
+
}, z.core.$strip>>>;
|
|
140
|
+
smartPlacement: z.ZodDefault<z.ZodBoolean>;
|
|
141
|
+
jobConsumer: z.ZodDefault<z.ZodBoolean>;
|
|
142
|
+
adapter: z.ZodLiteral<"cloudflare-workers">;
|
|
143
|
+
}, z.core.$strip>]>;
|
|
144
|
+
export declare const WorkerDescriptorSchema: z.ZodObject<{
|
|
145
|
+
id: z.ZodString;
|
|
146
|
+
name: z.ZodOptional<z.ZodString>;
|
|
147
|
+
description: z.ZodOptional<z.ZodString>;
|
|
148
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
149
|
+
hardware: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
150
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
151
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
152
|
+
requiredContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
153
|
+
optionalContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
154
|
+
kind: z.ZodLiteral<"infra/worker">;
|
|
155
|
+
entrypoint: z.ZodOptional<z.ZodString>;
|
|
156
|
+
queues: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
157
|
+
concurrency: z.ZodOptional<z.ZodNumber>;
|
|
158
|
+
scaling: z.ZodOptional<z.ZodObject<{
|
|
159
|
+
min: z.ZodDefault<z.ZodNumber>;
|
|
160
|
+
max: z.ZodDefault<z.ZodNumber>;
|
|
161
|
+
cpu: z.ZodOptional<z.ZodString>;
|
|
162
|
+
memory: z.ZodOptional<z.ZodString>;
|
|
163
|
+
}, z.core.$strip>>;
|
|
164
|
+
env: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
165
|
+
name: z.ZodString;
|
|
166
|
+
public: z.ZodOptional<z.ZodBoolean>;
|
|
167
|
+
required: z.ZodOptional<z.ZodBoolean>;
|
|
168
|
+
value: z.ZodOptional<z.ZodString>;
|
|
169
|
+
secret: z.ZodOptional<z.ZodBoolean>;
|
|
170
|
+
description: z.ZodOptional<z.ZodString>;
|
|
171
|
+
storeKey: z.ZodOptional<z.ZodString>;
|
|
172
|
+
}, z.core.$strip>>>;
|
|
173
|
+
config: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
|
|
174
|
+
namespace: z.ZodDefault<z.ZodString>;
|
|
175
|
+
image: z.ZodOptional<z.ZodString>;
|
|
176
|
+
healthPort: z.ZodDefault<z.ZodNumber>;
|
|
177
|
+
healthPath: z.ZodDefault<z.ZodString>;
|
|
178
|
+
readyPath: z.ZodDefault<z.ZodString>;
|
|
179
|
+
adapter: z.ZodLiteral<"doks-deployment">;
|
|
180
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
181
|
+
cfWorkerName: z.ZodString;
|
|
182
|
+
workerEntry: z.ZodDefault<z.ZodString>;
|
|
183
|
+
compatibilityDate: z.ZodOptional<z.ZodString>;
|
|
184
|
+
compatibilityFlags: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
185
|
+
env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
186
|
+
secretsStoreId: z.ZodOptional<z.ZodString>;
|
|
187
|
+
consumers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
188
|
+
queue: z.ZodString;
|
|
189
|
+
maxBatchSize: z.ZodDefault<z.ZodNumber>;
|
|
190
|
+
maxRetries: z.ZodDefault<z.ZodNumber>;
|
|
191
|
+
deadLetterQueue: z.ZodOptional<z.ZodString>;
|
|
192
|
+
}, z.core.$strip>>>;
|
|
193
|
+
durableObjects: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
194
|
+
binding: z.ZodString;
|
|
195
|
+
className: z.ZodString;
|
|
196
|
+
scriptName: z.ZodOptional<z.ZodString>;
|
|
197
|
+
}, z.core.$strip>>>;
|
|
198
|
+
migrations: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
199
|
+
tag: z.ZodString;
|
|
200
|
+
newClasses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
201
|
+
renamedClasses: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
202
|
+
from: z.ZodString;
|
|
203
|
+
to: z.ZodString;
|
|
204
|
+
}, z.core.$strip>>>;
|
|
205
|
+
deletedClasses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
206
|
+
newSqliteClasses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
207
|
+
}, z.core.$strip>>>;
|
|
208
|
+
services: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
209
|
+
binding: z.ZodString;
|
|
210
|
+
service: z.ZodString;
|
|
211
|
+
environment: z.ZodOptional<z.ZodString>;
|
|
212
|
+
}, z.core.$strip>>>;
|
|
213
|
+
d1Databases: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
214
|
+
binding: z.ZodString;
|
|
215
|
+
databaseName: z.ZodString;
|
|
216
|
+
databaseId: z.ZodString;
|
|
217
|
+
}, z.core.$strip>>>;
|
|
218
|
+
kvNamespaces: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
219
|
+
binding: z.ZodString;
|
|
220
|
+
id: z.ZodString;
|
|
221
|
+
}, z.core.$strip>>>;
|
|
222
|
+
r2Buckets: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
223
|
+
binding: z.ZodString;
|
|
224
|
+
bucketName: z.ZodString;
|
|
225
|
+
}, z.core.$strip>>>;
|
|
226
|
+
queueProducers: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
227
|
+
queue: z.ZodString;
|
|
228
|
+
binding: z.ZodString;
|
|
229
|
+
}, z.core.$strip>>>;
|
|
230
|
+
smartPlacement: z.ZodDefault<z.ZodBoolean>;
|
|
231
|
+
jobConsumer: z.ZodDefault<z.ZodBoolean>;
|
|
232
|
+
adapter: z.ZodLiteral<"cloudflare-workers">;
|
|
233
|
+
}, z.core.$strip>]>>;
|
|
234
|
+
}, z.core.$strip>;
|
|
235
|
+
export type WorkerDescriptor = z.infer<typeof WorkerDescriptorSchema>;
|
|
236
|
+
declare class DefaultWorkerImplementation {
|
|
237
|
+
readonly descriptor: RuntimeDescriptor;
|
|
238
|
+
readonly context: unknown;
|
|
239
|
+
constructor(descriptor: RuntimeDescriptor, context: unknown);
|
|
240
|
+
get config(): WorkerDescriptor;
|
|
241
|
+
}
|
|
242
|
+
export declare const workerKind: RuntimeKindDescriptorRecord<DefaultWorkerImplementation>;
|
|
243
|
+
export {};
|
|
244
|
+
//# sourceMappingURL=worker.kind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.kind.d.ts","sourceRoot":"","sources":["../../src/kinds/worker.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAErF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAIjF,eAAO,MAAM,mBAAmB;;;;;iBAK9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAqBhE,eAAO,MAAM,gCAAgC;;;;;;iBAW3C,CAAC;AAEH,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4G9C,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAG7B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,cAAM,2BAA2B;aAEf,UAAU,EAAE,iBAAiB;aAC7B,OAAO,EAAE,OAAO;gBADhB,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,OAAO;IAGjC,IAAI,MAAM,IAAI,gBAAgB,CAE7B;CACD;AAED,eAAO,MAAM,UAAU,0DAMrB,CAAC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind: infra/worker
|
|
3
|
+
*
|
|
4
|
+
* Describes a background worker process.
|
|
5
|
+
*
|
|
6
|
+
* Schema shape: strict common base + `config` discriminated union.
|
|
7
|
+
*
|
|
8
|
+
* - The base defines fields universal across adapters: id/kind/name +
|
|
9
|
+
* the worker shape (entrypoint, queues, concurrency, scaling, env).
|
|
10
|
+
* - Adapter-specific fields (namespace, image, healthPort, …) live under
|
|
11
|
+
* `config`. Each adapter package defines its own concrete schema.
|
|
12
|
+
*/
|
|
13
|
+
import * as z from 'zod/v4';
|
|
14
|
+
import { createRuntimeKind } from '@vibesdotdev/runtime/factory/kind';
|
|
15
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
16
|
+
import { deploymentEnvRequirementSchema } from "../schemas.js";
|
|
17
|
+
import { INFRA_DISCOVERY_PATTERN, extractStem } from "./discovery.js";
|
|
18
|
+
export const WorkerScalingSchema = z.object({
|
|
19
|
+
min: z.number().int().nonnegative().default(1),
|
|
20
|
+
max: z.number().int().positive().default(1),
|
|
21
|
+
cpu: z.string().optional(),
|
|
22
|
+
memory: z.string().optional()
|
|
23
|
+
});
|
|
24
|
+
const WorkerBaseSchema = RuntimeDescriptorSchema.extend({
|
|
25
|
+
kind: z.literal('infra/worker'),
|
|
26
|
+
/** Path to worker entrypoint (e.g., 'packages/workers/src/ai/entrypoint.ts'). */
|
|
27
|
+
entrypoint: z.string().min(1).optional(),
|
|
28
|
+
/** Queue names this worker consumes from. */
|
|
29
|
+
queues: z.array(z.string().min(1)).optional(),
|
|
30
|
+
/** Worker concurrency. */
|
|
31
|
+
concurrency: z.number().int().positive().optional(),
|
|
32
|
+
/** Scaling configuration. */
|
|
33
|
+
scaling: WorkerScalingSchema.optional(),
|
|
34
|
+
/** Environment variable requirements. */
|
|
35
|
+
env: z.array(deploymentEnvRequirementSchema).optional()
|
|
36
|
+
});
|
|
37
|
+
export const DoksDeploymentWorkerConfigSchema = z.object({
|
|
38
|
+
/** Kubernetes namespace (default: vibes). */
|
|
39
|
+
namespace: z.string().min(1).default('vibes'),
|
|
40
|
+
/** Container image (default: vibes/{id}:latest). */
|
|
41
|
+
image: z.string().min(1).optional(),
|
|
42
|
+
/** Health probe port (default: 8080). */
|
|
43
|
+
healthPort: z.number().int().positive().default(8080),
|
|
44
|
+
/** Health probe path (default: /healthz). */
|
|
45
|
+
healthPath: z.string().min(1).default('/healthz'),
|
|
46
|
+
/** Readiness probe path (default: /readyz). */
|
|
47
|
+
readyPath: z.string().min(1).default('/readyz')
|
|
48
|
+
});
|
|
49
|
+
export const CloudflareWorkersWorkerConfigSchema = z.object({
|
|
50
|
+
/** Cloudflare Workers script name (e.g., "vibes-jobs"). */
|
|
51
|
+
cfWorkerName: z.string().min(1),
|
|
52
|
+
/** Path to the `_worker.js` entry point relative to outputDir. */
|
|
53
|
+
workerEntry: z.string().min(1).default('_worker.js'),
|
|
54
|
+
/** Compatibility date for wrangler. */
|
|
55
|
+
compatibilityDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
56
|
+
/** Compatibility flags for wrangler. */
|
|
57
|
+
compatibilityFlags: z.array(z.string()).default(['nodejs_compat']),
|
|
58
|
+
/** Environment variables to include. */
|
|
59
|
+
env: z.record(z.string(), z.string()).default({}),
|
|
60
|
+
/** Cloudflare Secrets Store ID for secret bindings. */
|
|
61
|
+
secretsStoreId: z.string().min(1).optional(),
|
|
62
|
+
/**
|
|
63
|
+
* Detailed queue-consumer config. When present, these override the
|
|
64
|
+
* coarse `queues: string[]` field on the base descriptor and let
|
|
65
|
+
* declarations control batch size, retries, and dead-letter routing.
|
|
66
|
+
*/
|
|
67
|
+
consumers: z
|
|
68
|
+
.array(z.object({
|
|
69
|
+
queue: z.string().min(1),
|
|
70
|
+
maxBatchSize: z.number().int().positive().default(10),
|
|
71
|
+
maxRetries: z.number().int().min(0).default(3),
|
|
72
|
+
deadLetterQueue: z.string().optional()
|
|
73
|
+
}))
|
|
74
|
+
.default([]),
|
|
75
|
+
/** Durable Object class bindings. */
|
|
76
|
+
durableObjects: z
|
|
77
|
+
.array(z.object({
|
|
78
|
+
binding: z.string().regex(/^[_A-Z0-9]+$/),
|
|
79
|
+
className: z.string().min(1),
|
|
80
|
+
scriptName: z.string().min(1).optional()
|
|
81
|
+
}))
|
|
82
|
+
.default([]),
|
|
83
|
+
/** Durable Object migrations. */
|
|
84
|
+
migrations: z
|
|
85
|
+
.array(z.object({
|
|
86
|
+
tag: z.string().min(1),
|
|
87
|
+
newClasses: z.array(z.string().min(1)).optional(),
|
|
88
|
+
renamedClasses: z
|
|
89
|
+
.array(z.object({ from: z.string().min(1), to: z.string().min(1) }))
|
|
90
|
+
.optional(),
|
|
91
|
+
deletedClasses: z.array(z.string().min(1)).optional(),
|
|
92
|
+
newSqliteClasses: z.array(z.string().min(1)).optional()
|
|
93
|
+
}))
|
|
94
|
+
.default([]),
|
|
95
|
+
/** Service bindings — call other Workers from this Worker. */
|
|
96
|
+
services: z
|
|
97
|
+
.array(z.object({
|
|
98
|
+
binding: z.string().regex(/^[_A-Z0-9]+$/),
|
|
99
|
+
service: z.string().min(1),
|
|
100
|
+
environment: z.string().min(1).optional()
|
|
101
|
+
}))
|
|
102
|
+
.default([]),
|
|
103
|
+
/** D1 database bindings. */
|
|
104
|
+
d1Databases: z
|
|
105
|
+
.array(z.object({
|
|
106
|
+
binding: z.string().regex(/^[_A-Z0-9]+$/),
|
|
107
|
+
databaseName: z.string().min(1),
|
|
108
|
+
databaseId: z.string().min(1)
|
|
109
|
+
}))
|
|
110
|
+
.default([]),
|
|
111
|
+
/** KV namespace bindings. */
|
|
112
|
+
kvNamespaces: z
|
|
113
|
+
.array(z.object({
|
|
114
|
+
binding: z.string().min(1),
|
|
115
|
+
id: z.string().min(1)
|
|
116
|
+
}))
|
|
117
|
+
.default([]),
|
|
118
|
+
/** R2 bucket bindings. */
|
|
119
|
+
r2Buckets: z
|
|
120
|
+
.array(z.object({
|
|
121
|
+
binding: z.string().min(1),
|
|
122
|
+
bucketName: z.string().min(1)
|
|
123
|
+
}))
|
|
124
|
+
.default([]),
|
|
125
|
+
/** Queue producer bindings (worker can also produce to queues). */
|
|
126
|
+
queueProducers: z
|
|
127
|
+
.array(z.object({
|
|
128
|
+
queue: z.string().min(1),
|
|
129
|
+
binding: z.string().min(1)
|
|
130
|
+
}))
|
|
131
|
+
.default([]),
|
|
132
|
+
/** Enable smart placement. */
|
|
133
|
+
smartPlacement: z.boolean().default(false),
|
|
134
|
+
/**
|
|
135
|
+
* Whether this is a job-consumer Worker. When true, deploy step
|
|
136
|
+
* auto-injects the JOB_RESULT_STORE Durable Object binding +
|
|
137
|
+
* initial migration via `generateJobConsumerWorkerConfig` from
|
|
138
|
+
* `@vibesdotdev/infra-cloudflare`.
|
|
139
|
+
*/
|
|
140
|
+
jobConsumer: z.boolean().default(false)
|
|
141
|
+
});
|
|
142
|
+
export const WorkerConfigSchema = z.union([
|
|
143
|
+
DoksDeploymentWorkerConfigSchema.extend({ adapter: z.literal('doks-deployment') }),
|
|
144
|
+
CloudflareWorkersWorkerConfigSchema.extend({ adapter: z.literal('cloudflare-workers') })
|
|
145
|
+
]);
|
|
146
|
+
export const WorkerDescriptorSchema = WorkerBaseSchema.extend({
|
|
147
|
+
/**
|
|
148
|
+
* Adapter-specific configuration. Discriminated union — each adapter
|
|
149
|
+
* package defines its own config schema under its discriminator key.
|
|
150
|
+
*/
|
|
151
|
+
config: WorkerConfigSchema.optional()
|
|
152
|
+
});
|
|
153
|
+
class DefaultWorkerImplementation {
|
|
154
|
+
descriptor;
|
|
155
|
+
context;
|
|
156
|
+
constructor(descriptor, context) {
|
|
157
|
+
this.descriptor = descriptor;
|
|
158
|
+
this.context = context;
|
|
159
|
+
}
|
|
160
|
+
get config() {
|
|
161
|
+
return this.descriptor;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
export const workerKind = createRuntimeKind({
|
|
165
|
+
id: 'infra/worker',
|
|
166
|
+
descriptorSchema: WorkerDescriptorSchema,
|
|
167
|
+
defaultImplementation: DefaultWorkerImplementation,
|
|
168
|
+
discoveryPattern: INFRA_DISCOVERY_PATTERN,
|
|
169
|
+
extractStem
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=worker.kind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.kind.js","sourceRoot":"","sources":["../../src/kinds/worker.kind.ts"],"names":[],"mappings":"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"}
|