1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- "use strict";
- const Parser = require("../Parser");
- const JsonExportsDependency = require("../dependencies/JsonExportsDependency");
- const memoize = require("../util/memoize");
- const JsonData = require("./JsonData");
- const getParseJson = memoize(() => require("json-parse-even-better-errors"));
- class JsonParser extends Parser {
-
- constructor(options) {
- super();
- this.options = options || {};
- }
-
- parse(source, state) {
- if (Buffer.isBuffer(source)) {
- source = source.toString("utf-8");
- }
-
- const parseFn =
- typeof this.options.parse === "function"
- ? this.options.parse
- : getParseJson();
-
- 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( (data));
- const buildInfo = (state.module.buildInfo);
- buildInfo.jsonData = jsonData;
- buildInfo.strict = true;
- const 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;
|