Software zum Installieren eines Smart-Mirror Frameworks , zum Nutzen von hochschulrelevanten Informationen, auf einem Raspberry-Pi.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

valueToNode.js 2.4KB

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