123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /*
- 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 */
- /** @typedef {typeof import("../util/Hash")} Hash */
- /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
- 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 API
- module.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;
- },
- /**
- * @returns {Serializer} buffer serializer
- */
- 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
- ]));
- },
- /**
- * @param {IntermediateFileSystem} fs filesystem
- * @param {string | Hash} hashFunction hash function to use
- * @returns {Serializer} file serializer
- */
- 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
- ]);
- }
- };
|