{"version":3,"sources":["/home/runner/work/libsql-middleware/libsql-middleware/dist/index.cjs","../src/index.ts"],"names":[],"mappings":"AAAA;AC4BO,SAAS,cAAA,CACd,MAAA,EACA,OAAA,EACQ;AACR,EAAA,MAAM,gBAAA,EAAkB,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAClD,EAAA,MAAM,cAAA,EAAgB,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAE9C,EAAA,MAAA,CAAO,QAAA,EAAU,MAAA,CAAO,IAAA,EAAA,GAA0C;AAChE,IAAA,IAAI,aAAA,EAAe,IAAA;AAEnB,IAAA,IAAA,CAAA,MAAW,OAAA,GAAU,OAAA,EAAS;AAC5B,MAAA,GAAA,CAAI,MAAA,CAAO,aAAA,EAAe;AACxB,QAAA,aAAA,EAAe,MAAM,MAAA,CAAO,aAAA,CAAc,YAAA,EAAc,MAAM,CAAA;AAAA,MAChE;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,EAAe,eAAA;AACnB,IAAA,IAAA,CAAA,MAAW,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAG;AAC9C,MAAA,GAAA,CAAI,MAAA,CAAO,kBAAA,EAAoB;AAC7B,QAAA,MAAM,YAAA,EAAc,YAAA;AACpB,QAAA,aAAA,EAAe,CAAC,KAAA,EAAA,GACd,MAAA,CAAO,kBAAA,CAAoB,WAAA,EAAa,KAAA,EAAO,MAAM,CAAA;AAAA,MACzD;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,EAAS,MAAM,YAAA,CAAa,YAAY,CAAA;AAE5C,IAAA,IAAA,CAAA,MAAW,OAAA,GAAU,OAAA,EAAS;AAC5B,MAAA,GAAA,CAAI,MAAA,CAAO,YAAA,EAAc;AACvB,QAAA,OAAA,EAAS,MAAM,MAAA,CAAO,YAAA,CAAa,MAAA,EAAQ,YAAA,EAAc,MAAM,CAAA;AAAA,MACjE;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,KAAA,EAAA,GAA+C;AACnE,IAAA,IAAI,cAAA,EAAgB,KAAA;AAEpB,IAAA,IAAA,CAAA,MAAW,OAAA,GAAU,OAAA,EAAS;AAC5B,MAAA,GAAA,CAAI,MAAA,CAAO,WAAA,EAAa;AACtB,QAAA,cAAA,EAAgB,MAAM,MAAA,CAAO,WAAA,CAAY,aAAA,EAAe,MAAM,CAAA;AAAA,MAChE;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,EAAU,MAAM,aAAA,CAAc,aAAa,CAAA;AAEjD,IAAA,IAAA,CAAA,MAAW,OAAA,GAAU,OAAA,EAAS;AAC5B,MAAA,GAAA,CAAI,MAAA,CAAO,UAAA,EAAY;AACrB,QAAA,MAAM,MAAA,CAAO,UAAA,CAAW,OAAA,EAAS,aAAA,EAAe,MAAM,CAAA;AAAA,MACxD;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAA,CACd,OAAA,EAIc;AACd,EAAA,OAAO,EAAE,aAAA,EAAe,QAAQ,CAAA;AAClC;AAEO,SAAS,YAAA,CACd,OAAA,EAKc;AACd,EAAA,OAAO,EAAE,YAAA,EAAc,QAAQ,CAAA;AACjC;AAEO,SAAS,WAAA,CACd,OAAA,EAIc;AACd,EAAA,OAAO,EAAE,WAAA,EAAa,QAAQ,CAAA;AAChC;AAEO,SAAS,UAAA,CACd,OAAA,EAKc;AACd,EAAA,OAAO,EAAE,UAAA,EAAY,QAAQ,CAAA;AAC/B;AAEO,SAAS,kBAAA,CACd,OAAA,EAKc;AACd,EAAA,OAAO,EAAE,kBAAA,EAAoB,QAAQ,CAAA;AACvC;AD3EA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,yOAAC","file":"/home/runner/work/libsql-middleware/libsql-middleware/dist/index.cjs","sourcesContent":[null,"import type { Client, InStatement, ResultSet } from \"@libsql/core/api\";\n\nexport interface LibSQLPlugin {\n  beforeExecute?: (\n    query: InStatement,\n    client: Client\n  ) => Promise<InStatement> | InStatement;\n  afterExecute?: (\n    result: ResultSet,\n    query: InStatement,\n    client: Client\n  ) => Promise<ResultSet> | ResultSet;\n  beforeBatch?: (\n    stmts: InStatement[],\n    client: Client\n  ) => Promise<InStatement[]> | InStatement[];\n  afterBatch?: (\n    results: ResultSet[],\n    stmts: InStatement[],\n    client: Client\n  ) => Promise<ResultSet[]> | ResultSet[];\n  executeInterceptor?: (\n    next: (query: InStatement) => Promise<ResultSet>,\n    query: InStatement,\n    client: Client\n  ) => Promise<ResultSet>;\n}\n\nexport function withMiddleware(\n  client: Client,\n  plugins: LibSQLPlugin[]\n): Client {\n  const originalExecute = client.execute.bind(client);\n  const originalBatch = client.batch.bind(client);\n\n  client.execute = async (stmt: InStatement): Promise<ResultSet> => {\n    let modifiedStmt = stmt;\n\n    for (const plugin of plugins) {\n      if (plugin.beforeExecute) {\n        modifiedStmt = await plugin.beforeExecute(modifiedStmt, client);\n      }\n    }\n\n    let executeChain = originalExecute;\n    for (const plugin of plugins.slice().reverse()) {\n      if (plugin.executeInterceptor) {\n        const prevExecute = executeChain;\n        executeChain = (query) =>\n          plugin.executeInterceptor!(prevExecute, query, client);\n      }\n    }\n\n    let result = await executeChain(modifiedStmt);\n\n    for (const plugin of plugins) {\n      if (plugin.afterExecute) {\n        result = await plugin.afterExecute(result, modifiedStmt, client);\n      }\n    }\n\n    return result;\n  };\n\n  client.batch = async (stmts: InStatement[]): Promise<ResultSet[]> => {\n    let modifiedStmts = stmts;\n\n    for (const plugin of plugins) {\n      if (plugin.beforeBatch) {\n        modifiedStmts = await plugin.beforeBatch(modifiedStmts, client);\n      }\n    }\n\n    const results = await originalBatch(modifiedStmts);\n\n    for (const plugin of plugins) {\n      if (plugin.afterBatch) {\n        await plugin.afterBatch(results, modifiedStmts, client);\n      }\n    }\n\n    return results;\n  };\n\n  return client;\n}\n\nexport function beforeExecute(\n  handler: (\n    query: InStatement,\n    client: Client\n  ) => Promise<InStatement> | InStatement\n): LibSQLPlugin {\n  return { beforeExecute: handler };\n}\n\nexport function afterExecute(\n  handler: (\n    result: ResultSet,\n    query: InStatement,\n    client: Client\n  ) => Promise<ResultSet> | ResultSet\n): LibSQLPlugin {\n  return { afterExecute: handler };\n}\n\nexport function beforeBatch(\n  handler: (\n    stmts: InStatement[],\n    client: Client\n  ) => Promise<InStatement[]> | InStatement[]\n): LibSQLPlugin {\n  return { beforeBatch: handler };\n}\n\nexport function afterBatch(\n  handler: (\n    esults: ResultSet[],\n    stmts: InStatement[],\n    client: Client\n  ) => Promise<ResultSet[]> | ResultSet[]\n): LibSQLPlugin {\n  return { afterBatch: handler };\n}\n\nexport function executeInterceptor(\n  handler: (\n    next: (query: InStatement) => Promise<ResultSet>,\n    query: InStatement,\n    client: Client\n  ) => Promise<ResultSet>\n): LibSQLPlugin {\n  return { executeInterceptor: handler };\n}\n"]}