Skip to content
Snippets Groups Projects
Select Git revision
  • feebc41d3372b41b1c48588e1a1e16fb3d2d1db8
  • master default protected
  • leo
  • dex
  • pendulum
  • apfelstruder
  • littlerascal
7 results

gogetter.js

Blame
  • 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