| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const parseJson = require("json-parse-even-better-errors");const Parser = require("../Parser");const JsonExportsDependency = require("../dependencies/JsonExportsDependency");const JsonData = require("./JsonData");/** @typedef {import("../../declarations/plugins/JsonModulesPluginParser").JsonModulesPluginParserOptions} JsonModulesPluginParserOptions *//** @typedef {import("../Parser").ParserState} ParserState *//** @typedef {import("../Parser").PreparsedAst} PreparsedAst */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 {JsonModulesPluginParserOptions["parse"]} */		const parseFn =			typeof this.options.parse === "function" ? this.options.parse : parseJson;		const data =			typeof source === "object"				? source				: parseFn(source[0] === "\ufeff" ? source.slice(1) : source);		const jsonData = new JsonData(data);		state.module.buildInfo.jsonData = jsonData;		state.module.buildInfo.strict = true;		state.module.buildMeta.exportsType = "default";		state.module.buildMeta.defaultObject =			typeof data === "object" ? "redirect-warn" : false;		state.module.addDependency(new JsonExportsDependency(jsonData));		return state;	}}module.exports = JsonParser;
 |