@terraforge/terraform 0.0.2 → 0.0.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/README.md +8 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +34 -19
- package/package.json +2 -2
package/README.md
ADDED
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,9 @@ type TerraformProviderConfig = {
|
|
|
3
3
|
id?: string;
|
|
4
4
|
location?: string;
|
|
5
5
|
};
|
|
6
|
+
type InstallProps = {
|
|
7
|
+
location?: string;
|
|
8
|
+
};
|
|
6
9
|
declare const createTerraformAPI: <T>(props: {
|
|
7
10
|
namespace: string;
|
|
8
11
|
provider: {
|
|
@@ -68,4 +71,4 @@ declare class TerraformProvider implements Provider {
|
|
|
68
71
|
deleteResource({ type, state }: DeleteProps);
|
|
69
72
|
getData({ type, state }: GetDataProps);
|
|
70
73
|
}
|
|
71
|
-
export { generateTypes, createTerraformAPI, TerraformProviderConfig, TerraformProvider };
|
|
74
|
+
export { generateTypes, createTerraformAPI, TerraformProviderConfig, TerraformProvider, InstallProps };
|
package/dist/index.js
CHANGED
|
@@ -1546,19 +1546,23 @@ class TerraformProvider {
|
|
|
1546
1546
|
}
|
|
1547
1547
|
|
|
1548
1548
|
// src/resource.ts
|
|
1549
|
-
import { createMeta } from "@terraforge/core";
|
|
1549
|
+
import { createMeta, nodeMetaSymbol } from "@terraforge/core";
|
|
1550
1550
|
import { snakeCase as snakeCase2 } from "change-case";
|
|
1551
|
-
var createNamespaceProxy = (cb,
|
|
1551
|
+
var createNamespaceProxy = (cb, scb) => {
|
|
1552
1552
|
const cache = new Map;
|
|
1553
|
-
return new Proxy(
|
|
1553
|
+
return new Proxy({}, {
|
|
1554
1554
|
get(_, key) {
|
|
1555
1555
|
if (!cache.has(key)) {
|
|
1556
|
-
|
|
1556
|
+
const value = typeof key === "symbol" ? scb?.(key) : cb(key);
|
|
1557
|
+
cache.set(key, value);
|
|
1557
1558
|
}
|
|
1558
1559
|
return cache.get(key);
|
|
1559
1560
|
},
|
|
1560
1561
|
set(_, key) {
|
|
1561
|
-
|
|
1562
|
+
if (typeof key === "string") {
|
|
1563
|
+
throw new Error(`Cannot set property ${key} on read-only object.`);
|
|
1564
|
+
}
|
|
1565
|
+
throw new Error(`This object is read-only.`);
|
|
1562
1566
|
}
|
|
1563
1567
|
});
|
|
1564
1568
|
};
|
|
@@ -1607,26 +1611,30 @@ var createResourceProxy = (name) => {
|
|
|
1607
1611
|
resource: (ns, parent, id, input, config) => {
|
|
1608
1612
|
const type = snakeCase2(name + "_" + ns.join("_"));
|
|
1609
1613
|
const provider = `terraform:${name}:${config?.provider ?? "default"}`;
|
|
1610
|
-
const
|
|
1614
|
+
const meta = createMeta("resource", provider, parent, type, id, input, config);
|
|
1611
1615
|
const resource = createNamespaceProxy((key) => {
|
|
1612
|
-
|
|
1613
|
-
|
|
1616
|
+
return meta.output((data) => data[key]);
|
|
1617
|
+
}, (key) => {
|
|
1618
|
+
if (key === nodeMetaSymbol) {
|
|
1619
|
+
return meta;
|
|
1614
1620
|
}
|
|
1615
|
-
return
|
|
1616
|
-
}
|
|
1621
|
+
return;
|
|
1622
|
+
});
|
|
1617
1623
|
parent.add(resource);
|
|
1618
1624
|
return resource;
|
|
1619
1625
|
},
|
|
1620
1626
|
dataSource: (ns, parent, id, input, config) => {
|
|
1621
1627
|
const type = snakeCase2(name + "_" + ns.join("_"));
|
|
1622
1628
|
const provider = `terraform:${name}:${config?.provider ?? "default"}`;
|
|
1623
|
-
const
|
|
1629
|
+
const meta = createMeta("data", provider, parent, type, id, input, config);
|
|
1624
1630
|
const dataSource = createNamespaceProxy((key) => {
|
|
1625
|
-
|
|
1626
|
-
|
|
1631
|
+
return meta.output((data) => data[key]);
|
|
1632
|
+
}, (key) => {
|
|
1633
|
+
if (key === nodeMetaSymbol) {
|
|
1634
|
+
return meta;
|
|
1627
1635
|
}
|
|
1628
|
-
return
|
|
1629
|
-
}
|
|
1636
|
+
return;
|
|
1637
|
+
});
|
|
1630
1638
|
parent.add(dataSource);
|
|
1631
1639
|
return dataSource;
|
|
1632
1640
|
}
|
|
@@ -1636,11 +1644,11 @@ var createResourceProxy = (name) => {
|
|
|
1636
1644
|
// src/api.ts
|
|
1637
1645
|
var createTerraformAPI = (props) => {
|
|
1638
1646
|
const resource = createResourceProxy(props.namespace);
|
|
1639
|
-
const install = async (
|
|
1640
|
-
await downloadPlugin({ ...props.provider,
|
|
1647
|
+
const install = async (installProps) => {
|
|
1648
|
+
await downloadPlugin({ ...props.provider, ...installProps });
|
|
1641
1649
|
};
|
|
1642
|
-
const createPlugin = (
|
|
1643
|
-
return createLazyPlugin({ ...props.provider,
|
|
1650
|
+
const createPlugin = (pluginProps) => {
|
|
1651
|
+
return createLazyPlugin({ ...props.provider, ...pluginProps });
|
|
1644
1652
|
};
|
|
1645
1653
|
return new Proxy(() => {}, {
|
|
1646
1654
|
apply(_, _this, [input, config]) {
|
|
@@ -1664,6 +1672,7 @@ var generateTypes = (providers, resources, dataSources) => {
|
|
|
1664
1672
|
generateImport("c", "@terraforge/core"),
|
|
1665
1673
|
generateImport("t", "@terraforge/terraform"),
|
|
1666
1674
|
"type _Record<T> = Record<string, T>",
|
|
1675
|
+
generateInstallFunction(providers),
|
|
1667
1676
|
generateNamespace(providers, (name, prop, indent) => {
|
|
1668
1677
|
const typeName = name.toLowerCase();
|
|
1669
1678
|
return `${tab(indent)}export function ${typeName}(props: ${generatePropertyInputConst(prop, indent)}, config?: t.TerraformProviderConfig): t.TerraformProvider`;
|
|
@@ -1699,6 +1708,12 @@ var generateTypes = (providers, resources, dataSources) => {
|
|
|
1699
1708
|
var generateImport = (name, from) => {
|
|
1700
1709
|
return `import * as ${name} from '${from}'`;
|
|
1701
1710
|
};
|
|
1711
|
+
var generateInstallFunction = (resources) => {
|
|
1712
|
+
return generateNamespace(resources, (name, _prop, indent) => {
|
|
1713
|
+
const typeName = name.toLowerCase();
|
|
1714
|
+
return `${tab(indent)}export namespace ${typeName} { export function install(props?: t.InstallProps): Promise<void> }`;
|
|
1715
|
+
});
|
|
1716
|
+
};
|
|
1702
1717
|
var generatePropertyInputConst = (prop, indent) => {
|
|
1703
1718
|
return generateValue(prop, {
|
|
1704
1719
|
depth: 0,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@terraforge/terraform",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"module": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
17
|
"build": "bunup src/index.ts --format esm --dts --clean --target node --packages external --out-dir ./dist",
|
|
18
|
-
"
|
|
18
|
+
"prepublishOnly": "bun run build",
|
|
19
19
|
"test": "bun test"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|