@sap/ux-specification 1.142.2 → 1.142.4

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 (235) hide show
  1. package/CHANGELOG.md +117 -43
  2. package/dist/documentation/v2/v2-AnalyticalListPage.html +2 -2
  3. package/dist/documentation/v2/v2-ApplicationV2.html +2 -2
  4. package/dist/documentation/v2/v2-ListReport.html +2 -2
  5. package/dist/documentation/v2/v2-ListReportNew.html +2 -2
  6. package/dist/documentation/v2/v2-ObjectPage.html +2 -2
  7. package/dist/documentation/v2/v2-OverviewPage.html +2 -2
  8. package/dist/documentation/v4/v4-ApplicationV4.html +2 -2
  9. package/dist/documentation/v4/v4-BuildingBlocks.html +2 -2
  10. package/dist/documentation/v4/v4-FreestylePage.html +2 -2
  11. package/dist/documentation/v4/v4-ListReport.html +2 -2
  12. package/dist/documentation/v4/v4-ObjectPage.html +2 -2
  13. package/dist/index-min.js +288 -282
  14. package/dist/index-min.js.map +4 -4
  15. package/dist/schemas/v2/AnalyticalListPageConfig.json +3 -3
  16. package/dist/schemas/v2/ListReportConfig.json +5 -5
  17. package/dist/schemas/v2/ListReportNewConfig.json +1 -1
  18. package/dist/schemas/v2/ObjectPageConfig.json +5 -5
  19. package/dist/schemas/v4/ApplicationV4.json +1 -1
  20. package/dist/schemas/v4/BuildingBlocksConfig.json +128 -42
  21. package/dist/schemas/v4/ListReportConfig.json +24 -6
  22. package/dist/schemas/v4/ObjectPageConfig.json +32 -8
  23. package/dist/specification/package.json +14 -12
  24. package/dist/specification/scripts/extractDocu.js +18 -1
  25. package/dist/specification/scripts/extractDocu.js.map +1 -1
  26. package/dist/specification/scripts/generate-validity-report.d.ts +15 -0
  27. package/dist/specification/scripts/generate-validity-report.d.ts.map +1 -0
  28. package/dist/specification/scripts/generate-validity-report.js +367 -0
  29. package/dist/specification/scripts/generate-validity-report.js.map +1 -0
  30. package/dist/specification/scripts/macros/corrections.d.ts.map +1 -1
  31. package/dist/specification/scripts/macros/corrections.js +36 -1
  32. package/dist/specification/scripts/macros/corrections.js.map +1 -1
  33. package/dist/specification/scripts/macros/schema.d.ts.map +1 -1
  34. package/dist/specification/scripts/macros/schema.js +13 -0
  35. package/dist/specification/scripts/macros/schema.js.map +1 -1
  36. package/dist/specification/src/api.js +1 -1
  37. package/dist/specification/src/i18n/i18n.d.ts.map +1 -1
  38. package/dist/specification/src/i18n/i18n.js +2 -1
  39. package/dist/specification/src/i18n/i18n.js.map +1 -1
  40. package/dist/specification/src/sync/common/ManifestDrivenSchemaProcessor.d.ts +8 -1
  41. package/dist/specification/src/sync/common/ManifestDrivenSchemaProcessor.d.ts.map +1 -1
  42. package/dist/specification/src/sync/common/ManifestDrivenSchemaProcessor.js +10 -7
  43. package/dist/specification/src/sync/common/ManifestDrivenSchemaProcessor.js.map +1 -1
  44. package/dist/specification/src/sync/common/decoration/decorator-paths.d.ts +503 -0
  45. package/dist/specification/src/sync/common/decoration/decorator-paths.d.ts.map +1 -0
  46. package/dist/specification/src/sync/common/decoration/decorator-paths.js +497 -0
  47. package/dist/specification/src/sync/common/decoration/decorator-paths.js.map +1 -0
  48. package/dist/specification/src/sync/common/decoration/decorators.d.ts +116 -24
  49. package/dist/specification/src/sync/common/decoration/decorators.d.ts.map +1 -1
  50. package/dist/specification/src/sync/common/decoration/decorators.js +308 -78
  51. package/dist/specification/src/sync/common/decoration/decorators.js.map +1 -1
  52. package/dist/specification/src/sync/common/decoration/index.d.ts +1 -0
  53. package/dist/specification/src/sync/common/decoration/index.d.ts.map +1 -1
  54. package/dist/specification/src/sync/common/decoration/index.js +1 -0
  55. package/dist/specification/src/sync/common/decoration/index.js.map +1 -1
  56. package/dist/specification/src/sync/common/dist_tag.json +8 -3
  57. package/dist/specification/src/sync/common/generate/objectPage.d.ts.map +1 -1
  58. package/dist/specification/src/sync/common/generate/objectPage.js +3 -1
  59. package/dist/specification/src/sync/common/generate/objectPage.js.map +1 -1
  60. package/dist/specification/src/sync/common/i18n.json +2 -1
  61. package/dist/specification/src/sync/common/rules.d.ts +25 -0
  62. package/dist/specification/src/sync/common/rules.d.ts.map +1 -1
  63. package/dist/specification/src/sync/common/rules.js +27 -2
  64. package/dist/specification/src/sync/common/rules.js.map +1 -1
  65. package/dist/specification/src/sync/common/utils.d.ts +22 -6
  66. package/dist/specification/src/sync/common/utils.d.ts.map +1 -1
  67. package/dist/specification/src/sync/common/utils.js +122 -18
  68. package/dist/specification/src/sync/common/utils.js.map +1 -1
  69. package/dist/specification/src/sync/v2/generate/analyticalListReport.d.ts.map +1 -1
  70. package/dist/specification/src/sync/v2/generate/analyticalListReport.js +9 -7
  71. package/dist/specification/src/sync/v2/generate/analyticalListReport.js.map +1 -1
  72. package/dist/specification/src/sync/v2/generate/listReport.d.ts.map +1 -1
  73. package/dist/specification/src/sync/v2/generate/listReport.js +3 -1
  74. package/dist/specification/src/sync/v2/generate/listReport.js.map +1 -1
  75. package/dist/specification/src/sync/v2/generate/objectPage.d.ts.map +1 -1
  76. package/dist/specification/src/sync/v2/generate/objectPage.js +58 -2
  77. package/dist/specification/src/sync/v2/generate/objectPage.js.map +1 -1
  78. package/dist/specification/src/sync/v2/generate/overviewPage.d.ts +1 -9
  79. package/dist/specification/src/sync/v2/generate/overviewPage.d.ts.map +1 -1
  80. package/dist/specification/src/sync/v2/generate/overviewPage.js +30 -1
  81. package/dist/specification/src/sync/v2/generate/overviewPage.js.map +1 -1
  82. package/dist/specification/src/sync/v2/import/app/appProvider.d.ts.map +1 -1
  83. package/dist/specification/src/sync/v2/import/app/appProvider.js +2 -0
  84. package/dist/specification/src/sync/v2/import/app/appProvider.js.map +1 -1
  85. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.d.ts +2 -1
  86. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.d.ts.map +1 -1
  87. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.js +5 -0
  88. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.js.map +1 -1
  89. package/dist/specification/src/sync/v2/import/pages/listReport.d.ts +2 -1
  90. package/dist/specification/src/sync/v2/import/pages/listReport.d.ts.map +1 -1
  91. package/dist/specification/src/sync/v2/import/pages/listReport.js +5 -0
  92. package/dist/specification/src/sync/v2/import/pages/listReport.js.map +1 -1
  93. package/dist/specification/src/sync/v2/import/pages/objectPage.d.ts.map +1 -1
  94. package/dist/specification/src/sync/v2/import/pages/objectPage.js +2 -1
  95. package/dist/specification/src/sync/v2/import/pages/objectPage.js.map +1 -1
  96. package/dist/specification/src/sync/v2/import/utils.d.ts +28 -1
  97. package/dist/specification/src/sync/v2/import/utils.d.ts.map +1 -1
  98. package/dist/specification/src/sync/v2/import/utils.js +37 -0
  99. package/dist/specification/src/sync/v2/import/utils.js.map +1 -1
  100. package/dist/specification/src/sync/v2/utils.d.ts +12 -2
  101. package/dist/specification/src/sync/v2/utils.d.ts.map +1 -1
  102. package/dist/specification/src/sync/v2/utils.js +19 -2
  103. package/dist/specification/src/sync/v2/utils.js.map +1 -1
  104. package/dist/specification/src/sync/v4/application.d.ts +31 -2
  105. package/dist/specification/src/sync/v4/application.d.ts.map +1 -1
  106. package/dist/specification/src/sync/v4/application.js +44 -4
  107. package/dist/specification/src/sync/v4/application.js.map +1 -1
  108. package/dist/specification/src/sync/v4/export/controls/FilterBar.d.ts +2 -1
  109. package/dist/specification/src/sync/v4/export/controls/FilterBar.d.ts.map +1 -1
  110. package/dist/specification/src/sync/v4/export/controls/FilterBar.js +2 -1
  111. package/dist/specification/src/sync/v4/export/controls/FilterBar.js.map +1 -1
  112. package/dist/specification/src/sync/v4/export/controls/Header.d.ts +4 -3
  113. package/dist/specification/src/sync/v4/export/controls/Header.d.ts.map +1 -1
  114. package/dist/specification/src/sync/v4/export/controls/Header.js +7 -3
  115. package/dist/specification/src/sync/v4/export/controls/Header.js.map +1 -1
  116. package/dist/specification/src/sync/v4/export/controls/HeaderAction.d.ts +2 -1
  117. package/dist/specification/src/sync/v4/export/controls/HeaderAction.d.ts.map +1 -1
  118. package/dist/specification/src/sync/v4/export/controls/HeaderAction.js +7 -0
  119. package/dist/specification/src/sync/v4/export/controls/HeaderAction.js.map +1 -1
  120. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.d.ts +2 -1
  121. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.d.ts.map +1 -1
  122. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.js +2 -1
  123. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.js.map +1 -1
  124. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.d.ts +1 -1
  125. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.d.ts.map +1 -1
  126. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.js +0 -13
  127. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.js.map +1 -1
  128. package/dist/specification/src/sync/v4/export/controls/Table.d.ts +32 -17
  129. package/dist/specification/src/sync/v4/export/controls/Table.d.ts.map +1 -1
  130. package/dist/specification/src/sync/v4/export/controls/Table.js +90 -60
  131. package/dist/specification/src/sync/v4/export/controls/Table.js.map +1 -1
  132. package/dist/specification/src/sync/v4/export/controls/TableColumn.d.ts.map +1 -1
  133. package/dist/specification/src/sync/v4/export/controls/TableColumn.js +2 -2
  134. package/dist/specification/src/sync/v4/export/controls/TableColumn.js.map +1 -1
  135. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.d.ts +2 -1
  136. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.d.ts.map +1 -1
  137. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.js +4 -3
  138. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.js.map +1 -1
  139. package/dist/specification/src/sync/v4/export/export.d.ts.map +1 -1
  140. package/dist/specification/src/sync/v4/export/export.js +25 -3
  141. package/dist/specification/src/sync/v4/export/export.js.map +1 -1
  142. package/dist/specification/src/sync/v4/export/pages/ListReport.js +1 -1
  143. package/dist/specification/src/sync/v4/export/pages/ListReport.js.map +1 -1
  144. package/dist/specification/src/sync/v4/generate/actions.d.ts +1 -1
  145. package/dist/specification/src/sync/v4/generate/actions.d.ts.map +1 -1
  146. package/dist/specification/src/sync/v4/generate/fpm-custom-page/annotations.d.ts.map +1 -1
  147. package/dist/specification/src/sync/v4/generate/fpm-custom-page/annotations.js +20 -12
  148. package/dist/specification/src/sync/v4/generate/fpm-custom-page/annotations.js.map +1 -1
  149. package/dist/specification/src/sync/v4/generate/fpm-custom-page/utils.d.ts.map +1 -1
  150. package/dist/specification/src/sync/v4/generate/fpm-custom-page/utils.js +10 -1
  151. package/dist/specification/src/sync/v4/generate/fpm-custom-page/utils.js.map +1 -1
  152. package/dist/specification/src/sync/v4/generate/index.d.ts +1 -1
  153. package/dist/specification/src/sync/v4/generate/index.d.ts.map +1 -1
  154. package/dist/specification/src/sync/v4/generate/index.js +1 -1
  155. package/dist/specification/src/sync/v4/generate/index.js.map +1 -1
  156. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.d.ts +73 -0
  157. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.d.ts.map +1 -0
  158. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.js +354 -0
  159. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.js.map +1 -0
  160. package/dist/specification/src/sync/v4/generate/{listReport.d.ts → list-report/listReport.d.ts} +27 -16
  161. package/dist/specification/src/sync/v4/generate/list-report/listReport.d.ts.map +1 -0
  162. package/dist/specification/src/sync/v4/generate/{listReport.js → list-report/listReport.js} +194 -164
  163. package/dist/specification/src/sync/v4/generate/list-report/listReport.js.map +1 -0
  164. package/dist/specification/src/sync/v4/generate/objectPage.d.ts.map +1 -1
  165. package/dist/specification/src/sync/v4/generate/objectPage.js +145 -44
  166. package/dist/specification/src/sync/v4/generate/objectPage.js.map +1 -1
  167. package/dist/specification/src/sync/v4/import/pages/listReport.d.ts.map +1 -1
  168. package/dist/specification/src/sync/v4/import/pages/listReport.js +2 -1
  169. package/dist/specification/src/sync/v4/import/pages/listReport.js.map +1 -1
  170. package/dist/specification/src/sync/v4/import/utils.js +5 -3
  171. package/dist/specification/src/sync/v4/import/utils.js.map +1 -1
  172. package/dist/specification/src/sync/v4/sync-rules/App.d.ts +9 -7
  173. package/dist/specification/src/sync/v4/sync-rules/App.d.ts.map +1 -1
  174. package/dist/specification/src/sync/v4/sync-rules/App.js +4 -8
  175. package/dist/specification/src/sync/v4/sync-rules/App.js.map +1 -1
  176. package/dist/specification/src/sync/v4/sync-rules/AppSchema.d.ts +2 -9
  177. package/dist/specification/src/sync/v4/sync-rules/AppSchema.d.ts.map +1 -1
  178. package/dist/specification/src/sync/v4/sync-rules/AppSchema.js +2 -11
  179. package/dist/specification/src/sync/v4/sync-rules/AppSchema.js.map +1 -1
  180. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.d.ts +219 -96
  181. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.d.ts.map +1 -1
  182. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.js +557 -211
  183. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.js.map +1 -1
  184. package/dist/specification/src/sync/v4/sync-rules/Page.d.ts +17 -22
  185. package/dist/specification/src/sync/v4/sync-rules/Page.d.ts.map +1 -1
  186. package/dist/specification/src/sync/v4/sync-rules/Page.js +15 -22
  187. package/dist/specification/src/sync/v4/sync-rules/Page.js.map +1 -1
  188. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.d.ts +1 -0
  189. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.d.ts.map +1 -1
  190. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.js +17 -9
  191. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.js.map +1 -1
  192. package/dist/specification/src/sync/v4/sync-rules/index.d.ts +5 -0
  193. package/dist/specification/src/sync/v4/sync-rules/index.d.ts.map +1 -0
  194. package/dist/specification/src/sync/v4/sync-rules/index.js +21 -0
  195. package/dist/specification/src/sync/v4/sync-rules/index.js.map +1 -0
  196. package/dist/specification/src/sync/v4/sync-rules/utils.d.ts.map +1 -1
  197. package/dist/specification/src/sync/v4/sync-rules/utils.js +4 -0
  198. package/dist/specification/src/sync/v4/sync-rules/utils.js.map +1 -1
  199. package/dist/specification/src/sync/v4/utils/index.d.ts +2 -0
  200. package/dist/specification/src/sync/v4/utils/index.d.ts.map +1 -0
  201. package/dist/specification/src/sync/v4/utils/index.js +18 -0
  202. package/dist/specification/src/sync/v4/utils/index.js.map +1 -0
  203. package/dist/specification/src/sync/v4/utils/utils.d.ts +9 -1
  204. package/dist/specification/src/sync/v4/utils/utils.d.ts.map +1 -1
  205. package/dist/specification/src/sync/v4/utils/utils.js +17 -2
  206. package/dist/specification/src/sync/v4/utils/utils.js.map +1 -1
  207. package/dist/specification/test/test-projects/v2sttaProdMan2/webapp/manifest.json +550 -0
  208. package/dist/specification/test/test-projects/v4new/webapp/manifest.json +147 -0
  209. package/dist/specification/test/test-utils/utils.d.ts +71 -0
  210. package/dist/specification/test/test-utils/utils.d.ts.map +1 -0
  211. package/dist/specification/test/test-utils/utils.js +400 -0
  212. package/dist/specification/test/test-utils/utils.js.map +1 -0
  213. package/dist/specification/test/unit/decorators/validity-test-utils.d.ts +131 -0
  214. package/dist/specification/test/unit/decorators/validity-test-utils.d.ts.map +1 -0
  215. package/dist/specification/test/unit/decorators/validity-test-utils.js +661 -0
  216. package/dist/specification/test/unit/decorators/validity-test-utils.js.map +1 -0
  217. package/dist/types/src/apiTypes.d.ts +2 -3
  218. package/dist/types/src/apiTypes.d.ts.map +1 -1
  219. package/dist/types/src/apiTypes.js.map +1 -1
  220. package/dist/types/src/common/types.d.ts +119 -13
  221. package/dist/types/src/common/types.d.ts.map +1 -1
  222. package/dist/types/src/common/types.js.map +1 -1
  223. package/dist/types/src/v2/controls/ObjectPageTable.d.ts +1 -1
  224. package/dist/types/src/v2/controls/Table.d.ts +1 -1
  225. package/dist/types/src/v4/controls/ObjectPageTable.d.ts +1 -1
  226. package/dist/types/src/v4/controls/ObjectPageTable.d.ts.map +1 -1
  227. package/dist/types/src/v4/controls/Table.d.ts +3 -3
  228. package/dist/types/src/v4/controls/Table.d.ts.map +1 -1
  229. package/package.json +14 -12
  230. package/dist/specification/src/sync/v4/generate/ListReportUtils.d.ts +0 -107
  231. package/dist/specification/src/sync/v4/generate/ListReportUtils.d.ts.map +0 -1
  232. package/dist/specification/src/sync/v4/generate/ListReportUtils.js +0 -394
  233. package/dist/specification/src/sync/v4/generate/ListReportUtils.js.map +0 -1
  234. package/dist/specification/src/sync/v4/generate/listReport.d.ts.map +0 -1
  235. package/dist/specification/src/sync/v4/generate/listReport.js.map +0 -1
