mirror of
https://github.com/gosticks/DefinitelyTyped.git
synced 2025-10-16 12:05:41 +00:00
* [emscripten] Add module loader when -s MODULARIZE=1 enabled
Add Module() call and Module().then(callback).
Related: https://emscripten.org/docs/getting_started/FAQ.html#how-can-i-tell-when-the-page-is-fully-loaded-and-it-is-safe-to-call-compiled-functions
Signed-off-by: Bumsik Kim <k.bumsik@gmail.com>
* [emscripten] Move runtime functions to the global space
All of these runtime functions are removed more than a year ago.
Related: 7952394493/src/settings.js (L674-L685)
Signed-off-by: Bumsik Kim <k.bumsik@gmail.com>
* [emscripten] Add missing runtime methods
* [emscripten] Make FS methods more accurate
Signed-off-by: Bumsik Kim <k.bumsik@gmail.com>
* [emscripten] Make function signatures more accurate
Signed-off-by: Bumsik Kim <k.bumsik@gmail.com>
* [emscripten] Runtime is removed
Signed-off-by: Bumsik Kim <k.bumsik@gmail.com>
* [emscripten] Fix test and add stack alloc test
Signed-off-by: Bumsik Kim <k.bumsik@gmail.com>
* [emscripten] Add contributor: Bumsik Kim
Signed-off-by: Bumsik Kim <k.bumsik@gmail.com>
* [emscripten] Bump version: 1.39.5
Signed-off-by: Bumsik Kim <k.bumsik@gmail.com>
144 lines
4.3 KiB
TypeScript
144 lines
4.3 KiB
TypeScript
/// Extending Module
|
|
// This requires -s "EXTRA_EXPORTED_RUNTIME_METHODS=['cwrap','ccall','getValue','setvalue']"
|
|
// in emcc compilation flags
|
|
interface EmscriptenModule {
|
|
cwrap: typeof cwrap;
|
|
ccall: typeof ccall;
|
|
getValue: typeof getValue;
|
|
setValue: typeof setValue;
|
|
}
|
|
|
|
/// Module
|
|
function ModuleTest(): void {
|
|
Module.environment = "WEB";
|
|
Module.environment = "NODE";
|
|
Module.environment = "WORKER";
|
|
Module.noInitialRun = false;
|
|
Module.logReadFiles = false;
|
|
Module.filePackagePrefixURL = "http://www.example.org/";
|
|
Module.preinitializedWebGLContext = new WebGLRenderingContext();
|
|
Module.onAbort = (what) => console.log('abort');
|
|
Module.onRuntimeInitialized = () => console.log('init');
|
|
|
|
const package: ArrayBuffer = Module.getPreloadedPackage("package-name", 100);
|
|
const exports: Emscripten.WebAssemblyExports = Module.instantiateWasm(
|
|
[{name: "func-name", kind: "function"}],
|
|
(module: WebAssembly.Module) => {}
|
|
);
|
|
const memFile: string = Module.locateFile("http://www.example.org/file.mem");
|
|
Module.onCustomMessage(new MessageEvent("TestType"));
|
|
|
|
Module.print = (text) => alert('stdout: ' + text);
|
|
|
|
let int_sqrt = Module.cwrap('int_sqrt', 'number', ['number']);
|
|
int_sqrt = Module.cwrap('int_sqrt', null, ['number']);
|
|
int_sqrt(12);
|
|
int_sqrt(28);
|
|
|
|
const myTypedArray = new Uint8Array(10);
|
|
const buf = Module._malloc(myTypedArray.length * myTypedArray.BYTES_PER_ELEMENT);
|
|
Module.setValue(buf, 10, 'i32');
|
|
const x = Module.getValue(buf, 'i32') + 123;
|
|
Module.HEAPU8.set(myTypedArray, buf);
|
|
Module.ccall('my_function', 'number', ['number'], [buf]);
|
|
Module.ccall('my_function', null, ['number'], [buf]);
|
|
Module.ccall('my_function', null, ['number'], [buf], {async: true});
|
|
Module.cwrap('my_function', 'string', ['number', 'boolean', 'array']);
|
|
Module.cwrap('my_function', null, ['number']);
|
|
Module.cwrap('my_function', 'string', ['number', 'boolean', 'array'], {async: true});
|
|
Module._free(buf);
|
|
Module.destroy({});
|
|
}
|
|
|
|
/// FS
|
|
function FSTest(): void {
|
|
FS.init(() => null, _ => null, _ => null);
|
|
FS.init(null, null, null);
|
|
|
|
FS.mkdir('/working');
|
|
FS.mount(NODEFS, { root: '.' }, '/working');
|
|
|
|
function myAppStartup(): void {
|
|
FS.mkdir('/data');
|
|
FS.mount(IDBFS, {}, '/data');
|
|
|
|
FS.syncfs(true, (err) => {
|
|
// handle callback
|
|
});
|
|
}
|
|
|
|
function myAppShutdown() {
|
|
FS.syncfs((err) => {
|
|
// handle callback
|
|
});
|
|
}
|
|
|
|
const id = FS.makedev(64, 0);
|
|
FS.registerDevice(id, {});
|
|
FS.mkdev('/dummy', id);
|
|
|
|
FS.writeFile('file', 'foobar');
|
|
FS.symlink('file', 'link');
|
|
|
|
FS.writeFile('/foobar.txt', 'Hello, world');
|
|
FS.unlink('/foobar.txt');
|
|
|
|
FS.writeFile('file', 'foobar');
|
|
FS.symlink('file', 'link');
|
|
|
|
FS.writeFile('forbidden', 'can\'t touch this');
|
|
FS.chmod('forbidden', parseInt("0000", 8));
|
|
|
|
FS.writeFile('file', 'foobar');
|
|
FS.truncate('file', 3);
|
|
|
|
const contents1 = FS.readFile('file', { encoding: 'utf8' });
|
|
const contents2 = FS.readFile('file', { encoding: 'binary' });
|
|
const contents3 = FS.readFile('file');
|
|
|
|
const rstream = FS.open('abinaryfile', 'r');
|
|
const buf = new Uint8Array(4);
|
|
FS.read(rstream, buf, 0, 4, 0);
|
|
FS.close(rstream);
|
|
|
|
const data = new Uint8Array(32);
|
|
const wstream = FS.open('dummy1', 'w+');
|
|
FS.write(wstream, data, 0, data.length, 0);
|
|
FS.close(wstream);
|
|
|
|
FS.createDataFile('/', 'dummy2', data, true, true);
|
|
|
|
const lookup = FS.lookupPath("path", { parent: true });
|
|
}
|
|
|
|
/// String conversions
|
|
function StringConv(): void {
|
|
let s = '';
|
|
let p = 0;
|
|
|
|
const nullptr = 0;
|
|
s = UTF8ToString(nullptr);
|
|
s = UTF8ToString(nullptr, 42);
|
|
s = UTF16ToString(nullptr);
|
|
s = UTF32ToString(nullptr);
|
|
const i1 = lengthBytesUTF8(s);
|
|
const i2 = lengthBytesUTF16(s);
|
|
const i3 = lengthBytesUTF32(s);
|
|
stringToUTF8(s, p);
|
|
stringToUTF8(s, p, 42);
|
|
stringToUTF16(s, p);
|
|
stringToUTF16(s, p, 42);
|
|
stringToUTF32(s, p);
|
|
stringToUTF32(s, p, 42);
|
|
p = allocateUTF8(s);
|
|
Module._free(p);
|
|
}
|
|
|
|
// Stack allocations
|
|
function StackAlloc() {
|
|
const stack = stackSave();
|
|
const ptr = stackAlloc(42);
|
|
const strPtr = allocateUTF8OnStack('testString');
|
|
stackRestore(stack);
|
|
}
|