ilink-world/docs/.docz/.cache/error-overlay-handler.js

66 lines
1.5 KiB
JavaScript
Raw Normal View History

2020-03-12 15:14:51 +00:00
import * as ErrorOverlay from "react-error-overlay"
// Report runtime errors
ErrorOverlay.startReportingRuntimeErrors({
onError: () => {},
filename: `/commons.js`,
})
ErrorOverlay.setEditorHandler(errorLocation =>
window.fetch(
`/__open-stack-frame-in-editor?fileName=` +
window.encodeURIComponent(errorLocation.fileName) +
`&lineNumber=` +
window.encodeURIComponent(errorLocation.lineNumber || 1)
)
)
const errorMap = {}
function flat(arr) {
return Array.prototype.flat ? arr.flat() : [].concat(...arr)
}
const handleErrorOverlay = () => {
const errors = Object.values(errorMap)
let errorStringsToDisplay = []
if (errors.length > 0) {
errorStringsToDisplay = flat(errors)
.map(error => {
if (typeof error === `string`) {
return error
} else if (typeof error === `object`) {
const errorStrBuilder = [error.text]
if (error.filePath) {
errorStrBuilder.push(`File: ${error.filePath}`)
}
return errorStrBuilder.join(`\n\n`)
}
return null
})
.filter(Boolean)
}
if (errorStringsToDisplay.length > 0) {
ErrorOverlay.reportBuildError(errorStringsToDisplay.join(`\n\n`))
} else {
ErrorOverlay.dismissBuildError()
}
}
export const clearError = errorID => {
delete errorMap[errorID]
handleErrorOverlay()
}
export const reportError = (errorID, error) => {
if (error) {
errorMap[errorID] = error
}
handleErrorOverlay()
}
export { errorMap }