## 2018-01-19

We now use SystemJS to normalize pathes for Ternjs:

<script>
import tern, * as t from 'src/external/aexpr/tern/tern.js';
import 'src/external/aexpr/tern/def.js';
import 'src/external/aexpr/tern/comment.js';
import 'src/external/aexpr/tern/infer.js';
import 'src/external/aexpr/tern/modules.js';
import 'src/external/aexpr/tern/es_modules.js';

let server;
new Promise(async (resolve, reject) => {
  t;

  let browserJSON = await fetch('src/external/aexpr/tern/browser.json').then(res => res.json());
  let chaiJSON = await fetch('src/external/aexpr/tern/chai.json').then(res => res.json());
  let ecmascriptJSON = await fetch('src/external/aexpr/tern/ecmascript.json').then(res => res.json());

  server = new tern.Server({
    getFile(fileName, callback) {
      lively.notify(`tern.Server get ${fileName}`);
      fetch(fileName)
        .then(res => res.text())
        .then(text => callback(null, text))
        .catch(callback);
    },
    async: true,
    // ecmaVersion: 6,
    defs: [
      browserJSON,
      chaiJSON,
      ecmascriptJSON
    ],
    plugins: {
      es_modules: true
    }
  });

  server.addFile('https://lively-kernel.org/lively4/foo/foo.js', `
import { a } from './x';
var d = a();
d;`);
  server.addFile('src/client/reactive/tern-spike/a.js');
  server.addFile('https://lively-kernel.org/lively4/foo/x', `
export function a() {
  return document.createElement('span');
}`);

  server.request({
    query: {
      type: "definition",
      file: 'src/client/reactive/tern-spike/a.js',
      end: {
        line: 1,
        ch: 11
      },
      lineCharPositions: true
    },
    //files: [],
    //timeout: 10 * 1000
  }, (error, response) => {
    if(error) {
      lively.error(error);
      reject(error);
    } else {
      lively.notify(response, undefined, undefined, undefined, 'green');
      resolve(response);
    }
  });
});
</script>
