separate types

This commit is contained in:
Oli Sturm
2026-04-24 18:15:22 +01:00
parent b1ac745d70
commit d0c9466170
13 changed files with 178 additions and 221 deletions
+31
View File
@@ -0,0 +1,31 @@
import { Result } from '../library/result.js';
import { Account, AccountError } from '../domain/account.js';
export type Repository = {
loadAccount: (id: string) => Result<Account, AccountError>;
saveAccount: (account: Account) => Result<Account, AccountError>;
};
export type AppErrorRepositoryCreationFailed = {
type: 'RepositoryCreationFailed';
message: string;
};
export type AppErrorInnerAccountError = {
type: 'InnerAccountError';
innerError: AccountError;
};
export type AppError =
| AppErrorRepositoryCreationFailed
| AppErrorInnerAccountError;
export declare const repositoryCreationFailed: (
message: string
) => AppErrorRepositoryCreationFailed;
export declare const innerAccountError: (
innerError: AccountError
) => AppErrorInnerAccountError;
export declare const createInMemoryRepository: () => Repository;
-31
View File
@@ -2,46 +2,19 @@ import { ok, fail } from '../library/result.js';
import { logReturn } from '../library/logging.js';
import { accountNotFound } from '../domain/account.js';
/**
* @typedef {Object} Repository
* @property {(id: string) => import('../library/result.js').Result<import('../domain/account.js').Account, import('../domain/account.js').AccountError>} loadAccount
* @property {(account: import('../domain/account.js').Account) => import('../library/result.js').Result<import('../domain/account.js').Account, import('../domain/account.js').AccountError>} saveAccount
*/
/** @typedef {{ type: 'RepositoryCreationFailed', message: string }} AppErrorRepositoryCreationFailed */
/** @typedef {{ type: 'InnerAccountError', innerError: import('../domain/account.js').AccountError }} AppErrorInnerAccountError */
/** @typedef {AppErrorRepositoryCreationFailed | AppErrorInnerAccountError} AppError */
/**
* @param {string} message
* @returns {AppErrorRepositoryCreationFailed}
*/
export const repositoryCreationFailed = (message) => ({
type: 'RepositoryCreationFailed',
message,
});
/**
* @param {import('../domain/account.js').AccountError} innerError
* @returns {AppErrorInnerAccountError}
*/
export const innerAccountError = (innerError) => ({
type: 'InnerAccountError',
innerError,
});
/**
* @returns {Repository}
*/
export const createInMemoryRepository = () => {
/** @type {Map<string, import('../domain/account.js').Account>} */
const store = new Map();
/**
* @param {string} id
* @returns {import('../library/result.js').Result<import('../domain/account.js').Account, import('../domain/account.js').AccountError>}
*/
const getById = (id) =>
store.has(id)
? logReturn(
@@ -53,10 +26,6 @@ export const createInMemoryRepository = () => {
fail(accountNotFound(id))
);
/**
* @param {import('../domain/account.js').Account} account
* @returns {import('../library/result.js').Result<import('../domain/account.js').Account, import('../domain/account.js').AccountError>}
*/
const save = (account) => {
store.set(account.id, account);
return logReturn(