{"version":3,"file":"vat-kv-store.cjs","sourceRoot":"","sources":["../../src/store/vat-kv-store.ts"],"names":[],"mappings":";;AAaA,wCAiEC;AA3ED,2DAAmD;AAEnD;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,KAA0B;IACvD,MAAM,IAAI,GAAwB,IAAI,GAAG,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAgB,IAAI,GAAG,EAAE,CAAC;IACvC,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,IAAI,gBAAgB,GAAW,CAAC,CAAC,CAAC;IAElC,OAAO;QACL,GAAG,CAAC,GAAW;YACb,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,WAAW,CAAC,GAAW;YACrB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,KAAK,CAAC,0BAA0B,GAAG,GAAG,CAAC,CAAC;QAChD,CAAC;QACD,UAAU,CAAC,GAAW;YACpB,QAAQ,KAAR,QAAQ,GAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAC;YAC7C,MAAM,KAAK,GACT,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAA,yBAAS,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACpE,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,WAAW,GAAG,IAAI,CAAC;gBACnB,gBAAgB,GAAG,CAAC,CAAC,CAAC;gBACtB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAW,CAAC;YACxC,IAAI,GAAG,GAAG,WAAW,EAAE,CAAC;gBACtB,gBAAgB,GAAG,KAAK,CAAC;gBACzB,OAAO,WAAW,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,IAAI,KAAK,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACjC,WAAW,GAAG,IAAI,CAAC;oBACnB,gBAAgB,GAAG,CAAC,CAAC,CAAC;oBACtB,OAAO,SAAS,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAW,CAAC;oBAC5C,gBAAgB,GAAG,KAAK,GAAG,CAAC,CAAC;oBAC7B,OAAO,WAAW,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QACD,GAAG,CAAC,GAAW,EAAE,KAAa;YAC5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,MAAM,CAAC,GAAW;YAChB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,UAAU;YACR,MAAM,MAAM,GAAkB;gBAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;aACpB,CAAC;YACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["/* eslint-disable no-lonely-if, no-else-return */\nimport type { VatKVStore, VatCheckpoint } from '@metamask/kernel-store';\n\nimport { keySearch } from '../utils/key-search.ts';\n\n/**\n * Create an in-memory VatKVStore for a vat, backed by a Map and tracking\n * changes so that they can be reported at the end of a crank.\n *\n * @param state - The state to begin with.\n *\n * @returns a VatKVStore wrapped around `state`.\n */\nexport function makeVatKVStore(state: Map<string, string>): VatKVStore {\n  const sets: Map<string, string> = new Map();\n  const deletes: Set<string> = new Set();\n  let keyCache: string[] | null = null;\n  let lastNextKey: string | null = null;\n  let lastNextKeyIndex: number = -1;\n\n  return {\n    get(key: string): string | undefined {\n      return state.get(key);\n    },\n    getRequired(key: string): string {\n      const result = state.get(key);\n      if (result) {\n        return result;\n      }\n      throw Error(`no value matching key '${key}'`);\n    },\n    getNextKey(key: string): string | undefined {\n      keyCache ??= Array.from(state.keys()).sort();\n      const index =\n        lastNextKey === key ? lastNextKeyIndex : keySearch(keyCache, key);\n      if (index < 0) {\n        lastNextKey = null;\n        lastNextKeyIndex = -1;\n        return undefined;\n      }\n      lastNextKey = keyCache[index] as string;\n      if (key < lastNextKey) {\n        lastNextKeyIndex = index;\n        return lastNextKey;\n      } else {\n        if (index + 1 >= keyCache.length) {\n          lastNextKey = null;\n          lastNextKeyIndex = -1;\n          return undefined;\n        } else {\n          lastNextKey = keyCache[index + 1] as string;\n          lastNextKeyIndex = index + 1;\n          return lastNextKey;\n        }\n      }\n    },\n    set(key: string, value: string): void {\n      state.set(key, value);\n      sets.set(key, value);\n      deletes.delete(key);\n      keyCache = null;\n    },\n    delete(key: string): void {\n      state.delete(key);\n      sets.delete(key);\n      deletes.add(key);\n      keyCache = null;\n    },\n    checkpoint(): VatCheckpoint {\n      const result: VatCheckpoint = [\n        Array.from(sets.entries()),\n        Array.from(deletes),\n      ];\n      sets.clear();\n      deletes.clear();\n      return result;\n    },\n  };\n}\n"]}