@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":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as hastUtils from '../../utils/hast-utils';
|
|
2
2
|
import { StringUtils } from '@teleporthq/teleport-shared';
|
|
3
|
+
import { createHTMLNode } from '../../builders/hast-builders';
|
|
4
|
+
import generateElementNode from '../node-to-html';
|
|
3
5
|
export var handleAttribute = function (htmlNode, elementName, attrKey, attrValue, params, templateSyntax, node) {
|
|
4
6
|
var dataObject = params.dataObject;
|
|
5
7
|
var dynamicAttrKey = templateSyntax.valueBinding(attrKey, node);
|
|
@@ -35,6 +37,27 @@ export var handleAttribute = function (htmlNode, elementName, attrKey, attrValue
|
|
|
35
37
|
hastUtils.addAttributeToNode(htmlNode, dynamicAttrKey, attrValue.content.toString());
|
|
36
38
|
}
|
|
37
39
|
break;
|
|
40
|
+
case 'element':
|
|
41
|
+
var templateNode = createHTMLNode(templateSyntax.slotTagName);
|
|
42
|
+
var templateContent = generateElementNode(attrValue, params, templateSyntax);
|
|
43
|
+
if (templateSyntax.slotBinding === 'v-slot') {
|
|
44
|
+
hastUtils.addBooleanAttributeToNode(templateNode, "".concat(templateSyntax.slotBinding, ":").concat(attrKey));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
hastUtils.addBooleanAttributeToNode(templateNode, "".concat(templateSyntax.slotBinding).concat(attrKey));
|
|
48
|
+
}
|
|
49
|
+
hastUtils.addChildNode(templateNode, templateContent);
|
|
50
|
+
hastUtils.addChildNode(htmlNode, templateNode);
|
|
51
|
+
break;
|
|
52
|
+
case 'object': {
|
|
53
|
+
dataObject[attrKey] = attrValue.content;
|
|
54
|
+
hastUtils.addAttributeToNode(htmlNode, dynamicAttrKey, attrKey);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
case 'expr':
|
|
58
|
+
// TODO: Check this in the future. Not throwing an error for now
|
|
59
|
+
console.info("Expressions are not supported in HTML templates");
|
|
60
|
+
break;
|
|
38
61
|
default:
|
|
39
62
|
throw new Error("generateElementNode could not generate code for attribute of type ".concat(JSON.stringify(attrValue)));
|
|
40
63
|
}
|
|
@@ -66,11 +89,17 @@ export var handleEvent = function (htmlNode, elementName, eventKey, eventHandler
|
|
|
66
89
|
export var createConditionalStatement = function (node) {
|
|
67
90
|
var _a = node.content, childNode = _a.node, reference = _a.reference, value = _a.value, condition = _a.condition;
|
|
68
91
|
var expression = standardizeUIDLConditionalExpression(value, condition);
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
92
|
+
if (reference.type === 'dynamic') {
|
|
93
|
+
var statement = createConditional(reference.content.id, expression);
|
|
94
|
+
if (childNode.type === 'conditional') {
|
|
95
|
+
return "".concat(statement, " && ").concat(createConditionalStatement(childNode));
|
|
96
|
+
}
|
|
97
|
+
return statement;
|
|
98
|
+
}
|
|
99
|
+
// expression nodes are not supported in html based templates.
|
|
100
|
+
if (reference.type === 'expr') {
|
|
101
|
+
return '';
|
|
72
102
|
}
|
|
73
|
-
return statement;
|
|
74
103
|
};
|
|
75
104
|
var standardizeUIDLConditionalExpression = function (value, condition) {
|
|
76
105
|
var conditionalExpression = value !== null && value !== undefined
|
|
@@ -87,6 +116,9 @@ var createConditional = function (conditionalKey, conditionalExpression) {
|
|
|
87
116
|
}
|
|
88
117
|
var stringConditions = conditions.map(function (_a) {
|
|
89
118
|
var operation = _a.operation, operand = _a.operand;
|
|
119
|
+
// @todo
|
|
120
|
+
// unlike jsx code generation, we are not converting the operand to binary or unary operation.
|
|
121
|
+
// 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
|
|
90
122
|
return "(".concat(stringifyConditionalExpression(conditionalKey, operation, operand), ")");
|
|
91
123
|
});
|
|
92
124
|
var joinOperator = matchingCriteria === 'all' ? '&&' : '||';
|
|
@@ -99,6 +131,15 @@ var stringifyConditionalExpression = function (identifier, operation, value) {
|
|
|
99
131
|
if (typeof value === 'string') {
|
|
100
132
|
return "".concat(identifier, " ").concat(operation, " '").concat(value, "'");
|
|
101
133
|
}
|
|
134
|
+
if (typeof value === 'number') {
|
|
135
|
+
return "".concat(identifier, " ").concat(operation, " ").concat(value);
|
|
136
|
+
}
|
|
137
|
+
if (value.type === 'dynamic') {
|
|
138
|
+
return "".concat(identifier, " ").concat(operation, " ").concat(value.content.id);
|
|
139
|
+
}
|
|
140
|
+
if (value.type === 'expr') {
|
|
141
|
+
return "".concat(identifier, " ").concat(operation, " ").concat(value.content);
|
|
142
|
+
}
|
|
102
143
|
return "".concat(identifier, " ").concat(operation, " ").concat(value);
|
|
103
144
|
};
|
|
104
145
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/node-handlers/node-to-html/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/node-handlers/node-to-html/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -9,19 +9,100 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
9
|
};
|
|
10
10
|
return __assign.apply(this, arguments);
|
|
11
11
|
};
|
|
12
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
13
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
14
|
+
if (ar || !(i in from)) {
|
|
15
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
16
|
+
ar[i] = from[i];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
|
+
};
|
|
12
21
|
import * as types from '@babel/types';
|
|
13
22
|
import { UIDLUtils, StringUtils } from '@teleporthq/teleport-shared';
|
|
14
23
|
import { addEventHandlerToTag, createConditionIdentifier, createDynamicValueExpression, createConditionalJSXExpression, getRepeatSourceIdentifier, } from './utils';
|
|
15
|
-
import { addChildJSXText, addChildJSXTag, addAttributeToJSXTag, addDynamicAttributeToJSXTag, addRawAttributeToJSXTag, generateDynamicWindowImport, addDynamicExpressionAttributeToJSXTag, resolveObjectValue, } from '../../utils/ast-utils';
|
|
24
|
+
import { addChildJSXText, addChildJSXTag, addAttributeToJSXTag, addDynamicAttributeToJSXTag, addRawAttributeToJSXTag, generateDynamicWindowImport, addDynamicExpressionAttributeToJSXTag, resolveObjectValue, objectToObjectExpression, } from '../../utils/ast-utils';
|
|
16
25
|
import { createJSXTag, createSelfClosingJSXTag } from '../../builders/ast-builders';
|
|
17
26
|
import { DEFAULT_JSX_OPTIONS } from './constants';
|
|
18
27
|
import { ASTBuilders, ASTUtils } from '../..';
|
|
28
|
+
var getElementType = function (node) {
|
|
29
|
+
if (node.type === 'element' &&
|
|
30
|
+
node.content &&
|
|
31
|
+
typeof node.content === 'object' &&
|
|
32
|
+
'elementType' in node.content) {
|
|
33
|
+
return node.content.elementType;
|
|
34
|
+
}
|
|
35
|
+
if ((node.type === 'data-source-list' || node.type === 'data-source-item') && node.content) {
|
|
36
|
+
return node.content.elementType || 'DataProvider';
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
};
|
|
40
|
+
var getClassName = function (node) {
|
|
41
|
+
if (node.type === 'element' &&
|
|
42
|
+
node.content &&
|
|
43
|
+
typeof node.content === 'object' &&
|
|
44
|
+
'key' in node.content) {
|
|
45
|
+
return node.content.key || null;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
};
|
|
49
|
+
var reorderChildrenForSearch = function (children) {
|
|
50
|
+
var searchNodes = [];
|
|
51
|
+
var dataProviderNodes = [];
|
|
52
|
+
var paginationNodes = [];
|
|
53
|
+
var otherNodes = [];
|
|
54
|
+
children.forEach(function (child) {
|
|
55
|
+
var elementType = getElementType(child);
|
|
56
|
+
var nodeType = child.type;
|
|
57
|
+
var className = getClassName(child);
|
|
58
|
+
// Check for search nodes - use className since elementType is replaced by semanticType
|
|
59
|
+
if (className &&
|
|
60
|
+
(className.includes('data-source-search') || className.includes('search-node'))) {
|
|
61
|
+
searchNodes.push(child);
|
|
62
|
+
}
|
|
63
|
+
// Check for DataProvider nodes - these should appear SECOND
|
|
64
|
+
else if (nodeType === 'data-source-list' ||
|
|
65
|
+
nodeType === 'data-source-item' ||
|
|
66
|
+
elementType === 'DataProvider') {
|
|
67
|
+
dataProviderNodes.push(child);
|
|
68
|
+
}
|
|
69
|
+
// Check for pagination nodes - use className since elementType is replaced by semanticType
|
|
70
|
+
else if ((elementType &&
|
|
71
|
+
(elementType.includes('pagination') || elementType.includes('cms-pagination'))) ||
|
|
72
|
+
(className && (className.includes('pagination') || className.includes('cms-pagination')))) {
|
|
73
|
+
paginationNodes.push(child);
|
|
74
|
+
}
|
|
75
|
+
// Everything else goes in the middle
|
|
76
|
+
else {
|
|
77
|
+
otherNodes.push(child);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// Only reorder if we have search or pagination nodes alongside a DataProvider
|
|
81
|
+
// This ensures we only reorder when there's an actual pagination/search group
|
|
82
|
+
// If there's no search/pagination, keep original order to preserve DataProvider positions
|
|
83
|
+
var hasSearchOrPagination = searchNodes.length > 0 || paginationNodes.length > 0;
|
|
84
|
+
var hasDataProvider = dataProviderNodes.length > 0;
|
|
85
|
+
if (hasSearchOrPagination && hasDataProvider) {
|
|
86
|
+
// Order: search nodes first, then data providers, then other nodes, then pagination last
|
|
87
|
+
// This ensures: search input -> DataProvider -> content -> pagination buttons
|
|
88
|
+
return __spreadArray(__spreadArray(__spreadArray(__spreadArray([], searchNodes, true), dataProviderNodes, true), otherNodes, true), paginationNodes, true);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// No reordering needed - preserve original order
|
|
92
|
+
return children;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
19
95
|
var generateElementNode = function (node, params, jsxOptions) {
|
|
20
|
-
var dependencies = params.dependencies, nodesLookup = params.nodesLookup
|
|
21
|
-
var options = __assign(__assign(
|
|
22
|
-
var
|
|
96
|
+
var dependencies = params.dependencies, nodesLookup = params.nodesLookup;
|
|
97
|
+
var options = __assign(__assign({}, DEFAULT_JSX_OPTIONS), jsxOptions);
|
|
98
|
+
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;
|
|
23
99
|
var originalElementName = elementType || 'component';
|
|
24
100
|
var tagName = originalElementName;
|
|
101
|
+
// Check if this is a fragment element - normalize to Fragment before processing
|
|
102
|
+
var isFragment = tagName.toLowerCase() === 'fragment';
|
|
103
|
+
if (isFragment) {
|
|
104
|
+
tagName = 'Fragment';
|
|
105
|
+
}
|
|
25
106
|
if (dependency) {
|
|
26
107
|
if (options.dependencyHandling === 'import' ||
|
|
27
108
|
(options.dependencyHandling === 'ignore' && (dependency === null || dependency === void 0 ? void 0 : dependency.type) === 'package')) {
|
|
@@ -40,40 +121,25 @@ var generateElementNode = function (node, params, jsxOptions) {
|
|
|
40
121
|
params.windowImports[dependency.path] = dynamicWindowImport;
|
|
41
122
|
}
|
|
42
123
|
}
|
|
124
|
+
else if (isFragment) {
|
|
125
|
+
// If no dependency was provided but this is a fragment, add Fragment dependency
|
|
126
|
+
if (options.dependencyHandling === 'import') {
|
|
127
|
+
dependencies.Fragment = {
|
|
128
|
+
type: 'package',
|
|
129
|
+
path: 'react',
|
|
130
|
+
version: 'latest',
|
|
131
|
+
meta: {
|
|
132
|
+
namedImport: true,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
43
137
|
var elementName = dependency && dependency.type === 'local' && options.customElementTag
|
|
44
138
|
? options.customElementTag(tagName)
|
|
45
139
|
: tagName;
|
|
46
140
|
var elementTag = selfClosing ? createSelfClosingJSXTag(elementName) : createJSXTag(elementName);
|
|
47
141
|
if (attrs) {
|
|
48
|
-
|
|
49
|
-
var attributeValue = attrs[attrKey];
|
|
50
|
-
switch (attributeValue.type) {
|
|
51
|
-
case 'dynamic':
|
|
52
|
-
var referenceType = attributeValue.content.referenceType;
|
|
53
|
-
switch (referenceType) {
|
|
54
|
-
default:
|
|
55
|
-
var prefix = options.dynamicReferencePrefixMap[referenceType];
|
|
56
|
-
addDynamicAttributeToJSXTag(elementTag, attrKey, attributeValue.content.id, prefix);
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
break;
|
|
60
|
-
case 'import':
|
|
61
|
-
addDynamicAttributeToJSXTag(elementTag, attrKey, attributeValue.content.id);
|
|
62
|
-
break;
|
|
63
|
-
case 'raw':
|
|
64
|
-
addRawAttributeToJSXTag(elementTag, attrKey, attributeValue);
|
|
65
|
-
break;
|
|
66
|
-
case 'comp-style':
|
|
67
|
-
case 'static':
|
|
68
|
-
addAttributeToJSXTag(elementTag, attrKey, attributeValue.content);
|
|
69
|
-
break;
|
|
70
|
-
case 'expr':
|
|
71
|
-
addDynamicExpressionAttributeToJSXTag(elementTag, attributeValue, attrKey);
|
|
72
|
-
break;
|
|
73
|
-
default:
|
|
74
|
-
throw new Error("generateElementNode could not generate code for attribute of type ".concat(JSON.stringify(attributeValue)));
|
|
75
|
-
}
|
|
76
|
-
});
|
|
142
|
+
addAttributesToJSXTag(attrs, elementTag, options, params);
|
|
77
143
|
}
|
|
78
144
|
if (events) {
|
|
79
145
|
Object.keys(events).forEach(function (eventKey) {
|
|
@@ -81,7 +147,9 @@ var generateElementNode = function (node, params, jsxOptions) {
|
|
|
81
147
|
});
|
|
82
148
|
}
|
|
83
149
|
if (!selfClosing && children) {
|
|
84
|
-
children
|
|
150
|
+
// Reorder children to ensure search nodes appear before DataProvider nodes
|
|
151
|
+
var reorderedChildren = reorderChildrenForSearch(children);
|
|
152
|
+
reorderedChildren.forEach(function (child) {
|
|
85
153
|
var childTags = generateNode(child, params, options);
|
|
86
154
|
childTags.forEach(function (childTag) {
|
|
87
155
|
if (typeof childTag === 'string') {
|
|
@@ -100,6 +168,52 @@ var generateElementNode = function (node, params, jsxOptions) {
|
|
|
100
168
|
return elementTag;
|
|
101
169
|
};
|
|
102
170
|
export default generateElementNode;
|
|
171
|
+
var addAttributesToJSXTag = function (attrs, elementTag, options, params) {
|
|
172
|
+
Object.keys(attrs !== null && attrs !== void 0 ? attrs : {}).forEach(function (attrKey) {
|
|
173
|
+
var attributeValue = attrs[attrKey];
|
|
174
|
+
if (!attributeValue.type) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
switch (attributeValue.type) {
|
|
178
|
+
case 'dynamic':
|
|
179
|
+
var referenceType = attributeValue.content.referenceType;
|
|
180
|
+
switch (referenceType) {
|
|
181
|
+
default:
|
|
182
|
+
var prefix = options.dynamicReferencePrefixMap[referenceType];
|
|
183
|
+
addDynamicAttributeToJSXTag(elementTag, attrKey, attributeValue.content.id, prefix);
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
case 'import':
|
|
188
|
+
addDynamicAttributeToJSXTag(elementTag, attrKey, attributeValue.content.id);
|
|
189
|
+
break;
|
|
190
|
+
case 'raw':
|
|
191
|
+
addRawAttributeToJSXTag(elementTag, attrKey, attributeValue);
|
|
192
|
+
break;
|
|
193
|
+
case 'comp-style':
|
|
194
|
+
case 'static':
|
|
195
|
+
addAttributeToJSXTag(elementTag, attrKey, attributeValue.content);
|
|
196
|
+
break;
|
|
197
|
+
case 'expr':
|
|
198
|
+
addDynamicExpressionAttributeToJSXTag(elementTag, attributeValue, attrKey);
|
|
199
|
+
break;
|
|
200
|
+
case 'element':
|
|
201
|
+
addAttributeToJSXTag(elementTag, attrKey, generateElementNode(attributeValue, params, options));
|
|
202
|
+
break;
|
|
203
|
+
case 'object': {
|
|
204
|
+
var content = attributeValue.content;
|
|
205
|
+
if (typeof content !== 'object') {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
var expression = objectToObjectExpression(content);
|
|
209
|
+
elementTag.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier(attrKey), types.jsxExpressionContainer(expression)));
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
default:
|
|
213
|
+
throw new Error("generateElementNode could not generate code for attribute of type ".concat(JSON.stringify(attributeValue)));
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
};
|
|
103
217
|
var generateNode = function (node, params, options) {
|
|
104
218
|
switch (node.type) {
|
|
105
219
|
case 'expr':
|
|
@@ -112,25 +226,80 @@ var generateNode = function (node, params, options) {
|
|
|
112
226
|
];
|
|
113
227
|
case 'inject':
|
|
114
228
|
if (node === null || node === void 0 ? void 0 : node.dependency) {
|
|
115
|
-
|
|
116
|
-
params.dependencies['Script'] = node.dependency;
|
|
229
|
+
params.dependencies.Script = node.dependency;
|
|
117
230
|
}
|
|
118
231
|
return [node.content.toString()];
|
|
119
232
|
case 'static':
|
|
120
233
|
return [StringUtils.encode(node.content.toString())];
|
|
121
234
|
case 'dynamic':
|
|
122
|
-
|
|
235
|
+
switch (node.content.referenceType) {
|
|
236
|
+
case 'prop': {
|
|
237
|
+
// If the dynamic node is a prop and has a default value of type UIDLElementNode,
|
|
238
|
+
// we should use it with a logical expression.
|
|
239
|
+
var prop = params.propDefinitions[node.content.id];
|
|
240
|
+
if ((prop === null || prop === void 0 ? void 0 : prop.type) === 'element' && prop.defaultValue) {
|
|
241
|
+
var prefix = options.dynamicReferencePrefixMap[node.content.referenceType] || '';
|
|
242
|
+
var propDefault = prop.defaultValue;
|
|
243
|
+
var jsxNode = params.nodesLookup[propDefault.content.key];
|
|
244
|
+
if (jsxNode === undefined) {
|
|
245
|
+
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"));
|
|
246
|
+
}
|
|
247
|
+
return [
|
|
248
|
+
types.logicalExpression('??', prefix === ''
|
|
249
|
+
? types.identifier(node.content.id)
|
|
250
|
+
: types.memberExpression(types.identifier(prefix), types.identifier(node.content.id)), jsxNode),
|
|
251
|
+
];
|
|
252
|
+
}
|
|
253
|
+
return [createDynamicValueExpression(node, options)];
|
|
254
|
+
}
|
|
255
|
+
case 'locale': {
|
|
256
|
+
// Locale is not handled the same in all frameworks.
|
|
257
|
+
// So, we need to handle it differently using individual plugins for each framework.
|
|
258
|
+
var emptyExpression = types.jsxEmptyExpression();
|
|
259
|
+
emptyExpression.innerComments = [
|
|
260
|
+
{
|
|
261
|
+
type: 'CommentBlock',
|
|
262
|
+
value: "locale-".concat(node.content.id),
|
|
263
|
+
},
|
|
264
|
+
];
|
|
265
|
+
var expression = types.jsxExpressionContainer(emptyExpression);
|
|
266
|
+
var jsxTag = createJSXTag('span');
|
|
267
|
+
addChildJSXTag(jsxTag, expression);
|
|
268
|
+
params.localeReferences.push(jsxTag);
|
|
269
|
+
return [jsxTag];
|
|
270
|
+
}
|
|
271
|
+
case 'global': {
|
|
272
|
+
params.globalReferences.push(node.content.id);
|
|
273
|
+
return [createDynamicValueExpression(node, options)];
|
|
274
|
+
}
|
|
275
|
+
default:
|
|
276
|
+
return [createDynamicValueExpression(node, options)];
|
|
277
|
+
}
|
|
123
278
|
case 'cms-item':
|
|
124
279
|
case 'cms-list':
|
|
125
280
|
return generateCMSNode(node, params, options);
|
|
281
|
+
case 'cms-list-repeater':
|
|
282
|
+
return generateCMSListRepeaterNode(node, params, options);
|
|
283
|
+
case 'cms-mixed-type':
|
|
284
|
+
return generateCMSMixedTypeNode(node, params, options);
|
|
285
|
+
case 'data-source-item':
|
|
286
|
+
case 'data-source-list':
|
|
287
|
+
return generateDataSourceNode(node, params, options);
|
|
126
288
|
case 'element':
|
|
289
|
+
// Check if this element node is wrapping a data-source node
|
|
290
|
+
if (node.content &&
|
|
291
|
+
typeof node.content === 'object' &&
|
|
292
|
+
'type' in node.content &&
|
|
293
|
+
(node.content.type === 'data-source-item' || node.content.type === 'data-source-list')) {
|
|
294
|
+
// Treat it as a data-source node
|
|
295
|
+
// tslint:disable-next-line:no-any
|
|
296
|
+
return generateDataSourceNode(node.content, params, options);
|
|
297
|
+
}
|
|
127
298
|
return [generateElementNode(node, params, options)];
|
|
128
299
|
case 'repeat':
|
|
129
300
|
return generateRepeatNode(node, params, options);
|
|
130
301
|
case 'conditional':
|
|
131
302
|
return generateConditionalNode(node, params, options);
|
|
132
|
-
case 'cms-list-repeater':
|
|
133
|
-
return generateCMSListRepeaterNode(node, params, options);
|
|
134
303
|
case 'slot':
|
|
135
304
|
if (options.slotHandling === 'native') {
|
|
136
305
|
return [generateNativeSlotNode(node, params, options)];
|
|
@@ -144,7 +313,33 @@ var generateNode = function (node, params, options) {
|
|
|
144
313
|
};
|
|
145
314
|
var generateExpressionNode = function (node) {
|
|
146
315
|
var expression = ASTUtils.getExpressionFromUIDLExpressionNode(node);
|
|
147
|
-
|
|
316
|
+
// Wrap expression to safely handle objects/arrays: (typeof val === 'object' && val !== null) ? JSON.stringify(val) : val
|
|
317
|
+
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);
|
|
318
|
+
return types.jsxExpressionContainer(safeExpression);
|
|
319
|
+
};
|
|
320
|
+
var generateCMSMixedTypeNode = function (node, params, options) {
|
|
321
|
+
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;
|
|
322
|
+
var jsxTag = StringUtils.dashCaseToUpperCamelCase(elementType);
|
|
323
|
+
var cmsMixedNode = ASTBuilders.createJSXTag(jsxTag, [], true);
|
|
324
|
+
var mappingsObject = [];
|
|
325
|
+
if (attrs) {
|
|
326
|
+
addAttributesToJSXTag(attrs, cmsMixedNode, options, params);
|
|
327
|
+
}
|
|
328
|
+
if (dependency) {
|
|
329
|
+
params.dependencies[elementType] = dependency;
|
|
330
|
+
}
|
|
331
|
+
Object.keys(mappings).forEach(function (key) {
|
|
332
|
+
var element = generateElementNode(mappings[key], params, options);
|
|
333
|
+
mappingsObject.push(types.objectProperty(types.identifier("\"".concat(key, "\"")), types.arrowFunctionExpression([types.identifier(renderPropIdentifier)], element)));
|
|
334
|
+
});
|
|
335
|
+
cmsMixedNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('mappingConfiguration'), types.jsxExpressionContainer(types.objectExpression(mappingsObject))));
|
|
336
|
+
if (fallback) {
|
|
337
|
+
cmsMixedNode.openingElement.attributes.push(types.jSXAttribute(types.jsxIdentifier('renderDefault'), types.jsxExpressionContainer(types.arrowFunctionExpression([types.identifier(renderPropIdentifier)], generateElementNode(fallback, params, options)))));
|
|
338
|
+
}
|
|
339
|
+
if (error) {
|
|
340
|
+
cmsMixedNode.openingElement.attributes.push(types.jSXAttribute(types.jsxIdentifier('renderError'), types.jsxExpressionContainer(types.arrowFunctionExpression([types.identifier(renderPropIdentifier)], generateElementNode(error, params, options)))));
|
|
341
|
+
}
|
|
342
|
+
return [cmsMixedNode];
|
|
148
343
|
};
|
|
149
344
|
var generateCMSNode = function (node, params, options) {
|
|
150
345
|
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;
|
|
@@ -210,6 +405,72 @@ var generateCMSNode = function (node, params, options) {
|
|
|
210
405
|
params.nodesLookup[key] = cmsNode;
|
|
211
406
|
return [cmsNode];
|
|
212
407
|
};
|
|
408
|
+
var generateDataSourceNode = function (node, params, options) {
|
|
409
|
+
var _a, _b, _c, _d;
|
|
410
|
+
var _e = node.content, renderPropIdentifier = _e.renderPropIdentifier, elementType = _e.elementType, dependency = _e.dependency, resourceDefinition = _e.resourceDefinition;
|
|
411
|
+
var key = node.content.key || "ds-".concat(resourceDefinition.dataSourceId, "-").concat(Date.now());
|
|
412
|
+
var name = node.content.name || renderPropIdentifier;
|
|
413
|
+
// tslint:disable-next-line:no-any
|
|
414
|
+
var children = node.content.children && node.content.children.length > 0
|
|
415
|
+
? node.content.children
|
|
416
|
+
: ((_a = node.content.nodes) === null || _a === void 0 ? void 0 : _a.success)
|
|
417
|
+
? [node.content.nodes.success]
|
|
418
|
+
: [];
|
|
419
|
+
var jsxTag = StringUtils.dashCaseToUpperCamelCase(elementType);
|
|
420
|
+
if (dependency && options.dependencyHandling === 'import') {
|
|
421
|
+
params.dependencies[elementType] = dependency;
|
|
422
|
+
}
|
|
423
|
+
var dataSourceNode = ASTBuilders.createJSXTag(jsxTag, [], true);
|
|
424
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('resourceDefinition'), types.jsxExpressionContainer(types.objectExpression([
|
|
425
|
+
types.objectProperty(types.stringLiteral('type'), types.stringLiteral('external-data-source')),
|
|
426
|
+
types.objectProperty(types.stringLiteral('dataSourceId'), types.stringLiteral(resourceDefinition.dataSourceId)),
|
|
427
|
+
types.objectProperty(types.stringLiteral('tableName'), types.stringLiteral(resourceDefinition.tableName)),
|
|
428
|
+
types.objectProperty(types.stringLiteral('dataSourceType'), types.stringLiteral(resourceDefinition.dataSourceType)),
|
|
429
|
+
]))));
|
|
430
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('name'), types.jsxExpressionContainer(types.stringLiteral(name))));
|
|
431
|
+
if (children && children.length > 0) {
|
|
432
|
+
var childrenNodes = children.flatMap(function (child) { return generateNode(child, params, options); });
|
|
433
|
+
var renderFunction = types.arrowFunctionExpression([types.identifier(renderPropIdentifier)], types.jsxFragment(types.jsxOpeningFragment(), types.jsxClosingFragment(), childrenNodes));
|
|
434
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('renderSuccess'), types.jsxExpressionContainer(renderFunction)));
|
|
435
|
+
}
|
|
436
|
+
// tslint:disable-next-line:no-any
|
|
437
|
+
if ((_b = node.content.nodes) === null || _b === void 0 ? void 0 : _b.loading) {
|
|
438
|
+
// tslint:disable-next-line:no-any
|
|
439
|
+
var loadingNode = generateNode(node.content.nodes.loading, params, options)[0];
|
|
440
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('renderLoading'), types.jsxExpressionContainer(types.arrowFunctionExpression([], loadingNode))));
|
|
441
|
+
}
|
|
442
|
+
// tslint:disable-next-line:no-any
|
|
443
|
+
if ((_c = node.content.nodes) === null || _c === void 0 ? void 0 : _c.error) {
|
|
444
|
+
// tslint:disable-next-line:no-any
|
|
445
|
+
var errorNode = generateNode(node.content.nodes.error, params, options)[0];
|
|
446
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('renderError'), types.jsxExpressionContainer(types.arrowFunctionExpression([], errorNode))));
|
|
447
|
+
}
|
|
448
|
+
// Add resource params if they exist
|
|
449
|
+
// tslint:disable-next-line:no-any
|
|
450
|
+
var resourceParams = (_d = node.content.resource) === null || _d === void 0 ? void 0 : _d.params;
|
|
451
|
+
if (resourceParams && Object.keys(resourceParams).length > 0) {
|
|
452
|
+
var nodeParams = Object.keys(resourceParams).reduce(function (acc, attrKey) {
|
|
453
|
+
var property = resourceParams[attrKey];
|
|
454
|
+
if (property.type === 'static') {
|
|
455
|
+
acc.push(types.objectProperty(types.stringLiteral(attrKey), resolveObjectValue(property)));
|
|
456
|
+
}
|
|
457
|
+
if (property.type === 'expr') {
|
|
458
|
+
var expression = ASTUtils.getExpressionFromUIDLExpressionNode(property);
|
|
459
|
+
acc.push(types.objectProperty(types.stringLiteral(attrKey), expression));
|
|
460
|
+
}
|
|
461
|
+
if (property.type === 'dynamic') {
|
|
462
|
+
var refType = property.content.referenceType;
|
|
463
|
+
acc.push(types.objectProperty(types.stringLiteral(attrKey), property.content.referenceType === 'prop'
|
|
464
|
+
? types.memberExpression(types.identifier(options.dynamicReferencePrefixMap[refType]), types.identifier(property.content.id))
|
|
465
|
+
: types.identifier(property.content.id)));
|
|
466
|
+
}
|
|
467
|
+
return acc;
|
|
468
|
+
}, []);
|
|
469
|
+
dataSourceNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('params'), types.jsxExpressionContainer(types.objectExpression(nodeParams))));
|
|
470
|
+
}
|
|
471
|
+
params.nodesLookup[key] = dataSourceNode;
|
|
472
|
+
return [dataSourceNode];
|
|
473
|
+
};
|
|
213
474
|
var generateRepeatNode = function (node, params, options) {
|
|
214
475
|
var _a = node.content, repeatContent = _a.node, dataSource = _a.dataSource, meta = _a.meta;
|
|
215
476
|
var contentASTs = generateNode(repeatContent, params, options);
|
|
@@ -231,22 +492,42 @@ var generateRepeatNode = function (node, params, options) {
|
|
|
231
492
|
};
|
|
232
493
|
var generateConditionalNode = function (node, params, options) {
|
|
233
494
|
var _a = node.content, reference = _a.reference, value = _a.value;
|
|
234
|
-
var conditionIdentifier = createConditionIdentifier(reference, params, options);
|
|
235
495
|
var subTrees = generateNode(node.content.node, params, options);
|
|
236
496
|
var condition = value !== undefined && value !== null
|
|
237
497
|
? { conditions: [{ operand: value, operation: '===' }] }
|
|
238
498
|
: node.content.condition;
|
|
239
|
-
|
|
499
|
+
var conditionIdentifier = createConditionIdentifier(reference, params, options);
|
|
500
|
+
var conditionalExpressions = subTrees.map(function (subTree) {
|
|
240
501
|
return createConditionalJSXExpression(subTree, condition, conditionIdentifier);
|
|
241
502
|
});
|
|
503
|
+
return conditionalExpressions;
|
|
242
504
|
};
|
|
243
505
|
var generateCMSListRepeaterNode = function (node, params, options) {
|
|
244
|
-
var
|
|
245
|
-
|
|
246
|
-
repeaterNode.
|
|
506
|
+
var _a, _b;
|
|
507
|
+
var jsxTag = StringUtils.dashCaseToUpperCamelCase(node.content.elementType);
|
|
508
|
+
var repeaterNode = ASTBuilders.createJSXTag(jsxTag, [], true);
|
|
509
|
+
repeaterNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('items'), types.jsxExpressionContainer(types.identifier((_a = node.content.source) !== null && _a !== void 0 ? _a : 'params'))));
|
|
510
|
+
var listElement = generateNode(node.content.nodes.list, params, __assign(__assign({}, options), { localIdentifier: node.content.renderPropIdentifier }))[0];
|
|
511
|
+
// Create key as template literal: `${item?.id}${index}`
|
|
512
|
+
var keyAttribute = types.jsxAttribute(types.jsxIdentifier('key'), types.jsxExpressionContainer(types.templateLiteral([
|
|
513
|
+
types.templateElement({ raw: '', cooked: '' }, false),
|
|
514
|
+
types.templateElement({ raw: '', cooked: '' }, false),
|
|
515
|
+
types.templateElement({ raw: '', cooked: '' }, true),
|
|
516
|
+
], [
|
|
517
|
+
types.optionalMemberExpression(types.identifier(node.content.renderPropIdentifier), types.identifier('id'), false, true),
|
|
518
|
+
types.identifier('index'),
|
|
519
|
+
])));
|
|
520
|
+
listElement.openingElement.attributes.push(keyAttribute);
|
|
521
|
+
repeaterNode.openingElement.attributes.push(types.jsxAttribute(types.jSXIdentifier('renderItem'), types.jsxExpressionContainer(types.arrowFunctionExpression([types.identifier(node.content.renderPropIdentifier), types.identifier('index')], listElement))));
|
|
247
522
|
if ('empty' in node.content.nodes) {
|
|
248
523
|
repeaterNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('renderEmpty'), types.jsxExpressionContainer(types.arrowFunctionExpression([], generateNode(node.content.nodes.empty, params, options)[0]))));
|
|
249
524
|
}
|
|
525
|
+
if ('loading' in node.content.nodes) {
|
|
526
|
+
generateNode(node.content.nodes.loading, params, options);
|
|
527
|
+
}
|
|
528
|
+
if (((_b = node.content) === null || _b === void 0 ? void 0 : _b.dependency) && options.dependencyHandling === 'import') {
|
|
529
|
+
params.dependencies[jsxTag] = node.content.dependency;
|
|
530
|
+
}
|
|
250
531
|
return [repeaterNode];
|
|
251
532
|
};
|
|
252
533
|
var generatePropsSlotNode = function (node, params, options) {
|