[6a3a178] | 1 | "use strict";
|
---|
| 2 |
|
---|
| 3 | Object.defineProperty(exports, "__esModule", {
|
---|
| 4 | value: true
|
---|
| 5 | });
|
---|
| 6 | exports.default = void 0;
|
---|
| 7 |
|
---|
| 8 | var _isValidIdentifier = require("../validators/isValidIdentifier");
|
---|
| 9 |
|
---|
| 10 | var _generated = require("../builders/generated");
|
---|
| 11 |
|
---|
| 12 | var _default = valueToNode;
|
---|
| 13 | exports.default = _default;
|
---|
| 14 | const objectToString = Function.call.bind(Object.prototype.toString);
|
---|
| 15 |
|
---|
| 16 | function isRegExp(value) {
|
---|
| 17 | return objectToString(value) === "[object RegExp]";
|
---|
| 18 | }
|
---|
| 19 |
|
---|
| 20 | function isPlainObject(value) {
|
---|
| 21 | if (typeof value !== "object" || value === null || Object.prototype.toString.call(value) !== "[object Object]") {
|
---|
| 22 | return false;
|
---|
| 23 | }
|
---|
| 24 |
|
---|
| 25 | const proto = Object.getPrototypeOf(value);
|
---|
| 26 | return proto === null || Object.getPrototypeOf(proto) === null;
|
---|
| 27 | }
|
---|
| 28 |
|
---|
| 29 | function valueToNode(value) {
|
---|
| 30 | if (value === undefined) {
|
---|
| 31 | return (0, _generated.identifier)("undefined");
|
---|
| 32 | }
|
---|
| 33 |
|
---|
| 34 | if (value === true || value === false) {
|
---|
| 35 | return (0, _generated.booleanLiteral)(value);
|
---|
| 36 | }
|
---|
| 37 |
|
---|
| 38 | if (value === null) {
|
---|
| 39 | return (0, _generated.nullLiteral)();
|
---|
| 40 | }
|
---|
| 41 |
|
---|
| 42 | if (typeof value === "string") {
|
---|
| 43 | return (0, _generated.stringLiteral)(value);
|
---|
| 44 | }
|
---|
| 45 |
|
---|
| 46 | if (typeof value === "number") {
|
---|
| 47 | let result;
|
---|
| 48 |
|
---|
| 49 | if (Number.isFinite(value)) {
|
---|
| 50 | result = (0, _generated.numericLiteral)(Math.abs(value));
|
---|
| 51 | } else {
|
---|
| 52 | let numerator;
|
---|
| 53 |
|
---|
| 54 | if (Number.isNaN(value)) {
|
---|
| 55 | numerator = (0, _generated.numericLiteral)(0);
|
---|
| 56 | } else {
|
---|
| 57 | numerator = (0, _generated.numericLiteral)(1);
|
---|
| 58 | }
|
---|
| 59 |
|
---|
| 60 | result = (0, _generated.binaryExpression)("/", numerator, (0, _generated.numericLiteral)(0));
|
---|
| 61 | }
|
---|
| 62 |
|
---|
| 63 | if (value < 0 || Object.is(value, -0)) {
|
---|
| 64 | result = (0, _generated.unaryExpression)("-", result);
|
---|
| 65 | }
|
---|
| 66 |
|
---|
| 67 | return result;
|
---|
| 68 | }
|
---|
| 69 |
|
---|
| 70 | if (isRegExp(value)) {
|
---|
| 71 | const pattern = value.source;
|
---|
| 72 | const flags = value.toString().match(/\/([a-z]+|)$/)[1];
|
---|
| 73 | return (0, _generated.regExpLiteral)(pattern, flags);
|
---|
| 74 | }
|
---|
| 75 |
|
---|
| 76 | if (Array.isArray(value)) {
|
---|
| 77 | return (0, _generated.arrayExpression)(value.map(valueToNode));
|
---|
| 78 | }
|
---|
| 79 |
|
---|
| 80 | if (isPlainObject(value)) {
|
---|
| 81 | const props = [];
|
---|
| 82 |
|
---|
| 83 | for (const key of Object.keys(value)) {
|
---|
| 84 | let nodeKey;
|
---|
| 85 |
|
---|
| 86 | if ((0, _isValidIdentifier.default)(key)) {
|
---|
| 87 | nodeKey = (0, _generated.identifier)(key);
|
---|
| 88 | } else {
|
---|
| 89 | nodeKey = (0, _generated.stringLiteral)(key);
|
---|
| 90 | }
|
---|
| 91 |
|
---|
| 92 | props.push((0, _generated.objectProperty)(nodeKey, valueToNode(value[key])));
|
---|
| 93 | }
|
---|
| 94 |
|
---|
| 95 | return (0, _generated.objectExpression)(props);
|
---|
| 96 | }
|
---|
| 97 |
|
---|
| 98 | throw new Error("don't know how to turn this value into a node");
|
---|
| 99 | } |
---|