@@ -0,0 +1,497 @@
1
+ "use strict";
2
+ /**
3
+ * Type-safe path builders and condition helpers for decorator conditions.
4
+ *
5
+ * This module provides:
6
+ *
7
+ * ## Context Sources
8
+ * - **`app`**: App-level configuration (auto-injected from `app.config`)
9
+ * - **`page`**: Page-level configuration (auto-injected from `page.config`)
10
+ * - **`custom`**: Custom context (provided via `init()`)
11
+ *
12
+ * ## Utilities
13
+ * - **Path builders**: Type-safe property access for `app`, `page`, and `custom` contexts
14
+ * - **Condition helpers**: `when()`, `not()`, `and()`, `or()` for building conditions
15
+ * - **Message helper**: `msg()` for i18n-based messages
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * import { page, custom, when, not, and, or, msg } from './decorator-paths';
20
+ *
21
+ * class MyTable extends Decorator {
22
+ * // Truthy check - hide when value is falsy
23
+ * @hide(page.isALP)
24
+ * alpOnlyField: string;
25
+ *
26
+ * // Equality check with when() - hide when type IS GridTable
27
+ * @hide(when(page.type, 'GridTable'))
28
+ * gridField: string;
29
+ *
30
+ * // Negation with not() - hide when type is NOT TreeTable
31
+ * @hide(not(page.type, 'TreeTable'))
32
+ * treeOnlyField: string;
33
+ *
34
+ * // AND conditions
35
+ * @hide(and(page.isALP, when(page.type, 'GridTable')))
36
+ * alpGridField: string;
37
+ *
38
+ * // OR conditions
39
+ * @hide(or(when(page.actionType, 'Bound'), when(page.actionType, 'Custom')))
40
+ * actionField: string;
41
+ *
42
+ * // Message with i18n
43
+ * @message(page.betaFeature, msg('BETA_WARNING', { feature: 'table' }))
44
+ * betaField: string;
45
+ *
46
+ * // Always hide
47
+ * @hide(true)
48
+ * internalField: string;
49
+ * }
50
+ * ```
51
+ */
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.MSG_SYMBOL = exports.NOT_SYMBOL = exports.WHEN_SYMBOL = exports.tableContext = exports.custom = exports.page = exports.app = exports.PATH_SYMBOL = void 0;
54
+ exports.getPath = getPath;
55
+ exports.isPathNode = isPathNode;
56
+ exports.isWhenCondition = isWhenCondition;
57
+ exports.when = when;
58
+ exports.isNotCondition = isNotCondition;
59
+ exports.not = not;
60
+ exports.exists = exists;
61
+ exports.isMessageConfig = isMessageConfig;
62
+ exports.msg = msg;
63
+ exports.and = and;
64
+ exports.or = or;
65
+ exports.isAndCondition = isAndCondition;
66
+ exports.isOrCondition = isOrCondition;
67
+ exports.isConditionGroup = isConditionGroup;
68
+ exports.isOrConditionGroup = isOrConditionGroup;
69
+ exports.isAndConditionGroup = isAndConditionGroup;
70
+ // ============================================
71
+ // PATH NODE INFRASTRUCTURE
72
+ // ============================================
73
+ /**
74
+ * Symbol used to store the path string within PathNode objects.
75
+ * This allows the decorator to extract the path at runtime.
76
+ *
77
+ * Using Symbol.for() creates a global symbol that persists across module loads,
78
+ * ensuring isPathNode() works correctly even when the module is loaded multiple times.
79
+ */
80
+ exports.PATH_SYMBOL = Symbol.for('decorator:pathNode');
81
+ /**
82
+ * Creates a type-safe path builder for a given context shape.
83
+ * Uses JavaScript Proxy to dynamically build paths with full TypeScript support.
84
+ *
85
+ * @template T - The shape type defining available properties
86
+ * @param prefix - The root prefix for all paths (e.g., 'app', 'page', 'custom')
87
+ * @returns A proxy object that builds typed paths
88
+ * @example
89
+ * ```typescript
90
+ * type MyShape = { enabled: boolean; settings: { mode: string } };
91
+ * const my = createPathBuilder<MyShape>('my');
92
+ *
93
+ * my.enabled[PATH_SYMBOL] // 'my.enabled'
94
+ * my.settings.mode[PATH_SYMBOL] // 'my.settings.mode'
95
+ * ```
96
+ */
97
+ function createPathBuilder(prefix) {
98
+ const handler = {
99
+ get(_, prop) {
100
+ if (prop === exports.PATH_SYMBOL) {
101
+ return prefix;
102
+ }
103
+ if (typeof prop === 'string') {
104
+ return createPathBuilder(`${prefix}.${prop}`);
105
+ }
106
+ return undefined;
107
+ },
108
+ // Add 'has' trap to make 'in' operator work with PathNode check
109
+ has(_, prop) {
110
+ return prop === exports.PATH_SYMBOL;
111
+ }
112
+ };
113
+ return new Proxy({}, handler);
114
+ }
115
+ /**
116
+ * Extracts the path string from a PathNode.
117
+ *
118
+ * @template P - The string literal type of the path
119
+ * @param node - The PathNode to extract the path from
120
+ * @returns The path string
121
+ * @example
122
+ * ```typescript
123
+ * getPath(page.isALP) // Returns: 'page.isALP'
124
+ * getPath(app.manifest) // Returns: 'app.manifest'
125
+ * ```
126
+ */
127
+ function getPath(node) {
128
+ return node[exports.PATH_SYMBOL];
129
+ }
130
+ /**
131
+ * Type guard to check if a value is a PathNode.
132
+ *
133
+ * @param value - The value to check
134
+ * @returns True if the value is a PathNode
135
+ */
136
+ function isPathNode(value) {
137
+ return typeof value === 'object' && value !== null && exports.PATH_SYMBOL in value;
138
+ }
139
+ // ============================================
140
+ // PATH BUILDER EXPORTS
141
+ // ============================================
142
+ /**
143
+ * Path builder for app.config properties.
144
+ *
145
+ * This context is **auto-injected** from `app.config` - you do not need to
146
+ * provide it in the customContext parameter of `init()`.
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * // Access manifest properties
151
+ * @hide(when(app.manifest['sap.app'].id, 'some-app-id'))
152
+ * ```
153
+ */
154
+ exports.app = createPathBuilder('app');
155
+ /**
156
+ * Path builder for page.config properties.
157
+ *
158
+ * This context is **auto-injected** from `page.config` - you do not need to
159
+ * provide it in the customContext parameter of `init()`.
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * // Simple truthy check
164
+ * @hide(page.isALP)
165
+ *
166
+ * // Equality check with when()
167
+ * @hide(when(page.isALP, true))
168
+ * @hide(when(page.visualization, 'Chart'))
169
+ *
170
+ * // Nested property
171
+ * @hide(when(page.settings.enabled, false))
172
+ * ```
173
+ */
174
+ exports.page = createPathBuilder('page');
175
+ /**
176
+ * Path builder for custom context properties.
177
+ *
178
+ * This context **must be provided** in the customContext parameter of `init()`.
179
+ * Use this for runtime-specific conditions like table state, section state, etc.
180
+ *
181
+ * **Note**: For table-specific decorators, prefer using `tableContext` which provides
182
+ * full type safety for table properties.
183
+ *
184
+ * @example
185
+ * ```typescript
186
+ * // In decorator
187
+ * @hide(when(custom.table.type, 'ResponsiveTable'))
188
+ * @hide(when(custom.table.views, (views) => views.length > 0))
189
+ *
190
+ * // In init
191
+ * decorator.init({
192
+ * table: { type: 'GridTable', views: [] }
193
+ * });
194
+ * ```
195
+ */
196
+ exports.custom = createPathBuilder('custom');
197
+ /**
198
+ * Type-safe path builder for table decorator context.
199
+ *
200
+ * This context **must be provided** in the customContext parameter of `init()`.
201
+ * Use this for table-specific conditions in List Report table decorators.
202
+ *
203
+ * Properties are accessed directly without nesting (e.g., `tableContext.type` not `tableContext.table.type`).
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * // In decorator - with full type safety
208
+ * @hide(when(tableContext.type, 'AnalyticalTable'))
209
+ * @hide(not(tableContext.type, 'TreeTable'))
210
+ * @hide(when(tableContext.creationMode, (cm) => cm?.name === 'CreationDialog'))
211
+ *
212
+ * // In init - provide flat context object
213
+ * decorator.init({
214
+ * type: 'GridTable',
215
+ * creationMode: { name: 'NewPage' },
216
+ * analyticalConfiguration: undefined,
217
+ * popinLayout: undefined
218
+ * });
219
+ * ```
220
+ */
221
+ exports.tableContext = createPathBuilder('custom');
222
+ // ============================================
223
+ // WHEN CONDITION HELPER
224
+ // ============================================
225
+ /**
226
+ * Symbol used to identify WhenCondition objects.
227
+ */
228
+ exports.WHEN_SYMBOL = Symbol.for('decorator:when');
229
+ /**
230
+ * Type guard to check if a value is a WhenCondition.
231
+ *
232
+ * @param value - The value to check
233
+ * @returns True if value is a WhenCondition
234
+ */
235
+ function isWhenCondition(value) {
236
+ return typeof value === 'object' && value !== null && exports.WHEN_SYMBOL in value;
237
+ }
238
+ /**
239
+ * Creates a condition that checks if a path's value matches an expected value or function.
240
+ *
241
+ * @param path - The PathNode to check
242
+ * @param expected - The expected value or a function that receives the value and returns boolean
243
+ * @returns A WhenCondition object
244
+ * @example
245
+ * ```typescript
246
+ * // Equality check
247
+ * @hide(when(page.type, 'GridTable'))
248
+ *
249
+ * // Custom function (e.g., negation)
250
+ * @hide(when(page.type, (type) => type !== 'GridTable'))
251
+ *
252
+ * // Check array length
253
+ * @hide(when(custom.table.views, (views) => views?.length === 0))
254
+ *
255
+ * // Numeric comparison
256
+ * @hide(when(page.count, (count) => count > 10))
257
+ * ```
258
+ */
259
+ function when(path, expected) {
260
+ return {
261
+ [exports.WHEN_SYMBOL]: true,
262
+ path,
263
+ expected
264
+ };
265
+ }
266
+ // ============================================
267
+ // NOT CONDITION HELPER
268
+ // ============================================
269
+ /**
270
+ * Symbol used to identify NotCondition objects.
271
+ */
272
+ exports.NOT_SYMBOL = Symbol.for('decorator:not');
273
+ /**
274
+ * Type guard to check if a value is a NotCondition.
275
+ *
276
+ * @param value - The value to check
277
+ * @returns True if value is a NotCondition
278
+ */
279
+ function isNotCondition(value) {
280
+ return typeof value === 'object' && value !== null && exports.NOT_SYMBOL in value;
281
+ }
282
+ /**
283
+ * Creates a negated condition that checks if a path's value does not match an expected value or function.
284
+ * This is the opposite of `when()`. While `when(path, value)` passes when value === expected,
285
+ * `not(path, value)` passes when value !== expected.
286
+ *
287
+ * Can also invert a WhenCondition created by `when()` or `exists()`.
288
+ *
289
+ * @param pathOrCondition - The PathNode to check or a WhenCondition to invert
290
+ * @param expected - Optional: The expected value or a function that receives the value and returns boolean
291
+ * @returns A NotCondition object
292
+ * @example
293
+ * ```typescript
294
+ * // Falsy check - hide when value is falsy
295
+ * @hide(not(page.enabled))
296
+ *
297
+ * // Inequality check - hide when type is NOT TreeTable
298
+ * @hide(not(page.type, 'TreeTable'))
299
+ *
300
+ * // Custom function negation - hide when function returns false
301
+ * @hide(not(custom.settings, (s) => s?.enabled === true))
302
+ *
303
+ * // Invert exists() - hide when value does NOT exist
304
+ * @hide(not(exists(tableContext.creationMode)))
305
+ *
306
+ * // Combined with and() - hide when BOTH conditions are met
307
+ * @hide(and(not(page.type, 'TreeTable'), page.isEnabled))
308
+ * ```
309
+ */
310
+ function not(pathOrCondition, expected) {
311
+ // If first argument is a WhenCondition, extract its path and expected WITHOUT inverting
312
+ // The negate flag will handle inversion later in conditionToSingle
313
+ if (isWhenCondition(pathOrCondition)) {
314
+ const condition = pathOrCondition;
315
+ return {
316
+ [exports.NOT_SYMBOL]: true,
317
+ path: condition.path,
318
+ expected: condition.expected // Pass through without inversion - negate flag handles it
319
+ };
320
+ }
321
+ // Normal case: path + optional expected
322
+ return {
323
+ [exports.NOT_SYMBOL]: true,
324
+ path: pathOrCondition,
325
+ expected
326
+ };
327
+ }
328
+ // ============================================
329
+ // EXISTS HELPER
330
+ // ============================================
331
+ /**
332
+ * Creates a condition that checks if a path's value exists (is not undefined).
333
+ * This is a semantic shorthand for `when(path, (value) => value !== undefined)`.
334
+ *
335
+ * @param path - The PathNode to check for existence
336
+ * @returns A WhenCondition that checks for defined value
337
+ * @example
338
+ * ```typescript
339
+ * // Check if property exists - show message only when value is set
340
+ * @message(
341
+ * and(
342
+ * not(tableContext.type, 'AnalyticalTable'),
343
+ * exists(tableContext.analyticalConfiguration.aggregationOnLeafLevel)
344
+ * ),
345
+ * msg('PROPERTY_NOT_ALLOWED')
346
+ * )
347
+ *
348
+ * // Can be negated with not() - though typically just use truthy check
349
+ * @hide(not(exists(tableContext.creationMode)))
350
+ * ```
351
+ */
352
+ function exists(path) {
353
+ return when(path, (value) => value !== undefined);
354
+ }
355
+ // ============================================
356
+ // MESSAGE HELPER
357
+ // ============================================
358
+ /**
359
+ * Symbol used to identify MessageConfig objects.
360
+ */
361
+ exports.MSG_SYMBOL = Symbol.for('decorator:msg');
362
+ /**
363
+ * Type guard to check if a value is a MessageConfig.
364
+ *
365
+ * @param value - The value to check
366
+ * @returns True if value is a MessageConfig
367
+ */
368
+ function isMessageConfig(value) {
369
+ return typeof value === 'object' && value !== null && exports.MSG_SYMBOL in value;
370
+ }
371
+ /**
372
+ * Creates an i18n message configuration for use with the `@message` decorator.
373
+ *
374
+ * @param i18nKey - The i18n translation key
375
+ * @param params - Optional parameters to pass to the translation function.
376
+ * Values can be static or PathNode references for dynamic resolution.
377
+ * @param options - Optional configuration
378
+ * @param options.deletable - Whether the message can be dismissed/deleted in the UI (default: false)
379
+ * @returns A MessageConfig object
380
+ * @example
381
+ * ```typescript
382
+ * // Simple message
383
+ * @message(page.betaFeature, msg('BETA_WARNING'))
384
+ *
385
+ * // Message with static parameters
386
+ * @message(when(page.type, 'GridTable'), msg('TABLE_WARNING', { type: 'GridTable' }))
387
+ *
388
+ * // Message with dynamic parameters (resolved from context at runtime)
389
+ * @message(condition, msg('TABLE_WARNING', { tableType: tableContext.table.type }))
390
+ *
391
+ * // Deletable message
392
+ * @message(page.deprecated, msg('DEPRECATED', { since: '1.96' }, { deletable: true }))
393
+ * ```
394
+ */
395
+ function msg(i18nKey, params, options) {
396
+ return {
397
+ [exports.MSG_SYMBOL]: true,
398
+ i18nKey,
399
+ params,
400
+ deletable: options?.deletable ?? false
401
+ };
402
+ }
403
+ // ============================================
404
+ // CONDITION HELPER FUNCTIONS
405
+ // ============================================
406
+ /**
407
+ * Creates an AND condition group where ALL conditions must be met.
408
+ *
409
+ * @param conditions - Conditions to combine (PathNode for truthy, WhenCondition for value check)
410
+ * @returns An AndCondition object for use with decorators
411
+ * @example
412
+ * ```typescript
413
+ * // Both must be truthy
414
+ * @hide(and(page.isALP, page.isMultiView))
415
+ *
416
+ * // Mixed truthy and value checks
417
+ * @hide(and(page.isALP, when(page.type, 'GridTable')))
418
+ *
419
+ * // Multiple value checks
420
+ * @hide(and(when(page.isALP, true), when(page.isMultiView, true)))
421
+ * ```
422
+ */
423
+ function and(...conditions) {
424
+ return {
425
+ __type: 'and',
426
+ conditions
427
+ };
428
+ }
429
+ /**
430
+ * Creates an OR condition group where AT LEAST ONE condition must be met.
431
+ *
432
+ * @param conditions - Conditions to combine (PathNode for truthy, WhenCondition for value check)
433
+ * @returns An OrCondition object for use with decorators
434
+ * @example
435
+ * ```typescript
436
+ * // Either must be truthy
437
+ * @hide(or(page.isALP, page.isOVP))
438
+ *
439
+ * // Either value must match
440
+ * @hide(or(when(page.actionType, 'Bound'), when(page.actionType, 'Custom')))
441
+ * ```
442
+ */
443
+ function or(...conditions) {
444
+ return {
445
+ __type: 'or',
446
+ conditions
447
+ };
448
+ }
449
+ /**
450
+ * Type guard to check if a value is an AndCondition.
451
+ *
452
+ * @param value - The value to check
453
+ * @returns True if value is an AndCondition
454
+ */
455
+ function isAndCondition(value) {
456
+ return typeof value === 'object' && value !== null && value.__type === 'and';
457
+ }
458
+ /**
459
+ * Type guard to check if a value is an OrCondition.
460
+ *
461
+ * @param value - The value to check
462
+ * @returns True if value is an OrCondition
463
+ */
464
+ function isOrCondition(value) {
465
+ return typeof value === 'object' && value !== null && value.__type === 'or';
466
+ }
467
+ /**
468
+ * Type guard to check if a value is a ConditionGroup (and or or).
469
+ *
470
+ * @param value - The value to check
471
+ * @returns True if value is a ConditionGroup
472
+ */
473
+ function isConditionGroup(value) {
474
+ return isAndCondition(value) || isOrCondition(value);
475
+ }
476
+ // ============================================
477
+ // NESTED CONDITION TYPE GUARDS
478
+ // ============================================
479
+ /**
480
+ * Type guard to check if an AND condition item is a nested OR group.
481
+ *
482
+ * @param item - The condition item to check
483
+ * @returns True if item is an OrConditionGroup
484
+ */
485
+ function isOrConditionGroup(item) {
486
+ return item !== null && typeof item === 'object' && '__orConditions' in item;
487
+ }
488
+ /**
489
+ * Type guard to check if an OR condition item is a nested AND group.
490
+ *
491
+ * @param item - The condition item to check
492
+ * @returns True if item is an AndConditionGroup
493
+ */
494
+ function isAndConditionGroup(item) {
495
+ return item !== null && typeof item === 'object' && '__andConditions' in item;
496
+ }
497
+ //# sourceMappingURL=decorator-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator-paths.js","sourceRoot":"","sources":["../../../../../../src/sync/common/decoration/decorator-paths.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,19 @@
1
1
  import 'reflect-metadata';
