rio-de-js
Version:
Divsense Rio Lib Builder
106 lines (72 loc) • 2.51 kB
JavaScript
const fs = require('fs')
const { rio, resolveImports, buildScope, compile } = require('../index.js')
const R = require('ramda')
const ramda = require('../imports/ramda.js')
const math = require('../imports/math.js')
const number = require('../imports/number.js')
const http = require('../imports/http.js')
const io = require('../libs/io.js')
const promise = require('../libs/promise.js')
/*
* riolibs:: {
* <url>:: {
* names::[String],
* functions:[Function]
* }
* }
*/
var riolibs = {
'http://divsense.com/io': io,
'http://divsense.com/ramda': ramda,
'http://divsense.com/http': http,
'http://divsense.com/math': math,
'http://divsense.com/number': number,
'http://divsense.com/promise': promise,
}
const defaultLibs = ['http://divsense.com/ramda', 'http://divsense.com/io']
//const inp = 'maybe.rio'
//const inp = 'highlight_xml.rio'
const inp = 'p_calc.rio'
//const inp = 'sample.rio'
const rioCode = fs.readFileSync(__dirname + '/' + inp).toString()
try {
const ast = rio.parse(rioCode)
const missingImports = resolveImports(ast, riolibs)
if(missingImports.length) {
// download missing libs and add them to the riolibs ...
console.log('Missing libs', missingImports)
}
//console.log(JSON.stringify(missingImports, null, 2))
const {scope, imports} = buildScope(ast, riolibs, defaultLibs)
//console.log(JSON.stringify(imports, null, 2))
const {code, exports} = compile(ast, imports)
console.log(code)
}
catch(e) {
console.log(e)
}
//console.log(JSON.stringify(ast, null, 2))
//return
/*
const {libScope, imports} = rio.buildLibScope(ast, riolibs, defaultLibs)
const {code, exports, error} = rio.compile(ast, imports)
//console.log(code, exports, error)
if(error) {
console.log(JSON.stringify(error, null, 2))
} else {
console.log(code)
const {lib, error} = rio.makeLib(code, libScope, imports, exports)
//const just = lib.functions[0]
//const nothing = lib.functions[1]
//const isJust = lib.functions[2]
//const isNothing = lib.functions[3]
//const getOrElse = lib.functions[4]
//const test1 = lib.functions[5]
//const x1 = x => just(x + 1)
//const x2 = just(2)
//const x3 = R.chain(x1, x2)
//console.log(getOrElse('nothing', x3))
//console.log( test1() )
}
//const x = res.functions[0](-99)([1,2])
//console.log(x)*/