| 
									
										
										
										
											2018-12-28 20:18:02 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-28 20:54:10 +08:00
										 |  |  | const BinaryMiddleware = require("../serialization/BinaryMiddleware"); | 
					
						
							|  |  |  | const FileMiddleware = require("../serialization/FileMiddleware"); | 
					
						
							| 
									
										
										
										
											2018-12-28 20:18:02 +08:00
										 |  |  | const ObjectMiddleware = require("../serialization/ObjectMiddleware"); | 
					
						
							| 
									
										
										
										
											2018-12-28 20:54:10 +08:00
										 |  |  | const Serializer = require("../serialization/Serializer"); | 
					
						
							| 
									
										
										
										
											2020-01-24 06:51:49 +08:00
										 |  |  | const SerializerMiddleware = require("../serialization/SerializerMiddleware"); | 
					
						
							| 
									
										
										
										
											2019-01-24 23:54:56 +08:00
										 |  |  | const SingleItemMiddleware = require("../serialization/SingleItemMiddleware"); | 
					
						
							| 
									
										
										
										
											2019-10-11 16:01:08 +08:00
										 |  |  | const internalSerializables = require("./internalSerializables"); | 
					
						
							| 
									
										
										
										
											2018-12-28 20:18:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-28 21:48:18 +08:00
										 |  |  | /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */ | 
					
						
							|  |  |  | /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-28 20:54:10 +08:00
										 |  |  | const { register, registerLoader, registerNotSerializable } = ObjectMiddleware; | 
					
						
							| 
									
										
										
										
											2018-12-28 20:18:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-24 06:51:49 +08:00
										 |  |  | const binaryMiddleware = new BinaryMiddleware(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-28 20:54:10 +08:00
										 |  |  | // Expose serialization API
 | 
					
						
							|  |  |  | exports.register = register; | 
					
						
							|  |  |  | exports.registerLoader = registerLoader; | 
					
						
							|  |  |  | exports.registerNotSerializable = registerNotSerializable; | 
					
						
							| 
									
										
										
										
											2019-01-19 18:47:19 +08:00
										 |  |  | exports.NOT_SERIALIZABLE = ObjectMiddleware.NOT_SERIALIZABLE; | 
					
						
							| 
									
										
										
										
											2019-01-22 01:24:57 +08:00
										 |  |  | exports.MEASURE_START_OPERATION = BinaryMiddleware.MEASURE_START_OPERATION; | 
					
						
							|  |  |  | exports.MEASURE_END_OPERATION = BinaryMiddleware.MEASURE_END_OPERATION; | 
					
						
							| 
									
										
										
										
											2019-01-24 23:54:56 +08:00
										 |  |  | exports.buffersSerializer = new Serializer([ | 
					
						
							|  |  |  | 	new SingleItemMiddleware(), | 
					
						
							| 
									
										
										
										
											2020-01-24 06:51:49 +08:00
										 |  |  | 	new ObjectMiddleware(context => { | 
					
						
							|  |  |  | 		if (context.write) { | 
					
						
							|  |  |  | 			context.writeLazy = value => { | 
					
						
							|  |  |  | 				context.write(SerializerMiddleware.createLazy(value, binaryMiddleware)); | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}), | 
					
						
							|  |  |  | 	binaryMiddleware | 
					
						
							| 
									
										
										
										
											2019-01-24 23:54:56 +08:00
										 |  |  | ]); | 
					
						
							| 
									
										
										
										
											2020-01-24 06:51:49 +08:00
										 |  |  | exports.createFileSerializer = fs => { | 
					
						
							|  |  |  | 	const fileMiddleware = new FileMiddleware(fs); | 
					
						
							|  |  |  | 	return new Serializer([ | 
					
						
							|  |  |  | 		new SingleItemMiddleware(), | 
					
						
							|  |  |  | 		new ObjectMiddleware(context => { | 
					
						
							|  |  |  | 			if (context.write) { | 
					
						
							|  |  |  | 				context.writeLazy = value => { | 
					
						
							|  |  |  | 					context.write( | 
					
						
							|  |  |  | 						SerializerMiddleware.createLazy(value, binaryMiddleware) | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 				context.writeSeparate = (value, options) => { | 
					
						
							|  |  |  | 					context.write( | 
					
						
							|  |  |  | 						SerializerMiddleware.createLazy(value, fileMiddleware, options) | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}), | 
					
						
							|  |  |  | 		binaryMiddleware, | 
					
						
							|  |  |  | 		fileMiddleware | 
					
						
							|  |  |  | 	]); | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2018-12-28 20:54:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | require("./registerExternalSerializer"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Load internal paths with a relative require
 | 
					
						
							|  |  |  | // This allows bundling all internal serializers
 | 
					
						
							| 
									
										
										
										
											2019-10-11 16:01:08 +08:00
										 |  |  | registerLoader(/^webpack\/lib\//, req => { | 
					
						
							|  |  |  | 	const loader = internalSerializables[req.slice("webpack/lib/".length)]; | 
					
						
							|  |  |  | 	if (loader) { | 
					
						
							|  |  |  | 		loader(); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		console.warn(`${req} not found in internalSerializables`); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return true; | 
					
						
							|  |  |  | }); |