tfts 0.3.0 → 0.3.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/README.md CHANGED
@@ -1,15 +1,178 @@
1
1
  # tfts
2
2
 
3
- To install dependencies:
3
+ A TypeScript SDK for defining Terraform infrastructure as code. Drop-in replacement for CDKTF.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ bun add tfts
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ### Create configuration file
14
+
15
+ Create `cdktf.json` in your project root:
16
+
17
+ ```json
18
+ {
19
+ "language": "typescript",
20
+ "app": "bun run main.ts",
21
+ "terraformProviders": ["hashicorp/google@~>6.0"]
22
+ }
23
+ ```
24
+
25
+ ### Generate provider bindings
26
+
27
+ ```bash
28
+ bunx tfts get
29
+ ```
30
+
31
+ ### Define your infrastructure
32
+
33
+ ```typescript
34
+ // main.ts
35
+ import { App, TerraformStack, TerraformOutput } from "tfts";
36
+ import { GoogleProvider } from "./.gen/providers/hashicorp/google/provider.js";
37
+ import { ComputeInstance } from "./.gen/providers/hashicorp/google/resources/compute-instance.js";
38
+
39
+ class MyStack extends TerraformStack {
40
+ constructor(scope: App, id: string) {
41
+ super(scope, id);
42
+
43
+ new GoogleProvider(this, "google", {
44
+ project: "my-project",
45
+ region: "us-central1",
46
+ });
47
+
48
+ const instance = new ComputeInstance(this, "vm", {
49
+ name: "my-instance",
50
+ machineType: "e2-micro",
51
+ zone: "us-central1-a",
52
+ bootDisk: {
53
+ initializeParams: {
54
+ image: "debian-cloud/debian-11",
55
+ },
56
+ },
57
+ networkInterface: [{ network: "default" }],
58
+ });
59
+
60
+ new TerraformOutput(this, "instance-ip", {
61
+ value: instance.networkInterface.get(0).networkIp,
62
+ });
63
+ }
64
+ }
65
+
66
+ const app = new App();
67
+ new MyStack(app, "my-stack");
68
+ app.synth();
69
+ ```
70
+
71
+ ### Synthesize and deploy
72
+
73
+ ```bash
74
+ bunx tfts synth
75
+ cd cdktf.out/stacks/my-stack
76
+ terraform init
77
+ terraform apply
78
+ ```
79
+
80
+ ## CLI Commands
81
+
82
+ | Command | Description |
83
+ |---------|-------------|
84
+ | `tfts get` | Generate provider bindings from `cdktf.json` |
85
+ | `tfts synth` | Synthesize Terraform JSON configuration |
86
+
87
+ ## Core Concepts
88
+
89
+ ### App & Stack
90
+
91
+ ```typescript
92
+ const app = new App();
93
+ new MyStack(app, "production");
94
+ new MyStack(app, "staging");
95
+ app.synth();
96
+ ```
97
+
98
+ ### Variables & Outputs
99
+
100
+ ```typescript
101
+ const region = new TerraformVariable(this, "region", {
102
+ type: "string",
103
+ default: "us-central1",
104
+ });
105
+
106
+ new TerraformOutput(this, "url", {
107
+ value: instance.selfLink,
108
+ sensitive: true,
109
+ });
110
+ ```
111
+
112
+ ### References
113
+
114
+ Resource attributes automatically create Terraform references:
115
+
116
+ ```typescript
117
+ const bucket = new StorageBucket(this, "bucket", { name: "my-bucket" });
118
+ new ComputeInstance(this, "vm", {
119
+ metadata: { bucket: bucket.name }, // Creates ${google_storage_bucket.bucket.name}
120
+ });
121
+ ```
122
+
123
+ ### Functions
124
+
125
+ ```typescript
126
+ import { Fn } from "tfts";
127
+
128
+ Fn.join("-", ["hello", "world"]);
129
+ Fn.lookup(myMap, "key", "default");
130
+ Fn.base64encode("hello");
131
+ ```
132
+
133
+ ### Backends
134
+
135
+ ```typescript
136
+ import { GcsBackend, S3Backend, RemoteBackend } from "tfts";
137
+
138
+ new GcsBackend(this, { bucket: "my-tf-state", prefix: "prod" });
139
+ ```
140
+
141
+ ## Migrating from CDKTF
142
+
143
+ ### Automated (using ast-grep)
4
144
 
5
145
  ```bash
6
- bun install
146
+ # Rewrite imports
147
+ ast-grep --pattern 'from "cdktf"' --rewrite 'from "tfts"' --lang ts -U .
148
+
149
+ # Update package.json
150
+ npm remove cdktf
151
+ npm add tfts
152
+ ```
153
+
154
+ ### Manual
155
+
156
+ 1. Update `package.json`:
157
+
158
+ ```diff
159
+ - "cdktf": "^0.20.0"
160
+ + "tfts": "^0.3.0"
7
161
  ```
8
162
 
9
- To run:
163
+ 2. Update imports in all `.ts` files:
164
+
165
+ ```diff
166
+ - import { App, TerraformStack } from "cdktf";
167
+ + import { App, TerraformStack } from "tfts";
168
+ ```
169
+
170
+ 3. Regenerate provider bindings:
10
171
 
11
172
  ```bash
12
- bun run index.ts
173
+ tfts get
13
174
  ```
14
175
 
15
- This project was created using `bun init` in bun v1.2.19. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
176
+ ## License
177
+
178
+ MIT
@@ -1,2 +1,3 @@
1
+ #!/usr/bin/env node
1
2
  export {};
2
3
  //# sourceMappingURL=main.d.ts.map
package/dist/cli/main.js CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  import { get } from "./get.js";
2
3
  import { synth } from "./synth.js";
3
4
  const cliArgs = process.argv.slice(2);
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tfts",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "TypeScript-first infrastructure as code for Terraform",
5
5
  "type": "module",
6
6
  "workspaces": [