@alevnyacow/nzmt 0.9.4 → 0.9.6

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/bin/cli.js CHANGED
@@ -393,7 +393,7 @@ function generateStores(lowerCase, upperCase, withEntityPreset) {
393
393
  // Contract
394
394
 
395
395
  fs.writeFileSync(path.resolve(folder, `${entityName}.store.ts`), [
396
- "import type { Store } from '@alevnyacow/nzmt'",
396
+ "import { Store } from '@alevnyacow/nzmt'",
397
397
  withEntity ? `import { ${upperCase} } from '@${config?.paths?.entities}/${entityName}'` : undefined,
398
398
  "",
399
399
  `export const ${lowerCase}StoreMetadata = {`,
@@ -415,6 +415,8 @@ function generateStores(lowerCase, upperCase, withEntityPreset) {
415
415
  `\tname: '${upperCase}Store'`,
416
416
  "} satisfies Store.Metadata",
417
417
  "",
418
+ `export const { schemas: ${lowerCase}StoreSchemas } = Store.toModuleMetadata(${lowerCase}Metadata)`,
419
+ "",
418
420
  `export type ${upperCase}Store = Store.Contract<typeof ${lowerCase}StoreMetadata>`
419
421
  ].filter(x => typeof x === 'string').join('\n'))
420
422
 
@@ -752,10 +754,10 @@ function generateService(lowerCase, upperCase) {
752
754
  }
753
755
 
754
756
  if (i.endsWith('Store')) {
755
- return `import { ${i} } from '@${config?.paths?.stores}/${toKebabFromPascal(i).slice(0, -'-store'.length)}'`
757
+ return `import type { ${i} } from '@${config?.paths?.stores}/${toKebabFromPascal(i).slice(0, -'-store'.length)}'`
756
758
  }
757
759
 
758
- return `import { ${i} } from '@${config?.paths?.infrastructure}/${toKebabFromPascal(i)}'`
760
+ return `import type { ${i} } from '@${config?.paths?.infrastructure}/${toKebabFromPascal(i)}'`
759
761
  })
760
762
 
761
763
  fs.mkdirSync(folder, { recursive: true })
@@ -836,14 +838,14 @@ function generateController(upperCase, lowerCase) {
836
838
  }
837
839
 
838
840
  if (i.endsWith('Store')) {
839
- return `import { ${i} } from '@${config?.paths?.stores}/${toKebabFromPascal(i).slice(0, -'-store'.length)}'`
841
+ return `import type { ${i} } from '@${config?.paths?.stores}/${toKebabFromPascal(i).slice(0, -'-store'.length)}'`
840
842
  }
841
843
 
842
844
  if (i.endsWith('Service')) {
843
- return `import { ${i} } from '@${config?.paths?.services}/${toKebabFromPascal(i).slice(0, -'-service'.length)}'`
845
+ return `import type { ${i} } from '@${config?.paths?.services}/${toKebabFromPascal(i).slice(0, -'-service'.length)}'`
844
846
  }
845
847
 
846
- return `import { ${i} } from '@${config?.paths?.infrastructure}/${toKebabFromPascal(i)}'`
848
+ return `import type { ${i} } from '@${config?.paths?.infrastructure}/${toKebabFromPascal(i)}'`
847
849
  })
848
850
 
