UNPKG

express-zod-api

Version:

A Typescript framework to help you get an API server up and running with I/O schema validation and custom middlewares in minutes.

8 lines (7 loc) 3.05 kB
import{ESLintUtils as c,AST_NODE_TYPES as r}from"@typescript-eslint/utils";var a=["get","post","put","delete","patch"];var i="express-zod-api";var m={provide:`${r.CallExpression}[callee.property.name='provide'][arguments.length=3]:has(${r.Literal}[value=/^${a.join("|")}$/] + ${r.Literal} + ${r.ObjectExpression})`,splitResponse:`${r.NewExpression}[callee.name='Integration'] > ${r.ObjectExpression} > ${r.Property}[key.name='splitResponse']`,methodPath:`${r.ImportDeclaration} > ${r.ImportSpecifier}[imported.name='MethodPath']`,createConfig:`${r.CallExpression}[callee.name='createConfig'] > ${r.ObjectExpression} > ${r.Property}[key.name='tags'][value.type='ObjectExpression']`,newDocs:`${r.NewExpression}[callee.name='Documentation'] > ${r.ObjectExpression}[properties.length>0]:not(:has(>Property[key.name='tags']))`,newFactory:`${r.NewExpression}[callee.name='EndpointsFactory'] > ${r.ObjectExpression} > ${r.Property}[key.name='resultHandler']`,newSSE:`${r.NewExpression}[callee.name='EventStreamFactory'] > ${r.ObjectExpression} > ${r.Property}[key.name='events']`,newClient:`${r.NewExpression}[callee.name='ExpressZodAPIClient']`},l=o=>Object.keys(o).reduce((e,t)=>Object.assign(e,{[m[t]]:o[t]}),{}),u=c.RuleCreator.withoutDocs({meta:{type:"problem",fixable:"code",schema:[],messages:{add:"Add {{subject}} to {{to}}",change:"Change {{subject}} {{from}} to {{to}}.",remove:"Remove {{subject}} {{name}}."}},defaultOptions:[],create:o=>l({provide:e=>{let{arguments:[t,s]}=e,n=`"${t.value} ${s.value}"`;o.report({messageId:"change",node:e,data:{subject:"arguments",from:`"${t.value}", "${s.value}"`,to:n},fix:p=>p.replaceTextRange([t.range[0],s.range[1]],n)})},splitResponse:e=>o.report({messageId:"remove",node:e,data:{subject:"property",name:e.key.name},fix:t=>t.remove(e)}),methodPath:e=>{let t="Request";o.report({messageId:"change",node:e.imported,data:{subject:"type",from:e.imported.name,to:t},fix:s=>s.replaceText(e.imported,t)})},createConfig:e=>{let t=e.value.properties.filter(s=>"key"in s&&"name"in s.key).map(s=>` "${s.key.name}": unknown, `);o.report({messageId:"remove",node:e,data:{subject:"property",name:e.key.name},fix:s=>[s.remove(e),s.insertTextAfter(o.sourceCode.ast,` // Declaring tag constraints declare module "${i}" { interface TagOverrides { ${t} } }`)]})},newDocs:e=>o.report({messageId:"add",node:e,data:{subject:"tags",to:"Documentation"},fix:t=>t.insertTextBefore(e.properties[0],"tags: { /* move from createConfig() argument if any */ }, ")}),newFactory:e=>o.report({messageId:"change",node:e.parent,data:{subject:"argument",from:"object",to:"ResultHandler instance"},fix:t=>t.replaceText(e.parent,o.sourceCode.getText(e.value))}),newSSE:e=>o.report({messageId:"change",node:e.parent,data:{subject:"argument",from:"object",to:"events map"},fix:t=>t.replaceText(e.parent,o.sourceCode.getText(e.value))}),newClient:e=>{let t="Client";o.report({messageId:"change",node:e.callee,data:{subject:"class",from:"ExpressZodAPIClient",to:t},fix:s=>s.replaceText(e.callee,t)})}})}),x={rules:{v22:u}};export{x as default};