source: trip-planner-front/node_modules/@babel/types/lib/converters/valueToNode.js@ 59329aa

Last change on this file since 59329aa was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 2.4 KB
Line 
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _isValidIdentifier = require("../validators/isValidIdentifier");
9
10var _generated = require("../builders/generated");
11
12var _default = valueToNode;
13exports.default = _default;
14const objectToString = Function.call.bind(Object.prototype.toString);
15
16function isRegExp(value) {
17 return objectToString(value) === "[object RegExp]";
18}
19
20function 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
29function 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}
Note: See TracBrowser for help on using the repository browser.