You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					57 lines
				
				1.3 KiB
			
		
		
			
		
	
	
					57 lines
				
				1.3 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								// @flow
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// based on https://github.com/styled-components/styled-components/blob/fcf6f3804c57a14dd7984dfab7bc06ee2edca044/src/utils/error.js
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								declare var preval: Function
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Parse errors.md and turn it into a simple hash of code: message
							 | 
						||
| 
								 | 
							
								 * @private
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								const ERRORS = preval`
							 | 
						||
| 
								 | 
							
								  const fs = require('fs');
							 | 
						||
| 
								 | 
							
								  const md = fs.readFileSync(__dirname + '/errors.md', 'utf8');
							 | 
						||
| 
								 | 
							
								  module.exports = md.split(/^#/gm).slice(1).reduce((errors, str) => {
							 | 
						||
| 
								 | 
							
								    const [, code, message] = str.split(/^.*?(\\d+)\\s*\\n/)
							 | 
						||
| 
								 | 
							
								    errors[code] = message
							 | 
						||
| 
								 | 
							
								    return errors;
							 | 
						||
| 
								 | 
							
								  }, {});
							 | 
						||
| 
								 | 
							
								`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * super basic version of sprintf
							 | 
						||
| 
								 | 
							
								 * @private
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								function format(...args) {
							 | 
						||
| 
								 | 
							
								  let a = args[0]
							 | 
						||
| 
								 | 
							
								  const b = []
							 | 
						||
| 
								 | 
							
								  let c
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  for (c = 1; c < args.length; c += 1) {
							 | 
						||
| 
								 | 
							
								    b.push(args[c])
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  b.forEach(d => {
							 | 
						||
| 
								 | 
							
								    a = a.replace(/%[a-z]/, d)
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return a
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Create an error file out of errors.md for development and a simple web link to the full errors
							 | 
						||
| 
								 | 
							
								 * in production mode.
							 | 
						||
| 
								 | 
							
								 * @private
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								export default class PolishedError extends Error {
							 | 
						||
| 
								 | 
							
								  constructor(code: string | number, ...args: Array<any>) {
							 | 
						||
| 
								 | 
							
								    if (process.env.NODE_ENV === 'production') {
							 | 
						||
| 
								 | 
							
								      super(
							 | 
						||
| 
								 | 
							
								        `An error occurred. See https://github.com/styled-components/polished/blob/main/src/internalHelpers/errors.md#${code} for more information.`,
							 | 
						||
| 
								 | 
							
								      )
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      super(format(ERRORS[code], ...args))
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |