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 |