Helios Webpack loader
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.
Example
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:
import Program from "./contract.hl"
const program = new Program()
const uplcProgram = program.compile(true)
...
The imported Program
has the same methods as helios.Program
.
Installation and configuration
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:
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"
]
},
{
test: /\.(hl|helios)$/,
exclude: /node_modules/,
use: [
{
loader: "@hyperionbt/helios-loader",
options: {
emitTypes: true
}
}
]
}
]
}
}