2
- import type { SyncRule, PageLayoutInformation, ValidityInformation, SyncRuleProvider, Validity, BooleanCondition, DependsOnCondition, DependsOnMessage, MultiDependsOnCondition } from '@sap/ux-specification-types';
2
+ import type { SyncRule, PageLayoutInformation, ValidityInformation, SyncRuleProvider, Validity, DependsOnCondition } from '@sap/ux-specification-types';
3
+ import { type ConditionInput, type MessageConfig } from './decorator-paths';
4
+ /**
5
+ * Metadata keys for schema post-processing.
6
+ * Used by decorators to store metadata that is processed during schema generation.
7
+ */
3
8
  export declare const metadataKeys: {
4
9
  description: symbol;
5
- hidden: symbol;
6
10
  isViewNode: symbol;
7
11
  syncRule: symbol;
8
- dependsOn: symbol;
9
12
  validity: symbol;
13
+ hide: symbol;
14
+ message: symbol;
15
+ readonly: symbol;
16
+ enums: symbol;
10
17
  };
11
18
  export declare const syncRule: (propSpec: SyncRule) => any;
12
19
  /**
@@ -54,39 +61,124 @@ export declare function isViewNode(target: Function): void;
54
61
  */
55
62
  export declare function description(text: string): (target: Function) => void;
