@sdlcworks/components 0.0.1 → 0.0.2
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.js +114 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1,114 @@
|
|
|
1
|
-
|
|
1
|
+
// src/network.ts
|
|
2
|
+
class NetworkComponent {
|
|
3
|
+
inputSchema;
|
|
4
|
+
pulumiFns;
|
|
5
|
+
constructor(opts) {
|
|
6
|
+
this.inputSchema = opts.inputSchema;
|
|
7
|
+
this.pulumiFns = {};
|
|
8
|
+
}
|
|
9
|
+
pulumi(provider, pulumiFn) {
|
|
10
|
+
this.pulumiFns[provider] = pulumiFn;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
// src/infra.ts
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
var InfraComponentOptsSchema = z.object({
|
|
16
|
+
metadata: z.object({
|
|
17
|
+
stateful: z.boolean(),
|
|
18
|
+
proxiable: z.boolean()
|
|
19
|
+
}),
|
|
20
|
+
connectionTypes: z.record(z.string(), z.object({
|
|
21
|
+
description: z.string().min(5)
|
|
22
|
+
})),
|
|
23
|
+
configSchema: z.any(),
|
|
24
|
+
networkInputSchema: z.any(),
|
|
25
|
+
deploymentInputSchema: z.any()
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
class InfraComponent {
|
|
29
|
+
opts;
|
|
30
|
+
connect;
|
|
31
|
+
deploy;
|
|
32
|
+
pulumiFns;
|
|
33
|
+
constructor(opts) {
|
|
34
|
+
this.opts = InfraComponentOptsSchema.parse(opts);
|
|
35
|
+
this.pulumiFns = {};
|
|
36
|
+
}
|
|
37
|
+
onConnect(connectFn) {
|
|
38
|
+
this.connect = connectFn;
|
|
39
|
+
}
|
|
40
|
+
onDeploy(deployFn) {
|
|
41
|
+
this.deploy = deployFn;
|
|
42
|
+
}
|
|
43
|
+
pulumi(provider, pulumiFn) {
|
|
44
|
+
this.pulumiFns[provider] = pulumiFn;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// src/types.ts
|
|
48
|
+
var CloudProvider;
|
|
49
|
+
((CloudProvider2) => {
|
|
50
|
+
CloudProvider2["aws"] = "aws";
|
|
51
|
+
CloudProvider2["gcloud"] = "gcloud";
|
|
52
|
+
CloudProvider2["azure"] = "azure";
|
|
53
|
+
CloudProvider2["linode"] = "linode";
|
|
54
|
+
CloudProvider2["hetzner"] = "hetzner";
|
|
55
|
+
CloudProvider2["cloudflare"] = "cloudflare";
|
|
56
|
+
})(CloudProvider ||= {});
|
|
57
|
+
var DeploymentArtifactType;
|
|
58
|
+
((DeploymentArtifactType2) => {
|
|
59
|
+
DeploymentArtifactType2["container_image"] = "container_image";
|
|
60
|
+
DeploymentArtifactType2["local_file"] = "local_file";
|
|
61
|
+
})(DeploymentArtifactType ||= {});
|
|
62
|
+
// src/subnet.ts
|
|
63
|
+
class SubnetComponent {
|
|
64
|
+
inputSchema;
|
|
65
|
+
pulumiFns;
|
|
66
|
+
constructor(opts) {
|
|
67
|
+
this.inputSchema = opts.inputSchema;
|
|
68
|
+
this.pulumiFns = {};
|
|
69
|
+
}
|
|
70
|
+
pulumi(provider, pulumiFn) {
|
|
71
|
+
this.pulumiFns[provider] = pulumiFn;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// src/names.ts
|
|
75
|
+
import crypto from "crypto";
|
|
76
|
+
var COMPONENT_NAME_MAXLEN = 10;
|
|
77
|
+
var COMPONENT_NAME_RANDCHARS = 2;
|
|
78
|
+
var RESOURCE_NAME_MAXLEN = 10;
|
|
79
|
+
var RESOURCE_NAME_HASHCHARS = 2;
|
|
80
|
+
function escapeRegExp(str) {
|
|
81
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
82
|
+
}
|
|
83
|
+
function sanitizeForAlphaNum(_name, validSpaceRepl) {
|
|
84
|
+
let name = _name;
|
|
85
|
+
name = name.replace(/\s+/g, " ");
|
|
86
|
+
name = name.split(" ").join(validSpaceRepl);
|
|
87
|
+
const escapedRepl = escapeRegExp(validSpaceRepl);
|
|
88
|
+
const collapseRegex = new RegExp(`${escapedRepl}+`, "g");
|
|
89
|
+
name = name.replace(collapseRegex, validSpaceRepl);
|
|
90
|
+
const trimRegex = new RegExp(`^${escapedRepl}+|${escapedRepl}+$`, "g");
|
|
91
|
+
name = name.replace(trimRegex, "");
|
|
92
|
+
name = name.toLowerCase();
|
|
93
|
+
name = name.replace(/[^a-z0-9\-]/g, "");
|
|
94
|
+
return name;
|
|
95
|
+
}
|
|
96
|
+
function getComponentInfraID(componentName) {
|
|
97
|
+
const componentNameRand = sanitizeForAlphaNum(crypto.createHash("sha256").update(`${Date.now()}${Math.random()}`).digest("base64"), "-").slice(0, COMPONENT_NAME_RANDCHARS);
|
|
98
|
+
return `${sanitizeForAlphaNum(componentName, "-").slice(COMPONENT_NAME_MAXLEN)}${componentNameRand}`;
|
|
99
|
+
}
|
|
100
|
+
function generateFullResourceName(componentInfraID, name) {
|
|
101
|
+
let resourceName = sanitizeForAlphaNum(name, "-").slice(RESOURCE_NAME_MAXLEN);
|
|
102
|
+
resourceName = sanitizeForAlphaNum(crypto.createHash("sha256").update(resourceName).digest("base64"), "-").slice(0, RESOURCE_NAME_HASHCHARS);
|
|
103
|
+
return `${componentInfraID}-${resourceName}`;
|
|
104
|
+
}
|
|
105
|
+
export {
|
|
106
|
+
sanitizeForAlphaNum,
|
|
107
|
+
getComponentInfraID,
|
|
108
|
+
generateFullResourceName,
|
|
109
|
+
SubnetComponent,
|
|
110
|
+
NetworkComponent,
|
|
111
|
+
InfraComponent,
|
|
112
|
+
DeploymentArtifactType,
|
|
113
|
+
CloudProvider
|
|
114
|
+
};
|