{"version":3,"file":"index.mjs","sources":["../../../../../../src/mods/kdbx/vector/index.ts"],"sourcesContent":["import { Opaque, Readable, Writable } from \"@hazae41/binary\";\nimport { Cursor } from \"@hazae41/cursor\";\nimport { Optional } from \"libs/optional/index.js\";\nimport { Struct } from \"libs/struct/index.js\";\nimport { TLV } from \"libs/tlv/index.js\";\n\nexport class Vector<T extends { [index: number]: Optional<readonly Struct[]> }> {\n\n  constructor(\n    readonly bytes: Opaque,\n    readonly value: T\n  ) { }\n\n  sizeOrThrow() {\n    return this.bytes.sizeOrThrow();\n  }\n\n  writeOrThrow(cursor: Cursor) {\n    this.bytes.writeOrThrow(cursor)\n  }\n\n  cloneOrThrow() {\n    return Readable.readFromBytesOrThrow(Vector, Writable.writeToBytesOrThrow(this)) as any as this\n  }\n\n}\n\nexport namespace Vector {\n\n  export function initOrThrow<T extends { [index: number]: Optional<readonly Struct[]> }>(indexed: T) {\n    const entries = new Array<TLV>();\n\n    for (const key of Object.keys(indexed)) {\n      const index = Number(key)\n      const array = indexed[index]\n\n      if (array == null)\n        continue\n\n      for (const value of array)\n        entries.push(new TLV(index, value))\n\n      continue\n    }\n\n    const sized = entries.reduce((x, r) => x + r.sizeOrThrow(), 0) + TLV.Empty.sizeOrThrow()\n    const bytes = new Opaque(new Uint8Array(sized))\n\n    const cursor = new Cursor(bytes.bytes)\n\n    for (const entry of entries)\n      entry.writeOrThrow(cursor)\n\n    TLV.Empty.writeOrThrow(cursor)\n\n    return new Vector(bytes, indexed);\n  }\n\n  export function readOrThrow(cursor: Cursor) {\n    const start = cursor.offset\n\n    const entries = new Array<TLV>();\n    const indexed: { [index: number]: Opaque[] } = {};\n\n    while (true) {\n      const tlv = TLV.readOrThrow(cursor)\n\n      if (tlv.type === 0)\n        break\n\n      entries.push(tlv)\n\n      indexed[tlv.type] ??= []\n      indexed[tlv.type].push(tlv.value)\n\n      continue\n    }\n\n    const bytes = new Opaque(cursor.bytes.subarray(start, cursor.offset));\n\n    return new Vector(bytes, indexed);\n  }\n\n}"],"names":[],"mappings":";;;;MAMa,MAAM,CAAA;AAGN,IAAA,KAAA;AACA,IAAA,KAAA;IAFX,WAAA,CACW,KAAa,EACb,KAAQ,EAAA;QADR,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,KAAK,GAAL,KAAK;IACZ;IAEJ,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;IACjC;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;IACjC;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,QAAQ,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAgB;IACjG;AAED;AAED,CAAA,UAAiB,MAAM,EAAA;IAErB,SAAgB,WAAW,CAA6D,OAAU,EAAA;AAChG,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,EAAO;QAEhC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAE5B,IAAI,KAAK,IAAI,IAAI;gBACf;YAEF,KAAK,MAAM,KAAK,IAAI,KAAK;gBACvB,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAErC;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;QACxF,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAEtC,KAAK,MAAM,KAAK,IAAI,OAAO;AACzB,YAAA,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;AAE5B,QAAA,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;AAE9B,QAAA,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;IACnC;AA3BgB,IAAA,MAAA,CAAA,WAAW,cA2B1B;IAED,SAAgB,WAAW,CAAC,MAAc,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;AAE3B,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,EAAO;QAChC,MAAM,OAAO,GAAkC,EAAE;QAEjD,OAAO,IAAI,EAAE;YACX,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC;AAEnC,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;gBAChB;AAEF,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAEjB,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;AACxB,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAErE,QAAA,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;IACnC;AAvBgB,IAAA,MAAA,CAAA,WAAW,cAuB1B;AAEH,CAAC,EAxDgB,MAAM,KAAN,MAAM,GAAA,EAAA,CAAA,CAAA;;;;"}