UNPKG

@hazae41/binary

Version:

Zero-copy binary data types

1 lines 3.23 kB
{"version":3,"file":"index.cjs","sources":["../../../../../src/mods/binary/readable/index.ts"],"sourcesContent":["export * from \"./errors/index.js\";\n\nimport { Cursor } from \"@hazae41/cursor\";\nimport { ReadUnderflowError } from \"./errors/index.js\";\n\n/**\n * A readable binary data type\n */\nexport interface Readable<Output = unknown> {\n\n /**\n * Read from a cursor\n * @param cursor \n */\n readOrThrow(cursor: Cursor): Output\n\n}\n\nexport namespace Readable {\n\n export type Infer<T extends Readable> = Readable<Readable.Output<T>>\n\n export type Output<T extends Readable> = T extends Readable<infer O> ? O : never\n\n /**\n * Call readOrThrow() but rollback the cursor on error\n * @throws whatever readOrThrow() throws\n * @param readable \n * @param cursor \n * @returns \n */\n export function readOrRollbackAndThrow<T extends Infer<T>>(readable: T, cursor: Cursor): Output<T> {\n const offset = cursor.offset\n\n try {\n return readable.readOrThrow(cursor)\n } catch (e: unknown) {\n cursor.offset = offset\n throw e\n }\n }\n\n /**\n * Call readOrThrow() on the given bytes and check for underflow\n * @param readable \n * @param bytes \n * @returns \n */\n export function readFromBytesOrNull<T extends Infer<T>>(readable: T, bytes: Uint8Array): Output<T> | undefined {\n try {\n const cursor = new Cursor(bytes)\n const output = readable.readOrThrow(cursor)\n\n if (cursor.remaining)\n return undefined\n\n return output\n } catch (e: unknown) {\n return undefined\n }\n }\n\n /**\n * Call readOrThrow() on the given bytes and check for underflow\n * @throws whatever readOrThrow() throws\n * @throws ReadUnderflowError on underflow\n * @param readable \n * @param bytes \n * @returns \n */\n export function readFromBytesOrThrow<T extends Infer<T>>(readable: T, bytes: Uint8Array): Output<T> {\n const cursor = new Cursor(bytes)\n const output = readable.readOrThrow(cursor)\n\n if (cursor.remaining)\n throw ReadUnderflowError.from(cursor)\n\n return output\n }\n\n}"],"names":["Readable","cursor","Cursor","ReadUnderflowError"],"mappings":";;;;;AAkBiBA;AAAjB,CAAA,UAAiB,QAAQ,EAAA;AAMvB;;;;;;AAMG;AACH,IAAA,SAAgB,sBAAsB,CAAqB,QAAW,EAAE,MAAc,EAAA;AACpF,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAE5B,QAAA,IAAI;AACF,YAAA,OAAO,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;;QACnC,OAAO,CAAU,EAAE;AACnB,YAAA,MAAM,CAAC,MAAM,GAAG,MAAM;AACtB,YAAA,MAAM,CAAC;;;AAPK,IAAA,QAAA,CAAA,sBAAsB,yBASrC;AAED;;;;;AAKG;AACH,IAAA,SAAgB,mBAAmB,CAAqB,QAAW,EAAE,KAAiB,EAAA;AACpF,QAAA,IAAI;AACF,YAAA,MAAMC,QAAM,GAAG,IAAIC,aAAM,CAAC,KAAK,CAAC;YAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAACD,QAAM,CAAC;YAE3C,IAAIA,QAAM,CAAC,SAAS;AAClB,gBAAA,OAAO,SAAS;AAElB,YAAA,OAAO,MAAM;;QACb,OAAO,CAAU,EAAE;AACnB,YAAA,OAAO,SAAS;;;AAVJ,IAAA,QAAA,CAAA,mBAAmB,sBAYlC;AAED;;;;;;;AAOG;AACH,IAAA,SAAgB,oBAAoB,CAAqB,QAAW,EAAE,KAAiB,EAAA;AACrF,QAAA,MAAMA,QAAM,GAAG,IAAIC,aAAM,CAAC,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAACD,QAAM,CAAC;QAE3C,IAAIA,QAAM,CAAC,SAAS;AAClB,YAAA,MAAME,wBAAkB,CAAC,IAAI,CAACF,QAAM,CAAC;AAEvC,QAAA,OAAO,MAAM;;AAPC,IAAA,QAAA,CAAA,oBAAoB,uBAQnC;AAEH,CAAC,EA9DgBD,gBAAQ,KAARA,gBAAQ,GAAA,EAAA,CAAA,CAAA;;;;;"}