UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

1 lines 4.58 kB
{"version":3,"file":"service-wrapper.mjs","names":[],"sources":["../../../src/utils/services/service-wrapper.ts"],"sourcesContent":["import { copy } from \"../../libs/i18n/index.js\";\nimport logger from \"../../libs/logger/index.js\";\nimport type {\n\tServiceContext,\n\tServiceFn,\n\tServiceResponse,\n\tServiceWrapperConfig,\n} from \"./types.js\";\nimport mergeServiceError from \"./utils/merge-errors.js\";\nimport TransactionError from \"./utils/transaction-error.js\";\n\nconst serviceWrapper =\n\t<T extends unknown[], R>(\n\t\tfn: ServiceFn<T, R>,\n\t\twrapperConfig: ServiceWrapperConfig,\n\t) =>\n\tasync (service: ServiceContext, ...args: T): ServiceResponse<R> => {\n\t\ttry {\n\t\t\t//* Validate input if a schema is provided\n\t\t\tif (wrapperConfig.schema) {\n\t\t\t\tconst result = await wrapperConfig.schema.safeParseAsync(\n\t\t\t\t\targs[wrapperConfig.schemaArgIndex ?? 0],\n\t\t\t\t);\n\t\t\t\tif (result.success === false) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\terror: mergeServiceError(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"validation\",\n\t\t\t\t\t\t\t\t// message: result.error.message,\n\t\t\t\t\t\t\t\tzod: result.error,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\twrapperConfig.defaultError,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tdata: undefined,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//* If transactions are not enabled, unsupported by the DB, or the service is already in a parent transaction\n\t\t\tif (\n\t\t\t\t!wrapperConfig.transaction ||\n\t\t\t\t!service.config.db.supports(\"transaction\") ||\n\t\t\t\tservice.db.client.isTransaction\n\t\t\t) {\n\t\t\t\tconst result = await fn(service, ...args);\n\t\t\t\tif (result.error)\n\t\t\t\t\treturn {\n\t\t\t\t\t\terror: mergeServiceError(result.error, wrapperConfig.defaultError),\n\t\t\t\t\t\tdata: undefined,\n\t\t\t\t\t};\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t//* If transactions are enabled\n\t\t\treturn await service.db.client.transaction().execute(async (tx) => {\n\t\t\t\tconst result = await fn(\n\t\t\t\t\t{\n\t\t\t\t\t\t...service,\n\t\t\t\t\t\tdb: {\n\t\t\t\t\t\t\tclient: tx,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t...args,\n\t\t\t\t);\n\t\t\t\tif (result.error) {\n\t\t\t\t\t//! Kysely needs function to throw for transaction to rollback !\\\\\n\t\t\t\t\tthrow new TransactionError(result.error);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (wrapperConfig.logError) {\n\t\t\t\tlogger.error({\n\t\t\t\t\terror,\n\t\t\t\t\tevent: \"service.execution.failed\",\n\t\t\t\t\tmessage: \"Service execution failed\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\terrorMessage:\n\t\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t\t? error.message\n\t\t\t\t\t\t\t\t: \"An unknown error occurred\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (error instanceof TransactionError) {\n\t\t\t\treturn {\n\t\t\t\t\terror: mergeServiceError(error.error, wrapperConfig.defaultError),\n\t\t\t\t\tdata: undefined,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (error instanceof Error) {\n\t\t\t\treturn {\n\t\t\t\t\terror: mergeServiceError(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessage: copy(\"server:core.errors.default.message\"),\n\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t},\n\t\t\t\t\t\twrapperConfig.defaultError,\n\t\t\t\t\t),\n\t\t\t\t\tdata: undefined,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\terror: mergeServiceError(\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage: copy(\"server:core.errors.default.message\"),\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t},\n\t\t\t\t\twrapperConfig.defaultError,\n\t\t\t\t),\n\t\t\t\tdata: undefined,\n\t\t\t};\n\t\t}\n\t};\n\nexport default serviceWrapper;\n"],"mappings":"gLAWA,MAAM,GAEJ,EACA,IAED,MAAO,EAAyB,GAAG,IAAgC,CAClE,GAAI,CAEH,GAAI,EAAc,OAAQ,CACzB,IAAM,EAAS,MAAM,EAAc,OAAO,eACzC,EAAK,EAAc,gBAAkB,EACtC,EACA,GAAI,EAAO,UAAY,GACtB,MAAO,CACN,MAAO,EACN,CACC,KAAM,aAEN,IAAK,EAAO,KACb,EACA,EAAc,YACf,EACA,KAAM,IAAA,EACP,CAEF,CAGA,GACC,CAAC,EAAc,aACf,CAAC,EAAQ,OAAO,GAAG,SAAS,aAAa,GACzC,EAAQ,GAAG,OAAO,cACjB,CACD,IAAM,EAAS,MAAM,EAAG,EAAS,GAAG,CAAI,EAMxC,OALI,EAAO,MACH,CACN,MAAO,EAAkB,EAAO,MAAO,EAAc,YAAY,EACjE,KAAM,IAAA,EACP,EACM,CACR,CAGA,OAAO,MAAM,EAAQ,GAAG,OAAO,YAAY,CAAC,CAAC,QAAQ,KAAO,IAAO,CAClE,IAAM,EAAS,MAAM,EACpB,CACC,GAAG,EACH,GAAI,CACH,OAAQ,CACT,CACD,EACA,GAAG,CACJ,EACA,GAAI,EAAO;;AAEV,MAAM,IAAI,EAAiB,EAAO,KAAK,EAGxC,OAAO,CACR,CAAC,CACF,OAAS,EAAO,CAmCf,OAlCI,EAAc,UACjB,EAAO,MAAM,CACZ,QACA,MAAO,2BACP,QAAS,2BACT,KAAM,CACL,aACC,aAAiB,MACd,EAAM,QACN,2BACL,CACD,CAAC,EAGE,aAAiB,EACb,CACN,MAAO,EAAkB,EAAM,MAAO,EAAc,YAAY,EAChE,KAAM,IAAA,EACP,GAGG,aAAiB,MACb,CACN,MAAO,EACN,CACC,QAAS,EAAK,oCAAoC,EAClD,MAAO,CACR,EACA,EAAc,YACf,EACA,KAAM,IAAA,EACP,EAaF,CACD"}