| Server IP : 35.80.110.71 / Your IP : 216.73.216.221 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ip-172-31-21-44 6.17.0-1019-aws #19~24.04.1-Ubuntu SMP Tue Jun 23 18:53:06 UTC 2026 x86_64 User : ubuntu ( 1000) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/elite-events-storybook/ |
Upload File : |
"use strict";(self.webpackChunkelite_events_nextjs=self.webpackChunkelite_events_nextjs||[]).push([[2946],{"./src/components/features/admin/api-docs/ResponseValidation.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{A:()=>ResponseValidation});var jsx_runtime=__webpack_require__("./node_modules/next/dist/compiled/react/jsx-runtime.js"),react=__webpack_require__("./node_modules/next/dist/compiled/react/index.js");function getJsType(value){return null===value?"null":void 0===value?"undefined":Array.isArray(value)?"array":typeof value}function validateField(field,value,path,issues){const actualType=getJsType(value);if(field.required&&null==value)issues.push({path,message:"Required field is missing",severity:"error",expected:field.type,actual:actualType});else if(null!=value)if(function typeMatches(documentedType,actualValue){const actualType=getJsType(actualValue);if("null"===actualType||"undefined"===actualType)return!0;switch(documentedType){case"string":return"string"===actualType;case"number":return"number"===actualType;case"boolean":return"boolean"===actualType;case"object":return"object"===actualType;case"array":return"array"===actualType;default:return!0}}(field.type,value)){if(field.enum&&"string"===field.type&&(field.enum.includes(value)||issues.push({path,message:"Value not in allowed enum values",severity:"warning",expected:field.enum.join(" | "),actual:String(value)})),field.nested&&"object"===field.type&&"object"==typeof value)for(const nestedField of field.nested)validateField(nestedField,value[nestedField.name],`${path}.${nestedField.name}`,issues);"array"===field.type&&Array.isArray(value)&&field.nested&&value.forEach((item,index)=>{if(field.nested&&field.nested.length>0){validateField({...field.nested[0],name:`[${index}]`},item,`${path}[${index}]`,issues)}})}else issues.push({path,message:"Type mismatch",severity:"error",expected:field.type,actual:actualType})}function findUndocumentedFields(response,documentedFields,path,issues){if(!response||"object"!=typeof response)return;const documented=new Set(documentedFields?.map(f=>f.name)||[]);if(Array.isArray(response))response.length>0&&documentedFields&&findUndocumentedFields(response[0],documentedFields,`${path}[0]`,issues);else{const responseObj=response;for(const key of Object.keys(responseObj))if(documented.has(key)){const field=documentedFields?.find(f=>f.name===key);field?.nested&&"object"==typeof responseObj[key]&&findUndocumentedFields(responseObj[key],field.nested,path?`${path}.${key}`:key,issues)}else issues.push({path:path?`${path}.${key}`:key,message:"Undocumented field in response",severity:"info",actual:getJsType(responseObj[key])})}}function countFields(fields){return fields?fields.reduce((count,field)=>count+1+countFields(field.nested),0):0}function countResponseFields(obj){return obj&&"object"==typeof obj?Array.isArray(obj)?obj.length>0?countResponseFields(obj[0]):0:Object.keys(obj).reduce((count,key)=>{const value=obj[key];return count+1+("object"==typeof value?countResponseFields(value):0)},0):0}function countMatchedFields(response,fields){if(!response||"object"!=typeof response||!fields)return 0;if(Array.isArray(response))return response.length>0?countMatchedFields(response[0],fields):0;const responseObj=response;return fields.reduce((count,field)=>{if(field.name in responseObj){const value=responseObj[field.name];return count+1+(field.nested?countMatchedFields(value,field.nested):0)}return count},0)}function validateResponse(endpoint,status,responseBody){const issues=[],matchedSchema=endpoint.responses.find(r=>r.status===status)||null;if(!matchedSchema){const closeMatch=endpoint.responses.find(r=>Math.floor(r.status/100)===Math.floor(status/100));return issues.push({path:"",message:`Undocumented status code: ${status}`,severity:"warning",expected:endpoint.responses.map(r=>r.status.toString()).join(", "),actual:status.toString()}),closeMatch&&issues.push({path:"",message:`Closest documented status: ${closeMatch.status}`,severity:"info"}),{valid:!1,issues,matchedSchema:null,coverage:{documentedFields:0,responseFields:countResponseFields(responseBody),matchedFields:0,percentage:0}}}if(matchedSchema.fields&&responseBody&&"object"==typeof responseBody){for(const field of matchedSchema.fields){validateField(field,Array.isArray(responseBody)?responseBody[0]?.[field.name]:responseBody[field.name],field.name,issues)}findUndocumentedFields(responseBody,matchedSchema.fields,"",issues)}const documentedFields=countFields(matchedSchema.fields),responseFields=countResponseFields(responseBody),matchedFields=countMatchedFields(responseBody,matchedSchema.fields),percentage=documentedFields>0?Math.round(matchedFields/documentedFields*100):0===responseFields?100:0;return{valid:0===issues.filter(i=>"error"===i.severity).length,issues,matchedSchema,coverage:{documentedFields,responseFields,matchedFields,percentage}}}var icons=__webpack_require__("./src/components/ui/icons/index.ts");function ResponseValidation({endpoint,status,responseBody}){const[expanded,setExpanded]=(0,react.useState)(!1),validationResult=(0,react.useMemo)(()=>validateResponse(endpoint,status,responseBody),[endpoint,status,responseBody]),summary=(0,react.useMemo)(()=>function getValidationSummary(result){const errorCount=result.issues.filter(i=>"error"===i.severity).length,warningCount=result.issues.filter(i=>"warning"===i.severity).length,infoCount=result.issues.filter(i=>"info"===i.severity).length;return errorCount>0?{status:"error",message:`${errorCount} error${1!==errorCount?"s":""} found`,details:result.issues.filter(i=>"error"===i.severity).map(i=>`${i.path}: ${i.message}`)}:warningCount>0?{status:"warning",message:`${warningCount} warning${1!==warningCount?"s":""}`,details:result.issues.filter(i=>"warning"===i.severity).map(i=>`${i.path}: ${i.message}`)}:infoCount>0?{status:"success",message:`Valid (${infoCount} undocumented field${1!==infoCount?"s":""})`,details:[]}:{status:"success",message:`Valid (${result.coverage.percentage}% coverage)`,details:[]}}(validationResult),[validationResult]);return(0,jsx_runtime.jsxs)("div",{className:"border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden",children:[(0,jsx_runtime.jsxs)("button",{onClick:()=>setExpanded(!expanded),className:"w-full flex items-center justify-between p-3 transition-colors "+("error"===summary.status?"bg-red-50 dark:bg-red-900/20 hover:bg-red-100 dark:hover:bg-red-900/30":"warning"===summary.status?"bg-yellow-50 dark:bg-yellow-900/20 hover:bg-yellow-100 dark:hover:bg-yellow-900/30":"bg-green-50 dark:bg-green-900/20 hover:bg-green-100 dark:hover:bg-green-900/30"),children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-3",children:["error"===summary.status?(0,jsx_runtime.jsx)(icons.In,{name:"alert-circle",size:20,className:"text-red-600 dark:text-red-400"}):"warning"===summary.status?(0,jsx_runtime.jsx)(icons.In,{name:"alert-triangle",size:20,className:"text-yellow-600 dark:text-yellow-400"}):(0,jsx_runtime.jsx)(icons.In,{name:"check-circle",size:20,className:"text-green-600 dark:text-green-400"}),(0,jsx_runtime.jsxs)("span",{className:"font-medium "+("error"===summary.status?"text-red-800 dark:text-red-200":"warning"===summary.status?"text-yellow-800 dark:text-yellow-200":"text-green-800 dark:text-green-200"),children:["Schema Validation: ",summary.message]})]}),(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-4",children:[(0,jsx_runtime.jsx)(CoverageBar,{coverage:validationResult.coverage.percentage}),(0,jsx_runtime.jsx)(icons.In,{name:expanded?"chevron-up":"chevron-down",size:16,className:"text-gray-500 dark:text-gray-400"})]})]}),expanded&&(0,jsx_runtime.jsxs)("div",{className:"p-4 bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700",children:[(0,jsx_runtime.jsxs)("div",{className:"grid grid-cols-4 gap-4 mb-4",children:[(0,jsx_runtime.jsx)(StatCard,{label:"Documented Fields",value:validationResult.coverage.documentedFields}),(0,jsx_runtime.jsx)(StatCard,{label:"Response Fields",value:validationResult.coverage.responseFields}),(0,jsx_runtime.jsx)(StatCard,{label:"Matched Fields",value:validationResult.coverage.matchedFields}),(0,jsx_runtime.jsx)(StatCard,{label:"Coverage",value:`${validationResult.coverage.percentage}%`,highlight:validationResult.coverage.percentage>=80})]}),validationResult.issues.length>0?(0,jsx_runtime.jsxs)("div",{className:"space-y-2",children:[(0,jsx_runtime.jsxs)("h4",{className:"text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:["Issues (",validationResult.issues.length,")"]}),validationResult.issues.map((issue,index)=>(0,jsx_runtime.jsx)(IssueItem,{issue},index))]}):(0,jsx_runtime.jsxs)("div",{className:"text-center py-4 text-gray-500 dark:text-gray-400",children:[(0,jsx_runtime.jsx)(icons.In,{name:"check",size:24,className:"mx-auto mb-2"}),(0,jsx_runtime.jsx)("p",{children:"No validation issues found"})]}),validationResult.matchedSchema&&(0,jsx_runtime.jsxs)("div",{className:"mt-4 pt-4 border-t border-gray-200 dark:border-gray-700",children:[(0,jsx_runtime.jsx)("h4",{className:"text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:"Matched Schema"}),(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[(0,jsx_runtime.jsx)("span",{className:"px-2 py-1 text-sm font-bold rounded "+(status>=200&&status<300?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300":status>=400?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"),children:validationResult.matchedSchema.status}),(0,jsx_runtime.jsx)("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:validationResult.matchedSchema.description})]})]})]})]})}function CoverageBar({coverage}){return(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[(0,jsx_runtime.jsx)("div",{className:"w-24 h-2 bg-gray-200 dark:bg-gray-600 rounded-full overflow-hidden",children:(0,jsx_runtime.jsx)("div",{className:`h-full ${coverage>=80?"bg-green-500":coverage>=50?"bg-yellow-500":"bg-red-500"} transition-all`,style:{width:`${coverage}%`}})}),(0,jsx_runtime.jsxs)("span",{className:"text-xs text-gray-600 dark:text-gray-400 w-10",children:[coverage,"%"]})]})}function StatCard({label,value,highlight=!1}){return(0,jsx_runtime.jsxs)("div",{className:"p-3 rounded-lg "+(highlight?"bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800":"bg-gray-50 dark:bg-gray-900 border border-gray-200 dark:border-gray-700"),children:[(0,jsx_runtime.jsx)("div",{className:"text-lg font-bold "+(highlight?"text-green-700 dark:text-green-300":"text-gray-900 dark:text-gray-100"),children:value}),(0,jsx_runtime.jsx)("div",{className:"text-xs text-gray-500 dark:text-gray-400",children:label})]})}function IssueItem({issue}){return(0,jsx_runtime.jsx)("div",{className:`p-3 rounded border ${(()=>{switch(issue.severity){case"error":return"bg-red-50 dark:bg-red-900/10 border-red-200 dark:border-red-800";case"warning":return"bg-yellow-50 dark:bg-yellow-900/10 border-yellow-200 dark:border-yellow-800";default:return"bg-blue-50 dark:bg-blue-900/10 border-blue-200 dark:border-blue-800"}})()}`,children:(0,jsx_runtime.jsxs)("div",{className:"flex items-start gap-2",children:[(0,jsx_runtime.jsx)("div",{className:"mt-0.5",children:(()=>{switch(issue.severity){case"error":return(0,jsx_runtime.jsx)(icons.In,{name:"x-circle",size:16,className:"text-red-500 dark:text-red-400"});case"warning":return(0,jsx_runtime.jsx)(icons.In,{name:"alert-triangle",size:16,className:"text-yellow-500 dark:text-yellow-400"});default:return(0,jsx_runtime.jsx)(icons.In,{name:"info-circle",size:16,className:"text-blue-500 dark:text-blue-400"})}})()}),(0,jsx_runtime.jsxs)("div",{className:"flex-1",children:[(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[issue.path&&(0,jsx_runtime.jsx)("code",{className:"text-xs bg-gray-200 dark:bg-gray-700 px-1.5 py-0.5 rounded text-gray-800 dark:text-gray-200",children:issue.path}),(0,jsx_runtime.jsx)("span",{className:"text-sm text-gray-800 dark:text-gray-200",children:issue.message})]}),(issue.expected||issue.actual)&&(0,jsx_runtime.jsxs)("div",{className:"mt-2 text-xs space-y-1",children:[issue.expected&&(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[(0,jsx_runtime.jsx)("span",{className:"text-gray-500 dark:text-gray-400",children:"Expected:"}),(0,jsx_runtime.jsx)("code",{className:"text-green-700 dark:text-green-400 bg-green-50 dark:bg-green-900/20 px-1 rounded",children:issue.expected})]}),issue.actual&&(0,jsx_runtime.jsxs)("div",{className:"flex items-center gap-2",children:[(0,jsx_runtime.jsx)("span",{className:"text-gray-500 dark:text-gray-400",children:"Actual:"}),(0,jsx_runtime.jsx)("code",{className:"text-red-700 dark:text-red-400 bg-red-50 dark:bg-red-900/20 px-1 rounded",children:issue.actual})]})]})]})]})})}}}]);