UNPKG

@sketch-hq/sketch-assistant-utils

Version:

Utility functions and types for Sketch Assistants.

36 lines (35 loc) 1.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeProfile = void 0; /** * Create a profile data object for a given RunOutput. Profile data collates statistics that may * help provide insight into Assistant performance, including for example rules that may be taking * a long time to execute. One way to view profile data is to pass the `--profile` flag to the * Assistants CLI. */ const makeProfile = (output) => { const { processedFile } = output.input; const file = { time: processedFile.profile.time, totalObjects: processedFile.profile.numObjects, objectCounts: Object.keys(processedFile.objects).reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: { count: processedFile.objects[key].length } })), {}), }; const assistants = Object.keys(output.assistants).reduce((acc, key) => { const result = output.assistants[key]; if (result.code === 'error') return acc; const { result: successResult } = result; const { ruleTimings } = successResult.profile; return Object.assign(Object.assign({}, acc), { [key]: { violations: successResult.violations.length, ruleErrors: successResult.ruleErrors.length, time: Object.keys(ruleTimings).reduce((acc, key) => acc + ruleTimings[key], 0), rules: Object.keys(ruleTimings).reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: { time: ruleTimings[key], violations: successResult.violations.filter((violation) => violation.ruleName === key).length, } })), {}), } }); }, {}); return { file, assistants }; }; exports.makeProfile = makeProfile;