56
63
  /**
57
- * Decorator to conditionally hide a property in the schema based on a condition function.
58
- * The condition function is evaluated during schema generation with the appropriate context.
64
+ * Internal metadata structure stored by decorators.
65
+ * Extends DependsOnCondition with optional message configuration.
66
+ */
67
+ export interface DecoratorMetadata extends DependsOnCondition {
68
+ messageConfig?: MessageConfig;
69
+ }
70
+ /**
71
+ * Decorator to conditionally hide a property based on conditions.
72
+ * The property will be hidden when the condition(s) ARE met.
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * import { page, custom, when, and, or } from './decorator-paths';
77
+ *
78
+ * // Truthy check - hide when page.isALP is truthy
79
+ * @hide(page.isALP)
80
+ *
81
+ * // Equality check - hide when page.type === 'GridTable'
82
+ * @hide(when(page.type, 'GridTable'))
59
83
  *
60
- * @param condition - A function that takes context and returns boolean indicating if property should be hidden
61
- * @returns PropertyDecorator or ClassDecorator depending on usage
84
+ * // Custom function - hide when function returns true (type !== 'GridTable')
85
+ * @hide(when(page.type, (type) => type !== 'GridTable'))
86
+ *
87
+ * // Always hide
88
+ * @hide(true)
89
+ *
90
+ * // AND logic - hide when isALP is truthy AND type === 'GridTable'
91
+ * @hide(and(page.isALP, when(page.type, 'GridTable')))
92
+ *
93
+ * // OR logic - hide when actionType === 'Bound' OR actionType === 'Custom'
94
+ * @hide(or(when(page.actionType, 'Bound'), when(page.actionType, 'Custom')))
95
+ * ```
96
+ * @param condition - The condition to evaluate
97
+ * @returns PropertyDecorator
62
98
  */
