This Webpack loader allows importing Helios scripts directly into Javascript/Typescript projects.
Features:
- Helios compilation is run during build time
- Working with Helios sources directly allows using Helios IDE plugins
- Automatically uses your current version of Helios (must be installed manually inside the repo where you configure webpack)
- WiP: generates Typescript declarations for user-defined Helios types (Typescript declaration files are emitted inside the source directory)
Note: the Helios import syntax must use relative paths as literal strings insteads of module names.
A Helios module:
// common.hl
module common
struct Datum {
secret: Int
}
struct Redeemer {
guess: Int
}
A Helios validator:
// contract.hl
spending contract
import { Datum, Redeemer } from "./common.hl"
func main(datum: Datum, redeemer: Redeemer, _) -> Bool {
datum.secret == redeemer.guess
}
Typescript off-chain code:
// index.ts
import Program from "./contract.hl"
const program = new Program()
const uplcProgram = program.compile(true)
...
The imported Program
has the same methods as helios.Program
.
Install the loader:
npm install --save-dev @hyperionbt/helios-loader
If npm gives the unable to resolve dependency tree
error, you can try running the following command to force npm to use your currently installed Helios
version:
npm install --save-dev @hyperionbt/helios-loader --legacy-peer-deps
Configure Webpack:
// webpack.config.js
module.exports = {
mode: "development",
entry: "./index.ts",
output: {
path: __dirname + "/dist/"
},
module: {
rules: [
{
test: /(?<!\.d)\.(ts|tsx)$/,
exclude: /node_modules/,
resolve: {
extensions: [".ts", ".tsx"],
},
use: [
"ts-loader",
"@hyperionbt/helios-loader" // helios-loader AFTER ts-loader so it is able to modify .ts sources importing Helios scripts BEFORE ts-loader is called
]
},
{
test: /\.(hl|helios)$/,
exclude: /node_modules/,
use: [
{
loader: "@hyperionbt/helios-loader",
options: {
emitTypes: true // must be true when importing Helios scripts in Typescript
}
}
]
}
]
}
}