Select Git revision
gogetter.js
gogetter.js 2.63 KiB
// fs abstraction for sys
function GoGetter() {
// I'm keeping this here because GoGetter is localized to the environment, mgr is not
this.interpreterName = 'cuttlefish'
this.interpreterVersion = 'v0.1'
this.recursivePathSearch = (root, debug) => {
return new Promise((resolve, reject) => {
jQuery.get(`/fileList?path=${root}`, (resp) => {
//console.log('resp at jq', resp)
resolve(resp)
})
})
}
// https://github.com/tc39/proposal-dynamic-import
this.importSource = (url) => {
// escape characters that are used to delimit the module URL.
// this way the following module works: 'data:text/javascript,console.log("hello")'
url = url.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
//
let ogurl = url;
// try adding this query modifier to convince the browser it's new (if not, cannot refresh source)
url += `?mtime=${performance.now()}`
// to try...
return new Promise((resolve, reject) => {
import(url).then((obj) => {
resolve(obj.default)
}).catch((err) => {
// at these levels, probably ah syntax error
if(err.name === "SyntaxError"){
console.error("Syntax Error at Load")
console.error("in:", ogurl)
console.error("at line:", err.lineNumber)
reject(err)
} else {
reject(err)
}
})
})
// ... previously, this hack... but why?
/*
return new Promise((resolve, reject) => {
const script = document.createElement("script")
const tempGlobal = "__tempModuleLoadingVariable" + Math.random().toString(32).substring(2
function cleanup() {
delete window[tempGlobal]
script.remove()
}
window[tempGlobal] = function(module) {
cleanup()
//console.log('ADDHUNK (2) import resolves', url)
resolve(module[Object.keys(module)[0]])
}
script.type = "module"
script.onerror = () => {
console.error(`error from imported script...`, err)
reject(new Error("Failed to load module script with URL " + url))
cleanup()
}
script.textContent = `import * as m from "${url}"; window.${tempGlobal}(m);`
document.documentElement.appendChild(script)
})
*/
}
this.getJson = (path) => {
return new Promise((resolve, reject) => {
console.log('to get', path)
$.ajax({
url: path,
type: 'GET',
success: (data) => {
resolve(data)
},
error: (err) => {
reject(new Error("failure at GG ajax get for json object: program probably doesn't exist"))
}
})
})
}
}
export default GoGetter