@teleporthq/teleport-plugin-common 0.41.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__tests__/builders/html-builders.ts +9 -2
- package/__tests__/node-handlers/node-to-html/index.ts +2 -0
- package/__tests__/node-handlers/node-to-jsx/index.ts +1 -1
- package/__tests__/node-handlers/node-to-jsx/utils.ts +16 -3
- package/dist/cjs/builders/ast-builders.d.ts +1 -0
- package/dist/cjs/builders/ast-builders.d.ts.map +1 -1
- package/dist/cjs/builders/ast-builders.js +19 -3
- package/dist/cjs/builders/ast-builders.js.map +1 -1
- package/dist/cjs/builders/hast-builders.d.ts +1 -0
- package/dist/cjs/builders/hast-builders.d.ts.map +1 -1
- package/dist/cjs/builders/hast-builders.js +11 -1
- package/dist/cjs/builders/hast-builders.js.map +1 -1
- package/dist/cjs/builders/style-builders.d.ts +2 -2
- package/dist/cjs/builders/style-builders.d.ts.map +1 -1
- package/dist/cjs/builders/style-builders.js +39 -19
- package/dist/cjs/builders/style-builders.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/node-handlers/node-to-html/constants.d.ts.map +1 -1
- package/dist/cjs/node-handlers/node-to-html/constants.js +2 -0
- package/dist/cjs/node-handlers/node-to-html/constants.js.map +1 -1
- package/dist/cjs/node-handlers/node-to-html/index.d.ts.map +1 -1
- package/dist/cjs/node-handlers/node-to-html/index.js +53 -1
- package/dist/cjs/node-handlers/node-to-html/index.js.map +1 -1
- package/dist/cjs/node-handlers/node-to-html/types.d.ts +5 -1
- package/dist/cjs/node-handlers/node-to-html/types.d.ts.map +1 -1
- package/dist/cjs/node-handlers/node-to-html/utils.d.ts.map +1 -1
- package/dist/cjs/node-handlers/node-to-html/utils.js +48 -4
- package/dist/cjs/node-handlers/node-to-html/utils.js.map +1 -1
- package/dist/cjs/node-handlers/node-to-jsx/index.d.ts.map +1 -1
- package/dist/cjs/node-handlers/node-to-jsx/index.js +325 -44
- package/dist/cjs/node-handlers/node-to-jsx/index.js.map +1 -1
- package/dist/cjs/node-handlers/node-to-jsx/types.d.ts +5 -5
- package/dist/cjs/node-handlers/node-to-jsx/types.d.ts.map +1 -1
- package/dist/cjs/node-handlers/node-to-jsx/utils.d.ts +5 -5
- package/dist/cjs/node-handlers/node-to-jsx/utils.d.ts.map +1 -1
- package/dist/cjs/node-handlers/node-to-jsx/utils.js +79 -36
- package/dist/cjs/node-handlers/node-to-jsx/utils.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/utils/ast-utils.d.ts +16 -6
- package/dist/cjs/utils/ast-utils.d.ts.map +1 -1
- package/dist/cjs/utils/ast-utils.js +182 -40
- package/dist/cjs/utils/ast-utils.js.map +1 -1
- package/dist/cjs/utils/hast-utils.d.ts +8 -6
- package/dist/cjs/utils/hast-utils.d.ts.map +1 -1
- package/dist/cjs/utils/hast-utils.js +28 -4
- package/dist/cjs/utils/hast-utils.js.map +1 -1
- package/dist/cjs/utils/types.d.ts +3 -0
- package/dist/cjs/utils/types.d.ts.map +1 -0
- package/dist/cjs/utils/types.js +3 -0
- package/dist/cjs/utils/types.js.map +1 -0
- package/dist/esm/builders/ast-builders.d.ts +1 -0
- package/dist/esm/builders/ast-builders.d.ts.map +1 -1
- package/dist/esm/builders/ast-builders.js +18 -3
- package/dist/esm/builders/ast-builders.js.map +1 -1
- package/dist/esm/builders/hast-builders.d.ts +1 -0
- package/dist/esm/builders/hast-builders.d.ts.map +1 -1
- package/dist/esm/builders/hast-builders.js +9 -0
- package/dist/esm/builders/hast-builders.js.map +1 -1
- package/dist/esm/builders/style-builders.d.ts +2 -2
- package/dist/esm/builders/style-builders.d.ts.map +1 -1
- package/dist/esm/builders/style-builders.js +37 -18
- package/dist/esm/builders/style-builders.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node-handlers/node-to-html/constants.d.ts.map +1 -1
- package/dist/esm/node-handlers/node-to-html/constants.js +2 -0
- package/dist/esm/node-handlers/node-to-html/constants.js.map +1 -1
- package/dist/esm/node-handlers/node-to-html/index.d.ts.map +1 -1
- package/dist/esm/node-handlers/node-to-html/index.js +54 -2
- package/dist/esm/node-handlers/node-to-html/index.js.map +1 -1
- package/dist/esm/node-handlers/node-to-html/types.d.ts +5 -1
- package/dist/esm/node-handlers/node-to-html/types.d.ts.map +1 -1
- package/dist/esm/node-handlers/node-to-html/utils.d.ts.map +1 -1
- package/dist/esm/node-handlers/node-to-html/utils.js +45 -4
- package/dist/esm/node-handlers/node-to-html/utils.js.map +1 -1
- package/dist/esm/node-handlers/node-to-jsx/index.d.ts.map +1 -1
- package/dist/esm/node-handlers/node-to-jsx/index.js +326 -45
- package/dist/esm/node-handlers/node-to-jsx/index.js.map +1 -1
- package/dist/esm/node-handlers/node-to-jsx/types.d.ts +5 -5
- package/dist/esm/node-handlers/node-to-jsx/types.d.ts.map +1 -1
- package/dist/esm/node-handlers/node-to-jsx/utils.d.ts +5 -5
- package/dist/esm/node-handlers/node-to-jsx/utils.d.ts.map +1 -1
- package/dist/esm/node-handlers/node-to-jsx/utils.js +79 -36
- package/dist/esm/node-handlers/node-to-jsx/utils.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/utils/ast-utils.d.ts +16 -6
- package/dist/esm/utils/ast-utils.d.ts.map +1 -1
- package/dist/esm/utils/ast-utils.js +176 -39
- package/dist/esm/utils/ast-utils.js.map +1 -1
- package/dist/esm/utils/hast-utils.d.ts +8 -6
- package/dist/esm/utils/hast-utils.d.ts.map +1 -1
- package/dist/esm/utils/hast-utils.js +26 -3
- package/dist/esm/utils/hast-utils.js.map +1 -1
- package/dist/esm/utils/types.d.ts +3 -0
- package/dist/esm/utils/types.d.ts.map +1 -0
- package/dist/esm/utils/types.js +2 -0
- package/dist/esm/utils/types.js.map +1 -0
- package/package.json +4 -4
- package/src/builders/ast-builders.ts +36 -2
- package/src/builders/hast-builders.ts +11 -0
- package/src/builders/style-builders.ts +51 -27
- package/src/index.ts +12 -1
- package/src/node-handlers/node-to-html/constants.ts +2 -0
- package/src/node-handlers/node-to-html/index.ts +95 -5
- package/src/node-handlers/node-to-html/types.ts +6 -0
- package/src/node-handlers/node-to-html/utils.ts +60 -5
- package/src/node-handlers/node-to-jsx/index.ts +566 -62
- package/src/node-handlers/node-to-jsx/types.ts +10 -29
- package/src/node-handlers/node-to-jsx/utils.ts +106 -42
- package/src/utils/ast-utils.ts +283 -82
- package/src/utils/hast-utils.ts +37 -9
- package/src/utils/types.ts +25 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/node-handlers/node-to-html/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,eAAe,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/node-handlers/node-to-html/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,4BAA4B,CAAA;AAEnC,MAAM,WAAW,4BAA4B;IAE3C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAE5C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAA;IAC1D,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IACnD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CACtD;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,MAAM,CAAA;IAChE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACxC,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACpD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACzC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAA;IAChG,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAChD,kBAAkB,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,UAAU,CAAC,QAAQ,EAAE,UAAU,IAAI,CAC7C,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,4BAA4B,EACpC,cAAc,EAAE,kBAAkB,KAC/B,UAAU,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/node-handlers/node-to-html/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,mBAAmB,EACnB,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/node-handlers/node-to-html/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,mBAAmB,EACnB,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EAGhB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAI1E,eAAO,MAAM,eAAe,aAChB,QAAQ,eACL,MAAM,WACV,MAAM,aACJ,kBAAkB,UACrB,4BAA4B,kBACpB,kBAAkB,QAC5B,eAAe,SA6EtB,CAAA;AAED,eAAO,MAAM,WAAW,aACZ,QAAQ,eACL,MAAM,YACT,MAAM,0BACQ,yBAAyB,EAAE,UAC3C,4BAA4B,kBACpB,kBAAkB,SAiCnC,CAAA;AAED,eAAO,MAAM,0BAA0B,SAAU,mBAAmB,KAAG,MAkBtE,CAAA"}
|
|
@@ -22,10 +22,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
29
|
exports.createConditionalStatement = exports.handleEvent = exports.handleAttribute = void 0;
|
|
27
30
|
var hastUtils = __importStar(require("../../utils/hast-utils"));
|
|
28
31
|
var teleport_shared_1 = require("@teleporthq/teleport-shared");
|
|
32
|
+
var hast_builders_1 = require("../../builders/hast-builders");
|
|
33
|
+
var node_to_html_1 = __importDefault(require("../node-to-html"));
|
|
29
34
|
var handleAttribute = function (htmlNode, elementName, attrKey, attrValue, params, templateSyntax, node) {
|
|
30
35
|
var dataObject = params.dataObject;
|
|
31
36
|
var dynamicAttrKey = templateSyntax.valueBinding(attrKey, node);
|
|
@@ -61,6 +66,27 @@ var handleAttribute = function (htmlNode, elementName, attrKey, attrValue, param
|
|
|
61
66
|
hastUtils.addAttributeToNode(htmlNode, dynamicAttrKey, attrValue.content.toString());
|
|
62
67
|
}
|
|
63
68
|
break;
|
|
69
|
+
case 'element':
|
|
70
|
+
var templateNode = (0, hast_builders_1.createHTMLNode)(templateSyntax.slotTagName);
|
|
71
|
+
var templateContent = (0, node_to_html_1.default)(attrValue, params, templateSyntax);
|
|
72
|
+
if (templateSyntax.slotBinding === 'v-slot') {
|
|
73
|
+
hastUtils.addBooleanAttributeToNode(templateNode, "".concat(templateSyntax.slotBinding, ":").concat(attrKey));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
hastUtils.addBooleanAttributeToNode(templateNode, "".concat(templateSyntax.slotBinding).concat(attrKey));
|
|
77
|
+
}
|
|
78
|
+
hastUtils.addChildNode(templateNode, templateContent);
|
|
79
|
+
hastUtils.addChildNode(htmlNode, templateNode);
|
|
80
|
+
break;
|
|
81
|
+
case 'object': {
|
|
82
|
+
dataObject[attrKey] = attrValue.content;
|
|
83
|
+
hastUtils.addAttributeToNode(htmlNode, dynamicAttrKey, attrKey);
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case 'expr':
|
|
87
|
+
// TODO: Check this in the future. Not throwing an error for now
|
|
88
|
+
console.info("Expressions are not supported in HTML templates");
|
|
89
|
+
break;
|
|
64
90
|
default:
|
|
65
91
|
throw new Error("generateElementNode could not generate code for attribute of type ".concat(JSON.stringify(attrValue)));
|
|
66
92
|
}
|
|
@@ -94,11 +120,17 @@ exports.handleEvent = handleEvent;
|
|
|
94
120
|
var createConditionalStatement = function (node) {
|
|
95
121
|
var _a = node.content, childNode = _a.node, reference = _a.reference, value = _a.value, condition = _a.condition;
|
|
96
122
|
var expression = standardizeUIDLConditionalExpression(value, condition);
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
123
|
+
if (reference.type === 'dynamic') {
|
|
124
|
+
var statement = createConditional(reference.content.id, expression);
|
|
125
|
+
if (childNode.type === 'conditional') {
|
|
126
|
+
return "".concat(statement, " && ").concat((0, exports.createConditionalStatement)(childNode));
|
|
127
|
+
}
|
|
128
|
+
return statement;
|
|
129
|
+
}
|
|
130
|
+
// expression nodes are not supported in html based templates.
|
|
131
|
+
if (reference.type === 'expr') {
|
|
132
|
+
return '';
|
|
100
133
|
}
|
|
101
|
-
return statement;
|
|
102
134
|
};
|
|
103
135
|
exports.createConditionalStatement = createConditionalStatement;
|
|
104
136
|
var standardizeUIDLConditionalExpression = function (value, condition) {
|
|
@@ -116,6 +148,9 @@ var createConditional = function (conditionalKey, conditionalExpression) {
|
|
|
116
148
|
}
|
|
117
149
|
var stringConditions = conditions.map(function (_a) {
|
|
118
150
|
var operation = _a.operation, operand = _a.operand;
|
|
151
|
+
// @todo
|
|
152
|
+
// unlike jsx code generation, we are not converting the operand to binary or unary operation.
|
|
153
|
+
// Please refer to https://github.com/teleporthq/teleport-code-generators/blob/development/packages/teleport-plugin-common/src/node-handlers/node-to-jsx/utils.ts#L303-L319
|
|
119
154
|
return "(".concat(stringifyConditionalExpression(conditionalKey, operation, operand), ")");
|
|
120
155
|
});
|
|
121
156
|
var joinOperator = matchingCriteria === 'all' ? '&&' : '||';
|
|
@@ -128,6 +163,15 @@ var stringifyConditionalExpression = function (identifier, operation, value) {
|
|
|
128
163
|
if (typeof value === 'string') {
|
|
129
164
|
return "".concat(identifier, " ").concat(operation, " '").concat(value, "'");
|
|
130
165
|
}
|
|
166
|
+
if (typeof value === 'number') {
|
|
167
|
+
return "".concat(identifier, " ").concat(operation, " ").concat(value);
|
|
168
|
+
}
|
|
169
|
+
if (value.type === 'dynamic') {
|
|
170
|
+
return "".concat(identifier, " ").concat(operation, " ").concat(value.content.id);
|
|
171
|
+
}
|
|
172
|
+
if (value.type === 'expr') {
|
|
173
|
+
return "".concat(identifier, " ").concat(operation, " ").concat(value.content);
|
|
174
|
+
}
|
|
131
175
|
return "".concat(identifier, " ").concat(operation, " ").concat(value);
|
|
132
176
|
};
|
|
133
177
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/node-handlers/node-to-html/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/node-handlers/node-to-html/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAAmD;AACnD,+DAAyD;AAYzD,8DAA6D;AAC7D,iEAAiD;AAE1C,IAAM,eAAe,GAAG,UAC7B,QAAkB,EAClB,WAAmB,EACnB,OAAe,EACf,SAA6B,EAC7B,MAAoC,EACpC,cAAkC,EAClC,IAAqB;IAEb,IAAA,UAAU,GAAK,MAAM,WAAX,CAAW;IAC7B,IAAM,cAAc,GAAG,cAAc,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IACjE,QAAQ,SAAS,CAAC,IAAI,EAAE;QACtB,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ;YACX,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAC5E,MAAK;QACP,KAAK,YAAY;YACf,SAAS,CAAC,kBAAkB,CAC1B,QAAQ,EACR,OAAO,EACP,6BAAW,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CACjD,CAAA;YACD,MAAK;QACP,KAAK,KAAK;YACR,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC7E,MAAK;QACP,KAAK,QAAQ;YACX,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;gBACpC,+EAA+E;gBAC/E,0FAA0F;gBAC1F,IAAM,oBAAoB,GAAG,UAAG,WAAW,SAAG,6BAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAE,CAAA;gBAC/E,UAAU,CAAC,oBAAoB,CAAC,GAAG,SAAS,CAAC,OAAO,CAAA;gBACpD,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAA;aAC7E;iBAAM,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE;gBACjD,SAAS,CAAC,OAAO,KAAK,IAAI;oBACxB,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC;oBACxD,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAA;aACzE;iBAAM,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,EAAE;gBAChD,SAAS,CAAC,kBAAkB,CAC1B,QAAQ,EACR,OAAO,EACP,6BAAW,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CACjD,CAAA;aACF;iBAAM;gBACL,+EAA+E;gBAC/E,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;aACrF;YACD,MAAK;QAEP,KAAK,SAAS;YACZ,IAAM,YAAY,GAAG,IAAA,8BAAc,EAAC,cAAc,CAAC,WAAW,CAAC,CAAA;YAC/D,IAAM,eAAe,GAAG,IAAA,sBAAmB,EAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAA;YAE9E,IAAI,cAAc,CAAC,WAAW,KAAK,QAAQ,EAAE;gBAC3C,SAAS,CAAC,yBAAyB,CACjC,YAAY,EACZ,UAAG,cAAc,CAAC,WAAW,cAAI,OAAO,CAAE,CAC3C,CAAA;aACF;iBAAM;gBACL,SAAS,CAAC,yBAAyB,CAAC,YAAY,EAAE,UAAG,cAAc,CAAC,WAAW,SAAG,OAAO,CAAE,CAAC,CAAA;aAC7F;YAED,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;YACrD,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YAC9C,MAAK;QAEP,KAAK,QAAQ,CAAC,CAAC;YACb,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,CAAA;YACvC,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;YAC/D,MAAK;SACN;QAED,KAAK,MAAM;YACT,gEAAgE;YAChE,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;YAC/D,MAAK;QAEP;YACE,MAAM,IAAI,KAAK,CACb,4EAAqE,IAAI,CAAC,SAAS,CACjF,SAAS,CACV,CAAE,CACJ,CAAA;KACJ;AACH,CAAC,CAAA;AApFY,QAAA,eAAe,mBAoF3B;AAEM,IAAM,WAAW,GAAG,UACzB,QAAkB,EAClB,WAAmB,EACnB,QAAgB,EAChB,sBAAmD,EACnD,MAAoC,EACpC,cAAkC;IAE1B,IAAA,aAAa,GAAK,MAAM,cAAX,CAAW;IAChC,IAAM,eAAe,GAAG,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IAE7D,IAAI,sBAAsB,CAAC,MAAM,KAAK,CAAC,EAAE;QACvC,IAAM,SAAS,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAA;QAE3C,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,IAAI,SAAS,CAAC,KAAK,EAAE;YACpD,IAAM,YAAY,GAAG,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAClE,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,CAAC,CAAA;SACtE;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE;YACpC,SAAS,CAAC,kBAAkB,CAC1B,QAAQ,EACR,eAAe,EACf,SAAS,CAAC,QAAQ,KAAK,SAAS;gBAC9B,CAAC,CAAC,UAAG,SAAS,CAAC,QAAQ,iBAAO,SAAS,CAAC,QAAQ,CAAE;gBAClD,CAAC,CAAC,UAAG,SAAS,CAAC,QAAQ,gBAAM,SAAS,CAAC,QAAQ,CAAE,CACpD,CAAA;SACF;KACF;SAAM;QACL,IAAM,UAAU,GAAG,gBAAS,6BAAW,CAAC,wBAAwB,CAC9D,WAAW,CACZ,SAAG,6BAAW,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAE,CAAA;QACpD,IAAM,eAAe,GAAG,cAAc,CAAC,wBAAwB;YAC7D,CAAC,CAAC,cAAc,CAAC,wBAAwB,CAAC,UAAU,CAAC;YACrD,CAAC,CAAC,UAAU,CAAA;QAEd,aAAa,CAAC,UAAU,CAAC,GAAG,sBAAsB,CAAA;QAClD,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,CAAC,CAAA;KACzE;AACH,CAAC,CAAA;AAvCY,QAAA,WAAW,eAuCvB;AAEM,IAAM,0BAA0B,GAAG,UAAC,IAAyB;IAC5D,IAAA,KAAmD,IAAI,CAAC,OAAO,EAAvD,SAAS,UAAA,EAAE,SAAS,eAAA,EAAE,KAAK,WAAA,EAAE,SAAS,eAAiB,CAAA;IAErE,IAAM,UAAU,GAAG,oCAAoC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACzE,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE;QAChC,IAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QAErE,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE;YACpC,OAAO,UAAG,SAAS,iBAAO,IAAA,kCAA0B,EAAC,SAAS,CAAC,CAAE,CAAA;SAClE;QAED,OAAO,SAAS,CAAA;KACjB;IAED,8DAA8D;IAC9D,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE;QAC7B,OAAO,EAAE,CAAA;KACV;AACH,CAAC,CAAA;AAlBY,QAAA,0BAA0B,8BAkBtC;AAED,IAAM,oCAAoC,GAAG,UAC3C,KAAgC,EAChC,SAAoC;IAEpC,IAAM,qBAAqB,GACzB,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;QACxD,CAAC,CAAC,SAAS,CAAA;IACf,OAAO,qBAAqB,CAAA;AAC9B,CAAC,CAAA;AAED,IAAM,iBAAiB,GAAG,UACxB,cAAsB,EACtB,qBAAgD;IAExC,IAAA,gBAAgB,GAAiB,qBAAqB,iBAAtC,EAAE,UAAU,GAAK,qBAAqB,WAA1B,CAA0B;IAC9D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAC3B,wEAAwE;QAClE,IAAA,KAAyB,UAAU,CAAC,CAAC,CAAC,EAApC,SAAS,eAAA,EAAE,OAAO,aAAkB,CAAA;QAC5C,OAAO,8BAA8B,CAAC,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;KAC1E;IAED,IAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,UAAC,EAAsB;YAApB,SAAS,eAAA,EAAE,OAAO,aAAA;QAC3D,QAAQ;QACR,8FAA8F;QAC9F,2KAA2K;QAC3K,OAAO,WAAI,8BAA8B,CAAC,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC,MAAG,CAAA;IAClF,CAAC,CAAC,CAAA;IAEF,IAAM,YAAY,GAAG,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7D,OAAO,gBAAgB,CAAC,IAAI,CAAC,WAAI,YAAY,MAAG,CAAC,CAAA;AACnD,CAAC,CAAA;AAED,IAAM,8BAA8B,GAAG,UACrC,UAAkB,EAClB,SAAiB,EACjB,KAA6E;IAE7E,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;QAC9B,OAAO,UAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAG,UAAU,CAAE,CAAA;KAC1C;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,UAAG,UAAU,cAAI,SAAS,eAAK,KAAK,MAAG,CAAA;KAC/C;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,UAAG,UAAU,cAAI,SAAS,cAAI,KAAK,CAAE,CAAA;KAC7C;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;QAC5B,OAAO,UAAG,UAAU,cAAI,SAAS,cAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAE,CAAA;KACxD;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;QACzB,OAAO,UAAG,UAAU,cAAI,SAAS,cAAI,KAAK,CAAC,OAAO,CAAE,CAAA;KACrD;IAED,OAAO,UAAG,UAAU,cAAI,SAAS,cAAI,KAAK,CAAE,CAAA;AAC9C,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/node-handlers/node-to-jsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/node-handlers/node-to-jsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EACL,eAAe,EAehB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAA+D,SAAS,EAAE,MAAM,SAAS,CAAA;AA2GhG,QAAA,MAAM,mBAAmB,EAAE,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,UAAU,CAgGrE,CAAA;AAED,eAAe,mBAAmB,CAAA"}
|
|
@@ -33,6 +33,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
33
33
|
__setModuleDefault(result, mod);
|
|
34
34
|
return result;
|
|
35
35
|
};
|
|
36
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
37
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
38
|
+
if (ar || !(i in from)) {
|
|
39
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
40
|
+
ar[i] = from[i];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
44
|
+
};
|
|
36
45
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
46
|
var types = __importStar(require("@babel/types"));
|
|
38
47
|
var teleport_shared_1 = require("@teleporthq/teleport-shared");
|
|
@@ -41,12 +50,84 @@ var ast_utils_1 = require("../../utils/ast-utils");
|
|
|
41
50
|
var ast_builders_1 = require("../../builders/ast-builders");
|
|
42
51
|
var constants_1 = require("./constants");
|
|
43
52
|
var __1 = require("../..");
|
|
53
|
+
var getElementType = function (node) {
|
|
54
|
+
if (node.type === 'element' &&
|
|
55
|
+
node.content &&
|
|
56
|
+
typeof node.content === 'object' &&
|
|
57
|
+
'elementType' in node.content) {
|
|
58
|
+
return node.content.elementType;
|
|
59
|
+
}
|
|
60
|
+
if ((node.type === 'data-source-list' || node.type === 'data-source-item') && node.content) {
|
|
61
|
+
return node.content.elementType || 'DataProvider';
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
};
|
|
65
|
+
var getClassName = function (node) {
|
|
66
|
+
if (node.type === 'element' &&
|
|
67
|
+
node.content &&
|
|
68
|
+
typeof node.content === 'object' &&
|
|
69
|
+
'key' in node.content) {
|
|
70
|
+
return node.content.key || null;
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
};
|
|
74
|
+
var reorderChildrenForSearch = function (children) {
|
|
75
|
+
var searchNodes = [];
|
|
76
|
+
var dataProviderNodes = [];
|
|
77
|
+
var paginationNodes = [];
|
|
78
|
+
var otherNodes = [];
|
|
79
|
+
children.forEach(function (child) {
|
|
80
|
+
var elementType = getElementType(child);
|
|
81
|
+
var nodeType = child.type;
|
|
82
|
+
var className = getClassName(child);
|
|
83
|
+
// Check for search nodes - use className since elementType is replaced by semanticType
|
|
84
|
+
if (className &&
|
|
85
|
+
(className.includes('data-source-search') || className.includes('search-node'))) {
|
|
86
|
+
searchNodes.push(child);
|
|
87
|
+
}
|
|
88
|
+
// Check for DataProvider nodes - these should appear SECOND
|
|
89
|
+
else if (nodeType === 'data-source-list' ||
|
|
90
|
+
nodeType === 'data-source-item' ||
|
|
91
|
+
elementType === 'DataProvider') {
|
|
92
|
+
dataProviderNodes.push(child);
|
|
93
|
+
}
|
|
94
|
+
// Check for pagination nodes - use className since elementType is replaced by semanticType
|
|
95
|
+
else if ((elementType &&
|
|
96
|
+
(elementType.includes('pagination') || elementType.includes('cms-pagination'))) ||
|
|
97
|
+
(className && (className.includes('pagination') || className.includes('cms-pagination')))) {
|
|
98
|
+
paginationNodes.push(child);
|
|
99
|
+
}
|
|
100
|
+
// Everything else goes in the middle
|
|
101
|
+
else {
|
|
102
|
+
otherNodes.push(child);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
// Only reorder if we have search or pagination nodes alongside a DataProvider
|
|
106
|
+
// This ensures we only reorder when there's an actual pagination/search group
|
|
107
|
+
// If there's no search/pagination, keep original order to preserve DataProvider positions
|
|
108
|
+
var hasSearchOrPagination = searchNodes.length > 0 || paginationNodes.length > 0;
|
|
109
|
+
var hasDataProvider = dataProviderNodes.length > 0;
|
|
110
|
+
if (hasSearchOrPagination && hasDataProvider) {
|
|
111
|
+
// Order: search nodes first, then data providers, then other nodes, then pagination last
|
|
112
|
+
// This ensures: search input -> DataProvider -> content -> pagination buttons
|
|
113
|
+
return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], searchNodes, true), dataProviderNodes, true), otherNodes, true), paginationNodes, true);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// No reordering needed - preserve original order
|
|
117
|
+
return children;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
44
120
|
var generateElementNode = function (node, params, jsxOptions) {
|
|
45
|
-
var dependencies = params.dependencies, nodesLookup = params.nodesLookup
|
|
46
|
-
var options = __assign(__assign(
|
|
47
|
-
var
|
|
121
|
+
var dependencies = params.dependencies, nodesLookup = params.nodesLookup;
|
|
122
|
+
var options = __assign(__assign({}, constants_1.DEFAULT_JSX_OPTIONS), jsxOptions);
|
|
123
|
+
var _a = node.content, elementType = _a.elementType, selfClosing = _a.selfClosing, children = _a.children, key = _a.key, attrs = _a.attrs, dependency = _a.dependency, events = _a.events;
|
|
48
124
|
var originalElementName = elementType || 'component';
|
|
49
125
|
var tagName = originalElementName;
|
|
126
|
+
// Check if this is a fragment element - normalize to Fragment before processing
|
|
127
|
+
var isFragment = tagName.toLowerCase() === 'fragment';
|
|
128
|
+
if (isFragment) {
|
|
129
|
+
tagName = 'Fragment';
|
|
130
|
+
}
|
|
50
131
|
if (dependency) {
|
|
51
132
|
if (options.dependencyHandling === 'import' ||
|
|
52
133
|
(options.dependencyHandling === 'ignore' && (dependency === null || dependency === void 0 ? void 0 : dependency.type) === 'package')) {
|
|
@@ -65,40 +146,25 @@ var generateElementNode = function (node, params, jsxOptions) {
|
|
|
65
146
|
params.windowImports[dependency.path] = dynamicWindowImport;
|
|
66
147
|
}
|
|
67
148
|
}
|
|
149
|
+
else if (isFragment) {
|
|
150
|
+
// If no dependency was provided but this is a fragment, add Fragment dependency
|
|
151
|
+
if (options.dependencyHandling === 'import') {
|
|
152
|
+
dependencies.Fragment = {
|
|
153
|
+
type: 'package',
|
|
154
|
+
path: 'react',
|
|
155
|
+
version: 'latest',
|
|
156
|
+
meta: {
|
|
157
|
+
namedImport: true,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
68
162
|
var elementName = dependency && dependency.type === 'local' && options.customElementTag
|
|
69
163
|
? options.customElementTag(tagName)
|
|
70
164
|
: tagName;
|
|
71
165
|
var elementTag = selfClosing ? (0, ast_builders_1.createSelfClosingJSXTag)(elementName) : (0, ast_builders_1.createJSXTag)(elementName);
|
|
72
166
|
if (attrs) {
|
|
73
|
-
|
|
74
|
-
var attributeValue = attrs[attrKey];
|
|
75
|
-
switch (attributeValue.type) {
|
|
76
|
-
case 'dynamic':
|
|
77
|
-
var referenceType = attributeValue.content.referenceType;
|
|
78
|
-
switch (referenceType) {
|
|
79
|
-
default:
|
|
80
|
-
var prefix = options.dynamicReferencePrefixMap[referenceType];
|
|
81
|
-
(0, ast_utils_1.addDynamicAttributeToJSXTag)(elementTag, attrKey, attributeValue.content.id, prefix);
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
84
|
-
break;
|
|
85
|
-
case 'import':
|
|
86
|
-
(0, ast_utils_1.addDynamicAttributeToJSXTag)(elementTag, attrKey, attributeValue.content.id);
|
|
87
|
-
break;
|
|
88
|
-
case 'raw':
|
|
89
|
-
(0, ast_utils_1.addRawAttributeToJSXTag)(elementTag, attrKey, attributeValue);
|
|
90
|
-
break;
|
|
91
|
-
case 'comp-style':
|
|
92
|
-
case 'static':
|
|
93
|
-
(0, ast_utils_1.addAttributeToJSXTag)(elementTag, attrKey, attributeValue.content);
|
|
94
|
-
break;
|
|
95
|
-
case 'expr':
|
|
96
|
-
(0, ast_utils_1.addDynamicExpressionAttributeToJSXTag)(elementTag, attributeValue, attrKey);
|
|
97
|
-
break;
|
|
98
|
-
default:
|
|
99
|
-
throw new Error("generateElementNode could not generate code for attribute of type ".concat(JSON.stringify(attributeValue)));
|
|
100
|
-
}
|
|
101
|
-
});
|
|
167
|
+
addAttributesToJSXTag(attrs, elementTag, options, params);
|
|
102
168
|
}
|
|
103
169
|
if (events) {
|
|
104
170
|
Object.keys(events).forEach(function (eventKey) {
|
|
@@ -106,7 +172,9 @@ var generateElementNode = function (node, params, jsxOptions) {
|
|
|
106
172
|
});
|
|
107
173
|
}
|
|
108
174
|
if (!selfClosing && children) {
|
|
109
|
-
children
|
|
175
|
+
// Reorder children to ensure search nodes appear before DataProvider nodes
|
|
176
|
+
var reorderedChildren = reorderChildrenForSearch(children);
|
|
177
|
+
reorderedChildren.forEach(function (child) {
|
|
110
178
|
var childTags = generateNode(child, params, options);
|
|
111
179
|
childTags.forEach(function (childTag) {
|
|
112
180
|
if (typeof childTag === 'string') {
|
|
@@ -125,6 +193,52 @@ var generateElementNode = function (node, params, jsxOptions) {
|
|
|
125
193
|
return elementTag;
|
|
126
194
|
};
|
|
127
195
|
exports.default = generateElementNode;
|
|
196
|
+
var addAttributesToJSXTag = function (attrs, elementTag, options, params) {
|
|
197
|
+
Object.keys(attrs !== null && attrs !== void 0 ? attrs : {}).forEach(function (attrKey) {
|
|
198
|
+
var attributeValue = attrs[attrKey];
|
|
199
|
+
if (!attributeValue.type) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
switch (attributeValue.type) {
|
|
203
|
+
case 'dynamic':
|
|
204
|
+
var referenceType = attributeValue.content.referenceType;
|
|
205
|
+
switch (referenceType) {
|
|
206
|
+
default:
|
|
207
|
+
var prefix = options.dynamicReferencePrefixMap[referenceType];
|
|
208
|
+
(0, ast_utils_1.addDynamicAttributeToJSXTag)(elementTag, attrKey, attributeValue.content.id, prefix);
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
break;
|
|
212
|
+
case 'import':
|
|
213
|
+
(0, ast_utils_1.addDynamicAttributeToJSXTag)(elementTag, attrKey, attributeValue.content.id);
|
|
214
|
+
break;
|
|
215
|
+
case 'raw':
|
|
216
|
+
(0, ast_utils_1.addRawAttributeToJSXTag)(elementTag, attrKey, attributeValue);
|
|
217
|
+
break;
|
|
218
|
+
case 'comp-style':
|
|
219
|
+
case 'static':
|
|
220
|
+
(0, ast_utils_1.addAttributeToJSXTag)(elementTag, attrKey, attributeValue.content);
|
|
221
|
+
break;
|
|
222
|
+
case 'expr':
|
|
223
|
+
(0, ast_utils_1.addDynamicExpressionAttributeToJSXTag)(elementTag, attributeValue, attrKey);
|
|
224
|
+
break;
|
|
225
|
+
case 'element':
|
|
226
|
+
(0, ast_utils_1.addAttributeToJSXTag)(elementTag, attrKey, generateElementNode(attributeValue, params, options));
|
|
227
|
+
break;
|
|
228
|
+
case 'object': {
|
|
229
|
+
var content = attributeValue.content;
|
|
230
|
+
if (typeof content !== 'object') {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
var expression = (0, ast_utils_1.objectToObjectExpression)(content);
|
|
234
|
+
elementTag.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier(attrKey), types.jsxExpressionContainer(expression)));
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
default:
|
|
238
|
+
throw new Error("generateElementNode could not generate code for attribute of type ".concat(JSON.stringify(attributeValue)));
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
};
|
|
128
242
|
var generateNode = function (node, params, options) {
|
|
129
243
|
switch (node.type) {
|
|
130
244
|
case 'expr':
|
|
@@ -137,25 +251,80 @@ var generateNode = function (node, params, options) {
|
|
|
137
251
|
];
|
|
138
252
|
case 'inject':
|
|
139
253
|
if (node === null || node === void 0 ? void 0 : node.dependency) {
|
|
140
|
-
|
|
141
|
-
params.dependencies['Script'] = node.dependency;
|
|
254
|
+
params.dependencies.Script = node.dependency;
|
|
142
255
|
}
|
|
143
256
|
return [node.content.toString()];
|
|
144
257
|
case 'static':
|
|
145
258
|
return [teleport_shared_1.StringUtils.encode(node.content.toString())];
|
|
146
259
|
case 'dynamic':
|
|
147
|
-
|
|
260
|
+
switch (node.content.referenceType) {
|
|
261
|
+
case 'prop': {
|
|
262
|
+
// If the dynamic node is a prop and has a default value of type UIDLElementNode,
|
|
263
|
+
// we should use it with a logical expression.
|
|
264
|
+
var prop = params.propDefinitions[node.content.id];
|
|
265
|
+
if ((prop === null || prop === void 0 ? void 0 : prop.type) === 'element' && prop.defaultValue) {
|
|
266
|
+
var prefix = options.dynamicReferencePrefixMap[node.content.referenceType] || '';
|
|
267
|
+
var propDefault = prop.defaultValue;
|
|
268
|
+
var jsxNode = params.nodesLookup[propDefault.content.key];
|
|
269
|
+
if (jsxNode === undefined) {
|
|
270
|
+
throw Error("Prop ".concat(node.content.id, " is of type element \n\n The JSXNode of the prop-").concat(node.content.id, " is missing from the nodesLookup"));
|
|
271
|
+
}
|
|
272
|
+
return [
|
|
273
|
+
types.logicalExpression('??', prefix === ''
|
|
274
|
+
? types.identifier(node.content.id)
|
|
275
|
+
: types.memberExpression(types.identifier(prefix), types.identifier(node.content.id)), jsxNode),
|
|
276
|
+
];
|
|
277
|
+
}
|
|
278
|
+
return [(0, utils_1.createDynamicValueExpression)(node, options)];
|
|
279
|
+
}
|
|
280
|
+
case 'locale': {
|
|
281
|
+
// Locale is not handled the same in all frameworks.
|
|
282
|
+
// So, we need to handle it differently using individual plugins for each framework.
|
|
283
|
+
var emptyExpression = types.jsxEmptyExpression();
|
|
284
|
+
emptyExpression.innerComments = [
|
|
285
|
+
{
|
|
286
|
+
type: 'CommentBlock',
|
|
287
|
+
value: "locale-".concat(node.content.id),
|
|
288
|
+
},
|
|
289
|
+
];
|
|
290
|
+
var expression = types.jsxExpressionContainer(emptyExpression);
|
|
291
|
+
var jsxTag = (0, ast_builders_1.createJSXTag)('span');
|
|
292
|
+
(0, ast_utils_1.addChildJSXTag)(jsxTag, expression);
|
|
293
|
+
params.localeReferences.push(jsxTag);
|
|
294
|
+
return [jsxTag];
|
|
295
|
+
}
|
|
296
|
+
case 'global': {
|
|
297
|
+
params.globalReferences.push(node.content.id);
|
|
298
|
+
return [(0, utils_1.createDynamicValueExpression)(node, options)];
|
|
299
|
+
}
|
|
300
|
+
default:
|
|
301
|
+
return [(0, utils_1.createDynamicValueExpression)(node, options)];
|
|
302
|
+
}
|
|
148
303
|
case 'cms-item':
|
|
149
304
|
case 'cms-list':
|
|
150
305
|
return generateCMSNode(node, params, options);
|
|
306
|
+
case 'cms-list-repeater':
|
|
307
|
+
return generateCMSListRepeaterNode(node, params, options);
|
|
308
|
+
case 'cms-mixed-type':
|
|
309
|
+
return generateCMSMixedTypeNode(node, params, options);
|
|
310
|
+
case 'data-source-item':
|
|
311
|
+
case 'data-source-list':
|
|
312
|
+
return generateDataSourceNode(node, params, options);
|
|
151
313
|
case 'element':
|
|
314
|
+
// Check if this element node is wrapping a data-source node
|
|
315
|
+
if (node.content &&
|
|
316
|
+
typeof node.content === 'object' &&
|
|
317
|
+
'type' in node.content &&
|
|
318
|
+
(node.content.type === 'data-source-item' || node.content.type === 'data-source-list')) {
|
|
319
|
+
// Treat it as a data-source node
|
|
320
|
+
// tslint:disable-next-line:no-any
|
|
321
|
+
return generateDataSourceNode(node.content, params, options);
|
|
322
|
+
}
|
|
152
323
|
return [generateElementNode(node, params, options)];
|
|
153
324
|
case 'repeat':
|
|
154
325
|
return generateRepeatNode(node, params, options);
|
|
155
326
|
case 'conditional':
|
|
156
327
|
return generateConditionalNode(node, params, options);
|
|
157
|
-
case 'cms-list-repeater':
|
|
158
|
-
return generateCMSListRepeaterNode(node, params, options);
|
|
159
328
|
case 'slot':
|
|
160
329
|
if (options.slotHandling === 'native') {
|
|
161
330
|
return [generateNativeSlotNode(node, params, options)];
|
|
@@ -169,7 +338,33 @@ var generateNode = function (node, params, options) {
|
|
|
169
338
|
};
|
|
170
339
|
var generateExpressionNode = function (node) {
|
|
171
340
|
var expression = __1.ASTUtils.getExpressionFromUIDLExpressionNode(node);
|
|
172
|
-
|
|
341
|
+
// Wrap expression to safely handle objects/arrays: (typeof val === 'object' && val !== null) ? JSON.stringify(val) : val
|
|
342
|
+
var safeExpression = types.conditionalExpression(types.logicalExpression('&&', types.binaryExpression('===', types.unaryExpression('typeof', expression, true), types.stringLiteral('object')), types.binaryExpression('!==', expression, types.nullLiteral())), types.callExpression(types.memberExpression(types.identifier('JSON'), types.identifier('stringify')), [expression]), expression);
|
|
343
|
+
return types.jsxExpressionContainer(safeExpression);
|
|
344
|
+
};
|
|
345
|
+
var generateCMSMixedTypeNode = function (node, params, options) {
|
|
346
|
+
var _a = node.content, _b = _a.nodes, error = _b.error, fallback = _b.fallback, elementType = _a.elementType, renderPropIdentifier = _a.renderPropIdentifier, _c = _a.mappings, mappings = _c === void 0 ? {} : _c, attrs = _a.attrs, dependency = _a.dependency;
|
|
347
|
+
var jsxTag = teleport_shared_1.StringUtils.dashCaseToUpperCamelCase(elementType);
|
|
348
|
+
var cmsMixedNode = __1.ASTBuilders.createJSXTag(jsxTag, [], true);
|
|
349
|
+
var mappingsObject = [];
|
|
350
|
+
if (attrs) {
|
|
351
|
+
addAttributesToJSXTag(attrs, cmsMixedNode, options, params);
|
|
352
|
+
}
|
|
353
|
+
if (dependency) {
|
|
354
|
+
params.dependencies[elementType] = dependency;
|
|
355
|
+
}
|
|
356
|
+
Object.keys(mappings).forEach(function (key) {
|
|
357
|
+
var element = generateElementNode(mappings[key], params, options);
|
|
358
|
+
mappingsObject.push(types.objectProperty(types.identifier("\"".concat(key, "\"")), types.arrowFunctionExpression([types.identifier(renderPropIdentifier)], element)));
|
|
359
|
+
});
|
|
360
|
+
cmsMixedNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('mappingConfiguration'), types.jsxExpressionContainer(types.objectExpression(mappingsObject))));
|
|
361
|
+
if (fallback) {
|
|
362
|
+
cmsMixedNode.openingElement.attributes.push(types.jSXAttribute(types.jsxIdentifier('renderDefault'), types.jsxExpressionContainer(types.arrowFunctionExpression([types.identifier(renderPropIdentifier)], generateElementNode(fallback, params, options)))));
|
|
363
|
+
}
|
|
364
|
+
if (error) {
|
|
365
|
+
cmsMixedNode.openingElement.attributes.push(types.jSXAttribute(types.jsxIdentifier('renderError'), types.jsxExpressionContainer(types.arrowFunctionExpression([types.identifier(renderPropIdentifier)], generateElementNode(error, params, options)))));
|
|
366
|
+
}
|
|
367
|
+
return [cmsMixedNode];
|
|
173
368
|
};
|
|
174
369
|
var generateCMSNode = function (node, params, options) {
|
|
175
370
|
var _a = node.content, initialData = _a.initialData, key = _a.key, renderPropIdentifier = _a.renderPropIdentifier, _b = _a.resource, _c = _b === void 0 ? {} : _b, resourceParams = _c.params, router = _a.router, elementType = _a.elementType, dependency = _a.dependency;
|
|
@@ -235,6 +430,72 @@ var generateCMSNode = function (node, params, options) {
|
|
|
235
430
|
params.nodesLookup[key] = cmsNode;
|
|
236
431
|
return [cmsNode];
|
|
237
432
|
};
|
|
433
|
+
var generateDataSourceNode = function (node, params, options) {
|
|
434
|
+
var _a, _b, _c, _d;
|
|
435
|
+
var _e = node.content, renderPropIdentifier = _e.renderPropIdentifier, elementType = _e.elementType, dependency = _e.dependency, resourceDefinition = _e.resourceDefinition;
|
|
436
|
+
var key = node.content.key || "ds-".concat(resourceDefinition.dataSourceId, "-").concat(Date.now());
|
|
437
|
+
var name = node.content.name || renderPropIdentifier;
|
|
438
|
+
// tslint:disable-next-line:no-any
|
|
439
|
+
var children = node.content.children && node.content.children.length > 0
|
|
440
|
+
? node.content.children
|
|
441
|
+
: ((_a = node.content.nodes) === null || _a === void 0 ? void 0 : _a.success)
|
|
442
|
+
? [node.content.nodes.success]
|
|
443
|
+
: [];
|
|
444
|
+
var jsxTag = teleport_shared_1.StringUtils.dashCaseToUpperCamelCase(elementType);
|
|
445
|
+
if (dependency && options.dependencyHandling === 'import') {
|
|
446
|
+
params.dependencies[elementType] = dependency;
|
|
447
|
+
}
|
|
448
|
+
var dataSourceNode = __1.ASTBuilders.createJSXTag(jsxTag, [], true);
|
|
449
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('resourceDefinition'), types.jsxExpressionContainer(types.objectExpression([
|
|
450
|
+
types.objectProperty(types.stringLiteral('type'), types.stringLiteral('external-data-source')),
|
|
451
|
+
types.objectProperty(types.stringLiteral('dataSourceId'), types.stringLiteral(resourceDefinition.dataSourceId)),
|
|
452
|
+
types.objectProperty(types.stringLiteral('tableName'), types.stringLiteral(resourceDefinition.tableName)),
|
|
453
|
+
types.objectProperty(types.stringLiteral('dataSourceType'), types.stringLiteral(resourceDefinition.dataSourceType)),
|
|
454
|
+
]))));
|
|
455
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('name'), types.jsxExpressionContainer(types.stringLiteral(name))));
|
|
456
|
+
if (children && children.length > 0) {
|
|
457
|
+
var childrenNodes = children.flatMap(function (child) { return generateNode(child, params, options); });
|
|
458
|
+
var renderFunction = types.arrowFunctionExpression([types.identifier(renderPropIdentifier)], types.jsxFragment(types.jsxOpeningFragment(), types.jsxClosingFragment(), childrenNodes));
|
|
459
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('renderSuccess'), types.jsxExpressionContainer(renderFunction)));
|
|
460
|
+
}
|
|
461
|
+
// tslint:disable-next-line:no-any
|
|
462
|
+
if ((_b = node.content.nodes) === null || _b === void 0 ? void 0 : _b.loading) {
|
|
463
|
+
// tslint:disable-next-line:no-any
|
|
464
|
+
var loadingNode = generateNode(node.content.nodes.loading, params, options)[0];
|
|
465
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('renderLoading'), types.jsxExpressionContainer(types.arrowFunctionExpression([], loadingNode))));
|
|
466
|
+
}
|
|
467
|
+
// tslint:disable-next-line:no-any
|
|
468
|
+
if ((_c = node.content.nodes) === null || _c === void 0 ? void 0 : _c.error) {
|
|
469
|
+
// tslint:disable-next-line:no-any
|
|
470
|
+
var errorNode = generateNode(node.content.nodes.error, params, options)[0];
|
|
471
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('renderError'), types.jsxExpressionContainer(types.arrowFunctionExpression([], errorNode))));
|
|
472
|
+
}
|
|
473
|
+
// Add resource params if they exist
|
|
474
|
+
// tslint:disable-next-line:no-any
|
|
475
|
+
var resourceParams = (_d = node.content.resource) === null || _d === void 0 ? void 0 : _d.params;
|
|
476
|
+
if (resourceParams && Object.keys(resourceParams).length > 0) {
|
|
477
|
+
var nodeParams = Object.keys(resourceParams).reduce(function (acc, attrKey) {
|
|
478
|
+
var property = resourceParams[attrKey];
|
|
479
|
+
if (property.type === 'static') {
|
|
480
|
+
acc.push(types.objectProperty(types.stringLiteral(attrKey), (0, ast_utils_1.resolveObjectValue)(property)));
|
|
481
|
+
}
|
|
482
|
+
if (property.type === 'expr') {
|
|
483
|
+
var expression = __1.ASTUtils.getExpressionFromUIDLExpressionNode(property);
|
|
484
|
+
acc.push(types.objectProperty(types.stringLiteral(attrKey), expression));
|
|
485
|
+
}
|
|
486
|
+
if (property.type === 'dynamic') {
|
|
487
|
+
var refType = property.content.referenceType;
|
|
488
|
+
acc.push(types.objectProperty(types.stringLiteral(attrKey), property.content.referenceType === 'prop'
|
|
489
|
+
? types.memberExpression(types.identifier(options.dynamicReferencePrefixMap[refType]), types.identifier(property.content.id))
|
|
490
|
+
: types.identifier(property.content.id)));
|
|
491
|
+
}
|
|
492
|
+
return acc;
|
|
493
|
+
}, []);
|
|
494
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('params'), types.jsxExpressionContainer(types.objectExpression(nodeParams))));
|
|
495
|
+
}
|
|
496
|
+
params.nodesLookup[key] = dataSourceNode;
|
|
497
|
+
return [dataSourceNode];
|
|
498
|
+
};
|
|
238
499
|
var generateRepeatNode = function (node, params, options) {
|
|
239
500
|
var _a = node.content, repeatContent = _a.node, dataSource = _a.dataSource, meta = _a.meta;
|
|
240
501
|
var contentASTs = generateNode(repeatContent, params, options);
|
|
@@ -256,22 +517,42 @@ var generateRepeatNode = function (node, params, options) {
|
|
|
256
517
|
};
|
|
257
518
|
var generateConditionalNode = function (node, params, options) {
|
|
258
519
|
var _a = node.content, reference = _a.reference, value = _a.value;
|
|
259
|
-
var conditionIdentifier = (0, utils_1.createConditionIdentifier)(reference, params, options);
|
|
260
520
|
var subTrees = generateNode(node.content.node, params, options);
|
|
261
521
|
var condition = value !== undefined && value !== null
|
|
262
522
|
? { conditions: [{ operand: value, operation: '===' }] }
|
|
263
523
|
: node.content.condition;
|
|
264
|
-
|
|
524
|
+
var conditionIdentifier = (0, utils_1.createConditionIdentifier)(reference, params, options);
|
|
525
|
+
var conditionalExpressions = subTrees.map(function (subTree) {
|
|
265
526
|
return (0, utils_1.createConditionalJSXExpression)(subTree, condition, conditionIdentifier);
|
|
266
527
|
});
|
|
528
|
+
return conditionalExpressions;
|
|
267
529
|
};
|
|
268
530
|
var generateCMSListRepeaterNode = function (node, params, options) {
|
|
269
|
-
var
|
|
270
|
-
|
|
271
|
-
repeaterNode.
|
|
531
|
+
var _a, _b;
|
|
532
|
+
var jsxTag = teleport_shared_1.StringUtils.dashCaseToUpperCamelCase(node.content.elementType);
|
|
533
|
+
var repeaterNode = __1.ASTBuilders.createJSXTag(jsxTag, [], true);
|
|
534
|
+
repeaterNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('items'), types.jsxExpressionContainer(types.identifier((_a = node.content.source) !== null && _a !== void 0 ? _a : 'params'))));
|
|
535
|
+
var listElement = generateNode(node.content.nodes.list, params, __assign(__assign({}, options), { localIdentifier: node.content.renderPropIdentifier }))[0];
|
|
536
|
+
// Create key as template literal: `${item?.id}${index}`
|
|
537
|
+
var keyAttribute = types.jsxAttribute(types.jsxIdentifier('key'), types.jsxExpressionContainer(types.templateLiteral([
|
|
538
|
+
types.templateElement({ raw: '', cooked: '' }, false),
|
|
539
|
+
types.templateElement({ raw: '', cooked: '' }, false),
|
|
540
|
+
types.templateElement({ raw: '', cooked: '' }, true),
|
|
541
|
+
], [
|
|
542
|
+
types.optionalMemberExpression(types.identifier(node.content.renderPropIdentifier), types.identifier('id'), false, true),
|
|
543
|
+
types.identifier('index'),
|
|
544
|
+
])));
|
|
545
|
+
listElement.openingElement.attributes.push(keyAttribute);
|
|
546
|
+
repeaterNode.openingElement.attributes.push(types.jsxAttribute(types.jSXIdentifier('renderItem'), types.jsxExpressionContainer(types.arrowFunctionExpression([types.identifier(node.content.renderPropIdentifier), types.identifier('index')], listElement))));
|
|
272
547
|
if ('empty' in node.content.nodes) {
|
|
273
548
|
repeaterNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('renderEmpty'), types.jsxExpressionContainer(types.arrowFunctionExpression([], generateNode(node.content.nodes.empty, params, options)[0]))));
|
|
274
549
|
}
|
|
550
|
+
if ('loading' in node.content.nodes) {
|
|
551
|
+
generateNode(node.content.nodes.loading, params, options);
|
|
552
|
+
}
|
|
553
|
+
if (((_b = node.content) === null || _b === void 0 ? void 0 : _b.dependency) && options.dependencyHandling === 'import') {
|
|
554
|
+
params.dependencies[jsxTag] = node.content.dependency;
|
|
555
|
+
}
|
|
275
556
|
return [repeaterNode];
|
|
276
557
|
};
|
|
277
558
|
var generatePropsSlotNode = function (node, params, options) {
|