import { type EmptyFields } from "@tailor-platform/erp-kit/core"; import { type TailorAnyDBField } from "@tailor-platform/sdk"; import type { TailorDBInsertable } from "@tailor-platform/sdk/kysely"; import { activateCategory } from "./command/activateCategory.generated"; import { activateCurrency } from "./command/activateCurrency.generated"; import { activateUnit } from "./command/activateUnit.generated"; import { createCategory } from "./command/createCategory.generated"; import { createCurrency } from "./command/createCurrency.generated"; import { createExchangeRate } from "./command/createExchangeRate.generated"; import { createUnit } from "./command/createUnit.generated"; import { deactivateCategory } from "./command/deactivateCategory.generated"; import { deactivateCurrency } from "./command/deactivateCurrency.generated"; import { deactivateUnit } from "./command/deactivateUnit.generated"; import { setReferenceUnit } from "./command/setReferenceUnit.generated"; import type { CreateCurrencyTypeParams } from "./db/currency"; import { createCurrencyType } from "./db/currency"; import type { CreateExchangeRateTypeParams } from "./db/exchangeRate"; import { createExchangeRateType } from "./db/exchangeRate"; import type { CreateUnitTypeParams } from "./db/unit"; import { createUnitType } from "./db/unit"; import type { CreateUoMCategoryTypeParams } from "./db/uomCategory"; import { createUoMCategoryType } from "./db/uomCategory"; import { convertAmount } from "./query/convertAmount.generated"; import { convertQuantity } from "./query/convertQuantity.generated"; import { getBaseCurrency } from "./query/getBaseCurrency.generated"; import { getCurrency } from "./query/getCurrency.generated"; import { getUnit } from "./query/getUnit.generated"; import { getUoMCategory } from "./query/getUoMCategory.generated"; import { listUnitsByCategory } from "./query/listUnitsByCategory.generated"; export interface DefineModuleParams< CatF extends Record, UnitF extends Record, CurF extends Record, ERF extends Record, > { uomCategory?: CreateUoMCategoryTypeParams; unit?: CreateUnitTypeParams; currency?: CreateCurrencyTypeParams; exchangeRate?: CreateExchangeRateTypeParams; } /* @__NO_SIDE_EFFECTS__ */ export const defineModule = < const CatF extends Record = EmptyFields, const UnitF extends Record = EmptyFields, const CurF extends Record = EmptyFields, const ERF extends Record = EmptyFields, >( params: DefineModuleParams, ) => { const uomCategory = createUoMCategoryType(params.uomCategory ?? {}); const unit = createUnitType(params.unit ?? {}); const currency = createCurrencyType(params.currency ?? {}); const exchangeRate = createExchangeRateType(params.exchangeRate ?? {}); return { db: { uomCategory, unit, currency, exchangeRate }, commands: { createCategory: createCategory, TailorDBInsertable>(), createCurrency: createCurrency>(), createUnit: createUnit>(), createExchangeRate: createExchangeRate>(), activateCategory: activateCategory(), deactivateCategory: deactivateCategory(), activateUnit: activateUnit(), deactivateUnit: deactivateUnit(), setReferenceUnit: setReferenceUnit(), activateCurrency: activateCurrency(), deactivateCurrency: deactivateCurrency(), }, queries: { getUnit, getCurrency, getUoMCategory, getBaseCurrency, listUnitsByCategory, convertQuantity, convertAmount, }, }; }; /** EmptyFields-instantiated alias — use instead of `ReturnType`, which widens field generics to their constraint. */ export type PrimitivesModule = ReturnType< typeof defineModule >;