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.8 kB
JavaScript
"use strict";var a=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(s,e)=>{for(var t in e)a(s,t,{get:e[t],enumerable:!0})},g=(s,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of m(e))!l.call(s,n)&&n!==t&&a(s,n,{get:()=>e[n],enumerable:!(o=c(e,n))||o.enumerable});return s};var y=s=>g(a({},"__esModule",{value:!0}),s);var E={};u(E,{default:()=>x});module.exports=y(E);var r=require("@typescript-eslint/utils");var i=["get","post","put","delete","patch"];var p="express-zod-api";var S={provide:`${r.AST_NODE_TYPES.CallExpression}[callee.property.name='provide'][arguments.length=3]:has(${r.AST_NODE_TYPES.Literal}[value=/^${i.join("|")}$/] + ${r.AST_NODE_TYPES.Literal} + ${r.AST_NODE_TYPES.ObjectExpression})`,splitResponse:`${r.AST_NODE_TYPES.NewExpression}[callee.name='Integration'] > ${r.AST_NODE_TYPES.ObjectExpression} > ${r.AST_NODE_TYPES.Property}[key.name='splitResponse']`,methodPath:`${r.AST_NODE_TYPES.ImportDeclaration} > ${r.AST_NODE_TYPES.ImportSpecifier}[imported.name='MethodPath']`,createConfig:`${r.AST_NODE_TYPES.CallExpression}[callee.name='createConfig'] > ${r.AST_NODE_TYPES.ObjectExpression} > ${r.AST_NODE_TYPES.Property}[key.name='tags'][value.type='ObjectExpression']`,newDocs:`${r.AST_NODE_TYPES.NewExpression}[callee.name='Documentation'] > ${r.AST_NODE_TYPES.ObjectExpression}[properties.length>0]:not(:has(>Property[key.name='tags']))`,newFactory:`${r.AST_NODE_TYPES.NewExpression}[callee.name='EndpointsFactory'] > ${r.AST_NODE_TYPES.ObjectExpression} > ${r.AST_NODE_TYPES.Property}[key.name='resultHandler']`,newSSE:`${r.AST_NODE_TYPES.NewExpression}[callee.name='EventStreamFactory'] > ${r.AST_NODE_TYPES.ObjectExpression} > ${r.AST_NODE_TYPES.Property}[key.name='events']`,newClient:`${r.AST_NODE_TYPES.NewExpression}[callee.name='ExpressZodAPIClient']`},h=s=>Object.keys(s).reduce((e,t)=>Object.assign(e,{[S[t]]:s[t]}),{}),T=r.ESLintUtils.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:s=>h({provide:e=>{let{arguments:[t,o]}=e,n=`"${t.value} ${o.value}"`;s.report({messageId:"change",node:e,data:{subject:"arguments",from:`"${t.value}", "${o.value}"`,to:n},fix:d=>d.replaceTextRange([t.range[0],o.range[1]],n)})},splitResponse:e=>s.report({messageId:"remove",node:e,data:{subject:"property",name:e.key.name},fix:t=>t.remove(e)}),methodPath:e=>{let t="Request";s.report({messageId:"change",node:e.imported,data:{subject:"type",from:e.imported.name,to:t},fix:o=>o.replaceText(e.imported,t)})},createConfig:e=>{let t=e.value.properties.filter(o=>"key"in o&&"name"in o.key).map(o=>` "${o.key.name}": unknown,
`);s.report({messageId:"remove",node:e,data:{subject:"property",name:e.key.name},fix:o=>[o.remove(e),o.insertTextAfter(s.sourceCode.ast,`
// Declaring tag constraints
declare module "${p}" {
interface TagOverrides {
${t} }
}`)]})},newDocs:e=>s.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=>s.report({messageId:"change",node:e.parent,data:{subject:"argument",from:"object",to:"ResultHandler instance"},fix:t=>t.replaceText(e.parent,s.sourceCode.getText(e.value))}),newSSE:e=>s.report({messageId:"change",node:e.parent,data:{subject:"argument",from:"object",to:"events map"},fix:t=>t.replaceText(e.parent,s.sourceCode.getText(e.value))}),newClient:e=>{let t="Client";s.report({messageId:"change",node:e.callee,data:{subject:"class",from:"ExpressZodAPIClient",to:t},fix:o=>o.replaceText(e.callee,t)})}})}),x={rules:{v22:T}};