@sap/ux-ui5-tooling 1.20.3 → 1.21.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 (287) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/adp-tooling/templates/cf/_gitignore +6 -0
  3. package/dist/adp-tooling/templates/cf/approuter/package.json +13 -0
  4. package/dist/adp-tooling/templates/cf/approuter/xs-app.json +15 -0
  5. package/dist/adp-tooling/templates/cf/i18n/i18n.properties +3 -0
  6. package/dist/adp-tooling/templates/cf/package.json +35 -0
  7. package/dist/adp-tooling/templates/cf/ui5.yaml +5 -0
  8. package/dist/adp-tooling/templates/cf/xs-security.json +7 -0
  9. package/dist/adp-tooling/templates/changes/annotation.xml +18 -0
  10. package/dist/adp-tooling/templates/project/gitignore.tmpl +5 -0
  11. package/dist/adp-tooling/templates/project/package.json +31 -0
  12. package/dist/adp-tooling/templates/project/ui5.yaml +6 -0
  13. package/dist/adp-tooling/templates/project/webapp/i18n/i18n.properties +6 -0
  14. package/dist/adp-tooling/templates/project/webapp/manifest.appdescr_variant +10 -0
  15. package/dist/adp-tooling/templates/rta/common/analytical-custom-column.xml +25 -0
  16. package/dist/adp-tooling/templates/rta/common/custom-action.xml +8 -0
  17. package/dist/adp-tooling/templates/rta/common/grid-tree-custom-column.xml +22 -0
  18. package/dist/adp-tooling/templates/rta/common/header-field.xml +13 -0
  19. package/dist/adp-tooling/templates/rta/common/op-custom-section.xml +20 -0
  20. package/dist/adp-tooling/templates/rta/common/v4-table-action.xml +8 -0
  21. package/dist/adp-tooling/templates/rta/controller.ejs +80 -0
  22. package/dist/adp-tooling/templates/rta/fragment.xml +7 -0
  23. package/dist/adp-tooling/templates/rta/ts-controller.ejs +18 -0
  24. package/dist/adp-tooling/templates/rta/v2/m-table-custom-column-cell.xml +7 -0
  25. package/dist/adp-tooling/templates/rta/v2/m-table-custom-column.xml +18 -0
  26. package/dist/adp-tooling/templates/rta/v4/custom-section.xml +12 -0
  27. package/dist/adp-tooling/templates/rta/v4/mdc-custom-column-config.xml +6 -0
  28. package/dist/adp-tooling/templates/rta/v4/mdc-custom-column.xml +11 -0
  29. package/dist/adp-tooling/templates/typescript/tsconfig.json +19 -0
  30. package/dist/cli/index.js +15601 -9530
  31. package/dist/control-property-editor/app.css +2 -0
  32. package/dist/control-property-editor/app.js +175 -0
  33. package/dist/livereload-js/livereload.js +3795 -0
  34. package/dist/middlewares/fiori-tools-appreload.js +43608 -41594
  35. package/dist/middlewares/fiori-tools-preview.js +57009 -3089
  36. package/dist/middlewares/fiori-tools-proxy.js +54866 -31843
  37. package/dist/middlewares/fiori-tools-servestatic.js +31657 -57
  38. package/dist/preview-middleware/dist/client/adp/add-fragment.js +48 -0
  39. package/dist/preview-middleware/dist/client/adp/add-fragment.ts +51 -0
  40. package/dist/preview-middleware/dist/client/adp/api-handler.js +162 -0
  41. package/dist/preview-middleware/dist/client/adp/api-handler.ts +188 -0
  42. package/dist/preview-middleware/dist/client/adp/command-executor.js +100 -0
  43. package/dist/preview-middleware/dist/client/adp/command-executor.ts +105 -0
  44. package/dist/preview-middleware/dist/client/adp/control-utils.js +46 -0
  45. package/dist/preview-middleware/dist/client/adp/control-utils.ts +48 -0
  46. package/dist/preview-middleware/dist/client/adp/controllers/AddActionFragment.controller.js +198 -0
  47. package/dist/preview-middleware/dist/client/adp/controllers/AddActionFragment.controller.ts +232 -0
  48. package/dist/preview-middleware/dist/client/adp/controllers/AddCustomFragment.controller.js +223 -0
  49. package/dist/preview-middleware/dist/client/adp/controllers/AddCustomFragment.controller.ts +257 -0
  50. package/dist/preview-middleware/dist/client/adp/controllers/AddFragment.controller.js +195 -0
  51. package/dist/preview-middleware/dist/client/adp/controllers/AddFragment.controller.ts +264 -0
  52. package/dist/preview-middleware/dist/client/adp/controllers/AddSubpage.controller.js +146 -0
  53. package/dist/preview-middleware/dist/client/adp/controllers/AddSubpage.controller.ts +209 -0
  54. package/dist/preview-middleware/dist/client/adp/controllers/AddTableColumnFragments.controller.js +232 -0
  55. package/dist/preview-middleware/dist/client/adp/controllers/AddTableColumnFragments.controller.ts +306 -0
  56. package/dist/preview-middleware/dist/client/adp/controllers/BaseDialog.controller.js +187 -0
  57. package/dist/preview-middleware/dist/client/adp/controllers/BaseDialog.controller.ts +254 -0
  58. package/dist/preview-middleware/dist/client/adp/controllers/ControllerExtension.controller.js +330 -0
  59. package/dist/preview-middleware/dist/client/adp/controllers/ControllerExtension.controller.ts +408 -0
  60. package/dist/preview-middleware/dist/client/adp/controllers/ExtensionPoint.controller.js +160 -0
  61. package/dist/preview-middleware/dist/client/adp/controllers/ExtensionPoint.controller.ts +195 -0
  62. package/dist/preview-middleware/dist/client/adp/controllers/FileExistsDialog.controller.js +68 -0
  63. package/dist/preview-middleware/dist/client/adp/controllers/FileExistsDialog.controller.ts +86 -0
  64. package/dist/preview-middleware/dist/client/adp/controllers/types.js +2 -0
  65. package/dist/preview-middleware/dist/client/adp/controllers/types.ts +10 -0
  66. package/dist/preview-middleware/dist/client/adp/dialog-factory.js +151 -0
  67. package/dist/preview-middleware/dist/client/adp/dialog-factory.ts +210 -0
  68. package/dist/preview-middleware/dist/client/adp/extend-controller.js +48 -0
  69. package/dist/preview-middleware/dist/client/adp/extend-controller.ts +49 -0
  70. package/dist/preview-middleware/dist/client/adp/extension-point.js +83 -0
  71. package/dist/preview-middleware/dist/client/adp/extension-point.ts +116 -0
  72. package/dist/preview-middleware/dist/client/adp/init-dialogs.js +142 -0
  73. package/dist/preview-middleware/dist/client/adp/init-dialogs.ts +178 -0
  74. package/dist/preview-middleware/dist/client/adp/init.js +102 -0
  75. package/dist/preview-middleware/dist/client/adp/init.ts +85 -0
  76. package/dist/preview-middleware/dist/client/adp/quick-actions/add-new-subpage-quick-action-base.js +97 -0
  77. package/dist/preview-middleware/dist/client/adp/quick-actions/add-new-subpage-quick-action-base.ts +140 -0
  78. package/dist/preview-middleware/dist/client/adp/quick-actions/common/add-controller-to-page.js +74 -0
  79. package/dist/preview-middleware/dist/client/adp/quick-actions/common/add-controller-to-page.ts +92 -0
  80. package/dist/preview-middleware/dist/client/adp/quick-actions/common/add-new-annotation-file.js +171 -0
  81. package/dist/preview-middleware/dist/client/adp/quick-actions/common/add-new-annotation-file.ts +174 -0
  82. package/dist/preview-middleware/dist/client/adp/quick-actions/common/create-page-action.js +56 -0
  83. package/dist/preview-middleware/dist/client/adp/quick-actions/common/create-page-action.ts +56 -0
  84. package/dist/preview-middleware/dist/client/adp/quick-actions/common/op-add-custom-section.js +41 -0
  85. package/dist/preview-middleware/dist/client/adp/quick-actions/common/op-add-custom-section.ts +51 -0
  86. package/dist/preview-middleware/dist/client/adp/quick-actions/common/op-add-header-field.js +69 -0
  87. package/dist/preview-middleware/dist/client/adp/quick-actions/common/op-add-header-field.ts +81 -0
  88. package/dist/preview-middleware/dist/client/adp/quick-actions/common/utils.js +20 -0
  89. package/dist/preview-middleware/dist/client/adp/quick-actions/common/utils.ts +7 -0
  90. package/dist/preview-middleware/dist/client/adp/quick-actions/control-types.js +25 -0
  91. package/dist/preview-middleware/dist/client/adp/quick-actions/control-types.ts +7 -0
  92. package/dist/preview-middleware/dist/client/adp/quick-actions/dialog-enablement-validator.js +26 -0
  93. package/dist/preview-middleware/dist/client/adp/quick-actions/dialog-enablement-validator.ts +18 -0
  94. package/dist/preview-middleware/dist/client/adp/quick-actions/enablement-validator.js +2 -0
  95. package/dist/preview-middleware/dist/client/adp/quick-actions/enablement-validator.ts +19 -0
  96. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/add-new-subpage.js +82 -0
  97. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/add-new-subpage.ts +87 -0
  98. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/change-table-actions.js +69 -0
  99. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/change-table-actions.ts +71 -0
  100. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/change-table-columns.js +103 -0
  101. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/change-table-columns.ts +105 -0
  102. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/create-table-action.js +111 -0
  103. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/create-table-action.ts +110 -0
  104. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/create-table-custom-column.js +108 -0
  105. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/create-table-custom-column.ts +141 -0
  106. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/lr-enable-semantic-date-range-filter-bar.js +80 -0
  107. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/lr-enable-semantic-date-range-filter-bar.ts +93 -0
  108. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/lr-enable-table-filtering.js +79 -0
  109. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/lr-enable-table-filtering.ts +102 -0
  110. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/lr-enable-variant-management.js +71 -0
  111. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/lr-enable-variant-management.ts +98 -0
  112. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/lr-toggle-clear-filter-bar.js +61 -0
  113. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/lr-toggle-clear-filter-bar.ts +77 -0
  114. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/op-enable-empty-row-mode.js +95 -0
  115. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/op-enable-empty-row-mode.ts +102 -0
  116. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/op-enable-variant-management.js +86 -0
  117. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/op-enable-variant-management.ts +116 -0
  118. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/registry.js +79 -0
  119. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/registry.ts +121 -0
  120. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/utils.js +138 -0
  121. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v2/utils.ts +134 -0
  122. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/add-new-subpage.js +140 -0
  123. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/add-new-subpage.ts +181 -0
  124. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/change-table-actions.js +81 -0
  125. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/change-table-actions.ts +81 -0
  126. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/change-table-columns.js +90 -0
  127. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/change-table-columns.ts +97 -0
  128. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/create-page-action.js +81 -0
  129. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/create-page-action.ts +98 -0
  130. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/create-table-action-config-change.js +129 -0
  131. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/create-table-action-config-change.ts +149 -0
  132. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/create-table-custom-column-config-change.js +142 -0
  133. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/create-table-custom-column-config-change.ts +178 -0
  134. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/enable-variant-management.js +83 -0
  135. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/enable-variant-management.ts +96 -0
  136. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/lr-enable-semantic-date-range-filter-bar.js +58 -0
  137. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/lr-enable-semantic-date-range-filter-bar.ts +70 -0
  138. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/lr-enable-table-filtering.js +86 -0
  139. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/lr-enable-table-filtering.ts +96 -0
  140. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/lr-toggle-clear-filter-bar.js +55 -0
  141. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/lr-toggle-clear-filter-bar.ts +61 -0
  142. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/op-add-custom-section.js +73 -0
  143. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/op-add-custom-section.ts +91 -0
  144. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/op-enable-empty-row-mode.js +91 -0
  145. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/op-enable-empty-row-mode.ts +88 -0
  146. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/registry.js +62 -0
  147. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/registry.ts +86 -0
  148. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/utils.js +158 -0
  149. package/dist/preview-middleware/dist/client/adp/quick-actions/fe-v4/utils.ts +175 -0
  150. package/dist/preview-middleware/dist/client/adp/quick-actions/load.js +46 -0
  151. package/dist/preview-middleware/dist/client/adp/quick-actions/load.ts +23 -0
  152. package/dist/preview-middleware/dist/client/adp/quick-actions/quick-action-base.js +64 -0
  153. package/dist/preview-middleware/dist/client/adp/quick-actions/quick-action-base.ts +71 -0
  154. package/dist/preview-middleware/dist/client/adp/quick-actions/simple-quick-action-base.js +44 -0
  155. package/dist/preview-middleware/dist/client/adp/quick-actions/simple-quick-action-base.ts +51 -0
  156. package/dist/preview-middleware/dist/client/adp/quick-actions/supported-ui5versions.md +40 -0
  157. package/dist/preview-middleware/dist/client/adp/quick-actions/table-quick-action-base.js +372 -0
  158. package/dist/preview-middleware/dist/client/adp/quick-actions/table-quick-action-base.ts +433 -0
  159. package/dist/preview-middleware/dist/client/adp/sync-views-utils.js +123 -0
  160. package/dist/preview-middleware/dist/client/adp/sync-views-utils.ts +90 -0
  161. package/dist/preview-middleware/dist/client/adp/ui/AddAction.fragment.xml +49 -0
  162. package/dist/preview-middleware/dist/client/adp/ui/AddCustomFragment.fragment.xml +48 -0
  163. package/dist/preview-middleware/dist/client/adp/ui/AddFragment.fragment.xml +83 -0
  164. package/dist/preview-middleware/dist/client/adp/ui/AddSubpage.fragment.xml +73 -0
  165. package/dist/preview-middleware/dist/client/adp/ui/AddTableColumnFragments.fragment.xml +63 -0
  166. package/dist/preview-middleware/dist/client/adp/ui/ControllerExtension.fragment.xml +63 -0
  167. package/dist/preview-middleware/dist/client/adp/ui/ExtensionPoint.fragment.xml +61 -0
  168. package/dist/preview-middleware/dist/client/adp/ui/FileExistsDialog.fragment.xml +43 -0
  169. package/dist/preview-middleware/dist/client/adp/utils.js +199 -0
  170. package/dist/preview-middleware/dist/client/adp/utils.ts +200 -0
  171. package/dist/preview-middleware/dist/client/cpe/additional-change-info/add-xml-additional-info.js +85 -0
  172. package/dist/preview-middleware/dist/client/cpe/additional-change-info/add-xml-additional-info.ts +107 -0
  173. package/dist/preview-middleware/dist/client/cpe/changes/flex-change.js +66 -0
  174. package/dist/preview-middleware/dist/client/cpe/changes/flex-change.ts +66 -0
  175. package/dist/preview-middleware/dist/client/cpe/changes/generic-change.js +321 -0
  176. package/dist/preview-middleware/dist/client/cpe/changes/generic-change.ts +462 -0
  177. package/dist/preview-middleware/dist/client/cpe/changes/index.js +12 -0
  178. package/dist/preview-middleware/dist/client/cpe/changes/index.ts +1 -0
  179. package/dist/preview-middleware/dist/client/cpe/changes/service.js +527 -0
  180. package/dist/preview-middleware/dist/client/cpe/changes/service.ts +595 -0
  181. package/dist/preview-middleware/dist/client/cpe/changes/validator.js +41 -0
  182. package/dist/preview-middleware/dist/client/cpe/changes/validator.ts +35 -0
  183. package/dist/preview-middleware/dist/client/cpe/communication-service.js +44 -0
  184. package/dist/preview-middleware/dist/client/cpe/communication-service.ts +41 -0
  185. package/dist/preview-middleware/dist/client/cpe/connector-service.js +88 -0
  186. package/dist/preview-middleware/dist/client/cpe/connector-service.ts +74 -0
  187. package/dist/preview-middleware/dist/client/cpe/context-menu-service.js +90 -0
  188. package/dist/preview-middleware/dist/client/cpe/context-menu-service.ts +77 -0
  189. package/dist/preview-middleware/dist/client/cpe/control-data.js +366 -0
  190. package/dist/preview-middleware/dist/client/cpe/control-data.ts +400 -0
  191. package/dist/preview-middleware/dist/client/cpe/documentation.js +191 -0
  192. package/dist/preview-middleware/dist/client/cpe/documentation.ts +187 -0
  193. package/dist/preview-middleware/dist/client/cpe/feature-service.js +39 -0
  194. package/dist/preview-middleware/dist/client/cpe/feature-service.ts +25 -0
  195. package/dist/preview-middleware/dist/client/cpe/init.js +92 -0
  196. package/dist/preview-middleware/dist/client/cpe/init.ts +114 -0
  197. package/dist/preview-middleware/dist/client/cpe/logger.js +32 -0
  198. package/dist/preview-middleware/dist/client/cpe/logger.ts +24 -0
  199. package/dist/preview-middleware/dist/client/cpe/odata-health/odata-health-checker.js +126 -0
  200. package/dist/preview-middleware/dist/client/cpe/odata-health/odata-health-checker.ts +150 -0
  201. package/dist/preview-middleware/dist/client/cpe/odata-health/odata-health-status.js +63 -0
  202. package/dist/preview-middleware/dist/client/cpe/odata-health/odata-health-status.ts +52 -0
  203. package/dist/preview-middleware/dist/client/cpe/outline/editable.js +38 -0
  204. package/dist/preview-middleware/dist/client/cpe/outline/editable.ts +30 -0
  205. package/dist/preview-middleware/dist/client/cpe/outline/nodes.js +212 -0
  206. package/dist/preview-middleware/dist/client/cpe/outline/nodes.ts +236 -0
  207. package/dist/preview-middleware/dist/client/cpe/outline/service.js +62 -0
  208. package/dist/preview-middleware/dist/client/cpe/outline/service.ts +66 -0
  209. package/dist/preview-middleware/dist/client/cpe/quick-actions/quick-action-service.js +161 -0
  210. package/dist/preview-middleware/dist/client/cpe/quick-actions/quick-action-service.ts +184 -0
  211. package/dist/preview-middleware/dist/client/cpe/quick-actions/registry.js +145 -0
  212. package/dist/preview-middleware/dist/client/cpe/quick-actions/registry.ts +157 -0
  213. package/dist/preview-middleware/dist/client/cpe/quick-actions/utils.js +94 -0
  214. package/dist/preview-middleware/dist/client/cpe/quick-actions/utils.ts +113 -0
  215. package/dist/preview-middleware/dist/client/cpe/rta-service.js +94 -0
  216. package/dist/preview-middleware/dist/client/cpe/rta-service.ts +86 -0
  217. package/dist/preview-middleware/dist/client/cpe/selection.js +249 -0
  218. package/dist/preview-middleware/dist/client/cpe/selection.ts +267 -0
  219. package/dist/preview-middleware/dist/client/cpe/ui5-utils.js +35 -0
  220. package/dist/preview-middleware/dist/client/cpe/ui5-utils.ts +28 -0
  221. package/dist/preview-middleware/dist/client/cpe/utils.js +113 -0
  222. package/dist/preview-middleware/dist/client/cpe/utils.ts +162 -0
  223. package/dist/preview-middleware/dist/client/flp/WorkspaceConnector.js +96 -0
  224. package/dist/preview-middleware/dist/client/flp/WorkspaceConnector.ts +99 -0
  225. package/dist/preview-middleware/dist/client/flp/common.js +30 -0
  226. package/dist/preview-middleware/dist/client/flp/common.ts +28 -0
  227. package/dist/preview-middleware/dist/client/flp/enableFakeConnector.js +92 -0
  228. package/dist/preview-middleware/dist/client/flp/enableFakeConnector.ts +113 -0
  229. package/dist/preview-middleware/dist/client/flp/homepage/Component.js +16 -0
  230. package/dist/preview-middleware/dist/client/flp/homepage/Component.ts +10 -0
  231. package/dist/preview-middleware/dist/client/flp/homepage/controller/MyHome.controller.js +54 -0
  232. package/dist/preview-middleware/dist/client/flp/homepage/controller/MyHome.controller.ts +41 -0
  233. package/dist/preview-middleware/dist/client/flp/homepage/css/style.css +3 -0
  234. package/dist/preview-middleware/dist/client/flp/homepage/manifest.json +41 -0
  235. package/dist/preview-middleware/dist/client/flp/homepage/view/MyHome.view.xml +18 -0
  236. package/dist/preview-middleware/dist/client/flp/init.js +418 -0
  237. package/dist/preview-middleware/dist/client/flp/init.ts +448 -0
  238. package/dist/preview-middleware/dist/client/flp/initCdm.js +117 -0
  239. package/dist/preview-middleware/dist/client/flp/initCdm.ts +111 -0
  240. package/dist/preview-middleware/dist/client/flp/initConnectors.js +31 -0
  241. package/dist/preview-middleware/dist/client/flp/initConnectors.ts +20 -0
  242. package/dist/preview-middleware/dist/client/flp/initRta.js +180 -0
  243. package/dist/preview-middleware/dist/client/flp/initRta.ts +194 -0
  244. package/dist/preview-middleware/dist/client/i18n.js +56 -0
  245. package/dist/preview-middleware/dist/client/i18n.ts +49 -0
  246. package/dist/preview-middleware/dist/client/manifest.json +8 -0
  247. package/dist/preview-middleware/dist/client/messagebundle.properties +143 -0
  248. package/dist/preview-middleware/dist/client/thirdparty/@sap-ux-private/control-property-editor-common.js +486 -0
  249. package/dist/preview-middleware/dist/client/utils/additional-change-info.js +69 -0
  250. package/dist/preview-middleware/dist/client/utils/additional-change-info.ts +73 -0
  251. package/dist/preview-middleware/dist/client/utils/application.js +34 -0
  252. package/dist/preview-middleware/dist/client/utils/application.ts +27 -0
  253. package/dist/preview-middleware/dist/client/utils/core.js +144 -0
  254. package/dist/preview-middleware/dist/client/utils/core.ts +145 -0
  255. package/dist/preview-middleware/dist/client/utils/error.js +28 -0
  256. package/dist/preview-middleware/dist/client/utils/error.ts +18 -0
  257. package/dist/preview-middleware/dist/client/utils/fe-v2.js +58 -0
  258. package/dist/preview-middleware/dist/client/utils/fe-v2.ts +61 -0
  259. package/dist/preview-middleware/dist/client/utils/fe-v4.js +168 -0
  260. package/dist/preview-middleware/dist/client/utils/fe-v4.ts +186 -0
  261. package/dist/preview-middleware/dist/client/utils/info-center-message.js +60 -0
  262. package/dist/preview-middleware/dist/client/utils/info-center-message.ts +60 -0
  263. package/dist/preview-middleware/dist/client/utils/version.js +126 -0
  264. package/dist/preview-middleware/dist/client/utils/version.ts +138 -0
  265. package/dist/preview-middleware/templates/flp/cdm.base.json +47 -0
  266. package/dist/preview-middleware/templates/flp/cdm.ejs +72 -0
  267. package/dist/preview-middleware/templates/flp/editor.ejs +28 -0
  268. package/dist/preview-middleware/templates/flp/sandbox.ejs +88 -0
  269. package/dist/preview-middleware/templates/flp/sandbox2.ejs +86 -0
  270. package/dist/preview-middleware/templates/test/qunit.ejs +26 -0
  271. package/dist/preview-middleware/templates/test/qunit.js +29 -0
  272. package/dist/preview-middleware/templates/test/testsuite.qunit.ejs +10 -0
  273. package/dist/preview-middleware/templates/test/testsuite.qunit.js +8 -0
  274. package/dist/tasks/cf-deploy/index.js +1836 -1496
  275. package/dist/tasks/deploy/index.js +14679 -8695
  276. package/package.json +31 -34
  277. package/prebuilds/keyring.darwin-arm64.node +0 -0
  278. package/prebuilds/keyring.darwin-x64.node +0 -0
  279. package/prebuilds/keyring.linux-arm-gnueabihf.node +0 -0
  280. package/prebuilds/keyring.linux-arm64-gnu.node +0 -0
  281. package/prebuilds/keyring.linux-arm64-musl.node +0 -0
  282. package/prebuilds/keyring.linux-ia32-gnu.node +0 -0
  283. package/prebuilds/keyring.linux-x64-gnu.node +0 -0
  284. package/prebuilds/keyring.linux-x64-musl.node +0 -0
  285. package/prebuilds/keyring.win32-arm64-msvc.node +0 -0
  286. package/prebuilds/keyring.win32-ia32-msvc.node +0 -0
  287. package/prebuilds/keyring.win32-x64-msvc.node +0 -0
