summaryrefslogtreecommitdiff
path: root/deno_typescript/amd_runtime.js
blob: fda850c5cbfd6390cf3cab1ca69e2cedccc99f01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// A very very basic AMD preamble to support the output of TypeScript outFile
// bundles.
let require, define;

(function() {
  const modules = new Map();

  function println(first, ...s) {
    Deno.core.print(first + " " + s.map(JSON.stringify).join(" ") + "\n");
  }

  function createOrLoadModule(name) {
    if (!modules.has(name)) {
      const m = { name, exports: {} };
      modules.set(name, m);
    }
    return modules.get(name);
  }

  require = name => {
    return createOrLoadModule(name).exports;
  };

  define = (name, deps, factory) => {
    const currentModule = createOrLoadModule(name);
    const localExports = currentModule.exports;
    const args = deps.map(dep => {
      if (dep === "require") {
        return require;
      } else if (dep === "exports") {
        return localExports;
      } else {
        const depModule = createOrLoadModule(dep);
        return depModule.exports;
      }
    });
    factory(...args);
  };
})();