uql-orm 0.14.0 → 0.14.1
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/CHANGELOG.md +29 -0
- package/dist/context/context.browser.d.ts +2 -0
- package/dist/context/context.browser.d.ts.map +1 -1
- package/dist/context/context.browser.js +5 -0
- package/dist/context/context.browser.js.map +1 -1
- package/dist/context/context.d.ts +14 -0
- package/dist/context/context.d.ts.map +1 -1
- package/dist/context/context.js +17 -0
- package/dist/context/context.js.map +1 -1
- package/dist/querier/abstractQuerierPool.d.ts +3 -3
- package/dist/querier/abstractQuerierPool.d.ts.map +1 -1
- package/dist/querier/abstractQuerierPool.js +5 -3
- package/dist/querier/abstractQuerierPool.js.map +1 -1
- package/dist/type/querierPool.d.ts +13 -2
- package/dist/type/querierPool.d.ts.map +1 -1
- package/dist/util/dialect.util.d.ts +3 -1
- package/dist/util/dialect.util.d.ts.map +1 -1
- package/dist/util/dialect.util.js +7 -2
- package/dist/util/dialect.util.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,35 @@ All notable changes to this project will be documented in this file. Please add
|
|
|
4
4
|
|
|
5
5
|
date format is [yyyy-mm-dd]
|
|
6
6
|
|
|
7
|
+
## [0.14.1] - 2026-07-09
|
|
8
|
+
|
|
9
|
+
Context ergonomics for event-driven apps (background pipelines, queue consumers, webhooks) - shaped by adopting the multi-tenancy filters in a real multimedia app.
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
- **`captureContext()`** - carry the ambient context across event boundaries. `AsyncLocalStorage` does not propagate into emitter callbacks, timers, or queued work, so capture it once and replay it where the callback fires:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
const scoped = captureContext(); // e.g. when a session/queue item is created inside a scoped request
|
|
17
|
+
emitter.on('chunk', (chunk) => scoped(() => saveChunk(chunk))); // runs with the captured context
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- **Context per unit of work** - `pool.withQuerier(callback, { context })` and `pool.transaction(callback, { context })` run one unit of work under the given context. Same mechanism as `withContext`, picked by scope: `withContext` scopes a span (a request, a whole job); `{ context }` scopes a single pool call - flat and explicit for pipeline code that knows its tenant locally:
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
await pool.withQuerier((q) => q.findMany(Invoice, {}), { context: { tenantId } });
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- **Trusted cross-tenant work with security filters** - a filter condition may now return `{}` to mean "resolved: no restriction", so maintenance jobs that must span all tenants (startup recovery, cleanup sweeps) can run under an explicit system context. A missing context still fails closed, and previously a `{}` condition generated broken SQL:
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
condition: (ctx) => (ctx?.system ? {} : ctx?.tenantId != null ? { companyId: ctx.tenantId } : undefined),
|
|
30
|
+
|
|
31
|
+
await withContext({ system: true }, () => recoverStaleJobs()); // spans every tenant, deliberately
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- **Auto-fill the tenant column on insert** (documented pattern, works out of the box): `@Field({ onInsert: () => getContext()?.tenantId })` fills the field from the ambient context when the payload does not provide it - explicit values still win.
|
|
35
|
+
|
|
7
36
|
## [0.14.0] - 2026-07-08
|
|
8
37
|
|
|
9
38
|
Query filters, multi-tenancy / row-level security, and soft-delete restore. Upgrade straight from 0.12.0 - 0.13.0 was pulled before anyone could install it (its root import dragged `node:async_hooks` into browser bundles), so 0.14.0 is the first published build of these features and bundles cleanly on the client again.
|
|
@@ -4,4 +4,6 @@ export * from './securityError.js';
|
|
|
4
4
|
export declare function withContext<T>(context: UqlContext, callback: () => T): T;
|
|
5
5
|
/** The ambient context set by the nearest enclosing {@link withContext}, or `undefined`. */
|
|
6
6
|
export declare function getContext(): UqlContext | undefined;
|
|
7
|
+
/** Captures the current context and returns a runner that re-establishes it later. See `context.ts`. */
|
|
8
|
+
export declare function captureContext(): <T>(callback: () => T) => T;
|
|
7
9
|
//# sourceMappingURL=context.browser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.browser.d.ts","sourceRoot":"","sources":["../../src/context/context.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,cAAc,oBAAoB,CAAC;AAcnC,oGAAoG;AACpG,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAQxE;AAED,4FAA4F;AAC5F,wBAAgB,UAAU,IAAI,UAAU,GAAG,SAAS,CAEnD"}
|
|
1
|
+
{"version":3,"file":"context.browser.d.ts","sourceRoot":"","sources":["../../src/context/context.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,cAAc,oBAAoB,CAAC;AAcnC,oGAAoG;AACpG,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAQxE;AAED,4FAA4F;AAC5F,wBAAgB,UAAU,IAAI,UAAU,GAAG,SAAS,CAEnD;AAED,wGAAwG;AACxG,wBAAgB,cAAc,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAG5D"}
|
|
@@ -25,4 +25,9 @@ export function withContext(context, callback) {
|
|
|
25
25
|
export function getContext() {
|
|
26
26
|
return current;
|
|
27
27
|
}
|
|
28
|
+
/** Captures the current context and returns a runner that re-establishes it later. See `context.ts`. */
|
|
29
|
+
export function captureContext() {
|
|
30
|
+
const context = getContext();
|
|
31
|
+
return (callback) => (context ? withContext(context, callback) : callback());
|
|
32
|
+
}
|
|
28
33
|
//# sourceMappingURL=context.browser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.browser.js","sourceRoot":"","sources":["../../src/context/context.browser.ts"],"names":[],"mappings":"AAEA,cAAc,oBAAoB,CAAC;AAEnC;;;;;;;;;GASG;AACH,IAAI,OAA+B,CAAC;AAEpC,oGAAoG;AACpG,MAAM,UAAU,WAAW,CAAI,OAAmB,EAAE,QAAiB;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC;IACzB,OAAO,GAAG,OAAO,CAAC;IAClB,IAAI,CAAC;QACH,OAAO,QAAQ,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,QAAQ,CAAC;IACrB,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"context.browser.js","sourceRoot":"","sources":["../../src/context/context.browser.ts"],"names":[],"mappings":"AAEA,cAAc,oBAAoB,CAAC;AAEnC;;;;;;;;;GASG;AACH,IAAI,OAA+B,CAAC;AAEpC,oGAAoG;AACpG,MAAM,UAAU,WAAW,CAAI,OAAmB,EAAE,QAAiB;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC;IACzB,OAAO,GAAG,OAAO,CAAC;IAClB,IAAI,CAAC;QACH,OAAO,QAAQ,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,QAAQ,CAAC;IACrB,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -12,4 +12,18 @@ export * from './securityError.js';
|
|
|
12
12
|
export declare function withContext<T>(context: UqlContext, callback: () => T): T;
|
|
13
13
|
/** The ambient context set by the nearest enclosing {@link withContext}, or `undefined`. */
|
|
14
14
|
export declare function getContext(): UqlContext | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Captures the current ambient context and returns a runner that re-establishes it later. Use it to
|
|
17
|
+
* carry the context across event boundaries where `AsyncLocalStorage` does not propagate - emitter
|
|
18
|
+
* callbacks, timers, and queued work run on their own async ticks, so a context set by
|
|
19
|
+
* {@link withContext} is not visible inside them unless replayed:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* const scoped = captureContext(); // e.g. inside a scoped request or job
|
|
23
|
+
* emitter.on('chunk', (chunk) => scoped(() => saveChunk(chunk))); // runs with that context
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* When no context is active at capture time, the runner just invokes the callback.
|
|
27
|
+
*/
|
|
28
|
+
export declare function captureContext(): <T>(callback: () => T) => T;
|
|
15
29
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,cAAc,oBAAoB,CAAC;AAKnC;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAExE;AAED,4FAA4F;AAC5F,wBAAgB,UAAU,IAAI,UAAU,GAAG,SAAS,CAEnD"}
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,cAAc,oBAAoB,CAAC;AAKnC;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAExE;AAED,4FAA4F;AAC5F,wBAAgB,UAAU,IAAI,UAAU,GAAG,SAAS,CAEnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAG5D"}
|
package/dist/context/context.js
CHANGED
|
@@ -18,4 +18,21 @@ export function withContext(context, callback) {
|
|
|
18
18
|
export function getContext() {
|
|
19
19
|
return contextStorage.getStore();
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Captures the current ambient context and returns a runner that re-establishes it later. Use it to
|
|
23
|
+
* carry the context across event boundaries where `AsyncLocalStorage` does not propagate - emitter
|
|
24
|
+
* callbacks, timers, and queued work run on their own async ticks, so a context set by
|
|
25
|
+
* {@link withContext} is not visible inside them unless replayed:
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* const scoped = captureContext(); // e.g. inside a scoped request or job
|
|
29
|
+
* emitter.on('chunk', (chunk) => scoped(() => saveChunk(chunk))); // runs with that context
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* When no context is active at capture time, the runner just invokes the callback.
|
|
33
|
+
*/
|
|
34
|
+
export function captureContext() {
|
|
35
|
+
const context = getContext();
|
|
36
|
+
return (callback) => (context ? withContext(context, callback) : callback());
|
|
37
|
+
}
|
|
21
38
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,cAAc,oBAAoB,CAAC;AAEnC,gGAAgG;AAChG,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAc,CAAC;AAE3D;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAI,OAAmB,EAAE,QAAiB;IACnE,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,UAAU;IACxB,OAAO,cAAc,CAAC,QAAQ,EAAE,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,cAAc,oBAAoB,CAAC;AAEnC,gGAAgG;AAChG,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAc,CAAC;AAE3D;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAI,OAAmB,EAAE,QAAiB;IACnE,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,UAAU;IACxB,OAAO,cAAc,CAAC,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AbstractDialect } from '../dialect/index.js';
|
|
2
|
-
import type { ExtraOptions, Querier, QuerierPool, TransactionOptions } from '../type/index.js';
|
|
2
|
+
import type { ExtraOptions, PoolRunOptions, Querier, QuerierPool, TransactionOptions } from '../type/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* Base pool: dialect id and behavior come only from the `dialect` instance (see {@link QuerierPool}).
|
|
5
5
|
*/
|
|
@@ -14,11 +14,11 @@ export declare abstract class AbstractQuerierPool<D extends AbstractDialect, Q e
|
|
|
14
14
|
/**
|
|
15
15
|
* get a querier from the pool and run the given callback inside a transaction.
|
|
16
16
|
*/
|
|
17
|
-
transaction<T>(callback: (querier: Q) => Promise<T>, opts?: TransactionOptions): Promise<T>;
|
|
17
|
+
transaction<T>(callback: (querier: Q) => Promise<T>, opts?: TransactionOptions & PoolRunOptions): Promise<T>;
|
|
18
18
|
/**
|
|
19
19
|
* get a querier from the pool, run the given callback, and release the querier.
|
|
20
20
|
*/
|
|
21
|
-
withQuerier<T>(callback: (querier: Q) => Promise<T
|
|
21
|
+
withQuerier<T>(callback: (querier: Q) => Promise<T>, opts?: PoolRunOptions): Promise<T>;
|
|
22
22
|
/**
|
|
23
23
|
* end the pool.
|
|
24
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstractQuerierPool.d.ts","sourceRoot":"","sources":["../../src/querier/abstractQuerierPool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"abstractQuerierPool.d.ts","sourceRoot":"","sources":["../../src/querier/abstractQuerierPool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE/G;;GAEG;AACH,8BAAsB,mBAAmB,CAAC,CAAC,SAAS,eAAe,EAAE,CAAC,SAAS,OAAO,CAAE,YAAW,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAEhH,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY;IAF/B,YACW,OAAO,EAAE,CAAC,EACV,KAAK,CAAC,EAAE,YAAY,YAAA,EAC3B;IAEJ;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAElC;;OAEG;IACG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAIjH;IAED;;OAEG;IACG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAO5F;IAED;;OAEG;IACH,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { withContext } from '../context/context.js';
|
|
1
2
|
/**
|
|
2
3
|
* Base pool: dialect id and behavior come only from the `dialect` instance (see {@link QuerierPool}).
|
|
3
4
|
*/
|
|
@@ -13,15 +14,16 @@ export class AbstractQuerierPool {
|
|
|
13
14
|
*/
|
|
14
15
|
async transaction(callback, opts) {
|
|
15
16
|
const querier = await this.getQuerier();
|
|
16
|
-
|
|
17
|
+
const run = () => querier.transaction(() => callback(querier), opts);
|
|
18
|
+
return opts?.context ? withContext(opts.context, run) : run();
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* get a querier from the pool, run the given callback, and release the querier.
|
|
20
22
|
*/
|
|
21
|
-
async withQuerier(callback) {
|
|
23
|
+
async withQuerier(callback, opts) {
|
|
22
24
|
const querier = await this.getQuerier();
|
|
23
25
|
try {
|
|
24
|
-
return await callback(querier);
|
|
26
|
+
return opts?.context ? await withContext(opts.context, () => callback(querier)) : await callback(querier);
|
|
25
27
|
}
|
|
26
28
|
finally {
|
|
27
29
|
await querier.release();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstractQuerierPool.js","sourceRoot":"","sources":["../../src/querier/abstractQuerierPool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"abstractQuerierPool.js","sourceRoot":"","sources":["../../src/querier/abstractQuerierPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD;;GAEG;AACH,MAAM,OAAgB,mBAAmB;IAE5B,OAAO;IACP,KAAK;IAFhB,YACW,OAAU,EACV,KAAoB;uBADpB,OAAO;qBACP,KAAK;IACb,CAAC;IAOJ;;OAEG;IACH,KAAK,CAAC,WAAW,CAAI,QAAoC,EAAE,IAA0C;QACnG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;QACrE,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAI,QAAoC,EAAE,IAAqB;QAC9E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5G,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;CAMF"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import type { AbstractDialect } from '../dialect/index.js';
|
|
2
2
|
import type { ExtraOptions, Querier, TransactionOptions } from './querier.js';
|
|
3
|
+
import type { UqlContext } from './query.js';
|
|
4
|
+
/** Options for a pool-level unit of work ({@link QuerierPool.withQuerier} / {@link QuerierPool.transaction}). */
|
|
5
|
+
export interface PoolRunOptions {
|
|
6
|
+
/**
|
|
7
|
+
* {@link UqlContext} to run the callback under, so parameterized/`security` filters scope every
|
|
8
|
+
* query inside it. Same mechanism as `withContext`, scoped to this unit of work - ideal where no
|
|
9
|
+
* ambient request context exists (background pipelines, queue consumers, webhooks) and the tenant
|
|
10
|
+
* is known locally: `pool.withQuerier((q) => q.findMany(Invoice, {}), { context: { tenantId } })`.
|
|
11
|
+
*/
|
|
12
|
+
readonly context?: UqlContext;
|
|
13
|
+
}
|
|
3
14
|
/**
|
|
4
15
|
* Querier pool. Read the dialect id via `pool.dialect.dialectName` (see {@link AbstractDialect.dialectName}); queriers expose the same on `querier.dialect`.
|
|
5
16
|
*
|
|
@@ -29,11 +40,11 @@ export interface QuerierPool<Q extends Querier = Querier, D extends AbstractDial
|
|
|
29
40
|
/**
|
|
30
41
|
* get a querier from the pool and run the given callback inside a transaction.
|
|
31
42
|
*/
|
|
32
|
-
transaction<T>(callback: (querier: Q) => Promise<T>, opts?: TransactionOptions): Promise<T>;
|
|
43
|
+
transaction<T>(callback: (querier: Q) => Promise<T>, opts?: TransactionOptions & PoolRunOptions): Promise<T>;
|
|
33
44
|
/**
|
|
34
45
|
* get a querier from the pool, run the given callback, and release the querier.
|
|
35
46
|
*/
|
|
36
|
-
withQuerier<T>(callback: (querier: Q) => Promise<T
|
|
47
|
+
withQuerier<T>(callback: (querier: Q) => Promise<T>, opts?: PoolRunOptions): Promise<T>;
|
|
37
48
|
/**
|
|
38
49
|
* end the pool.
|
|
39
50
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"querierPool.d.ts","sourceRoot":"","sources":["../../src/type/querierPool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"querierPool.d.ts","sourceRoot":"","sources":["../../src/type/querierPool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,iHAAiH;AACjH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,CAAC,SAAS,eAAe,GAAG,eAAe;IACnG;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAE9B;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IAEvC;;OAEG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7G;;OAEG;IACH,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAExF;;OAEG;IACH,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,0EAA0E;AAE1E,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEpF,yCAAyC;AAEzC,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAExF;;OAEG;IACH,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CACtE"}
|
|
@@ -32,7 +32,9 @@ export declare function withoutSoftDeleteFilter(filters: QueryOptions['filters']
|
|
|
32
32
|
*
|
|
33
33
|
* `security` filters are always active (bypass is ignored) and AND-merged, so a client `$where` on the
|
|
34
34
|
* same field can't override them. A security condition that returns `undefined` fails the query closed
|
|
35
|
-
* (throws {@link UqlSecurityError}) unless its `onMissing` is `skip
|
|
35
|
+
* (throws {@link UqlSecurityError}) unless its `onMissing` is `skip`; one that returns an empty object
|
|
36
|
+
* (`{}`) resolved to "no restriction" and adds nothing - the escape hatch for trusted cross-tenant
|
|
37
|
+
* work (e.g. a maintenance job running under a `system` context).
|
|
36
38
|
*/
|
|
37
39
|
export declare function applyFilters<E>(meta: EntityMeta<E>, whereMap: QueryWhereMap<E>, opts?: QueryOptions): QueryWhereMap<E>;
|
|
38
40
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialect.util.d.ts","sourceRoot":"","sources":["../../src/util/dialect.util.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,YAAY,EAIjB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,WAAW,EAEjB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;AAE5E,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAK3G;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,kDAEzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,kDAErD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,CAWpG;AAED,wBAAgB,6BAA6B,CAAC,CAAC,EAC7C,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,WAAW,GAClB,WAAW,CAAC,CAAC,CAAC,EAAE,CAMlB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,OAAO,CAKhG;AAED,wBAAgB,6BAA6B,CAAC,CAAC,EAC7C,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EACvB,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GACxB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAwBf;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAElF;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAEzE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,MAAM,GAAE,UAAU,CAAC,CAAC,CAAM,EAC1B,MAAM,GAAE,UAAU,CAAC,CAAC,CAAM,GACzB,UAAU,CAAC,CAAC,CAAC,CAOf;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,GAAE,UAAU,CAAC,CAAC,CAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAUzG;AAED,kHAAkH;AAClH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAEjG;AAED
|
|
1
|
+
{"version":3,"file":"dialect.util.d.ts","sourceRoot":"","sources":["../../src/util/dialect.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getContext, UqlSecurityError } from '../context/context.js';
|
|
2
2
|
import { QueryRaw, } from '../type/index.js';
|
|
3
|
-
import { getFieldKeys, getKeys } from './object.util.js';
|
|
3
|
+
import { getFieldKeys, getKeys, hasKeys } from './object.util.js';
|
|
4
4
|
export function filterFieldKeys(meta, payload, callbackKey) {
|
|
5
5
|
return getKeys(payload).filter((key) => {
|
|
6
6
|
const fieldOpts = meta.fields[key];
|
|
@@ -109,7 +109,9 @@ export function withoutSoftDeleteFilter(filters) {
|
|
|
109
109
|
*
|
|
110
110
|
* `security` filters are always active (bypass is ignored) and AND-merged, so a client `$where` on the
|
|
111
111
|
* same field can't override them. A security condition that returns `undefined` fails the query closed
|
|
112
|
-
* (throws {@link UqlSecurityError}) unless its `onMissing` is `skip
|
|
112
|
+
* (throws {@link UqlSecurityError}) unless its `onMissing` is `skip`; one that returns an empty object
|
|
113
|
+
* (`{}`) resolved to "no restriction" and adds nothing - the escape hatch for trusted cross-tenant
|
|
114
|
+
* work (e.g. a maintenance job running under a `system` context).
|
|
113
115
|
*/
|
|
114
116
|
export function applyFilters(meta, whereMap, opts) {
|
|
115
117
|
if (!meta.filters) {
|
|
@@ -143,6 +145,9 @@ export function applyFilters(meta, whereMap, opts) {
|
|
|
143
145
|
continue;
|
|
144
146
|
}
|
|
145
147
|
const conditionMap = buildQueryWhereAsMap(meta, condition);
|
|
148
|
+
if (!hasKeys(conditionMap)) {
|
|
149
|
+
continue; // resolved to "no restriction" (e.g. a trusted system context) - nothing to merge
|
|
150
|
+
}
|
|
146
151
|
if (filter.security) {
|
|
147
152
|
securityConditions.push(conditionMap);
|
|
148
153
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialect.util.js","sourceRoot":"","sources":["../../src/util/dialect.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAaL,QAAQ,GAQT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"dialect.util.js","sourceRoot":"","sources":["../../src/util/dialect.util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"homepage": "https://uql-orm.dev",
|
|
4
4
|
"description": "Fast, type-safe TypeScript ORM - one API for every database",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "0.14.
|
|
6
|
+
"version": "0.14.1",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "./dist/index.js",
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
@@ -175,5 +175,5 @@
|
|
|
175
175
|
"publishConfig": {
|
|
176
176
|
"access": "public"
|
|
177
177
|
},
|
|
178
|
-
"gitHead": "
|
|
178
|
+
"gitHead": "5d641abb7d6ac2137a0edba819e5d5b638d0e122"
|
|
179
179
|
}
|