|
5 | 5 | <title>AssemblyScript SDK Example</title>
|
6 | 6 | </head>
|
7 | 7 | <body>
|
| 8 | + <!-- Load as-bind runtime --> |
8 | 9 | <script src="/dist/as-bind.iife.js"></script>
|
9 |
| - <script src="./require.js"></script> |
| 10 | + <!-- Load requirejs to handle the AMD version of the sdk --> |
| 11 | + <script src="/node_modules/requirejs/require.js"></script> |
10 | 12 | <script>
|
11 | 13 | const SOURCE_CODE = `
|
12 | 14 | export function test(): string {
|
13 | 15 | return "ohai";
|
14 | 16 | }`;
|
15 | 17 |
|
16 |
| - // A symbol allows us to store something as a global without risking |
17 |
| - // name clashes or pollution. |
18 |
| - const asbindTransform = Symbol(); |
19 |
| - |
20 |
| - // Shimming the require() call to *synchronously* |
21 |
| - // return our transform module that we expect to be on a global. |
22 |
| - // Any calls unrelated to the transform |
23 |
| - // are implicitly passed through to RequireJS. |
24 |
| - self.require = new Proxy(self.require, { |
25 |
| - apply(target, thisArg, [path, ...args]) { |
26 |
| - if (path !== "/dist/transform.js") { |
27 |
| - return target.call(target, path, ...args); |
28 |
| - } |
29 |
| - return self[asbindTransform]; |
30 |
| - }, |
31 |
| - get(target, propName) { |
32 |
| - if (propName !== "resolve") { |
33 |
| - return target[propName]; |
34 |
| - } |
35 |
| - return (path, ...args) => { |
36 |
| - return path; |
37 |
| - }; |
38 |
| - } |
39 |
| - }); |
40 |
| - |
41 | 18 | require(["/node_modules/assemblyscript/dist/sdk.js"], ({
|
42 | 19 | asc,
|
43 | 20 | assemblyscript
|
44 | 21 | }) => {
|
45 | 22 | // Register the `assemblyscript` property as a module of its own
|
46 | 23 | // as is expected by most transform modules.
|
47 |
| - define("assemblyscript", assemblyscript); |
| 24 | + define("assemblyscript", [], assemblyscript); |
| 25 | + // `visitor-as/as` is usually a facade for `assemblyscript` to avoid |
| 26 | + // multiple instances of `assemblyscript` being loaded. |
| 27 | + // So in this case we can take matters into our own hands and just replace |
| 28 | + // it with out `assemblyscript` instance. |
| 29 | + define("visitor-as/as", [], assemblyscript); |
48 | 30 | // Load our ASBind transform...
|
49 |
| - require(["/dist/transform.amd.js"], transform => { |
50 |
| - // ... and put it on a global |
51 |
| - self[asbindTransform] = transform; |
| 31 | + require(["/dist/transform.amd.js"], asbind => { |
52 | 32 | asc.ready.then(() => {
|
53 | 33 | const stdout = asc.createMemoryStream();
|
54 | 34 | const stderr = asc.createMemoryStream();
|
|
59 | 39 | "-O3",
|
60 | 40 | "--exportRuntime",
|
61 | 41 | "--runtime", "stub",
|
62 |
| - "--binaryFile", "module.wasm", |
63 |
| - "--transform", "/dist/transform.js", |
| 42 | + "--binaryFile", "module.wasm" |
64 | 43 | ],
|
65 | 44 | {
|
66 | 45 | stdout,
|
67 | 46 | stderr,
|
| 47 | + transforms: [asbind], |
68 | 48 | readFile(name, baseDir) {
|
69 | 49 | return name === "module.ts" ? SOURCE_CODE : null;
|
70 | 50 | },
|
|
0 commit comments