@framers/sql-storage-adapter 0.7.6 → 0.7.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -628,10 +628,17 @@ See [**guides/OPTIMIZATION_GUIDE.md**](./guides/OPTIMIZATION_GUIDE.md) for detai
628
628
 
629
629
  ## Lifecycle Hooks
630
630
 
631
- The package exports the `StorageHooks` types and the `combineHooks()` and `filterHooks()` helpers. `createDatabase()` takes no `hooks` option, and no adapter runs hooks: a host that wants them calls them around its own adapter calls.
631
+ `createDatabase({ hooks })`, or `withHooks(adapter, hooks)` on any adapter, puts lifecycle hooks around each query, write, transaction and error.
632
+ - A `before` hook returns the context, changed or not, to go on, or undefined to stop the call. A stopped `get` returns null, `all` an empty list, and `run` no changes.
633
+ - `onAfterQuery` can replace the result.
634
+ - `onError` returns the error to throw, or undefined to swallow it.
635
+ - The statements inside a transaction pass through the hooks too, and `onAfterTransaction` sees `outcome: 'committed'` or `'rolled_back'`.
636
+ - The adapter keeps its kind, its own methods and its class.
637
+
638
+ `combineHooks()` and `filterHooks()` compose hook sets.
632
639
 
633
640
  ```typescript
634
- import { combineHooks, type StorageHooks } from '@framers/sql-storage-adapter';
641
+ import { createDatabase, combineHooks, type StorageHooks } from '@framers/sql-storage-adapter';
635
642
 
636
643
  const myHooks: StorageHooks = {
637
644
  // Log all writes
@@ -657,8 +664,7 @@ const myHooks: StorageHooks = {
657
664
  }
658
665
  };
659
666
 
660
- // One StorageHooks object from several; the host calls its hooks itself
661
- const hooks = combineHooks(myHooks);
667
+ const db = await createDatabase({ url: process.env.DATABASE_URL, strict: true, hooks: combineHooks(myHooks) });
662
668
  ```
663
669
 
664
670
  ### Available Hooks
@@ -12,6 +12,7 @@ import type { PostgresAdapterOptions } from '../adapters/postgresAdapter.js';
12
12
  import type { CapacitorAdapterOptions } from '../adapters/capacitorSqliteAdapter.js';
13
13
  import type { IndexedDbAdapterOptions } from '../adapters/indexedDbAdapter.js';
14
14
  import type { StorageLogger } from '../shared/logger.js';
15
+ import type { StorageHooks } from './contracts/hooks.js';
15
16
  /**
16
17
  * Database connection options.
17
18
  */
@@ -111,6 +112,12 @@ export interface DatabaseOptions {
111
112
  * `setStorageLogger()` set, else the console.
112
113
  */
113
114
  logger?: StorageLogger;
115
+ /**
116
+ * Lifecycle hooks around every call of the adapter returned (see withHooks):
117
+ * each query, write, transaction and error, with the power to change a
118
+ * statement or a result, or to stop a call by returning undefined.
119
+ */
120
+ hooks?: StorageHooks;
114
121
  }