63
- export declare function hidden(condition?: BooleanCondition): PropertyDecorator & ClassDecorator;
99
+ export declare function hide(condition: ConditionInput): PropertyDecorator;
64
100
  /**
65
- * Helper function to create a DependsOnMessage object.
101
+ * Decorator to conditionally display a message based on conditions.
102
+ * A message will be shown when the condition(s) are met.
103
+ * Multiple @message decorators can be applied to the same property - all matching conditions will show their messages.
104
+ *
105
+ * @param condition - The condition to evaluate
106
+ * @param messageConfig - The message configuration (use msg() helper)
107
+ * @returns PropertyDecorator
108
+ * @example
109
+ * ```typescript
110
+ * import { page, when, msg } from './decorator-paths';
111
+ *
112
+ * // Simple message
113
+ * @message(page.betaFeature, msg('BETA_WARNING'))
66
114
  *
67
- * @param text - The message text (can be true for default i18n message, a string, or a function)
68
- * @param deletable - Whether the message can be deleted/dismissed in the UI
69
- * @returns A DependsOnMessage object
115
+ * // Message with parameters
116
+ * @message(when(page.type, 'GridTable'), msg('TABLE_WARNING', { type: 'GridTable' }))
117
+ *
118
+ * // Deletable message
119
+ * @message(page.deprecated, msg('DEPRECATED', { since: '1.96' }, { deletable: true }))
120
+ *
121
+ * // With AND/OR conditions
122
+ * @message(and(page.isALP, when(page.type, 'GridTable')), msg('ALP_GRID_INFO'))
123
+ *
124
+ * // Multiple messages on same property
125
+ * @message(when(page.type, 'AnalyticalTable'), msg('ANALYTICAL_WARNING'))
126
+ * @message(when(page.mode, 'edit'), msg('EDIT_MODE_WARNING'))
127
+ * ```
70
128
  */
