UNPKG

tupleson

Version:

A hackable JSON serializer/deserializer

1 lines 2.94 kB
{"version":3,"sources":["../../../src/async/handlers/tsonPromise.ts"],"sourcesContent":["import {\n\tTsonPromiseRejectionError,\n\tTsonStreamInterruptedError,\n} from \"../asyncErrors.js\";\nimport { TsonAsyncType } from \"../asyncTypes.js\";\n\nfunction isPromise(value: unknown): value is Promise<unknown> {\n\treturn (\n\t\t!!value &&\n\t\ttypeof value === \"object\" &&\n\t\t\"then\" in value &&\n\t\ttypeof (value as any).catch === \"function\"\n\t);\n}\n\nconst PROMISE_RESOLVED = 0;\nconst PROMISE_REJECTED = 1;\n\ntype SerializedPromiseValue =\n\t| [typeof PROMISE_REJECTED, unknown]\n\t| [typeof PROMISE_RESOLVED, unknown];\n\ntype MyPromise = Promise<unknown>;\n\nexport const tsonPromise: TsonAsyncType<MyPromise, SerializedPromiseValue> = {\n\tasync: true,\n\tdeserialize: (opts) => {\n\t\tconst promise = new Promise((resolve, reject) => {\n\t\t\tasync function _handle() {\n\t\t\t\tconst next = await opts.reader.read();\n\t\t\t\topts.close();\n\n\t\t\t\tif (next.done) {\n\t\t\t\t\tthrow new TsonPromiseRejectionError(\n\t\t\t\t\t\t\"Expected promise value, got done\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst { value } = next;\n\n\t\t\t\tif (value instanceof TsonStreamInterruptedError) {\n\t\t\t\t\treject(TsonPromiseRejectionError.from(value));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst [status, result] = value;\n\n\t\t\t\tstatus === PROMISE_RESOLVED\n\t\t\t\t\t? resolve(result)\n\t\t\t\t\t: reject(TsonPromiseRejectionError.from(result));\n\t\t\t}\n\n\t\t\tvoid _handle().catch(reject);\n\t\t});\n\n\t\tpromise.catch(() => {\n\t\t\t// prevent unhandled promise rejection\n\t\t});\n\t\treturn promise;\n\t},\n\tkey: \"Promise\",\n\tserializeIterator(opts) {\n\t\tconst value = opts.value\n\t\t\t.then((value): SerializedPromiseValue => [PROMISE_RESOLVED, value])\n\t\t\t.catch((err): SerializedPromiseValue => [PROMISE_REJECTED, err]);\n\t\treturn (async function* generator() {\n\t\t\tyield await value;\n\t\t})();\n\t},\n\ttest: isPromise,\n};\n"],"mappings":"AAAA;AAAA,EACC;AAAA,EACA;AAAA,OACM;AAGP,SAAS,UAAU,OAA2C;AAC7D,SACC,CAAC,CAAC,SACF,OAAO,UAAU,YACjB,UAAU,SACV,OAAQ,MAAc,UAAU;AAElC;AAEA,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AAQlB,MAAM,cAAgE;AAAA,EAC5E,OAAO;AAAA,EACP,aAAa,CAAC,SAAS;AACtB,UAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChD,qBAAe,UAAU;AACxB,cAAM,OAAO,MAAM,KAAK,OAAO,KAAK;AACpC,aAAK,MAAM;AAEX,YAAI,KAAK,MAAM;AACd,gBAAM,IAAI;AAAA,YACT;AAAA,UACD;AAAA,QACD;AAEA,cAAM,EAAE,MAAM,IAAI;AAElB,YAAI,iBAAiB,4BAA4B;AAChD,iBAAO,0BAA0B,KAAK,KAAK,CAAC;AAC5C;AAAA,QACD;AAEA,cAAM,CAAC,QAAQ,MAAM,IAAI;AAEzB,mBAAW,mBACR,QAAQ,MAAM,IACd,OAAO,0BAA0B,KAAK,MAAM,CAAC;AAAA,MACjD;AAEA,WAAK,QAAQ,EAAE,MAAM,MAAM;AAAA,IAC5B,CAAC;AAED,YAAQ,MAAM,MAAM;AAAA,IAEpB,CAAC;AACD,WAAO;AAAA,EACR;AAAA,EACA,KAAK;AAAA,EACL,kBAAkB,MAAM;AACvB,UAAM,QAAQ,KAAK,MACjB,KAAK,CAACA,WAAkC,CAAC,kBAAkBA,MAAK,CAAC,EACjE,MAAM,CAAC,QAAgC,CAAC,kBAAkB,GAAG,CAAC;AAChE,WAAQ,gBAAgB,YAAY;AACnC,YAAM,MAAM;AAAA,IACb,EAAG;AAAA,EACJ;AAAA,EACA,MAAM;AACP;","names":["value"]}