Files
cypress/packages/server/lib/plugins/child/validate_event.js
Chris Breiding ed69f0ba67 fix: Fix issues with Cypress.require() and TypeScript (#25931)
Co-authored-by: cypress-bot[bot] <+cypress-bot[bot]@users.noreply.github.com>
2023-03-08 16:25:28 -05:00

72 lines
1.7 KiB
JavaScript

const _ = require('lodash')
const createErrorResult = (errorMessage) => {
return {
isValid: false,
error: new Error(errorMessage),
}
}
const createSuccessResult = () => {
return { isValid: true }
}
const validate = (func, arg, errorMessage) => {
return func(arg) ? createSuccessResult() : createErrorResult(errorMessage)
}
const isFunction = (event, handler) => {
return validate(_.isFunction, handler, `The handler for the event \`${event}\` must be a function`)
}
const isObject = (event, handler) => {
return validate(_.isPlainObject, handler, `The handler for the event \`${event}\` must be an object`)
}
const eventValidators = {
'_get:task:body': isFunction,
'_get:task:keys': isFunction,
'_process:cross:origin:callback': isFunction,
'after:run': isFunction,
'after:screenshot': isFunction,
'after:spec': isFunction,
'before:browser:launch': isFunction,
'before:run': isFunction,
'before:spec': isFunction,
'dev-server:start': isFunction,
'file:preprocessor': isFunction,
'task': isObject,
}
const validateEvent = (event, handler, config, errConstructorFn) => {
const validator = eventValidators[event]
if (!validator) {
const userEvents = _.reject(_.keys(eventValidators), (event) => event.startsWith('_'))
const error = new Error(`invalid event name registered: ${event}`)
error.name = 'InvalidEventNameError'
Error.captureStackTrace(error, errConstructorFn)
return {
error,
userEvents,
isValid: false,
}
}
const result = validator(event, handler, config)
if (!result.isValid) {
result.error.name = 'InvalidEventHandlerError'
Error.captureStackTrace(result.error, errConstructorFn)
}
return result
}
module.exports = validateEvent