Updated the files.
This commit is contained in:
parent
1553e6b971
commit
753967d4f5
23418 changed files with 3784666 additions and 0 deletions
8
my-app/node_modules/@assemblyscript/loader/README.md
generated
vendored
Executable file
8
my-app/node_modules/@assemblyscript/loader/README.md
generated
vendored
Executable file
|
@ -0,0 +1,8 @@
|
|||
# AssemblyScript Loader
|
||||
|
||||
<a href="https://www.npmjs.com/package/@assemblyscript/loader"><img src="https://img.shields.io/npm/v/@assemblyscript/loader.svg?color=0074C1" alt="npm package" /></a>
|
||||
<a href="https://www.npmjs.com/package/@assemblyscript/loader"><img src="https://img.shields.io/npm/v/@assemblyscript/loader/nightly.svg?color=0074C1" alt="npm package (nightly)" /></a>
|
||||
|
||||
A convenient loader for [AssemblyScript](https://assemblyscript.org) modules. Demangles module exports to a friendly object structure compatible with TypeScript definitions and provides useful utility to read/write data from/to memory.
|
||||
|
||||
[Documentation](https://assemblyscript.org/loader.html)
|
124
my-app/node_modules/@assemblyscript/loader/index.d.ts
generated
vendored
Executable file
124
my-app/node_modules/@assemblyscript/loader/index.d.ts
generated
vendored
Executable file
|
@ -0,0 +1,124 @@
|
|||
/// <reference lib="esnext.bigint" />
|
||||
|
||||
export interface ResultObject {
|
||||
module: WebAssembly.Module;
|
||||
instance: WebAssembly.Instance;
|
||||
}
|
||||
|
||||
|
||||
/** WebAssembly imports with an optional env object and two levels of nesting. */
|
||||
export type Imports = {
|
||||
[key: string]: Record<string,unknown>;
|
||||
env?: {
|
||||
memory?: WebAssembly.Memory;
|
||||
table?: WebAssembly.Table;
|
||||
seed?(): number;
|
||||
abort?(msg: number, file: number, line: number, column: number): void;
|
||||
trace?(msg: number, numArgs?: number, ...args: number[]): void;
|
||||
};
|
||||
};
|
||||
|
||||
/** Utility mixed in by the loader. */
|
||||
export interface ASUtil {
|
||||
memory?: WebAssembly.Memory;
|
||||
table?: WebAssembly.Table;
|
||||
|
||||
/** Explicit start function, if requested. */
|
||||
_start(): void;
|
||||
/** Allocates a new string in the module's memory and returns a reference (pointer) to it. */
|
||||
__allocString(str: string): number;
|
||||
/** Allocates a new array in the module's memory and returns a reference (pointer) to it. */
|
||||
__allocArray(id: number, values: ArrayLike<number>): number;
|
||||
|
||||
/** Copies a string's value from the module's memory. */
|
||||
__getString(ptr: number): string;
|
||||
/** Copies an ArrayBuffer's value from the module's memory. */
|
||||
__getArrayBuffer(ptr: number): ArrayBuffer;
|
||||
|
||||
/** Copies an array's values from the module's memory. Infers the array type from RTTI. */
|
||||
__getArray(ptr: number): number[];
|
||||
/** Copies an Int8Array's values from the module's memory. */
|
||||
__getInt8Array(ptr: number): Int8Array;
|
||||
/** Copies an Uint8Array's values from the module's memory. */
|
||||
__getUint8Array(ptr: number): Uint8Array;
|
||||
/** Copies an Uint8ClampedArray's values from the module's memory. */
|
||||
__getUint8ClampedArray(ptr: number): Uint8ClampedArray;
|
||||
/** Copies an Int16Array's values from the module's memory. */
|
||||
__getInt16Array(ptr: number): Int16Array;
|
||||
/** Copies an Uint16Array's values from the module's memory. */
|
||||
__getUint16Array(ptr: number): Uint16Array;
|
||||
/** Copies an Int32Array's values from the module's memory. */
|
||||
__getInt32Array(ptr: number): Int32Array;
|
||||
/** Copies an Uint32Array's values from the module's memory. */
|
||||
__getUint32Array(ptr: number): Uint32Array;
|
||||
/** Copies an Int32Array's values from the module's memory. */
|
||||
__getInt64Array?(ptr: number): BigInt64Array;
|
||||
/** Copies an Uint32Array's values from the module's memory. */
|
||||
__getUint64Array?(ptr: number): BigUint64Array;
|
||||
/** Copies a Float32Array's values from the module's memory. */
|
||||
__getFloat32Array(ptr: number): Float32Array;
|
||||
/** Copies a Float64Array's values from the module's memory. */
|
||||
__getFloat64Array(ptr: number): Float64Array;
|
||||
|
||||
/** Gets a live view on an array's values in the module's memory. Infers the array type from RTTI. */
|
||||
__getArrayView(ptr: number): ArrayBufferView;
|
||||
/** Gets a live view on an Int8Array's values in the module's memory. */
|
||||
__getInt8ArrayView(ptr: number): Int8Array;
|
||||
/** Gets a live view on an Uint8Array's values in the module's memory. */
|
||||
__getUint8ArrayView(ptr: number): Uint8Array;
|
||||
/** Gets a live view on an Uint8ClampedArray's values in the module's memory. */
|
||||
__getUint8ClampedArrayView(ptr: number): Uint8ClampedArray;
|
||||
/** Gets a live view on an Int16Array's values in the module's memory. */
|
||||
__getInt16ArrayView(ptr: number): Int16Array;
|
||||
/** Gets a live view on an Uint16Array's values in the module's memory. */
|
||||
__getUint16ArrayView(ptr: number): Uint16Array;
|
||||
/** Gets a live view on an Int32Array's values in the module's memory. */
|
||||
__getInt32ArrayView(ptr: number): Int32Array;
|
||||
/** Gets a live view on an Uint32Array's values in the module's memory. */
|
||||
__getUint32ArrayView(ptr: number): Uint32Array;
|
||||
/** Gets a live view on an Int32Array's values in the module's memory. */
|
||||
__getInt64ArrayView?(ptr: number): BigInt64Array;
|
||||
/** Gets a live view on an Uint32Array's values in the module's memory. */
|
||||
__getUint64ArrayView?(ptr: number): BigUint64Array;
|
||||
/** Gets a live view on a Float32Array's values in the module's memory. */
|
||||
__getFloat32ArrayView(ptr: number): Float32Array;
|
||||
/** Gets a live view on a Float64Array's values in the module's memory. */
|
||||
__getFloat64ArrayView(ptr: number): Float64Array;
|
||||
|
||||
/** Retains a reference to a managed object externally, making sure that it doesn't become collected prematurely. Returns the pointer. */
|
||||
__retain(ptr: number): number;
|
||||
/** Releases a previously retained reference to a managed object, allowing the runtime to collect it once its reference count reaches zero. */
|
||||
__release(ptr: number): void;
|
||||
/** Forcefully resets the heap to its initial offset, effectively clearing dynamic memory. Stub runtime only. */
|
||||
__reset?(): void;
|
||||
/** Allocates an instance of the class represented by the specified id. */
|
||||
__alloc(size: number, id: number): number;
|
||||
/** Tests whether a managed object is an instance of the class represented by the specified base id. */
|
||||
__instanceof(ptr: number, baseId: number): boolean;
|
||||
/** Forces a cycle collection. Only relevant if objects potentially forming reference cycles are used. */
|
||||
__collect(): void;
|
||||
}
|
||||
|
||||
/** Asynchronously instantiates an AssemblyScript module from anything that can be instantiated. */
|
||||
export declare function instantiate<T extends Record<string,unknown>>(
|
||||
source: WebAssembly.Module | BufferSource | Response | PromiseLike<WebAssembly.Module | BufferSource | Response>,
|
||||
imports?: Imports
|
||||
): Promise<ResultObject & { exports: ASUtil & T }>;
|
||||
|
||||
/** Synchronously instantiates an AssemblyScript module from a WebAssembly.Module or binary buffer. */
|
||||
export declare function instantiateSync<T extends Record<string,unknown>>(
|
||||
source: WebAssembly.Module | BufferSource,
|
||||
imports?: Imports
|
||||
): ResultObject & { exports: ASUtil & T };
|
||||
|
||||
/** Asynchronously instantiates an AssemblyScript module from a response, i.e. as obtained by `fetch`. */
|
||||
export declare function instantiateStreaming<T extends Record<string,unknown>>(
|
||||
source: Response | PromiseLike<Response>,
|
||||
imports?: Imports
|
||||
): Promise<ResultObject & { exports: ASUtil & T }>;
|
||||
|
||||
/** Demangles an AssemblyScript module's exports to a friendly object structure. */
|
||||
export declare function demangle<T extends Record<string,unknown>>(
|
||||
exports: Record<string,unknown>,
|
||||
extendedExports?: Record<string,unknown>
|
||||
): T;
|
427
my-app/node_modules/@assemblyscript/loader/index.js
generated
vendored
Executable file
427
my-app/node_modules/@assemblyscript/loader/index.js
generated
vendored
Executable file
|
@ -0,0 +1,427 @@
|
|||
"use strict";
|
||||
|
||||
// Runtime header offsets
|
||||
const ID_OFFSET = -8;
|
||||
const SIZE_OFFSET = -4;
|
||||
|
||||
// Runtime ids
|
||||
const ARRAYBUFFER_ID = 0;
|
||||
const STRING_ID = 1;
|
||||
// const ARRAYBUFFERVIEW_ID = 2;
|
||||
|
||||
// Runtime type information
|
||||
const ARRAYBUFFERVIEW = 1 << 0;
|
||||
const ARRAY = 1 << 1;
|
||||
const STATICARRAY = 1 << 2;
|
||||
// const SET = 1 << 3;
|
||||
// const MAP = 1 << 4;
|
||||
const VAL_ALIGN_OFFSET = 6;
|
||||
// const VAL_ALIGN = 1 << VAL_ALIGN_OFFSET;
|
||||
const VAL_SIGNED = 1 << 11;
|
||||
const VAL_FLOAT = 1 << 12;
|
||||
// const VAL_NULLABLE = 1 << 13;
|
||||
const VAL_MANAGED = 1 << 14;
|
||||
// const KEY_ALIGN_OFFSET = 15;
|
||||
// const KEY_ALIGN = 1 << KEY_ALIGN_OFFSET;
|
||||
// const KEY_SIGNED = 1 << 20;
|
||||
// const KEY_FLOAT = 1 << 21;
|
||||
// const KEY_NULLABLE = 1 << 22;
|
||||
// const KEY_MANAGED = 1 << 23;
|
||||
|
||||
// Array(BufferView) layout
|
||||
const ARRAYBUFFERVIEW_BUFFER_OFFSET = 0;
|
||||
const ARRAYBUFFERVIEW_DATASTART_OFFSET = 4;
|
||||
const ARRAYBUFFERVIEW_DATALENGTH_OFFSET = 8;
|
||||
const ARRAYBUFFERVIEW_SIZE = 12;
|
||||
const ARRAY_LENGTH_OFFSET = 12;
|
||||
const ARRAY_SIZE = 16;
|
||||
|
||||
const BIGINT = typeof BigUint64Array !== "undefined";
|
||||
const THIS = Symbol();
|
||||
const CHUNKSIZE = 1024;
|
||||
|
||||
/** Gets a string from an U32 and an U16 view on a memory. */
|
||||
function getStringImpl(buffer, ptr) {
|
||||
const U32 = new Uint32Array(buffer);
|
||||
const U16 = new Uint16Array(buffer);
|
||||
let length = U32[(ptr + SIZE_OFFSET) >>> 2] >>> 1;
|
||||
let offset = ptr >>> 1;
|
||||
if (length <= CHUNKSIZE) return String.fromCharCode.apply(String, U16.subarray(offset, offset + length));
|
||||
const parts = [];
|
||||
do {
|
||||
const last = U16[offset + CHUNKSIZE - 1];
|
||||
const size = last >= 0xD800 && last < 0xDC00 ? CHUNKSIZE - 1 : CHUNKSIZE;
|
||||
parts.push(String.fromCharCode.apply(String, U16.subarray(offset, offset += size)));
|
||||
length -= size;
|
||||
} while (length > CHUNKSIZE);
|
||||
return parts.join("") + String.fromCharCode.apply(String, U16.subarray(offset, offset + length));
|
||||
}
|
||||
|
||||
/** Prepares the base module prior to instantiation. */
|
||||
function preInstantiate(imports) {
|
||||
const extendedExports = {};
|
||||
|
||||
function getString(memory, ptr) {
|
||||
if (!memory) return "<yet unknown>";
|
||||
return getStringImpl(memory.buffer, ptr);
|
||||
}
|
||||
|
||||
// add common imports used by stdlib for convenience
|
||||
const env = (imports.env = imports.env || {});
|
||||
env.abort = env.abort || function abort(msg, file, line, colm) {
|
||||
const memory = extendedExports.memory || env.memory; // prefer exported, otherwise try imported
|
||||
throw Error("abort: " + getString(memory, msg) + " at " + getString(memory, file) + ":" + line + ":" + colm);
|
||||
};
|
||||
env.trace = env.trace || function trace(msg, n) {
|
||||
const memory = extendedExports.memory || env.memory;
|
||||
console.log("trace: " + getString(memory, msg) + (n ? " " : "") + Array.prototype.slice.call(arguments, 2, 2 + n).join(", "));
|
||||
};
|
||||
env.seed = env.seed || function seed() {
|
||||
return Date.now();
|
||||
};
|
||||
imports.Math = imports.Math || Math;
|
||||
imports.Date = imports.Date || Date;
|
||||
|
||||
return extendedExports;
|
||||
}
|
||||
|
||||
/** Prepares the final module once instantiation is complete. */
|
||||
function postInstantiate(extendedExports, instance) {
|
||||
const exports = instance.exports;
|
||||
const memory = exports.memory;
|
||||
const table = exports.table;
|
||||
const alloc = exports["__alloc"];
|
||||
const retain = exports["__retain"];
|
||||
const rttiBase = exports["__rtti_base"] || ~0; // oob if not present
|
||||
|
||||
/** Gets the runtime type info for the given id. */
|
||||
function getInfo(id) {
|
||||
const U32 = new Uint32Array(memory.buffer);
|
||||
const count = U32[rttiBase >>> 2];
|
||||
if ((id >>>= 0) >= count) throw Error("invalid id: " + id);
|
||||
return U32[(rttiBase + 4 >>> 2) + id * 2];
|
||||
}
|
||||
|
||||
/** Gets the runtime base id for the given id. */
|
||||
function getBase(id) {
|
||||
const U32 = new Uint32Array(memory.buffer);
|
||||
const count = U32[rttiBase >>> 2];
|
||||
if ((id >>>= 0) >= count) throw Error("invalid id: " + id);
|
||||
return U32[(rttiBase + 4 >>> 2) + id * 2 + 1];
|
||||
}
|
||||
|
||||
/** Gets the runtime alignment of a collection's values. */
|
||||
function getValueAlign(info) {
|
||||
return 31 - Math.clz32((info >>> VAL_ALIGN_OFFSET) & 31); // -1 if none
|
||||
}
|
||||
|
||||
/** Gets the runtime alignment of a collection's keys. */
|
||||
// function getKeyAlign(info) {
|
||||
// return 31 - Math.clz32((info >>> KEY_ALIGN_OFFSET) & 31); // -1 if none
|
||||
// }
|
||||
|
||||
/** Allocates a new string in the module's memory and returns its retained pointer. */
|
||||
function __allocString(str) {
|
||||
const length = str.length;
|
||||
const ptr = alloc(length << 1, STRING_ID);
|
||||
const U16 = new Uint16Array(memory.buffer);
|
||||
for (var i = 0, p = ptr >>> 1; i < length; ++i) U16[p + i] = str.charCodeAt(i);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
extendedExports.__allocString = __allocString;
|
||||
|
||||
/** Reads a string from the module's memory by its pointer. */
|
||||
function __getString(ptr) {
|
||||
const buffer = memory.buffer;
|
||||
const id = new Uint32Array(buffer)[ptr + ID_OFFSET >>> 2];
|
||||
if (id !== STRING_ID) throw Error("not a string: " + ptr);
|
||||
return getStringImpl(buffer, ptr);
|
||||
}
|
||||
|
||||
extendedExports.__getString = __getString;
|
||||
|
||||
/** Gets the view matching the specified alignment, signedness and floatness. */
|
||||
function getView(alignLog2, signed, float) {
|
||||
const buffer = memory.buffer;
|
||||
if (float) {
|
||||
switch (alignLog2) {
|
||||
case 2: return new Float32Array(buffer);
|
||||
case 3: return new Float64Array(buffer);
|
||||
}
|
||||
} else {
|
||||
switch (alignLog2) {
|
||||
case 0: return new (signed ? Int8Array : Uint8Array)(buffer);
|
||||
case 1: return new (signed ? Int16Array : Uint16Array)(buffer);
|
||||
case 2: return new (signed ? Int32Array : Uint32Array)(buffer);
|
||||
case 3: return new (signed ? BigInt64Array : BigUint64Array)(buffer);
|
||||
}
|
||||
}
|
||||
throw Error("unsupported align: " + alignLog2);
|
||||
}
|
||||
|
||||
/** Allocates a new array in the module's memory and returns its retained pointer. */
|
||||
function __allocArray(id, values) {
|
||||
const info = getInfo(id);
|
||||
if (!(info & (ARRAYBUFFERVIEW | ARRAY | STATICARRAY))) throw Error("not an array: " + id + ", flags= " + info);
|
||||
const align = getValueAlign(info);
|
||||
const length = values.length;
|
||||
const buf = alloc(length << align, info & STATICARRAY ? id : ARRAYBUFFER_ID);
|
||||
let result;
|
||||
if (info & STATICARRAY) {
|
||||
result = buf;
|
||||
} else {
|
||||
const arr = alloc(info & ARRAY ? ARRAY_SIZE : ARRAYBUFFERVIEW_SIZE, id);
|
||||
const U32 = new Uint32Array(memory.buffer);
|
||||
U32[arr + ARRAYBUFFERVIEW_BUFFER_OFFSET >>> 2] = retain(buf);
|
||||
U32[arr + ARRAYBUFFERVIEW_DATASTART_OFFSET >>> 2] = buf;
|
||||
U32[arr + ARRAYBUFFERVIEW_DATALENGTH_OFFSET >>> 2] = length << align;
|
||||
if (info & ARRAY) U32[arr + ARRAY_LENGTH_OFFSET >>> 2] = length;
|
||||
result = arr;
|
||||
}
|
||||
const view = getView(align, info & VAL_SIGNED, info & VAL_FLOAT);
|
||||
if (info & VAL_MANAGED) {
|
||||
for (let i = 0; i < length; ++i) view[(buf >>> align) + i] = retain(values[i]);
|
||||
} else {
|
||||
view.set(values, buf >>> align);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
extendedExports.__allocArray = __allocArray;
|
||||
|
||||
/** Gets a live view on an array's values in the module's memory. Infers the array type from RTTI. */
|
||||
function __getArrayView(arr) {
|
||||
const U32 = new Uint32Array(memory.buffer);
|
||||
const id = U32[arr + ID_OFFSET >>> 2];
|
||||
const info = getInfo(id);
|
||||
if (!(info & (ARRAYBUFFERVIEW | ARRAY | STATICARRAY))) throw Error("not an array: " + id + ", flags=" + info);
|
||||
const align = getValueAlign(info);
|
||||
let buf = info & STATICARRAY
|
||||
? arr
|
||||
: U32[arr + ARRAYBUFFERVIEW_DATASTART_OFFSET >>> 2];
|
||||
const length = info & ARRAY
|
||||
? U32[arr + ARRAY_LENGTH_OFFSET >>> 2]
|
||||
: U32[buf + SIZE_OFFSET >>> 2] >>> align;
|
||||
return getView(align, info & VAL_SIGNED, info & VAL_FLOAT).subarray(buf >>>= align, buf + length);
|
||||
}
|
||||
|
||||
extendedExports.__getArrayView = __getArrayView;
|
||||
|
||||
/** Copies an array's values from the module's memory. Infers the array type from RTTI. */
|
||||
function __getArray(arr) {
|
||||
const input = __getArrayView(arr);
|
||||
const len = input.length;
|
||||
const out = new Array(len);
|
||||
for (let i = 0; i < len; i++) out[i] = input[i];
|
||||
return out;
|
||||
}
|
||||
|
||||
extendedExports.__getArray = __getArray;
|
||||
|
||||
/** Copies an ArrayBuffer's value from the module's memory. */
|
||||
function __getArrayBuffer(ptr) {
|
||||
const buffer = memory.buffer;
|
||||
const length = new Uint32Array(buffer)[ptr + SIZE_OFFSET >>> 2];
|
||||
return buffer.slice(ptr, ptr + length);
|
||||
}
|
||||
|
||||
extendedExports.__getArrayBuffer = __getArrayBuffer;
|
||||
|
||||
/** Copies a typed array's values from the module's memory. */
|
||||
function getTypedArray(Type, alignLog2, ptr) {
|
||||
return new Type(getTypedArrayView(Type, alignLog2, ptr));
|
||||
}
|
||||
|
||||
/** Gets a live view on a typed array's values in the module's memory. */
|
||||
function getTypedArrayView(Type, alignLog2, ptr) {
|
||||
const buffer = memory.buffer;
|
||||
const U32 = new Uint32Array(buffer);
|
||||
const bufPtr = U32[ptr + ARRAYBUFFERVIEW_DATASTART_OFFSET >>> 2];
|
||||
return new Type(buffer, bufPtr, U32[bufPtr + SIZE_OFFSET >>> 2] >>> alignLog2);
|
||||
}
|
||||
|
||||
/** Attach a set of get TypedArray and View functions to the exports. */
|
||||
function attachTypedArrayFunctions(ctor, name, align) {
|
||||
extendedExports["__get" + name] = getTypedArray.bind(null, ctor, align);
|
||||
extendedExports["__get" + name + "View"] = getTypedArrayView.bind(null, ctor, align);
|
||||
}
|
||||
|
||||
[
|
||||
Int8Array,
|
||||
Uint8Array,
|
||||
Uint8ClampedArray,
|
||||
Int16Array,
|
||||
Uint16Array,
|
||||
Int32Array,
|
||||
Uint32Array,
|
||||
Float32Array,
|
||||
Float64Array
|
||||
].forEach(ctor => {
|
||||
attachTypedArrayFunctions(ctor, ctor.name, 31 - Math.clz32(ctor.BYTES_PER_ELEMENT));
|
||||
});
|
||||
|
||||
if (BIGINT) {
|
||||
[BigUint64Array, BigInt64Array].forEach(ctor => {
|
||||
attachTypedArrayFunctions(ctor, ctor.name.slice(3), 3);
|
||||
});
|
||||
}
|
||||
|
||||
/** Tests whether an object is an instance of the class represented by the specified base id. */
|
||||
function __instanceof(ptr, baseId) {
|
||||
const U32 = new Uint32Array(memory.buffer);
|
||||
let id = U32[(ptr + ID_OFFSET) >>> 2];
|
||||
if (id <= U32[rttiBase >>> 2]) {
|
||||
do {
|
||||
if (id == baseId) return true;
|
||||
id = getBase(id);
|
||||
} while (id);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
extendedExports.__instanceof = __instanceof;
|
||||
|
||||
// Pull basic exports to extendedExports so code in preInstantiate can use them
|
||||
extendedExports.memory = extendedExports.memory || memory;
|
||||
extendedExports.table = extendedExports.table || table;
|
||||
|
||||
// Demangle exports and provide the usual utility on the prototype
|
||||
return demangle(exports, extendedExports);
|
||||
}
|
||||
|
||||
function isResponse(src) {
|
||||
return typeof Response !== "undefined" && src instanceof Response;
|
||||
}
|
||||
|
||||
function isModule(src) {
|
||||
return src instanceof WebAssembly.Module;
|
||||
}
|
||||
|
||||
/** Asynchronously instantiates an AssemblyScript module from anything that can be instantiated. */
|
||||
async function instantiate(source, imports = {}) {
|
||||
if (isResponse(source = await source)) return instantiateStreaming(source, imports);
|
||||
const module = isModule(source) ? source : await WebAssembly.compile(source);
|
||||
const extended = preInstantiate(imports);
|
||||
const instance = await WebAssembly.instantiate(module, imports);
|
||||
const exports = postInstantiate(extended, instance);
|
||||
return { module, instance, exports };
|
||||
}
|
||||
|
||||
exports.instantiate = instantiate;
|
||||
|
||||
/** Synchronously instantiates an AssemblyScript module from a WebAssembly.Module or binary buffer. */
|
||||
function instantiateSync(source, imports = {}) {
|
||||
const module = isModule(source) ? source : new WebAssembly.Module(source);
|
||||
const extended = preInstantiate(imports);
|
||||
const instance = new WebAssembly.Instance(module, imports);
|
||||
const exports = postInstantiate(extended, instance);
|
||||
return { module, instance, exports };
|
||||
}
|
||||
|
||||
exports.instantiateSync = instantiateSync;
|
||||
|
||||
/** Asynchronously instantiates an AssemblyScript module from a response, i.e. as obtained by `fetch`. */
|
||||
async function instantiateStreaming(source, imports = {}) {
|
||||
if (!WebAssembly.instantiateStreaming) {
|
||||
return instantiate(
|
||||
isResponse(source = await source)
|
||||
? source.arrayBuffer()
|
||||
: source,
|
||||
imports
|
||||
);
|
||||
}
|
||||
const extended = preInstantiate(imports);
|
||||
const result = await WebAssembly.instantiateStreaming(source, imports);
|
||||
const exports = postInstantiate(extended, result.instance);
|
||||
return { ...result, exports };
|
||||
}
|
||||
|
||||
exports.instantiateStreaming = instantiateStreaming;
|
||||
|
||||
/** Demangles an AssemblyScript module's exports to a friendly object structure. */
|
||||
function demangle(exports, extendedExports = {}) {
|
||||
extendedExports = Object.create(extendedExports);
|
||||
const setArgumentsLength = exports["__argumentsLength"]
|
||||
? length => { exports["__argumentsLength"].value = length; }
|
||||
: exports["__setArgumentsLength"] || exports["__setargc"] || (() => { /* nop */ });
|
||||
for (let internalName in exports) {
|
||||
if (!Object.prototype.hasOwnProperty.call(exports, internalName)) continue;
|
||||
const elem = exports[internalName];
|
||||
let parts = internalName.split(".");
|
||||
let curr = extendedExports;
|
||||
while (parts.length > 1) {
|
||||
let part = parts.shift();
|
||||
if (!Object.prototype.hasOwnProperty.call(curr, part)) curr[part] = {};
|
||||
curr = curr[part];
|
||||
}
|
||||
let name = parts[0];
|
||||
let hash = name.indexOf("#");
|
||||
if (hash >= 0) {
|
||||
const className = name.substring(0, hash);
|
||||
const classElem = curr[className];
|
||||
if (typeof classElem === "undefined" || !classElem.prototype) {
|
||||
const ctor = function(...args) {
|
||||
return ctor.wrap(ctor.prototype.constructor(0, ...args));
|
||||
};
|
||||
ctor.prototype = {
|
||||
valueOf: function valueOf() {
|
||||
return this[THIS];
|
||||
}
|
||||
};
|
||||
ctor.wrap = function(thisValue) {
|
||||
return Object.create(ctor.prototype, { [THIS]: { value: thisValue, writable: false } });
|
||||
};
|
||||
if (classElem) Object.getOwnPropertyNames(classElem).forEach(name =>
|
||||
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 (!Object.prototype.hasOwnProperty.call(curr, name = name.substring(4))) {
|
||||
let getter = exports[internalName.replace("set:", "get:")];
|
||||
let setter = exports[internalName.replace("get:", "set:")];
|
||||
Object.defineProperty(curr, name, {
|
||||
get: function() { return getter(this[THIS]); },
|
||||
set: function(value) { setter(this[THIS], value); },
|
||||
enumerable: true
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if (name === 'constructor') {
|
||||
(curr[name] = (...args) => {
|
||||
setArgumentsLength(args.length);
|
||||
return elem(...args);
|
||||
}).original = elem;
|
||||
} else { // instance method
|
||||
(curr[name] = function(...args) { // !
|
||||
setArgumentsLength(args.length);
|
||||
return elem(this[THIS], ...args);
|
||||
}).original = elem;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (/^(get|set):/.test(name)) {
|
||||
if (!Object.prototype.hasOwnProperty.call(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" && elem !== setArgumentsLength) {
|
||||
(curr[name] = (...args) => {
|
||||
setArgumentsLength(args.length);
|
||||
return elem(...args);
|
||||
}).original = elem;
|
||||
} else {
|
||||
curr[name] = elem;
|
||||
}
|
||||
}
|
||||
}
|
||||
return extendedExports;
|
||||
}
|
||||
|
||||
exports.demangle = demangle;
|
38
my-app/node_modules/@assemblyscript/loader/package.json
generated
vendored
Executable file
38
my-app/node_modules/@assemblyscript/loader/package.json
generated
vendored
Executable file
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"name": "@assemblyscript/loader",
|
||||
"description": "A convenient loader for AssemblyScript modules.",
|
||||
"keywords": [
|
||||
"assemblyscript",
|
||||
"loader",
|
||||
"glue",
|
||||
"interop",
|
||||
"webassembly",
|
||||
"wasm"
|
||||
],
|
||||
"version": "0.10.1",
|
||||
"author": "Daniel Wirtz <dcode+assemblyscript@dcode.io>",
|
||||
"license": "Apache-2.0",
|
||||
"homepage": "https://assemblyscript.org",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/AssemblyScript/assemblyscript.git",
|
||||
"directory": "lib/loader"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/AssemblyScript/assemblyscript/issues"
|
||||
},
|
||||
"main": "index.js",
|
||||
"types": "index.d.ts",
|
||||
"scripts": {
|
||||
"asbuild": "npm run asbuild:default && npm run asbuild:legacy",
|
||||
"asbuild:default": "node ../../bin/asc tests/assembly/index.ts -b tests/build/default.wasm",
|
||||
"asbuild:legacy": "node ../../bin/asc tests/assembly/index.ts --disable mutable-globals -b tests/build/legacy.wasm",
|
||||
"test": "node tests"
|
||||
},
|
||||
"files": [
|
||||
"index.d.ts",
|
||||
"index.js",
|
||||
"package.json",
|
||||
"README.md"
|
||||
]
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue