UNPKG

4.19 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.getObjKey = exports.convertAstExpressionToVariable = exports.convertSourceStringToAstExpression = exports.convertArrayToAstExpression = exports.generateMinimalEscapeCode = exports.convertObjectToAstExpression = void 0;
4const template_1 = require("@babel/template");
5const t = require("@babel/types");
6const better_babel_generator_1 = require("better-babel-generator");
7const babylon_1 = require("../config/babylon");
8function 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}
33exports.convertObjectToAstExpression = convertObjectToAstExpression;
34// 最低限度的转义: https://github.com/mathiasbynens/jsesc#minimal
35function generateMinimalEscapeCode(ast) {
36 return (0, better_babel_generator_1.default)(ast, {
37 jsescOption: {
38 minimal: true
39 }
40 }).code;
41}
42exports.generateMinimalEscapeCode = generateMinimalEscapeCode;
43function 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}
63exports.convertArrayToAstExpression = convertArrayToAstExpression;
64function convertSourceStringToAstExpression(str, opts = {}) {
65 return (0, template_1.default)(str, Object.assign({}, babylon_1.default, opts))();
66}
67exports.convertSourceStringToAstExpression = convertSourceStringToAstExpression;
68function 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}
98exports.convertAstExpressionToVariable = convertAstExpressionToVariable;
99const getObjKey = node => {
100 if (t.isIdentifier(node)) {
101 return node.name;
102 }
103 else {
104 return node.value;
105 }
106};
107exports.getObjKey = getObjKey;
108//# sourceMappingURL=astConvert.js.map
\No newline at end of file