diff options
Diffstat (limited to 'node_modules/webpack/lib/json')
| -rw-r--r-- | node_modules/webpack/lib/json/JsonData.js | 74 | ||||
| -rw-r--r-- | node_modules/webpack/lib/json/JsonGenerator.js | 199 | ||||
| -rw-r--r-- | node_modules/webpack/lib/json/JsonModulesPlugin.js | 56 | ||||
| -rw-r--r-- | node_modules/webpack/lib/json/JsonParser.js | 71 |
4 files changed, 0 insertions, 400 deletions
diff --git a/node_modules/webpack/lib/json/JsonData.js b/node_modules/webpack/lib/json/JsonData.js deleted file mode 100644 index cb39dfc0..00000000 --- a/node_modules/webpack/lib/json/JsonData.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - -"use strict"; - -const { register } = require("../util/serialization"); - -/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */ -/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */ -/** @typedef {import("../util/Hash")} Hash */ -/** @typedef {import("./JsonModulesPlugin").RawJsonData} RawJsonData */ - -class JsonData { - /** - * @param {Buffer | RawJsonData} data JSON data - */ - constructor(data) { - /** @type {Buffer | undefined} */ - this._buffer = undefined; - /** @type {RawJsonData | undefined} */ - this._data = undefined; - if (Buffer.isBuffer(data)) { - this._buffer = data; - } else { - this._data = data; - } - } - - /** - * @returns {RawJsonData|undefined} Raw JSON data - */ - get() { - if (this._data === undefined && this._buffer !== undefined) { - this._data = JSON.parse(this._buffer.toString()); - } - return this._data; - } - - /** - * @param {Hash} hash hash to be updated - * @returns {void} the updated hash - */ - updateHash(hash) { - if (this._buffer === undefined && this._data !== undefined) { - this._buffer = Buffer.from(JSON.stringify(this._data)); - } - - if (this._buffer) hash.update(this._buffer); - } -} - -register(JsonData, "webpack/lib/json/JsonData", null, { - /** - * @param {JsonData} obj JSONData object - * @param {ObjectSerializerContext} context context - */ - serialize(obj, { write }) { - if (obj._buffer === undefined && obj._data !== undefined) { - obj._buffer = Buffer.from(JSON.stringify(obj._data)); - } - write(obj._buffer); - }, - /** - * @param {ObjectDeserializerContext} context context - * @returns {JsonData} deserialized JSON data - */ - deserialize({ read }) { - return new JsonData(read()); - } -}); - -module.exports = JsonData; diff --git a/node_modules/webpack/lib/json/JsonGenerator.js b/node_modules/webpack/lib/json/JsonGenerator.js deleted file mode 100644 index c643f5dc..00000000 --- a/node_modules/webpack/lib/json/JsonGenerator.js +++ /dev/null @@ -1,199 +0,0 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - -"use strict"; - -const { RawSource } = require("webpack-sources"); -const ConcatenationScope = require("../ConcatenationScope"); -const { UsageState } = require("../ExportsInfo"); -const Generator = require("../Generator"); -const RuntimeGlobals = require("../RuntimeGlobals"); - -/** @typedef {import("webpack-sources").Source} Source */ -/** @typedef {import("../ExportsInfo")} ExportsInfo */ -/** @typedef {import("../Generator").GenerateContext} GenerateContext */ -/** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */ -/** @typedef {import("../NormalModule")} NormalModule */ -/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */ -/** @typedef {import("./JsonData")} JsonData */ -/** @typedef {import("./JsonModulesPlugin").RawJsonData} RawJsonData */ - -/** - * @param {RawJsonData} data Raw JSON data - * @returns {undefined|string} stringified data - */ -const stringifySafe = data => { - const stringified = JSON.stringify(data); - if (!stringified) { - return; // Invalid JSON - } - - return stringified.replace(/\u2028|\u2029/g, str => - str === "\u2029" ? "\\u2029" : "\\u2028" - ); // invalid in JavaScript but valid JSON -}; - -/** - * @param {RawJsonData} data Raw JSON data (always an object or array) - * @param {ExportsInfo} exportsInfo exports info - * @param {RuntimeSpec} runtime the runtime - * @returns {RawJsonData} reduced data - */ -const createObjectForExportsInfo = (data, exportsInfo, runtime) => { - if (exportsInfo.otherExportsInfo.getUsed(runtime) !== UsageState.Unused) - return data; - const isArray = Array.isArray(data); - /** @type {RawJsonData} */ - const reducedData = isArray ? [] : {}; - for (const key of Object.keys(data)) { - const exportInfo = exportsInfo.getReadOnlyExportInfo(key); - const used = exportInfo.getUsed(runtime); - if (used === UsageState.Unused) continue; - - /** @type {RawJsonData} */ - const value = - used === UsageState.OnlyPropertiesUsed && exportInfo.exportsInfo - ? createObjectForExportsInfo(data[key], exportInfo.exportsInfo, runtime) - : data[key]; - - const name = /** @type {string} */ (exportInfo.getUsedName(key, runtime)); - /** @type {Record<string, RawJsonData>} */ (reducedData)[name] = value; - } - if (isArray) { - const arrayLengthWhenUsed = - exportsInfo.getReadOnlyExportInfo("length").getUsed(runtime) !== - UsageState.Unused - ? data.length - : undefined; - - let sizeObjectMinusArray = 0; - for (let i = 0; i < reducedData.length; i++) { - if (reducedData[i] === undefined) { - sizeObjectMinusArray -= 2; - } else { - sizeObjectMinusArray += `${i}`.length + 3; - } - } - if (arrayLengthWhenUsed !== undefined) { - sizeObjectMinusArray += - `${arrayLengthWhenUsed}`.length + - 8 - - (arrayLengthWhenUsed - reducedData.length) * 2; - } - if (sizeObjectMinusArray < 0) - return Object.assign( - arrayLengthWhenUsed === undefined - ? {} - : { length: arrayLengthWhenUsed }, - reducedData - ); - /** @type {number} */ - const generatedLength = - arrayLengthWhenUsed !== undefined - ? Math.max(arrayLengthWhenUsed, reducedData.length) - : reducedData.length; - for (let i = 0; i < generatedLength; i++) { - if (reducedData[i] === undefined) { - reducedData[i] = 0; - } - } - } - return reducedData; -}; - -const TYPES = new Set(["javascript"]); - -class JsonGenerator extends Generator { - /** - * @param {NormalModule} module fresh module - * @returns {Set<string>} available types (do not mutate) - */ - getTypes(module) { - return TYPES; - } - - /** - * @param {NormalModule} module the module - * @param {string=} type source type - * @returns {number} estimate size of the module - */ - getSize(module, type) { - /** @type {RawJsonData | undefined} */ - const data = - module.buildInfo && - module.buildInfo.jsonData && - module.buildInfo.jsonData.get(); - if (!data) return 0; - return /** @type {string} */ (stringifySafe(data)).length + 10; - } - - /** - * @param {NormalModule} module module for which the bailout reason should be determined - * @param {ConcatenationBailoutReasonContext} context context - * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated - */ - getConcatenationBailoutReason(module, context) { - return undefined; - } - - /** - * @param {NormalModule} module module for which the code should be generated - * @param {GenerateContext} generateContext context for generate - * @returns {Source} generated code - */ - generate( - module, - { - moduleGraph, - runtimeTemplate, - runtimeRequirements, - runtime, - concatenationScope - } - ) { - /** @type {RawJsonData | undefined} */ - const data = - module.buildInfo && - module.buildInfo.jsonData && - module.buildInfo.jsonData.get(); - if (data === undefined) { - return new RawSource( - runtimeTemplate.missingModuleStatement({ - request: module.rawRequest - }) - ); - } - const exportsInfo = moduleGraph.getExportsInfo(module); - /** @type {RawJsonData} */ - const finalJson = - typeof data === "object" && - data && - exportsInfo.otherExportsInfo.getUsed(runtime) === UsageState.Unused - ? createObjectForExportsInfo(data, exportsInfo, runtime) - : data; - // Use JSON because JSON.parse() is much faster than JavaScript evaluation - const jsonStr = /** @type {string} */ (stringifySafe(finalJson)); - const jsonExpr = - jsonStr.length > 20 && typeof finalJson === "object" - ? `/*#__PURE__*/JSON.parse('${jsonStr.replace(/[\\']/g, "\\$&")}')` - : jsonStr; - /** @type {string} */ - let content; - if (concatenationScope) { - content = `${runtimeTemplate.supportsConst() ? "const" : "var"} ${ - ConcatenationScope.NAMESPACE_OBJECT_EXPORT - } = ${jsonExpr};`; - concatenationScope.registerNamespaceExport( - ConcatenationScope.NAMESPACE_OBJECT_EXPORT - ); - } else { - runtimeRequirements.add(RuntimeGlobals.module); - content = `${module.moduleArgument}.exports = ${jsonExpr};`; - } - return new RawSource(content); - } -} - -module.exports = JsonGenerator; diff --git a/node_modules/webpack/lib/json/JsonModulesPlugin.js b/node_modules/webpack/lib/json/JsonModulesPlugin.js deleted file mode 100644 index b87fdc42..00000000 --- a/node_modules/webpack/lib/json/JsonModulesPlugin.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - -"use strict"; - -const { JSON_MODULE_TYPE } = require("../ModuleTypeConstants"); -const createSchemaValidation = require("../util/create-schema-validation"); -const JsonGenerator = require("./JsonGenerator"); -const JsonParser = require("./JsonParser"); - -/** @typedef {import("../Compiler")} Compiler */ -/** @typedef {Record<string, any>} RawJsonData */ - -const validate = createSchemaValidation( - require("../../schemas/plugins/JsonModulesPluginParser.check.js"), - () => require("../../schemas/plugins/JsonModulesPluginParser.json"), - { - name: "Json Modules Plugin", - baseDataPath: "parser" - } -); - -const PLUGIN_NAME = "JsonModulesPlugin"; - -/** - * The JsonModulesPlugin is the entrypoint plugin for the json modules feature. - * It adds the json module type to the compiler and registers the json parser and generator. - */ -class JsonModulesPlugin { - /** - * Apply the plugin - * @param {Compiler} compiler the compiler instance - * @returns {void} - */ - apply(compiler) { - compiler.hooks.compilation.tap( - PLUGIN_NAME, - (compilation, { normalModuleFactory }) => { - normalModuleFactory.hooks.createParser - .for(JSON_MODULE_TYPE) - .tap(PLUGIN_NAME, parserOptions => { - validate(parserOptions); - - return new JsonParser(parserOptions); - }); - normalModuleFactory.hooks.createGenerator - .for(JSON_MODULE_TYPE) - .tap(PLUGIN_NAME, () => new JsonGenerator()); - } - ); - } -} - -module.exports = JsonModulesPlugin; diff --git a/node_modules/webpack/lib/json/JsonParser.js b/node_modules/webpack/lib/json/JsonParser.js deleted file mode 100644 index 77f9fb8f..00000000 --- a/node_modules/webpack/lib/json/JsonParser.js +++ /dev/null @@ -1,71 +0,0 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ - -"use strict"; - -const Parser = require("../Parser"); -const JsonExportsDependency = require("../dependencies/JsonExportsDependency"); -const memoize = require("../util/memoize"); -const JsonData = require("./JsonData"); - -/** @typedef {import("../../declarations/plugins/JsonModulesPluginParser").JsonModulesPluginParserOptions} JsonModulesPluginParserOptions */ -/** @typedef {import("../Module").BuildInfo} BuildInfo */ -/** @typedef {import("../Module").BuildMeta} BuildMeta */ -/** @typedef {import("../Parser").ParserState} ParserState */ -/** @typedef {import("../Parser").PreparsedAst} PreparsedAst */ -/** @typedef {import("./JsonModulesPlugin").RawJsonData} RawJsonData */ - -const getParseJson = memoize(() => require("json-parse-even-better-errors")); - -class JsonParser extends Parser { - /** - * @param {JsonModulesPluginParserOptions} options parser options - */ - constructor(options) { - super(); - this.options = options || {}; - } - - /** - * @param {string | Buffer | PreparsedAst} source the source to parse - * @param {ParserState} state the parser state - * @returns {ParserState} the parser state - */ - parse(source, state) { - if (Buffer.isBuffer(source)) { - source = source.toString("utf-8"); - } - - /** @type {NonNullable<JsonModulesPluginParserOptions["parse"]>} */ - const parseFn = - typeof this.options.parse === "function" - ? this.options.parse - : getParseJson(); - /** @type {Buffer | RawJsonData | undefined} */ - let data; - try { - data = - typeof source === "object" - ? source - : parseFn(source[0] === "\uFEFF" ? source.slice(1) : source); - } catch (err) { - throw new Error( - `Cannot parse JSON: ${/** @type {Error} */ (err).message}` - ); - } - const jsonData = new JsonData(/** @type {Buffer | RawJsonData} */ (data)); - const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo); - buildInfo.jsonData = jsonData; - buildInfo.strict = true; - const buildMeta = /** @type {BuildMeta} */ (state.module.buildMeta); - buildMeta.exportsType = "default"; - buildMeta.defaultObject = - typeof data === "object" ? "redirect-warn" : false; - state.module.addDependency(new JsonExportsDependency(jsonData)); - return state; - } -} - -module.exports = JsonParser; |