@@ -0,0 +1,150 @@
1
+ import type * as ManifestNamespace from '@ui5/manifest/types/manifest';
2
+ import Log from 'sap/base/Log';
3
+ import ODataModelV2 from 'sap/ui/model/odata/v2/ODataModel';
4
+ import ODataModelV4 from 'sap/ui/model/odata/v4/ODataModel';
5
+ import RuntimeAuthoring from 'sap/ui/rta/RuntimeAuthoring';
6
+ import { ODataDownStatus, ODataHealthStatus, ODataMetadata, ODataUpStatus } from './odata-health-status';
7
+
8
+ type Manifest = ManifestNamespace.SAPJSONSchemaForWebApplicationManifestFile;
9
+ type DataSource = ManifestNamespace.DataSource;
10
+
11
+ /**
12
+ * The OData version type.
13
+ */
14
+ type ODataVersion = 'v2' | 'v4' | '2.0' | '4.0' | '4.01';
15
+
16
+ /**
17
+ * Describes an OData service instance.
18
+ */
19
+ interface ODataServiceInfo {
20
+ /**
21
+ * The URL of the OData service.
22
+ */
23
+ serviceUrl: string;
24
+ /**
25
+ * The OData protocol version.
26
+ */
27
+ oDataVersion: ODataVersion;
28
+ }
29
+
30
+ /**
31
+ * Use this class to do a health check for all available OData services, supports both v2 and v4
32
+ * format. This health checker ensures not only that $metadata is valid, but also that the UI5 framework
33
+ * itself can consume the service via its models.
34
+ */
35
+ export class ODataHealthChecker {
36
+ /**
37
+ * The OData type.
38
+ */
39
+ private static readonly ODATA_TYPE: string = 'OData';
40
+
41
+ /**
42
+ * The default OData version.
43
+ */
44
+ private static readonly DEFAULT_ODATA_VERSION: ODataVersion = 'v2';
45
+
46
+ /**
47
+ * Use this helper function to filter the OData data source items from the manifest.
48
+ * @param src The service data source.
49
+ * @returns True if the data source represents an OData service.
50
+ */
51
+ private readonly isOdataService = (src: DataSource): boolean => src.type === ODataHealthChecker.ODATA_TYPE;
52
+
53
+ /**
54
+ * Use this helper function to map the OData data source to the internal structure
55
+ * used in this class.
56
+ * @param src The OData service data source.
57
+ * @returns The OData service info object.
58
+ */
59
+ private readonly toOdataServiceInfo = (src: DataSource): ODataServiceInfo => ({
60
+ serviceUrl: src.uri,
61
+ oDataVersion: src.settings?.odataVersion ?? ODataHealthChecker.DEFAULT_ODATA_VERSION
62
+ });
63
+
64
+ constructor(private readonly rta: RuntimeAuthoring) {}
65
+
66
+ /**
67
+ * Does a health check to all available OData services.
68
+ *
69
+ * @returns Resolves with an array containing the health
70
+ * status for each OData service.
71
+ */
72
+ async getHealthStatus(): Promise<ODataHealthStatus[]> {
73
+ const oDataHealthCheckStartTime = Date.now();
74
+
75
+ const services = this.getServices();
76
+ const metadataPromises = await Promise.allSettled(
77
+ services.map(({ serviceUrl, oDataVersion }) => this.getServiceMetadata(serviceUrl, oDataVersion))
78
+ );
79
+
80
+ const oDataHealthCheckDurationInSec = ((Date.now() - oDataHealthCheckStartTime) / 1000).toFixed(2);
81
+ Log.info(`OData service health check took ${oDataHealthCheckDurationInSec} sec.`);
82
+
83
+ return metadataPromises.map((metadataPromise, idx) =>
84
+ metadataPromise.status === 'fulfilled'
85
+ ? new ODataUpStatus(services[idx].serviceUrl)
86
+ : new ODataDownStatus(services[idx].serviceUrl, metadataPromise.reason)
87
+ );
88
+ }
89
+
90
+ /**
91
+ * This method does a strong health check (with the ODataModel). This ensures not only
92
+ * that the $metadata is valid, but also that the UI5 framework itself can consume the service via its models.
93
+ * Some services may have valid $metadata but still fail in the UI5’s ODataModel
94
+ * (e.g., weird annotations, CORS issues, etc.).
95
+ *
96
+ * @param serviceUrl The OData service url.
97
+ * @param oDataVersion The OData version.
98
+ * @returns Resolved with valid metadata.
99
+ */
100
+ private getServiceMetadata(serviceUrl: string, oDataVersion: ODataVersion): Promise<ODataMetadata> {
101
+ switch (oDataVersion) {
102
+ case 'v2':
103
+ case '2.0':
104
+ return this.getServiceV2Metadata(serviceUrl);
105
+ case 'v4':
106
+ case '4.0':
107
+ case '4.01':
108
+ return this.getServiceV4Metadata(serviceUrl);
109
+ }
110
+ }
111
+
112
+ private getServiceV2Metadata(serviceUrl: string): Promise<ODataMetadata> {
113
+ const oModel = new ODataModelV2({
114
+ serviceUrl,
115
+ json: true,
116
+ // We do not want the annotations concatenated to the final result.
117
+ loadAnnotationsJoined: false
118
+ });
119
+ // This method actually returns promise which is resolved with the metadata.
120
+ return oModel.metadataLoaded(true).finally(
121
+ // Do clean up in case the helath check is done multiple times.
122
+ () => oModel.destroy()
123
+ );
124
+ }
125
+
126
+ private getServiceV4Metadata(serviceUrl: string): Promise<ODataMetadata> {
127
+ const oModel = new ODataModelV4({
128
+ serviceUrl,
129
+ // Only metadata loaded. We only want the model to load $metadata,
130
+ // not fetch entity data or bind to any UI controls.
131
+ synchronizationMode: 'None'
132
+ });
133
+ // This method actually returns promise which is resolved with the metadata.
134
+ return oModel
135
+ .getMetaModel()
136
+ .requestObject('/')
137
+ .finally(
138
+ // Do clean up in case the helath check is done multiple times.
139
+ () => oModel.destroy()
140
+ );
141
+ }
142
+
143
+ private getServices(): ODataServiceInfo[] {
144
+ const manifest: Manifest = this.rta.getRootControlInstance().getManifest() as unknown as Manifest;
145
+ const dataSources = manifest?.['sap.app']?.dataSources;
146
+ return Object.values(dataSources ?? {})
147
+ .filter(this.isOdataService)
148
+ .map(this.toOdataServiceInfo);
149
+ }
150
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ sap.ui.define([], function () {
4
+ "use strict";
5
+
6
+ /**
7
+ * Represents the status for a healthy OData service.
8
+ */
9
+ class ODataUpStatus {
10
+ /**
11
+ * Creates an instance representing a healthy OData service.
12
+ *
13
+ * @param serviceUrl The service url.
14
+ */
15
+ constructor(serviceUrl) {
16
+ this.serviceUrl = serviceUrl;
17
+ }
18
+ }
19
+
20
+ /**
21
+ * Represents the status for an unhealthy OData service.
22
+ */
23
+ class ODataDownStatus {
24
+ /**
25
+ * Creates an instance representing an unhealthy OData service.
26
+ *
27
+ * @param serviceUrl The service url.
28
+ * @param reason The provided reason for the failure.
29
+ */
30
+ constructor(serviceUrl, reason) {
31
+ this.serviceUrl = serviceUrl;
32
+ this.reason = reason;
33
+ this.errorMessage = this.formatReason(reason);
34
+ }
35
+
36
+ /**
37
+ * Formats the reason.
38
+ *
39
+ * @param reason The provided reason for the failure.
40
+ * @returns Formatted reason as string.
41
+ */
42
+ formatReason(reason) {
43
+ if (reason instanceof Error) {
44
+ return reason.message;
45
+ }
46
+ if (typeof reason === 'string') {
47
+ return reason;
48
+ }
49
+ try {
50
+ return JSON.stringify(reason);
51
+ } catch {
52
+ return String(reason);
53
+ }
54
+ }
55
+ }
56
+ var __exports = {
57
+ __esModule: true
58
+ };
59
+ __exports.ODataUpStatus = ODataUpStatus;
60
+ __exports.ODataDownStatus = ODataDownStatus;
61
+ return __exports;
62
+ });
63
+ //# sourceMappingURL=odata-health-status.js.map
@@ -0,0 +1,52 @@
1
+ export type ODataMetadata = Record<string, unknown>;
2
+
3
+ /**
4
+ * Represents the status for a healthy OData service.
5
+ */
6
+ export class ODataUpStatus {
7
+ /**
8
+ * Creates an instance representing a healthy OData service.
9
+ *
10
+ * @param serviceUrl The service url.
11
+ */
12
+ constructor(public readonly serviceUrl: string) {}
13
+ }
14
+
15
+ /**
16
+ * Represents the status for an unhealthy OData service.
17
+ */
18
+ export class ODataDownStatus {
19
+ readonly errorMessage: string;
20
+
21
+ /**
22
+ * Creates an instance representing an unhealthy OData service.
23
+ *
24
+ * @param serviceUrl The service url.
25
+ * @param reason The provided reason for the failure.
26
+ */
27
+ constructor(public readonly serviceUrl: string, public readonly reason: unknown) {
28
+ this.errorMessage = this.formatReason(reason);
29
+ }
30
+
31
+ /**
32
+ * Formats the reason.
33
+ *
34
+ * @param reason The provided reason for the failure.
35
+ * @returns Formatted reason as string.
36
+ */
37
+ private formatReason(reason: unknown): string {
38
+ if (reason instanceof Error) {
39
+ return reason.message;
40
+ }
41
+ if (typeof reason === 'string') {
42
+ return reason;
43
+ }
44
+ try {
45
+ return JSON.stringify(reason);
46
+ } catch {
47
+ return String(reason);
48
+ }
49
+ }
50
+ }
51
+
52
+ export type ODataHealthStatus = ODataUpStatus | ODataDownStatus;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ sap.ui.define(["../control-data", "../utils", "sap/ui/dt/OverlayUtil", "sap/ui/dt/OverlayRegistry", "../../utils/core"], function (___control_data, ___utils, OverlayUtil, OverlayRegistry, ____utils_core) {
4
+ "use strict";
5
+
6
+ const buildControlData = ___control_data["buildControlData"];
7
+ const getRuntimeControl = ___utils["getRuntimeControl"];
8
+ const getComponent = ____utils_core["getComponent"];
9
+ const isEditable = (changeService, id = '') => {
10
+ let editable = false;
11
+ const control = sap.ui.getCore().byId(id);
12
+ if (!control) {
13
+ const component = getComponent(id);
14
+ if (component) {
15
+ return editable;
16
+ }
17
+ } else {
18
+ let controlOverlay = OverlayRegistry.getOverlay(control);
19
+ if (!controlOverlay?.getDomRef()) {
20
+ //look for closest control
21
+ controlOverlay = OverlayUtil.getClosestOverlayFor(control);
22
+ }
23
+ if (controlOverlay) {
24
+ const runtimeControl = getRuntimeControl(controlOverlay);
25
+ const controlData = buildControlData(runtimeControl, changeService, controlOverlay);
26
+ const prop = controlData.properties.find(item => item.isEnabled === true);
27
+ editable = prop !== undefined;
28
+ }
29
+ }
30
+ return editable;
31
+ };
32
+ var __exports = {
33
+ __esModule: true
34
+ };
35
+ __exports.isEditable = isEditable;
36
+ return __exports;
37
+ });
38
+ //# sourceMappingURL=editable.js.map
@@ -0,0 +1,30 @@
1
+ import { buildControlData } from '../control-data';
2
+ import { getRuntimeControl } from '../utils';
3
+ import OverlayUtil from 'sap/ui/dt/OverlayUtil';
4
+ import OverlayRegistry from 'sap/ui/dt/OverlayRegistry';
5
+ import { getComponent } from '../../utils/core';
6
+ import type { ChangeService } from '../changes';
7
+
8
+ export const isEditable = (changeService: ChangeService, id = ''): boolean => {
9
+ let editable = false;
10
+ const control = sap.ui.getCore().byId(id);
11
+ if (!control) {
12
+ const component = getComponent(id);
13
+ if (component) {
14
+ return editable;
15
+ }
16
+ } else {
17
+ let controlOverlay = OverlayRegistry.getOverlay(control);
18
+ if (!controlOverlay?.getDomRef()) {
19
+ //look for closest control
20
+ controlOverlay = OverlayUtil.getClosestOverlayFor(control);
21
+ }
22
+ if (controlOverlay) {
23
+ const runtimeControl = getRuntimeControl(controlOverlay);
24
+ const controlData = buildControlData(runtimeControl, changeService, controlOverlay);
25
+ const prop = controlData.properties.find((item) => item.isEnabled === true);
26
+ editable = prop !== undefined;
27
+ }
28
+ }
29
+ return editable;
30
+ };
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+
3
+ sap.ui.define(["sap/base/Log", "../../utils/core", "../../utils/error", "../utils", "./editable", "../../utils/fe-v4"], function (Log, ____utils_core, ____utils_error, ___utils, ___editable, ____utils_fe_v4) {
4
+ "use strict";
5
+
6
+ const getControlById = ____utils_core["getControlById"];
7
+ const getError = ____utils_error["getError"];
8
+ const getOverlay = ___utils["getOverlay"];
9
+ const isEditable = ___editable["isEditable"];
10
+ const getConfigMapControlIdMap = ____utils_fe_v4["getConfigMapControlIdMap"];
11
+ const getPageName = ____utils_fe_v4["getPageName"];
12
+ /**
13
+ * Retrieves additional data for a given control ID.
14
+ *
15
+ * @param id The unique identifier of the control.
16
+ * @returns An object containing the text and the technical name of the control.
17
+ */
18
+ function getAdditionalData(id) {
19
+ const control = getControlById(id);
20
+ if (!control) {
21
+ return {};
22
+ }
23
+ const metadata = control.getMetadata();
24
+ const details = {};
25
+ const technicalName = metadata.getElementName();
26
+ if (technicalName) {
27
+ details.technicalName = technicalName;
28
+ }
29
+ if (metadata.getProperty('text')) {
30
+ const text = control.getProperty('text');
31
+ if (typeof text === 'string' && text.trim() !== '') {
32
+ details.text = text;
33
+ }
34
+ }
35
+ return details;
36
+ }
37
+
38
+ /**
39
+ * Gets the children nodes of an aggregation type node.
40
+ *
41
+ * @param current The current node to retrieve children from
42
+ * @returns An array of children nodes, or an empty array if none are found
43
+ */
44
+ function getChildren(current) {
45
+ return (current.elements ?? []).flatMap(element => {
46
+ if (element.type === 'aggregation') {
47
+ return element.elements ?? [];
48
+ } else if (element.type === 'extensionPoint') {
49
+ return [element];
50
+ }
51
+ return [];
52
+ });
53
+ }
54
+
55
+ /**
56
+ * Adds a new child node to the extension point's children array based on the given control ID.
57
+ *
58
+ * @param {string} id - The unique identifier of the control to be added as a child node.
59
+ * @param {OutlineNode[]} children - The array of children nodes to which the new node will be added.
60
+ * @param {ChangeService} changeService - Change service for change stack event handling.
61
+ */
62
+ function addChildToExtensionPoint(id, children, changeService) {
63
+ const {
64
+ text,
65
+ technicalName
66
+ } = getAdditionalData(id);
67
+ const editable = isEditable(changeService, id);
68
+ children.push({
69
+ controlId: id,
70
+ controlType: technicalName ?? 'sap.ui.extensionpoint.child',
71
+ name: text ?? id,
72
+ visible: true,
73
+ editable,
74
+ children: [],
75
+ hasDefaultContent: false
76
+ });
77
+ }
78
+ /**
79
+ * Creates control index for all controls in the app.
80
+ *
81
+ * @param {ControlTreeIndex} controlIndex - Control index for the ui5 app.
82
+ * @param {OutlineNode} node - control node added to the outline.
83
+ */
84
+ function indexNode(controlIndex, node) {
85
+ const indexedControls = controlIndex[node.controlType];
86
+ if (indexedControls) {
87
+ indexedControls.push(node);
88
+ } else {
89
+ controlIndex[node.controlType] = [node];
90
+ }
91
+ }
92
+ function addToPropertyIdMap(node, propertyIdMap) {
93
+ const control = getControlById(node.controlId);
94
+ if (control) {
95
+ const overlay = getOverlay(control);
96
+ const overlayData = overlay?.getDesignTimeMetadata().getData();
97
+ if (!overlayData?.manifestPropertyPath) {
98
+ return;
99
+ }
100
+ if (overlayData) {
101
+ const path = overlayData?.manifestPropertyPath?.(control);
102
+ const pageName = getPageName(control);
103
+ const key = getConfigMapControlIdMap(pageName, path.split('/').filter(item => item));
104
+ if (key) {
105
+ if (!propertyIdMap.get(key)) {
106
+ propertyIdMap.set(key, []);
107
+ }
108
+ propertyIdMap.get(key)?.push(node.controlId);
109
+ }
110
+ }
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Transform node.
116
+ *
117
+ * @param input outline view node
118
+ * @param scenario type of project
119
+ * @param controlIndex Control tree index
120
+ * @param changeService ChangeService for change stack event handling.
121
+ * @param propertyIdMap ChangeService for change stack event handling.
122
+ * @returns transformed outline tree nodes
123
+ */
124
+ async function transformNodes(input, scenario, controlIndex, changeService, propertyIdMap) {
125
+ const stack = [...input];
126
+ const items = [];
127
+ while (stack.length) {
128
+ try {
129
+ const current = stack.shift();
130
+ const editable = isEditable(changeService, current?.id);
131
+ const isAdp = scenario === 'ADAPTATION_PROJECT';
132
+ const isExtPoint = current?.type === 'extensionPoint';
133
+ if (current?.type === 'element') {
134
+ const children = getChildren(current);
135
+ const {
136
+ text
137
+ } = getAdditionalData(current.id);
138
+ const technicalName = current.technicalName.split('.').slice(-1)[0];
139
+ const transformedChildren = isAdp ? await handleDuplicateNodes(children, scenario, controlIndex, changeService, propertyIdMap) : await transformNodes(children, scenario, controlIndex, changeService, propertyIdMap);
140
+ const node = {
141
+ controlId: current.id,
142
+ controlType: current.technicalName,
143
+ name: text ?? technicalName,
144
+ editable,
145
+ visible: current.visible ?? true,
146
+ children: transformedChildren
147
+ };
148
+ indexNode(controlIndex, node);
149
+ addToPropertyIdMap(node, propertyIdMap);
150
+ items.push(node);
151
+ }
152
+ if (isAdp && isExtPoint) {
153
+ const {
154
+ defaultContent = [],
155
+ createdControls = []
156
+ } = current.extensionPointInfo;
157
+ const children = [];
158
+ // We can combine both because there can only be either defaultContent or createdControls for one extension point node.
159
+ [...defaultContent, ...createdControls].forEach(id => {
160
+ addChildToExtensionPoint(id, children, changeService);
161
+ });
162
+ const node = {
163
+ controlId: `${current.id}--${current.name ?? ''}`,
164
+ controlType: current.technicalName,
165
+ name: current.name ?? '',
166
+ editable,
167
+ visible: current.visible ?? true,
168
+ children,
169
+ hasDefaultContent: defaultContent.length > 0
170
+ };
171
+ items.push(node);
172
+ }
173
+ } catch (error) {
174
+ Log.error('Failed to transform outline node!', getError(error));
175
+ }
176
+ }
177
+ return items;
178
+ }
179
+
180
+ /**
181
+ * Handles duplicate nodes that are retrieved from extension point default content and created controls,
182
+ * if they exist under an extension point these controls are removed from the children array
183
+ *
184
+ * @param children outline view node children
185
+ * @param scenario type of project
186
+ * @param controlIndex Control tree index
187
+ * @param changeService ChangeService for change stack event handling.
188
+ * @param propertyIdMap Map<string, string[]>.
189
+ * @returns transformed outline tree nodes
190
+ */
191
+ async function handleDuplicateNodes(children, scenario, controlIndex, changeService, propertyIdMap) {
192
+ const extPointIDs = new Set();
193
+ children.forEach(child => {
194
+ if (child.type === 'extensionPoint') {
195
+ const {
196
+ defaultContent = [],
197
+ createdControls = []
198
+ } = child.extensionPointInfo;
199
+ [...defaultContent, ...createdControls].forEach(id => extPointIDs.add(id));
200
+ }
201
+ });
202
+ const uniqueChildren = children.filter(child => !extPointIDs.has(child.id));
203
+ return transformNodes(uniqueChildren, scenario, controlIndex, changeService, propertyIdMap);
204
+ }
205
+ var __exports = {
206
+ __esModule: true
207
+ };
208
+ __exports.transformNodes = transformNodes;
209
+ __exports.handleDuplicateNodes = handleDuplicateNodes;
210
+ return __exports;
211
+ });
212
+ //# sourceMappingURL=nodes.js.map