{"version":3,"file":"index.cjs","sources":["../src/HyperStorage.ts"],"sourcesContent":["import type { Hyper, NotOkResult } from 'hyper-connect'\nimport type { MigrationParams, UmzugStorage } from 'umzug'\n\nimport type { HyperStorageArgs, HyperStorageDoc } from './types'\n\nexport class FromHyperError extends Error {\n  constructor ({ msg }: { msg?: string }, _default = 'An Error Occurred') {\n    super(msg || _default)\n  }\n}\n\nexport class HyperStorage implements UmzugStorage {\n  private readonly hyper: Hyper\n\n  private readonly docId: string\n  private readonly docType: string\n  private readonly docTypeField: string\n  private readonly createdField: string\n  private readonly updatedField: string\n\n  constructor (args: HyperStorageArgs) {\n    // This is covered, but c8 isn't catching it *shrugs*\n    /* c8 ignore start */\n    if (!args.hyper) {\n      throw new Error('hyper is a required option and must be an instance of hyper-connect')\n    }\n    /* c8 ignore stop */\n\n    args.doc = args.doc ?? {}\n    const { hyper, doc: { id, type, typeField, createdField, updatedField } = {} } = args\n\n    // hyper connect instance\n    this.hyper = hyper\n\n    this.docType = type ?? '__scripts'\n    this.docId = id ?? 'hyper-scripts-meta'\n    this.docTypeField = typeField ?? 'type'\n    this.updatedField = updatedField ?? 'updatedAt'\n    this.createdField = createdField ?? 'createdAt'\n  }\n\n  /**\n   * Logs migration to be considered as executed.\n   */\n  async logMigration ({ name }: MigrationParams<unknown>) {\n    try {\n      const doc = await this._findOrCreateMigrationDoc()\n      doc.migrations = [...doc.migrations, name]\n      await this._updateMigrationDoc(doc)\n    } catch (err) {\n      throw new Error(`Could not log migration ${name}: ${(err as Error).message}`)\n    }\n  }\n\n  /**\n   * Unlogs migration (makes it to be considered as pending).\n   */\n  async unlogMigration ({ name }: MigrationParams<unknown>) {\n    try {\n      const doc = await this._findOrCreateMigrationDoc()\n      // remove migration from array of executed migrations\n      const idx = doc.migrations.indexOf(name)\n      doc.migrations = [...doc.migrations]\n      doc.migrations.splice(idx, 1)\n      await this._updateMigrationDoc(doc)\n    } catch (err) {\n      throw new Error(`Could not unlog migration ${name}: ${(err as Error).message}`)\n    }\n  }\n\n  /**\n   * Gets list of executed migrations.\n   */\n  async executed () {\n    const doc = await this._findOrCreateMigrationDoc()\n    return doc.migrations\n  }\n\n  private async _findOrCreateMigrationDoc (): Promise<HyperStorageDoc> {\n    const res = await this.hyper.data.get(this.docId)\n\n    let doc: HyperStorageDoc | undefined\n    // check for strict equality since could be actual doc or { ok: false, ... }\n    if (res.ok === false) {\n      if (res.status !== 404) {\n        throw new FromHyperError(res, 'Could not retrieve migration doc')\n      }\n      doc = undefined\n    } else {\n      /**\n       * support both hyper-connect <0.6.0 && >=0.6.0\n       * by grabbing 'doc' or the response itself as the doc (legacy get)\n       */\n      doc = (res.doc || res) as HyperStorageDoc\n    }\n\n    // Found\n    if (doc) {\n      return doc\n    }\n\n    // #### Create Migration Doc ####\n    const newDoc: HyperStorageDoc = {\n      _id: this.docId,\n      [this.docTypeField]: this.docType,\n      migrations: [],\n      [this.createdField]: new Date(),\n      [this.updatedField]: new Date()\n    }\n\n    let newDocRes = await this.hyper.data.add(newDoc)\n\n    if (!newDocRes.ok) {\n      newDocRes = newDocRes as NotOkResult\n      if (newDocRes.status && newDocRes.status >= 400) {\n        throw new FromHyperError(newDocRes, 'Could not create migration doc')\n      }\n    }\n\n    return newDoc\n  }\n\n  private async _updateMigrationDoc (doc: HyperStorageDoc): Promise<HyperStorageDoc> {\n    const update = {\n      ...doc,\n      [this.updatedField]: new Date()\n    }\n    const res = await this.hyper.data.update(doc._id, update)\n\n    if (!res.ok) {\n      throw new FromHyperError(res, 'Could not update migration doc')\n    }\n\n    return update\n  }\n}\n"],"names":["FromHyperError","_Error","_ref","_default","msg","this","_wrapNativeSuper","Error","HyperStorage","args","hyper","docId","docType","docTypeField","createdField","updatedField","doc","_args$doc","id","_args$doc2","type","typeField","_proto","prototype","logMigration","_ref2","name","_this2","Promise","resolve","_catch","_findOrCreateMigrationDoc","migrations","_updateMigrationDoc","then","err","message","e","reject","unlogMigration","_ref3","_this4","idx","indexOf","concat","splice","executed","_this8","data","get","res","_newDoc","ok","status","undefined","newDoc","_id","Date","add","newDocRes","_extends2","update"],"mappings":"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"}