{"version":3,"file":"index.cjs","sources":["../../../../../../src/mods/kdbx/dictionary/index.ts"],"sourcesContent":["import { Opaque, Readable, Writable } from \"@hazae41/binary\"\nimport { Cursor } from \"@hazae41/cursor\"\n\nexport class Dictionary<T extends { [key: string]: Value } = { [key: string]: Value }> {\n\n  constructor(\n    readonly version: Dictionary.Version,\n    readonly entries: Entries<T>\n  ) { }\n\n  sizeOrThrow() {\n    return this.version.sizeOrThrow() + this.entries.sizeOrThrow() + 1\n  }\n\n  writeOrThrow(cursor: Cursor) {\n    this.version.writeOrThrow(cursor)\n    this.entries.writeOrThrow(cursor)\n\n    cursor.writeUint8OrThrow(0x00)\n  }\n\n  cloneOrThrow() {\n    return new Dictionary(this.version.cloneOrThrow(), this.entries.cloneOrThrow())\n  }\n\n}\n\nexport namespace Dictionary {\n\n  export class Version {\n\n    constructor(\n      readonly minor: number,\n      readonly major: number\n    ) { }\n\n    sizeOrThrow() {\n      return 1 + 1\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      cursor.writeUint8OrThrow(this.minor)\n      cursor.writeUint8OrThrow(this.major)\n    }\n\n    cloneOrThrow() {\n      return this\n    }\n\n  }\n\n  export namespace Version {\n\n    export function readOrThrow(cursor: Cursor) {\n      const minor = cursor.readUint8OrThrow()\n      const major = cursor.readUint8OrThrow()\n\n      return new Version(minor, major)\n    }\n\n  }\n\n  export function initOrThrow<T extends { [key: string]: Value }>(version: Version, entries: T) {\n    return new Dictionary(version, Entries.initOrThrow(entries))\n  }\n\n  export function readOrThrow(cursor: Cursor) {\n    const version = Version.readOrThrow(cursor)\n\n    if (version.major !== 1)\n      throw new Error()\n\n    const entries = Entries.readOrThrow(cursor)\n\n    return new Dictionary(version, entries)\n  }\n\n}\n\nexport class Entries<T extends { [key: string]: Value } = { [key: string]: Value }> {\n\n  constructor(\n    readonly bytes: Opaque,\n    readonly value: T,\n  ) { }\n\n  sizeOrThrow() {\n    return this.bytes.bytes.length\n  }\n\n  writeOrThrow(cursor: Cursor) {\n    cursor.writeOrThrow(this.bytes.bytes)\n  }\n\n  cloneOrThrow() {\n    return Readable.readFromBytesOrThrow(Entries, Writable.writeToBytesOrThrow(this)) as this\n  }\n\n}\n\nexport namespace Entries {\n\n  export function initOrThrow<T extends { [key: string]: Value }>(value: T) {\n    const entries = new Array<Entry<Value>>()\n\n    for (const key in value)\n      entries.push(new Entry(Key.initOrThrow(key), value[key]))\n\n    const sized = entries.reduce((x, r) => x + r.sizeOrThrow(), 0)\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    return new Entries(bytes, value)\n  }\n\n  export function readOrThrow(cursor: Cursor) {\n    const start = cursor.offset\n\n    const entries = new Array<Entry<Value>>()\n    const indexed: { [key: string]: Value } = {}\n\n    while (true) {\n      const record = Entry.readOrThrow(cursor)\n\n      if (record == null)\n        break\n\n      entries.push(record)\n\n      indexed[record.key.value] = record.val\n\n      continue\n    }\n\n    const bytes = new Opaque(cursor.bytes.subarray(start, cursor.offset))\n\n    return new Entries(bytes, indexed)\n  }\n\n}\nexport class Entry<T extends Value> {\n\n  constructor(\n    readonly key: Key,\n    readonly val: T\n  ) { }\n\n  sizeOrThrow() {\n    return 1 + 4 + this.key.sizeOrThrow() + 4 + this.val.sizeOrThrow()\n  }\n\n  writeOrThrow(cursor: Cursor) {\n    cursor.writeUint8OrThrow(this.val.type)\n\n    const klength = this.key.sizeOrThrow()\n    cursor.writeUint32OrThrow(klength, true)\n    this.key.writeOrThrow(cursor)\n\n    const vlength = this.val.sizeOrThrow()\n    cursor.writeUint32OrThrow(vlength, true)\n    this.val.writeOrThrow(cursor)\n  }\n\n}\n\nexport namespace Entry {\n\n  export function readOrThrow(cursor: Cursor) {\n    const type = cursor.readUint8OrThrow()\n\n    if (type === 0)\n      return\n\n    const klength = cursor.readUint32OrThrow(true)\n    const kbytes = cursor.readOrThrow(klength)\n    const kstring = new TextDecoder().decode(kbytes)\n\n    const vlength = cursor.readUint32OrThrow(true)\n    const vbytes = cursor.readOrThrow(vlength)\n\n    const key = new Key(new Opaque(kbytes), kstring)\n    const value = Value.parseOrThrow(type, new Opaque(vbytes))\n\n    return new Entry(key, value)\n  }\n\n}\n\nexport class Key {\n\n  constructor(\n    readonly bytes: Opaque,\n    readonly value: string\n  ) { }\n\n  sizeOrThrow() {\n    return this.bytes.bytes.length\n  }\n\n  writeOrThrow(cursor: Cursor) {\n    cursor.writeOrThrow(this.bytes.bytes)\n  }\n\n}\n\nexport namespace Key {\n\n  export function initOrThrow(value: string) {\n    const bytes = new TextEncoder().encode(value)\n    return new Key(new Opaque(bytes), value)\n  }\n\n}\n\nexport type Value =\n  | Value.UInt32\n  | Value.UInt64\n  | Value.Boolean\n  | Value.Int32\n  | Value.Int64\n  | Value.String\n  | Value.Bytes\n\nexport namespace Value {\n\n  export function parseOrThrow(type: number, value: Opaque) {\n    if (type === UInt32.type)\n      return Readable.readFromBytesOrThrow(UInt32, value.bytes)\n\n    if (type === UInt64.type)\n      return Readable.readFromBytesOrThrow(UInt64, value.bytes)\n\n    if (type === Boolean.type)\n      return Readable.readFromBytesOrThrow(Boolean, value.bytes)\n\n    if (type === Int32.type)\n      return Readable.readFromBytesOrThrow(Int32, value.bytes)\n\n    if (type === Int64.type)\n      return Readable.readFromBytesOrThrow(Int64, value.bytes)\n\n    if (type === String.type)\n      return Readable.readFromBytesOrThrow(String, value.bytes)\n\n    if (type === Bytes.type)\n      return Readable.readFromBytesOrThrow(Bytes, value.bytes)\n\n    throw new Error()\n  }\n\n  export class UInt32<T extends number = number> {\n    readonly #class = UInt32\n\n    constructor(\n      readonly value: T\n    ) { }\n\n    get type() {\n      return this.#class.type\n    }\n\n    sizeOrThrow() {\n      return 4\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      cursor.writeUint32OrThrow(this.value, true)\n    }\n\n  }\n\n  export namespace UInt32 {\n\n    export const type = 0x04\n\n    export function readOrThrow(cursor: Cursor) {\n      return new UInt32(cursor.readUint32OrThrow(true))\n    }\n\n  }\n\n  export class UInt64<T extends bigint = bigint> {\n    readonly #class = UInt64\n\n    constructor(\n      readonly value: T\n    ) { }\n\n    get type() {\n      return this.#class.type\n    }\n\n    sizeOrThrow() {\n      return 8\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      cursor.writeUint64OrThrow(this.value, true)\n    }\n\n  }\n\n  export namespace UInt64 {\n\n    export const type = 0x05\n\n    export function readOrThrow(cursor: Cursor) {\n      return new UInt64(cursor.readUint64OrThrow(true))\n    }\n\n  }\n\n  export class Boolean {\n    readonly #class = Boolean\n\n    constructor(\n      readonly value: boolean\n    ) { }\n\n    get type() {\n      return this.#class.type\n    }\n\n    sizeOrThrow() {\n      return 1\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      cursor.writeUint8OrThrow(this.value ? 1 : 0)\n    }\n\n  }\n\n  export namespace Boolean {\n\n    export const type = 0x08\n\n    export function readOrThrow(cursor: Cursor) {\n      const value = cursor.readUint8OrThrow()\n\n      if (value !== 0 && value !== 1)\n        throw new Error()\n\n      return new Boolean(value === 1)\n    }\n\n  }\n\n  export class Int32<T extends number = number> {\n    readonly #class = Int32\n\n    constructor(\n      readonly value: T\n    ) { }\n\n    get type() {\n      return this.#class.type\n    }\n\n    sizeOrThrow() {\n      return 4\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      cursor.writeUint32OrThrow(this.value < 0 ? this.value + (2 ** 32) : this.value, true)\n    }\n\n  }\n\n  export namespace Int32 {\n\n    export const type = 0x0C\n\n    export function readOrThrow(cursor: Cursor) {\n      const uint = cursor.readUint32OrThrow(true)\n      const sint = uint > ((2 ** 31) - 1) ? uint - (2 ** 32) : uint\n\n      return new Int32(sint)\n    }\n\n  }\n\n  export class Int64<T extends bigint = bigint> {\n    readonly #class = Int64\n\n    constructor(\n      readonly value: T\n    ) { }\n\n    get type() {\n      return this.#class.type\n    }\n\n    sizeOrThrow() {\n      return 8\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      cursor.writeUint64OrThrow(this.value < 0n ? this.value + (2n ** 64n) : this.value, true)\n    }\n\n  }\n\n  export namespace Int64 {\n\n    export const type = 0x0D\n\n    export function readOrThrow(cursor: Cursor) {\n      const uint = cursor.readUint64OrThrow(true)\n      const sint = uint > ((2n ** 63n) - 1n) ? uint - (2n ** 64n) : uint\n\n      return new Int64(sint)\n    }\n\n  }\n\n  export class String {\n    readonly #class = String\n\n    constructor(\n      readonly bytes: Opaque,\n      readonly value: string\n    ) { }\n\n    get type() {\n      return this.#class.type\n    }\n\n    sizeOrThrow() {\n      return this.bytes.bytes.length\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      cursor.writeOrThrow(this.bytes.bytes)\n    }\n\n  }\n\n  export namespace String {\n\n    export const type = 0x18\n\n    export function readOrThrow(cursor: Cursor) {\n      const bytes = cursor.readOrThrow(cursor.remaining)\n      const value = new TextDecoder().decode(bytes)\n\n      return new String(new Opaque(bytes), value)\n    }\n\n  }\n\n  export class Bytes<N extends number = number> {\n    readonly #class = Bytes\n\n    constructor(\n      readonly value: Opaque<N>\n    ) { }\n\n    get type() {\n      return this.#class.type\n    }\n\n    sizeOrThrow() {\n      return this.value.bytes.length\n    }\n\n    writeOrThrow(cursor: Cursor) {\n      cursor.writeOrThrow(this.value.bytes)\n    }\n\n  }\n\n  export namespace Bytes {\n\n    export const type = 0x42\n\n    export function readOrThrow(cursor: Cursor) {\n      return new Bytes(new Opaque(cursor.readOrThrow(cursor.remaining)))\n    }\n\n  }\n\n}\n"],"names":["Readable","Writable","Opaque","cursor","Cursor","Value"],"mappings":"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"}