@divsense-ai/rio-de-js
v1.0.1
Published
Divsense Rio Lib Builder
Downloads
48
Maintainers
Readme
rio-de-js
Concise JavaScript toolchain for loading, compiling, and executing Rio modules.
rio-de-js provides:
- Recursive Rio import resolution
- Compilation to executable JavaScript functions
- Built-in standard libraries (
ramda,io,math,number,promise) - A small CLI for inspect/exec/static output
Install
npm install rio-de-jsFor local development in this repository:
npm install
npm testQuick Start (Programmatic API)
const fs = require('fs')
const { rioLibs, fci, libFunction } = require('rio-de-js')
const fetch = url => {
const [protocol] = url.split('://')
if (protocol !== 'file') return Promise.reject(new Error('Only file:// in this example'))
const path = url.replace('file://', '')
try {
return Promise.resolve(fs.readFileSync(path, 'utf8'))
} catch (e) {
return Promise.reject(e)
}
}
;(async () => {
const url = 'file://./examples/calc.rio'
const libs = await fci(url, rioLibs, fetch)
const summa = libFunction(libs, url, 'summa')
const result = summa([{ value: 1 }, { value: 2 }])
console.log(result) // 3
})()CLI
Entrypoint:
node ./bin/rio.js <command> <path-without-.rio> [functionName] [flags]Example path: ./examples/maybe means file ./examples/maybe.rio.
Commands:
view <path>: print compiled exported functionslib <path>: same output asviewast <path>: print parsed Rio ASTexec <path> <name> [-p]: execute one exported functionstatic <path> [-o output.js]: emit CommonJS module source
Flags:
-p/--promise: treatexecresult as a Promise and print resolved value-o <file>: output file path forstatic
Notes:
execcurrently calls the function with no arguments.- CLI reads files through
file://protocol from current working directory.
Built-in Libraries
Default in scope:
ramda
Available via import:
io:delay,delayBy,log,getJson,getXmlmath: JavaScriptMathfunction wrappersnumber:parseInt,parseFloat,toNumber,isNaNpromise:promiseResolve,promiseReject,promiseAll,promiseRace
Rio import examples:
import 'math'
import 'io' { delay }
import 'promise' { promiseResolve }Public API
require('rio-de-js') exports:
rioLibs: default library registryinstall(name, ast, libs): compile/install one Rio AST into libs mapresolveImports(ast, libs): list missing imports for a parsed ASTlibFunction(libs, url, exportName): get compiled exported functionfci(url, libs, fetch, endpoints?): fetch + compile + install recursivelymsm(ast): build static CommonJS source from AST ({ code, unresolved })
Legacy compatibility file in this repo:
rio.de.jsalso exposes lower-level helpers (buildScope,compile,makeLib)
Known Limitations (Current Repo State)
staticcan fail on modules that use bare imports without explicit specifiers (for exampleimport 'math').
Repository Layout
src/: compiler/install/linker corehelpers/: fetch-compile-install and static-module helperslibs/: built-in library symbol/function tablesexamples/: sample Rio modulestest/: mocha tests for examples and fetch/install flowbin/rio.js: CLI
