UNPKG

prisma-repo

Version:

Generating repository pattern using Prisma ORM faster and easier

10 lines 10.1 kB
#!/usr/bin/env node import lt from"lodash";import Pt from"figlet";import Tt from"gradient-string";import Rt from"app-root-path";import v from"path";import{fileURLToPath as gt}from"url";var ut=gt(import.meta.url),yt=v.dirname(ut),T=v.join(yt,"../"),s={WHERE_INPUT:"WhereInput",SELECT:"Select",INCLUDE:"Include",CREATE_INPUT:"CreateInput",UPDATE_INPUT:"UpdateInput",WHERE_UNIQUE_INPUT:"WhereUniqueInput",ORDER_BY_WITH_RELATION_INPUT:"OrderByWithRelationInput",DELEGATE:"Delegate",GROUP_BY:"GroupByOutputType"},Y={[s.WHERE_INPUT]:"unknown",[s.SELECT]:"unknown",[s.INCLUDE]:"unknown",[s.CREATE_INPUT]:"unknown",[s.UPDATE_INPUT]:"unknown",[s.WHERE_UNIQUE_INPUT]:"unknown",[s.ORDER_BY_WITH_RELATION_INPUT]:"unknown",[s.DELEGATE]:"unknown",[s.GROUP_BY]:"unknown"},f={BRIGHT_RED:"#E2180A",BRIGHT_ORANGE:"#F34B8C",BRIGHT_PURPLE:"#C8184F",BRIGHT_GREEN:"#52A849",DARK_GREEN:"19511E"},_="PRISMA REPO GENERATOR",j={modelname:"",flags:{settings:"",repositories:!1,baseRepository:!1,modelStructures:!1}},c={REPOSITORY:"src/repository",TYPES:"src/types",PRISMA_DEFINITION:`${Rt}/node_modules/.prisma/client/index.d.ts`},$="prisma-repo",m={BASE_REPOSITORY:"baseRepository.ts",MODELS:`${$}.ts`,TYPES:{EXPRESS:"express.d.ts"}},y={JSON:"repository.setting.json",JS:"repository.setting.js",MJS:"repository.setting.mjs",TS:"repository.setting.ts"},b={QUERY:"query",INFO:"info",WARN:"warn",ERROR:"error"};var W=()=>{let t=[f.BRIGHT_RED,f.BRIGHT_ORANGE,f.BRIGHT_PURPLE,f.DARK_GREEN,f.BRIGHT_GREEN,f.DARK_GREEN,f.BRIGHT_PURPLE,f.BRIGHT_ORANGE,f.BRIGHT_RED],e=Pt.textSync(_,{font:"Small"}),r=Tt(t);console.log(r.multiline(e))};import vt from"lodash";import ct from"fs-extra";import Yt from"app-root-path";import C from"lodash";import S from"fs-extra";import x from"app-root-path";import _t from"fs-extra";import{promisify as St}from"util";import{exec as xt}from"child_process";var J=St(xt),K=t=>_t.readFile(t,"utf8");var F=t=>!C.isEmpty(t)&&S.existsSync(t),ht=async(t="")=>{try{return F(t)?await S.readJson(t):S.existsSync(`${x}/${y.JSON}`)?await S.readJson(`${x}/${y.JSON}`):{}}catch{return{}}},It=async(t="")=>{try{return F(t)?(await import(t)).default:S.existsSync(`${x}/${y.JS}`)?(await import(`${x}/${y.JS}`)).default:{}}catch{return{}}},At=async(t="")=>{try{let e=`${x}/${y.TS}`;return F(t)&&(e=t),S.existsSync(e)?(await J(`npx tsup ${e} --format esm --clean --outDir node_modules/.${$}`),(await import(`${x}/node_modules/.${$}/${y.MJS}`)).default):{}}catch{return{}}},Q=async(t="")=>{let e={};return e=await ht(t),C.isEmpty(e)&&(e=await It(t)),C.isEmpty(e)&&(e=await At(t)),e},X=async(t="")=>C.isEmpty(t)?Q():Q(t);import st from"lodash";import it from"path";import U from"fs-extra";import Nt from"app-root-path";import Ot from"ora";import wt from"chalk";var g=Ot,n=wt,d={error:(...t)=>{console.log(n.red(...t))},warn:(...t)=>{console.log(n.yellow(...t))},info:(...t)=>{console.log(n.cyan(...t))},success:(...t)=>{console.log(n.green(...t))}};import Dt from"template-file";import q from"lodash";var V=(t,e)=>t.split(` `).some(r=>r.match(new RegExp(`export type (Aggregate${e}) = `))),N=(t,e)=>q.isNil(t)?!1:q.isBoolean(t)?t:t[e];import Lt from"fs-extra";import rt from"path";import Ut from"app-root-path";import $t from"template-file";import w from"lodash";var E=(t,e,r,o)=>{if(!t.match(new RegExp(`export type ${e}${r}`)))return"unknown";switch(r){case s.CREATE_INPUT:case s.UPDATE_INPUT:o[r]=`Prisma.${e}${r} | Prisma.${e}Unchecked${r}`;break;default:o[r]=`Prisma.${e}${r}`;break}return o[r]};var Mt=(t,e)=>{let r=Y;return t.split(` `).forEach(o=>{E(o,e,s.WHERE_INPUT,r),E(o,e,s.SELECT,r),E(o,e,s.INCLUDE,r),E(o,e,s.CREATE_INPUT,r),E(o,e,s.UPDATE_INPUT,r),E(o,e,s.WHERE_UNIQUE_INPUT,r),E(o,e,s.ORDER_BY_WITH_RELATION_INPUT,r),E(o,e,s.GROUP_BY,r)}),r.Delegate=`Prisma.${e}${s.DELEGATE}`,JSON.stringify(r,null,2)},z=(t,e)=>w.map(e,o=>({key:w.camelCase(o),value:JSON.parse(Mt(t,o))})),D=t=>t.split(` `).filter(o=>o.match(/export type (Aggregate.*?) =/)).map(o=>{let i=o.split(" ");return i[i.length-3].replace("Aggregate","")}),Z=t=>w.isEmpty(t)?[]:w.map(t,e=>({key:w.camelCase(e),value:e}));import B from"lodash";var tt=t=>B.map(t,e=>({key:B.constantCase(e),value:`'${B.camelCase(e)}'`}));import M from"lodash";var H=t=>`[${M(t).map(e=>`'${e}'`).join(", ")}]`,et=t=>{if(M.isBoolean(t))return t?H(M.values(b)):"[]";if(M.isArray(t))return H(t);let e=M.reduce(t,(r,o,i)=>(o&&r.push(b[i]),r),[]);return H(e)};var u=async(t,e)=>{let r=g(`Creating model structures.. .`).start(),{repositoryPath:o}=e,p=`${`${Ut}/${o??c.REPOSITORY}`}/${m.MODELS}`,l=rt.join(T,"template"),R=rt.join(l,m.MODELS);try{let a=D(t),P=tt(a),I=Z(a),A=et(e.prismaLogger),O=z(t,a),G=await $t.renderFile(R,{log:A,prismaStructures:a,modelsName:P,modelStructure:I,modelTypes:O});await Lt.writeFile(p,G),r.succeed(n.green.bold("Model structures created"))}catch(a){console.log(a),r.fail(n.red.bold("Model structures creation failed"))}};import ot from"path";import L from"fs-extra";import Ct from"app-root-path";var h=async(t,e)=>{let r=g(`Creating base repository... `).start(),{repositoryPath:o,overwrite:i}=e,p=N(i,"repository"),l=`${Ct}/${o??c.REPOSITORY}`,R=`${l}/${m.BASE_REPOSITORY}`,a=`${l}/${m.MODELS}`,P=L.existsSync(R),I=L.existsSync(l),A=L.existsSync(a),O=ot.join(T,"template");try{if(I||await L.mkdirp(l),p||!P)await L.copy(ot.join(O,m.BASE_REPOSITORY),R);else{r.fail("Base Repository already exists"),r.fail("Overwriting is disabled by default, enable it in the config file");return}r.succeed(n.green.bold("Base repository created")),A||(d.warn("[Warn]: Model structures not found!"),u(t,e))}catch{r.fail(n.red.bold("Base repository creation failed"))}};var k=async(t,e,r,o=!0)=>{let i=g(`Creating repository for model ${e}... `).start(),{repositoryPath:p,overwrite:l}=r;if(!V(t,e)){i.fail(`Model ${e} does not exist`);return}let R=N(l,"repository"),a=`${Nt}/${p??c.REPOSITORY}`,P=`${a}/${st.camelCase(e)}.ts`,I=`${a}/${m.BASE_REPOSITORY}`,A=U.existsSync(P),O=U.existsSync(a),G=U.existsSync(I),ft=it.join(T,"template"),dt=it.join(ft,"repository.ts");try{if(O||await U.mkdirp(a),R||!A){let Et=await Dt.renderFile(dt,{repository:e,repositoryName:`MODELS_NAME.${st.constantCase(e)}`});await U.writeFile(P,Et)}else{i.fail(`Repository for model \`${e}\` already exists`),i.fail("Overwriting is disabled by default, enable it in the config file");return}if(i.succeed(n.green.bold(`Repository for model ${e} created`)),!o)return;d.info("[Info]: Updating Model Structures!"),await u(t,r),G||(d.warn("[Warn]: Base repository not found!"),await h(t,r))}catch{i.fail(n.red.bold(`Repository creation failed for model ${e}`))}};import kt from"lodash";import Gt from"fs-extra";import bt from"app-root-path";var nt=async(t,e)=>{let r=g(`Creating repositories... `).start(),{repositoryPath:o}=e,i=`${bt}/${o??c.REPOSITORY}/${m.BASE_REPOSITORY}`,p=Gt.existsSync(i);try{let l=D(t);await Promise.all(kt.map(l,async R=>k(t,R,e,!1))),r.succeed(n.green.bold("Repositories created")),d.info("[Info]: Updating Model Structures!"),await u(t,e),p||(d.warn("[Warn]: Base repository not found!"),await h(t,e))}catch{r.fail(n.red.bold("Repository creation failed"))}};import Bt from"lodash";import{Command as Ht}from"commander";var at={name:"prisma-repo",version:"0.3.12",description:"Generating repository pattern using Prisma ORM faster and easier",main:"dist/index.mjs",scripts:{start:"node dist/index.mjs",build:"tsup src/index.ts --format esm --clean --sourcemap --minify --metafile",dev:'tsup src/index.ts --format esm --watch --clean --onSuccess "node dist/index.mjs"',prepare:"husky install"},repository:{type:"git",url:"git+https://github.com/krsbx/prisma-repo.git"},keywords:["typescript","prisma","repository","cli"],types:"index.d.ts",exports:"./dist/index.mjs",bin:{"prisma-repo":"./dist/index.mjs"},author:"krsbx",license:"MIT",bugs:{url:"https://github.com/krsbx/prisma-repo/issues"},homepage:"https://github.com/krsbx/prisma-repo#readme",devDependencies:{"@commitlint/cli":"^17.0.3","@commitlint/config-conventional":"^17.0.3","@types/app-root-path":"^1.2.4","@types/figlet":"^1.5.4","@types/fs-extra":"^9.0.13","@types/gradient-string":"^1.1.2","@types/lodash":"^4.14.182","@typescript-eslint/eslint-plugin":"^5.33.0","@typescript-eslint/parser":"^5.33.0",eslint:"^8.22.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^8.5.0","eslint-import-resolver-typescript":"^3.4.1","eslint-plugin-import":"^2.26.0","eslint-plugin-prettier":"^4.2.1",husky:"^8.0.1","lint-staged":"^13.0.3",prettier:"^2.7.1",tsup:"^6.2.2",typescript:"^4.7.4"},"lint-staged":{"src/**/*.{ts,tsx}":["prettier --write","eslint --fix"]},dependencies:{"app-root-path":"^3.0.0",chalk:"^5.0.1",commander:"^9.3.0",figlet:"^1.5.2","fs-extra":"^10.1.0","gradient-string":"^2.0.1",lodash:"^4.17.21",ora:"^6.1.2","template-file":"^6.0.1"}};var pt=()=>{let t=new Ht().name(_);t.description("Use Prisma with repository pattern").argument("[modelname]","Name of the model for the repository to be generated (case sensitive))").option("--repositories","Generate all repositories").option("--modelname <modelname>","Name of the model for the repository to be generated (case sensitive))").option("--base-repository","Create a base repository",!1).option("--model-structures","Update model.ts with the generated structures",!1).option("--settings <settings>","Use specific settings from args","").version(at.version,"-v, --version","Display the current version of CRB").parse(process.argv);let e=Object.assign(j,{flags:t.opts()}),r=t.args[0];return Bt.isEmpty(r)||(e.modelname=r),e};var mt=async()=>{let t=pt(),e=await X(t.flags.settings),r=await K(c.PRISMA_DEFINITION),o=`${Yt}/${e.repositoryPath??c.REPOSITORY}`,i=ct.existsSync(o);try{if(i||await ct.mkdirp(o),t.flags.repositories){nt(r,e);return}t.flags.modelStructures&&await u(r,e),t.flags.baseRepository&&await h(r,e),vt.isEmpty(t.modelname)||await k(r,t.modelname,e)}catch(p){if(p instanceof Error&&p.isTTYError)d.error(`${_} needs an interactive terminal to provide options`);else throw p}};var jt=()=>{W(),mt()};lt.mixin({constantCase:t=>lt.upperCase(t).replace(/ /g,"_")});jt(); //# sourceMappingURL=index.mjs.map