catalog-backend: tweak Context API

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2021-04-28 10:30:03 +02:00
parent bd231a3d63
commit 065e532aad
4 changed files with 10 additions and 11 deletions
@@ -19,7 +19,7 @@ import { Context, ContextKey } from './types';
/**
* A base Context implementation that does not hold any value.
*/
export class BaseContext implements Context {
export class BackgroundContext implements Context {
getContextValue<T>(key: ContextKey<T>): T {
return key.defaultValue;
}
@@ -14,15 +14,14 @@
* limitations under the License.
*/
import { BaseContext } from './BaseContext';
import { Context, ContextKey } from './types';
/**
* A Context implementation that holds a single value, optionally extending an existing context.
*/
export class ContextWithValue implements Context {
static create(key: ContextKey<unknown>, value: unknown, parent?: Context) {
return new ContextWithValue(parent ?? new BaseContext(), key, value);
static create(parent: Context, key: ContextKey<unknown>, value: unknown) {
return new ContextWithValue(parent, key, value);
}
private constructor(
@@ -23,14 +23,14 @@ const transactionContextKey = new ContextKey<Knex.Transaction | undefined>(
);
/**
* TransactionContext handles the wrapping of a knex transaction in a Context.
* TransactionValue handles the wrapping of a knex transaction in a Context.
*/
export class TransactionContext {
static create(tx: Knex.Transaction, parent?: Context) {
return ContextWithValue.create(transactionContextKey, tx, parent);
export class TransactionValue {
static in(parent: Context, tx: Knex.Transaction) {
return ContextWithValue.create(parent, transactionContextKey, tx);
}
static getTransaction(context: Context): Knex.Transaction {
static from(context: Context): Knex.Transaction {
const transaction = context.getContextValue(transactionContextKey);
if (!transaction) {
throw new Error(`No transaction available in context`);
@@ -14,8 +14,8 @@
* limitations under the License.
*/
export { BaseContext } from './BaseContext';
export { BackgroundContext } from './BackgroundContext';
export { ContextWithValue } from './ContextWithValue';
export { TransactionContext } from './TransactionContext';
export { TransactionValue } from './TransactionValue';
export { ContextKey } from './types';
export type { Context } from './types';