71
- export declare const dependsOnMessage: (text?: DependsOnMessage["text"], deletable?: boolean) => DependsOnMessage;
129
+ export declare function message(condition: ConditionInput, messageConfig: MessageConfig): PropertyDecorator;
72
130
  /**
73
- * Decorator to conditionally show/hide a property based on one or more property values.
74
- * The decorated property will be hidden if the dependency condition(s) are not met.
131
+ * Decorator to conditionally mark a property as readonly based on conditions.
132
+ * The property will be readonly when the condition(s) are met.
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * import { page, custom, when } from './decorator-paths';
75
137
  *
76
- * @param pathOrConditions - A string property path or an array of condition objects (all must be met)
77
- * @param conditionOrValueOrMessage - Single condition: condition/expected value/message; Multi-condition: message parameter
78
- * @param message - Optional message parameter (only for single condition with condition/value)
138
+ * // Truthy check - readonly if page.isLocked is truthy
139
+ * @readonly(page.isLocked)
140
+ *
141
+ * // Equality check - readonly if mode === 'view'
142
+ * @readonly(when(page.mode, 'view'))
143
+ *
144
+ * // Custom function - readonly if role is 'viewer'
145
+ * @readonly(when(custom.user.role, (role) => role === 'viewer'))
146
+ * ```
147
+ * @param condition - The condition to evaluate
79
148
  * @returns PropertyDecorator
80
149
  */
