1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.getObjKey = exports.convertAstExpressionToVariable = exports.convertSourceStringToAstExpression = exports.convertArrayToAstExpression = exports.generateMinimalEscapeCode = exports.convertObjectToAstExpression = void 0;
|
4 | const template_1 = require("@babel/template");
|
5 | const t = require("@babel/types");
|
6 | const better_babel_generator_1 = require("better-babel-generator");
|
7 | const babylon_1 = require("../config/babylon");
|
8 | function convertObjectToAstExpression(obj) {
|
9 | const objArr = Object.keys(obj).map(key => {
|
10 | const value = obj[key];
|
11 | if (typeof value === 'string') {
|
12 | return t.objectProperty(t.stringLiteral(key), t.stringLiteral(value));
|
13 | }
|
14 | if (typeof value === 'number') {
|
15 | return t.objectProperty(t.stringLiteral(key), t.numericLiteral(value));
|
16 | }
|
17 | if (typeof value === 'boolean') {
|
18 | return t.objectProperty(t.stringLiteral(key), t.booleanLiteral(value));
|
19 | }
|
20 | if (Array.isArray(value)) {
|
21 | return t.objectProperty(t.stringLiteral(key), t.arrayExpression(convertArrayToAstExpression(value)));
|
22 | }
|
23 | if (value === null) {
|
24 | return t.objectProperty(t.stringLiteral(key), t.nullLiteral());
|
25 | }
|
26 | if (typeof value === 'object') {
|
27 | return t.objectProperty(t.stringLiteral(key), t.objectExpression(convertObjectToAstExpression(value)));
|
28 | }
|
29 | return t.objectProperty(t.stringLiteral(key), t.nullLiteral());
|
30 | });
|
31 | return objArr;
|
32 | }
|
33 | exports.convertObjectToAstExpression = convertObjectToAstExpression;
|
34 |
|
35 | function generateMinimalEscapeCode(ast) {
|
36 | return (0, better_babel_generator_1.default)(ast, {
|
37 | jsescOption: {
|
38 | minimal: true
|
39 | }
|
40 | }).code;
|
41 | }
|
42 | exports.generateMinimalEscapeCode = generateMinimalEscapeCode;
|
43 | function convertArrayToAstExpression(arr) {
|
44 | return arr.map(value => {
|
45 | if (typeof value === 'string') {
|
46 | return t.stringLiteral(value);
|
47 | }
|
48 | if (typeof value === 'number') {
|
49 | return t.numericLiteral(value);
|
50 | }
|
51 | if (typeof value === 'boolean') {
|
52 | return t.booleanLiteral(value);
|
53 | }
|
54 | if (Array.isArray(value)) {
|
55 | return convertArrayToAstExpression(value);
|
56 | }
|
57 | if (typeof value === 'object') {
|
58 | return t.objectExpression(convertObjectToAstExpression(value));
|
59 | }
|
60 | return t.nullLiteral();
|
61 | });
|
62 | }
|
63 | exports.convertArrayToAstExpression = convertArrayToAstExpression;
|
64 | function convertSourceStringToAstExpression(str, opts = {}) {
|
65 | return (0, template_1.default)(str, Object.assign({}, babylon_1.default, opts))();
|
66 | }
|
67 | exports.convertSourceStringToAstExpression = convertSourceStringToAstExpression;
|
68 | function convertAstExpressionToVariable(node) {
|
69 | if (t.isObjectExpression(node)) {
|
70 | const obj = {};
|
71 | const properties = node.properties;
|
72 | properties.forEach(property => {
|
73 | if (property.type === 'ObjectProperty' || property.type === 'ObjectMethod') {
|
74 | const key = convertAstExpressionToVariable(property.key);
|
75 | const value = convertAstExpressionToVariable(property.value);
|
76 | obj[key] = value;
|
77 | }
|
78 | });
|
79 | return obj;
|
80 | }
|
81 | else if (t.isArrayExpression(node)) {
|
82 | return node.elements.map(convertAstExpressionToVariable);
|
83 | }
|
84 | else if (t.isLiteral(node)) {
|
85 | return node.value;
|
86 | }
|
87 | else if (t.isIdentifier(node) || t.isJSXIdentifier(node)) {
|
88 | const name = node.name;
|
89 | return name === 'undefined' ? undefined : name;
|
90 | }
|
91 | else if (t.isJSXExpressionContainer(node)) {
|
92 | return convertAstExpressionToVariable(node.expression);
|
93 | }
|
94 | else {
|
95 | return undefined;
|
96 | }
|
97 | }
|
98 | exports.convertAstExpressionToVariable = convertAstExpressionToVariable;
|
99 | const getObjKey = node => {
|
100 | if (t.isIdentifier(node)) {
|
101 | return node.name;
|
102 | }
|
103 | else {
|
104 | return node.value;
|
105 | }
|
106 | };
|
107 | exports.getObjKey = getObjKey;
|
108 |
|
\ | No newline at end of file |