| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 | /*	MIT License http://www.opensource.org/licenses/mit-license.php*/"use strict";const memoize = require("./memoize");/** @typedef {import("../serialization/BinaryMiddleware").MEASURE_END_OPERATION_TYPE} MEASURE_END_OPERATION *//** @typedef {import("../serialization/BinaryMiddleware").MEASURE_START_OPERATION_TYPE} MEASURE_START_OPERATION *//** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext *//** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext *//** @typedef {import("../serialization/Serializer")} Serializer */const getBinaryMiddleware = memoize(() =>	require("../serialization/BinaryMiddleware"));const getObjectMiddleware = memoize(() =>	require("../serialization/ObjectMiddleware"));const getSingleItemMiddleware = memoize(() =>	require("../serialization/SingleItemMiddleware"));const getSerializer = memoize(() => require("../serialization/Serializer"));const getSerializerMiddleware = memoize(() =>	require("../serialization/SerializerMiddleware"));const getBinaryMiddlewareInstance = memoize(	() => new (getBinaryMiddleware())());const registerSerializers = memoize(() => {	require("./registerExternalSerializer");	// Load internal paths with a relative require	// This allows bundling all internal serializers	const internalSerializables = require("./internalSerializables");	getObjectMiddleware().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;	});});/** @type {Serializer} */let buffersSerializer;// Expose serialization APImodule.exports = {	get register() {		return getObjectMiddleware().register;	},	get registerLoader() {		return getObjectMiddleware().registerLoader;	},	get registerNotSerializable() {		return getObjectMiddleware().registerNotSerializable;	},	get NOT_SERIALIZABLE() {		return getObjectMiddleware().NOT_SERIALIZABLE;	},	/** @type {MEASURE_START_OPERATION} */	get MEASURE_START_OPERATION() {		return getBinaryMiddleware().MEASURE_START_OPERATION;	},	/** @type {MEASURE_END_OPERATION} */	get MEASURE_END_OPERATION() {		return getBinaryMiddleware().MEASURE_END_OPERATION;	},	get buffersSerializer() {		if (buffersSerializer !== undefined) return buffersSerializer;		registerSerializers();		const Serializer = getSerializer();		const binaryMiddleware = getBinaryMiddlewareInstance();		const SerializerMiddleware = getSerializerMiddleware();		const SingleItemMiddleware = getSingleItemMiddleware();		return (buffersSerializer = new Serializer([			new SingleItemMiddleware(),			new (getObjectMiddleware())(context => {				if (context.write) {					context.writeLazy = value => {						context.write(							SerializerMiddleware.createLazy(value, binaryMiddleware)						);					};				}			}, "md4"),			binaryMiddleware		]));	},	createFileSerializer: (fs, hashFunction) => {		registerSerializers();		const Serializer = getSerializer();		const FileMiddleware = require("../serialization/FileMiddleware");		const fileMiddleware = new FileMiddleware(fs, hashFunction);		const binaryMiddleware = getBinaryMiddlewareInstance();		const SerializerMiddleware = getSerializerMiddleware();		const SingleItemMiddleware = getSingleItemMiddleware();		return new Serializer([			new SingleItemMiddleware(),			new (getObjectMiddleware())(context => {				if (context.write) {					context.writeLazy = value => {						context.write(							SerializerMiddleware.createLazy(value, binaryMiddleware)						);					};					context.writeSeparate = (value, options) => {						const lazy = SerializerMiddleware.createLazy(							value,							fileMiddleware,							options						);						context.write(lazy);						return lazy;					};				}			}, hashFunction),			binaryMiddleware,			fileMiddleware		]);	}};
 |