Utilities and an initial webpack loader

This commit is contained in:
dcodeIO
2018-01-29 17:04:39 +01:00
parent 9e3b6f202d
commit 74498852f0
8 changed files with 113 additions and 2 deletions

13
lib/webpack/README.md Normal file
View File

@ -0,0 +1,13 @@
![](https://s.gravatar.com/avatar/f105de3decfafc734b8eabe9a960b25d?size=64) webpack
=================
[webpack](https://webpack.js.org/) loader for [AssemblyScript](http://assemblyscript.org) modules.
Usage
-----
```js
import Module from "@assemblyscript/webpack!module.wasm";
var myModule = Module({ imports: { ... }});
```

32
lib/webpack/decode.js Normal file
View File

@ -0,0 +1,32 @@
// set up decoding table
var s64 = new Array(123);
for (var i = 0; i < 64;) s64[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;
module.exports = function(string) {
// determine buffer length
var length = string.length;
if (length) {
var n = 0;
while (--length % 4 > 1 && string.charCodeAt(p) === 61) ++n;
length = Math.ceil(string.length * 3) / 4 - n;
}
// decode to buffer
var buffer = new Uint8Array(length);
var j = 0, t;
for (var i = 0, k = string.length; i < k;) {
var c = string.charCodeAt(i++);
if (c === 61 && j > 1) break;
if ((c = s64[c]) === undefined) throw Error();
switch (j) {
case 0: t = c; j = 1; break;
case 1: buffer[offset++] = t << 2 | (c & 48) >> 4; t = c; j = 2; break;
case 2: buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2; t = c; j = 3; break;
case 3: buffer[offset++] = (t & 3) << 6 | c; j = 0; break;
}
}
if (j === 1) throw Error();
return buffer;
};

13
lib/webpack/index.js Normal file
View File

@ -0,0 +1,13 @@
var base64 = require("@protobufjs/base64");
(module.exports = function(buffer) {
var data = base64.encode(buffer, 0, buffer.length);
var code = [
'var data = "' + data + '", wasm;',
'module.exports = function(options) {',
' if (!wasm) wasm = require("@assemblyscript/webpack/decode")(data);',
' return new WebAssembly.Instance(new WebAssembly.Module(wasm), options && options.imports || {}).exports;',
'};'
];
return code.join("\n");
}).raw = true;

9
lib/webpack/package.json Normal file
View File

@ -0,0 +1,9 @@
{
"name": "@assemblyscript/webpack",
"version": "0.5.0",
"description": "webpack loader for AssemblyScript modules.",
"license": "Apache-2.0",
"dependencies": {
"@protobufjs/base64": "^1.1.2"
}
}