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
						
					
					
				| '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
 |