Merge pull request #8570 from webpack/feature/serialization_api

Expose the serialization API
This commit is contained in:
Tobias Koppers 2018-12-28 16:01:55 +01:00 committed by GitHub
commit 0ed58f42ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 58 additions and 63 deletions

View File

@ -18,8 +18,8 @@ const {
keepOriginalOrder
} = require("./util/comparators");
const { compareModulesById } = require("./util/comparators");
const contextify = require("./util/identifier").contextify;
const makeUnserializable = require("./util/makeUnserializable");
const { contextify } = require("./util/identifier");
const { registerNotSerializable } = require("./util/serialization");
/** @typedef {import("webpack-sources").Source} Source */
/** @typedef {import("./ChunkGraph")} ChunkGraph */
@ -890,6 +890,6 @@ webpackEmptyAsyncContext.id = ${JSON.stringify(id)};`;
}
}
makeUnserializable(ContextModule);
registerNotSerializable(ContextModule);
module.exports = ContextModule;

View File

@ -8,7 +8,7 @@
const path = require("path");
const createHash = require("../util/createHash");
const makeSerializable = require("../util/makeSerializable");
const serializer = require("../util/serializer");
const { serializer } = require("../util/serialization");
/** @typedef {import("webpack-sources").Source} Source */
/** @typedef {import("../../declarations/WebpackOptions").FileCacheOptions} FileCacheOptions */

View File

@ -132,5 +132,6 @@ exportPlugins((exports.debug = {}), {
exportPlugins((exports.util = {}), {
createHash: () => require("./util/createHash"),
comparators: () => require("./util/comparators")
comparators: () => require("./util/comparators"),
serialization: () => require("./util/serialization")
});

View File

@ -4,8 +4,8 @@
"use strict";
const ObjectMiddleware = require("../serialization/ObjectMiddleware");
const createHash = require("./createHash");
const { register } = require("./serialization");
const getPrototypeChain = C => {
const chain = [];
@ -64,10 +64,5 @@ class ClassSerializer {
}
module.exports = (Constructor, request, name = null) => {
ObjectMiddleware.register(
Constructor,
request,
name,
new ClassSerializer(Constructor)
);
register(Constructor, request, name, new ClassSerializer(Constructor));
};

View File

@ -1,11 +0,0 @@
/*
MIT License http://www.opensource.org/licenses/mit-license.php
*/
"use strict";
const ObjectMiddleware = require("../serialization/ObjectMiddleware");
module.exports = Constructor => {
ObjectMiddleware.registerNotSerializable(Constructor);
};

View File

@ -5,31 +5,35 @@
"use strict";
const ObjectMiddleware = require("../serialization/ObjectMiddleware");
const { register } = require("./serialization");
const Position = /** @type {TODO} */ (require("acorn")).Position;
const SourceLocation = require("acorn").SourceLocation;
const CachedSource = require("webpack-sources").CachedSource;
const ConcatSource = require("webpack-sources").ConcatSource;
const OriginalSource = require("webpack-sources").OriginalSource;
const PrefixSource = require("webpack-sources").PrefixSource;
const RawSource = require("webpack-sources").RawSource;
const ReplaceSource = require("webpack-sources").ReplaceSource;
const SourceMapSource = require("webpack-sources").SourceMapSource;
const {
CachedSource,
ConcatSource,
OriginalSource,
PrefixSource,
RawSource,
ReplaceSource,
SourceMapSource
} = require("webpack-sources");
/** @typedef {import("../Dependency").RealDependencyLocation} RealDependencyLocation */
/** @typedef {import("../Dependency").SourcePosition} SourcePosition */
/** @typedef {import("./serialization").ObjectDeserializerContext} ObjectDeserializerContext */
/** @typedef {import("./serialization").ObjectSerializerContext} ObjectSerializerContext */
const CURRENT_MODULE = "webpack/lib/util/registerExternalSerializer";
ObjectMiddleware.register(
register(
CachedSource,
CURRENT_MODULE,
"webpack-sources/CachedSource",
new class CachedSourceSerializer {
/**
* @param {CachedSource} source the cached source to be serialized
* @param {ObjectMiddleware.ObjectSerializerContext} context context
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
@ -40,7 +44,7 @@ ObjectMiddleware.register(
}
/**
* @param {ObjectMiddleware.ObjectDeserializerContext} context context
* @param {ObjectDeserializerContext} context context
* @returns {CachedSource} cached source
*/
deserialize({ read }) {
@ -53,14 +57,14 @@ ObjectMiddleware.register(
}()
);
ObjectMiddleware.register(
register(
RawSource,
CURRENT_MODULE,
"webpack-sources/RawSource",
new class RawSourceSerializer {
/**
* @param {RawSource} source the raw source to be serialized
* @param {ObjectMiddleware.ObjectSerializerContext} context context
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
@ -69,7 +73,7 @@ ObjectMiddleware.register(
}
/**
* @param {ObjectMiddleware.ObjectDeserializerContext} context context
* @param {ObjectDeserializerContext} context context
* @returns {RawSource} raw source
*/
deserialize({ read }) {
@ -79,14 +83,14 @@ ObjectMiddleware.register(
}()
);
ObjectMiddleware.register(
register(
ConcatSource,
CURRENT_MODULE,
"webpack-sources/ConcatSource",
new class ConcatSourceSerializer {
/**
* @param {ConcatSource} source the concat source to be serialized
* @param {ObjectMiddleware.ObjectSerializerContext} context context
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
@ -94,7 +98,7 @@ ObjectMiddleware.register(
}
/**
* @param {ObjectMiddleware.ObjectDeserializerContext} context context
* @param {ObjectDeserializerContext} context context
* @returns {ConcatSource} concat source
*/
deserialize({ read }) {
@ -106,14 +110,14 @@ ObjectMiddleware.register(
}()
);
ObjectMiddleware.register(
register(
PrefixSource,
CURRENT_MODULE,
"webpack-sources/PrefixSource",
new class PrefixSourceSerializer {
/**
* @param {PrefixSource} source the prefix source to be serialized
* @param {ObjectMiddleware.ObjectSerializerContext} context context
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
@ -122,7 +126,7 @@ ObjectMiddleware.register(
}
/**
* @param {ObjectMiddleware.ObjectDeserializerContext} context context
* @param {ObjectDeserializerContext} context context
* @returns {PrefixSource} prefix source
*/
deserialize({ read }) {
@ -131,14 +135,14 @@ ObjectMiddleware.register(
}()
);
ObjectMiddleware.register(
register(
ReplaceSource,
CURRENT_MODULE,
"webpack-sources/ReplaceSource",
new class ReplaceSourceSerializer {
/**
* @param {ReplaceSource} source the replace source to be serialized
* @param {ObjectMiddleware.ObjectSerializerContext} context context
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
@ -160,7 +164,7 @@ ObjectMiddleware.register(
}
/**
* @param {ObjectMiddleware.ObjectDeserializerContext} context context
* @param {ObjectDeserializerContext} context context
* @returns {ReplaceSource} replace source
*/
deserialize({ read }) {
@ -175,14 +179,14 @@ ObjectMiddleware.register(
}()
);
ObjectMiddleware.register(
register(
OriginalSource,
CURRENT_MODULE,
"webpack-sources/OriginalSource",
new class OriginalSourceSerializer {
/**
* @param {OriginalSource} source the original source to be serialized
* @param {ObjectMiddleware.ObjectSerializerContext} context context
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
@ -191,7 +195,7 @@ ObjectMiddleware.register(
}
/**
* @param {ObjectMiddleware.ObjectDeserializerContext} context context
* @param {ObjectDeserializerContext} context context
* @returns {OriginalSource} original source
*/
deserialize({ read }) {
@ -200,14 +204,14 @@ ObjectMiddleware.register(
}()
);
ObjectMiddleware.register(
register(
SourceLocation,
CURRENT_MODULE,
"acorn/SourceLocation",
new class SourceLocationSerializer {
/**
* @param {SourceLocation} loc the location to be serialized
* @param {ObjectMiddleware.ObjectSerializerContext} context context
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(loc, { write }) {
@ -218,7 +222,7 @@ ObjectMiddleware.register(
}
/**
* @param {ObjectMiddleware.ObjectDeserializerContext} context context
* @param {ObjectDeserializerContext} context context
* @returns {RealDependencyLocation} location
*/
deserialize({ read }) {
@ -236,14 +240,14 @@ ObjectMiddleware.register(
}()
);
ObjectMiddleware.register(
register(
Position,
CURRENT_MODULE,
"acorn/Position",
new class PositionSerializer {
/**
* @param {Position} pos the position to be serialized
* @param {ObjectMiddleware.ObjectSerializerContext} context context
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(pos, { write }) {
@ -252,7 +256,7 @@ ObjectMiddleware.register(
}
/**
* @param {ObjectMiddleware.ObjectDeserializerContext} context context
* @param {ObjectDeserializerContext} context context
* @returns {SourcePosition} position
*/
deserialize({ read }) {
@ -264,14 +268,14 @@ ObjectMiddleware.register(
}()
);
ObjectMiddleware.register(
register(
SourceMapSource,
CURRENT_MODULE,
"webpack-sources/SourceMapSource",
new class SourceMapSourceSerializer {
/**
* @param {SourceMapSource} source the source map source to be serialized
* @param {ObjectMiddleware.ObjectSerializerContext} context context
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
@ -281,7 +285,7 @@ ObjectMiddleware.register(
}
/**
* @param {ObjectMiddleware.ObjectDeserializerContext} context context
* @param {ObjectDeserializerContext} context context
* @returns {SourceMapSource} source source map source
*/
deserialize({ read }) {

View File

@ -1,6 +1,5 @@
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
@ -10,7 +9,16 @@ const FileMiddleware = require("../serialization/FileMiddleware");
const ObjectMiddleware = require("../serialization/ObjectMiddleware");
const Serializer = require("../serialization/Serializer");
const serializer = new Serializer(
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
const { register, registerLoader, registerNotSerializable } = ObjectMiddleware;
// Expose serialization API
exports.register = register;
exports.registerLoader = registerLoader;
exports.registerNotSerializable = registerNotSerializable;
exports.serializer = new Serializer(
[new ObjectMiddleware(), new BinaryMiddleware(), new FileMiddleware()],
{
singleItem: true
@ -21,8 +29,6 @@ require("./registerExternalSerializer");
// Load internal paths with a relative require
// This allows bundling all internal serializers
ObjectMiddleware.registerLoader(/^webpack\/lib\//, req =>
registerLoader(/^webpack\/lib\//, req =>
require("../" + req.slice("webpack/lib/".length))
);
module.exports = serializer;