75 lines
2.4 KiB
JavaScript
75 lines
2.4 KiB
JavaScript
/*
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
const BinaryMiddleware = require("../serialization/BinaryMiddleware");
|
|
const FileMiddleware = require("../serialization/FileMiddleware");
|
|
const ObjectMiddleware = require("../serialization/ObjectMiddleware");
|
|
const Serializer = require("../serialization/Serializer");
|
|
const SerializerMiddleware = require("../serialization/SerializerMiddleware");
|
|
const SingleItemMiddleware = require("../serialization/SingleItemMiddleware");
|
|
const internalSerializables = require("./internalSerializables");
|
|
|
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
|
|
const { register, registerLoader, registerNotSerializable } = ObjectMiddleware;
|
|
|
|
const binaryMiddleware = new BinaryMiddleware();
|
|
|
|
// Expose serialization API
|
|
exports.register = register;
|
|
exports.registerLoader = registerLoader;
|
|
exports.registerNotSerializable = registerNotSerializable;
|
|
exports.NOT_SERIALIZABLE = ObjectMiddleware.NOT_SERIALIZABLE;
|
|
exports.MEASURE_START_OPERATION = BinaryMiddleware.MEASURE_START_OPERATION;
|
|
exports.MEASURE_END_OPERATION = BinaryMiddleware.MEASURE_END_OPERATION;
|
|
exports.buffersSerializer = new Serializer([
|
|
new SingleItemMiddleware(),
|
|
new ObjectMiddleware(context => {
|
|
if (context.write) {
|
|
context.writeLazy = value => {
|
|
context.write(SerializerMiddleware.createLazy(value, binaryMiddleware));
|
|
};
|
|
}
|
|
}),
|
|
binaryMiddleware
|
|
]);
|
|
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
|
|
]);
|
|
};
|
|
|
|
require("./registerExternalSerializer");
|
|
|
|
// Load internal paths with a relative require
|
|
// This allows bundling all internal serializers
|
|
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;
|
|
});
|