d3fc-webgl-as
Version:
A WebAssembly support library for d3fc-webgl
760 lines (621 loc) • 29.2 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = global || self, factory(global.fcWebglAS = {}));
}(this, function (exports) { 'use strict';
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function () {
var self = this,
args = arguments;
return new Promise(function (resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
var hasBigInt64 = typeof BigUint64Array !== "undefined";
var thisPtr = Symbol();
/** Gets a string from an U32 and an U16 view on a memory. */
function getStringImpl(U32, U16, ptr) {
var dataLength = U32[ptr >>> 2];
var dataOffset = ptr + 4 >>> 1;
var dataRemain = dataLength;
var parts = [];
var chunkSize = 1024;
while (dataRemain > chunkSize) {
var last = U16[dataOffset + chunkSize - 1];
var size = last >= 0xD800 && last < 0xDC00 ? chunkSize - 1 : chunkSize;
var part = U16.subarray(dataOffset, dataOffset += size);
parts.push(String.fromCharCode.apply(String, part));
dataRemain -= size;
}
return parts.join("") + String.fromCharCode.apply(String, U16.subarray(dataOffset, dataOffset + dataRemain));
}
/** Prepares the base module prior to instantiation. */
function preInstantiate(imports) {
var baseModule = {};
function getString(memory, ptr) {
if (!memory) return "<yet unknown>";
var buffer = memory.buffer;
return getStringImpl(new Uint32Array(buffer), new Uint16Array(buffer), ptr);
} // add common imports used by stdlib for convenience
var env = imports.env = imports.env || {};
env.abort = env.abort || function abort(mesg, file, line, colm) {
var memory = baseModule.memory || env.memory; // prefer exported, otherwise try imported
throw Error("abort: " + getString(memory, mesg) + " at " + getString(memory, file) + ":" + line + ":" + colm);
};
env.trace = env.trace || function trace(mesg, n) {
var memory = baseModule.memory || env.memory;
console.log("trace: " + getString(memory, mesg) + (n ? " " : "") + Array.prototype.slice.call(arguments, 2, 2 + n).join(", "));
};
imports.Math = imports.Math || Math;
imports.Date = imports.Date || Date;
return baseModule;
}
/** Prepares the final module once instantiation is complete. */
function postInstantiate(baseModule, instance) {
var rawExports = instance.exports;
var memory = rawExports.memory;
var memory_allocate = rawExports["memory.allocate"];
var memory_fill = rawExports["memory.fill"];
var memory_free = rawExports["memory.free"];
var table = rawExports.table;
var setargc = rawExports._setargc || function () {}; // Provide views for all sorts of basic values
var buffer, I8, U8, I16, U16, I32, U32, F32, F64, I64, U64;
/** Updates memory views if memory has grown meanwhile. */
function checkMem() {
// see: https://github.com/WebAssembly/design/issues/1210
if (buffer !== memory.buffer) {
buffer = memory.buffer;
I8 = new Int8Array(buffer);
U8 = new Uint8Array(buffer);
I16 = new Int16Array(buffer);
U16 = new Uint16Array(buffer);
I32 = new Int32Array(buffer);
U32 = new Uint32Array(buffer);
if (hasBigInt64) {
I64 = new BigInt64Array(buffer);
U64 = new BigUint64Array(buffer);
}
F32 = new Float32Array(buffer);
F64 = new Float64Array(buffer);
}
}
checkMem();
/** Allocates a new string in the module's memory and returns its pointer. */
function newString(str) {
var dataLength = str.length;
var ptr = memory_allocate(4 + (dataLength << 1));
var dataOffset = 4 + ptr >>> 1;
checkMem();
U32[ptr >>> 2] = dataLength;
for (var i = 0; i < dataLength; ++i) {
U16[dataOffset + i] = str.charCodeAt(i);
}
return ptr;
}
baseModule.newString = newString;
/** Gets a string from the module's memory by its pointer. */
function getString(ptr) {
checkMem();
return getStringImpl(U32, U16, ptr);
}
baseModule.getString = getString;
function computeBufferSize(byteLength) {
var HEADER_SIZE = 8;
return 1 << 32 - Math.clz32(byteLength + HEADER_SIZE - 1);
}
/** Creates a new typed array in the module's memory and returns its pointer. */
function newArray(view, length, unsafe) {
var ctor = view.constructor;
if (ctor === Function) {
// TypedArray constructor created in memory
ctor = view;
view = null;
} else {
// TypedArray instance copied into memory
if (length === undefined) length = view.length;
}
var elementSize = ctor.BYTES_PER_ELEMENT;
if (!elementSize) throw Error("not a typed array");
var byteLength = elementSize * length;
var ptr = memory_allocate(12); // TypedArray header
var buf = memory_allocate(computeBufferSize(byteLength)); // ArrayBuffer
checkMem();
U32[ptr >>> 2] = buf; // .buffer
U32[ptr + 4 >>> 2] = 0; // .byteOffset
U32[ptr + 8 >>> 2] = byteLength; // .byteLength
U32[buf >>> 2] = byteLength; // .byteLength
U32[buf + 4 >>> 2] = 0; // 0
if (view) {
new ctor(buffer, buf + 8, length).set(view);
if (view.length < length && !unsafe) {
var setLength = elementSize * view.length;
memory_fill(buf + 8 + setLength, 0, byteLength - setLength);
}
} else if (!unsafe) {
memory_fill(buf + 8, 0, byteLength);
}
return ptr;
}
baseModule.newArray = newArray;
/** Gets a view on a typed array in the module's memory by its pointer. */
function getArray(ctor, ptr) {
var elementSize = ctor.BYTES_PER_ELEMENT;
if (!elementSize) throw Error("not a typed array");
checkMem();
var buf = U32[ptr >>> 2];
var byteOffset = U32[ptr + 4 >>> 2];
var byteLength = U32[ptr + 8 >>> 2];
return new ctor(buffer, buf + 8 + byteOffset, (byteLength - byteOffset) / elementSize);
}
baseModule.getArray = getArray;
/** Frees a typed array in the module's memory. Must not be accessed anymore afterwards. */
function freeArray(ptr) {
checkMem();
var buf = U32[ptr >>> 2];
memory_free(buf);
memory_free(ptr);
}
baseModule.freeArray = freeArray;
/**
* Creates a new function in the module's table and returns its pointer. Note that only actual
* WebAssembly functions, i.e. as exported by the module, are supported.
*/
function newFunction(fn) {
if (typeof fn.original === "function") fn = fn.original;
var index = table.length;
table.grow(1);
table.set(index, fn);
return index;
}
baseModule.newFunction = newFunction;
/** Gets a function by its pointer. */
function getFunction(ptr) {
return wrapFunction(table.get(ptr), setargc);
}
baseModule.getFunction = getFunction; // Pull basic exports to baseModule so code in preInstantiate can use them
baseModule.memory = baseModule.memory || memory;
baseModule.table = baseModule.table || table; // Demangle exports and provide the usual utility on the prototype
return demangle(rawExports, Object.defineProperties(baseModule, {
I8: {
get: function get() {
checkMem();
return I8;
}
},
U8: {
get: function get() {
checkMem();
return U8;
}
},
I16: {
get: function get() {
checkMem();
return I16;
}
},
U16: {
get: function get() {
checkMem();
return U16;
}
},
I32: {
get: function get() {
checkMem();
return I32;
}
},
U32: {
get: function get() {
checkMem();
return U32;
}
},
I64: {
get: function get() {
checkMem();
return I64;
}
},
U64: {
get: function get() {
checkMem();
return U64;
}
},
F32: {
get: function get() {
checkMem();
return F32;
}
},
F64: {
get: function get() {
checkMem();
return F64;
}
}
}));
}
/** Wraps a WebAssembly function while also taking care of variable arguments. */
function wrapFunction(fn, setargc) {
var wrap = function wrap() {
setargc(arguments.length);
return fn.apply(void 0, arguments);
}; // adding a function to the table with `newFunction` is limited to actual WebAssembly functions,
// hence we can't use the wrapper and instead need to provide a reference to the original
wrap.original = fn;
return wrap;
}
/** Instantiates an AssemblyScript module from a response using the specified imports. */
function instantiateStreaming(_x, _x2) {
return _instantiateStreaming.apply(this, arguments);
}
function _instantiateStreaming() {
_instantiateStreaming = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee(response, imports) {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.t0 = postInstantiate;
_context.t1 = preInstantiate(imports || (imports = {}));
_context.next = 4;
return WebAssembly.instantiateStreaming(response, imports);
case 4:
_context.t2 = _context.sent.instance;
return _context.abrupt("return", (0, _context.t0)(_context.t1, _context.t2));
case 6:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _instantiateStreaming.apply(this, arguments);
}
var instantiateStreaming_1 = instantiateStreaming;
/** Demangles an AssemblyScript module's exports to a friendly object structure. */
function demangle(exports, baseModule) {
var module = baseModule ? Object.create(baseModule) : {};
var setargc = exports._setargc || function () {};
function hasOwnProperty(elem, prop) {
return Object.prototype.hasOwnProperty.call(elem, prop);
}
var _loop = function _loop(internalName) {
if (!hasOwnProperty(exports, internalName)) return "continue";
var elem = exports[internalName];
var parts = internalName.split(".");
var curr = module;
while (parts.length > 1) {
var part = parts.shift();
if (!hasOwnProperty(curr, part)) curr[part] = {};
curr = curr[part];
}
var name = parts[0];
var hash = name.indexOf("#");
if (hash >= 0) {
var className = name.substring(0, hash);
var classElem = curr[className];
if (typeof classElem === "undefined" || !classElem.prototype) {
var ctor = function ctor() {
var _ctor$prototype;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return ctor.wrap((_ctor$prototype = ctor.prototype).constructor.apply(_ctor$prototype, [0].concat(args)));
};
ctor.prototype = {};
ctor.wrap = function (thisValue) {
return Object.create(ctor.prototype, _defineProperty({}, thisPtr, {
value: thisValue,
writable: false
}));
};
if (classElem) Object.getOwnPropertyNames(classElem).forEach(function (name) {
return Object.defineProperty(ctor, name, Object.getOwnPropertyDescriptor(classElem, name));
});
curr[className] = ctor;
}
name = name.substring(hash + 1);
curr = curr[className].prototype;
if (/^(get|set):/.test(name)) {
if (!hasOwnProperty(curr, name = name.substring(4))) {
var getter = exports[internalName.replace("set:", "get:")];
var setter = exports[internalName.replace("get:", "set:")];
Object.defineProperty(curr, name, {
get: function get() {
return getter(this[thisPtr]);
},
set: function set(value) {
setter(this[thisPtr], value);
},
enumerable: true
});
}
} else {
if (name === 'constructor') {
curr[name] = wrapFunction(elem, setargc);
} else {
// for methods
Object.defineProperty(curr, name, {
value: function value() {
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
setargc(args.length);
return elem.apply(void 0, [this[thisPtr]].concat(args));
}
});
}
}
} else {
if (/^(get|set):/.test(name)) {
if (!hasOwnProperty(curr, name = name.substring(4))) {
Object.defineProperty(curr, name, {
get: exports[internalName.replace("set:", "get:")],
set: exports[internalName.replace("get:", "set:")],
enumerable: true
});
}
} else if (typeof elem === "function") {
curr[name] = wrapFunction(elem, setargc);
} else {
curr[name] = elem;
}
}
};
for (var internalName in exports) {
var _ret = _loop(internalName);
if (_ret === "continue") continue;
}
return module;
}
var encoded = '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';
var optimized = new Promise(function (resolve) {
var decoded = atob(encoded);
var len = decoded.length;
var bytes = new Uint8Array(len);
for (var i = 0; i < len; i++) {
bytes[i] = decoded.charCodeAt(i);
}
resolve(new Response(bytes, {
status: 200,
headers: {
"Content-Type": "application/wasm"
}
}));
});
var api = {};
var promise = instantiateStreaming_1(optimized).then(function (inst) {
return Object.assign(api, {
inst: inst
});
});
var api$1 = (function () {
return promise;
});
var circles = (function () {
var pixelX = 1;
var pixelY = 1;
var lineWidth = 0;
var callback = function callback() {};
var circles = function circles(points, totalSegments) {
var inst = api.inst;
var in_buffer;
var out_buffer;
var edge_buffer;
try {
out_buffer = inst.newArray(Float32Array, totalSegments * 6, true);
in_buffer = points.__forWASM ? points.__forWASM : inst.newArray(points);
inst.circles(in_buffer, totalSegments, pixelX, pixelY, out_buffer);
var edgeArray = null;
if (lineWidth > 0) {
edge_buffer = inst.newArray(Float32Array, totalSegments * 6, true);
inst.edges(out_buffer, lineWidth, pixelX, pixelY, edge_buffer);
edgeArray = inst.getArray(Float32Array, edge_buffer);
}
callback(inst.getArray(Float32Array, out_buffer), edgeArray);
} finally {
if (in_buffer) inst.freeArray(in_buffer);
if (out_buffer) inst.freeArray(out_buffer);
if (edge_buffer) inst.freeArray(edge_buffer);
}
};
circles.pixelX = function () {
if (!arguments.length) {
return pixelX;
}
pixelX = arguments.length <= 0 ? undefined : arguments[0];
return circles;
};
circles.pixelY = function () {
if (!arguments.length) {
return pixelY;
}
pixelY = arguments.length <= 0 ? undefined : arguments[0];
return circles;
};
circles.lineWidth = function () {
if (!arguments.length) {
return lineWidth;
}
lineWidth = arguments.length <= 0 ? undefined : arguments[0];
return circles;
};
circles.callback = function () {
if (!arguments.length) {
return callback;
}
callback = arguments.length <= 0 ? undefined : arguments[0];
return circles;
};
return circles;
});
var shapes = (function () {
var pixelX = 1;
var pixelY = 1;
var lineWidth = 0;
var shape = [];
var callback = function callback() {};
var shapes = function shapes(points) {
var inst = api.inst;
var in_buffer;
var shape_buffer;
var out_buffer;
var edge_buffer;
try {
var totalSegments = points.length / 3 * (shape.length / 2 - 1);
out_buffer = inst.newArray(Float32Array, totalSegments * 6, true);
in_buffer = points.__forWASM ? points.__forWASM : inst.newArray(points);
shape_buffer = inst.newArray(shape);
inst.shapes(in_buffer, shape_buffer, pixelX, pixelY, out_buffer);
var edgeArray = null;
if (lineWidth > 0) {
edge_buffer = inst.newArray(Float32Array, totalSegments * 6, true);
inst.edges(out_buffer, lineWidth, pixelX, pixelY, edge_buffer);
edgeArray = inst.getArray(Float32Array, edge_buffer);
}
callback(inst.getArray(Float32Array, out_buffer), edgeArray);
} finally {
if (in_buffer) inst.freeArray(in_buffer);
if (shape_buffer) inst.freeArray(shape_buffer);
if (out_buffer) inst.freeArray(out_buffer);
if (edge_buffer) inst.freeArray(edge_buffer);
}
};
shapes.pixelX = function () {
if (!arguments.length) {
return pixelX;
}
pixelX = arguments.length <= 0 ? undefined : arguments[0];
return shapes;
};
shapes.pixelY = function () {
if (!arguments.length) {
return pixelY;
}
pixelY = arguments.length <= 0 ? undefined : arguments[0];
return shapes;
};
shapes.lineWidth = function () {
if (!arguments.length) {
return lineWidth;
}
lineWidth = arguments.length <= 0 ? undefined : arguments[0];
return shapes;
};
shapes.shape = function () {
if (!arguments.length) {
return shape;
}
shape = arguments.length <= 0 ? undefined : arguments[0];
return shapes;
};
shapes.callback = function () {
if (!arguments.length) {
return callback;
}
callback = arguments.length <= 0 ? undefined : arguments[0];
return shapes;
};
return shapes;
});
var array_allocator = (function (size) {
var inst = api.inst;
var memory = inst.newArray(Float32Array, size, true);
var array = inst.getArray(Float32Array, memory);
array.__forWASM = memory;
return array;
});
var pointData = (function () {
var circles = false;
var pointFn = function pointFn(d) {
return {
x: d.x,
y: d.y,
size: d.size
};
};
var pointData = function pointData(data) {
var dataPerPoint = circles ? 4 : 3;
var result = array_allocator(data.length * dataPerPoint);
var allSegments = 0;
var index = 0;
data.forEach(function (d) {
var dataPoint = pointFn(d);
result[index++] = dataPoint.x;
result[index++] = dataPoint.y;
var size = Math.floor(Math.sqrt(dataPoint.size) * 0.65);
result[index++] = size;
if (circles) {
var segments = size * 2;
result[index++] = segments;
allSegments += segments;
}
});
return {
data: result,
segmentCount: allSegments
};
};
pointData.circles = function () {
if (!arguments.length) {
return circles;
}
circles = arguments.length <= 0 ? undefined : arguments[0];
return pointData;
};
pointData.pointFn = function () {
if (!arguments.length) {
return pointFn;
}
pointFn = arguments.length <= 0 ? undefined : arguments[0];
return pointData;
};
return pointData;
});
exports.circles = circles;
exports.loadApi = api$1;
exports.pointData = pointData;
exports.shapes = shapes;
Object.defineProperty(exports, '__esModule', { value: true });
}));
//# sourceMappingURL=d3fc-webgl-as.js.map