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.
		
		
		
		
		
			
		
			
				
					68 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					68 lines
				
				1.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const getPluginName = require('./lib/getPluginName')
							 | 
						||
| 
								 | 
							
								const toCamelCase = require('./lib/toCamelCase')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let count = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function plugin (fn, options = {}) {
							 | 
						||
| 
								 | 
							
								  let autoName = false
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (typeof fn.default !== 'undefined') {
							 | 
						||
| 
								 | 
							
								    // Support for 'export default' behaviour in transpiled ECMAScript module
							 | 
						||
| 
								 | 
							
								    fn = fn.default
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (typeof fn !== 'function') {
							 | 
						||
| 
								 | 
							
								    throw new TypeError(
							 | 
						||
| 
								 | 
							
								      `fastify-plugin expects a function, instead got a '${typeof fn}'`
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (typeof options === 'string') {
							 | 
						||
| 
								 | 
							
								    options = {
							 | 
						||
| 
								 | 
							
								      fastify: options
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (
							 | 
						||
| 
								 | 
							
								    typeof options !== 'object' ||
							 | 
						||
| 
								 | 
							
								    Array.isArray(options) ||
							 | 
						||
| 
								 | 
							
								    options === null
							 | 
						||
| 
								 | 
							
								  ) {
							 | 
						||
| 
								 | 
							
								    throw new TypeError('The options object should be an object')
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (options.fastify !== undefined && typeof options.fastify !== 'string') {
							 | 
						||
| 
								 | 
							
								    throw new TypeError(`fastify-plugin expects a version string, instead got '${typeof options.fastify}'`)
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (!options.name) {
							 | 
						||
| 
								 | 
							
								    autoName = true
							 | 
						||
| 
								 | 
							
								    options.name = getPluginName(fn) + '-auto-' + count++
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fn[Symbol.for('skip-override')] = options.encapsulate !== true
							 | 
						||
| 
								 | 
							
								  fn[Symbol.for('fastify.display-name')] = options.name
							 | 
						||
| 
								 | 
							
								  fn[Symbol.for('plugin-meta')] = options
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Faux modules support
							 | 
						||
| 
								 | 
							
								  if (!fn.default) {
							 | 
						||
| 
								 | 
							
								    fn.default = fn
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // TypeScript support for named imports
							 | 
						||
| 
								 | 
							
								  // See https://github.com/fastify/fastify/issues/2404 for more details
							 | 
						||
| 
								 | 
							
								  // The type definitions would have to be update to match this.
							 | 
						||
| 
								 | 
							
								  const camelCase = toCamelCase(options.name)
							 | 
						||
| 
								 | 
							
								  if (!autoName && !fn[camelCase]) {
							 | 
						||
| 
								 | 
							
								    fn[camelCase] = fn
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return fn
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = plugin
							 | 
						||
| 
								 | 
							
								module.exports.default = plugin
							 | 
						||
| 
								 | 
							
								module.exports.fastifyPlugin = plugin
							 |