849
851
  fs.mkdirSync(folder, { recursive: true })
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:()=>entities_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});var entities_namespaceObject={};__webpack_require__.r(entities_namespaceObject),__webpack_require__.d(entities_namespaceObject,{Identifier:()=>Identifier,Pagination:()=>Pagination});class ErrorFactory{static 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))};static 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")};static base=({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}};static forModule=e=>({inMethod:r=>({newError:(t,a)=>({...ErrorFactory.base(t),cause:a?ErrorFactory.fromUnknownError(a):null,module:e,method:r})})});static forController=e=>({inMethod:r=>({newError:(t,a)=>{let o=ErrorFactory.base(t),s=a?ErrorFactory.fromUnknownError(a):null;return!t.code&&s?.code&&(o.code=s.code),{...o,cause:s,module:e,method:r,statusCode:t.statusCode}}})});static fromUnknownError=e=>ErrorFactory.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:ErrorFactory.base({error:e})}const 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)=>ErrorFactory.forModule(s).inMethod(t).newError("string"==typeof e?{error:e,code:e,details:r}:e,a)});return n[t].response.parse(o)}catch(a){if(ErrorFactory.isModuleError(a))throw r.onError&&await r.onError(a),o.onError&&await o.onError(a),a;let e=ErrorFactory.forModule(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="ZOD-CONTROLLER___REQUEST-PARSING",e.RESPONSE_PARSING="ZOD-CONTROLLER___RESPONSE-PARSING",e}({});const endpoints=(e,r={})=>(t,a,o={})=>async s=>{let n={},i=ErrorFactory.forController(e.name).inMethod(t);try{let _=(e,r,t)=>"string"==typeof e?i.newError({statusCode:r??500,code:e,error:e,details:n},t):i.newError({...e,statusCode:r??500},t);if(r.guards)for(let e of r.guards){let r=await e({request:s,endpointError:_});if(r)throw r}if(o.guards)for(let e of o.guards){let r=await e({request:s,endpointError:_});if(r)throw r}let d=e.schemas[t];if(!d)throw i.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 i.newError({error:r.error.message,statusCode:400,code:"ZOD-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 i.newError({error:r.error.message,statusCode:400,code:"ZOD-CONTROLLER___REQUEST-PARSING",details:external_zod_default().treeifyError(r.error)});n={...n,...r.data}}let c={},l=await a(n,{request:s,flags:c,endpointError:(e,r,t)=>"string"==typeof e?i.newError({statusCode:r??500,code:e,error:e,details:n},t):i.newError({...e,statusCode:r??500},t)});if(d.response){let e=d.response.safeParse(l);if(!e.success)throw i.newError({error:e.error.message,statusCode:500,code:"ZOD-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:c});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:c});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(ErrorFactory.isControllerError(t)||(e=i.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=i.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=i.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 mapStoreSchemasToModuleMetadata=(e,r)=>({name:r,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(mapStoreSchemasToModuleMetadata(e,e.name)),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},external_node_crypto_namespaceObject=require("node:crypto");class Identifier{data;static schema=external_zod_default().string().nonempty();constructor(e){this.data=e}static create=e=>new Identifier(Identifier.schema.parse(e));static get randomUUID(){return Identifier.create((0,external_node_crypto_namespaceObject.randomUUID)())}get model(){return this.data}get isUUID(){return external_zod_default().uuidv4().safeParse(this.data).success}}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:()=>entities_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 entities_namespaceObject={};__webpack_require__.r(entities_namespaceObject),__webpack_require__.d(entities_namespaceObject,{Identifier:()=>Identifier,Pagination:()=>Pagination});class ErrorFactory{static 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))};static 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")};static base=({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}};static forModule=e=>({inMethod:r=>({newError:(t,a)=>({...ErrorFactory.base(t),cause:a?ErrorFactory.fromUnknownError(a):null,module:e,method:r})})});static forController=e=>({inMethod:r=>({newError:(t,a)=>{let o=ErrorFactory.base(t),s=a?ErrorFactory.fromUnknownError(a):null;return!t.code&&s?.code&&(o.code=s.code),{...o,cause:s,module:e,method:r,statusCode:t.statusCode}}})});static fromUnknownError=e=>ErrorFactory.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:ErrorFactory.base({error:e})}const 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)=>ErrorFactory.forModule(s).inMethod(t).newError("string"==typeof e?{error:e,code:e,details:r}:e,a)});return n[t].response.parse(o)}catch(a){if(ErrorFactory.isModuleError(a))throw r.onError&&await r.onError(a),o.onError&&await o.onError(a),a;let e=ErrorFactory.forModule(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="ZOD-CONTROLLER___REQUEST-PARSING",e.RESPONSE_PARSING="ZOD-CONTROLLER___RESPONSE-PARSING",e}({});const endpoints=(e,r={})=>(t,a,o={})=>async s=>{let n={},i=ErrorFactory.forController(e.name).inMethod(t);try{let _=(e,r,t)=>"string"==typeof e?i.newError({statusCode:r??500,code:e,error:e,details:n},t):i.newError({...e,statusCode:r??500},t);if(r.guards)for(let e of r.guards){let r=await e({request:s,endpointError:_});if(r)throw r}if(o.guards)for(let e of o.guards){let r=await e({request:s,endpointError:_});if(r)throw r}let d=e.schemas[t];if(!d)throw i.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 i.newError({error:r.error.message,statusCode:400,code:"ZOD-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 i.newError({error:r.error.message,statusCode:400,code:"ZOD-CONTROLLER___REQUEST-PARSING",details:external_zod_default().treeifyError(r.error)});n={...n,...r.data}}let c={},l=await a(n,{request:s,flags:c,endpointError:(e,r,t)=>"string"==typeof e?i.newError({statusCode:r??500,code:e,error:e,details:n},t):i.newError({...e,statusCode:r??500},t)});if(d.response){let e=d.response.safeParse(l);if(!e.success)throw i.newError({error:e.error.message,statusCode:500,code:"ZOD-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:c});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:c});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(ErrorFactory.isControllerError(t)||(e=i.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=i.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=i.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},external_node_crypto_namespaceObject=require("node:crypto");class Identifier{data;static schema=external_zod_default().string().nonempty();constructor(e){this.data=e}static create=e=>new Identifier(Identifier.schema.parse(e));static get randomUUID(){return Identifier.create((0,external_node_crypto_namespaceObject.randomUUID)())}get model(){return this.data}get isUUID(){return external_zod_default().uuidv4().safeParse(this.data).success}}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{NextResponse as r}from"next/server";import t from"zod";import{randomUUID as a}from"node:crypto";var o,s={};e.r(s),e.d(s,{Identifier:()=>f,Pagination:()=>p});var i={};e.r(i),e.d(i,{InRAM:()=>h,methods:()=>_});var n={};e.r(n),e.d(n,{DefaultErrorCodes:()=>u,endpoints:()=>m});var d={};e.r(d),e.d(d,{methods:()=>l});class c{static 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))};static 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")};static base=({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}};static forModule=e=>({inMethod:r=>({newError:(t,a)=>({...c.base(t),cause:a?c.fromUnknownError(a):null,module:e,method:r})})});static forController=e=>({inMethod:r=>({newError:(t,a)=>{let o=c.base(t),s=a?c.fromUnknownError(a):null;return!t.code&&s?.code&&(o.code=s.code),{...o,cause:s,module:e,method:r,statusCode:t.statusCode}}})});static fromUnknownError=e=>c.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:c.base({error:e})}let l=(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)=>c.forModule(s).inMethod(t).newError("string"==typeof e?{error:e,code:e,details:r}:e,a)});return i[t].response.parse(o)}catch(a){if(c.isModuleError(a))throw r.onError&&await r.onError(a),o.onError&&await o.onError(a),a;let e=c.forModule(s).inMethod(t).newError({error:"Caught unhandled module error (see `cause` field for details)"},a);throw o.onError&&await o.onError(e),e}}};var u=((o={}).REQUEST_PARSING="ZOD-CONTROLLER___REQUEST-PARSING",o.RESPONSE_PARSING="ZOD-CONTROLLER___RESPONSE-PARSING",o);let m=(e,a={})=>(o,s,i={})=>async n=>{let d={},l=c.forController(e.name).inMethod(o);try{let c=(e,r,t)=>"string"==typeof e?l.newError({statusCode:r??500,code:e,error:e,details:d},t):l.newError({...e,statusCode:r??500},t);if(a.guards)for(let e of a.guards){let r=await e({request:n,endpointError:c});if(r)throw r}if(i.guards)for(let e of i.guards){let r=await e({request:n,endpointError:c});if(r)throw r}let u=e.schemas[o];if(!u)throw l.newError({error:"No schemas were found for the endpoint",statusCode:500});if(u.query){let e=Object.fromEntries(n.nextUrl.searchParams.entries()),r=u.query.safeParse(e);if(!r.success)throw l.newError({error:r.error.message,statusCode:400,code:"ZOD-CONTROLLER___REQUEST-PARSING",details:t.treeifyError(r.error)});d={...d,...r.data}}if(u.body){let e=await n.json(),r=u.body.safeParse(e);if(!r.success)throw l.newError({error:r.error.message,statusCode:400,code:"ZOD-CONTROLLER___REQUEST-PARSING",details:t.treeifyError(r.error)});d={...d,...r.data}}let m={},p=await s(d,{request:n,flags:m,endpointError:(e,r,t)=>"string"==typeof e?l.newError({statusCode:r??500,code:e,error:e,details:d},t):l.newError({...e,statusCode:r??500},t)});if(u.response){let e=u.response.safeParse(p);if(!e.success)throw l.newError({error:e.error.message,statusCode:500,code:"ZOD-CONTROLLER___RESPONSE-PARSING",details:t.treeifyError(e.error)});if(i.eventHandlers?.onSuccess)for(let r of i.eventHandlers.onSuccess)r({request:n,result:e.data,requestPayload:d,flags:m});if(i.customResponseLogic?.onSuccess)return await i.customResponseLogic.onSuccess({req:n,response:e.data});return r.json(e.data,{status:200})}if(i.eventHandlers?.onSuccess)for(let e of i.eventHandlers.onSuccess)await e({request:n,result:void 0,requestPayload:d,flags:m});if(i.customResponseLogic?.onSuccess)return await i.customResponseLogic.onSuccess({req:n,response:{}});return r.json({},{status:200})}catch(t){let e=t;if(c.isControllerError(t)||(e=l.newError({error:"Internal error",statusCode:500},t)),e.details&&"object"==typeof e.details||(e.details={}),a.onErrorHandlers)try{for(let r of a.onErrorHandlers)await r({error:e,req:n})}catch(r){e=l.newError({error:"onError handler error",statusCode:500},r)}if(i.eventHandlers?.onError)try{for(let r of i.eventHandlers.onError)await r({error:e,req:n})}catch(r){e=l.newError({error:"onError handler error",statusCode:500},r)}if(i.customResponseLogic?.onError)return await i.customResponseLogic.onError({req:n,error:e});return r.json({message:e.message,details:e.statusCode.toString().startsWith("4")?e.details:null,code:e.code},{status:e.statusCode})}};class p{data;static schema=t.object({zeroBasedIndex:t.coerce.number().int().nonnegative(),pageSize:t.coerce.number().int().positive()});constructor(e){this.data=e}static create=e=>{let r=p.schema.parse(e);return new p(r)};get model(){return this.data}same=e=>e.model.pageSize===this.model.pageSize&&e.model.zeroBasedIndex===this.model.zeroBasedIndex;get nextPage(){return p.create({pageSize:this.data.pageSize,zeroBasedIndex:this.data.zeroBasedIndex+1})}get previousPage(){return 0===this.model.zeroBasedIndex?p.create(this.model):p.create({pageSize:this.model.pageSize,zeroBasedIndex:this.model.zeroBasedIndex-1})}get previousPage_UNSAFE(){return p.create({pageSize:this.model.pageSize,zeroBasedIndex:this.model.zeroBasedIndex-1})}}let _=e=>l({name:e.name,schemas:{...e.customOperations??{},list:{payload:t.object({filter:e.searchPayload.list,pagination:p.schema.optional()}),response:t.array(e.models.list)},details:{payload:t.object({filter:e.searchPayload.specific}),response:e.models.details.nullable()},create:{payload:t.object({payload:e.actionsPayload.create}),response:t.object({id:t.string()})},updateOne:{payload:t.object({filter:e.searchPayload.specific,payload:e.actionsPayload.update}),response:t.object({success:t.boolean()})},deleteOne:{payload:t.object({filter:e.searchPayload.specific}),response:t.object({success:t.boolean()})}}}),h=(e,r)=>{class a{___data=[];method=_(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:a={pageSize:1e3,zeroBasedIndex:0}})=>{e.searchPayload.list.parse(r),p.schema.parse(a);let o=this.___data.filter(e=>this.___listSearchLogic(e,r)).filter((e,r)=>r>=a.pageSize*a.zeroBasedIndex&&r<(a.zeroBasedIndex+1)*a.pageSize).map(e=>this.___mapDetailToList(e));return t.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};class f{data;static schema=t.string().nonempty();constructor(e){this.data=e}static create=e=>new f(f.schema.parse(e));static get randomUUID(){return f.create(a())}get model(){return this.data}get isUUID(){return t.uuidv4().safeParse(this.data).success}}export{s as ValueObjects,i as Store,n as Controller,d as Module};
1
+ import{__webpack_require__ as e}from"./rslib-runtime.js";import{NextResponse as r}from"next/server";import t from"zod";import{randomUUID as a}from"node:crypto";var o,s={};e.r(s),e.d(s,{Identifier:()=>g,Pagination:()=>p});var i={};e.r(i),e.d(i,{InRAM:()=>f,methods:()=>h,toModuleMetadata:()=>_});var n={};e.r(n),e.d(n,{DefaultErrorCodes:()=>u,endpoints:()=>m});var d={};e.r(d),e.d(d,{methods:()=>l});class c{static 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))};static 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")};static base=({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}};static forModule=e=>({inMethod:r=>({newError:(t,a)=>({...c.base(t),cause:a?c.fromUnknownError(a):null,module:e,method:r})})});static forController=e=>({inMethod:r=>({newError:(t,a)=>{let o=c.base(t),s=a?c.fromUnknownError(a):null;return!t.code&&s?.code&&(o.code=s.code),{...o,cause:s,module:e,method:r,statusCode:t.statusCode}}})});static fromUnknownError=e=>c.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:c.base({error:e})}let l=(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)=>c.forModule(s).inMethod(t).newError("string"==typeof e?{error:e,code:e,details:r}:e,a)});return i[t].response.parse(o)}catch(a){if(c.isModuleError(a))throw r.onError&&await r.onError(a),o.onError&&await o.onError(a),a;let e=c.forModule(s).inMethod(t).newError({error:"Caught unhandled module error (see `cause` field for details)"},a);throw o.onError&&await o.onError(e),e}}};var u=((o={}).REQUEST_PARSING="ZOD-CONTROLLER___REQUEST-PARSING",o.RESPONSE_PARSING="ZOD-CONTROLLER___RESPONSE-PARSING",o);let m=(e,a={})=>(o,s,i={})=>async n=>{let d={},l=c.forController(e.name).inMethod(o);try{let c=(e,r,t)=>"string"==typeof e?l.newError({statusCode:r??500,code:e,error:e,details:d},t):l.newError({...e,statusCode:r??500},t);if(a.guards)for(let e of a.guards){let r=await e({request:n,endpointError:c});if(r)throw r}if(i.guards)for(let e of i.guards){let r=await e({request:n,endpointError:c});if(r)throw r}let u=e.schemas[o];if(!u)throw l.newError({error:"No schemas were found for the endpoint",statusCode:500});if(u.query){let e=Object.fromEntries(n.nextUrl.searchParams.entries()),r=u.query.safeParse(e);if(!r.success)throw l.newError({error:r.error.message,statusCode:400,code:"ZOD-CONTROLLER___REQUEST-PARSING",details:t.treeifyError(r.error)});d={...d,...r.data}}if(u.body){let e=await n.json(),r=u.body.safeParse(e);if(!r.success)throw l.newError({error:r.error.message,statusCode:400,code:"ZOD-CONTROLLER___REQUEST-PARSING",details:t.treeifyError(r.error)});d={...d,...r.data}}let m={},p=await s(d,{request:n,flags:m,endpointError:(e,r,t)=>"string"==typeof e?l.newError({statusCode:r??500,code:e,error:e,details:d},t):l.newError({...e,statusCode:r??500},t)});if(u.response){let e=u.response.safeParse(p);if(!e.success)throw l.newError({error:e.error.message,statusCode:500,code:"ZOD-CONTROLLER___RESPONSE-PARSING",details:t.treeifyError(e.error)});if(i.eventHandlers?.onSuccess)for(let r of i.eventHandlers.onSuccess)r({request:n,result:e.data,requestPayload:d,flags:m});if(i.customResponseLogic?.onSuccess)return await i.customResponseLogic.onSuccess({req:n,response:e.data});return r.json(e.data,{status:200})}if(i.eventHandlers?.onSuccess)for(let e of i.eventHandlers.onSuccess)await e({request:n,result:void 0,requestPayload:d,flags:m});if(i.customResponseLogic?.onSuccess)return await i.customResponseLogic.onSuccess({req:n,response:{}});return r.json({},{status:200})}catch(t){let e=t;if(c.isControllerError(t)||(e=l.newError({error:"Internal error",statusCode:500},t)),e.details&&"object"==typeof e.details||(e.details={}),a.onErrorHandlers)try{for(let r of a.onErrorHandlers)await r({error:e,req:n})}catch(r){e=l.newError({error:"onError handler error",statusCode:500},r)}if(i.eventHandlers?.onError)try{for(let r of i.eventHandlers.onError)await r({error:e,req:n})}catch(r){e=l.newError({error:"onError handler error",statusCode:500},r)}if(i.customResponseLogic?.onError)return await i.customResponseLogic.onError({req:n,error:e});return r.json({message:e.message,details:e.statusCode.toString().startsWith("4")?e.details:null,code:e.code},{status:e.statusCode})}};class p{data;static schema=t.object({zeroBasedIndex:t.coerce.number().int().nonnegative(),pageSize:t.coerce.number().int().positive()});constructor(e){this.data=e}static create=e=>{let r=p.schema.parse(e);return new p(r)};get model(){return this.data}same=e=>e.model.pageSize===this.model.pageSize&&e.model.zeroBasedIndex===this.model.zeroBasedIndex;get nextPage(){return p.create({pageSize:this.data.pageSize,zeroBasedIndex:this.data.zeroBasedIndex+1})}get previousPage(){return 0===this.model.zeroBasedIndex?p.create(this.model):p.create({pageSize:this.model.pageSize,zeroBasedIndex:this.model.zeroBasedIndex-1})}get previousPage_UNSAFE(){return p.create({pageSize:this.model.pageSize,zeroBasedIndex:this.model.zeroBasedIndex-1})}}let _=e=>({name:e.name,schemas:{...e.customOperations??{},list:{payload:t.object({filter:e.searchPayload.list,pagination:p.schema.optional()}),response:t.array(e.models.list)},details:{payload:t.object({filter:e.searchPayload.specific}),response:e.models.details.nullable()},create:{payload:t.object({payload:e.actionsPayload.create}),response:t.object({id:t.string()})},updateOne:{payload:t.object({filter:e.searchPayload.specific,payload:e.actionsPayload.update}),response:t.object({success:t.boolean()})},deleteOne:{payload:t.object({filter:e.searchPayload.specific}),response:t.object({success:t.boolean()})}}}),h=e=>l(_(e)),f=(e,r)=>{class a{___data=[];method=h(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:a={pageSize:1e3,zeroBasedIndex:0}})=>{e.searchPayload.list.parse(r),p.schema.parse(a);let o=this.___data.filter(e=>this.___listSearchLogic(e,r)).filter((e,r)=>r>=a.pageSize*a.zeroBasedIndex&&r<(a.zeroBasedIndex+1)*a.pageSize).map(e=>this.___mapDetailToList(e));return t.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};class g{data;static schema=t.string().nonempty();constructor(e){this.data=e}static create=e=>new g(g.schema.parse(e));static get randomUUID(){return g.create(a())}get model(){return this.data}get isUUID(){return t.uuidv4().safeParse(this.data).success}}export{s as ValueObjects,i as Store,n as Controller,d as Module};
@@ -57,6 +57,126 @@ export type Contract<Schemas extends {
57
57
  }> ? {
58
58
  [operation in keyof Schemas['customOperations']]: (payload: z.infer<Schemas['customOperations'][operation]['payload']>) => Promise<z.infer<Schemas['customOperations'][operation]['response']>>;
59
59
  } : {});
