{"version":3,"file":"stream.mjs","sources":["../../../../../../src/mods/snowflake/turbo/stream.ts"],"sourcesContent":["import { Opaque, Writable } from \"@hazae41/binary\"\nimport { Bytes } from \"@hazae41/bytes\"\nimport { FullDuplex } from \"@hazae41/cascade\"\nimport { Future } from \"@hazae41/future\"\nimport { Awaitable } from \"libs/promises/index.js\"\nimport { SecretTurboReader } from \"./reader.js\"\nimport { SecretTurboWriter } from \"./writer.js\"\n\nexport interface TurboDuplexParams {\n  readonly client?: Uint8Array\n\n  close?(this: undefined): Awaitable<void>\n  error?(this: undefined, reason?: unknown): Awaitable<void>\n}\n\nexport class TurboDuplex {\n\n  readonly #secret: SecretTurboDuplex\n\n  constructor(\n    readonly params: TurboDuplexParams = {}\n  ) {\n    this.#secret = new SecretTurboDuplex(params)\n  }\n\n  [Symbol.dispose]() {\n    this.close()\n  }\n\n  get client() {\n    return this.#secret.client\n  }\n\n  get inner() {\n    return this.#secret.inner\n  }\n\n  get outer() {\n    return this.#secret.outer\n  }\n\n  get closing() {\n    return this.#secret.closing\n  }\n\n  get closed() {\n    return this.#secret.closed\n  }\n\n  error(reason?: unknown) {\n    this.#secret.error(reason)\n  }\n\n  close() {\n    this.#secret.close()\n  }\n\n}\n\nexport class SecretTurboDuplex {\n  readonly #class = SecretTurboDuplex\n\n  static readonly token = new Uint8Array([0x12, 0x93, 0x60, 0x5d, 0x27, 0x81, 0x75, 0xf5])\n\n  readonly duplex: FullDuplex<Opaque, Writable>\n\n  readonly reader: SecretTurboReader\n  readonly writer: SecretTurboWriter\n\n  readonly client: Uint8Array\n\n  readonly resolveOnStart = new Future<void>()\n\n  constructor(\n    readonly params: TurboDuplexParams = {}\n  ) {\n    const { client = Bytes.random(8) } = params\n\n    this.client = client\n\n    this.reader = new SecretTurboReader(this)\n    this.writer = new SecretTurboWriter(this)\n\n    this.duplex = new FullDuplex<Opaque, Writable>({\n      input: {\n        write: c => this.reader.onWrite(c),\n      },\n      output: {\n        start: () => this.writer.onStart(),\n        write: c => this.writer.onWrite(c),\n      },\n      error: e => this.params.error?.call(undefined, e),\n      close: () => this.params.close?.call(undefined),\n    })\n\n    this.resolveOnStart.resolve()\n  }\n\n  get class() {\n    return this.#class\n  }\n\n  [Symbol.dispose]() {\n    this.close()\n  }\n\n  get inner() {\n    return this.duplex.inner\n  }\n\n  get outer() {\n    return this.duplex.outer\n  }\n\n  get input() {\n    return this.duplex.input\n  }\n\n  get output() {\n    return this.duplex.output\n  }\n\n  get closing() {\n    return this.duplex.closing\n  }\n\n  get closed() {\n    return this.duplex.closed\n  }\n\n  error(reason?: unknown) {\n    this.duplex.error(reason)\n  }\n\n  close() {\n    this.duplex.close()\n  }\n\n}"],"names":[],"mappings":";;;;;;;MAea,WAAW,CAAA;AAKX,IAAA,MAAA,CAAA;AAHF,IAAA,OAAO,CAAmB;AAEnC,IAAA,WAAA,CACW,SAA4B,EAAE,EAAA;QAA9B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAwB;QAEvC,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAA;KAC7C;IAED,CAAC,MAAM,CAAC,OAAO,CAAC,GAAA;QACd,IAAI,CAAC,KAAK,EAAE,CAAA;KACb;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;KAC3B;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;KAC1B;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;KAC1B;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;KAC5B;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;KAC3B;AAED,IAAA,KAAK,CAAC,MAAgB,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;KAC3B;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;KACrB;AAEF,CAAA;MAEY,iBAAiB,CAAA;AAejB,IAAA,MAAA,CAAA;IAdF,MAAM,GAAG,EAAiB,CAAA;IAEnC,OAAgB,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAE/E,IAAA,MAAM,CAA8B;AAEpC,IAAA,MAAM,CAAmB;AACzB,IAAA,MAAM,CAAmB;AAEzB,IAAA,MAAM,CAAY;AAElB,IAAA,cAAc,GAAG,IAAI,MAAM,EAAQ,CAAA;AAE5C,IAAA,WAAA,CACW,SAA4B,EAAE,EAAA;QAA9B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAwB;AAEvC,QAAA,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAA;AAE3C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAA;AAEzC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAmB;AAC7C,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,aAAA;AACD,YAAA,MAAM,EAAE;gBACN,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AAClC,gBAAA,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,aAAA;AACD,YAAA,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AACjD,YAAA,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;AAChD,SAAA,CAAC,CAAA;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAA;KAC9B;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;KACnB;IAED,CAAC,MAAM,CAAC,OAAO,CAAC,GAAA;QACd,IAAI,CAAC,KAAK,EAAE,CAAA;KACb;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;KACzB;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;KACzB;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;KACzB;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;KAC1B;AAED,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;KAC3B;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;KAC1B;AAED,IAAA,KAAK,CAAC,MAAgB,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;KAC1B;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;KACpB;;;;;;"}