|
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.getStaticJSONValue = exports.isUndefinedIdentifier = exports.isNumberIdentifier = exports.isExpression = void 0;
- function isExpression(node) {
- if (node.type === "JSONIdentifier" || node.type === "JSONLiteral") {
- const parent = node.parent;
- if (parent.type === "JSONProperty" && parent.key === node) {
- return false;
- }
- return true;
- }
- if (node.type === "JSONObjectExpression" ||
- node.type === "JSONArrayExpression" ||
- node.type === "JSONUnaryExpression" ||
- node.type === "JSONTemplateLiteral") {
- return true;
- }
- return false;
- }
- exports.isExpression = isExpression;
- function isNumberIdentifier(node) {
- return (isExpression(node) && (node.name === "Infinity" || node.name === "NaN"));
- }
- exports.isNumberIdentifier = isNumberIdentifier;
- function isUndefinedIdentifier(node) {
- return isExpression(node) && node.name === "undefined";
- }
- exports.isUndefinedIdentifier = isUndefinedIdentifier;
- const resolver = {
- Program(node) {
- if (node.body.length !== 1 ||
- node.body[0].type !== "JSONExpressionStatement") {
- throw new Error("Illegal argument");
- }
- return getStaticJSONValue(node.body[0]);
- },
- JSONExpressionStatement(node) {
- return getStaticJSONValue(node.expression);
- },
- JSONObjectExpression(node) {
- const object = {};
- for (const prop of node.properties) {
- Object.assign(object, getStaticJSONValue(prop));
- }
- return object;
- },
- JSONProperty(node) {
- const keyName = node.key.type === "JSONLiteral"
- ? `${node.key.value}`
- : node.key.name;
- return {
- [keyName]: getStaticJSONValue(node.value),
- };
- },
- JSONArrayExpression(node) {
- const array = [];
- for (let index = 0; index < node.elements.length; index++) {
- const element = node.elements[index];
- if (element) {
- array[index] = getStaticJSONValue(element);
- }
- }
- return array;
- },
- JSONLiteral(node) {
- if (node.regex) {
- try {
- return new RegExp(node.regex.pattern, node.regex.flags);
- }
- catch (_a) {
- return `/${node.regex.pattern}/${node.regex.flags}`;
- }
- }
- if (node.bigint != null) {
- try {
- return BigInt(node.bigint);
- }
- catch (_b) {
- return `${node.bigint}`;
- }
- }
- return node.value;
- },
- JSONUnaryExpression(node) {
- const value = getStaticJSONValue(node.argument);
- return node.operator === "-" ? -value : value;
- },
- JSONIdentifier(node) {
- if (node.name === "Infinity") {
- return Infinity;
- }
- if (node.name === "NaN") {
- return NaN;
- }
- if (node.name === "undefined") {
- return undefined;
- }
- throw new Error("Illegal argument");
- },
- JSONTemplateLiteral(node) {
- return getStaticJSONValue(node.quasis[0]);
- },
- JSONTemplateElement(node) {
- return node.value.cooked;
- },
- };
- function getStaticJSONValue(node) {
- return resolver[node.type](node);
- }
- exports.getStaticJSONValue = getStaticJSONValue;
|