60
+ export declare const toModuleMetadata: <Schemas extends {
61
+ models: {
62
+ list: unknown;
63
+ details: unknown;
64
+ };
65
+ searchPayload: {
66
+ list: unknown;
67
+ specific: unknown;
68
+ };
69
+ actionsPayload: {
70
+ create: unknown;
71
+ update: unknown;
72
+ };
73
+ customOperations?: Record<string, {
74
+ payload: unknown;
75
+ response: unknown;
76
+ }>;
77
+ name: string;
78
+ }>(schemas: Schemas) => {
79
+ name: string;
80
+ schemas: Record<Exclude<keyof (Schemas["customOperations"] extends Record<string, {
81
+ payload: ZodSchema;
82
+ response: ZodSchema;
83
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
84
+ payload: Schemas["customOperations"][operation]["payload"];
85
+ response: Schemas["customOperations"][operation]["response"];
86
+ }; } : {}), keyof CRUD<any, any, any>>, {
87
+ payload: (CRUD<Models<Schemas["models"]["list"], Schemas["models"]["details"]>, SearchPayload<Schemas["searchPayload"]["list"], Schemas["searchPayload"]["specific"]>, ActionsPayload<Schemas["actionsPayload"]["create"], Schemas["actionsPayload"]["update"]>> & (Schemas["customOperations"] extends Record<string, {
88
+ payload: ZodSchema;
89
+ response: ZodSchema;
90
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
91
+ payload: Schemas["customOperations"][operation]["payload"];
92
+ response: Schemas["customOperations"][operation]["response"];
93
+ }; } : {}))[Exclude<keyof (Schemas["customOperations"] extends Record<string, {
94
+ payload: ZodSchema;
95
+ response: ZodSchema;
96
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
97
+ payload: Schemas["customOperations"][operation]["payload"];
98
+ response: Schemas["customOperations"][operation]["response"];
99
+ }; } : {}), keyof CRUD<any, any, any>>]["payload"];
100
+ response: (CRUD<Models<Schemas["models"]["list"], Schemas["models"]["details"]>, SearchPayload<Schemas["searchPayload"]["list"], Schemas["searchPayload"]["specific"]>, ActionsPayload<Schemas["actionsPayload"]["create"], Schemas["actionsPayload"]["update"]>> & (Schemas["customOperations"] extends Record<string, {
101
+ payload: ZodSchema;
102
+ response: ZodSchema;
103
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
104
+ payload: Schemas["customOperations"][operation]["payload"];
105
+ response: Schemas["customOperations"][operation]["response"];
106
+ }; } : {}))[Exclude<keyof (Schemas["customOperations"] extends Record<string, {
107
+ payload: ZodSchema;
108
+ response: ZodSchema;
109
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
110
+ payload: Schemas["customOperations"][operation]["payload"];
111
+ response: Schemas["customOperations"][operation]["response"];
112
+ }; } : {}), keyof CRUD<any, any, any>>]["response"];
113
+ }> & {
114
+ list: {
115
+ payload: ZodObject<Parameters<(CRUD<Models<Schemas["models"]["list"], Schemas["models"]["details"]>, SearchPayload<Schemas["searchPayload"]["list"], Schemas["searchPayload"]["specific"]>, ActionsPayload<Schemas["actionsPayload"]["create"], Schemas["actionsPayload"]["update"]>> & (Schemas["customOperations"] extends Record<string, {
116
+ payload: ZodSchema;
117
+ response: ZodSchema;
118
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
119
+ payload: Schemas["customOperations"][operation]["payload"];
120
+ response: Schemas["customOperations"][operation]["response"];
121
+ }; } : {}))["list"]>[0] & {
122
+ pagination: ReturnType<typeof Pagination.schema.optional>;
123
+ }>;
124
+ response: ZodArray<Awaited<ReturnType<(CRUD<Models<Schemas["models"]["list"], Schemas["models"]["details"]>, SearchPayload<Schemas["searchPayload"]["list"], Schemas["searchPayload"]["specific"]>, ActionsPayload<Schemas["actionsPayload"]["create"], Schemas["actionsPayload"]["update"]>> & (Schemas["customOperations"] extends Record<string, {
125
+ payload: ZodSchema;
126
+ response: ZodSchema;
127
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
128
+ payload: Schemas["customOperations"][operation]["payload"];
129
+ response: Schemas["customOperations"][operation]["response"];
130
+ }; } : {}))["list"]>>[number]>;
131
+ };
132
+ details: {
133
+ payload: ZodObject<Parameters<(CRUD<Models<Schemas["models"]["list"], Schemas["models"]["details"]>, SearchPayload<Schemas["searchPayload"]["list"], Schemas["searchPayload"]["specific"]>, ActionsPayload<Schemas["actionsPayload"]["create"], Schemas["actionsPayload"]["update"]>> & (Schemas["customOperations"] extends Record<string, {
134
+ payload: ZodSchema;
135
+ response: ZodSchema;
136
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
137
+ payload: Schemas["customOperations"][operation]["payload"];
138
+ response: Schemas["customOperations"][operation]["response"];
139
+ }; } : {}))["details"]>[0]>;
140
+ response: ZodUnion<[Schemas["models"]["details"], z.ZodNull]>;
141
+ };
142
+ create: {
143
+ payload: ZodObject<Parameters<(CRUD<Models<Schemas["models"]["list"], Schemas["models"]["details"]>, SearchPayload<Schemas["searchPayload"]["list"], Schemas["searchPayload"]["specific"]>, ActionsPayload<Schemas["actionsPayload"]["create"], Schemas["actionsPayload"]["update"]>> & (Schemas["customOperations"] extends Record<string, {
144
+ payload: ZodSchema;
145
+ response: ZodSchema;
146
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
147
+ payload: Schemas["customOperations"][operation]["payload"];
148
+ response: Schemas["customOperations"][operation]["response"];
149
+ }; } : {}))["create"]>[0]>;
150
+ response: ZodObject<{
151
+ id: ZodString;
152
+ }>;
153
+ };
154
+ updateOne: {
155
+ payload: ZodObject<Parameters<(CRUD<Models<Schemas["models"]["list"], Schemas["models"]["details"]>, SearchPayload<Schemas["searchPayload"]["list"], Schemas["searchPayload"]["specific"]>, ActionsPayload<Schemas["actionsPayload"]["create"], Schemas["actionsPayload"]["update"]>> & (Schemas["customOperations"] extends Record<string, {
156
+ payload: ZodSchema;
157
+ response: ZodSchema;
158
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
159
+ payload: Schemas["customOperations"][operation]["payload"];
160
+ response: Schemas["customOperations"][operation]["response"];
161
+ }; } : {}))["updateOne"]>[0]>;
162
+ response: ZodObject<{
163
+ success: ZodBoolean;
164
+ }>;
165
+ };
166
+ deleteOne: {
167
+ payload: ZodObject<Parameters<(CRUD<Models<Schemas["models"]["list"], Schemas["models"]["details"]>, SearchPayload<Schemas["searchPayload"]["list"], Schemas["searchPayload"]["specific"]>, ActionsPayload<Schemas["actionsPayload"]["create"], Schemas["actionsPayload"]["update"]>> & (Schemas["customOperations"] extends Record<string, {
168
+ payload: ZodSchema;
169
+ response: ZodSchema;
170
+ }> ? { [operation in keyof Schemas["customOperations"]]: {
171
+ payload: Schemas["customOperations"][operation]["payload"];
172
+ response: Schemas["customOperations"][operation]["response"];
173
+ }; } : {}))["deleteOne"]>[0]>;
174
+ response: ZodObject<{
175
+ success: ZodBoolean;
176
+ }>;
177
+ };
178
+ };
179
+ };
60
180
  export declare const methods: <T extends Metadata>(schemas: T) => <Method extends "details" | "list" | "create" | "updateOne" | "deleteOne" | Exclude<keyof (T["customOperations"] extends Record<string, {
61
181
  payload: ZodSchema;
62
182
  response: ZodSchema;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alevnyacow/nzmt",
3
- "version": "0.9.4",
3
+ "version": "0.9.6",
4
4
  "description": "Next Zod Modules Toolkit",
5
5
  "repository": {
6
6
  "type": "git",