Iridium Compiler

node v14.20.1
version: 1.0.0
endpointsharetweet
const url = require('url'); const fetchUrl = require("fetch").fetchUrl const { json } = require("micro"); const parser = require("@observablehq/parser"); const CompilerModule = require("@alex.garcia/[email protected]"); exports.endpoint = async function (req, res) { const queryObject = url.parse(req.url,true).query; res.writeHead(200, { 'Content-Type': "text/javascript; charset=utf-8", 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': '*', }); if(queryObject.path){ //fetch from firebase and compile fetchUrl(`https://wishyoulization.firebaseio.com/iridium/${queryObject.path}.json`, function(err,meta,body){ const ojs = cell_array_to_ojs(JSON.parse(body)); const esm = source_to_esm(ojs); res.end(esm); }) }else{ const rq = await json(req); //compile from post body json const ojs = cell_array_to_ojs(rq); const esm = source_to_esm(ojs); res.end(esm); } } const cell_array_to_esm = (cells) => { return source_to_esm(cell_array_to_ojs(cells)) } const source_to_esm = (source) => { const compiler = new CompilerModule.Compiler({ resolveImportPath: (p) => { return p; }, }); return compiler.module(source); }; const cell_array_to_ojs = (cells) => { return cells .map((d) => { try { var parsed_cell = parser.parseCell(d.sourceCode); return `${d.pin ? "/*PIN*/" : ""} ${d.sourceCode};`; } catch (e) { return `${d.pin ? "/*PIN*/" : ""} /* Syntax error */`; } }) .join("\n"); };
Loading…

no comments

    sign in to comment