My first showcase! Denim is a a little CLI monster and library that provides Nim bindings for writing safe and fast native NodeJS/Bun modules (.node addons) via Node API (NAPI).
Check it on GitHub | API Reference
nimble install denim@#head
when defined napibuild:
# use `napibuild` to wrap related code. this flag is provided when `denim build myapp.nim`
import denim
init proc(module: Module):
proc hello(name: string): string {.export_napi} =
return %*("Hello, " & args[0].getStr)
var name {.export_napi} = %*("Nim is Awesome!")
elif isMainModule:
echo "A normal program"
denim build src/myapp.nim
In JavaScript, myapp.js:
const app = require('./myapp.node')
console.log(app.hello("World!")) // Hello, World!
console.log(app.name) // "Nim is Awesome"
then
node myapp.js
bun myapp.js
Built-in type checking
console.log(valido.hello())
^
Error:
/*
* @param {string} name
*/
Type mismatch parameter: `name`. Got `undefined`, expected `string`
Enjoy coding!