@alevnyacow/nzmt 0.30.1 → 0.31.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/README.md +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/zod-controller.utils.d.ts +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
Scaffold full-stack modules in Next.js in seconds with **Next Zod Modules Toolkit (NZMT)**.
|
|
13
13
|
|
|
14
|
-
Get a DDD-inspired architecture with a contract-first approach out of the box. NZMT also comes with useful infrastructure like DI, logging, unified errors, and endpoint guards.
|
|
14
|
+
Get a DDD-inspired architecture with a contract-first approach out of the box. NZMT also comes with useful infrastructure like DI, logging, in-memory stores, unified errors, and endpoint guards.
|
|
15
15
|
|
|
16
16
|
Batteries included!
|
|
17
17
|
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(r,{a:r}),r},__webpack_require__.d=(e,r)=>{for(var t in r)__webpack_require__.o(r,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},__webpack_require__.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Controller:()=>zod_controller_utils_namespaceObject,Store:()=>store_namespaceObject,Module:()=>zod_module_utils_namespaceObject,ValueObjects:()=>value_objects_namespaceObject});var zod_module_utils_namespaceObject={};__webpack_require__.r(zod_module_utils_namespaceObject),__webpack_require__.d(zod_module_utils_namespaceObject,{methods:()=>methods});var zod_controller_utils_namespaceObject={};__webpack_require__.r(zod_controller_utils_namespaceObject),__webpack_require__.d(zod_controller_utils_namespaceObject,{DefaultErrorCodes:()=>zod_controller_utils_DefaultErrorCodes,endpoints:()=>endpoints});var store_namespaceObject={};__webpack_require__.r(store_namespaceObject),__webpack_require__.d(store_namespaceObject,{InRAM:()=>InRAM,methods:()=>store_zod_utils_methods,toModuleMetadata:()=>toModuleMetadata});var value_objects_namespaceObject={};__webpack_require__.r(value_objects_namespaceObject),__webpack_require__.d(value_objects_namespaceObject,{Pagination:()=>Pagination});const isControllerError=e=>{if(!e||"object"!=typeof e)return!1;let r=Object.keys(e);return["name","message","code","module","method","timestamp","statusCode"].every(e=>r.includes(e))},isModuleError=e=>{if("object"!=typeof e||!e)return!1;let r=Object.keys(e);return!!["name","message","code","module","method","timestamp"].every(e=>r.includes(e))&&!r.includes("statusCode")},spawnBaseError=({error:e,code:r,details:t})=>{let a=e instanceof Error?e:Error("unknown error");return("string"==typeof e||"number"==typeof e)&&(a=Error(e?.toString())),"object"==typeof e&&null!==e&&(a=e instanceof Error?e:Error(JSON.stringify(e))),{message:a.message,name:a.name,timestamp:Date.now(),code:r||a.name,details:t||null}},spawnFromUnknownError=e=>isModuleError(e)||(e=>{if("object"!=typeof e||!e)return!1;let r=Object.keys(e);return["name","message","code","timestamp"].every(e=>r.includes(e))})(e)?e:spawnBaseError({error:e}),spawnModuleError=e=>({inMethod:r=>({newError:(t,a)=>({...spawnBaseError(t),cause:a?spawnFromUnknownError(a):null,module:e,method:r})})}),spawnControllerError=e=>({inMethod:r=>({newError:(t,a)=>{let o=spawnBaseError(t),s=a?spawnFromUnknownError(a):null;return!t.code&&s?.code&&(o.code=s.code),{...o,cause:s,module:e,method:r,statusCode:t.statusCode}}})}),methods=(e,r={})=>(t,a,o={})=>{let{name:s,schemas:n}=e;return async e=>{try{let r=n[t].payload.parse(e),o=await a(r,{methodError:(e,a)=>spawnModuleError(s).inMethod(t).newError("string"==typeof e?{error:e,code:e,details:r}:e,a)});return n[t].response.parse(o)}catch(a){if(isModuleError(a))throw r.onError&&await r.onError(a),o.onError&&await o.onError(a),a;let e=spawnModuleError(s).inMethod(t).newError({error:"Caught unhandled module error (see `cause` field for details)"},a);throw o.onError&&await o.onError(e),e}}},server_namespaceObject=require("next/server"),external_zod_namespaceObject=require("zod");var external_zod_default=__webpack_require__.n(external_zod_namespaceObject),zod_controller_utils_DefaultErrorCodes=function(e){return e.REQUEST_PARSING="NZMT-CONTROLLER___REQUEST-PARSING",e.RESPONSE_PARSING="NZMT-CONTROLLER___RESPONSE-PARSING",e}({});const endpoints=(e,r={})=>(t,a,o={})=>async s=>{let n={},_=spawnControllerError(e.name).inMethod(t);try{let i=(e,r,t)=>"string"==typeof e?_.newError({statusCode:r??500,code:e,error:e,details:n},t):_.newError({...e,statusCode:r??500},t);if(r.guards)for(let e of r.guards){let r=await e({request:s,endpointError:i});if(r)throw r}if(o.guards)for(let e of o.guards){let r=await e({request:s,endpointError:i});if(r)throw r}let d=e.schemas[t];if(!d)throw _.newError({error:"No schemas were found for the endpoint",statusCode:500});if(d.query){let e=Object.fromEntries(s.nextUrl.searchParams.entries()),r=d.query.safeParse(e);if(!r.success)throw _.newError({error:r.error.message,statusCode:400,code:"NZMT-CONTROLLER___REQUEST-PARSING",details:external_zod_default().treeifyError(r.error)});n={...n,...r.data}}if(d.body){let e=await s.json(),r=d.body.safeParse(e);if(!r.success)throw _.newError({error:r.error.message,statusCode:400,code:"NZMT-CONTROLLER___REQUEST-PARSING",details:external_zod_default().treeifyError(r.error)});n={...n,...r.data}}let l={},c=await a(n,{request:s,flags:l,endpointError:(e,r,t)=>"string"==typeof e?_.newError({statusCode:r??500,code:e,error:e,details:n},t):_.newError({...e,statusCode:r??500},t)});if(d.response){let e=d.response.safeParse(c);if(!e.success)throw _.newError({error:e.error.message,statusCode:500,code:"NZMT-CONTROLLER___RESPONSE-PARSING",details:external_zod_default().treeifyError(e.error)});if(o.eventHandlers?.onSuccess)for(let r of o.eventHandlers.onSuccess)r({request:s,result:e.data,requestPayload:n,flags:l});if(o.customResponseLogic?.onSuccess)return await o.customResponseLogic.onSuccess({req:s,response:e.data});return server_namespaceObject.NextResponse.json(e.data,{status:200})}if(o.eventHandlers?.onSuccess)for(let e of o.eventHandlers.onSuccess)await e({request:s,result:void 0,requestPayload:n,flags:l});if(o.customResponseLogic?.onSuccess)return await o.customResponseLogic.onSuccess({req:s,response:{}});return server_namespaceObject.NextResponse.json({},{status:200})}catch(t){let e=t;if(isControllerError(t)&&(e=_.newError({error:"Internal error",statusCode:500},t)),e.details&&"object"==typeof e.details||(e.details={}),r.onErrorHandlers)try{for(let t of r.onErrorHandlers)await t({error:e,req:s})}catch(r){e=_.newError({error:"onError handler error",statusCode:500},r)}if(o.eventHandlers?.onError)try{for(let r of o.eventHandlers.onError)await r({error:e,req:s})}catch(r){e=_.newError({error:"onError handler error",statusCode:500},r)}if(o.customResponseLogic?.onError)return await o.customResponseLogic.onError({req:s,error:e});return server_namespaceObject.NextResponse.json({message:e.message,details:e.statusCode.toString().startsWith("4")?e.details:null,code:e.code},{status:e.statusCode})}};class Pagination{data;static schema=external_zod_default().object({zeroBasedIndex:external_zod_default().coerce.number().int().nonnegative(),pageSize:external_zod_default().coerce.number().int().positive()});constructor(e){this.data=e}static create=e=>{let r=Pagination.schema.parse(e);return new Pagination(r)};get model(){return this.data}same=e=>e.model.pageSize===this.model.pageSize&&e.model.zeroBasedIndex===this.model.zeroBasedIndex;get nextPage(){return Pagination.create({pageSize:this.data.pageSize,zeroBasedIndex:this.data.zeroBasedIndex+1})}get previousPage(){return 0===this.model.zeroBasedIndex?Pagination.create(this.model):Pagination.create({pageSize:this.model.pageSize,zeroBasedIndex:this.model.zeroBasedIndex-1})}get previousPage_UNSAFE(){return Pagination.create({pageSize:this.model.pageSize,zeroBasedIndex:this.model.zeroBasedIndex-1})}}const toModuleMetadata=e=>({name:e.name,schemas:{...e.customOperations??{},list:{payload:external_zod_default().object({filter:e.searchPayload.list,pagination:Pagination.schema.optional()}),response:external_zod_default().array(e.models.list)},details:{payload:external_zod_default().object({filter:e.searchPayload.specific}),response:e.models.details.nullable()},create:{payload:external_zod_default().object({payload:e.actionsPayload.create}),response:external_zod_default().object({id:external_zod_default().string()})},updateOne:{payload:external_zod_default().object({filter:e.searchPayload.specific,payload:e.actionsPayload.update}),response:external_zod_default().object({success:external_zod_default().boolean()})},deleteOne:{payload:external_zod_default().object({filter:e.searchPayload.specific}),response:external_zod_default().object({success:external_zod_default().boolean()})}}}),store_zod_utils_methods=e=>methods(toModuleMetadata(e)),InRAM=(e,r)=>{class t{___data=[];method=store_zod_utils_methods(e);___listSearchLogic=(e,r)=>{let t=Object.entries(r).filter(([e,r])=>!!r).map(e=>e[0]);return Object.entries(e).filter(([e])=>t.includes(e)).every(([e,t])=>t===r[e]||t?.toString()?.includes(r[e]?.toString()))};___specificSearchLogic=(e,r)=>{let t=Object.entries(r).filter(([e,r])=>!!r).map(e=>e[0]);return Object.entries(e).filter(([e])=>t.includes(e)).every(([e,t])=>t===r[e]||t?.toString()?.includes(r[e]?.toString()))};___mapDetailToList=e=>e;___mapCreatePayloadToDetail=e=>({...e,id:Math.random().toString()});___mapUpdatePayloadToDetail=(e,r)=>{let t=Object.fromEntries(Object.entries(r).filter(([,e])=>void 0!==e));return{...e,...t}};constructor(){if(!r)return;r.searchLogic&&(r.searchLogic.list&&(this.___listSearchLogic=r.searchLogic.list),r.searchLogic.specific&&(this.___specificSearchLogic=r.searchLogic.specific)),r.mappers&&(r.mappers.detailToList&&(this.___mapDetailToList=r.mappers.detailToList),r.mappers.createPayloadToDetail&&(this.___mapCreatePayloadToDetail=r.mappers.createPayloadToDetail),r.mappers.updatePayloadToDetail&&(this.___mapUpdatePayloadToDetail=r.mappers.updatePayloadToDetail)),r.initialData&&(this.___data=[...r.initialData])}list=this.method("list",async({filter:r,pagination:t={pageSize:1e3,zeroBasedIndex:0}})=>{e.searchPayload.list.parse(r),Pagination.schema.parse(t);let a=this.___data.filter(e=>this.___listSearchLogic(e,r)).filter((e,r)=>r>=t.pageSize*t.zeroBasedIndex&&r<(t.zeroBasedIndex+1)*t.pageSize).map(e=>this.___mapDetailToList(e));return external_zod_default().array(e.models.list).parse(a),a});details=this.method("details",async({filter:e})=>{let r=this.___data.find(r=>this.___specificSearchLogic(r,e));return r||null});create=this.method("create",async({payload:e})=>{let r=this.___mapCreatePayloadToDetail(e);return this.___data=this.___data.concat(r),{id:r.id}});updateOne=this.method("updateOne",async({filter:e,payload:r})=>{let t=this.___data.findIndex(r=>this.___specificSearchLogic(r,e));return this.___data=this.___data.map((e,a)=>a!==t?e:this.___mapUpdatePayloadToDetail(e,r)),{success:t>-1}});deleteOne=this.method("deleteOne",async({filter:e})=>{let r=this.___data.findIndex(r=>this.___specificSearchLogic(r,e));return this.___data=this.___data.filter((e,t)=>t!==r),{success:r>-1}})}return t};for(var __rspack_i in exports.Controller=__webpack_exports__.Controller,exports.Module=__webpack_exports__.Module,exports.Store=__webpack_exports__.Store,exports.ValueObjects=__webpack_exports__.ValueObjects,__webpack_exports__)-1===["Controller","Module","Store","ValueObjects"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
|
|
1
|
+
"use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(r,{a:r}),r},__webpack_require__.d=(e,r)=>{for(var t in r)__webpack_require__.o(r,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},__webpack_require__.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{Controller:()=>zod_controller_utils_namespaceObject,Store:()=>store_namespaceObject,Module:()=>zod_module_utils_namespaceObject,ValueObjects:()=>value_objects_namespaceObject});var zod_module_utils_namespaceObject={};__webpack_require__.r(zod_module_utils_namespaceObject),__webpack_require__.d(zod_module_utils_namespaceObject,{methods:()=>methods});var zod_controller_utils_namespaceObject={};__webpack_require__.r(zod_controller_utils_namespaceObject),__webpack_require__.d(zod_controller_utils_namespaceObject,{DefaultErrorCodes:()=>zod_controller_utils_DefaultErrorCodes,endpoints:()=>endpoints});var store_namespaceObject={};__webpack_require__.r(store_namespaceObject),__webpack_require__.d(store_namespaceObject,{InRAM:()=>InRAM,methods:()=>store_zod_utils_methods,toModuleMetadata:()=>toModuleMetadata});var value_objects_namespaceObject={};__webpack_require__.r(value_objects_namespaceObject),__webpack_require__.d(value_objects_namespaceObject,{Pagination:()=>Pagination});const isControllerError=e=>{if(!e||"object"!=typeof e)return!1;let r=Object.keys(e);return["name","message","code","module","method","timestamp","statusCode"].every(e=>r.includes(e))},isModuleError=e=>{if("object"!=typeof e||!e)return!1;let r=Object.keys(e);return!!["name","message","code","module","method","timestamp"].every(e=>r.includes(e))&&!r.includes("statusCode")},spawnBaseError=({error:e,code:r,details:t})=>{let a=e instanceof Error?e:Error("unknown error");return("string"==typeof e||"number"==typeof e)&&(a=Error(e?.toString())),"object"==typeof e&&null!==e&&(a=e instanceof Error?e:Error(JSON.stringify(e))),{message:a.message,name:a.name,timestamp:Date.now(),code:r||a.name,details:t||null}},spawnFromUnknownError=e=>isModuleError(e)||(e=>{if("object"!=typeof e||!e)return!1;let r=Object.keys(e);return["name","message","code","timestamp"].every(e=>r.includes(e))})(e)?e:spawnBaseError({error:e}),spawnModuleError=e=>({inMethod:r=>({newError:(t,a)=>({...spawnBaseError(t),cause:a?spawnFromUnknownError(a):null,module:e,method:r})})}),spawnControllerError=e=>({inMethod:r=>({newError:(t,a)=>{let o=spawnBaseError(t),s=a?spawnFromUnknownError(a):null;return!t.code&&s?.code&&(o.code=s.code),{...o,cause:s,module:e,method:r,statusCode:t.statusCode}}})}),methods=(e,r={})=>(t,a,o={})=>{let{name:s,schemas:n}=e;return async e=>{try{let r=n[t].payload.parse(e),o=await a(r,{methodError:(e,a)=>spawnModuleError(s).inMethod(t).newError("string"==typeof e?{error:e,code:e,details:r}:e,a)});return n[t].response.parse(o)}catch(a){if(isModuleError(a))throw r.onError&&await r.onError(a),o.onError&&await o.onError(a),a;let e=spawnModuleError(s).inMethod(t).newError({error:"Caught unhandled module error (see `cause` field for details)"},a);throw o.onError&&await o.onError(e),e}}},external_zod_namespaceObject=require("zod");var external_zod_default=__webpack_require__.n(external_zod_namespaceObject);function jsonResponse(e,r){return new Response(JSON.stringify(e),{...r,headers:{"Content-Type":"application/json",...r?.headers||{}}})}var zod_controller_utils_DefaultErrorCodes=function(e){return e.REQUEST_PARSING="NZMT-CONTROLLER___REQUEST-PARSING",e.RESPONSE_PARSING="NZMT-CONTROLLER___RESPONSE-PARSING",e}({});const endpoints=(e,r={})=>(t,a,o={})=>async s=>{let n={},_=spawnControllerError(e.name).inMethod(t);try{let i=(e,r,t)=>"string"==typeof e?_.newError({statusCode:r??500,code:e,error:e,details:n},t):_.newError({...e,statusCode:r??500},t);if(r.guards)for(let e of r.guards){let r=await e({request:s,endpointError:i});if(r)throw r}if(o.guards)for(let e of o.guards){let r=await e({request:s,endpointError:i});if(r)throw r}let d=e.schemas[t];if(!d)throw _.newError({error:"No schemas were found for the endpoint",statusCode:500});if(d.query){let e=Object.fromEntries(s.nextUrl.searchParams.entries()),r=d.query.safeParse(e);if(!r.success)throw _.newError({error:r.error.message,statusCode:400,code:"NZMT-CONTROLLER___REQUEST-PARSING",details:external_zod_default().treeifyError(r.error)});n={...n,...r.data}}if(d.body){let e=await s.json(),r=d.body.safeParse(e);if(!r.success)throw _.newError({error:r.error.message,statusCode:400,code:"NZMT-CONTROLLER___REQUEST-PARSING",details:external_zod_default().treeifyError(r.error)});n={...n,...r.data}}let l={},c=await a(n,{request:s,flags:l,endpointError:(e,r,t)=>"string"==typeof e?_.newError({statusCode:r??500,code:e,error:e,details:n},t):_.newError({...e,statusCode:r??500},t)});if(d.response){let e=d.response.safeParse(c);if(!e.success)throw _.newError({error:e.error.message,statusCode:500,code:"NZMT-CONTROLLER___RESPONSE-PARSING",details:external_zod_default().treeifyError(e.error)});if(o.eventHandlers?.onSuccess)for(let r of o.eventHandlers.onSuccess)r({request:s,result:e.data,requestPayload:n,flags:l});if(o.customResponseLogic?.onSuccess)return await o.customResponseLogic.onSuccess({req:s,response:e.data});return jsonResponse(e.data,{status:200})}if(o.eventHandlers?.onSuccess)for(let e of o.eventHandlers.onSuccess)await e({request:s,result:void 0,requestPayload:n,flags:l});if(o.customResponseLogic?.onSuccess)return await o.customResponseLogic.onSuccess({req:s,response:{}});return jsonResponse({},{status:200})}catch(t){let e=t;if(isControllerError(t)&&(e=_.newError({error:"Internal error",statusCode:500},t)),e.details&&"object"==typeof e.details||(e.details={}),r.onErrorHandlers)try{for(let t of r.onErrorHandlers)await t({error:e,req:s})}catch(r){e=_.newError({error:"onError handler error",statusCode:500},r)}if(o.eventHandlers?.onError)try{for(let r of o.eventHandlers.onError)await r({error:e,req:s})}catch(r){e=_.newError({error:"onError handler error",statusCode:500},r)}if(o.customResponseLogic?.onError)return await o.customResponseLogic.onError({req:s,error:e});return jsonResponse({message:e.message,details:e.statusCode.toString().startsWith("4")?e.details:null,code:e.code},{status:e.statusCode})}};class Pagination{data;static schema=external_zod_default().object({zeroBasedIndex:external_zod_default().coerce.number().int().nonnegative(),pageSize:external_zod_default().coerce.number().int().positive()});constructor(e){this.data=e}static create=e=>{let r=Pagination.schema.parse(e);return new Pagination(r)};get model(){return this.data}same=e=>e.model.pageSize===this.model.pageSize&&e.model.zeroBasedIndex===this.model.zeroBasedIndex;get nextPage(){return Pagination.create({pageSize:this.data.pageSize,zeroBasedIndex:this.data.zeroBasedIndex+1})}get previousPage(){return 0===this.model.zeroBasedIndex?Pagination.create(this.model):Pagination.create({pageSize:this.model.pageSize,zeroBasedIndex:this.model.zeroBasedIndex-1})}get previousPage_UNSAFE(){return Pagination.create({pageSize:this.model.pageSize,zeroBasedIndex:this.model.zeroBasedIndex-1})}}const toModuleMetadata=e=>({name:e.name,schemas:{...e.customOperations??{},list:{payload:external_zod_default().object({filter:e.searchPayload.list,pagination:Pagination.schema.optional()}),response:external_zod_default().array(e.models.list)},details:{payload:external_zod_default().object({filter:e.searchPayload.specific}),response:e.models.details.nullable()},create:{payload:external_zod_default().object({payload:e.actionsPayload.create}),response:external_zod_default().object({id:external_zod_default().string()})},updateOne:{payload:external_zod_default().object({filter:e.searchPayload.specific,payload:e.actionsPayload.update}),response:external_zod_default().object({success:external_zod_default().boolean()})},deleteOne:{payload:external_zod_default().object({filter:e.searchPayload.specific}),response:external_zod_default().object({success:external_zod_default().boolean()})}}}),store_zod_utils_methods=e=>methods(toModuleMetadata(e)),InRAM=(e,r)=>{class t{___data=[];method=store_zod_utils_methods(e);___listSearchLogic=(e,r)=>{let t=Object.entries(r).filter(([e,r])=>!!r).map(e=>e[0]);return Object.entries(e).filter(([e])=>t.includes(e)).every(([e,t])=>t===r[e]||t?.toString()?.includes(r[e]?.toString()))};___specificSearchLogic=(e,r)=>{let t=Object.entries(r).filter(([e,r])=>!!r).map(e=>e[0]);return Object.entries(e).filter(([e])=>t.includes(e)).every(([e,t])=>t===r[e]||t?.toString()?.includes(r[e]?.toString()))};___mapDetailToList=e=>e;___mapCreatePayloadToDetail=e=>({...e,id:Math.random().toString()});___mapUpdatePayloadToDetail=(e,r)=>{let t=Object.fromEntries(Object.entries(r).filter(([,e])=>void 0!==e));return{...e,...t}};constructor(){if(!r)return;r.searchLogic&&(r.searchLogic.list&&(this.___listSearchLogic=r.searchLogic.list),r.searchLogic.specific&&(this.___specificSearchLogic=r.searchLogic.specific)),r.mappers&&(r.mappers.detailToList&&(this.___mapDetailToList=r.mappers.detailToList),r.mappers.createPayloadToDetail&&(this.___mapCreatePayloadToDetail=r.mappers.createPayloadToDetail),r.mappers.updatePayloadToDetail&&(this.___mapUpdatePayloadToDetail=r.mappers.updatePayloadToDetail)),r.initialData&&(this.___data=[...r.initialData])}list=this.method("list",async({filter:r,pagination:t={pageSize:1e3,zeroBasedIndex:0}})=>{e.searchPayload.list.parse(r),Pagination.schema.parse(t);let a=this.___data.filter(e=>this.___listSearchLogic(e,r)).filter((e,r)=>r>=t.pageSize*t.zeroBasedIndex&&r<(t.zeroBasedIndex+1)*t.pageSize).map(e=>this.___mapDetailToList(e));return external_zod_default().array(e.models.list).parse(a),a});details=this.method("details",async({filter:e})=>{let r=this.___data.find(r=>this.___specificSearchLogic(r,e));return r||null});create=this.method("create",async({payload:e})=>{let r=this.___mapCreatePayloadToDetail(e);return this.___data=this.___data.concat(r),{id:r.id}});updateOne=this.method("updateOne",async({filter:e,payload:r})=>{let t=this.___data.findIndex(r=>this.___specificSearchLogic(r,e));return this.___data=this.___data.map((e,a)=>a!==t?e:this.___mapUpdatePayloadToDetail(e,r)),{success:t>-1}});deleteOne=this.method("deleteOne",async({filter:e})=>{let r=this.___data.findIndex(r=>this.___specificSearchLogic(r,e));return this.___data=this.___data.filter((e,t)=>t!==r),{success:r>-1}})}return t};for(var __rspack_i in exports.Controller=__webpack_exports__.Controller,exports.Module=__webpack_exports__.Module,exports.Store=__webpack_exports__.Store,exports.ValueObjects=__webpack_exports__.ValueObjects,__webpack_exports__)-1===["Controller","Module","Store","ValueObjects"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__webpack_require__ as e}from"./rslib-runtime.js";import
|
|
1
|
+
import{__webpack_require__ as e}from"./rslib-runtime.js";import r from"zod";var t,a={};e.r(a),e.d(a,{InRAM:()=>y,methods:()=>g,toModuleMetadata:()=>f});var o={};e.r(o),e.d(o,{Pagination:()=>h});var s={};e.r(s),e.d(s,{DefaultErrorCodes:()=>_,endpoints:()=>m});var i={};e.r(i),e.d(i,{methods:()=>u});let n=e=>{if("object"!=typeof e||!e)return!1;let r=Object.keys(e);return!!["name","message","code","module","method","timestamp"].every(e=>r.includes(e))&&!r.includes("statusCode")},d=({error:e,code:r,details:t})=>{let a=e instanceof Error?e:Error("unknown error");return("string"==typeof e||"number"==typeof e)&&(a=Error(e?.toString())),"object"==typeof e&&null!==e&&(a=e instanceof Error?e:Error(JSON.stringify(e))),{message:a.message,name:a.name,timestamp:Date.now(),code:r||a.name,details:t||null}},c=e=>n(e)||(e=>{if("object"!=typeof e||!e)return!1;let r=Object.keys(e);return["name","message","code","timestamp"].every(e=>r.includes(e))})(e)?e:d({error:e}),l=e=>({inMethod:r=>({newError:(t,a)=>({...d(t),cause:a?c(a):null,module:e,method:r})})}),u=(e,r={})=>(t,a,o={})=>{let{name:s,schemas:i}=e;return async e=>{try{let r=i[t].payload.parse(e),o=await a(r,{methodError:(e,a)=>l(s).inMethod(t).newError("string"==typeof e?{error:e,code:e,details:r}:e,a)});return i[t].response.parse(o)}catch(a){if(n(a))throw r.onError&&await r.onError(a),o.onError&&await o.onError(a),a;let e=l(s).inMethod(t).newError({error:"Caught unhandled module error (see `cause` field for details)"},a);throw o.onError&&await o.onError(e),e}}};function p(e,r){return new Response(JSON.stringify(e),{...r,headers:{"Content-Type":"application/json",...r?.headers||{}}})}var _=((t={}).REQUEST_PARSING="NZMT-CONTROLLER___REQUEST-PARSING",t.RESPONSE_PARSING="NZMT-CONTROLLER___RESPONSE-PARSING",t);let m=(e,t={})=>(a,o,s={})=>async i=>{let n,l={},u=(n=e.name,{inMethod:e=>({newError:(r,t)=>{let a=d(r),o=t?c(t):null;return!r.code&&o?.code&&(a.code=o.code),{...a,cause:o,module:n,method:e,statusCode:r.statusCode}}})}).inMethod(a);try{let n=(e,r,t)=>"string"==typeof e?u.newError({statusCode:r??500,code:e,error:e,details:l},t):u.newError({...e,statusCode:r??500},t);if(t.guards)for(let e of t.guards){let r=await e({request:i,endpointError:n});if(r)throw r}if(s.guards)for(let e of s.guards){let r=await e({request:i,endpointError:n});if(r)throw r}let d=e.schemas[a];if(!d)throw u.newError({error:"No schemas were found for the endpoint",statusCode:500});if(d.query){let e=Object.fromEntries(i.nextUrl.searchParams.entries()),t=d.query.safeParse(e);if(!t.success)throw u.newError({error:t.error.message,statusCode:400,code:"NZMT-CONTROLLER___REQUEST-PARSING",details:r.treeifyError(t.error)});l={...l,...t.data}}if(d.body){let e=await i.json(),t=d.body.safeParse(e);if(!t.success)throw u.newError({error:t.error.message,statusCode:400,code:"NZMT-CONTROLLER___REQUEST-PARSING",details:r.treeifyError(t.error)});l={...l,...t.data}}let c={},_=await o(l,{request:i,flags:c,endpointError:(e,r,t)=>"string"==typeof e?u.newError({statusCode:r??500,code:e,error:e,details:l},t):u.newError({...e,statusCode:r??500},t)});if(d.response){let e=d.response.safeParse(_);if(!e.success)throw u.newError({error:e.error.message,statusCode:500,code:"NZMT-CONTROLLER___RESPONSE-PARSING",details:r.treeifyError(e.error)});if(s.eventHandlers?.onSuccess)for(let r of s.eventHandlers.onSuccess)r({request:i,result:e.data,requestPayload:l,flags:c});if(s.customResponseLogic?.onSuccess)return await s.customResponseLogic.onSuccess({req:i,response:e.data});return p(e.data,{status:200})}if(s.eventHandlers?.onSuccess)for(let e of s.eventHandlers.onSuccess)await e({request:i,result:void 0,requestPayload:l,flags:c});if(s.customResponseLogic?.onSuccess)return await s.customResponseLogic.onSuccess({req:i,response:{}});return p({},{status:200})}catch(r){let e=r;if((e=>{if(!e||"object"!=typeof e)return!1;let r=Object.keys(e);return["name","message","code","module","method","timestamp","statusCode"].every(e=>r.includes(e))})(r)&&(e=u.newError({error:"Internal error",statusCode:500},r)),e.details&&"object"==typeof e.details||(e.details={}),t.onErrorHandlers)try{for(let r of t.onErrorHandlers)await r({error:e,req:i})}catch(r){e=u.newError({error:"onError handler error",statusCode:500},r)}if(s.eventHandlers?.onError)try{for(let r of s.eventHandlers.onError)await r({error:e,req:i})}catch(r){e=u.newError({error:"onError handler error",statusCode:500},r)}if(s.customResponseLogic?.onError)return await s.customResponseLogic.onError({req:i,error:e});return p({message:e.message,details:e.statusCode.toString().startsWith("4")?e.details:null,code:e.code},{status:e.statusCode})}};class h{data;static schema=r.object({zeroBasedIndex:r.coerce.number().int().nonnegative(),pageSize:r.coerce.number().int().positive()});constructor(e){this.data=e}static create=e=>{let r=h.schema.parse(e);return new h(r)};get model(){return this.data}same=e=>e.model.pageSize===this.model.pageSize&&e.model.zeroBasedIndex===this.model.zeroBasedIndex;get nextPage(){return h.create({pageSize:this.data.pageSize,zeroBasedIndex:this.data.zeroBasedIndex+1})}get previousPage(){return 0===this.model.zeroBasedIndex?h.create(this.model):h.create({pageSize:this.model.pageSize,zeroBasedIndex:this.model.zeroBasedIndex-1})}get previousPage_UNSAFE(){return h.create({pageSize:this.model.pageSize,zeroBasedIndex:this.model.zeroBasedIndex-1})}}let f=e=>({name:e.name,schemas:{...e.customOperations??{},list:{payload:r.object({filter:e.searchPayload.list,pagination:h.schema.optional()}),response:r.array(e.models.list)},details:{payload:r.object({filter:e.searchPayload.specific}),response:e.models.details.nullable()},create:{payload:r.object({payload:e.actionsPayload.create}),response:r.object({id:r.string()})},updateOne:{payload:r.object({filter:e.searchPayload.specific,payload:e.actionsPayload.update}),response:r.object({success:r.boolean()})},deleteOne:{payload:r.object({filter:e.searchPayload.specific}),response:r.object({success:r.boolean()})}}}),g=e=>u(f(e)),y=(e,t)=>{class a{___data=[];method=g(e);___listSearchLogic=(e,r)=>{let t=Object.entries(r).filter(([e,r])=>!!r).map(e=>e[0]);return Object.entries(e).filter(([e])=>t.includes(e)).every(([e,t])=>t===r[e]||t?.toString()?.includes(r[e]?.toString()))};___specificSearchLogic=(e,r)=>{let t=Object.entries(r).filter(([e,r])=>!!r).map(e=>e[0]);return Object.entries(e).filter(([e])=>t.includes(e)).every(([e,t])=>t===r[e]||t?.toString()?.includes(r[e]?.toString()))};___mapDetailToList=e=>e;___mapCreatePayloadToDetail=e=>({...e,id:Math.random().toString()});___mapUpdatePayloadToDetail=(e,r)=>{let t=Object.fromEntries(Object.entries(r).filter(([,e])=>void 0!==e));return{...e,...t}};constructor(){if(!t)return;t.searchLogic&&(t.searchLogic.list&&(this.___listSearchLogic=t.searchLogic.list),t.searchLogic.specific&&(this.___specificSearchLogic=t.searchLogic.specific)),t.mappers&&(t.mappers.detailToList&&(this.___mapDetailToList=t.mappers.detailToList),t.mappers.createPayloadToDetail&&(this.___mapCreatePayloadToDetail=t.mappers.createPayloadToDetail),t.mappers.updatePayloadToDetail&&(this.___mapUpdatePayloadToDetail=t.mappers.updatePayloadToDetail)),t.initialData&&(this.___data=[...t.initialData])}list=this.method("list",async({filter:t,pagination:a={pageSize:1e3,zeroBasedIndex:0}})=>{e.searchPayload.list.parse(t),h.schema.parse(a);let o=this.___data.filter(e=>this.___listSearchLogic(e,t)).filter((e,r)=>r>=a.pageSize*a.zeroBasedIndex&&r<(a.zeroBasedIndex+1)*a.pageSize).map(e=>this.___mapDetailToList(e));return r.array(e.models.list).parse(o),o});details=this.method("details",async({filter:e})=>{let r=this.___data.find(r=>this.___specificSearchLogic(r,e));return r||null});create=this.method("create",async({payload:e})=>{let r=this.___mapCreatePayloadToDetail(e);return this.___data=this.___data.concat(r),{id:r.id}});updateOne=this.method("updateOne",async({filter:e,payload:r})=>{let t=this.___data.findIndex(r=>this.___specificSearchLogic(r,e));return this.___data=this.___data.map((e,a)=>a!==t?e:this.___mapUpdatePayloadToDetail(e,r)),{success:t>-1}});deleteOne=this.method("deleteOne",async({filter:e})=>{let r=this.___data.findIndex(r=>this.___specificSearchLogic(r,e));return this.___data=this.___data.filter((e,t)=>t!==r),{success:r>-1}})}return a};export{a as Store,o as ValueObjects,s as Controller,i as Module};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type NextRequest, NextResponse } from 'next/server';
|
|
1
|
+
import { type NextRequest, type NextResponse } from 'next/server';
|
|
2
2
|
import z, { type ZodType, type ZodObject, type ZodUnion } from 'zod';
|
|
3
3
|
import { type ControllerErrorModel, type ErrorBaseCreatingPayload } from './errors.utils';
|
|
4
4
|
export declare enum DefaultErrorCodes {
|
|
@@ -59,7 +59,7 @@ export type SharedConfig = Partial<{
|
|
|
59
59
|
export declare const endpoints: <T extends Schemas>(metadata: {
|
|
60
60
|
schemas: T;
|
|
61
61
|
name: string;
|
|
62
|
-
}, sharedConfig?: SharedConfig) => <Method extends keyof T>(method: Method, handler: EndpointLogic<T[Method]>["handler"], configuration?: Omit<EndpointLogic<T[Method]>, "handler">) => (request: NextRequest) => Promise<
|
|
62
|
+
}, sharedConfig?: SharedConfig) => <Method extends keyof T>(method: Method, handler: EndpointLogic<T[Method]>["handler"], configuration?: Omit<EndpointLogic<T[Method]>, "handler">) => (request: NextRequest) => Promise<import("undici-types").Response>;
|
|
63
63
|
type Schemas = Record<string, ZodAPISchemas>;
|
|
64
64
|
type Flatten<T extends Record<string, object>> = {
|
|
65
65
|
[K in keyof T]: T[K];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alevnyacow/nzmt",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.1",
|
|
4
4
|
"description": "Next Zod Modules Toolkit",
|
|
5
5
|
"keywords": ["next", "full-stack", "server", "backend", "cli", "scaffolding", "zod", "rest", "contract programming", "contract-first", "react-query", "ddd", "domain-driven"],
|
|
6
6
|
"repository": {
|