| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2025-03-12 09:56:14 +08:00
										 |  |  |  * @param {((value: T) => boolean) | undefined} check check | 
					
						
							| 
									
										
										
										
											2024-10-24 05:07:47 +08:00
										 |  |  |  * @param {() => JsonObject} getSchema get schema fn | 
					
						
							|  |  |  |  * @param {ValidationErrorConfiguration} options options | 
					
						
							| 
									
										
										
										
											2025-03-12 09:56:14 +08:00
										 |  |  |  * @returns {(value?: 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 => { | 
					
						
							| 
									
										
										
										
											2025-03-27 08:07:25 +08:00
										 |  |  | 		if (check && value && !check(value)) { | 
					
						
							| 
									
										
										
										
											2025-04-03 00:02:22 +08:00
										 |  |  | 			getValidate()( | 
					
						
							|  |  |  | 				getSchema(), | 
					
						
							|  |  |  | 				/** @type {EXPECTED_OBJECT | EXPECTED_OBJECT[]} */ | 
					
						
							|  |  |  | 				(value), | 
					
						
							|  |  |  | 				options | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2024-10-24 05:07:47 +08:00
										 |  |  | 			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; |