81
- export declare function dependsOn(pathOrConditions: string | MultiDependsOnCondition, conditionOrValueOrMessage?: BooleanCondition | any | DependsOnMessage, message?: DependsOnMessage): PropertyDecorator;
150
+ export declare function readonly(condition: ConditionInput): PropertyDecorator;
82
151
  /**
83
- * Retrieves the dependsOn metadata associated with a specific property of a target object.
152
+ * Metadata structure for the @enums decorator.
153
+ * Extends DecoratorMetadata with the list of allowed enum values.
154
+ */
155
+ export interface EnumsDecoratorMetadata extends DecoratorMetadata {
156
+ /** The allowed enum values when the condition is met */
157
+ allowedValues: string[];
158
+ }
159
+ /**
160
+ * Decorator to conditionally restrict enum values based on conditions.
161
+ * When the condition is met, only the specified allowedValues will be available.
162
+ * If multiple @enums decorators exist on the same property, the first matching condition wins.
84
163
  *
85
- * @param target - The object containing the property.
86
- * @param propertyName - The name of the property whose dependsOn metadata is to be retrieved.
87
- * @returns The dependsOn information of the property, or undefined if no metadata is found.
164
+ * @example
165
+ * ```typescript
166
+ * import { custom, when } from './decorator-paths';
167
+ *
168
+ * // Restrict to specific values when table type is TreeTable
169
+ * @enums(when(custom.table.type, 'TreeTable'), ['Inline', 'NewPage', 'CreationDialog'])
170
+ *
171
+ * // Different values for other table types
172
+ * @enums(when(custom.table.type, 'ResponsiveTable'), ['Inline', 'InlineCreationRows', 'NewPage', 'CreationDialog', 'External'])
173
+ *
174
+ * // Default values when no other condition matches
175
+ * @enums(true, ['NewPage', 'CreationDialog'])
176
+ * ```
177
+ * @param condition - The condition to evaluate
178
+ * @param allowedValues - Array of allowed enum values when condition is met
179
+ * @returns PropertyDecorator
88
180
  */
89
- export declare function getDependsOnMetadata(target: object, propertyName: string): DependsOnCondition | undefined;
181
+ export declare function enums(condition: ConditionInput, allowedValues: string[]): PropertyDecorator;
90
182
  /**
91
183
  * Generates a deprecation message for a given key, optionally including additional validity information.
92
184
  *