mirror of
https://github.com/denoland/deno.git
synced 2025-10-02 23:24:37 +00:00
First pass at json ops in core (#7033)
Adds Deno.core.jsonOpSync and Deno.core.jsonOpAsync
This commit is contained in:
parent
be1e7ab532
commit
0095611af9
5 changed files with 151 additions and 20 deletions
57
core/core.js
57
core/core.js
|
@ -201,7 +201,64 @@ SharedQueue Binary Layout
|
|||
return errorClass;
|
||||
}
|
||||
|
||||
// Returns Uint8Array
|
||||
function encodeJson(args) {
|
||||
const s = JSON.stringify(args);
|
||||
return core.encode(s);
|
||||
}
|
||||
|
||||
function decodeJson(ui8) {
|
||||
const s = Deno.core.decode(ui8);
|
||||
return JSON.parse(s);
|
||||
}
|
||||
|
||||
let nextPromiseId = 1;
|
||||
const promiseTable = {};
|
||||
|
||||
function jsonOpAsync(opName, args) {
|
||||
setAsyncHandler(opsCache[opName], jsonOpAsyncHandler);
|
||||
|
||||
args.promiseId = nextPromiseId++;
|
||||
const argsBuf = encodeJson(args);
|
||||
dispatch(opName, argsBuf);
|
||||
let resolve, reject;
|
||||
const promise = new Promise((resolve_, reject_) => {
|
||||
resolve = resolve_;
|
||||
reject = reject_;
|
||||
});
|
||||
promise.resolve = resolve;
|
||||
promise.reject = reject;
|
||||
promiseTable[args.promiseId] = promise;
|
||||
return promise;
|
||||
}
|
||||
|
||||
function jsonOpSync(opName, args) {
|
||||
const argsBuf = encodeJson(args);
|
||||
const res = dispatch(opName, argsBuf);
|
||||
const r = decodeJson(res);
|
||||
if (r["ok"]) {
|
||||
return r["ok"];
|
||||
} else {
|
||||
throw r["err"];
|
||||
}
|
||||
}
|
||||
|
||||
function jsonOpAsyncHandler(buf) {
|
||||
// Json Op.
|
||||
const msg = decodeJson(buf);
|
||||
const { ok, err, promiseId } = msg;
|
||||
const promise = promiseTable[promiseId];
|
||||
delete promiseTable[promiseId];
|
||||
if (ok) {
|
||||
promise.resolve(ok);
|
||||
} else {
|
||||
promise.reject(err);
|
||||
}
|
||||
}
|
||||
|
||||
Object.assign(window.Deno.core, {
|
||||
jsonOpAsync,
|
||||
jsonOpSync,
|
||||
setAsyncHandler,
|
||||
dispatch: send,
|
||||
dispatchByName: dispatch,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue