@ui5/webcomponents-localization 0.0.0-d010d8832 → 0.0.0-d160e83dd

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 (188) hide show
  1. package/.eslintignore +2 -1
  2. package/CHANGELOG.md +1312 -0
  3. package/README.md +3 -5
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/Assets-fetch.d.ts +1 -0
  6. package/dist/Assets-fetch.js +3 -0
  7. package/dist/Assets-fetch.js.map +1 -0
  8. package/dist/CalendarUtils.d.ts +3 -0
  9. package/dist/CalendarUtils.js +6 -0
  10. package/dist/CalendarUtils.js.map +1 -0
  11. package/dist/DateFormat.d.ts +0 -1
  12. package/dist/LocaleData.d.ts +0 -1
  13. package/dist/dates/CalendarDate.d.ts +2 -3
  14. package/dist/dates/CalendarDate.js.map +1 -1
  15. package/dist/dates/ExtremeDates.d.ts +3 -3
  16. package/dist/dates/ExtremeDates.js.map +1 -1
  17. package/dist/dates/UI5Date.d.ts +0 -1
  18. package/dist/dates/UniversalDate.d.ts +1 -1
  19. package/dist/dates/UniversalDate.js.map +1 -1
  20. package/dist/dates/convertMonthNumbersToMonthNames.d.ts +1 -1
  21. package/dist/dates/convertMonthNumbersToMonthNames.js.map +1 -1
  22. package/dist/dates/getRoundedTimestamp.js.map +1 -1
  23. package/dist/dates/getTodayUTCTimestamp.d.ts +1 -1
  24. package/dist/dates/getTodayUTCTimestamp.js.map +1 -1
  25. package/dist/dates/modifyDateBy.d.ts +2 -1
  26. package/dist/dates/modifyDateBy.js +34 -19
  27. package/dist/dates/modifyDateBy.js.map +1 -1
  28. package/dist/dates/transformDateToSecondaryType.d.ts +1 -1
  29. package/dist/dates/transformDateToSecondaryType.js.map +1 -1
  30. package/dist/generated/assets/cldr/Unicode-Data-Files-LICENSE.txt +27 -0
  31. package/dist/generated/assets/cldr/ar.json +7085 -2816
  32. package/dist/generated/assets/cldr/ar_EG.json +7085 -2816
  33. package/dist/generated/assets/cldr/ar_SA.json +7084 -2815
  34. package/dist/generated/assets/cldr/bg.json +5979 -2733
  35. package/dist/generated/assets/cldr/ca.json +6081 -2680
  36. package/dist/generated/assets/cldr/cnr.json +6169 -0
  37. package/dist/generated/assets/cldr/cs.json +6707 -2716
  38. package/dist/generated/assets/cldr/cy.json +6930 -2797
  39. package/dist/generated/assets/cldr/da.json +5925 -2597
  40. package/dist/generated/assets/cldr/de.json +6046 -2614
  41. package/dist/generated/assets/cldr/de_AT.json +6047 -2614
  42. package/dist/generated/assets/cldr/de_CH.json +6045 -2614
  43. package/dist/generated/assets/cldr/el.json +5830 -2595
  44. package/dist/generated/assets/cldr/el_CY.json +5830 -2595
  45. package/dist/generated/assets/cldr/en.json +6042 -2583
  46. package/dist/generated/assets/cldr/en_AU.json +6082 -2592
  47. package/dist/generated/assets/cldr/en_GB.json +6073 -2584
  48. package/dist/generated/assets/cldr/en_HK.json +6082 -2593
  49. package/dist/generated/assets/cldr/en_IE.json +6073 -2584
  50. package/dist/generated/assets/cldr/en_IN.json +6078 -2588
  51. package/dist/generated/assets/cldr/en_NZ.json +6073 -2584
  52. package/dist/generated/assets/cldr/en_PG.json +6074 -2584
  53. package/dist/generated/assets/cldr/en_SG.json +6078 -2588
  54. package/dist/generated/assets/cldr/en_ZA.json +6074 -2584
  55. package/dist/generated/assets/cldr/es.json +6101 -2640
  56. package/dist/generated/assets/cldr/es_AR.json +6104 -2645
  57. package/dist/generated/assets/cldr/es_BO.json +6103 -2645
  58. package/dist/generated/assets/cldr/es_CL.json +5996 -2645
  59. package/dist/generated/assets/cldr/es_CO.json +5996 -2644
  60. package/dist/generated/assets/cldr/es_MX.json +6105 -2645
  61. package/dist/generated/assets/cldr/es_PE.json +5887 -2645
  62. package/dist/generated/assets/cldr/es_UY.json +5889 -2645
  63. package/dist/generated/assets/cldr/es_VE.json +5888 -2645
  64. package/dist/generated/assets/cldr/et.json +6025 -2599
  65. package/dist/generated/assets/cldr/fa.json +5948 -2618
  66. package/dist/generated/assets/cldr/fi.json +6193 -2726
  67. package/dist/generated/assets/cldr/fr.json +5995 -2590
  68. package/dist/generated/assets/cldr/fr_BE.json +5995 -2590
  69. package/dist/generated/assets/cldr/fr_CA.json +5989 -2605
  70. package/dist/generated/assets/cldr/fr_CH.json +6013 -2607
  71. package/dist/generated/assets/cldr/fr_LU.json +5995 -2590
  72. package/dist/generated/assets/cldr/he.json +6539 -2711
  73. package/dist/generated/assets/cldr/hi.json +5857 -2602
  74. package/dist/generated/assets/cldr/hr.json +6194 -2652
  75. package/dist/generated/assets/cldr/hu.json +5943 -2598
  76. package/dist/generated/assets/cldr/id.json +5728 -2544
  77. package/dist/generated/assets/cldr/it.json +5984 -2590
  78. package/dist/generated/assets/cldr/it_CH.json +5984 -2590
  79. package/dist/generated/assets/cldr/ja.json +5887 -2663
  80. package/dist/generated/assets/cldr/kk.json +5937 -2589
  81. package/dist/generated/assets/cldr/ko.json +5768 -2641
  82. package/dist/generated/assets/cldr/lt.json +6576 -2720
  83. package/dist/generated/assets/cldr/lv.json +6112 -2644
  84. package/dist/generated/assets/cldr/mk.json +6045 -0
  85. package/dist/generated/assets/cldr/ms.json +5562 -2538
  86. package/dist/generated/assets/cldr/nb.json +6033 -2621
  87. package/dist/generated/assets/cldr/nl.json +6200 -2601
  88. package/dist/generated/assets/cldr/nl_BE.json +6200 -2601
  89. package/dist/generated/assets/cldr/pl.json +6587 -2723
  90. package/dist/generated/assets/cldr/pt.json +6113 -2607
  91. package/dist/generated/assets/cldr/pt_PT.json +6178 -2658
  92. package/dist/generated/assets/cldr/ro.json +6198 -2645
  93. package/dist/generated/assets/cldr/ru.json +6501 -2704
  94. package/dist/generated/assets/cldr/ru_UA.json +6501 -2704
  95. package/dist/generated/assets/cldr/sk.json +6430 -2726
  96. package/dist/generated/assets/cldr/sl.json +6442 -2688
  97. package/dist/generated/assets/cldr/sr.json +6239 -2663
  98. package/dist/generated/assets/cldr/sr_Latn.json +6224 -2666
  99. package/dist/generated/assets/cldr/sv.json +6074 -2631
  100. package/dist/generated/assets/cldr/th.json +5873 -2635
  101. package/dist/generated/assets/cldr/tr.json +6092 -2612
  102. package/dist/generated/assets/cldr/uk.json +6452 -2684
  103. package/dist/generated/assets/cldr/vi.json +5667 -2555
  104. package/dist/generated/assets/cldr/zh_CN.json +5715 -2555
  105. package/dist/generated/assets/cldr/zh_HK.json +5724 -2563
  106. package/dist/generated/assets/cldr/zh_SG.json +5724 -2562
  107. package/dist/generated/assets/cldr/zh_TW.json +5791 -2587
  108. package/dist/generated/json-imports/LocaleData-fetch.d.ts +1 -0
  109. package/dist/generated/json-imports/LocaleData-fetch.js +93 -0
  110. package/dist/generated/json-imports/LocaleData-fetch.js.map +1 -0
  111. package/dist/generated/json-imports/LocaleData.d.ts +1 -0
  112. package/dist/generated/json-imports/LocaleData.js +89 -89
  113. package/dist/generated/json-imports/LocaleData.js.map +1 -0
  114. package/dist/getCachedLocaleDataInstance.js.map +1 -1
  115. package/dist/locale/getLocaleData.js.map +1 -1
  116. package/dist/sap/base/Event.js +59 -0
  117. package/dist/sap/base/Eventing.js +146 -0
  118. package/dist/sap/base/Log.js +2 -239
  119. package/dist/sap/base/assert.js +28 -1
  120. package/dist/sap/base/config/MemoryConfigurationProvider.js +20 -0
  121. package/dist/sap/base/config.js +17 -0
  122. package/dist/sap/base/i18n/Formatting.d.ts +8 -0
  123. package/dist/sap/base/i18n/Formatting.js +11 -0
  124. package/dist/sap/base/i18n/Formatting.js.map +1 -0
  125. package/dist/sap/base/i18n/LanguageTag.js +173 -0
  126. package/dist/sap/base/i18n/Localization.d.ts +4 -0
  127. package/dist/sap/base/i18n/Localization.js +12 -0
  128. package/dist/sap/base/i18n/Localization.js.map +1 -0
  129. package/dist/sap/base/i18n/date/CalendarType.js +43 -0
  130. package/dist/sap/base/i18n/date/CalendarWeekNumbering.js +105 -0
  131. package/dist/sap/base/i18n/date/TimezoneUtils.js +319 -0
  132. package/dist/sap/base/strings/camelize.js +30 -0
  133. package/dist/sap/base/strings/formatMessage.js +88 -15
  134. package/dist/sap/base/util/LoaderExtensions.js.map +1 -1
  135. package/dist/sap/base/util/ObjectPath.d.ts +4 -0
  136. package/dist/sap/base/util/ObjectPath.js +4 -33
  137. package/dist/sap/base/util/ObjectPath.js.map +1 -0
  138. package/dist/sap/base/util/Version.js +157 -0
  139. package/dist/sap/base/util/_merge.js +83 -26
  140. package/dist/sap/base/util/array/uniqueSort.js +37 -15
  141. package/dist/sap/base/util/deepClone.js +102 -0
  142. package/dist/sap/base/util/deepEqual.js +75 -51
  143. package/dist/sap/base/util/extend.js +58 -7
  144. package/dist/sap/base/util/isEmptyObject.js +34 -0
  145. package/dist/sap/base/util/isPlainObject.js +35 -1
  146. package/dist/sap/base/util/now.js +24 -3
  147. package/dist/sap/base/util/resolveReference.js +3 -0
  148. package/dist/sap/base/util/uid.js +27 -0
  149. package/dist/sap/ui/base/DataType.js +657 -0
  150. package/dist/sap/ui/base/Interface.js +47 -1
  151. package/dist/sap/ui/base/Metadata.js +435 -171
  152. package/dist/sap/ui/base/Object.js +284 -48
  153. package/dist/sap/ui/core/CalendarType.js +24 -8
  154. package/dist/sap/ui/core/Configuration.d.ts +2 -2
  155. package/dist/sap/ui/core/Configuration.js +2 -0
  156. package/dist/sap/ui/core/Configuration.js.map +1 -1
  157. package/dist/sap/ui/core/Core.d.ts +3 -4
  158. package/dist/sap/ui/core/FormatSettings.d.ts +1 -2
  159. package/dist/sap/ui/core/FormatSettings.js +0 -2
  160. package/dist/sap/ui/core/FormatSettings.js.map +1 -1
  161. package/dist/sap/ui/core/Locale.js +190 -155
  162. package/dist/sap/ui/core/LocaleData.js +2659 -1351
  163. package/dist/sap/ui/core/Supportability.js +5 -0
  164. package/dist/sap/ui/core/Theming.js +539 -0
  165. package/dist/sap/ui/core/date/Buddhist.js +162 -87
  166. package/dist/sap/ui/core/date/CalendarUtils.js +61 -32
  167. package/dist/sap/ui/core/date/CalendarWeekNumbering.js +30 -7
  168. package/dist/sap/ui/core/date/Gregorian.js +25 -10
  169. package/dist/sap/ui/core/date/Islamic.js +298 -185
  170. package/dist/sap/ui/core/date/Japanese.js +210 -115
  171. package/dist/sap/ui/core/date/Persian.js +324 -195
  172. package/dist/sap/ui/core/date/UI5Date.js +923 -237
  173. package/dist/sap/ui/core/date/UniversalDate.js +1238 -256
  174. package/dist/sap/ui/core/date/_Calendars.js +10 -1
  175. package/dist/sap/ui/core/format/DateFormat.js +3171 -2111
  176. package/dist/sap/ui/core/format/TimezoneUtil.js +24 -89
  177. package/package-scripts.cjs +12 -21
  178. package/package.json +13 -7
  179. package/tsconfig.json +20 -10
  180. package/used-modules.txt +23 -1
  181. package/dist/Assets-static.d.ts +0 -1
  182. package/dist/Assets-static.js +0 -3
  183. package/dist/Assets-static.js.map +0 -1
  184. package/dist/dates/calculateWeekNumber.d.ts +0 -5
  185. package/dist/dates/calculateWeekNumber.js +0 -45
  186. package/dist/dates/calculateWeekNumber.js.map +0 -1
  187. package/dist/generated/json-imports/LocaleData-static.js +0 -90
  188. package/dist/sap/ui/Device.js +0 -5
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The types of <code>Calendar</code>.
3
+ *
4
+ * @enum {string}
5
+ * @alias module:sap/base/i18n/date/CalendarType
6
+ * @public
7
+ * @since 1.120
8
+ */ /*!
9
+ * OpenUI5
10
+ * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
11
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
12
+ */
13
+
14
+ // Provides type module:sap/base/i18n/date/CalendarType.
15
+
16
+ var CalendarType = {
17
+ /**
18
+ * The Gregorian calendar
19
+ * @public
20
+ */
21
+ Gregorian: "Gregorian",
22
+ /**
23
+ * The Islamic calendar
24
+ * @public
25
+ */
26
+ Islamic: "Islamic",
27
+ /**
28
+ * The Japanese emperor calendar
29
+ * @public
30
+ */
31
+ Japanese: "Japanese",
32
+ /**
33
+ * The Persian Jalali calendar
34
+ * @public
35
+ */
36
+ Persian: "Persian",
37
+ /**
38
+ * The Thai buddhist calendar
39
+ * @public
40
+ */
41
+ Buddhist: "Buddhist"
42
+ };
43
+ export default CalendarType;
@@ -0,0 +1,105 @@
1
+ /**
2
+ * The <code>CalendarWeekNumbering</code> enum defines how to calculate calendar weeks. Each
3
+ * value defines:
4
+ * <ul>
5
+ * <li>The first day of the week,</li>
6
+ * <li>the first week of the year.</li>
7
+ * </ul>
8
+ *
9
+ * @enum {string}
10
+ * @public
11
+ * @alias module:sap/base/i18n/date/CalendarWeekNumbering
12
+ * @since 1.120
13
+ */ /*!
14
+ * OpenUI5
15
+ * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
16
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
17
+ */
18
+
19
+ // Provides type module:sap/base/i18n/date/CalendarWeekNumbering.
20
+
21
+ var CalendarWeekNumbering = {
22
+ /**
23
+ * The default calendar week numbering:
24
+ *
25
+ * The framework determines the week numbering scheme; currently it is derived from the
26
+ * active format locale. Future versions of UI5 might select a different week numbering
27
+ * scheme.
28
+ *
29
+ * @public
30
+ */
31
+ Default: "Default",
32
+ /**
33
+ * Official calendar week numbering in most of Europe (ISO 8601 standard):
34
+ * <ul>
35
+ * <li>Monday is first day of the week,
36
+ * <li>the week containing January 4th is first week of the year.
37
+ * </ul>
38
+ *
39
+ * @public
40
+ */
41
+ ISO_8601: "ISO_8601",
42
+ /**
43
+ * Official calendar week numbering in much of the Middle East (Middle Eastern calendar):
44
+ * <ul>
45
+ * <li>Saturday is first day of the week,
46
+ * <li>the week containing January 1st is first week of the year.
47
+ * </ul>
48
+ *
49
+ * @public
50
+ */
51
+ MiddleEastern: "MiddleEastern",
52
+ /**
53
+ * Official calendar week numbering in the United States, Canada, Brazil, Israel, Japan, and
54
+ * other countries (Western traditional calendar):
55
+ * <ul>
56
+ * <li>Sunday is first day of the week,
57
+ * <li>the week containing January 1st is first week of the year.
58
+ * </ul>
59
+ *
60
+ * @public
61
+ */
62
+ WesternTraditional: "WesternTraditional"
63
+ };
64
+
65
+ /**
66
+ * Returns an object containing the week configuration values for the given calendar week
67
+ * numbering algorithm.
68
+ *
69
+ * @param {module:sap/base/i18n/date/CalendarWeekNumbering} [sCalendarWeekNumbering=Default]
70
+ * The calendar week numbering algorithm
71
+ * @returns {{firstDayOfWeek: 0|1|2|3|4|5|6, minimalDaysInFirstWeek: 1|2|3|4|5|6|7}|undefined}
72
+ * The week configuration values or <code>undefined</code> if the given calendar week
73
+ * numbering algorithm is "Default"
74
+ *
75
+ * @function
76
+ * @name module:sap/base/i18n/date/CalendarWeekNumbering.getWeekConfigurationValues
77
+ * @private
78
+ */
79
+ Object.defineProperty(CalendarWeekNumbering, "getWeekConfigurationValues", {
80
+ // configurable : false,
81
+ // enumerable : false,
82
+ value: function (sCalendarWeekNumbering) {
83
+ switch (sCalendarWeekNumbering) {
84
+ case CalendarWeekNumbering.ISO_8601:
85
+ return {
86
+ firstDayOfWeek: 1,
87
+ minimalDaysInFirstWeek: 4
88
+ };
89
+ case CalendarWeekNumbering.MiddleEastern:
90
+ return {
91
+ firstDayOfWeek: 6,
92
+ minimalDaysInFirstWeek: 1
93
+ };
94
+ case CalendarWeekNumbering.WesternTraditional:
95
+ return {
96
+ firstDayOfWeek: 0,
97
+ minimalDaysInFirstWeek: 1
98
+ };
99
+ default:
100
+ return undefined;
101
+ }
102
+ }
103
+ // writable : false
104
+ });
105
+ export default CalendarWeekNumbering;
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Static collection of utility functions to handle time zone related conversions
3
+ *
4
+ * @author SAP SE
5
+ * @version 1.120.17
6
+ * @namespace
7
+ * @alias module:sap/base/i18n/date/TimezoneUtils
8
+ * @private
9
+ * @ui5-restricted sap.ui.core.Configuration, sap/base/i18n/format/DateFormat
10
+ */ /*!
11
+ * OpenUI5
12
+ * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
13
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
14
+ */
15
+
16
+ var TimezoneUtils = {};
17
+
18
+ /**
19
+ * Cache for the (browser's) local IANA timezone ID
20
+ *
21
+ * @type {string}
22
+ */
23
+ var sLocalTimezone = "";
24
+
25
+ /**
26
+ * Cache for valid time zones provided by <code>Intl.supportedValuesOf("timeZone")</code>
27
+ *
28
+ * @type {Array}
29
+ */
30
+ var aSupportedTimezoneIDs;
31
+
32
+ /**
33
+ * Cache for Intl.DateTimeFormat instances
34
+ */
35
+ var oIntlDateTimeFormatCache = {
36
+ _oCache: new Map(),
37
+ /**
38
+ * When cache limit is reached, it gets cleared
39
+ */
40
+ _iCacheLimit: 10,
41
+ /**
42
+ * Creates or gets an instance of Intl.DateTimeFormat.
43
+ *
44
+ * @param {string} sTimezone IANA timezone ID
45
+ * @returns {Intl.DateTimeFormat} Intl.DateTimeFormat instance
46
+ */
47
+ get: function (sTimezone) {
48
+ var cacheEntry = this._oCache.get(sTimezone);
49
+ if (cacheEntry) {
50
+ return cacheEntry;
51
+ }
52
+ var oOptions = {
53
+ hourCycle: "h23",
54
+ hour: "2-digit",
55
+ minute: "2-digit",
56
+ second: "2-digit",
57
+ fractionalSecondDigits: 3,
58
+ day: "2-digit",
59
+ month: "2-digit",
60
+ year: "numeric",
61
+ timeZone: sTimezone,
62
+ timeZoneName: 'short',
63
+ era: 'narrow',
64
+ weekday: "short"
65
+ };
66
+ var oInstance = new Intl.DateTimeFormat("en-US", oOptions);
67
+
68
+ // only store a limited number of entries in the cache
69
+ if (this._oCache.size === this._iCacheLimit) {
70
+ this._oCache = new Map();
71
+ }
72
+ this._oCache.set(sTimezone, oInstance);
73
+ return oInstance;
74
+ }
75
+ };
76
+
77
+ /**
78
+ * Uses the <code>Intl.supportedValuesOf('timeZone')</code> and <code>Intl.DateTimeFormat</code>
79
+ * API to check if the browser can handle the given IANA timezone ID.
80
+ * <code>Intl.supportedValuesOf('timeZone')</code> offers direct access to the list of supported
81
+ * time zones. It is not yet supported by all browsers but if it is supported and the given time
82
+ * zone is in the list it is faster than probing.
83
+ *
84
+ * <code>Intl.supportedValuesOf('timeZone')</code> does not return all IANA timezone IDs which
85
+ * the <code>Intl.DateTimeFormat</code> can handle, e.g. "Japan", "Etc/UTC".
86
+ *
87
+ * @param {string} sTimezone The IANA timezone ID which is checked, e.g <code>"Europe/Berlin"</code>
88
+ * @returns {boolean} Whether the time zone is a valid IANA timezone ID
89
+ * @private
90
+ * @ui5-restricted sap.ui.core.Configuration, sap.ui.core.format.DateFormat
91
+ */
92
+ TimezoneUtils.isValidTimezone = function (sTimezone) {
93
+ if (!sTimezone) {
94
+ return false;
95
+ }
96
+ if (Intl.supportedValuesOf) {
97
+ try {
98
+ aSupportedTimezoneIDs = aSupportedTimezoneIDs || Intl.supportedValuesOf('timeZone');
99
+ if (aSupportedTimezoneIDs.includes(sTimezone)) {
100
+ return true;
101
+ }
102
+ // although not contained in the supportedValues it still can be valid, therefore continue
103
+ } catch (oError) {
104
+ // ignore error
105
+ aSupportedTimezoneIDs = [];
106
+ }
107
+ }
108
+ try {
109
+ oIntlDateTimeFormatCache.get(sTimezone);
110
+ return true;
111
+ } catch (oError) {
112
+ return false;
113
+ }
114
+ };
115
+
116
+ /**
117
+ * Converts a date to a specific time zone.
118
+ * The resulting date reflects the given time zone such that the "UTC" Date methods
119
+ * can be used, e.g. Date#getUTCHours() to display the hours in the given time zone.
120
+ *
121
+ * @example
122
+ * var oDate = new Date("2021-10-13T15:22:33Z"); // UTC
123
+ * // time zone difference UTC-4 (DST)
124
+ * TimezoneUtils.convertToTimezone(oDate, "America/New_York");
125
+ * // result is:
126
+ * // 2021-10-13 11:22:33 in America/New_York
127
+ * // same as new Date("2021-10-13T11:22:33Z"); // UTC
128
+ *
129
+ * @param {Date} oDate The date which should be converted.
130
+ * @param {string} sTargetTimezone The target IANA timezone ID, e.g <code>"Europe/Berlin"</code>
131
+ * @returns {Date} The new date in the target time zone.
132
+ * @private
133
+ * @ui5-restricted sap.ui.core.format.DateFormat, sap.ui.unified, sap.m
134
+ */
135
+ TimezoneUtils.convertToTimezone = function (oDate, sTargetTimezone) {
136
+ var oFormatParts = this._getParts(oDate, sTargetTimezone);
137
+ return TimezoneUtils._getDateFromParts(oFormatParts);
138
+ };
139
+
140
+ /**
141
+ * Uses the <code>Intl.DateTimeFormat</code> API to convert a date to a specific time zone.
142
+ *
143
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts
144
+ * @param {Date} oDate The date which should be converted.
145
+ * @param {string} sTargetTimezone The target IANA timezone ID, e.g <code>"Europe/Berlin"</code>
146
+ * @returns {{
147
+ * day: string,
148
+ * era: string,
149
+ * fractionalSecond: string,
150
+ * hour: string,
151
+ * minute: string,
152
+ * month: string,
153
+ * second: string,
154
+ * timeZoneName: string,
155
+ * weekday: string,
156
+ * year: string
157
+ * }} An object containing the date and time fields considering the target time zone.
158
+ * @private
159
+ */
160
+ TimezoneUtils._getParts = function (oDate, sTargetTimezone) {
161
+ var sKey,
162
+ oPart,
163
+ oDateParts = Object.create(null),
164
+ oIntlDate = oIntlDateTimeFormatCache.get(sTargetTimezone),
165
+ // clone the date object before passing it to the Intl API, to ensure that no
166
+ // UniversalDate gets passed to it;
167
+ // no need to use UI5Date.getInstance as only the UTC timestamp is used
168
+ oParts = oIntlDate.formatToParts(new Date(oDate.getTime()));
169
+ for (sKey in oParts) {
170
+ oPart = oParts[sKey];
171
+ if (oPart.type !== "literal") {
172
+ oDateParts[oPart.type] = oPart.value;
173
+ }
174
+ }
175
+ return oDateParts;
176
+ };
177
+
178
+ /**
179
+ * Creates a Date from the provided date parts.
180
+ *
181
+ * @param {object} oParts Separated date and time fields as object, see {@link #_getParts}.
182
+ * @returns {Date} Returns the date object created from the provided parts.
183
+ * @private
184
+ */
185
+ TimezoneUtils._getDateFromParts = function (oParts) {
186
+ // no need to use UI5Date.getInstance as only the UTC timestamp is used
187
+ var oDate = new Date(0),
188
+ iUTCYear = parseInt(oParts.year);
189
+ if (oParts.era === "B") {
190
+ // The JS Date uses astronomical year numbering which supports year zero and negative
191
+ // year numbers.
192
+ // The Intl.DateTimeFormat API uses eras (no year zero and no negative year numbers).
193
+ // years around zero overview:
194
+ // | Astronomical | In Era
195
+ // | 2 | 2 Anno Domini (era: "A")
196
+ // | 1 | 1 Anno Domini (era: "A")
197
+ // | 0 | 1 Before Christ (era: "B")
198
+ // | -1 | 2 Before Christ (era: "B")
199
+ // | -2 | 3 Before Christ (era: "B")
200
+ // For the conversion to the JS Date the parts returned by the Intl.DateTimeFormat API
201
+ // need to be adapted.
202
+ iUTCYear = iUTCYear * -1 + 1;
203
+ }
204
+
205
+ // Date.UTC cannot be used here to be able to support dates before the UNIX epoch
206
+ oDate.setUTCFullYear(iUTCYear, parseInt(oParts.month) - 1, parseInt(oParts.day));
207
+ oDate.setUTCHours(parseInt(oParts.hour), parseInt(oParts.minute), parseInt(oParts.second), parseInt(oParts.fractionalSecond || 0)); // some older browsers don't support fractionalSecond, e.g. Safari < 14.1 */
208
+
209
+ return oDate;
210
+ };
211
+
212
+ /**
213
+ * Gets the offset to UTC in seconds for a given date in the time zone specified.
214
+ *
215
+ * For non-unique points in time, the daylight saving time takes precedence over the standard
216
+ * time shortly after the switch back (e.g. clock gets set back 1 hour, duplicate hour).
217
+ *
218
+ * @example
219
+ * var oDate = new Date("2021-10-13T13:22:33Z");
220
+ * TimezoneUtils.calculateOffset(oDate, "America/New_York");
221
+ * // => +14400 seconds (4 * 60 * 60 seconds)
222
+ *
223
+ * TimezoneUtils.calculateOffset(oDate, "Europe/Berlin");
224
+ * // => -7200 seconds (-2 * 60 * 60 seconds)
225
+ *
226
+ * // daylight saving time (2018 Sun, 25 Mar, 02:00 CET → CEST +1 hour (DST start) UTC+2h)
227
+ * // the given date is taken as it is in the time zone
228
+ * TimezoneUtils.calculateOffset(new Date("2018-03-25T00:00:00Z"), "Europe/Berlin");
229
+ * // => -3600 seconds (-1 * 60 * 60 seconds), interpreted as: 2018-03-25 00:00:00 (CET)
230
+ *
231
+ * TimezoneUtils.calculateOffset(new Date("2018-03-25T03:00:00Z"), "Europe/Berlin");
232
+ * // => -7200 seconds (-2 * 60 * 60 seconds)
233
+ *
234
+ * var oHistoricalDate = new Date("1800-10-13T13:22:33Z");
235
+ * TimezoneUtils.calculateOffset(oHistoricalDate, "Europe/Berlin");
236
+ * // => -3208 seconds (-3208 seconds)
237
+ *
238
+ * @param {Date} oDate The date in the time zone used to calculate the offset to UTC.
239
+ * @param {string} sTimezoneSource The source IANA timezone ID, e.g <code>"Europe/Berlin"</code>
240
+ * @returns {number} The difference to UTC between the date in the time zone.
241
+ * @private
242
+ * @ui5-restricted sap.ui.core.format.DateFormat
243
+ */
244
+ TimezoneUtils.calculateOffset = function (oDate, sTimezoneSource) {
245
+ const oDateInTimezone = TimezoneUtils.convertToTimezone(oDate, sTimezoneSource);
246
+ const iGivenTimestamp = oDate.getTime();
247
+ const iInitialOffset = iGivenTimestamp - oDateInTimezone.getTime();
248
+ // no need to use UI5Date.getInstance as only the UTC timestamp is used
249
+ const oFirstGuess = new Date(iGivenTimestamp + iInitialOffset);
250
+ const oFirstGuessInTimezone = TimezoneUtils.convertToTimezone(oFirstGuess, sTimezoneSource);
251
+ const iFirstGuessInTimezoneTimestamp = oFirstGuessInTimezone.getTime();
252
+ const iSecondOffset = oFirstGuess.getTime() - iFirstGuessInTimezoneTimestamp;
253
+ let iTimezoneOffset = iSecondOffset;
254
+ if (iInitialOffset !== iSecondOffset) {
255
+ const oSecondGuess = new Date(iGivenTimestamp + iSecondOffset);
256
+ const oSecondGuessInTimezone = TimezoneUtils.convertToTimezone(oSecondGuess, sTimezoneSource);
257
+ const iSecondGuessInTimezoneTimestamp = oSecondGuessInTimezone.getTime();
258
+ // if time is different, the given date/time does not exist in the target time zone (switch to Daylight
259
+ // Saving Time) -> take the offset for the greater date
260
+ if (iSecondGuessInTimezoneTimestamp !== iGivenTimestamp && iFirstGuessInTimezoneTimestamp > iSecondGuessInTimezoneTimestamp) {
261
+ iTimezoneOffset = iInitialOffset;
262
+ }
263
+ }
264
+ return iTimezoneOffset / 1000;
265
+ };
266
+
267
+ /**
268
+ * Map outdated IANA timezone IDs used in CLDR to correct and up-to-date IANA IDs as maintained in ABAP systems.
269
+ *
270
+ * @private
271
+ */
272
+ TimezoneUtils.mCLDR2ABAPTimezones = {
273
+ "America/Buenos_Aires": "America/Argentina/Buenos_Aires",
274
+ "America/Catamarca": "America/Argentina/Catamarca",
275
+ "America/Cordoba": "America/Argentina/Cordoba",
276
+ "America/Jujuy": "America/Argentina/Jujuy",
277
+ "America/Mendoza": "America/Argentina/Mendoza",
278
+ "America/Indianapolis": "America/Indiana/Indianapolis",
279
+ "America/Louisville": "America/Kentucky/Louisville",
280
+ "Africa/Asmera": "Africa/Asmara",
281
+ "Asia/Katmandu": "Asia/Kathmandu",
282
+ "Asia/Calcutta": "Asia/Kolkata",
283
+ "Atlantic/Faeroe": "Atlantic/Faroe",
284
+ "Pacific/Ponape": "Pacific/Pohnpei",
285
+ "Asia/Rangoon": "Asia/Yangon",
286
+ "Pacific/Truk": "Pacific/Chuuk",
287
+ "America/Godthab": "America/Nuuk",
288
+ "Asia/Saigon": "Asia/Ho_Chi_Minh",
289
+ "America/Coral_Harbour": "America/Atikokan"
290
+ };
291
+
292
+ /**
293
+ * Retrieves the browser's local IANA timezone ID; if the browser's timezone ID is not the up-to-date IANA
294
+ * timezone ID, the corresponding IANA timezone ID is returned.
295
+ *
296
+ * @returns {string} The local IANA timezone ID of the browser as up-to-date IANA timezone ID,
297
+ * e.g. <code>"Europe/Berlin"</code> or <code>"Asia/Kolkata"</code>
298
+ *
299
+ * @private
300
+ * @ui5-restricted sap.ui.core.Configuration,sap.m.DateTimeField
301
+ */
302
+ TimezoneUtils.getLocalTimezone = function () {
303
+ if (sLocalTimezone === "") {
304
+ // timezone may be undefined, only value "" means empty cache
305
+ sLocalTimezone = new Intl.DateTimeFormat().resolvedOptions().timeZone;
306
+ sLocalTimezone = TimezoneUtils.mCLDR2ABAPTimezones[sLocalTimezone] || sLocalTimezone;
307
+ }
308
+ return sLocalTimezone;
309
+ };
310
+
311
+ /**
312
+ * Clears the cache for the browser's local IANA timezone ID.
313
+ *
314
+ * @private
315
+ */
316
+ TimezoneUtils._clearLocalTimezoneCache = function () {
317
+ sLocalTimezone = "";
318
+ };
319
+ export default TimezoneUtils;
@@ -0,0 +1,30 @@
1
+ /*!
2
+ * OpenUI5
3
+ * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
4
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
+ */
6
+
7
+ var rCamelCase = /-(.)/ig;
8
+
9
+ /**
10
+ * Transforms a hyphen separated string to a camel case string.
11
+ *
12
+ * @example
13
+ * sap.ui.require(["sap/base/strings/camelize"], function(camelize){
14
+ * camelize("foo-bar"); // "fooBar"
15
+ * });
16
+ *
17
+ * @function
18
+ * @since 1.58
19
+ * @alias module:sap/base/strings/camelize
20
+ * @param {string} sString Hyphen separated string
21
+ * @returns {string} The transformed string
22
+ * @public
23
+ * @SecPassthrough {0|return}
24
+ */
25
+ var fnCamelize = function (sString) {
26
+ return sString.replace(rCamelCase, function (sMatch, sChar) {
27
+ return sChar.toUpperCase();
28
+ });
29
+ };
30
+ export default fnCamelize;
@@ -1,20 +1,93 @@
1
- import assert from '../assert.js';
1
+ /*!
2
+ * OpenUI5
3
+ * (c) Copyright 2009-2024 SAP SE or an SAP affiliate company.
4
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
+ */
6
+ import assert from "../assert.js";
7
+ /**
8
+ * Pattern to analyze MessageFormat strings.
9
+ *
10
+ * Group 1: captures doubled single quotes within the string
11
+ * Group 2: captures quoted fragments within the string.
12
+ * Note that java.util.MessageFormat silently forgives a missing single quote at
13
+ * the end of a pattern. This special case is handled by the RegEx as well.
14
+ * Group 3: captures placeholders
15
+ * Checks only for numerical argument index, any remainder is ignored up to the next
16
+ * closing curly brace. Nested placeholders are not accepted!
17
+ * Group 4: captures any remaining curly braces and indicates syntax errors
18
+ *
19
+ * [-1] [----- quoted string -----] [------ placeholder ------] [--]
20
+ * @private
21
+ */
2
22
  var rMessageFormat = /('')|'([^']+(?:''[^']*)*)(?:'|$)|\{([0-9]+(?:\s*,[^{}]*)?)\}|[{}]/g;
23
+
24
+ /**
25
+ * Creates a string from a pattern by replacing placeholders with concrete values.
26
+ *
27
+ * The syntax of the pattern is inspired by (but not fully equivalent to) the
28
+ * java.util.MessageFormat.
29
+ *
30
+ * Placeholders have the form <code>{ integer }</code>, where any occurrence of
31
+ * <code>{0}</code> is replaced by the value with index 0 in <code>aValues</code>,
32
+ * <code>{1}</code> by the value with index 1 in <code>aValues</code> etc.
33
+ *
34
+ * To avoid interpretation of curly braces as placeholders, any non-placeholder fragment
35
+ * of the pattern can be enclosed in single quotes. The surrounding single quotes will be
36
+ * omitted from the result. Single quotes that are not meant to escape a fragment and
37
+ * that should appear in the result, need to be doubled. In the result, only a single
38
+ * single quote will occur.
39
+ *
40
+ * Example: Pattern Strings
41
+ * <pre>
42
+ * formatMessage("Say {0}", ["Hello"]) -> "Say Hello" // normal use case
43
+ * formatMessage("Say '{0}'", ["Hello"]) -> "Say {0}" // escaped placeholder
44
+ * formatMessage("Say ''{0}''", ["Hello"]) -> "Say 'Hello'" // doubled single quote
45
+ * formatMessage("Say '{0}'''", ["Hello"]) -> "Say {0}'" // doubled single quote in quoted fragment
46
+ * </pre>
47
+ * In contrast to java.util.MessageFormat, format types or format styles are not supported.
48
+ * Everything after the argument index and up to the first closing curly brace is ignored.
49
+ * Nested placeholders (as supported by java.lang.MessageFormat for the format type choice)
50
+ * are not ignored but reported as a parse error.
51
+ *
52
+ * This method throws an Error when the pattern syntax is not fulfilled (e.g. unbalanced curly
53
+ * braces, nested placeholders or a non-numerical argument index).
54
+ *
55
+ * This method can also be used as a formatter within a binding. The first part of a composite binding
56
+ * will be used as pattern, the following parts as aValues. If there is only one value and this
57
+ * value is an array it will be handled like the default described above.
58
+ *
59
+ * @function
60
+ * @since 1.58
61
+ * @alias module:sap/base/strings/formatMessage
62
+ * @param {string} sPattern A pattern string in the described syntax
63
+ * @param {any[]} [aValues=[]] The values to be used instead of the placeholders.
64
+ * @returns {string} The formatted result string
65
+ * @SecPassthrough {*|return}
66
+ * @public
67
+ */
3
68
  var fnFormatMessage = function (sPattern, aValues) {
4
- assert(typeof sPattern === 'string' || sPattern instanceof String, 'pattern must be string');
5
- if (arguments.length > 2 || aValues != null && !Array.isArray(aValues)) {
6
- aValues = Array.prototype.slice.call(arguments, 1);
69
+ assert(typeof sPattern === "string" || sPattern instanceof String, "pattern must be string");
70
+ if (arguments.length > 2 || aValues != null && !Array.isArray(aValues)) {
71
+ aValues = Array.prototype.slice.call(arguments, 1);
72
+ }
73
+ aValues = aValues || [];
74
+ return sPattern.replace(rMessageFormat, function ($0, $1, $2, $3, offset) {
75
+ if ($1) {
76
+ // a doubled single quote in a normal string fragment
77
+ // --> emit a single quote
78
+ return "'";
79
+ } else if ($2) {
80
+ // a quoted sequence of chars, potentially containing doubled single quotes again
81
+ // --> emit with doubled single quotes replaced by a single quote
82
+ return $2.replace(/''/g, "'");
83
+ } else if ($3) {
84
+ // a welformed curly brace
85
+ // --> emit the argument but ignore other parameters
86
+ return String(aValues[parseInt($3)]);
7
87
  }
8
- aValues = aValues || [];
9
- return sPattern.replace(rMessageFormat, function ($0, $1, $2, $3, offset) {
10
- if ($1) {
11
- return '\'';
12
- } else if ($2) {
13
- return $2.replace(/''/g, '\'');
14
- } else if ($3) {
15
- return String(aValues[parseInt($3)]);
16
- }
17
- throw new Error('formatMessage: pattern syntax error at pos. ' + offset);
18
- });
88
+ // e.g. malformed curly braces
89
+ // --> throw Error
90
+ throw new Error("formatMessage: pattern syntax error at pos. " + offset);
91
+ });
19
92
  };
20
93
  export default fnFormatMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"LoaderExtensions.js","sourceRoot":"","sources":["../../../../src/sap/base/util/LoaderExtensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6DAA6D,CAAC;AAE5F,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAE,EAAE;IAC3C,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC1E,IAAI,CAAC,YAAY,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,GAAG,CAAC,CAAC;KAClD;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACxB,YAAY;CACZ,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["import { getLocaleData } from \"@ui5/webcomponents-base/dist/asset-registries/LocaleData.js\";\n\nconst loadResource = (moduleName: string) => {\n\tconst moduleFormat = moduleName.match(/sap\\/ui\\/core\\/cldr\\/(\\w+)\\.json/);\n\tif (!moduleFormat) {\n\t\tthrow new Error(`Unknown module \"${moduleName}\"`);\n\t}\n\n\tconst localeId = moduleFormat[1];\n\treturn getLocaleData(localeId);\n};\n\nconst LoaderExtensions = {\n\tloadResource,\n};\n\nexport default LoaderExtensions;\n"]}
1
+ {"version":3,"file":"LoaderExtensions.js","sourceRoot":"","sources":["../../../../src/sap/base/util/LoaderExtensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6DAA6D,CAAC;AAE5F,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAE,EAAE;IAC3C,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC1E,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACxB,YAAY;CACZ,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["import { getLocaleData } from \"@ui5/webcomponents-base/dist/asset-registries/LocaleData.js\";\n\nconst loadResource = (moduleName: string) => {\n\tconst moduleFormat = moduleName.match(/sap\\/ui\\/core\\/cldr\\/(\\w+)\\.json/);\n\tif (!moduleFormat) {\n\t\tthrow new Error(`Unknown module \"${moduleName}\"`);\n\t}\n\n\tconst localeId = moduleFormat[1];\n\treturn getLocaleData(localeId);\n};\n\nconst LoaderExtensions = {\n\tloadResource,\n};\n\nexport default LoaderExtensions;\n"]}
@@ -0,0 +1,4 @@
1
+ declare const ObjectPath: {
2
+ set(): void;
3
+ };
4
+ export default ObjectPath;
@@ -1,35 +1,6 @@
1
- var ObjectPath = {};
2
- var defaultRootContext = window;
3
- function getObjectPathArray(vObjectPath) {
4
- return Array.isArray(vObjectPath) ? vObjectPath.slice() : vObjectPath.split(".");
5
- }
6
- ObjectPath.create = function (vObjectPath, oRootContext) {
7
- var oObject = oRootContext || defaultRootContext;
8
- var aNames = getObjectPathArray(vObjectPath);
9
- for (var i = 0; i < aNames.length; i++) {
10
- var sName = aNames[i];
11
- if (oObject[sName] === null || oObject[sName] !== undefined && (typeof oObject[sName] !== "object" && typeof oObject[sName] !== "function")) {
12
- throw new Error("Could not set object-path for '" + aNames.join(".") + "', path segment '" + sName + "' already exists.");
13
- }
14
- oObject[sName] = oObject[sName] || ({});
15
- oObject = oObject[sName];
16
- }
17
- return oObject;
18
- };
19
- ObjectPath.get = function (vObjectPath, oRootContext) {
20
- var oObject = oRootContext || defaultRootContext;
21
- var aNames = getObjectPathArray(vObjectPath);
22
- var sPropertyName = aNames.pop();
23
- for (var i = 0; i < aNames.length && oObject; i++) {
24
- oObject = oObject[aNames[i]];
25
- }
26
- return oObject ? oObject[sPropertyName] : undefined;
27
- };
28
- ObjectPath.set = function (vObjectPath, vValue, oRootContext) {
29
- oRootContext = oRootContext || defaultRootContext;
30
- var aNames = getObjectPathArray(vObjectPath);
31
- var sPropertyName = aNames.pop();
32
- var oObject = ObjectPath.create(aNames, oRootContext);
33
- oObject[sPropertyName] = vValue;
1
+ // ObjectPath is accessing window which breaks SSR, hence the overlay
2
+ const ObjectPath = {
3
+ set() { },
34
4
  };
35
5
  export default ObjectPath;
6
+ //# sourceMappingURL=ObjectPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectPath.js","sourceRoot":"","sources":["../../../../src/sap/base/util/ObjectPath.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,MAAM,UAAU,GAAG;IAClB,GAAG,KAAI,CAAC;CACR,CAAC;AAEF,eAAe,UAAU,CAAC","sourcesContent":["// ObjectPath is accessing window which breaks SSR, hence the overlay\n\nconst ObjectPath = {\n\tset() {},\n};\n\nexport default ObjectPath;\n"]}