# Poiesis A Go tool that transpiles TypeScript to JavaScript using esbuild and executes it with goja, with an extensible builtin system. ## Project Structure ``` reichard.io/poiesis/ ├── cmd/ │ └── poiesis/ # CLI application entry point │ └── main.go ├── internal/ │ ├── builtin/ # Builtin function framework │ │ ├── builtin.go │ │ └── builtin_test.go │ └── runtime/ # TypeScript transpilation and execution │ ├── runtime.go │ └── runtime_test.go └── examples/ # Example TypeScript files ``` ## Installation & Build ```bash go build ./cmd/poiesis ``` ## Testing ```bash go test ./... golangci-lint run ``` ## Usage ```bash poiesis ``` ## Builtin System The builtin system allows you to easily expose Go functions to TypeScript/JavaScript. ### Adding a Builtin Just write a Go function and register it: ```go // Your function func add(a, b int) int { return a + b } // Register it func init() { builtin.RegisterBuiltin("add", add) } ``` That's it! The framework automatically: - Converts TypeScript values to Go types - Handles errors (panics as JS errors) - Generates TypeScript definitions - Manages the goja integration ### Example ```typescript // TypeScript code console.log("5 + 10 =", add(5, 10)); const response = fetch("https://httpbin.org/get"); console.log("OK:", response.ok); console.log("Status:", response.status); console.log("Body:", response.text()); ``` ### Built-in Functions - `fetch(url, options?)` - HTTP requests - `add(a, b)` - Simple arithmetic example - `greet(name)` - String manipulation example ## Dependencies - `github.com/evanw/esbuild/pkg/api` - TypeScript transpilation - `github.com/dop251/goja` - JavaScript execution - `github.com/stretchr/testify/assert` - Test assertions