You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/* MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra */
"use strict";
const makeSerializable = require("../util/makeSerializable"); const NullDependency = require("./NullDependency");
/** @typedef {import("../ChunkGraph")} ChunkGraph */ /** @typedef {import("../Dependency").ExportSpec} ExportSpec */ /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */ /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */ /** @typedef {import("../ModuleGraph")} ModuleGraph */ /** @typedef {import("../json/JsonData")} JsonData */ /** @typedef {import("../json/JsonData").RawJsonData} RawJsonData */ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */ /** @typedef {import("../util/Hash")} Hash */
/** * @param {RawJsonData} data data * @returns {TODO} value */ const getExportsFromData = data => { if (data && typeof data === "object") { if (Array.isArray(data)) { return data.length < 100 ? data.map((item, idx) => ({ name: `${idx}`, canMangle: true, exports: getExportsFromData(item) })) : undefined; } const exports = []; for (const key of Object.keys(data)) { exports.push({ name: key, canMangle: true, exports: getExportsFromData(data[key]) }); } return exports; } return undefined; };
class JsonExportsDependency extends NullDependency { /** * @param {JsonData} data json data */ constructor(data) { super(); this.data = data; }
get type() { return "json exports"; }
/** * Returns the exported names * @param {ModuleGraph} moduleGraph module graph * @returns {ExportsSpec | undefined} export names */ getExports(moduleGraph) { return { exports: getExportsFromData( this.data && /** @type {RawJsonData} */ (this.data.get()) ), dependencies: undefined }; }
/** * Update the hash * @param {Hash} hash hash to be updated * @param {UpdateHashContext} context context * @returns {void} */ updateHash(hash, context) { this.data.updateHash(hash); }
/** * @param {ObjectSerializerContext} context context */ serialize(context) { const { write } = context; write(this.data); super.serialize(context); }
/** * @param {ObjectDeserializerContext} context context */ deserialize(context) { const { read } = context; this.data = read(); super.deserialize(context); } }
makeSerializable( JsonExportsDependency, "webpack/lib/dependencies/JsonExportsDependency" );
module.exports = JsonExportsDependency;
|