@terraforge/terraform 0.0.8 → 0.0.9
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/cli/build-package.ts +11 -6
- package/dist/index.js +49 -11
- package/package.json +1 -1
package/cli/build-package.ts
CHANGED
|
@@ -13,25 +13,30 @@ const packageData = (await Bun.file('./package.json').json()) as {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
if (!packageData
|
|
16
|
+
if (!packageData) {
|
|
17
17
|
console.error('Failed to read package.json')
|
|
18
18
|
process.exit(1)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
const providerData = packageData.provider
|
|
22
22
|
|
|
23
|
+
if (!providerData) {
|
|
24
|
+
console.error('Missing required property: provider')
|
|
25
|
+
process.exit(1)
|
|
26
|
+
}
|
|
27
|
+
|
|
23
28
|
if (!providerData.version) {
|
|
24
|
-
console.error('Missing required
|
|
29
|
+
console.error('Missing required property: provider.version')
|
|
25
30
|
process.exit(1)
|
|
26
31
|
}
|
|
27
32
|
|
|
28
33
|
if (!providerData.org) {
|
|
29
|
-
console.error('Missing required
|
|
34
|
+
console.error('Missing required property: provider.org')
|
|
30
35
|
process.exit(1)
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
if (!providerData.type) {
|
|
34
|
-
console.error('Missing required
|
|
39
|
+
console.error('Missing required property: provider.type')
|
|
35
40
|
process.exit(1)
|
|
36
41
|
}
|
|
37
42
|
|
|
@@ -75,9 +80,9 @@ await Bun.write(`./dist/index.d.ts`, types)
|
|
|
75
80
|
await Bun.write(
|
|
76
81
|
`./dist/index.js`,
|
|
77
82
|
`
|
|
78
|
-
import {
|
|
83
|
+
import { createTerraformProxy } from '@terraforge/terraform'
|
|
79
84
|
|
|
80
|
-
export const ${type} =
|
|
85
|
+
export const ${type} = createTerraformProxy({
|
|
81
86
|
namespace: '${type}',
|
|
82
87
|
provider: { org: '${org}', type: '${type}', version: '${version}' },
|
|
83
88
|
})
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ var generateTypes = (providers, resources, dataSources) => {
|
|
|
8
8
|
generateImport("c", "@terraforge/core"),
|
|
9
9
|
generateImport("t", "@terraforge/terraform"),
|
|
10
10
|
"type _Record<T> = Record<string, T>",
|
|
11
|
-
|
|
11
|
+
generateInstallHelperFunctions(providers),
|
|
12
12
|
generateNamespace(providers, (name, prop, indent) => {
|
|
13
13
|
const typeName = name.toLowerCase();
|
|
14
14
|
return `${tab(indent)}export declare function ${typeName}(props: ${generatePropertyInputConst(prop, indent)}, config?: t.TerraformProviderConfig): t.TerraformProvider`;
|
|
@@ -41,10 +41,16 @@ var generateTypes = (providers, resources, dataSources) => {
|
|
|
41
41
|
var generateImport = (name, from) => {
|
|
42
42
|
return `import * as ${name} from '${from}'`;
|
|
43
43
|
};
|
|
44
|
-
var
|
|
44
|
+
var generateInstallHelperFunctions = (resources) => {
|
|
45
45
|
return generateNamespace(resources, (name, _prop, indent) => {
|
|
46
46
|
const typeName = name.toLowerCase();
|
|
47
|
-
return
|
|
47
|
+
return [
|
|
48
|
+
`${tab(indent)}export declare namespace ${typeName} {`,
|
|
49
|
+
`${tab(indent + 1)}export function install(props?: t.InstallProps): Promise<void>`,
|
|
50
|
+
`${tab(indent + 1)}export function uninstall(props?: t.InstallProps): Promise<void>`,
|
|
51
|
+
`${tab(indent + 1)}export function isInstalled(props?: t.InstallProps): Promise<boolean>`,
|
|
52
|
+
`${tab(indent)}}`
|
|
53
|
+
].join("\n");
|
|
48
54
|
});
|
|
49
55
|
};
|
|
50
56
|
var generatePropertyInputConst = (prop, indent) => {
|
|
@@ -71,8 +77,8 @@ var generatePropertyInputType = (prop, indent) => {
|
|
|
71
77
|
};
|
|
72
78
|
var generatePropertyOutputType = (prop, indent) => {
|
|
73
79
|
return generateValue(prop, {
|
|
74
|
-
indent: indent + 1,
|
|
75
80
|
depth: 0,
|
|
81
|
+
indent: indent + 1,
|
|
76
82
|
wrap: (v, p, ctx) => ctx.depth === 1 ? p.optional && !p.computed ? `c.OptionalOutput<${v}>` : `c.Output<${v}>` : v,
|
|
77
83
|
filter: () => true,
|
|
78
84
|
readonly: true,
|
|
@@ -1047,9 +1053,9 @@ var createPluginClient = async (props) => {
|
|
|
1047
1053
|
// src/plugin/download.ts
|
|
1048
1054
|
import { createDebugger as createDebugger2 } from "@terraforge/core";
|
|
1049
1055
|
import jszip from "jszip";
|
|
1050
|
-
import { mkdir, stat, writeFile } from "fs/promises";
|
|
1056
|
+
import { mkdir, rm, stat, writeFile } from "fs/promises";
|
|
1051
1057
|
import { homedir } from "os";
|
|
1052
|
-
import { join } from "path";
|
|
1058
|
+
import { dirname, join } from "path";
|
|
1053
1059
|
|
|
1054
1060
|
// src/plugin/registry.ts
|
|
1055
1061
|
import { arch, platform } from "os";
|
|
@@ -1136,15 +1142,33 @@ var exists = async (file) => {
|
|
|
1136
1142
|
};
|
|
1137
1143
|
var debug2 = createDebugger2("Downloader");
|
|
1138
1144
|
var installPath = join(homedir(), ".terraforge", "plugins");
|
|
1145
|
+
var getInstallPath = (props) => {
|
|
1146
|
+
const dir = props.location ?? installPath;
|
|
1147
|
+
const file = join(dir, `${props.org}-${props.type}-${props.version}`);
|
|
1148
|
+
return file;
|
|
1149
|
+
};
|
|
1150
|
+
var isPluginInstalled = (props) => {
|
|
1151
|
+
return exists(getInstallPath(props));
|
|
1152
|
+
};
|
|
1153
|
+
var deletePlugin = async (props) => {
|
|
1154
|
+
const file = getInstallPath(props);
|
|
1155
|
+
const isAlreadyInstalled = await isPluginInstalled(props);
|
|
1156
|
+
if (isAlreadyInstalled) {
|
|
1157
|
+
debug2(props.type, "deleting...");
|
|
1158
|
+
await rm(file);
|
|
1159
|
+
debug2(props.type, "deleted");
|
|
1160
|
+
} else {
|
|
1161
|
+
debug2(props.type, "not installed");
|
|
1162
|
+
}
|
|
1163
|
+
};
|
|
1139
1164
|
var downloadPlugin = async (props) => {
|
|
1140
1165
|
if (props.version === "latest") {
|
|
1141
1166
|
const { latest } = await getProviderVersions(props.org, props.type);
|
|
1142
1167
|
props.version = latest;
|
|
1143
1168
|
}
|
|
1144
|
-
const
|
|
1145
|
-
const
|
|
1146
|
-
|
|
1147
|
-
if (!exist) {
|
|
1169
|
+
const file = getInstallPath(props);
|
|
1170
|
+
const isAlreadyInstalled = await isPluginInstalled(props);
|
|
1171
|
+
if (!isAlreadyInstalled) {
|
|
1148
1172
|
debug2(props.type, "downloading...");
|
|
1149
1173
|
const info = await getProviderDownloadUrl(props.org, props.type, props.version);
|
|
1150
1174
|
const res = await fetch(info.url);
|
|
@@ -1156,7 +1180,7 @@ var downloadPlugin = async (props) => {
|
|
|
1156
1180
|
}
|
|
1157
1181
|
const binary = await zipped.async("nodebuffer");
|
|
1158
1182
|
debug2(props.type, "done");
|
|
1159
|
-
await mkdir(
|
|
1183
|
+
await mkdir(dirname(file), { recursive: true });
|
|
1160
1184
|
await writeFile(file, binary, {
|
|
1161
1185
|
mode: 509
|
|
1162
1186
|
});
|
|
@@ -1863,6 +1887,8 @@ var createClassProxy = (construct, get) => {
|
|
|
1863
1887
|
var createRecursiveProxy = ({
|
|
1864
1888
|
provider,
|
|
1865
1889
|
install,
|
|
1890
|
+
uninstall,
|
|
1891
|
+
isInstalled,
|
|
1866
1892
|
resource,
|
|
1867
1893
|
dataSource
|
|
1868
1894
|
}) => {
|
|
@@ -1890,6 +1916,12 @@ var createRecursiveProxy = ({
|
|
|
1890
1916
|
if (key === "install") {
|
|
1891
1917
|
return install;
|
|
1892
1918
|
}
|
|
1919
|
+
if (key === "uninstall") {
|
|
1920
|
+
return uninstall;
|
|
1921
|
+
}
|
|
1922
|
+
if (key === "isInstalled") {
|
|
1923
|
+
return isInstalled;
|
|
1924
|
+
}
|
|
1893
1925
|
return findNextProxy([], key);
|
|
1894
1926
|
});
|
|
1895
1927
|
};
|
|
@@ -1909,6 +1941,12 @@ var createTerraformProxy = (props) => {
|
|
|
1909
1941
|
async install(installProps) {
|
|
1910
1942
|
await downloadPlugin({ ...props.provider, ...installProps });
|
|
1911
1943
|
},
|
|
1944
|
+
async uninstall(installProps) {
|
|
1945
|
+
await deletePlugin({ ...props.provider, ...installProps });
|
|
1946
|
+
},
|
|
1947
|
+
async isInstalled(installProps) {
|
|
1948
|
+
return await isPluginInstalled({ ...props.provider, ...installProps });
|
|
1949
|
+
},
|
|
1912
1950
|
resource: (ns, parent, id, input, config) => {
|
|
1913
1951
|
const type = snakeCase2([props.namespace, ...ns].join("_"));
|
|
1914
1952
|
const provider = `terraform:${props.namespace}:${config?.provider ?? "default"}`;
|