115
122
  /**
116
123
  * Create a database connection.
@@ -28,6 +28,7 @@ var import_contracts = require("./contracts/index.js");
28
28
  var import_resolver = require("./resolver.js");
29
29
  var import_postgresTarget = require("../shared/postgresTarget.js");
30
30
  var import_segment = require("../shared/segment.js");
31
+ var import_withHooks = require("../shared/withHooks.js");
31
32
  var import_resolver2 = require("./resolver.js");
32
33
  const configuredPostgresOptions = (options) => {
33
34
  const named = [];
@@ -112,7 +113,7 @@ async function createDatabase(options = {}) {
112
113
  }
113
114
  const adapter = await (0, import_resolver.resolveStorageAdapter)(resolverOptions);
114
115
  await adapter.open(resolverOptions.openOptions);
115
- return adapter;
116
+ return options.hooks ? (0, import_withHooks.withHooks)(adapter, options.hooks) : adapter;
116
117
  }
117
118
  async function connectDatabase(config) {
118
119
  if (typeof config === "string") {
@@ -18,6 +18,7 @@ export { SqliteFileExporter } from '../exporters/SqliteFileExporter.js';
18
18
  export { PostgresExporter } from '../exporters/PostgresExporter.js';
19
19
  export { createStorageFeatures } from './contracts/features.js';
20
20
  export { isUniqueViolation } from '../shared/errors.js';
21
+ export { withHooks } from '../shared/withHooks.js';
21
22
  export { setStorageLogger, getStorageLogger, type StorageLogger } from '../shared/logger.js';
22
23
  export * from '../features/migrations/schemaMigrations.js';
23
24
  export * from '../features/auth/authJsAdapter.js';
@@ -30,7 +30,8 @@ __export(portable_exports, {
30
30
  createStorageFeatures: () => import_features.createStorageFeatures,
31
31
  getStorageLogger: () => import_logger.getStorageLogger,
32
32
  isUniqueViolation: () => import_errors.isUniqueViolation,
33
- setStorageLogger: () => import_logger.setStorageLogger
33
+ setStorageLogger: () => import_logger.setStorageLogger,
34
+ withHooks: () => import_withHooks.withHooks
34
35
  });
35
36
  module.exports = __toCommonJS(portable_exports);
36
37
  __reExport(portable_exports, require("../types/index.js"), module.exports);
@@ -45,6 +46,7 @@ var import_SqliteFileExporter = require("../exporters/SqliteFileExporter.js");
45
46
  var import_PostgresExporter = require("../exporters/PostgresExporter.js");
46
47
  var import_features = require("./contracts/features.js");
47
48
  var import_errors = require("../shared/errors.js");
49
+ var import_withHooks = require("../shared/withHooks.js");
48
50
  var import_logger = require("../shared/logger.js");
49
51
  __reExport(portable_exports, require("../features/migrations/schemaMigrations.js"), module.exports);
50
52
  __reExport(portable_exports, require("../features/auth/authJsAdapter.js"), module.exports);
@@ -64,6 +66,7 @@ __reExport(portable_exports, require("../shared/parameterUtils.js"), module.expo
64
66
  getStorageLogger,
65
67
  isUniqueViolation,
66
68
  setStorageLogger,
69
+ withHooks,
67
70
  ...require("../types/index.js"),
68
71
  ...require("../features/migrations/schemaMigrations.js"),
69
72
  ...require("../features/auth/authJsAdapter.js"),
@@ -28,5 +28,6 @@ export { SqliteFileExporter } from './exporters/SqliteFileExporter.js';
28
28
  export { PostgresExporter } from './exporters/PostgresExporter.js';
29
29
  export { createStorageFeatures } from './core/contracts/features.js';
30
30
  export { isUniqueViolation } from './shared/errors.js';
31
+ export { withHooks } from './shared/withHooks.js';
31
32
  export { setStorageLogger, getStorageLogger, type StorageLogger } from './shared/logger.js';
32
33
  //# sourceMappingURL=index.d.ts.map
package/dist/cjs/index.js CHANGED
@@ -33,7 +33,8 @@ __export(dist_exports, {
33
33
  segmentFilePath: () => import_segment.segmentFilePath,
34
34
  segmentName: () => import_segment.segmentName,
35
35
  setStorageLogger: () => import_logger.setStorageLogger,
36
- validateSegment: () => import_segment.validateSegment
36
+ validateSegment: () => import_segment.validateSegment,
37
+ withHooks: () => import_withHooks.withHooks
37
38
  });
38
39
  module.exports = __toCommonJS(dist_exports);
39
40
  __reExport(dist_exports, require("./types/index.js"), module.exports);
@@ -66,6 +67,7 @@ var import_SqliteFileExporter = require("./exporters/SqliteFileExporter.js");
66
67
  var import_PostgresExporter = require("./exporters/PostgresExporter.js");
67
68
  var import_features = require("./core/contracts/features.js");
68
69
  var import_errors = require("./shared/errors.js");
70
+ var import_withHooks = require("./shared/withHooks.js");
69
71
  var import_logger = require("./shared/logger.js");
70
72
  // Annotate the CommonJS export names for ESM import in node:
71
73
  0 && (module.exports = {
@@ -85,6 +87,7 @@ var import_logger = require("./shared/logger.js");
85
87
  segmentName,
86
88
  setStorageLogger,
87
89
  validateSegment,
90
+ withHooks,
88
91
  ...require("./types/index.js"),
89
92
  ...require("./core/database.js"),
90
93
  ...require("./core/resolver.js"),
@@ -0,0 +1,17 @@
1
+ import type { StorageAdapter } from '../core/contracts/index.js';
2
+ import { type StorageHooks } from '../core/contracts/hooks.js';
3
+ /**
4
+ * The adapter with lifecycle hooks around its calls, on any adapter.
5
+ *
6
+ * - `onBeforeQuery` (get, all, exec) and `onBeforeWrite` (run) see the call's context, and return it, changed or
7
+ * not, to go on, or undefined to stop the call: a stopped get returns null, all an empty list, run no changes.
8
+ * - `onAfterQuery` can replace the result, and `onAfterWrite` sees it.
9
+ * - `onBeforeTransaction` can stop a transaction, and `onAfterTransaction` sees its outcome. The statements inside a
10
+ * transaction pass through the hooks too.
11
+ * - `onError` sees each failure and returns the error to throw, or undefined to swallow it.
12
+ *
13
+ * Everything else, the adapter's kind and its own methods (`withConnection` on PostgreSQL), reaches the adapter
14
+ * itself, and `instanceof` still names its class.
15
+ */
16
+ export declare function withHooks<A extends StorageAdapter>(adapter: A, hooks: StorageHooks): A;
17
+ //# sourceMappingURL=withHooks.d.ts.map
@@ -0,0 +1,115 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var withHooks_exports = {};
19
+ __export(withHooks_exports, {
20
+ withHooks: () => withHooks
21
+ });
22
+ module.exports = __toCommonJS(withHooks_exports);
23
+ var import_hooks = require("../core/contracts/hooks.js");
24
+ const handled = /* @__PURE__ */ new WeakSet();
25
+ const EMPTY_WRITE = { changes: 0, lastInsertRowid: null };
26
+ function withHooks(adapter, hooks) {
27
+ const context = (operation) => ({
28
+ operationId: (0, import_hooks.generateOperationId)(),
29
+ operation,
30
+ startTime: Date.now(),
31
+ adapterKind: adapter.kind
32
+ });
33
+ const fail = async (error, at) => {
34
+ const err = error instanceof Error ? error : new Error(String(error));
35
+ if (!hooks.onError || handled.has(err))
36
+ throw err;
37
+ const replaced = await hooks.onError(err, at);
38
+ if (!replaced)
39
+ return;
40
+ handled.add(replaced);
41
+ throw replaced;
42
+ };
43
+ const query = async (operation, statement, parameters, call, stopped) => {
44
+ let at = { ...context(operation), statement, parameters };
45
+ if (hooks.onBeforeQuery) {
46
+ const next = await hooks.onBeforeQuery(at);
47
+ if (!next)
48
+ return stopped;
49
+ at = next;
50
+ }
51
+ try {
52
+ const result = await call(at.statement, at.parameters);
53
+ if (!hooks.onAfterQuery)
54
+ return result;
55
+ const replaced = await hooks.onAfterQuery(at, result);
56
+ return replaced === void 0 ? result : replaced;
57
+ } catch (error) {
58
+ await fail(error, at);
59
+ return stopped;
60
+ }
61
+ };
62
+ const overrides = {
63
+ get: (statement, parameters) => query("get", statement, parameters, (s, p) => adapter.get(s, p), null),
64
+ all: (statement, parameters) => query("all", statement, parameters, (s, p) => adapter.all(s, p), []),
65
+ exec: (script) => query("exec", script, void 0, (s) => adapter.exec(s), void 0),
66
+ run: async (statement, parameters) => {
67
+ let at = { ...context("run"), statement, parameters };
68
+ if (hooks.onBeforeWrite) {
69
+ const next = await hooks.onBeforeWrite(at);
70
+ if (!next)
71
+ return EMPTY_WRITE;
72
+ at = next;
73
+ }
74
+ try {
75
+ const result = await adapter.run(at.statement, at.parameters);
76
+ await hooks.onAfterWrite?.(at, result);
77
+ return result;
78
+ } catch (error) {
79
+ await fail(error, at);
80
+ return EMPTY_WRITE;
81
+ }
82
+ },
83
+ transaction: async (fn) => {
84
+ let at = { ...context("transaction") };
85
+ if (hooks.onBeforeTransaction) {
86
+ const next = await hooks.onBeforeTransaction(at);
87
+ if (!next)
88
+ return void 0;
89
+ at = next;
90
+ }
91
+ try {
92
+ const result = await adapter.transaction((trx) => fn(withHooks(trx, hooks)));
93
+ await hooks.onAfterTransaction?.({ ...at, outcome: "committed" });
94
+ return result;
95
+ } catch (error) {
96
+ await hooks.onAfterTransaction?.({ ...at, outcome: "rolled_back" });
97
+ await fail(error, at);
98
+ return void 0;
99
+ }
100
+ }
101
+ };
102
+ return new Proxy(adapter, {
103
+ get(target, property) {
104
+ if (Object.prototype.hasOwnProperty.call(overrides, property)) {
105
+ return overrides[property];
106
+ }
107
+ const value = Reflect.get(target, property, target);
108
+ return typeof value === "function" ? value.bind(target) : value;
109
+ }
110
+ });
111
+ }
112
+ // Annotate the CommonJS export names for ESM import in node:
113
+ 0 && (module.exports = {
114
+ withHooks
115
+ });
@@ -12,6 +12,7 @@ import type { PostgresAdapterOptions } from '../adapters/postgresAdapter.js';
12
12
  import type { CapacitorAdapterOptions } from '../adapters/capacitorSqliteAdapter.js';
