| 
									
										
										
										
											2021-04-16 21:35:18 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const memoize = require("./memoize"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-24 05:07:47 +08:00
										 |  |  | /** @typedef {import("schema-utils/declarations/validate").ValidationErrorConfiguration} ValidationErrorConfiguration */ | 
					
						
							|  |  |  | /** @typedef {import("./fs").JsonObject} JsonObject */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-24 05:41:15 +08:00
										 |  |  | const getValidate = memoize(() => require("schema-utils").validate); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-24 05:07:47 +08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @template {object | object[]} T | 
					
						
							|  |  |  |  * @param {(function(T): boolean) | undefined} check check | 
					
						
							|  |  |  |  * @param {() => JsonObject} getSchema get schema fn | 
					
						
							|  |  |  |  * @param {ValidationErrorConfiguration} options options | 
					
						
							| 
									
										
										
										
											2024-10-25 02:13:59 +08:00
										 |  |  |  * @returns {function(T=): void} validate | 
					
						
							| 
									
										
										
										
											2024-10-24 05:07:47 +08:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2021-11-24 15:32:07 +08:00
										 |  |  | const createSchemaValidation = (check, getSchema, options) => { | 
					
						
							| 
									
										
										
										
											2021-04-16 21:35:18 +08:00
										 |  |  | 	getSchema = memoize(getSchema); | 
					
						
							|  |  |  | 	return value => { | 
					
						
							| 
									
										
										
										
											2024-10-25 02:13:59 +08:00
										 |  |  | 		if (check && !check(/** @type {T} */ (value))) { | 
					
						
							| 
									
										
										
										
											2024-10-24 05:07:47 +08:00
										 |  |  | 			getValidate()( | 
					
						
							|  |  |  | 				getSchema(), | 
					
						
							|  |  |  | 				/** @type {object | object[]} */ | 
					
						
							|  |  |  | 				(value), | 
					
						
							|  |  |  | 				options | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			require("util").deprecate( | 
					
						
							|  |  |  | 				() => {}, | 
					
						
							|  |  |  | 				"webpack bug: Pre-compiled schema reports error while real schema is happy. This has performance drawbacks.", | 
					
						
							|  |  |  | 				"DEP_WEBPACK_PRE_COMPILED_SCHEMA_INVALID" | 
					
						
							|  |  |  | 			)(); | 
					
						
							| 
									
										
										
										
											2021-04-16 21:35:18 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = createSchemaValidation; |