@visulima/crud 3.0.0-alpha.16 → 3.0.0-alpha.18
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/CHANGELOG.md +38 -0
- package/README.md +127 -5
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +64 -3
- package/dist/index.d.mts +64 -3
- package/dist/index.d.ts +64 -3
- package/dist/index.mjs +1 -1
- package/dist/next/index.cjs +1 -1
- package/dist/next/index.d.cts +21 -13
- package/dist/next/index.d.mts +21 -13
- package/dist/next/index.d.ts +21 -13
- package/dist/next/index.mjs +1 -1
- package/dist/packem_shared/CrudApiError-BH1byAwV.mjs +1 -0
- package/dist/packem_shared/CrudApiError-DkRqkpib.cjs +1 -0
- package/dist/packem_shared/PrismaAdapter-Bhocjq94.mjs +1 -0
- package/dist/packem_shared/PrismaAdapter-DDoEjhQy.cjs +1 -0
- package/dist/packem_shared/baseHandler-BGTzX4YA.mjs +1 -0
- package/dist/packem_shared/baseHandler-DnuGeT2-.cjs +1 -0
- package/dist/packem_shared/edgeHandler-CjCFAdvT.mjs +1 -0
- package/dist/packem_shared/edgeHandler-DQ2KLGlC.cjs +1 -0
- package/dist/packem_shared/get-accessible-routes-BCUs20dV.cjs +1 -0
- package/dist/packem_shared/get-accessible-routes-CGvT_kuy.mjs +1 -0
- package/dist/packem_shared/models-to-route-names-BFpwjyxy.mjs +1 -0
- package/dist/packem_shared/models-to-route-names-CWnxPVCQ.cjs +1 -0
- package/dist/packem_shared/modelsToOpenApi-QqR_HHsz.cjs +1 -0
- package/dist/packem_shared/modelsToOpenApi-pOMrwJIY.mjs +1 -0
- package/dist/packem_shared/nodeHandler-atOpJB2d.mjs +1 -0
- package/dist/packem_shared/nodeHandler-tp623oY3.cjs +1 -0
- package/dist/packem_shared/types.d-CQwyFrf3.d.cts +207 -0
- package/dist/packem_shared/types.d-CQwyFrf3.d.mts +207 -0
- package/dist/packem_shared/types.d-CQwyFrf3.d.ts +207 -0
- package/package.json +4 -4
- package/dist/packem_shared/PrismaAdapter-D0WRtRlB.cjs +0 -1
- package/dist/packem_shared/PrismaAdapter-EuQr18sT.mjs +0 -1
- package/dist/packem_shared/base-crud-handler-B6xOUGDj.cjs +0 -1
- package/dist/packem_shared/base-crud-handler-DNKq7uog.mjs +0 -1
- package/dist/packem_shared/edgeHandler-CaIWVXt-.cjs +0 -1
- package/dist/packem_shared/edgeHandler-Deds33h_.mjs +0 -1
- package/dist/packem_shared/get-accessible-routes-DLLL11KB.cjs +0 -1
- package/dist/packem_shared/get-accessible-routes-xHYBQ_6q.mjs +0 -1
- package/dist/packem_shared/models-to-route-names-Dh2b_kIL.cjs +0 -1
- package/dist/packem_shared/models-to-route-names-UU1lZmbK.mjs +0 -1
- package/dist/packem_shared/modelsToOpenApi-CsQL5VTy.cjs +0 -1
- package/dist/packem_shared/modelsToOpenApi-ocNrUF5p.mjs +0 -1
- package/dist/packem_shared/nodeHandler-CeBCrxYT.mjs +0 -1
- package/dist/packem_shared/nodeHandler-D7AuOmUo.cjs +0 -1
- package/dist/packem_shared/types.d-C_XaTdLA.d.cts +0 -126
- package/dist/packem_shared/types.d-C_XaTdLA.d.mts +0 -126
- package/dist/packem_shared/types.d-C_XaTdLA.d.ts +0 -126
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var U=Object.defineProperty;var u=(e,t)=>U(e,"name",{value:t,configurable:!0});const H=require("http-errors"),I=require("next/dist/server/api-utils/index.js"),M=require("@visulima/pagination"),B=require("node:url"),f=require("./RouteType-DLV_OhhD.cjs"),Q=require("./get-accessible-routes-DLLL11KB.cjs"),j=require("path-to-regexp"),G=u(e=>e&&typeof e=="object"&&"default"in e?e.default:e,"_interopDefaultCompat"),y=G(H);var J=Object.defineProperty,K=u((e,t)=>J(e,"name",{value:t,configurable:!0}),"t");const z=K(async({adapter:e,query:t,request:r,resourceName:n})=>({data:await e.create(n,r.body,t),status:201}),"createHandler");var X=Object.defineProperty,W=u((e,t)=>X(e,"name",{value:t,configurable:!0}),"r$2");const V=W(async({adapter:e,query:t,resourceId:r,resourceName:n})=>{if(typeof await e.getOne(n,r,t)=="object")return{data:await e.delete(n,r,t),status:200};throw y(404,`${n} ${String(r)} not found`)},"deleteHandler");var Y=Object.defineProperty,Z=u((e,t)=>Y(e,"name",{value:t,configurable:!0}),"o$1");const ee=Z(async({adapter:e,pagination:t,query:r,resourceName:n})=>{let a=!1,i;if(r.page!==void 0){if(r.page<=0)throw new Error("page query must be a strictly positive number");i={page:r.page,perPage:r.limit??t.perPage}}i&&(a=!0,r.skip=(i.page-1)*i.perPage,r.limit=i.perPage);const o=await e.getAll(n,r);if(a){const{page:s,total:l}=await e.getPaginationData(n,r);return{data:M.paginate(s,i.perPage,l,o).toJSON(),status:200}}return{data:o,status:200}},"listHandler");var te=Object.defineProperty,re=u((e,t)=>te(e,"name",{value:t,configurable:!0}),"n$1");const ne=re(async({adapter:e,query:t,resourceId:r,resourceName:n})=>{const a=await e.getOne(n,r,t);if(typeof a!="object")throw y(404,`${n} ${String(r)} not found`);return{data:a,status:200}},"readHandler");var ae=Object.defineProperty,oe=u((e,t)=>ae(e,"name",{value:t,configurable:!0}),"d$3");const ie=oe(async({adapter:e,query:t,request:r,resourceId:n,resourceName:a})=>{if(typeof await e.getOne(a,n,t)=="object")return{data:await e.update(a,n,r.body,t),status:201};throw y(404,`${a} ${String(n)} not found`)},"updateHandler");var se=Object.defineProperty,c=u((e,t)=>se(e,"name",{value:t,configurable:!0}),"f");const d=c(e=>{const t=typeof e;return e!==null&&(t==="object"||t==="function")},"isObject"),ue=c(e=>{if(!d(e))return!1;for(const t in e)if(Object.hasOwn(e,t))return!1;return!0},"isEmptyObject"),q=new Set(["__proto__","prototype","constructor"]),S=1e6,ce=c(e=>e>="0"&&e<="9","isDigit");function h(e){if(e==="0")return!0;if(/^[1-9]\d*$/.test(e)){const t=Number.parseInt(e,10);return t<=Number.MAX_SAFE_INTEGER&&t<=S}return!1}u(h,"p$1");c(h,"shouldCoerceToNumber");function b(e,t){return q.has(e)?!1:(e&&h(e)?t.push(Number.parseInt(e,10)):t.push(e),!0)}u(b,"y");c(b,"processSegment");function _(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);const t=[];let r="",n="start",a=!1,i=0;for(const o of e){if(i++,a){r+=o,a=!1;continue}if(o==="\\"){if(n==="index")throw new Error(`Invalid character '${o}' in an index at position ${i}`);if(n==="indexEnd")throw new Error(`Invalid character '${o}' after an index at position ${i}`);a=!0,n=n==="start"?"property":n;continue}switch(o){case".":{if(n==="index")throw new Error(`Invalid character '${o}' in an index at position ${i}`);if(n==="indexEnd"){n="property";break}if(!b(r,t))return[];r="",n="property";break}case"[":{if(n==="index")throw new Error(`Invalid character '${o}' in an index at position ${i}`);if(n==="indexEnd"){n="index";break}if(n==="property"||n==="start"){if((r||n==="property")&&!b(r,t))return[];r=""}n="index";break}case"]":{if(n==="index"){if(r==="")r=(t.pop()||"")+"[]",n="property";else{const s=Number.parseInt(r,10);!Number.isNaN(s)&&Number.isFinite(s)&&s>=0&&s<=Number.MAX_SAFE_INTEGER&&s<=S&&r===String(s)?t.push(s):t.push(r),r="",n="indexEnd"}break}if(n==="indexEnd")throw new Error(`Invalid character '${o}' after an index at position ${i}`);r+=o;break}default:{if(n==="index"&&!ce(o))throw new Error(`Invalid character '${o}' in an index at position ${i}`);if(n==="indexEnd")throw new Error(`Invalid character '${o}' after an index at position ${i}`);n==="start"&&(n="property"),r+=o}}}switch(a&&(r+="\\"),n){case"property":{if(!b(r,t))return[];break}case"index":throw new Error("Index was not closed");case"start":{t.push("");break}}return t}u(_,"parsePath");c(_,"parsePath");function m(e){if(typeof e=="string")return _(e);if(Array.isArray(e)){const t=[];for(const[r,n]of e.entries()){if(typeof n!="string"&&typeof n!="number")throw new TypeError(`Expected a string or number for path segment at index ${r}, got ${typeof n}`);if(typeof n=="number"&&!Number.isFinite(n))throw new TypeError(`Path segment at index ${r} must be a finite number, got ${n}`);if(q.has(n))return[];typeof n=="string"&&h(n)?t.push(Number.parseInt(n,10)):t.push(n)}return t}return[]}u(m,"d$2");c(m,"normalizePath");function pe(e,t,r){if(!d(e)||typeof t!="string"&&!Array.isArray(t))return r===void 0?e:r;const n=m(t);if(n.length===0)return r;for(let a=0;a<n.length;a++){const i=n[a];if(e=e[i],e==null){if(a!==n.length-1)return r;break}}return e===void 0?r:e}u(pe,"getProperty");c(pe,"getProperty");function $(e,t,r){if(!d(e)||typeof t!="string"&&!Array.isArray(t))return e;const n=e,a=m(t);if(a.length===0)return e;for(let i=0;i<a.length;i++){const o=a[i];if(i===a.length-1)e[o]=r;else if(!d(e[o])){const s=typeof a[i+1]=="number";e[o]=s?[]:{}}e=e[o]}return n}u($,"setProperty");c($,"setProperty");function fe(e,t){if(!d(e)||typeof t!="string"&&!Array.isArray(t))return!1;const r=m(t);if(r.length===0)return!1;for(let n=0;n<r.length;n++){const a=r[n];if(n===r.length-1)return Object.hasOwn(e,a)?(delete e[a],!0):!1;if(e=e[a],!d(e))return!1}}u(fe,"deleteProperty");c(fe,"deleteProperty");function de(e,t){if(!d(e)||typeof t!="string"&&!Array.isArray(t))return!1;const r=m(t);if(r.length===0)return!1;for(const n of r){if(!d(e)||!(n in e))return!1;e=e[n]}return!0}u(de,"hasProperty");c(de,"hasProperty");function x(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.replaceAll(/[\\.[]/g,String.raw`\$&`)}u(x,"escapePath");c(x,"escapePath");function C(e){const t=Object.entries(e);return Array.isArray(e)?t.map(([r,n])=>[h(r)?Number.parseInt(r,10):r,n]):t}u(C,"m");c(C,"normalizeEntries");function D(e,t={}){if(!Array.isArray(e))throw new TypeError(`Expected an array, got ${typeof e}`);const{preferDotForIndices:r=!1}=t,n=[];for(const[a,i]of e.entries()){if(typeof i!="string"&&typeof i!="number")throw new TypeError(`Expected a string or number for path segment at index ${a}, got ${typeof i}`);if(typeof i=="number")if(!Number.isInteger(i)||i<0){const o=x(String(i));n.push(a===0?o:`.${o}`)}else r&&a>0?n.push(`.${i}`):n.push(`[${i}]`);else if(typeof i=="string")if(i==="")a===0||n.push(".");else if(h(i)){const o=Number.parseInt(i,10);r&&a>0?n.push(`.${o}`):n.push(`[${o}]`)}else{const o=x(i);n.push(a===0?o:`.${o}`)}}return n.join("")}u(D,"stringifyPath");c(D,"stringifyPath");function*A(e,t=[],r=new Set){if(!d(e)||ue(e)){t.length>0&&(yield D(t));return}if(!r.has(e)){r.add(e);for(const[n,a]of C(e))t.push(n),yield*A(a,t,r),t.pop();r.delete(e)}}u(A,"x");c(A,"deepKeysIterator");function le(e){return[...A(e)]}u(le,"deepKeys");c(le,"deepKeys");function ye(e){const t={};if(!d(e))return t;for(const[r,n]of Object.entries(e))$(t,r,n);return t}u(ye,"unflatten");c(ye,"unflatten");var ge=Object.defineProperty,w=u((e,t)=>ge(e,"name",{value:t,configurable:!0}),"i$1");const k=w(e=>{const t={};return e.split(",").forEach(r=>{$(t,r,!0)}),t},"parseRecursive"),he=w(e=>{const t=JSON.parse(e),r={};return Object.keys(t).forEach(n=>{$(r,n,t[n])}),r},"parseWhere"),me=w(e=>{const t={},r=JSON.parse(e);if(Object.keys(r).length>0){const n=Object.keys(r)[0];(r[n]==="$asc"||r[n]==="$desc")&&(t[n]=r[n])}if(Object.keys(t).length!==1)throw new Error("orderBy needs to be an object with exactly 1 property with either $asc or $desc value");return t},"parseOrderBy"),be=w(e=>{if(e){const{searchParams:t}=new B.URL(e),r={};return t.get("select")&&(r.select=k(t.get("select"))),t.get("include")&&(r.include=k(t.get("include"))),t.get("where")&&(r.where=he(t.get("where"))),t.get("orderBy")&&(r.orderBy=me(t.get("orderBy"))),t.has("limit")&&(r.limit=Number.isFinite(+t.get("limit"))?+t.get("limit"):void 0),t.has("skip")&&(r.skip=Number.isFinite(+t.get("skip"))?+t.get("skip"):void 0),t.get("distinct")&&(r.distinct=t.get("distinct")),t.get("page")&&(r.page=Number.isFinite(+t.get("page"))?+t.get("page"):void 0),{originalQuery:Object.fromEntries(t.entries()),...r}}return{}},"parseQuery");var $e=Object.defineProperty,we=u((e,t)=>$e(e,"name",{value:t,configurable:!0}),"e");const Ee=we(e=>Number.isSafeInteger(+e)?+e:e,"formatResourceId");var ve=Object.defineProperty,F=u((e,t)=>ve(e,"name",{value:t,configurable:!0}),"s");const Pe=F(e=>`${e.charAt(0).toLowerCase()}${e.slice(1)}`,"ensureCamelCase"),Te=F((e,t)=>{const r=e.split("?")[0];if(r===void 0)throw new TypeError("Path is undefined");const n=Object.keys(t).find(a=>{const i=t[a],o=Pe(i);return new RegExp(`(${i}|${o}$)|(${i}|${o}/)`,"g").test(r)});if(n===void 0)throw new Error(`Couldn't find model name for url ${e}`);return{modelName:n,resourceName:t[n]}},"getResourceNameFromUrl");var Ne=Object.defineProperty,xe=u((e,t)=>Ne(e,"name",{value:t,configurable:!0}),"u");const Ae=xe((e,t,r)=>{const n=t.split("?")[0];if(n===void 0)throw new TypeError("Path is undefined");if(!n.includes(`/${r}`))throw new Error(`invalid resource name '${r}' for route '${n}'`);const a=j.match(`/*placeholder/${r}{/:id}`,{decode:decodeURIComponent}),i=j.match(`/*placeholder/${r}`,{decode:decodeURIComponent});switch(e){case"DELETE":{const o=a(n);return typeof o=="object"&&o.params.id?{resourceId:o.params.id,routeType:f.RouteType.DELETE}:{routeType:null}}case"GET":{const o=a(n);return typeof o=="object"&&o.params.id?{resourceId:o.params.id,routeType:f.RouteType.READ_ONE}:{routeType:f.RouteType.READ_ALL}}case"PATCH":case"PUT":{const o=a(n);return typeof o=="object"&&o.params.id?{resourceId:o.params.id,routeType:f.RouteType.UPDATE}:{routeType:null}}case"POST":return i(n)?{routeType:f.RouteType.CREATE}:{routeType:null};default:return{routeType:null}}},"getRouteType");var Re=Object.defineProperty,Oe=u((e,t)=>Re(e,"name",{value:t,configurable:!0}),"a");const Ie=["create","delete","getAll","getOne","parseQuery","update","getPaginationData","getModels"],je=Oe(e=>{Ie.forEach(t=>{if(!e[t])throw y(500,`Adapter must implement the "${t}" method.`)})},"validateAdapterMethods");var ke=Object.defineProperty,qe=u((e,t)=>ke(e,"name",{value:t,configurable:!0}),"h");const Se=/\/$/u;async function L(e,t,r,n){try{je(r)}catch(s){const l=s;throw new I.ApiError(l.statusCode,l.message)}await r.init?.();const a={formatResourceId:Ee,pagination:{perPage:20},...n},i=await r.mapModelsToRouteNames?.(),o={};return r.getModels().forEach(s=>{o[s]=a.models?.[s]?.name??i?.[s]??s}),async(s,l)=>{const{modelName:E,resourceName:R}=Te(s.url,o);if(!R)throw y(404,`Resource not found: ${s.url}`);const{resourceId:O,routeType:v}=Ae(s.method,s.url,R);if(v===null)throw y(404,`Route not found: ${s.url}`);const P=n?.models?.[E];if(!Q.E(P?.only,P?.exclude,n?.exposeStrategy??"all").includes(v))throw y(404,`Route not found: ${s.url}`);try{const T=P?.formatResourceId?.(O)??a.formatResourceId(O);await r.connect?.();const N=be(`https://${s.headers.host?.replace(Se,"")??""}/${s.url}`),g={adapter:r,query:r.parseQuery(E,N),resourceName:E};try{let p;switch(v){case f.RouteType.CREATE:{p=await(a.handlers?.create??z)({...g,request:s});break}case f.RouteType.DELETE:{p=await(a.handlers?.delete??V)({...g,resourceId:T});break}case f.RouteType.READ_ALL:{p=await(a.handlers?.list??ee)({...g,pagination:a.pagination,query:{...g.query,limit:N.limit??void 0,page:N.page??void 0}});break}case f.RouteType.READ_ONE:{p=await(a.handlers?.get??ne)({...g,resourceId:T});break}case f.RouteType.UPDATE:{p=await(a.handlers?.update??ie)({...g,request:s,resourceId:T});break}default:p={data:"Method not found",status:404}}await e(l,p)}catch(p){if(r.handleError&&!(p instanceof I.ApiError))r.handleError(p);else throw p}}finally{await r.disconnect?.(),await t(l)}}}u(L,"N");qe(L,"baseHandler");exports.N=L;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var M=Object.defineProperty;var u=(e,r)=>M(e,"name",{value:r,configurable:!0});import{createRequire as U}from"node:module";import y from"http-errors";import{ApiError as R}from"next/dist/server/api-utils/index.js";import{paginate as Q}from"@visulima/pagination";import{RouteType as f}from"./RouteType-BQ2RxFPE.mjs";import{E as J}from"./get-accessible-routes-xHYBQ_6q.mjs";import{match as k}from"path-to-regexp";const B=U(import.meta.url),h=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,H=u(e=>{if(typeof h<"u"&&h.versions&&h.versions.node){const[r,t]=h.versions.node.split(".").map(Number);if(r>22||r===22&&t>=3||r===20&&t>=16)return h.getBuiltinModule(e)}return B(e)},"__cjs_getBuiltinModule"),{URL:G}=H("node:url");var K=Object.defineProperty,z=u((e,r)=>K(e,"name",{value:r,configurable:!0}),"t");const X=z(async({adapter:e,query:r,request:t,resourceName:n})=>({data:await e.create(n,t.body,r),status:201}),"createHandler");var W=Object.defineProperty,V=u((e,r)=>W(e,"name",{value:r,configurable:!0}),"r$2");const Y=V(async({adapter:e,query:r,resourceId:t,resourceName:n})=>{if(typeof await e.getOne(n,t,r)=="object")return{data:await e.delete(n,t,r),status:200};throw y(404,`${n} ${String(t)} not found`)},"deleteHandler");var Z=Object.defineProperty,ee=u((e,r)=>Z(e,"name",{value:r,configurable:!0}),"o$1");const re=ee(async({adapter:e,pagination:r,query:t,resourceName:n})=>{let a=!1,i;if(t.page!==void 0){if(t.page<=0)throw new Error("page query must be a strictly positive number");i={page:t.page,perPage:t.limit??r.perPage}}i&&(a=!0,t.skip=(i.page-1)*i.perPage,t.limit=i.perPage);const o=await e.getAll(n,t);if(a){const{page:s,total:l}=await e.getPaginationData(n,t);return{data:Q(s,i.perPage,l,o).toJSON(),status:200}}return{data:o,status:200}},"listHandler");var te=Object.defineProperty,ne=u((e,r)=>te(e,"name",{value:r,configurable:!0}),"n$1");const ae=ne(async({adapter:e,query:r,resourceId:t,resourceName:n})=>{const a=await e.getOne(n,t,r);if(typeof a!="object")throw y(404,`${n} ${String(t)} not found`);return{data:a,status:200}},"readHandler");var oe=Object.defineProperty,ie=u((e,r)=>oe(e,"name",{value:r,configurable:!0}),"d$3");const se=ie(async({adapter:e,query:r,request:t,resourceId:n,resourceName:a})=>{if(typeof await e.getOne(a,n,r)=="object")return{data:await e.update(a,n,t.body,r),status:201};throw y(404,`${a} ${String(n)} not found`)},"updateHandler");var ue=Object.defineProperty,c=u((e,r)=>ue(e,"name",{value:r,configurable:!0}),"f");const d=c(e=>{const r=typeof e;return e!==null&&(r==="object"||r==="function")},"isObject"),ce=c(e=>{if(!d(e))return!1;for(const r in e)if(Object.hasOwn(e,r))return!1;return!0},"isEmptyObject"),S=new Set(["__proto__","prototype","constructor"]),q=1e6,pe=c(e=>e>="0"&&e<="9","isDigit");function m(e){if(e==="0")return!0;if(/^[1-9]\d*$/.test(e)){const r=Number.parseInt(e,10);return r<=Number.MAX_SAFE_INTEGER&&r<=q}return!1}u(m,"p$1");c(m,"shouldCoerceToNumber");function $(e,r){return S.has(e)?!1:(e&&m(e)?r.push(Number.parseInt(e,10)):r.push(e),!0)}u($,"y");c($,"processSegment");function C(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);const r=[];let t="",n="start",a=!1,i=0;for(const o of e){if(i++,a){t+=o,a=!1;continue}if(o==="\\"){if(n==="index")throw new Error(`Invalid character '${o}' in an index at position ${i}`);if(n==="indexEnd")throw new Error(`Invalid character '${o}' after an index at position ${i}`);a=!0,n=n==="start"?"property":n;continue}switch(o){case".":{if(n==="index")throw new Error(`Invalid character '${o}' in an index at position ${i}`);if(n==="indexEnd"){n="property";break}if(!$(t,r))return[];t="",n="property";break}case"[":{if(n==="index")throw new Error(`Invalid character '${o}' in an index at position ${i}`);if(n==="indexEnd"){n="index";break}if(n==="property"||n==="start"){if((t||n==="property")&&!$(t,r))return[];t=""}n="index";break}case"]":{if(n==="index"){if(t==="")t=(r.pop()||"")+"[]",n="property";else{const s=Number.parseInt(t,10);!Number.isNaN(s)&&Number.isFinite(s)&&s>=0&&s<=Number.MAX_SAFE_INTEGER&&s<=q&&t===String(s)?r.push(s):r.push(t),t="",n="indexEnd"}break}if(n==="indexEnd")throw new Error(`Invalid character '${o}' after an index at position ${i}`);t+=o;break}default:{if(n==="index"&&!pe(o))throw new Error(`Invalid character '${o}' in an index at position ${i}`);if(n==="indexEnd")throw new Error(`Invalid character '${o}' after an index at position ${i}`);n==="start"&&(n="property"),t+=o}}}switch(a&&(t+="\\"),n){case"property":{if(!$(t,r))return[];break}case"index":throw new Error("Index was not closed");case"start":{r.push("");break}}return r}u(C,"parsePath");c(C,"parsePath");function b(e){if(typeof e=="string")return C(e);if(Array.isArray(e)){const r=[];for(const[t,n]of e.entries()){if(typeof n!="string"&&typeof n!="number")throw new TypeError(`Expected a string or number for path segment at index ${t}, got ${typeof n}`);if(typeof n=="number"&&!Number.isFinite(n))throw new TypeError(`Path segment at index ${t} must be a finite number, got ${n}`);if(S.has(n))return[];typeof n=="string"&&m(n)?r.push(Number.parseInt(n,10)):r.push(n)}return r}return[]}u(b,"d$2");c(b,"normalizePath");function fe(e,r,t){if(!d(e)||typeof r!="string"&&!Array.isArray(r))return t===void 0?e:t;const n=b(r);if(n.length===0)return t;for(let a=0;a<n.length;a++){const i=n[a];if(e=e[i],e==null){if(a!==n.length-1)return t;break}}return e===void 0?t:e}u(fe,"getProperty");c(fe,"getProperty");function w(e,r,t){if(!d(e)||typeof r!="string"&&!Array.isArray(r))return e;const n=e,a=b(r);if(a.length===0)return e;for(let i=0;i<a.length;i++){const o=a[i];if(i===a.length-1)e[o]=t;else if(!d(e[o])){const s=typeof a[i+1]=="number";e[o]=s?[]:{}}e=e[o]}return n}u(w,"setProperty");c(w,"setProperty");function de(e,r){if(!d(e)||typeof r!="string"&&!Array.isArray(r))return!1;const t=b(r);if(t.length===0)return!1;for(let n=0;n<t.length;n++){const a=t[n];if(n===t.length-1)return Object.hasOwn(e,a)?(delete e[a],!0):!1;if(e=e[a],!d(e))return!1}}u(de,"deleteProperty");c(de,"deleteProperty");function le(e,r){if(!d(e)||typeof r!="string"&&!Array.isArray(r))return!1;const t=b(r);if(t.length===0)return!1;for(const n of t){if(!d(e)||!(n in e))return!1;e=e[n]}return!0}u(le,"hasProperty");c(le,"hasProperty");function x(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.replaceAll(/[\\.[]/g,String.raw`\$&`)}u(x,"escapePath");c(x,"escapePath");function D(e){const r=Object.entries(e);return Array.isArray(e)?r.map(([t,n])=>[m(t)?Number.parseInt(t,10):t,n]):r}u(D,"m");c(D,"normalizeEntries");function F(e,r={}){if(!Array.isArray(e))throw new TypeError(`Expected an array, got ${typeof e}`);const{preferDotForIndices:t=!1}=r,n=[];for(const[a,i]of e.entries()){if(typeof i!="string"&&typeof i!="number")throw new TypeError(`Expected a string or number for path segment at index ${a}, got ${typeof i}`);if(typeof i=="number")if(!Number.isInteger(i)||i<0){const o=x(String(i));n.push(a===0?o:`.${o}`)}else t&&a>0?n.push(`.${i}`):n.push(`[${i}]`);else if(typeof i=="string")if(i==="")a===0||n.push(".");else if(m(i)){const o=Number.parseInt(i,10);t&&a>0?n.push(`.${o}`):n.push(`[${o}]`)}else{const o=x(i);n.push(a===0?o:`.${o}`)}}return n.join("")}u(F,"stringifyPath");c(F,"stringifyPath");function*O(e,r=[],t=new Set){if(!d(e)||ce(e)){r.length>0&&(yield F(r));return}if(!t.has(e)){t.add(e);for(const[n,a]of D(e))r.push(n),yield*O(a,r,t),r.pop();t.delete(e)}}u(O,"x");c(O,"deepKeysIterator");function ye(e){return[...O(e)]}u(ye,"deepKeys");c(ye,"deepKeys");function ge(e){const r={};if(!d(e))return r;for(const[t,n]of Object.entries(e))w(r,t,n);return r}u(ge,"unflatten");c(ge,"unflatten");var he=Object.defineProperty,E=u((e,r)=>he(e,"name",{value:r,configurable:!0}),"i$1");const _=E(e=>{const r={};return e.split(",").forEach(t=>{w(r,t,!0)}),r},"parseRecursive"),me=E(e=>{const r=JSON.parse(e),t={};return Object.keys(r).forEach(n=>{w(t,n,r[n])}),t},"parseWhere"),be=E(e=>{const r={},t=JSON.parse(e);if(Object.keys(t).length>0){const n=Object.keys(t)[0];(t[n]==="$asc"||t[n]==="$desc")&&(r[n]=t[n])}if(Object.keys(r).length!==1)throw new Error("orderBy needs to be an object with exactly 1 property with either $asc or $desc value");return r},"parseOrderBy"),$e=E(e=>{if(e){const{searchParams:r}=new G(e),t={};return r.get("select")&&(t.select=_(r.get("select"))),r.get("include")&&(t.include=_(r.get("include"))),r.get("where")&&(t.where=me(r.get("where"))),r.get("orderBy")&&(t.orderBy=be(r.get("orderBy"))),r.has("limit")&&(t.limit=Number.isFinite(+r.get("limit"))?+r.get("limit"):void 0),r.has("skip")&&(t.skip=Number.isFinite(+r.get("skip"))?+r.get("skip"):void 0),r.get("distinct")&&(t.distinct=r.get("distinct")),r.get("page")&&(t.page=Number.isFinite(+r.get("page"))?+r.get("page"):void 0),{originalQuery:Object.fromEntries(r.entries()),...t}}return{}},"parseQuery");var we=Object.defineProperty,Ee=u((e,r)=>we(e,"name",{value:r,configurable:!0}),"e");const ve=Ee(e=>Number.isSafeInteger(+e)?+e:e,"formatResourceId");var Pe=Object.defineProperty,L=u((e,r)=>Pe(e,"name",{value:r,configurable:!0}),"s");const Ne=L(e=>`${e.charAt(0).toLowerCase()}${e.slice(1)}`,"ensureCamelCase"),je=L((e,r)=>{const t=e.split("?")[0];if(t===void 0)throw new TypeError("Path is undefined");const n=Object.keys(r).find(a=>{const i=r[a],o=Ne(i);return new RegExp(`(${i}|${o}$)|(${i}|${o}/)`,"g").test(t)});if(n===void 0)throw new Error(`Couldn't find model name for url ${e}`);return{modelName:n,resourceName:r[n]}},"getResourceNameFromUrl");var Te=Object.defineProperty,xe=u((e,r)=>Te(e,"name",{value:r,configurable:!0}),"u");const Oe=xe((e,r,t)=>{const n=r.split("?")[0];if(n===void 0)throw new TypeError("Path is undefined");if(!n.includes(`/${t}`))throw new Error(`invalid resource name '${t}' for route '${n}'`);const a=k(`/*placeholder/${t}{/:id}`,{decode:decodeURIComponent}),i=k(`/*placeholder/${t}`,{decode:decodeURIComponent});switch(e){case"DELETE":{const o=a(n);return typeof o=="object"&&o.params.id?{resourceId:o.params.id,routeType:f.DELETE}:{routeType:null}}case"GET":{const o=a(n);return typeof o=="object"&&o.params.id?{resourceId:o.params.id,routeType:f.READ_ONE}:{routeType:f.READ_ALL}}case"PATCH":case"PUT":{const o=a(n);return typeof o=="object"&&o.params.id?{resourceId:o.params.id,routeType:f.UPDATE}:{routeType:null}}case"POST":return i(n)?{routeType:f.CREATE}:{routeType:null};default:return{routeType:null}}},"getRouteType");var Ae=Object.defineProperty,Ie=u((e,r)=>Ae(e,"name",{value:r,configurable:!0}),"a");const Re=["create","delete","getAll","getOne","parseQuery","update","getPaginationData","getModels"],ke=Ie(e=>{Re.forEach(r=>{if(!e[r])throw y(500,`Adapter must implement the "${r}" method.`)})},"validateAdapterMethods");var _e=Object.defineProperty,Se=u((e,r)=>_e(e,"name",{value:r,configurable:!0}),"h");const qe=/\/$/u;async function Ce(e,r,t,n){try{ke(t)}catch(s){const l=s;throw new R(l.statusCode,l.message)}await t.init?.();const a={formatResourceId:ve,pagination:{perPage:20},...n},i=await t.mapModelsToRouteNames?.(),o={};return t.getModels().forEach(s=>{o[s]=a.models?.[s]?.name??i?.[s]??s}),async(s,l)=>{const{modelName:v,resourceName:A}=je(s.url,o);if(!A)throw y(404,`Resource not found: ${s.url}`);const{resourceId:I,routeType:P}=Oe(s.method,s.url,A);if(P===null)throw y(404,`Route not found: ${s.url}`);const N=n?.models?.[v];if(!J(N?.only,N?.exclude,n?.exposeStrategy??"all").includes(P))throw y(404,`Route not found: ${s.url}`);try{const j=N?.formatResourceId?.(I)??a.formatResourceId(I);await t.connect?.();const T=$e(`https://${s.headers.host?.replace(qe,"")??""}/${s.url}`),g={adapter:t,query:t.parseQuery(v,T),resourceName:v};try{let p;switch(P){case f.CREATE:{p=await(a.handlers?.create??X)({...g,request:s});break}case f.DELETE:{p=await(a.handlers?.delete??Y)({...g,resourceId:j});break}case f.READ_ALL:{p=await(a.handlers?.list??re)({...g,pagination:a.pagination,query:{...g.query,limit:T.limit??void 0,page:T.page??void 0}});break}case f.READ_ONE:{p=await(a.handlers?.get??ae)({...g,resourceId:j});break}case f.UPDATE:{p=await(a.handlers?.update??se)({...g,request:s,resourceId:j});break}default:p={data:"Method not found",status:404}}await e(l,p)}catch(p){if(t.handleError&&!(p instanceof R))t.handleError(p);else throw p}}finally{await t.disconnect?.(),await r(l)}}}u(Ce,"N");Se(Ce,"baseHandler");export{Ce as N};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var n=Object.defineProperty;var t=(e,a)=>n(e,"name",{value:a,configurable:!0});const r=require("./base-crud-handler-B6xOUGDj.cjs");var c=Object.defineProperty,o=t((e,a)=>c(e,"name",{value:a,configurable:!0}),"r");const u=o(async(e,a)=>await r.N(async(d,s)=>Response.json(s.data,{headers:{"content-type":"application/json; charset=utf-8"},status:s.status}),async()=>{},e,a),"handler");module.exports=u;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var n=Object.defineProperty;var s=(a,t)=>n(a,"name",{value:t,configurable:!0});import{N as r}from"./base-crud-handler-DNKq7uog.mjs";var o=Object.defineProperty,c=s((a,t)=>o(a,"name",{value:t,configurable:!0}),"r");const i=c(async(a,t)=>await r(async(p,e)=>Response.json(e.data,{headers:{"content-type":"application/json; charset=utf-8"},status:e.status}),async()=>{},a,t),"handler");export{i as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var n=Object.defineProperty;var o=(e,t)=>n(e,"name",{value:t,configurable:!0});const r=require("./RouteType-DLV_OhhD.cjs");var l=Object.defineProperty,s=o((e,t)=>l(e,"name",{value:t,configurable:!0}),"R");const y=s((e,t,E="all")=>{let u=E==="none"?[]:[r.RouteType.READ_ALL,r.RouteType.READ_ONE,r.RouteType.UPDATE,r.RouteType.DELETE,r.RouteType.CREATE];return Array.isArray(e)&&(u=e),t?.length&&(u=u.filter(R=>!t.includes(R))),u},"getAccessibleRoutes");exports.E=y;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var o=Object.defineProperty;var l=(e,r)=>o(e,"name",{value:r,configurable:!0});import{RouteType as t}from"./RouteType-BQ2RxFPE.mjs";var u=Object.defineProperty,A=l((e,r)=>u(e,"name",{value:r,configurable:!0}),"R");const s=A((e,r,n="all")=>{let E=n==="none"?[]:[t.READ_ALL,t.READ_ONE,t.UPDATE,t.DELETE,t.CREATE];return Array.isArray(e)&&(E=e),r?.length&&(E=E.filter(a=>!r.includes(a))),E},"getAccessibleRoutes");export{s as E};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var n=Object.defineProperty;var t=(e,r)=>n(e,"name",{value:r,configurable:!0});var u=Object.defineProperty,c=t((e,r)=>u(e,"name",{value:r,configurable:!0}),"n");const l=c((e,r)=>{const a={};return r.forEach(o=>{a[o]=e[o].plural}),a},"modelsToRouteNames");exports.a=l;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var n=Object.defineProperty;var t=(e,r)=>n(e,"name",{value:r,configurable:!0});var u=Object.defineProperty,c=t((e,r)=>u(e,"name",{value:r,configurable:!0}),"n");const f=c((e,r)=>{const o={};return r.forEach(a=>{o[a]=e[a].plural}),o},"modelsToRouteNames");export{f as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var I=Object.defineProperty;var h=(t,e)=>I(t,"name",{value:e,configurable:!0});const N=require("./models-to-route-names-Dh2b_kIL.cjs"),L=require("@visulima/pagination"),D=require("@visulima/prisma-dmmf-transformer"),A=require("./get-accessible-routes-DLLL11KB.cjs"),u=require("./RouteType-DLV_OhhD.cjs");var B=Object.defineProperty,k=h((t,e)=>B(t,"name",{value:e,configurable:!0}),"t$1");const T=k(t=>`#/components/schemas/${t}`,"formatSchemaReference");var q=Object.defineProperty,v=h((t,e)=>q(t,"name",{value:e,configurable:!0}),"u$3");const w=v(t=>{switch(t){case"BigInt":case"Int":return"integer";case"Boolean":return"boolean";case"Bytes":case"DateTime":case"String":return"string";case"Decimal":case"Float":return"number";case"Json":return"object";case"Null":return"null";default:return""}},"getJSONSchemaScalar"),R="PaginationData",_=[{methodStart:"createOne",schemaNameStart:"Create"},{methodStart:"updateOne",schemaNameStart:"Update"}];let F=class{static{h(this,"R")}constructor(e){this.dmmf=e}dmmf;static{v(this,"PrismaJsonSchemaParser")}schemaInputTypes=new Map;formatInputTypeData(e){if(e.kind==="object"){const a=T(e.type.name);return e.isList?{items:{$ref:a},type:"array",xml:{name:e.type.name,wrapped:!0}}:{$ref:a}}const s=w(e.type);return e.isList?{items:{type:s},type:"array",xml:{name:e.type.name,wrapped:!0}}:{type:s}}getExampleModelsSchemas(e,s){const a=v(o=>{const i=o.replace("#/components/schemas/",""),p=s[i],c={};return Object.entries(p.properties??{}).forEach(([l,m])=>{const d=m.type;c[l]=d==="array"?[n(m.items)]:d}),c},"referenceToSchema"),r=v(o=>{const i={};return Object.entries(o).forEach(([p,c])=>{i[p]=c.$ref===void 0?c.type:a(c.$ref)}),i},"objectPropertiesToSchema"),n=v(o=>{const i={};return Object.entries(o).forEach(([p,c])=>{c.items.$ref!==void 0?i[p]=[a(c.items.$ref)]:c.type==="array"?i[p]=[n(c.items)]:c.type==="object"?i[p]=r(c.properties):i[p]=c.type}),i},"arrayItemsToSchema");return e.reduce((o,i)=>{const p={},c=s[i];Object.entries(c.properties).forEach(([d,y])=>{const g=y.type;g==="array"?p[d]=[a(y.items.$ref)]:g==="object"?p[d]=r(y.properties):p[d]=g});const l=this.getPaginationDataSchema()[R],m={};return Object.entries(l.properties).forEach(([d,y])=>{m[d]=y.type}),{...o,[`${i}Page`]:{value:{data:[p],meta:m}},[`${i}s`]:{value:[p]},[i]:{value:p}}},{})}getPaginatedModelsSchemas(e){return e.reduce((s,a)=>({...s,[`${a}Page`]:{properties:{data:{items:{$ref:T(a)},type:"array",xml:{name:"data",wrapped:!0}},meta:{$ref:T(R)}},type:"object",xml:{name:`${a}Page`}}}),{})}getPaginationDataSchema(){return L.createPaginationMetaSchemaObject(R)}parseInputTypes(e){const s=e.reduce((a,r)=>(_.map(n=>({name:`${n.methodStart}${r}`,schemaName:`${n.schemaNameStart}${r}`})).forEach(({name:n,schemaName:o})=>{const i=this.dmmf.mutationType.fieldMap[n].args[0].inputTypes[0].type.fields,p=[],c=i.reduce((l,m)=>{if(m.inputTypes[0].kind==="scalar"){const d=D.getJSONSchemaProperty(this.dmmf.datamodel,{})({name:m.name,...m.inputTypes[0]}),{type:y}=d[1];y&&Array.isArray(y)?y.includes("null")&&(l[m.name]={...y,nullable:!0,type:y.filter(g=>g!=="null")},l[m.name].type.length===1&&(l[m.name]={...l[m.name],type:l[m.name].type[0]})):l[m.name]=d[1]}else{const d=this.parseObjectInputType(m.inputTypes[0]);l[m.name]={...d,nullable:m.isNullable}}return m.isRequired&&p.push(m.name),l},{});a[o]={properties:c,type:"object",xml:{name:o}},p.length>0&&(a[o].required=p)}),a),{});return this.schemaInputTypes.forEach((a,r)=>{s[r]={properties:a,type:"object",xml:{name:r}}}),s}parseModels(){const e=D.transformDMMF(this.dmmf).definitions;return Object.keys(e).forEach(s=>{const{properties:a}=e[s];Object.keys(a).forEach(r=>{Array.isArray(a[r].type)&&a[r].type.includes("null")&&(a[r].type=a[r].type.filter(n=>n!=="null"),a[r].type.length===1&&(a[r].type=a[r].type[0]),a[r].nullable=!0)})}),e}parseObjectInputType(e){return e.kind==="object"?(this.schemaInputTypes.has(e.type.name)||(this.schemaInputTypes.set(e.type.name,{}),e.type.fields.forEach(s=>{let a={};if(s.inputTypes.length>1){let r=!1;const n=s.inputTypes.map(o=>{const i=this.formatInputTypeData(o);if(i.type==="null"){r=!0;return}return i}).filter(Boolean);n.length===1?a=n[0]:a.anyOf=n,r&&(a.nullable=!0)}else{const r=s.inputTypes[0];a=this.formatInputTypeData(r)}this.schemaInputTypes.set(e.type.name,{...this.schemaInputTypes.get(e.type.name),[s.name]:a}),s.inputTypes.forEach(r=>{r.kind==="object"&&this.parseObjectInputType(r)})})),{$ref:T(e.type.name)}):{type:w(e.type)}}};var U=Object.defineProperty,J=h((t,e)=>U(t,"name",{value:e,configurable:!0}),"o$1");const Q=J((t,e,s="all")=>t.reduce((a,r)=>e?.[r]?{...a,[r]:A.E(e[r].only,e[r].exclude,s)}:{...a,[r]:A.E(void 0,void 0,s)},{}),"getModelsAccessibleRoutes");var V=Object.defineProperty,W=h((t,e)=>V(t,"name",{value:e,configurable:!0}),"i$2");const f={distinct:{description:"Fields to distinctively retrieve",name:"distinct",schema:{type:"string"}},include:{description:"Include relations, same as select",name:"include",schema:{type:"string"}},limit:{description:"Maximum number of elements to retrieve",name:"limit",schema:{minimum:0,type:"integer"}},orderBy:{description:'Field on which to order by a direction. See <a href="https://next-crud.js.org/query-params#orderBy">the docs</a>',name:"orderBy",schema:{type:"string"}},page:{description:"Page number. Use only for pagination.",name:"page",schema:{minimum:1,type:"integer"}},select:{description:"Fields to select. For nested fields, chain them separated with a dot, eg: user.posts",name:"select",schema:{type:"string"}},skip:{description:"Number of rows to skip",name:"skip",schema:{minimum:0,type:"integer"}},where:{description:'Fields to filter. See <a href="https://next-crud.js.org/query-params#where">the docs</a>',name:"where",schema:{type:"string"}}},C=[f.select,f.include].filter(Boolean),z=[...C,f.limit,f.skip,f.where,f.orderBy,f.page,f.distinct].filter(Boolean),G=W((t,e=[])=>t===u.RouteType.READ_ALL?[...z,...e].filter(Boolean):[...C,...e].filter(Boolean),"getQueryParameters");var H=Object.defineProperty,K=h((t,e)=>H(t,"name",{value:e,configurable:!0}),"t");const E=K(t=>`#/components/examples/${t}`,"formatExampleReference");var X=Object.defineProperty,j=h((t,e)=>X(t,"name",{value:e,configurable:!0}),"i$1");const b=j((t,e)=>e?{items:{$ref:T(t)},type:"array"}:{$ref:T(t)},"generateContentForSchema"),Y=j((t,e)=>t===u.RouteType.CREATE?{content:{content:{"application/json":{example:E(e),schema:b(e)}},description:`${e} created`},statusCode:201}:t===u.RouteType.DELETE?{content:{content:{"application/json":{example:E(e),schema:b(e)}},description:`${e} item deleted`},statusCode:200}:t===u.RouteType.READ_ALL?{content:{content:{"application/json":{examples:{Default:{$ref:E(`${e}s`)},Pagination:{$ref:E(`${e}Page`)}},schema:{oneOf:[b(e,!0),b(`${e}Page`,!1)]}}},description:`${e} list retrieved`},statusCode:200}:t===u.RouteType.READ_ONE?{content:{content:{"application/json":{example:E(e),schema:b(e)}},description:`${e} item retrieved`},statusCode:200}:{content:{content:{"application/json":{example:E(e),schema:b(e)}},description:`${e} item updated`},statusCode:200},"generateSwaggerResponse"),x=j((t,e)=>({content:{"application/json":{schema:{$ref:T(`${t}${e}`)}}}}),"generateRequestBody"),Z=j(t=>{switch(t){case u.RouteType.CREATE:return"post";case u.RouteType.DELETE:return"delete";case u.RouteType.READ_ALL:case u.RouteType.READ_ONE:return"get";case u.RouteType.UPDATE:return"put";default:throw new TypeError(`Method for route type ${t} was not found.`)}},"getRouteTypeMethod"),M=j(({hasId:t,modelName:e,modelsConfig:s,routeTypes:a,tag:r})=>{const n={};return a.forEach(o=>{const i=s?.[e]?.routeTypes?.[o]?.response.name??s?.[e]?.type?.name??e,p=Z(o),c=Y(o,i);n[p]={parameters:G(o).map(l=>({...l,in:"query"})),responses:{[c.statusCode]:c.content,...s?.[e]?.routeTypes?.[o]?.responses},summary:s?.[e]?.routeTypes?.[o]?.summary,tags:[r]},t&&n[p].parameters.push({description:`ID of the ${e}`,in:"path",name:"id",required:!0,schema:{type:"string"}}),o===u.RouteType.UPDATE?n[p].requestBody=x("Update",i):o===u.RouteType.CREATE&&(n[p].requestBody=x("Create",i))}),n},"generateSwaggerPathObject"),ee=j(({models:t,modelsConfig:e,routes:s,routesMap:a})=>Object.keys(s).reduce((r,n)=>{const o=s[n],i=t?.[n]?.name??a?.[n]??n,p=e?.[n]?.tag.name??n;if(o.includes(u.RouteType.CREATE)||o.includes(u.RouteType.READ_ALL)){const c=`/${i}`,l=[u.RouteType.READ_ALL,u.RouteType.CREATE].filter(m=>o.includes(m));r[c]=M({modelName:n,modelsConfig:e,routeTypes:l,tag:p})}if(o.includes(u.RouteType.READ_ONE)||o.includes(u.RouteType.UPDATE)||o.includes(u.RouteType.DELETE)){const c=`/${i}/{id}`,l=[u.RouteType.READ_ONE,u.RouteType.UPDATE,u.RouteType.DELETE].filter(m=>o.includes(m));r[c]=M({hasId:!0,modelName:n,modelsConfig:e,routeTypes:l,tag:p})}return r},{}),"getSwaggerPaths");var te=Object.defineProperty,ae=h((t,e)=>te(t,"name",{value:e,configurable:!0}),"r");const re=ae((t,e)=>t.map(s=>e?.[s]?.tag?e[s].tag:{name:s}),"getSwaggerTags");var se=Object.defineProperty,$=h((t,e)=>se(t,"name",{value:e,configurable:!0}),"i");const ne=$((t,e)=>{if(typeof t.example=="string"){const s=t.example.replace("#/components/examples/","");e[s]?.value!==void 0&&(t.example=e[s].value)}},"applyExampleToContent"),oe=$((t,e)=>(Object.values(t).forEach(s=>{Object.values(s).forEach(a=>{typeof a.responses=="object"&&Object.values(a.responses).forEach(r=>{typeof r.content=="object"&&Object.values(r.content).forEach(n=>{ne(n,e)})})})}),t),"overwritePathsExampleWithModel"),ie=$(async({crud:t={models:{}},defaultExposeStrategy:e="all",models:s,prismaClient:a,swagger:r={allowedMediaTypes:{"application/json":!0},models:{}}})=>{let n,o;if(a._dmmf!==void 0?(n=a._dmmf,o=n.mappingsMap):a._getDmmf!==void 0&&(n=await a._getDmmf(),o=n.mappingsMap),n===void 0||o===void 0)throw new TypeError("Couldn't get prisma client models");const i=new F(n),p=i.parseModels(),c=Object.keys(p),l=JSON.stringify({...p,...i.parseInputTypes(c),...i.getPaginationDataSchema(),...i.getPaginatedModelsSchemas(c)});s!==void 0&&s.forEach(S=>{if(!Object.keys(o).includes(S))throw new Error(`Model name ${S} is invalid.`)});const m=s??Object.keys(o),d=Q(m,t.models,e),y=re(m,r.models),g=ee({models:t.models,modelsConfig:r.models,routes:d,routesMap:N.a(o,m)}),O=JSON.parse(l.replaceAll("#/definitions","#/components/schemas")),P=i.getExampleModelsSchemas(c,O);return{examples:P,paths:oe(g,P),schemas:O,tags:y}},"modelsToOpenApi");module.exports=ie;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var C=Object.defineProperty;var f=(t,e)=>C(t,"name",{value:e,configurable:!0});import{a as I}from"./models-to-route-names-UU1lZmbK.mjs";import{createPaginationMetaSchemaObject as N}from"@visulima/pagination";import{getJSONSchemaProperty as L,transformDMMF as B}from"@visulima/prisma-dmmf-transformer";import{E as A}from"./get-accessible-routes-xHYBQ_6q.mjs";import{RouteType as l}from"./RouteType-BQ2RxFPE.mjs";var k=Object.defineProperty,_=f((t,e)=>k(t,"name",{value:e,configurable:!0}),"t$1");const E=_(t=>`#/components/schemas/${t}`,"formatSchemaReference");var q=Object.defineProperty,v=f((t,e)=>q(t,"name",{value:e,configurable:!0}),"u$3");const w=v(t=>{switch(t){case"BigInt":case"Int":return"integer";case"Boolean":return"boolean";case"Bytes":case"DateTime":case"String":return"string";case"Decimal":case"Float":return"number";case"Json":return"object";case"Null":return"null";default:return""}},"getJSONSchemaScalar"),$="PaginationData",F=[{methodStart:"createOne",schemaNameStart:"Create"},{methodStart:"updateOne",schemaNameStart:"Update"}];let U=class{static{f(this,"R")}constructor(e){this.dmmf=e}dmmf;static{v(this,"PrismaJsonSchemaParser")}schemaInputTypes=new Map;formatInputTypeData(e){if(e.kind==="object"){const a=E(e.type.name);return e.isList?{items:{$ref:a},type:"array",xml:{name:e.type.name,wrapped:!0}}:{$ref:a}}const s=w(e.type);return e.isList?{items:{type:s},type:"array",xml:{name:e.type.name,wrapped:!0}}:{type:s}}getExampleModelsSchemas(e,s){const a=v(o=>{const i=o.replace("#/components/schemas/",""),p=s[i],c={};return Object.entries(p.properties??{}).forEach(([u,m])=>{const d=m.type;c[u]=d==="array"?[n(m.items)]:d}),c},"referenceToSchema"),r=v(o=>{const i={};return Object.entries(o).forEach(([p,c])=>{i[p]=c.$ref===void 0?c.type:a(c.$ref)}),i},"objectPropertiesToSchema"),n=v(o=>{const i={};return Object.entries(o).forEach(([p,c])=>{c.items.$ref!==void 0?i[p]=[a(c.items.$ref)]:c.type==="array"?i[p]=[n(c.items)]:c.type==="object"?i[p]=r(c.properties):i[p]=c.type}),i},"arrayItemsToSchema");return e.reduce((o,i)=>{const p={},c=s[i];Object.entries(c.properties).forEach(([d,y])=>{const g=y.type;g==="array"?p[d]=[a(y.items.$ref)]:g==="object"?p[d]=r(y.properties):p[d]=g});const u=this.getPaginationDataSchema()[$],m={};return Object.entries(u.properties).forEach(([d,y])=>{m[d]=y.type}),{...o,[`${i}Page`]:{value:{data:[p],meta:m}},[`${i}s`]:{value:[p]},[i]:{value:p}}},{})}getPaginatedModelsSchemas(e){return e.reduce((s,a)=>({...s,[`${a}Page`]:{properties:{data:{items:{$ref:E(a)},type:"array",xml:{name:"data",wrapped:!0}},meta:{$ref:E($)}},type:"object",xml:{name:`${a}Page`}}}),{})}getPaginationDataSchema(){return N($)}parseInputTypes(e){const s=e.reduce((a,r)=>(F.map(n=>({name:`${n.methodStart}${r}`,schemaName:`${n.schemaNameStart}${r}`})).forEach(({name:n,schemaName:o})=>{const i=this.dmmf.mutationType.fieldMap[n].args[0].inputTypes[0].type.fields,p=[],c=i.reduce((u,m)=>{if(m.inputTypes[0].kind==="scalar"){const d=L(this.dmmf.datamodel,{})({name:m.name,...m.inputTypes[0]}),{type:y}=d[1];y&&Array.isArray(y)?y.includes("null")&&(u[m.name]={...y,nullable:!0,type:y.filter(g=>g!=="null")},u[m.name].type.length===1&&(u[m.name]={...u[m.name],type:u[m.name].type[0]})):u[m.name]=d[1]}else{const d=this.parseObjectInputType(m.inputTypes[0]);u[m.name]={...d,nullable:m.isNullable}}return m.isRequired&&p.push(m.name),u},{});a[o]={properties:c,type:"object",xml:{name:o}},p.length>0&&(a[o].required=p)}),a),{});return this.schemaInputTypes.forEach((a,r)=>{s[r]={properties:a,type:"object",xml:{name:r}}}),s}parseModels(){const e=B(this.dmmf).definitions;return Object.keys(e).forEach(s=>{const{properties:a}=e[s];Object.keys(a).forEach(r=>{Array.isArray(a[r].type)&&a[r].type.includes("null")&&(a[r].type=a[r].type.filter(n=>n!=="null"),a[r].type.length===1&&(a[r].type=a[r].type[0]),a[r].nullable=!0)})}),e}parseObjectInputType(e){return e.kind==="object"?(this.schemaInputTypes.has(e.type.name)||(this.schemaInputTypes.set(e.type.name,{}),e.type.fields.forEach(s=>{let a={};if(s.inputTypes.length>1){let r=!1;const n=s.inputTypes.map(o=>{const i=this.formatInputTypeData(o);if(i.type==="null"){r=!0;return}return i}).filter(Boolean);n.length===1?a=n[0]:a.anyOf=n,r&&(a.nullable=!0)}else{const r=s.inputTypes[0];a=this.formatInputTypeData(r)}this.schemaInputTypes.set(e.type.name,{...this.schemaInputTypes.get(e.type.name),[s.name]:a}),s.inputTypes.forEach(r=>{r.kind==="object"&&this.parseObjectInputType(r)})})),{$ref:E(e.type.name)}):{type:w(e.type)}}};var J=Object.defineProperty,Q=f((t,e)=>J(t,"name",{value:e,configurable:!0}),"o$1");const V=Q((t,e,s="all")=>t.reduce((a,r)=>e?.[r]?{...a,[r]:A(e[r].only,e[r].exclude,s)}:{...a,[r]:A(void 0,void 0,s)},{}),"getModelsAccessibleRoutes");var W=Object.defineProperty,z=f((t,e)=>W(t,"name",{value:e,configurable:!0}),"i$2");const h={distinct:{description:"Fields to distinctively retrieve",name:"distinct",schema:{type:"string"}},include:{description:"Include relations, same as select",name:"include",schema:{type:"string"}},limit:{description:"Maximum number of elements to retrieve",name:"limit",schema:{minimum:0,type:"integer"}},orderBy:{description:'Field on which to order by a direction. See <a href="https://next-crud.js.org/query-params#orderBy">the docs</a>',name:"orderBy",schema:{type:"string"}},page:{description:"Page number. Use only for pagination.",name:"page",schema:{minimum:1,type:"integer"}},select:{description:"Fields to select. For nested fields, chain them separated with a dot, eg: user.posts",name:"select",schema:{type:"string"}},skip:{description:"Number of rows to skip",name:"skip",schema:{minimum:0,type:"integer"}},where:{description:'Fields to filter. See <a href="https://next-crud.js.org/query-params#where">the docs</a>',name:"where",schema:{type:"string"}}},M=[h.select,h.include].filter(Boolean),G=[...M,h.limit,h.skip,h.where,h.orderBy,h.page,h.distinct].filter(Boolean),H=z((t,e=[])=>t===l.READ_ALL?[...G,...e].filter(Boolean):[...M,...e].filter(Boolean),"getQueryParameters");var K=Object.defineProperty,X=f((t,e)=>K(t,"name",{value:e,configurable:!0}),"t");const b=X(t=>`#/components/examples/${t}`,"formatExampleReference");var Y=Object.defineProperty,j=f((t,e)=>Y(t,"name",{value:e,configurable:!0}),"i$1");const T=j((t,e)=>e?{items:{$ref:E(t)},type:"array"}:{$ref:E(t)},"generateContentForSchema"),Z=j((t,e)=>t===l.CREATE?{content:{content:{"application/json":{example:b(e),schema:T(e)}},description:`${e} created`},statusCode:201}:t===l.DELETE?{content:{content:{"application/json":{example:b(e),schema:T(e)}},description:`${e} item deleted`},statusCode:200}:t===l.READ_ALL?{content:{content:{"application/json":{examples:{Default:{$ref:b(`${e}s`)},Pagination:{$ref:b(`${e}Page`)}},schema:{oneOf:[T(e,!0),T(`${e}Page`,!1)]}}},description:`${e} list retrieved`},statusCode:200}:t===l.READ_ONE?{content:{content:{"application/json":{example:b(e),schema:T(e)}},description:`${e} item retrieved`},statusCode:200}:{content:{content:{"application/json":{example:b(e),schema:T(e)}},description:`${e} item updated`},statusCode:200},"generateSwaggerResponse"),x=j((t,e)=>({content:{"application/json":{schema:{$ref:E(`${t}${e}`)}}}}),"generateRequestBody"),ee=j(t=>{switch(t){case l.CREATE:return"post";case l.DELETE:return"delete";case l.READ_ALL:case l.READ_ONE:return"get";case l.UPDATE:return"put";default:throw new TypeError(`Method for route type ${t} was not found.`)}},"getRouteTypeMethod"),R=j(({hasId:t,modelName:e,modelsConfig:s,routeTypes:a,tag:r})=>{const n={};return a.forEach(o=>{const i=s?.[e]?.routeTypes?.[o]?.response.name??s?.[e]?.type?.name??e,p=ee(o),c=Z(o,i);n[p]={parameters:H(o).map(u=>({...u,in:"query"})),responses:{[c.statusCode]:c.content,...s?.[e]?.routeTypes?.[o]?.responses},summary:s?.[e]?.routeTypes?.[o]?.summary,tags:[r]},t&&n[p].parameters.push({description:`ID of the ${e}`,in:"path",name:"id",required:!0,schema:{type:"string"}}),o===l.UPDATE?n[p].requestBody=x("Update",i):o===l.CREATE&&(n[p].requestBody=x("Create",i))}),n},"generateSwaggerPathObject"),te=j(({models:t,modelsConfig:e,routes:s,routesMap:a})=>Object.keys(s).reduce((r,n)=>{const o=s[n],i=t?.[n]?.name??a?.[n]??n,p=e?.[n]?.tag.name??n;if(o.includes(l.CREATE)||o.includes(l.READ_ALL)){const c=`/${i}`,u=[l.READ_ALL,l.CREATE].filter(m=>o.includes(m));r[c]=R({modelName:n,modelsConfig:e,routeTypes:u,tag:p})}if(o.includes(l.READ_ONE)||o.includes(l.UPDATE)||o.includes(l.DELETE)){const c=`/${i}/{id}`,u=[l.READ_ONE,l.UPDATE,l.DELETE].filter(m=>o.includes(m));r[c]=R({hasId:!0,modelName:n,modelsConfig:e,routeTypes:u,tag:p})}return r},{}),"getSwaggerPaths");var ae=Object.defineProperty,re=f((t,e)=>ae(t,"name",{value:e,configurable:!0}),"r");const se=re((t,e)=>t.map(s=>e?.[s]?.tag?e[s].tag:{name:s}),"getSwaggerTags");var ne=Object.defineProperty,O=f((t,e)=>ne(t,"name",{value:e,configurable:!0}),"i");const oe=O((t,e)=>{if(typeof t.example=="string"){const s=t.example.replace("#/components/examples/","");e[s]?.value!==void 0&&(t.example=e[s].value)}},"applyExampleToContent"),ie=O((t,e)=>(Object.values(t).forEach(s=>{Object.values(s).forEach(a=>{typeof a.responses=="object"&&Object.values(a.responses).forEach(r=>{typeof r.content=="object"&&Object.values(r.content).forEach(n=>{oe(n,e)})})})}),t),"overwritePathsExampleWithModel"),fe=O(async({crud:t={models:{}},defaultExposeStrategy:e="all",models:s,prismaClient:a,swagger:r={allowedMediaTypes:{"application/json":!0},models:{}}})=>{let n,o;if(a._dmmf!==void 0?(n=a._dmmf,o=n.mappingsMap):a._getDmmf!==void 0&&(n=await a._getDmmf(),o=n.mappingsMap),n===void 0||o===void 0)throw new TypeError("Couldn't get prisma client models");const i=new U(n),p=i.parseModels(),c=Object.keys(p),u=JSON.stringify({...p,...i.parseInputTypes(c),...i.getPaginationDataSchema(),...i.getPaginatedModelsSchemas(c)});s!==void 0&&s.forEach(D=>{if(!Object.keys(o).includes(D))throw new Error(`Model name ${D} is invalid.`)});const m=s??Object.keys(o),d=V(m,t.models,e),y=se(m,r.models),g=te({models:t.models,modelsConfig:r.models,routes:d,routesMap:I(o,m)}),P=JSON.parse(u.replaceAll("#/definitions","#/components/schemas")),S=i.getExampleModelsSchemas(c,P);return{examples:S,paths:ie(g,S),schemas:P,tags:y}},"modelsToOpenApi");export{fe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var r=Object.defineProperty;var s=(a,e)=>r(a,"name",{value:e,configurable:!0});import{N as d}from"./base-crud-handler-DNKq7uog.mjs";var c=Object.defineProperty,o=s((a,e)=>c(a,"name",{value:e,configurable:!0}),"a");const i=o(async(a,e)=>await d(async(t,n)=>{t.status(n.status).send(n.data)},async t=>{t.end()},a,e),"handler");export{i as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var r=Object.defineProperty;var n=(a,e)=>r(a,"name",{value:e,configurable:!0});const c=require("./base-crud-handler-B6xOUGDj.cjs");var d=Object.defineProperty,u=n((a,e)=>d(a,"name",{value:e,configurable:!0}),"a");const i=u(async(a,e)=>await c.N(async(s,t)=>{s.status(t.status).send(t.data)},async s=>{s.end()},a,e),"handler");module.exports=i;
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
declare enum RouteType {
|
|
2
|
-
CREATE = "CREATE",
|
|
3
|
-
DELETE = "DELETE",
|
|
4
|
-
READ_ALL = "READ_ALL",
|
|
5
|
-
READ_ONE = "READ_ONE",
|
|
6
|
-
UPDATE = "UPDATE",
|
|
7
|
-
}
|
|
8
|
-
interface ModelOption {
|
|
9
|
-
exclude?: RouteType[];
|
|
10
|
-
formatResourceId?: (resourceId: string) => number | string;
|
|
11
|
-
name?: string;
|
|
12
|
-
only?: RouteType[];
|
|
13
|
-
}
|
|
14
|
-
type ModelsOptions<M extends string = string> = { [key in M]?: ModelOption };
|
|
15
|
-
type CreateHandler = <T, Q, Request>(parameters: HandlerParameters<T, Q> & {
|
|
16
|
-
request: Request & {
|
|
17
|
-
body: Record<string, unknown>;
|
|
18
|
-
};
|
|
19
|
-
}) => Promise<{
|
|
20
|
-
data: unknown;
|
|
21
|
-
status: number;
|
|
22
|
-
}>;
|
|
23
|
-
type DeleteHandler = <T, Q>(parameters: UniqueResourceHandlerParameters<T, Q>) => Promise<{
|
|
24
|
-
data: unknown;
|
|
25
|
-
status: number;
|
|
26
|
-
}>;
|
|
27
|
-
type GetHandler = <T, Q>(parameters: UniqueResourceHandlerParameters<T, Q>) => Promise<{
|
|
28
|
-
data: unknown;
|
|
29
|
-
status: number;
|
|
30
|
-
}>;
|
|
31
|
-
type ListHandler = <T, Q extends ParsedQueryParameters>(parameters: HandlerParameters<T, Q> & {
|
|
32
|
-
pagination: PaginationConfig;
|
|
33
|
-
}) => Promise<{
|
|
34
|
-
data: unknown;
|
|
35
|
-
status: number;
|
|
36
|
-
}>;
|
|
37
|
-
type UpdateHandler = <T, Q, Request>(parameters: UniqueResourceHandlerParameters<T, Q> & {
|
|
38
|
-
request: Request & {
|
|
39
|
-
body: Partial<T>;
|
|
40
|
-
};
|
|
41
|
-
}) => Promise<{
|
|
42
|
-
data: unknown;
|
|
43
|
-
status: number;
|
|
44
|
-
}>;
|
|
45
|
-
interface HandlerOptions<M extends string = string> {
|
|
46
|
-
exposeStrategy?: "all" | "none";
|
|
47
|
-
formatResourceId?: (resourceId: string) => number | string;
|
|
48
|
-
handlers?: {
|
|
49
|
-
create?: CreateHandler;
|
|
50
|
-
delete?: DeleteHandler;
|
|
51
|
-
get?: GetHandler;
|
|
52
|
-
list?: ListHandler;
|
|
53
|
-
update?: UpdateHandler;
|
|
54
|
-
};
|
|
55
|
-
models?: ModelsOptions<M>;
|
|
56
|
-
pagination?: PaginationConfig;
|
|
57
|
-
}
|
|
58
|
-
interface PaginationConfig {
|
|
59
|
-
perPage: number;
|
|
60
|
-
}
|
|
61
|
-
interface HandlerParameters<T, Q> {
|
|
62
|
-
adapter: Adapter<T, Q>;
|
|
63
|
-
query: Q;
|
|
64
|
-
resourceName: string;
|
|
65
|
-
}
|
|
66
|
-
interface UniqueResourceHandlerParameters<T, Q> {
|
|
67
|
-
adapter: Adapter<T, Q>;
|
|
68
|
-
query: Q;
|
|
69
|
-
resourceId: number | string;
|
|
70
|
-
resourceName: string;
|
|
71
|
-
}
|
|
72
|
-
interface Adapter<T, Q, M extends string = string> {
|
|
73
|
-
connect?: () => Promise<void>;
|
|
74
|
-
create: (resourceName: M, data: unknown, query: Q) => Promise<T>;
|
|
75
|
-
delete: (resourceName: M, resourceId: number | string, query: Q) => Promise<T>;
|
|
76
|
-
disconnect?: () => Promise<void>;
|
|
77
|
-
getAll: (resourceName: M, query: Q) => Promise<T[]>;
|
|
78
|
-
getModels: () => M[];
|
|
79
|
-
getOne: (resourceName: M, resourceId: number | string, query: Q) => Promise<T>;
|
|
80
|
-
getPaginationData: (resourceName: M, query: Q) => Promise<PaginationData>;
|
|
81
|
-
handleError?: (error: Error) => void;
|
|
82
|
-
init?: () => Promise<void>;
|
|
83
|
-
mapModelsToRouteNames?: () => Promise<{ [key in M]?: string }>;
|
|
84
|
-
models?: M[];
|
|
85
|
-
parseQuery: (resourceName: M, query: ParsedQueryParameters) => Q;
|
|
86
|
-
update: (resourceName: M, resourceId: number | string, data: unknown, query: Q) => Promise<T>;
|
|
87
|
-
}
|
|
88
|
-
interface PaginationData {
|
|
89
|
-
page: number;
|
|
90
|
-
pageCount: number;
|
|
91
|
-
total: number;
|
|
92
|
-
}
|
|
93
|
-
type RecursiveField = Record<string, Record<string, boolean> | boolean>;
|
|
94
|
-
type WhereOperator = "$cont" | "$ends" | "$eq" | "$gt" | "$gte" | "$in" | "$isnull" | "$lt" | "$lte" | "$neq" | "$notin" | "$starts";
|
|
95
|
-
type SearchCondition = Date | boolean | number | string | null;
|
|
96
|
-
type WhereCondition = { [key in WhereOperator]?: SearchCondition };
|
|
97
|
-
type Condition = {
|
|
98
|
-
[key: string]: Condition | SearchCondition | WhereCondition;
|
|
99
|
-
};
|
|
100
|
-
type WhereField = Condition & {
|
|
101
|
-
$and?: Condition | Condition[];
|
|
102
|
-
$not?: Condition | Condition[];
|
|
103
|
-
$or?: Condition | Condition[];
|
|
104
|
-
};
|
|
105
|
-
type OrderByOperator = "$asc" | "$desc";
|
|
106
|
-
type OrderByField = Record<string, OrderByOperator>;
|
|
107
|
-
interface ParsedQueryParameters {
|
|
108
|
-
distinct?: string;
|
|
109
|
-
include?: RecursiveField;
|
|
110
|
-
limit?: number;
|
|
111
|
-
orderBy?: OrderByField;
|
|
112
|
-
originalQuery?: Record<string, string>;
|
|
113
|
-
page?: number;
|
|
114
|
-
select?: RecursiveField;
|
|
115
|
-
skip?: number;
|
|
116
|
-
where?: WhereField;
|
|
117
|
-
}
|
|
118
|
-
type ExecuteHandler<Request, Response> = (request: Request, response: Response) => Promise<void>;
|
|
119
|
-
interface FakePrismaClient {
|
|
120
|
-
$connect: () => void;
|
|
121
|
-
$disconnect: () => Promise<void>;
|
|
122
|
-
[key: string]: unknown;
|
|
123
|
-
_dmmf?: unknown;
|
|
124
|
-
_getDmmf?: () => unknown;
|
|
125
|
-
}
|
|
126
|
-
export { Adapter as A, Condition as C, ExecuteHandler as E, FakePrismaClient as F, HandlerOptions as H, ModelsOptions as M, OrderByField as O, PaginationData as P, RouteType as R, SearchCondition as S, UniqueResourceHandlerParameters as U, WhereCondition as W, ParsedQueryParameters as a, HandlerParameters as b, ModelOption as c, OrderByOperator as d, PaginationConfig as e, RecursiveField as f, WhereField as g, WhereOperator as h };
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
declare enum RouteType {
|
|
2
|
-
CREATE = "CREATE",
|
|
3
|
-
DELETE = "DELETE",
|
|
4
|
-
READ_ALL = "READ_ALL",
|
|
5
|
-
READ_ONE = "READ_ONE",
|
|
6
|
-
UPDATE = "UPDATE",
|
|
7
|
-
}
|
|
8
|
-
interface ModelOption {
|
|
9
|
-
exclude?: RouteType[];
|
|
10
|
-
formatResourceId?: (resourceId: string) => number | string;
|
|
11
|
-
name?: string;
|
|
12
|
-
only?: RouteType[];
|
|
13
|
-
}
|
|
14
|
-
type ModelsOptions<M extends string = string> = { [key in M]?: ModelOption };
|
|
15
|
-
type CreateHandler = <T, Q, Request>(parameters: HandlerParameters<T, Q> & {
|
|
16
|
-
request: Request & {
|
|
17
|
-
body: Record<string, unknown>;
|
|
18
|
-
};
|
|
19
|
-
}) => Promise<{
|
|
20
|
-
data: unknown;
|
|
21
|
-
status: number;
|
|
22
|
-
}>;
|
|
23
|
-
type DeleteHandler = <T, Q>(parameters: UniqueResourceHandlerParameters<T, Q>) => Promise<{
|
|
24
|
-
data: unknown;
|
|
25
|
-
status: number;
|
|
26
|
-
}>;
|
|
27
|
-
type GetHandler = <T, Q>(parameters: UniqueResourceHandlerParameters<T, Q>) => Promise<{
|
|
28
|
-
data: unknown;
|
|
29
|
-
status: number;
|
|
30
|
-
}>;
|
|
31
|
-
type ListHandler = <T, Q extends ParsedQueryParameters>(parameters: HandlerParameters<T, Q> & {
|
|
32
|
-
pagination: PaginationConfig;
|
|
33
|
-
}) => Promise<{
|
|
34
|
-
data: unknown;
|
|
35
|
-
status: number;
|
|
36
|
-
}>;
|
|
37
|
-
type UpdateHandler = <T, Q, Request>(parameters: UniqueResourceHandlerParameters<T, Q> & {
|
|
38
|
-
request: Request & {
|
|
39
|
-
body: Partial<T>;
|
|
40
|
-
};
|
|
41
|
-
}) => Promise<{
|
|
42
|
-
data: unknown;
|
|
43
|
-
status: number;
|
|
44
|
-
}>;
|
|
45
|
-
interface HandlerOptions<M extends string = string> {
|
|
46
|
-
exposeStrategy?: "all" | "none";
|
|
47
|
-
formatResourceId?: (resourceId: string) => number | string;
|
|
48
|
-
handlers?: {
|
|
49
|
-
create?: CreateHandler;
|
|
50
|
-
delete?: DeleteHandler;
|
|
51
|
-
get?: GetHandler;
|
|
52
|
-
list?: ListHandler;
|
|
53
|
-
update?: UpdateHandler;
|
|
54
|
-
};
|
|
55
|
-
models?: ModelsOptions<M>;
|
|
56
|
-
pagination?: PaginationConfig;
|
|
57
|
-
}
|
|
58
|
-
interface PaginationConfig {
|
|
59
|
-
perPage: number;
|
|
60
|
-
}
|
|
61
|
-
interface HandlerParameters<T, Q> {
|
|
62
|
-
adapter: Adapter<T, Q>;
|
|
63
|
-
query: Q;
|
|
64
|
-
resourceName: string;
|
|
65
|
-
}
|
|
66
|
-
interface UniqueResourceHandlerParameters<T, Q> {
|
|
67
|
-
adapter: Adapter<T, Q>;
|
|
68
|
-
query: Q;
|
|
69
|
-
resourceId: number | string;
|
|
70
|
-
resourceName: string;
|
|
71
|
-
}
|
|
72
|
-
interface Adapter<T, Q, M extends string = string> {
|
|
73
|
-
connect?: () => Promise<void>;
|
|
74
|
-
create: (resourceName: M, data: unknown, query: Q) => Promise<T>;
|
|
75
|
-
delete: (resourceName: M, resourceId: number | string, query: Q) => Promise<T>;
|
|
76
|
-
disconnect?: () => Promise<void>;
|
|
77
|
-
getAll: (resourceName: M, query: Q) => Promise<T[]>;
|
|
78
|
-
getModels: () => M[];
|
|
79
|
-
getOne: (resourceName: M, resourceId: number | string, query: Q) => Promise<T>;
|
|
80
|
-
getPaginationData: (resourceName: M, query: Q) => Promise<PaginationData>;
|
|
81
|
-
handleError?: (error: Error) => void;
|
|
82
|
-
init?: () => Promise<void>;
|
|
83
|
-
mapModelsToRouteNames?: () => Promise<{ [key in M]?: string }>;
|
|
84
|
-
models?: M[];
|
|
85
|
-
parseQuery: (resourceName: M, query: ParsedQueryParameters) => Q;
|
|
86
|
-
update: (resourceName: M, resourceId: number | string, data: unknown, query: Q) => Promise<T>;
|
|
87
|
-
}
|
|
88
|
-
interface PaginationData {
|
|
89
|
-
page: number;
|
|
90
|
-
pageCount: number;
|
|
91
|
-
total: number;
|
|
92
|
-
}
|
|
93
|
-
type RecursiveField = Record<string, Record<string, boolean> | boolean>;
|
|
94
|
-
type WhereOperator = "$cont" | "$ends" | "$eq" | "$gt" | "$gte" | "$in" | "$isnull" | "$lt" | "$lte" | "$neq" | "$notin" | "$starts";
|
|
95
|
-
type SearchCondition = Date | boolean | number | string | null;
|
|
96
|
-
type WhereCondition = { [key in WhereOperator]?: SearchCondition };
|
|
97
|
-
type Condition = {
|
|
98
|
-
[key: string]: Condition | SearchCondition | WhereCondition;
|
|
99
|
-
};
|
|
100
|
-
type WhereField = Condition & {
|
|
101
|
-
$and?: Condition | Condition[];
|
|
102
|
-
$not?: Condition | Condition[];
|
|
103
|
-
$or?: Condition | Condition[];
|
|
104
|
-
};
|
|
105
|
-
type OrderByOperator = "$asc" | "$desc";
|
|
106
|
-
type OrderByField = Record<string, OrderByOperator>;
|
|
107
|
-
interface ParsedQueryParameters {
|
|
108
|
-
distinct?: string;
|
|
109
|
-
include?: RecursiveField;
|
|
110
|
-
limit?: number;
|
|
111
|
-
orderBy?: OrderByField;
|
|
112
|
-
originalQuery?: Record<string, string>;
|
|
113
|
-
page?: number;
|
|
114
|
-
select?: RecursiveField;
|
|
115
|
-
skip?: number;
|
|
116
|
-
where?: WhereField;
|
|
117
|
-
}
|
|
118
|
-
type ExecuteHandler<Request, Response> = (request: Request, response: Response) => Promise<void>;
|
|
119
|
-
interface FakePrismaClient {
|
|
120
|
-
$connect: () => void;
|
|
121
|
-
$disconnect: () => Promise<void>;
|
|
122
|
-
[key: string]: unknown;
|
|
123
|
-
_dmmf?: unknown;
|
|
124
|
-
_getDmmf?: () => unknown;
|
|
125
|
-
}
|
|
126
|
-
export { Adapter as A, Condition as C, ExecuteHandler as E, FakePrismaClient as F, HandlerOptions as H, ModelsOptions as M, OrderByField as O, PaginationData as P, RouteType as R, SearchCondition as S, UniqueResourceHandlerParameters as U, WhereCondition as W, ParsedQueryParameters as a, HandlerParameters as b, ModelOption as c, OrderByOperator as d, PaginationConfig as e, RecursiveField as f, WhereField as g, WhereOperator as h };
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
declare enum RouteType {
|
|
2
|
-
CREATE = "CREATE",
|
|
3
|
-
DELETE = "DELETE",
|
|
4
|
-
READ_ALL = "READ_ALL",
|
|
5
|
-
READ_ONE = "READ_ONE",
|
|
6
|
-
UPDATE = "UPDATE",
|
|
7
|
-
}
|
|
8
|
-
interface ModelOption {
|
|
9
|
-
exclude?: RouteType[];
|
|
10
|
-
formatResourceId?: (resourceId: string) => number | string;
|
|
11
|
-
name?: string;
|
|
12
|
-
only?: RouteType[];
|
|
13
|
-
}
|
|
14
|
-
type ModelsOptions<M extends string = string> = { [key in M]?: ModelOption };
|
|
15
|
-
type CreateHandler = <T, Q, Request>(parameters: HandlerParameters<T, Q> & {
|
|
16
|
-
request: Request & {
|
|
17
|
-
body: Record<string, unknown>;
|
|
18
|
-
};
|
|
19
|
-
}) => Promise<{
|
|
20
|
-
data: unknown;
|
|
21
|
-
status: number;
|
|
22
|
-
}>;
|
|
23
|
-
type DeleteHandler = <T, Q>(parameters: UniqueResourceHandlerParameters<T, Q>) => Promise<{
|
|
24
|
-
data: unknown;
|
|
25
|
-
status: number;
|
|
26
|
-
}>;
|
|
27
|
-
type GetHandler = <T, Q>(parameters: UniqueResourceHandlerParameters<T, Q>) => Promise<{
|
|
28
|
-
data: unknown;
|
|
29
|
-
status: number;
|
|
30
|
-
}>;
|
|
31
|
-
type ListHandler = <T, Q extends ParsedQueryParameters>(parameters: HandlerParameters<T, Q> & {
|
|
32
|
-
pagination: PaginationConfig;
|
|
33
|
-
}) => Promise<{
|
|
34
|
-
data: unknown;
|
|
35
|
-
status: number;
|
|
36
|
-
}>;
|
|
37
|
-
type UpdateHandler = <T, Q, Request>(parameters: UniqueResourceHandlerParameters<T, Q> & {
|
|
38
|
-
request: Request & {
|
|
39
|
-
body: Partial<T>;
|
|
40
|
-
};
|
|
41
|
-
}) => Promise<{
|
|
42
|
-
data: unknown;
|
|
43
|
-
status: number;
|
|
44
|
-
}>;
|
|
45
|
-
interface HandlerOptions<M extends string = string> {
|
|
46
|
-
exposeStrategy?: "all" | "none";
|
|
47
|
-
formatResourceId?: (resourceId: string) => number | string;
|
|
48
|
-
handlers?: {
|
|
49
|
-
create?: CreateHandler;
|
|
50
|
-
delete?: DeleteHandler;
|
|
51
|
-
get?: GetHandler;
|
|
52
|
-
list?: ListHandler;
|
|
53
|
-
update?: UpdateHandler;
|
|
54
|
-
};
|
|
55
|
-
models?: ModelsOptions<M>;
|
|
56
|
-
pagination?: PaginationConfig;
|
|
57
|
-
}
|
|
58
|
-
interface PaginationConfig {
|
|
59
|
-
perPage: number;
|
|
60
|
-
}
|
|
61
|
-
interface HandlerParameters<T, Q> {
|
|
62
|
-
adapter: Adapter<T, Q>;
|
|
63
|
-
query: Q;
|
|
64
|
-
resourceName: string;
|
|
65
|
-
}
|
|
66
|
-
interface UniqueResourceHandlerParameters<T, Q> {
|
|
67
|
-
adapter: Adapter<T, Q>;
|
|
68
|
-
query: Q;
|
|
69
|
-
resourceId: number | string;
|
|
70
|
-
resourceName: string;
|
|
71
|
-
}
|
|
72
|
-
interface Adapter<T, Q, M extends string = string> {
|
|
73
|
-
connect?: () => Promise<void>;
|
|
74
|
-
create: (resourceName: M, data: unknown, query: Q) => Promise<T>;
|
|
75
|
-
delete: (resourceName: M, resourceId: number | string, query: Q) => Promise<T>;
|
|
76
|
-
disconnect?: () => Promise<void>;
|
|
77
|
-
getAll: (resourceName: M, query: Q) => Promise<T[]>;
|
|
78
|
-
getModels: () => M[];
|
|
79
|
-
getOne: (resourceName: M, resourceId: number | string, query: Q) => Promise<T>;
|
|
80
|
-
getPaginationData: (resourceName: M, query: Q) => Promise<PaginationData>;
|
|
81
|
-
handleError?: (error: Error) => void;
|
|
82
|
-
init?: () => Promise<void>;
|
|
83
|
-
mapModelsToRouteNames?: () => Promise<{ [key in M]?: string }>;
|
|
84
|
-
models?: M[];
|
|
85
|
-
parseQuery: (resourceName: M, query: ParsedQueryParameters) => Q;
|
|
86
|
-
update: (resourceName: M, resourceId: number | string, data: unknown, query: Q) => Promise<T>;
|
|
87
|
-
}
|
|
88
|
-
interface PaginationData {
|
|
89
|
-
page: number;
|
|
90
|
-
pageCount: number;
|
|
91
|
-
total: number;
|
|
92
|
-
}
|
|
93
|
-
type RecursiveField = Record<string, Record<string, boolean> | boolean>;
|
|
94
|
-
type WhereOperator = "$cont" | "$ends" | "$eq" | "$gt" | "$gte" | "$in" | "$isnull" | "$lt" | "$lte" | "$neq" | "$notin" | "$starts";
|
|
95
|
-
type SearchCondition = Date | boolean | number | string | null;
|
|
96
|
-
type WhereCondition = { [key in WhereOperator]?: SearchCondition };
|
|
97
|
-
type Condition = {
|
|
98
|
-
[key: string]: Condition | SearchCondition | WhereCondition;
|
|
99
|
-
};
|
|
100
|
-
type WhereField = Condition & {
|
|
101
|
-
$and?: Condition | Condition[];
|
|
102
|
-
$not?: Condition | Condition[];
|
|
103
|
-
$or?: Condition | Condition[];
|
|
104
|
-
};
|
|
105
|
-
type OrderByOperator = "$asc" | "$desc";
|
|
106
|
-
type OrderByField = Record<string, OrderByOperator>;
|
|
107
|
-
interface ParsedQueryParameters {
|
|
108
|
-
distinct?: string;
|
|
109
|
-
include?: RecursiveField;
|
|
110
|
-
limit?: number;
|
|
111
|
-
orderBy?: OrderByField;
|
|
112
|
-
originalQuery?: Record<string, string>;
|
|
113
|
-
page?: number;
|
|
114
|
-
select?: RecursiveField;
|
|
115
|
-
skip?: number;
|
|
116
|
-
where?: WhereField;
|
|
117
|
-
}
|
|
118
|
-
type ExecuteHandler<Request, Response> = (request: Request, response: Response) => Promise<void>;
|
|
119
|
-
interface FakePrismaClient {
|
|
120
|
-
$connect: () => void;
|
|
121
|
-
$disconnect: () => Promise<void>;
|
|
122
|
-
[key: string]: unknown;
|
|
123
|
-
_dmmf?: unknown;
|
|
124
|
-
_getDmmf?: () => unknown;
|
|
125
|
-
}
|
|
126
|
-
export { Adapter as A, Condition as C, ExecuteHandler as E, FakePrismaClient as F, HandlerOptions as H, ModelsOptions as M, OrderByField as O, PaginationData as P, RouteType as R, SearchCondition as S, UniqueResourceHandlerParameters as U, WhereCondition as W, ParsedQueryParameters as a, HandlerParameters as b, ModelOption as c, OrderByOperator as d, PaginationConfig as e, RecursiveField as f, WhereField as g, WhereOperator as h };
|