13
13
  import type { IndexedDbAdapterOptions } from '../adapters/indexedDbAdapter.js';
14
14
  import type { StorageLogger } from '../shared/logger.js';
15
+ import type { StorageHooks } from './contracts/hooks.js';
15
16
  /**
16
17
  * Database connection options.
17
18
  */
@@ -111,6 +112,12 @@ export interface DatabaseOptions {
111
112
  * `setStorageLogger()` set, else the console.
112
113
  */
113
114
  logger?: StorageLogger;
115
+ /**
116
+ * Lifecycle hooks around every call of the adapter returned (see withHooks):
117
+ * each query, write, transaction and error, with the power to change a
118
+ * statement or a result, or to stop a call by returning undefined.
119
+ */
120
+ hooks?: StorageHooks;
114
121
  }
115
122
  /**
116
123
  * Create a database connection.
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAwD,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAGpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAatD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAElC;;;OAGG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAEjC;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,EAAE,uBAAuB,CAAC;IAEpC;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAE/D;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAEzB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAyG3F;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GACtC,OAAO,CAAC,cAAc,CAAC,CAKzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAE5E;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAEpE;AAGD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAwD,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAGpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AActD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAElC;;;OAGG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAEjC;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,CAAC,EAAE,uBAAuB,CAAC;IAEpC;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAE/D;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAEzB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB;;;;OAIG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAyG3F;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GACtC,OAAO,CAAC,cAAc,CAAC,CAKzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAE5E;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAEpE;AAGD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
@@ -10,6 +10,7 @@ import { StorageResolutionError } from './contracts/index.js';
10
10
  import { resolveStorageAdapter } from './resolver.js';
11
11
  import { namesPostgresServer } from '../shared/postgresTarget.js';
12
12
  import { namesInMemoryDatabase } from '../shared/segment.js';
13
+ import { withHooks } from '../shared/withHooks.js';
13
14
  /**
14
15
  * The options that configure Postgres: `url` when the caller set the key, even
15
16
  * to undefined (`{ url: process.env.DATABASE_URL }`), and `postgres`.
@@ -184,7 +185,7 @@ export async function createDatabase(options = {}) {
184
185
  }
185
186
  const adapter = await resolveStorageAdapter(resolverOptions);
186
187
  await adapter.open(resolverOptions.openOptions);
187
- return adapter;
188
+ return options.hooks ? withHooks(adapter, options.hooks) : adapter;
188
189
  }
189
190
  /**
190
191
  * Connect to a remote database.
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/core/database.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ export { SqliteFileExporter } from '../exporters/SqliteFileExporter.js';
18
18
  export { PostgresExporter } from '../exporters/PostgresExporter.js';
19
19
  export { createStorageFeatures } from './contracts/features.js';
20
20
  export { isUniqueViolation } from '../shared/errors.js';
21
+ export { withHooks } from '../shared/withHooks.js';
21
22
  export { setStorageLogger, getStorageLogger, type StorageLogger } from '../shared/logger.js';
22
23
  export * from '../features/migrations/schemaMigrations.js';
23
24
  export * from '../features/auth/authJsAdapter.js';
@@ -1 +1 @@
1
- {"version":3,"file":"portable.d.ts","sourceRoot":"","sources":["../../src/core/portable.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC1F,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"portable.d.ts","sourceRoot":"","sources":["../../src/core/portable.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC1F,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC"}
@@ -18,6 +18,7 @@ export { SqliteFileExporter } from '../exporters/SqliteFileExporter.js';
18
18
  export { PostgresExporter } from '../exporters/PostgresExporter.js';
19
19
  export { createStorageFeatures } from './contracts/features.js';
20
20
  export { isUniqueViolation } from '../shared/errors.js';
21
+ export { withHooks } from '../shared/withHooks.js';
21
22
  export { setStorageLogger, getStorageLogger } from '../shared/logger.js';
22
23
  export * from '../features/migrations/schemaMigrations.js';
23
24
  export * from '../features/auth/authJsAdapter.js';
@@ -1 +1 @@
1
- {"version":3,"file":"portable.js","sourceRoot":"","sources":["../../src/core/portable.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAsB,MAAM,kBAAkB,CAAC;AAC1F,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"portable.js","sourceRoot":"","sources":["../../src/core/portable.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAsB,MAAM,kBAAkB,CAAC;AAC1F,cAAc,yCAAyC,CAAC;AACxD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -28,5 +28,6 @@ export { SqliteFileExporter } from './exporters/SqliteFileExporter.js';
28
28
  export { PostgresExporter } from './exporters/PostgresExporter.js';
29
29
  export { createStorageFeatures } from './core/contracts/features.js';
30
30
  export { isUniqueViolation } from './shared/errors.js';
31
+ export { withHooks } from './shared/withHooks.js';
31
32
  export { setStorageLogger, getStorageLogger, type StorageLogger } from './shared/logger.js';
32
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAQ9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAM5C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAMjF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAQ9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAM5C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAMjF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -42,5 +42,6 @@ export { SqliteFileExporter } from './exporters/SqliteFileExporter.js';
42
42
  export { PostgresExporter } from './exporters/PostgresExporter.js';
43
43
  export { createStorageFeatures } from './core/contracts/features.js';
44
44
  export { isUniqueViolation } from './shared/errors.js';
45
+ export { withHooks } from './shared/withHooks.js';
45
46
  export { setStorageLogger, getStorageLogger } from './shared/logger.js';
46
47
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,SAAS,CAAC;AAExB,8EAA8E;AAC9E,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,+EAA+E;AAC/E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAE9C,wEAAwE;AACxE,yDAAyD;AACzD,2HAA2H;AAC3H,mEAAmE;AAEnE,+EAA+E;AAC/E,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAE5C,uFAAuF;AACvF,sFAAsF;AAEtF,+EAA+E;AAC/E,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjF,6FAA6F;AAC7F,uGAAuG;AAEvG,iFAAiF;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAsB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,SAAS,CAAC;AAExB,8EAA8E;AAC9E,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,+EAA+E;AAC/E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAE9C,wEAAwE;AACxE,yDAAyD;AACzD,2HAA2H;AAC3H,mEAAmE;AAEnE,+EAA+E;AAC/E,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAE5C,uFAAuF;AACvF,sFAAsF;AAEtF,+EAA+E;AAC/E,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEjF,6FAA6F;AAC7F,uGAAuG;AAEvG,iFAAiF;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAsB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { StorageAdapter } from '../core/contracts/index.js';
2
+ import { type StorageHooks } from '../core/contracts/hooks.js';
3
+ /**
4
+ * The adapter with lifecycle hooks around its calls, on any adapter.
5
+ *
6
+ * - `onBeforeQuery` (get, all, exec) and `onBeforeWrite` (run) see the call's context, and return it, changed or
7
+ * not, to go on, or undefined to stop the call: a stopped get returns null, all an empty list, run no changes.
8
+ * - `onAfterQuery` can replace the result, and `onAfterWrite` sees it.
9
+ * - `onBeforeTransaction` can stop a transaction, and `onAfterTransaction` sees its outcome. The statements inside a
10
+ * transaction pass through the hooks too.
11
+ * - `onError` sees each failure and returns the error to throw, or undefined to swallow it.
12
+ *
13
+ * Everything else, the adapter's kind and its own methods (`withConnection` on PostgreSQL), reaches the adapter
14
+ * itself, and `instanceof` still names its class.
15
+ */
16
+ export declare function withHooks<A extends StorageAdapter>(adapter: A, hooks: StorageHooks): A;
17
+ //# sourceMappingURL=withHooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withHooks.d.ts","sourceRoot":"","sources":["../../src/shared/withHooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAuC,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAIL,KAAK,YAAY,EAGlB,MAAM,yBAAyB,CAAC;AAOjC;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,cAAc,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,CAgGtF"}
@@ -0,0 +1,108 @@
1
+ import { generateOperationId, } from '../core/contracts/hooks.js';
2
+ /** Errors the hooks of an inner call already handed to onError, so the transaction around it does not hand them again. */
3
+ const handled = new WeakSet();
4
+ const EMPTY_WRITE = { changes: 0, lastInsertRowid: null };
5
+ /**
6
+ * The adapter with lifecycle hooks around its calls, on any adapter.
7
+ *
8
+ * - `onBeforeQuery` (get, all, exec) and `onBeforeWrite` (run) see the call's context, and return it, changed or
9
+ * not, to go on, or undefined to stop the call: a stopped get returns null, all an empty list, run no changes.
10
+ * - `onAfterQuery` can replace the result, and `onAfterWrite` sees it.
11
+ * - `onBeforeTransaction` can stop a transaction, and `onAfterTransaction` sees its outcome. The statements inside a
12
+ * transaction pass through the hooks too.
13
+ * - `onError` sees each failure and returns the error to throw, or undefined to swallow it.
14
+ *
15
+ * Everything else, the adapter's kind and its own methods (`withConnection` on PostgreSQL), reaches the adapter
16
+ * itself, and `instanceof` still names its class.
17
+ */
18
+ export function withHooks(adapter, hooks) {
19
+ const context = (operation) => ({
20
+ operationId: generateOperationId(),
21
+ operation,
22
+ startTime: Date.now(),
23
+ adapterKind: adapter.kind,
24
+ });
25
+ /** Hands `error` to onError; throws what it returns, or returns when it swallows the error. */
26
+ const fail = async (error, at) => {
27
+ const err = error instanceof Error ? error : new Error(String(error));
28
+ if (!hooks.onError || handled.has(err))
29
+ throw err;
30
+ const replaced = await hooks.onError(err, at);
31
+ if (!replaced)
32
+ return;
33
+ handled.add(replaced);
34
+ throw replaced;
35
+ };
36
+ const query = async (operation, statement, parameters, call, stopped) => {
37
+ let at = { ...context(operation), statement, parameters };
38
+ if (hooks.onBeforeQuery) {
39
+ const next = await hooks.onBeforeQuery(at);
40
+ if (!next)
41
+ return stopped;
42
+ at = next;
43
+ }
44
+ try {
45
+ const result = await call(at.statement, at.parameters);
46
+ if (!hooks.onAfterQuery)
47
+ return result;
48
+ const replaced = await hooks.onAfterQuery(at, result);
49
+ return replaced === undefined ? result : replaced;
50
+ }
51
+ catch (error) {
52
+ await fail(error, at);
53
+ return stopped;
54
+ }
55
+ };
56
+ const overrides = {
57
+ get: (statement, parameters) => query('get', statement, parameters, (s, p) => adapter.get(s, p), null),
58
+ all: (statement, parameters) => query('all', statement, parameters, (s, p) => adapter.all(s, p), []),
59
+ exec: (script) => query('exec', script, undefined, (s) => adapter.exec(s), undefined),
60
+ run: async (statement, parameters) => {
61
+ let at = { ...context('run'), statement, parameters };
62
+ if (hooks.onBeforeWrite) {
63
+ const next = await hooks.onBeforeWrite(at);
64
+ if (!next)
65
+ return EMPTY_WRITE;
66
+ at = next;
67
+ }
68
+ try {
69
+ const result = await adapter.run(at.statement, at.parameters);
70
+ await hooks.onAfterWrite?.(at, result);
71
+ return result;
72
+ }
73
+ catch (error) {
74
+ await fail(error, at);
75
+ return EMPTY_WRITE;
76
+ }
77
+ },
78
+ transaction: async (fn) => {
79
+ let at = { ...context('transaction') };
80
+ if (hooks.onBeforeTransaction) {
81
+ const next = await hooks.onBeforeTransaction(at);
82
+ if (!next)
83
+ return undefined;
84
+ at = next;
85
+ }
86
+ try {
87
+ const result = await adapter.transaction((trx) => fn(withHooks(trx, hooks)));
88
+ await hooks.onAfterTransaction?.({ ...at, outcome: 'committed' });
89
+ return result;
90
+ }
91
+ catch (error) {
92
+ await hooks.onAfterTransaction?.({ ...at, outcome: 'rolled_back' });
93
+ await fail(error, at);
94
+ return undefined;
95
+ }
96
+ },
97
+ };
98
+ return new Proxy(adapter, {
99
+ get(target, property) {
100
+ if (Object.prototype.hasOwnProperty.call(overrides, property)) {
101
+ return overrides[property];
102
+ }
103
+ const value = Reflect.get(target, property, target);
104
+ return typeof value === 'function' ? value.bind(target) : value;
105
+ },
106
+ });
107
+ }
108
+ //# sourceMappingURL=withHooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withHooks.js","sourceRoot":"","sources":["../../src/shared/withHooks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@framers/sql-storage-adapter",
3
- "version": "0.7.6",
3
+ "version": "0.7.7",
4
4
  "description": "Robust cross-platform SQL storage abstraction with automatic fallbacks and runtime detection",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/index.js",