@sdlcworks/components 0.0.16 → 0.0.17
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/dist/index.d.ts +18 -1
- package/dist/index.js +1 -109
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -149,6 +149,23 @@ export type ConnectionHandlerEntry<S, ConnectionType extends string, C extends C
|
|
|
149
149
|
interface: C;
|
|
150
150
|
handler: (ctx: ConnectionHandlerCtx<S, InferConnectionData<C>, ConnectionType>) => Promise<ConnectionHandlerResult>;
|
|
151
151
|
};
|
|
152
|
+
/**
|
|
153
|
+
* Helper function that preserves type inference for connection handler entries.
|
|
154
|
+
* Use this to get proper typing for ctx.connectionData in handlers.
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* connect: [
|
|
158
|
+
* connectionHandler({
|
|
159
|
+
* interface: ServiceAccountCI,
|
|
160
|
+
* handler: async (ctx) => {
|
|
161
|
+
* // ctx.connectionData is now properly typed from ServiceAccountCI schema
|
|
162
|
+
* ctx.connectionData.email // string
|
|
163
|
+
* return {};
|
|
164
|
+
* },
|
|
165
|
+
* }),
|
|
166
|
+
* ] as const,
|
|
167
|
+
*/
|
|
168
|
+
export declare function connectionHandler<S, ConnectionType extends string, C extends ConnectionInterfaceClass>(entry: ConnectionHandlerEntry<S, ConnectionType, C>): ConnectionHandlerEntry<S, ConnectionType, C>;
|
|
152
169
|
export type ProviderDeployCtx<D, S> = {
|
|
153
170
|
state: S;
|
|
154
171
|
} & Record<string, DeploymentInfo>;
|
|
@@ -159,7 +176,7 @@ export type EmptyStateShape = typeof emptyStateSchema.shape;
|
|
|
159
176
|
export type ProviderFnsDef<I, D, O, SShape extends z.ZodRawShape = EmptyStateShape, ConnectionType extends string = string> = {
|
|
160
177
|
stateSchema?: z.ZodObject<SShape>;
|
|
161
178
|
pulumi: ProviderPulumiFn<I, z.infer<z.ZodObject<SShape>>, O>;
|
|
162
|
-
connect?: readonly ConnectionHandlerEntry<z.infer<z.ZodObject<SShape>>, ConnectionType,
|
|
179
|
+
connect?: readonly ConnectionHandlerEntry<z.infer<z.ZodObject<SShape>>, ConnectionType, ConnectionInterfaceClass>[];
|
|
163
180
|
deploy?: ProviderDeployFn<D, z.infer<z.ZodObject<SShape>>>;
|
|
164
181
|
};
|
|
165
182
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1,109 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
import * as pulumi from "@pulumi/pulumi";
|
|
4
|
-
var CloudProvider;
|
|
5
|
-
((CloudProvider2) => {
|
|
6
|
-
CloudProvider2["aws"] = "aws";
|
|
7
|
-
CloudProvider2["gcloud"] = "gcloud";
|
|
8
|
-
CloudProvider2["azure"] = "azure";
|
|
9
|
-
CloudProvider2["linode"] = "linode";
|
|
10
|
-
CloudProvider2["hetzner"] = "hetzner";
|
|
11
|
-
CloudProvider2["cloudflare"] = "cloudflare";
|
|
12
|
-
})(CloudProvider ||= {});
|
|
13
|
-
var DeploymentArtifactType;
|
|
14
|
-
((DeploymentArtifactType2) => {
|
|
15
|
-
DeploymentArtifactType2["container_image"] = "container_image";
|
|
16
|
-
})(DeploymentArtifactType ||= {});
|
|
17
|
-
|
|
18
|
-
class ConnectionInterface {
|
|
19
|
-
}
|
|
20
|
-
function createConnectionInterface(schema) {
|
|
21
|
-
return class extends ConnectionInterface {
|
|
22
|
-
schema = schema;
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
var emptyOutputSchema = z.object({});
|
|
26
|
-
function transformSchemaToAcceptOutputs(schema) {
|
|
27
|
-
if (schema instanceof z.ZodObject) {
|
|
28
|
-
const shape = schema.shape;
|
|
29
|
-
const newShape = {};
|
|
30
|
-
for (const key in shape) {
|
|
31
|
-
newShape[key] = transformSchemaToAcceptOutputs(shape[key]);
|
|
32
|
-
}
|
|
33
|
-
return z.object(newShape);
|
|
34
|
-
}
|
|
35
|
-
if (schema instanceof z.ZodOptional) {
|
|
36
|
-
return transformSchemaToAcceptOutputs(schema.unwrap()).optional();
|
|
37
|
-
}
|
|
38
|
-
if (schema instanceof z.ZodNullable) {
|
|
39
|
-
return transformSchemaToAcceptOutputs(schema.unwrap()).nullable();
|
|
40
|
-
}
|
|
41
|
-
if (schema instanceof z.ZodArray) {
|
|
42
|
-
return z.array(transformSchemaToAcceptOutputs(schema.element));
|
|
43
|
-
}
|
|
44
|
-
return z.union([
|
|
45
|
-
schema,
|
|
46
|
-
z.custom((val) => pulumi.Output.isInstance(val))
|
|
47
|
-
]);
|
|
48
|
-
}
|
|
49
|
-
var InfraComponentOptsSchema = z.object({
|
|
50
|
-
metadata: z.object({
|
|
51
|
-
stateful: z.boolean(),
|
|
52
|
-
proxiable: z.boolean()
|
|
53
|
-
}),
|
|
54
|
-
connectionTypes: z.record(z.string(), z.object({
|
|
55
|
-
description: z.string().min(5)
|
|
56
|
-
})),
|
|
57
|
-
configSchema: z.custom(),
|
|
58
|
-
deploymentInputSchema: z.custom(),
|
|
59
|
-
outputSchema: z.custom()
|
|
60
|
-
});
|
|
61
|
-
var emptyStateSchema = z.object({});
|
|
62
|
-
|
|
63
|
-
class InfraComponent {
|
|
64
|
-
opts;
|
|
65
|
-
providers;
|
|
66
|
-
validationSchema;
|
|
67
|
-
validationDeploymentInputSchema;
|
|
68
|
-
declaredConnectionInterfaces = new Map;
|
|
69
|
-
constructor(opts) {
|
|
70
|
-
this.opts = InfraComponentOptsSchema.parse(opts);
|
|
71
|
-
this.providers = {};
|
|
72
|
-
this.validationSchema = transformSchemaToAcceptOutputs(opts.configSchema);
|
|
73
|
-
this.validationDeploymentInputSchema = transformSchemaToAcceptOutputs(opts.deploymentInputSchema);
|
|
74
|
-
}
|
|
75
|
-
implement(provider, fns) {
|
|
76
|
-
this.providers[provider] = {
|
|
77
|
-
...fns,
|
|
78
|
-
stateSchema: fns.stateSchema ?? emptyStateSchema
|
|
79
|
-
};
|
|
80
|
-
return this;
|
|
81
|
-
}
|
|
82
|
-
getConnectionSchema(interfaceClass) {
|
|
83
|
-
const instance = new interfaceClass;
|
|
84
|
-
return instance.schema;
|
|
85
|
-
}
|
|
86
|
-
createDeclareConnectionInterfacesFn() {
|
|
87
|
-
return (entries) => {
|
|
88
|
-
for (const entry of entries) {
|
|
89
|
-
const instance = new entry.interface;
|
|
90
|
-
const schema = instance.schema;
|
|
91
|
-
const parseResult = schema.safeParse(entry.data);
|
|
92
|
-
if (!parseResult.success) {
|
|
93
|
-
throw new Error(`Invalid data for connection interface ${entry.interface.name}: ${parseResult.error.message}`);
|
|
94
|
-
}
|
|
95
|
-
this.declaredConnectionInterfaces.set(entry.interface, entry.data);
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
getDeclaredInterfaces() {
|
|
100
|
-
return this.declaredConnectionInterfaces;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
export {
|
|
104
|
-
createConnectionInterface,
|
|
105
|
-
InfraComponent,
|
|
106
|
-
DeploymentArtifactType,
|
|
107
|
-
ConnectionInterface,
|
|
108
|
-
CloudProvider
|
|
109
|
-
};
|
|
1
|
+
import{z as b}from"zod";import*as H from"@pulumi/pulumi";var K;((j)=>{j.aws="aws";j.gcloud="gcloud";j.azure="azure";j.linode="linode";j.hetzner="hetzner";j.cloudflare="cloudflare"})(K||={});var L;((g)=>g.container_image="container_image")(L||={});class J{}function V(x){return class extends J{schema=x}}var W=b.object({});function q(x){if(x instanceof b.ZodObject){let g=x.shape,B={};for(let E in g)B[E]=q(g[E]);return b.object(B)}if(x instanceof b.ZodOptional)return q(x.unwrap()).optional();if(x instanceof b.ZodNullable)return q(x.unwrap()).nullable();if(x instanceof b.ZodArray)return b.array(q(x.element));return b.union([x,b.custom((g)=>H.Output.isInstance(g))])}var M=b.object({metadata:b.object({stateful:b.boolean(),proxiable:b.boolean()}),connectionTypes:b.record(b.string(),b.object({description:b.string().min(5)})),configSchema:b.custom(),deploymentInputSchema:b.custom(),outputSchema:b.custom()});function X(x){return x}var N=b.object({});class Q{opts;providers;validationSchema;validationDeploymentInputSchema;declaredConnectionInterfaces=new Map;constructor(x){this.opts=M.parse(x),this.providers={},this.validationSchema=q(x.configSchema),this.validationDeploymentInputSchema=q(x.deploymentInputSchema)}implement(x,g){return this.providers[x]={...g,stateSchema:g.stateSchema??N},this}getConnectionSchema(x){return new x().schema}createDeclareConnectionInterfacesFn(){return(x)=>{for(let g of x){let F=new g.interface().schema.safeParse(g.data);if(!F.success)throw new Error(`Invalid data for connection interface ${g.interface.name}: ${F.error.message}`);this.declaredConnectionInterfaces.set(g.interface,g.data)}}}getDeclaredInterfaces(){return this.declaredConnectionInterfaces}}export{V as createConnectionInterface,X as connectionHandler,Q as InfraComponent,L as DeploymentArtifactType,J as ConnectionInterface,K as CloudProvider};
|