kopia lustrzana https://github.com/badgen/badgen.net
				
				
				
			
		
			
				
	
	
		
			83 wiersze
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			83 wiersze
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
import got from '../libs/got'
 | 
						|
import { millify } from '../libs/utils'
 | 
						|
import { createBadgenHandler, PathArgs } from '../libs/create-badgen-handler'
 | 
						|
 | 
						|
const last = (arr: any[]): any => arr[arr.length - 1]
 | 
						|
const isObject = (input: any): boolean => input !== null && typeof input === 'object'
 | 
						|
const hasProp = (input: any, prop: string): boolean => Object.prototype.hasOwnProperty.call(input, prop)
 | 
						|
 | 
						|
const DEEPSCAN_API_URL = 'https://deepscan.io/api/'
 | 
						|
 | 
						|
const client = got.extend({ prefixUrl: DEEPSCAN_API_URL })
 | 
						|
 | 
						|
const gradeColors = {
 | 
						|
  'none': 'cecece',
 | 
						|
  'good': '89b414',
 | 
						|
  'normal': '2148b1',
 | 
						|
  'poor': 'ff5a00'
 | 
						|
}
 | 
						|
 | 
						|
export default createBadgenHandler({
 | 
						|
  title: 'DeepScan',
 | 
						|
  examples: {
 | 
						|
    // https://deepscan.io/dashboard/#view=project&tid=7382&pid=9494&bid=123838&subview=overview
 | 
						|
    '/deepscan/grade/team/7382/project/9494/branch/123838': 'grade',
 | 
						|
    // https://deepscan.io/dashboard/#view=project&tid=279&pid=1302&bid=3514&subview=overview
 | 
						|
    '/deepscan/grade/team/279/project/1302/branch/3514': 'grade',
 | 
						|
    // https://deepscan.io/dashboard/#view=project&tid=8527&pid=10741&bid=152550&subview=overview
 | 
						|
    '/deepscan/grade/team/8527/project/10741/branch/152550': 'grade',
 | 
						|
    // https://deepscan.io/dashboard/#view=project&tid=8527&pid=10741&bid=152550&subview=overview
 | 
						|
    '/deepscan/issues/team/8527/project/10741/branch/152550': 'issues',
 | 
						|
    // https://deepscan.io/dashboard/#view=project&tid=7382&pid=9494&bid=123838&subview=overview
 | 
						|
    '/deepscan/issues/team/7382/project/9494/branch/123838': 'issues',
 | 
						|
    // https://deepscan.io/dashboard/#view=project&tid=8527&pid=10741&bid=152550&subview=overview
 | 
						|
    '/deepscan/lines/team/8527/project/10741/branch/152550': 'lines',
 | 
						|
    // https://deepscan.io/dashboard/#view=project&tid=7382&pid=9494&bid=123838&subview=overview
 | 
						|
    '/deepscan/lines/team/7382/project/9494/branch/123838': 'lines'
 | 
						|
  },
 | 
						|
  handlers: {
 | 
						|
    '/deepscan/:topic<grade|issues|lines>/team/:teamId/project/:projectId/branch/:branchId': handler
 | 
						|
  }
 | 
						|
})
 | 
						|
 | 
						|
async function handler ({ topic, teamId, projectId, branchId }: PathArgs) {
 | 
						|
  const endpoint = `teams/${teamId}/projects/${projectId}/branches/${branchId}/analyses`
 | 
						|
  const resp = await client.get(endpoint).json<any>()
 | 
						|
  const result = last(resp.data)
 | 
						|
 | 
						|
  switch (topic) {
 | 
						|
    case 'grade': {
 | 
						|
      const grade = result?.grade.toLowerCase()
 | 
						|
      return {
 | 
						|
        subject: 'deepscan',
 | 
						|
        status: grade || 'unknown',
 | 
						|
        color: gradeColors[grade] || 'grey'
 | 
						|
      }
 | 
						|
    }
 | 
						|
    case 'issues': {
 | 
						|
      const params = {
 | 
						|
        subject: 'issues',
 | 
						|
        status: 'unknown',
 | 
						|
        color: 'gray'
 | 
						|
      }
 | 
						|
      if (isObject(result) && hasProp(result, 'outstandingDefectCount')) {
 | 
						|
        params.status = millify(result.outstandingDefectCount)
 | 
						|
        params.color = result.outstandingDefectCount === 0 ? 'green' : 'yellow'
 | 
						|
      }
 | 
						|
      return params
 | 
						|
    }
 | 
						|
    case 'lines': {
 | 
						|
      const params = {
 | 
						|
        subject: 'lines',
 | 
						|
        status: 'unknown',
 | 
						|
        color: 'gray'
 | 
						|
      }
 | 
						|
      if (isObject(result) && hasProp(result, 'loc')) {
 | 
						|
        params.status = millify(result.loc)
 | 
						|
        params.color = 'blue'
 | 
						|
      }
 | 
						|
      return params
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |