@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.
Files changed (117) hide show
  1. package/__tests__/builders/html-builders.ts +9 -2
  2. package/__tests__/node-handlers/node-to-html/index.ts +2 -0
  3. package/__tests__/node-handlers/node-to-jsx/index.ts +1 -1
  4. package/__tests__/node-handlers/node-to-jsx/utils.ts +16 -3
  5. package/dist/cjs/builders/ast-builders.d.ts +1 -0
  6. package/dist/cjs/builders/ast-builders.d.ts.map +1 -1
  7. package/dist/cjs/builders/ast-builders.js +19 -3
  8. package/dist/cjs/builders/ast-builders.js.map +1 -1
  9. package/dist/cjs/builders/hast-builders.d.ts +1 -0
  10. package/dist/cjs/builders/hast-builders.d.ts.map +1 -1
  11. package/dist/cjs/builders/hast-builders.js +11 -1
  12. package/dist/cjs/builders/hast-builders.js.map +1 -1
  13. package/dist/cjs/builders/style-builders.d.ts +2 -2
  14. package/dist/cjs/builders/style-builders.d.ts.map +1 -1
  15. package/dist/cjs/builders/style-builders.js +39 -19
  16. package/dist/cjs/builders/style-builders.js.map +1 -1
  17. package/dist/cjs/index.d.ts +2 -1
  18. package/dist/cjs/index.d.ts.map +1 -1
  19. package/dist/cjs/index.js +3 -1
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/cjs/node-handlers/node-to-html/constants.d.ts.map +1 -1
  22. package/dist/cjs/node-handlers/node-to-html/constants.js +2 -0
  23. package/dist/cjs/node-handlers/node-to-html/constants.js.map +1 -1
  24. package/dist/cjs/node-handlers/node-to-html/index.d.ts.map +1 -1
  25. package/dist/cjs/node-handlers/node-to-html/index.js +53 -1
  26. package/dist/cjs/node-handlers/node-to-html/index.js.map +1 -1
  27. package/dist/cjs/node-handlers/node-to-html/types.d.ts +5 -1
  28. package/dist/cjs/node-handlers/node-to-html/types.d.ts.map +1 -1
  29. package/dist/cjs/node-handlers/node-to-html/utils.d.ts.map +1 -1
  30. package/dist/cjs/node-handlers/node-to-html/utils.js +48 -4
  31. package/dist/cjs/node-handlers/node-to-html/utils.js.map +1 -1
  32. package/dist/cjs/node-handlers/node-to-jsx/index.d.ts.map +1 -1
  33. package/dist/cjs/node-handlers/node-to-jsx/index.js +325 -44
  34. package/dist/cjs/node-handlers/node-to-jsx/index.js.map +1 -1
  35. package/dist/cjs/node-handlers/node-to-jsx/types.d.ts +5 -5
  36. package/dist/cjs/node-handlers/node-to-jsx/types.d.ts.map +1 -1
  37. package/dist/cjs/node-handlers/node-to-jsx/utils.d.ts +5 -5
  38. package/dist/cjs/node-handlers/node-to-jsx/utils.d.ts.map +1 -1
  39. package/dist/cjs/node-handlers/node-to-jsx/utils.js +79 -36
  40. package/dist/cjs/node-handlers/node-to-jsx/utils.js.map +1 -1
  41. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  42. package/dist/cjs/utils/ast-utils.d.ts +16 -6
  43. package/dist/cjs/utils/ast-utils.d.ts.map +1 -1
  44. package/dist/cjs/utils/ast-utils.js +182 -40
  45. package/dist/cjs/utils/ast-utils.js.map +1 -1
  46. package/dist/cjs/utils/hast-utils.d.ts +8 -6
  47. package/dist/cjs/utils/hast-utils.d.ts.map +1 -1
  48. package/dist/cjs/utils/hast-utils.js +28 -4
  49. package/dist/cjs/utils/hast-utils.js.map +1 -1
  50. package/dist/cjs/utils/types.d.ts +3 -0
  51. package/dist/cjs/utils/types.d.ts.map +1 -0
  52. package/dist/cjs/utils/types.js +3 -0
  53. package/dist/cjs/utils/types.js.map +1 -0
  54. package/dist/esm/builders/ast-builders.d.ts +1 -0
  55. package/dist/esm/builders/ast-builders.d.ts.map +1 -1
  56. package/dist/esm/builders/ast-builders.js +18 -3
  57. package/dist/esm/builders/ast-builders.js.map +1 -1
  58. package/dist/esm/builders/hast-builders.d.ts +1 -0
  59. package/dist/esm/builders/hast-builders.d.ts.map +1 -1
  60. package/dist/esm/builders/hast-builders.js +9 -0
  61. package/dist/esm/builders/hast-builders.js.map +1 -1
  62. package/dist/esm/builders/style-builders.d.ts +2 -2
  63. package/dist/esm/builders/style-builders.d.ts.map +1 -1
  64. package/dist/esm/builders/style-builders.js +37 -18
  65. package/dist/esm/builders/style-builders.js.map +1 -1
  66. package/dist/esm/index.d.ts +2 -1
  67. package/dist/esm/index.d.ts.map +1 -1
  68. package/dist/esm/index.js +2 -1
  69. package/dist/esm/index.js.map +1 -1
  70. package/dist/esm/node-handlers/node-to-html/constants.d.ts.map +1 -1
  71. package/dist/esm/node-handlers/node-to-html/constants.js +2 -0
  72. package/dist/esm/node-handlers/node-to-html/constants.js.map +1 -1
  73. package/dist/esm/node-handlers/node-to-html/index.d.ts.map +1 -1
  74. package/dist/esm/node-handlers/node-to-html/index.js +54 -2
  75. package/dist/esm/node-handlers/node-to-html/index.js.map +1 -1
  76. package/dist/esm/node-handlers/node-to-html/types.d.ts +5 -1
  77. package/dist/esm/node-handlers/node-to-html/types.d.ts.map +1 -1
  78. package/dist/esm/node-handlers/node-to-html/utils.d.ts.map +1 -1
  79. package/dist/esm/node-handlers/node-to-html/utils.js +45 -4
  80. package/dist/esm/node-handlers/node-to-html/utils.js.map +1 -1
  81. package/dist/esm/node-handlers/node-to-jsx/index.d.ts.map +1 -1
  82. package/dist/esm/node-handlers/node-to-jsx/index.js +326 -45
  83. package/dist/esm/node-handlers/node-to-jsx/index.js.map +1 -1
  84. package/dist/esm/node-handlers/node-to-jsx/types.d.ts +5 -5
  85. package/dist/esm/node-handlers/node-to-jsx/types.d.ts.map +1 -1
  86. package/dist/esm/node-handlers/node-to-jsx/utils.d.ts +5 -5
  87. package/dist/esm/node-handlers/node-to-jsx/utils.d.ts.map +1 -1
  88. package/dist/esm/node-handlers/node-to-jsx/utils.js +79 -36
  89. package/dist/esm/node-handlers/node-to-jsx/utils.js.map +1 -1
  90. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  91. package/dist/esm/utils/ast-utils.d.ts +16 -6
  92. package/dist/esm/utils/ast-utils.d.ts.map +1 -1
  93. package/dist/esm/utils/ast-utils.js +176 -39
  94. package/dist/esm/utils/ast-utils.js.map +1 -1
  95. package/dist/esm/utils/hast-utils.d.ts +8 -6
  96. package/dist/esm/utils/hast-utils.d.ts.map +1 -1
  97. package/dist/esm/utils/hast-utils.js +26 -3
  98. package/dist/esm/utils/hast-utils.js.map +1 -1
  99. package/dist/esm/utils/types.d.ts +3 -0
  100. package/dist/esm/utils/types.d.ts.map +1 -0
  101. package/dist/esm/utils/types.js +2 -0
  102. package/dist/esm/utils/types.js.map +1 -0
  103. package/package.json +4 -4
  104. package/src/builders/ast-builders.ts +36 -2
  105. package/src/builders/hast-builders.ts +11 -0
  106. package/src/builders/style-builders.ts +51 -27
  107. package/src/index.ts +12 -1
  108. package/src/node-handlers/node-to-html/constants.ts +2 -0
  109. package/src/node-handlers/node-to-html/index.ts +95 -5
  110. package/src/node-handlers/node-to-html/types.ts +6 -0
  111. package/src/node-handlers/node-to-html/utils.ts +60 -5
  112. package/src/node-handlers/node-to-jsx/index.ts +566 -62
  113. package/src/node-handlers/node-to-jsx/types.ts +10 -29
  114. package/src/node-handlers/node-to-jsx/utils.ts +106 -42
  115. package/src/utils/ast-utils.ts +283 -82
  116. package/src/utils/hast-utils.ts +37 -9
  117. 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,EAChB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE1E,eAAO,MAAM,eAAe,aAChB,QAAQ,eACL,MAAM,WACV,MAAM,aACJ,kBAAkB,UACrB,4BAA4B,kBACpB,kBAAkB,QAC5B,eAAe,SAgDtB,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,MAWtE,CAAA"}
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
- var statement = createConditional(reference.content.id, expression);
70
- if (childNode.type === 'conditional') {
71
- return "".concat(statement, " && ").concat(createConditionalStatement(childNode));
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":"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"}
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,EAWhB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EAAoB,SAAS,EAAE,MAAM,SAAS,CAAA;AAuBrD,QAAA,MAAM,mBAAmB,EAAE,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,UAAU,CAqHrE,CAAA;AAED,eAAe,mBAAmB,CAAA"}
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, _a = params.projectResources, projectResources = _a === void 0 ? {} : _a;
21
- var options = __assign(__assign(__assign({}, DEFAULT_JSX_OPTIONS), jsxOptions), { projectResources: projectResources });
22
- var _b = node.content, elementType = _b.elementType, selfClosing = _b.selfClosing, children = _b.children, key = _b.key, attrs = _b.attrs, dependency = _b.dependency, events = _b.events;
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
- Object.keys(attrs).forEach(function (attrKey) {
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.forEach(function (child) {
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
- /* tslint:disable:no-string-literal */
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
- return [createDynamicValueExpression(node, options, undefined)];
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
- return types.jsxExpressionContainer(expression);
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
- return subTrees.map(function (subTree) {
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 repeaterNode = ASTBuilders.createJSXTag('Repeater', [], true);
245
- repeaterNode.openingElement.attributes.push(types.jsxAttribute(types.jsxIdentifier('items'), types.jsxExpressionContainer(types.identifier('params'))));
246
- repeaterNode.openingElement.attributes.push(types.jsxAttribute(types.jSXIdentifier('renderItem'), types.jsxExpressionContainer(types.arrowFunctionExpression([types.identifier(node.content.renderPropIdentifier)], generateNode(node.content.nodes.list, params, options)[0]))));
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) {