@osdk/client 2.6.1 → 2.7.0-beta.10

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 (265) hide show
  1. package/CHANGELOG.md +92 -88
  2. package/build/browser/Client.js +1 -1
  3. package/build/browser/Client.js.map +1 -1
  4. package/build/browser/MinimalClientContext.js.map +1 -1
  5. package/build/browser/actions/actions.test.js +9 -0
  6. package/build/browser/actions/actions.test.js.map +1 -1
  7. package/build/browser/actions/applyAction.js +4 -0
  8. package/build/browser/actions/applyAction.js.map +1 -1
  9. package/build/browser/createClient.js +2 -1
  10. package/build/browser/createClient.js.map +1 -1
  11. package/build/browser/createMinimalClient.js +1 -0
  12. package/build/browser/createMinimalClient.js.map +1 -1
  13. package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +17 -1
  14. package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
  15. package/build/browser/fetchMetadata.test.js +31 -0
  16. package/build/browser/fetchMetadata.test.js.map +1 -1
  17. package/build/browser/intellisense.test.js +1 -1
  18. package/build/browser/intellisense.test.js.map +1 -1
  19. package/build/browser/object/aggregate.js +1 -0
  20. package/build/browser/object/aggregate.js.map +1 -1
  21. package/build/browser/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
  22. package/build/browser/object/convertWireToOsdkObjects/InterfaceHolder.js.map +1 -1
  23. package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.js +3 -0
  24. package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.js.map +1 -1
  25. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +8 -0
  26. package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  27. package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js +95 -3
  28. package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
  29. package/build/browser/object/convertWireToOsdkObjects.js +18 -6
  30. package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
  31. package/build/browser/object/convertWireToOsdkObjects.test.js +189 -28
  32. package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
  33. package/build/browser/object/fetchPage.js +18 -5
  34. package/build/browser/object/fetchPage.js.map +1 -1
  35. package/build/browser/object/fetchPage.test.js.map +1 -1
  36. package/build/browser/object/formatting/applyPropertyFormatter.js +58 -0
  37. package/build/browser/object/formatting/applyPropertyFormatter.js.map +1 -0
  38. package/build/browser/object/formatting/applyPropertyFormatter.test.js +726 -0
  39. package/build/browser/object/formatting/applyPropertyFormatter.test.js.map +1 -0
  40. package/build/browser/object/formatting/formatBoolean.js +23 -0
  41. package/build/browser/object/formatting/formatBoolean.js.map +1 -0
  42. package/build/browser/object/formatting/formatDateTime.js +158 -0
  43. package/build/browser/object/formatting/formatDateTime.js.map +1 -0
  44. package/build/browser/object/formatting/formatNumber.js +242 -0
  45. package/build/browser/object/formatting/formatNumber.js.map +1 -0
  46. package/build/browser/object/formatting/propertyFormattingUtils.js +39 -0
  47. package/build/browser/object/formatting/propertyFormattingUtils.js.map +1 -0
  48. package/build/browser/object/object.test.js +123 -0
  49. package/build/browser/object/object.test.js.map +1 -1
  50. package/build/browser/objectSet/InterfaceObjectSet.test.js +1 -1
  51. package/build/browser/objectSet/InterfaceObjectSet.test.js.map +1 -1
  52. package/build/browser/objectSet/ObjectSet.test.js +7 -6
  53. package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
  54. package/build/browser/objectSet/ObjectSetListenerWebsocket.js +2 -2
  55. package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  56. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +3 -1
  57. package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  58. package/build/browser/objectSet/createObjectSet.js +13 -0
  59. package/build/browser/objectSet/createObjectSet.js.map +1 -1
  60. package/build/browser/objectSet/fetchLinksPage.js +57 -0
  61. package/build/browser/objectSet/fetchLinksPage.js.map +1 -0
  62. package/build/browser/objectSet/fetchLinksPage.test.js +102 -0
  63. package/build/browser/objectSet/fetchLinksPage.test.js.map +1 -0
  64. package/build/browser/observable/ListPayload.js.map +1 -1
  65. package/build/browser/observable/ObjectPayload.js.map +1 -1
  66. package/build/browser/observable/ObservableClient.js +0 -5
  67. package/build/browser/observable/ObservableClient.js.map +1 -1
  68. package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
  69. package/build/browser/observable/internal/Store.test.js +104 -1
  70. package/build/browser/observable/internal/Store.test.js.map +1 -1
  71. package/build/browser/observable/internal/actions/OptimisticJob.js +1 -1
  72. package/build/browser/observable/internal/actions/OptimisticJob.js.map +1 -1
  73. package/build/browser/observable/internal/base-list/BaseListQuery.js +1 -1
  74. package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
  75. package/build/browser/observable/internal/links/SpecificLinkQuery.js +9 -1
  76. package/build/browser/observable/internal/links/SpecificLinkQuery.js.map +1 -1
  77. package/build/browser/observable/internal/list/ListQuery.js +17 -2
  78. package/build/browser/observable/internal/list/ListQuery.js.map +1 -1
  79. package/build/browser/observable/internal/objectset/ObjectSetQuery.js +9 -7
  80. package/build/browser/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  81. package/build/browser/observable/internal/utils/rdpFieldOperations.js +46 -25
  82. package/build/browser/observable/internal/utils/rdpFieldOperations.js.map +1 -1
  83. package/build/browser/observable/internal/utils/rdpFieldOperations.test.js +172 -0
  84. package/build/browser/observable/internal/utils/rdpFieldOperations.test.js.map +1 -0
  85. package/build/browser/ontology/loadActionMetadata.js +3 -1
  86. package/build/browser/ontology/loadActionMetadata.js.map +1 -1
  87. package/build/browser/ontology/loadFullObjectMetadata.js +2 -1
  88. package/build/browser/ontology/loadFullObjectMetadata.js.map +1 -1
  89. package/build/browser/ontology/loadInterfaceMetadata.js +2 -1
  90. package/build/browser/ontology/loadInterfaceMetadata.js.map +1 -1
  91. package/build/browser/public/unstable-do-not-use.js.map +1 -1
  92. package/build/browser/queries/applyQuery.js +14 -0
  93. package/build/browser/queries/applyQuery.js.map +1 -1
  94. package/build/browser/queries/queries.test.js +14 -2
  95. package/build/browser/queries/queries.test.js.map +1 -1
  96. package/build/browser/util/UserAgent.js +2 -2
  97. package/build/browser/util/UserAgent.js.map +1 -1
  98. package/build/browser/util/toDataValue.js +0 -1
  99. package/build/browser/util/toDataValue.js.map +1 -1
  100. package/build/browser/util/toDataValue.test.js +4 -0
  101. package/build/browser/util/toDataValue.test.js.map +1 -1
  102. package/build/cjs/{chunk-6SCDLAU2.cjs → chunk-LDTMSHUZ.cjs} +4 -4
  103. package/build/cjs/{chunk-6SCDLAU2.cjs.map → chunk-LDTMSHUZ.cjs.map} +1 -1
  104. package/build/cjs/{chunk-BRUBBJUT.cjs → chunk-MZZAHBN6.cjs} +636 -138
  105. package/build/cjs/chunk-MZZAHBN6.cjs.map +1 -0
  106. package/build/cjs/{chunk-EHMN4DL4.cjs → chunk-RDZ5NKAI.cjs} +210 -129
  107. package/build/cjs/chunk-RDZ5NKAI.cjs.map +1 -0
  108. package/build/cjs/{createClient-DvwysJMX.d.cts → createClient-D5G3qzAO.d.cts} +1 -0
  109. package/build/cjs/{delay-KIUUJ5NJ.cjs → delay-W2TSML2P.cjs} +4 -4
  110. package/build/cjs/{delay-KIUUJ5NJ.cjs.map → delay-W2TSML2P.cjs.map} +1 -1
  111. package/build/cjs/index.cjs +12 -12
  112. package/build/cjs/index.d.cts +1 -1
  113. package/build/cjs/public/internal-node.cjs +219 -219
  114. package/build/cjs/public/internal.cjs +14 -14
  115. package/build/cjs/public/unstable-do-not-use.cjs +335 -145
  116. package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
  117. package/build/cjs/public/unstable-do-not-use.d.cts +9 -9
  118. package/build/esm/Client.js +1 -1
  119. package/build/esm/Client.js.map +1 -1
  120. package/build/esm/MinimalClientContext.js.map +1 -1
  121. package/build/esm/actions/actions.test.js +9 -0
  122. package/build/esm/actions/actions.test.js.map +1 -1
  123. package/build/esm/actions/applyAction.js +4 -0
  124. package/build/esm/actions/applyAction.js.map +1 -1
  125. package/build/esm/createClient.js +2 -1
  126. package/build/esm/createClient.js.map +1 -1
  127. package/build/esm/createMinimalClient.js +1 -0
  128. package/build/esm/createMinimalClient.js.map +1 -1
  129. package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +17 -1
  130. package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -1
  131. package/build/esm/fetchMetadata.test.js +31 -0
  132. package/build/esm/fetchMetadata.test.js.map +1 -1
  133. package/build/esm/intellisense.test.js +1 -1
  134. package/build/esm/intellisense.test.js.map +1 -1
  135. package/build/esm/object/aggregate.js +1 -0
  136. package/build/esm/object/aggregate.js.map +1 -1
  137. package/build/esm/object/convertWireToOsdkObjects/BaseHolder.js.map +1 -1
  138. package/build/esm/object/convertWireToOsdkObjects/InterfaceHolder.js.map +1 -1
  139. package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.js +3 -0
  140. package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.js.map +1 -1
  141. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +8 -0
  142. package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
  143. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js +95 -3
  144. package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
  145. package/build/esm/object/convertWireToOsdkObjects.js +18 -6
  146. package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
  147. package/build/esm/object/convertWireToOsdkObjects.test.js +189 -28
  148. package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
  149. package/build/esm/object/fetchPage.js +18 -5
  150. package/build/esm/object/fetchPage.js.map +1 -1
  151. package/build/esm/object/fetchPage.test.js.map +1 -1
  152. package/build/esm/object/formatting/applyPropertyFormatter.js +58 -0
  153. package/build/esm/object/formatting/applyPropertyFormatter.js.map +1 -0
  154. package/build/esm/object/formatting/applyPropertyFormatter.test.js +726 -0
  155. package/build/esm/object/formatting/applyPropertyFormatter.test.js.map +1 -0
  156. package/build/esm/object/formatting/formatBoolean.js +23 -0
  157. package/build/esm/object/formatting/formatBoolean.js.map +1 -0
  158. package/build/esm/object/formatting/formatDateTime.js +158 -0
  159. package/build/esm/object/formatting/formatDateTime.js.map +1 -0
  160. package/build/esm/object/formatting/formatNumber.js +242 -0
  161. package/build/esm/object/formatting/formatNumber.js.map +1 -0
  162. package/build/esm/object/formatting/propertyFormattingUtils.js +39 -0
  163. package/build/esm/object/formatting/propertyFormattingUtils.js.map +1 -0
  164. package/build/esm/object/object.test.js +123 -0
  165. package/build/esm/object/object.test.js.map +1 -1
  166. package/build/esm/objectSet/InterfaceObjectSet.test.js +1 -1
  167. package/build/esm/objectSet/InterfaceObjectSet.test.js.map +1 -1
  168. package/build/esm/objectSet/ObjectSet.test.js +7 -6
  169. package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
  170. package/build/esm/objectSet/ObjectSetListenerWebsocket.js +2 -2
  171. package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
  172. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +3 -1
  173. package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
  174. package/build/esm/objectSet/createObjectSet.js +13 -0
  175. package/build/esm/objectSet/createObjectSet.js.map +1 -1
  176. package/build/esm/objectSet/fetchLinksPage.js +57 -0
  177. package/build/esm/objectSet/fetchLinksPage.js.map +1 -0
  178. package/build/esm/objectSet/fetchLinksPage.test.js +102 -0
  179. package/build/esm/objectSet/fetchLinksPage.test.js.map +1 -0
  180. package/build/esm/observable/ListPayload.js.map +1 -1
  181. package/build/esm/observable/ObjectPayload.js.map +1 -1
  182. package/build/esm/observable/ObservableClient.js +0 -5
  183. package/build/esm/observable/ObservableClient.js.map +1 -1
  184. package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
  185. package/build/esm/observable/internal/Store.test.js +104 -1
  186. package/build/esm/observable/internal/Store.test.js.map +1 -1
  187. package/build/esm/observable/internal/actions/OptimisticJob.js +1 -1
  188. package/build/esm/observable/internal/actions/OptimisticJob.js.map +1 -1
  189. package/build/esm/observable/internal/base-list/BaseListQuery.js +1 -1
  190. package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
  191. package/build/esm/observable/internal/links/SpecificLinkQuery.js +9 -1
  192. package/build/esm/observable/internal/links/SpecificLinkQuery.js.map +1 -1
  193. package/build/esm/observable/internal/list/ListQuery.js +17 -2
  194. package/build/esm/observable/internal/list/ListQuery.js.map +1 -1
  195. package/build/esm/observable/internal/objectset/ObjectSetQuery.js +9 -7
  196. package/build/esm/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
  197. package/build/esm/observable/internal/utils/rdpFieldOperations.js +46 -25
  198. package/build/esm/observable/internal/utils/rdpFieldOperations.js.map +1 -1
  199. package/build/esm/observable/internal/utils/rdpFieldOperations.test.js +172 -0
  200. package/build/esm/observable/internal/utils/rdpFieldOperations.test.js.map +1 -0
  201. package/build/esm/ontology/loadActionMetadata.js +3 -1
  202. package/build/esm/ontology/loadActionMetadata.js.map +1 -1
  203. package/build/esm/ontology/loadFullObjectMetadata.js +2 -1
  204. package/build/esm/ontology/loadFullObjectMetadata.js.map +1 -1
  205. package/build/esm/ontology/loadInterfaceMetadata.js +2 -1
  206. package/build/esm/ontology/loadInterfaceMetadata.js.map +1 -1
  207. package/build/esm/public/unstable-do-not-use.js.map +1 -1
  208. package/build/esm/queries/applyQuery.js +14 -0
  209. package/build/esm/queries/applyQuery.js.map +1 -1
  210. package/build/esm/queries/queries.test.js +14 -2
  211. package/build/esm/queries/queries.test.js.map +1 -1
  212. package/build/esm/util/UserAgent.js +2 -2
  213. package/build/esm/util/UserAgent.js.map +1 -1
  214. package/build/esm/util/toDataValue.js +0 -1
  215. package/build/esm/util/toDataValue.js.map +1 -1
  216. package/build/esm/util/toDataValue.test.js +4 -0
  217. package/build/esm/util/toDataValue.test.js.map +1 -1
  218. package/build/types/Client.d.ts +1 -1
  219. package/build/types/MinimalClientContext.d.ts +1 -0
  220. package/build/types/MinimalClientContext.d.ts.map +1 -1
  221. package/build/types/actions/applyAction.d.ts.map +1 -1
  222. package/build/types/createClient.d.ts +1 -0
  223. package/build/types/createClient.d.ts.map +1 -1
  224. package/build/types/object/convertWireToOsdkObjects/InternalSymbols.d.ts +2 -0
  225. package/build/types/object/convertWireToOsdkObjects/InternalSymbols.d.ts.map +1 -1
  226. package/build/types/object/convertWireToOsdkObjects.d.ts +4 -4
  227. package/build/types/object/convertWireToOsdkObjects.d.ts.map +1 -1
  228. package/build/types/object/fetchPage.d.ts.map +1 -1
  229. package/build/types/object/formatting/applyPropertyFormatter.d.ts +18 -0
  230. package/build/types/object/formatting/applyPropertyFormatter.d.ts.map +1 -0
  231. package/build/types/object/formatting/applyPropertyFormatter.test.d.ts +1 -0
  232. package/build/types/object/formatting/applyPropertyFormatter.test.d.ts.map +1 -0
  233. package/build/types/object/formatting/formatBoolean.d.ts +5 -0
  234. package/build/types/object/formatting/formatBoolean.d.ts.map +1 -0
  235. package/build/types/object/formatting/formatDateTime.d.ts +6 -0
  236. package/build/types/object/formatting/formatDateTime.d.ts.map +1 -0
  237. package/build/types/object/formatting/formatNumber.d.ts +15 -0
  238. package/build/types/object/formatting/formatNumber.d.ts.map +1 -0
  239. package/build/types/object/formatting/propertyFormattingUtils.d.ts +10 -0
  240. package/build/types/object/formatting/propertyFormattingUtils.d.ts.map +1 -0
  241. package/build/types/object/object.test.d.ts.map +1 -1
  242. package/build/types/objectSet/fetchLinksPage.d.ts +1 -0
  243. package/build/types/objectSet/fetchLinksPage.d.ts.map +1 -0
  244. package/build/types/objectSet/fetchLinksPage.test.d.ts +1 -0
  245. package/build/types/objectSet/fetchLinksPage.test.d.ts.map +1 -0
  246. package/build/types/observable/ListPayload.d.ts +3 -2
  247. package/build/types/observable/ListPayload.d.ts.map +1 -1
  248. package/build/types/observable/ObjectPayload.d.ts +2 -2
  249. package/build/types/observable/ObjectPayload.d.ts.map +1 -1
  250. package/build/types/observable/ObservableClient.d.ts +10 -7
  251. package/build/types/observable/ObservableClient.d.ts.map +1 -1
  252. package/build/types/observable/internal/Store.test.d.ts.map +1 -1
  253. package/build/types/observable/internal/actions/OptimisticJob.d.ts.map +1 -1
  254. package/build/types/observable/internal/links/SpecificLinkQuery.d.ts.map +1 -1
  255. package/build/types/observable/internal/list/ListQuery.d.ts.map +1 -1
  256. package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts.map +1 -1
  257. package/build/types/observable/internal/utils/rdpFieldOperations.d.ts.map +1 -1
  258. package/build/types/observable/internal/utils/rdpFieldOperations.test.d.ts +1 -0
  259. package/build/types/observable/internal/utils/rdpFieldOperations.test.d.ts.map +1 -0
  260. package/build/types/public/unstable-do-not-use.d.ts +1 -1
  261. package/build/types/public/unstable-do-not-use.d.ts.map +1 -1
  262. package/build/types/queries/applyQuery.d.ts.map +1 -1
  263. package/package.json +14 -14
  264. package/build/cjs/chunk-BRUBBJUT.cjs.map +0 -1
  265. package/build/cjs/chunk-EHMN4DL4.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applyPropertyFormatter.test.js","names":["afterEach","beforeEach","describe","expect","it","vi","InterfaceDefinitions","createOsdkObject","mockClient","EN_US","locale","DE_DE","FR_FR","EN_US_TOKYO","timezoneId","OBJECT_DEF","apiName","type","primaryKeyApiName","titleProperty","rid","displayName","description","primaryKeyType","icon","undefined","visibility","pluralDisplayName","status","interfaceMap","inverseInterfaceMap","links","implements","properties","id","nullable","multiplicity","stringPropertyNoFormatting","booleanPropertyCustomLabels","valueFormatting","valueIfTrue","valueIfFalse","nullableBooleanProperty","priceStandard","numberType","baseFormatOptions","minimumFractionDigits","maximumFractionDigits","useGrouping","priceWithParenthesis","convertNegativeToParenthesis","amount","style","currencyCode","value","dynamicCurrencyAmount","propertyApiName","distance","unit","customQuantity","prefixedNumber","affix","prefix","postfix","minimumIntegerDigits","largeNumber","scaleType","thousandsNumber","billionsNumber","percentage","ratioType","basisPoints","createdDate","format","createdDateTime","displayTimezone","zoneId","createdDateTimeShort","createdTime","yearMonth","isoInstant","timestampWithUserTimezone","timestampWithDynamicTimezone","relativeDateTime","DEFAULT_OBJECT_DATA","$apiName","$primaryKey","$title","$objectType","getObject","dataOverrides","objectData","obj","formatted","$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue","toBe","toBeUndefined","toBeTruthy","setSystemTime","Date","useRealTimers"],"sources":["applyPropertyFormatter.test.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { MinimalClient } from \"../../MinimalClientContext.js\";\nimport type { FetchedObjectTypeDefinition } from \"../../ontology/OntologyProvider.js\";\nimport { InterfaceDefinitions } from \"../../ontology/OntologyProvider.js\";\nimport { createOsdkObject } from \"../convertWireToOsdkObjects/createOsdkObject.js\";\nimport type { SimpleOsdkProperties } from \"../SimpleOsdkProperties.js\";\n\ndescribe(\"getFormattedValue\", () => {\n const mockClient = {} as MinimalClient;\n const EN_US = { locale: \"en-US\" };\n const DE_DE = { locale: \"de-DE\" };\n const FR_FR = { locale: \"fr-FR\" };\n const EN_US_TOKYO = { locale: \"en-US\", timezoneId: \"Asia/Tokyo\" };\n\n // Single object definition with properties for testing\n const OBJECT_DEF: FetchedObjectTypeDefinition = {\n apiName: \"TestObject\",\n type: \"object\",\n primaryKeyApiName: \"id\",\n titleProperty: \"id\",\n rid: \"ri.test.object\",\n displayName: \"Test Object\",\n description: \"A test object\",\n primaryKeyType: \"string\",\n icon: undefined,\n visibility: \"NORMAL\",\n pluralDisplayName: \"Test Objects\",\n status: \"ACTIVE\",\n interfaceMap: {},\n inverseInterfaceMap: {},\n links: {},\n implements: [],\n [InterfaceDefinitions]: {},\n properties: {\n id: {\n type: \"string\",\n nullable: false,\n multiplicity: false,\n },\n stringPropertyNoFormatting: {\n type: \"string\",\n nullable: true,\n multiplicity: false,\n },\n booleanPropertyCustomLabels: {\n type: \"boolean\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"boolean\",\n valueIfTrue: \"Active\",\n valueIfFalse: \"Inactive\",\n },\n },\n nullableBooleanProperty: {\n type: \"boolean\",\n nullable: true,\n multiplicity: false,\n valueFormatting: {\n type: \"boolean\",\n valueIfTrue: \"Yes\",\n valueIfFalse: \"No\",\n },\n },\n priceStandard: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"standard\",\n baseFormatOptions: {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n useGrouping: true,\n },\n },\n },\n },\n priceWithParenthesis: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"standard\",\n baseFormatOptions: {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n convertNegativeToParenthesis: true,\n },\n },\n },\n },\n amount: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"currency\",\n style: \"STANDARD\",\n currencyCode: { type: \"constant\", value: \"USD\" },\n baseFormatOptions: {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n },\n },\n },\n },\n dynamicCurrencyAmount: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"currency\",\n style: \"COMPACT\",\n currencyCode: {\n type: \"propertyType\",\n propertyApiName: \"currencyCode\",\n },\n baseFormatOptions: {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n },\n },\n },\n },\n distance: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"standardUnit\",\n unit: { type: \"constant\", value: \"kilometer\" },\n baseFormatOptions: {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n },\n },\n },\n },\n customQuantity: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"customUnit\",\n unit: { type: \"constant\", value: \"widgets\" },\n baseFormatOptions: {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n },\n },\n },\n },\n prefixedNumber: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"affix\",\n affix: {\n prefix: { type: \"constant\", value: \"ID-\" },\n postfix: { type: \"constant\", value: \"-END\" },\n },\n baseFormatOptions: {\n minimumIntegerDigits: 4,\n useGrouping: false,\n },\n },\n },\n },\n largeNumber: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"scale\",\n scaleType: \"MILLIONS\",\n baseFormatOptions: {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n },\n },\n },\n },\n thousandsNumber: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"scale\",\n scaleType: \"THOUSANDS\",\n baseFormatOptions: {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n },\n },\n },\n },\n billionsNumber: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"scale\",\n scaleType: \"BILLIONS\",\n baseFormatOptions: {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n },\n },\n },\n },\n percentage: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"ratio\",\n ratioType: \"PERCENTAGE\",\n baseFormatOptions: {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n },\n },\n },\n },\n basisPoints: {\n type: \"double\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"number\",\n numberType: {\n type: \"ratio\",\n ratioType: \"BASIS_POINTS\",\n baseFormatOptions: {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n },\n },\n },\n },\n currencyCode: {\n type: \"string\",\n nullable: true,\n multiplicity: false,\n },\n createdDate: {\n type: \"datetime\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"date\",\n format: {\n type: \"localizedFormat\",\n format: \"DATE_FORMAT_DATE\",\n },\n },\n },\n createdDateTime: {\n type: \"datetime\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"timestamp\",\n format: {\n type: \"localizedFormat\",\n format: \"DATE_FORMAT_DATE_TIME\",\n },\n displayTimezone: {\n type: \"static\",\n zoneId: { type: \"constant\", value: \"America/New_York\" },\n },\n },\n },\n createdDateTimeShort: {\n type: \"datetime\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"timestamp\",\n format: {\n type: \"localizedFormat\",\n format: \"DATE_FORMAT_DATE_TIME_SHORT\",\n },\n displayTimezone: {\n type: \"static\",\n zoneId: { type: \"constant\", value: \"America/Los_Angeles\" },\n },\n },\n },\n createdTime: {\n type: \"datetime\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"timestamp\",\n format: {\n type: \"localizedFormat\",\n format: \"DATE_FORMAT_TIME\",\n },\n displayTimezone: {\n type: \"static\",\n zoneId: { type: \"constant\", value: \"UTC\" },\n },\n },\n },\n yearMonth: {\n type: \"datetime\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"date\",\n format: {\n type: \"localizedFormat\",\n format: \"DATE_FORMAT_YEAR_AND_MONTH\",\n },\n },\n },\n isoInstant: {\n type: \"datetime\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"timestamp\",\n format: {\n type: \"localizedFormat\",\n format: \"DATE_FORMAT_ISO_INSTANT\",\n },\n displayTimezone: { type: \"user\" },\n },\n },\n timestampWithUserTimezone: {\n type: \"datetime\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"timestamp\",\n format: {\n type: \"localizedFormat\",\n format: \"DATE_FORMAT_DATE_TIME\",\n },\n displayTimezone: { type: \"user\" },\n },\n },\n timestampWithDynamicTimezone: {\n type: \"datetime\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"timestamp\",\n format: {\n type: \"localizedFormat\",\n format: \"DATE_FORMAT_DATE_TIME\",\n },\n displayTimezone: {\n type: \"static\",\n zoneId: { type: \"propertyType\", propertyApiName: \"timezoneId\" },\n },\n },\n },\n timezoneId: {\n type: \"string\",\n nullable: true,\n multiplicity: false,\n },\n relativeDateTime: {\n type: \"datetime\",\n nullable: false,\n multiplicity: false,\n valueFormatting: {\n type: \"timestamp\",\n format: {\n type: \"localizedFormat\",\n format: \"DATE_FORMAT_RELATIVE_TO_NOW\",\n },\n displayTimezone: { type: \"user\" },\n },\n },\n },\n };\n\n // Default object data with properties populated\n const DEFAULT_OBJECT_DATA: SimpleOsdkProperties = {\n $apiName: \"TestObject\",\n $primaryKey: \"test-123\",\n $title: \"Test Object\",\n $objectType: \"TestObject\",\n id: \"test-123\",\n stringPropertyNoFormatting: \"Plain text\",\n booleanPropertyCustomLabels: true,\n nullableBooleanProperty: undefined,\n priceStandard: 1234.56,\n priceWithParenthesis: -1234.56,\n amount: 1234.56,\n dynamicCurrencyAmount: 1234.56,\n distance: 42.7,\n customQuantity: 150,\n prefixedNumber: 42,\n largeNumber: 5000000,\n thousandsNumber: 5000,\n billionsNumber: 3000000000,\n percentage: 0.125,\n basisPoints: 0.125,\n currencyCode: \"EUR\",\n createdDate: \"2025-01-15T14:30:00.000Z\",\n createdDateTime: \"2025-01-15T14:30:00.000Z\",\n createdDateTimeShort: \"2025-01-15T14:30:00.000Z\",\n createdTime: \"2025-01-15T14:30:00.000Z\",\n yearMonth: \"2025-01-15T00:00:00.000Z\",\n isoInstant: \"2025-01-15T14:30:00.000Z\",\n timestampWithUserTimezone: \"2025-01-15T14:30:00.000Z\",\n timestampWithDynamicTimezone: \"2025-01-15T14:30:00.000Z\",\n relativeDateTime: \"2025-01-15T14:30:00.000Z\",\n timezoneId: \"Europe/London\",\n };\n\n // Helper to create an OSDK object with optional data overrides\n function getObject(dataOverrides?: Partial<SimpleOsdkProperties>) {\n const objectData = { ...DEFAULT_OBJECT_DATA, ...dataOverrides };\n return createOsdkObject(mockClient, OBJECT_DEF, objectData);\n }\n\n it(\"formats boolean true with custom label\", () => {\n const obj = getObject();\n const formatted = obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"booleanPropertyCustomLabels\",\n );\n\n expect(formatted).toBe(\"Active\");\n });\n\n it(\"formats boolean false with custom label\", () => {\n const obj = getObject({ booleanPropertyCustomLabels: false });\n const formatted = obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"booleanPropertyCustomLabels\",\n );\n\n expect(formatted).toBe(\"Inactive\");\n });\n\n it(\"returns undefined for property without formatting rules\", () => {\n const obj = getObject();\n const formatted = obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"stringPropertyNoFormatting\",\n );\n\n expect(formatted).toBeUndefined();\n });\n\n it(\"returns undefined for undefined values\", () => {\n const obj = getObject();\n const formatted = obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"nullableBooleanProperty\",\n );\n\n expect(formatted).toBeUndefined();\n });\n\n describe(\"Number formatting\", () => {\n it(\"formats standard number with grouping and decimals\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"priceStandard\",\n EN_US,\n ),\n ).toBe(\"1,234.56\");\n });\n\n it(\"converts negative to parenthesis when configured\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"priceWithParenthesis\",\n EN_US,\n ),\n ).toBe(\"(1,234.56)\");\n });\n\n it(\"formats currency with constant currency code\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"amount\",\n EN_US,\n ),\n ).toBe(\"$1,234.56\");\n });\n\n it(\"formats currency with dynamic currency code from property reference\", () => {\n const obj = getObject({ currencyCode: \"EUR\" });\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"dynamicCurrencyAmount\",\n EN_US,\n ),\n ).toBe(\"€1,234.56\");\n });\n\n it(\"falls back to standard formatting when currency code is null\", () => {\n const obj = getObject({ currencyCode: undefined });\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"dynamicCurrencyAmount\",\n EN_US,\n ),\n ).toBe(\"1,234.56\");\n });\n\n it(\"formats with standard unit\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"distance\",\n EN_US,\n ),\n ).toBe(\"42.7 km\");\n });\n\n it(\"formats with custom unit\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"customQuantity\",\n EN_US,\n ),\n ).toBe(\"150 widgets\");\n });\n\n it(\"formats with prefix and suffix\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"prefixedNumber\",\n EN_US,\n ),\n ).toBe(\"ID-0042-END\");\n });\n\n it(\"formats scaled millions in en-US\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"largeNumber\",\n EN_US,\n ),\n ).toBe(\"5.00M\");\n });\n\n it(\"formats scaled millions in de-DE\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"largeNumber\",\n DE_DE,\n ),\n ).toBe(\"5,00Mio.\");\n });\n\n it(\"formats scaled thousands in en-US\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"thousandsNumber\",\n EN_US,\n ),\n ).toBe(\"5.0K\");\n });\n\n it(\"formats scaled billions in fr-FR\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"billionsNumber\",\n FR_FR,\n ),\n ).toBe(\"3,00Md\");\n });\n\n it(\"formats percentage\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"percentage\",\n EN_US,\n ),\n ).toBe(\"12.5%\");\n });\n\n it(\"formats basis points\", () => {\n const obj = getObject();\n expect(\n obj.$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"basisPoints\",\n EN_US,\n ),\n ).toBe(\"1,250 bps\");\n });\n });\n\n describe(\"Date and time formatting\", () => {\n it(\"formats date without timezone\", () => {\n const obj = getObject();\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"createdDate\",\n EN_US,\n );\n\n expect(formatted).toBe(\"Wed, Jan 15, 2025\");\n });\n\n it(\"formats date in different locale\", () => {\n const obj = getObject();\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"createdDate\",\n DE_DE,\n );\n\n expect(formatted).toBe(\"Mi., 15. Jan. 2025\");\n });\n\n it(\"formats timestamp with static timezone (America/New_York)\", () => {\n const obj = getObject();\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"createdDateTime\",\n EN_US,\n );\n\n // Should show time in EST (UTC-5), so 14:30 UTC = 9:30 AM EST\n expect(formatted).toBe(\"Wed, Jan 15, 2025, 9:30:00 AM\");\n });\n\n it(\"formats timestamp short with static timezone (America/Los_Angeles)\", () => {\n const obj = getObject();\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"createdDateTimeShort\",\n EN_US,\n );\n\n // Should show time in PST (UTC-8), so 14:30 UTC = 6:30 AM PST\n expect(formatted).toBe(\"Jan 15, 2025, 6:30 AM\");\n });\n\n it(\"formats time only with UTC timezone\", () => {\n const obj = getObject();\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"createdTime\",\n EN_US,\n );\n\n // Should show 14:30:00 in UTC as 2:30:00 PM\n expect(formatted).toBe(\"2:30:00 PM\");\n });\n\n it(\"formats year and month only\", () => {\n const obj = getObject();\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"yearMonth\",\n EN_US,\n );\n\n expect(formatted).toBe(\"Jan 2025\");\n });\n\n it(\"formats ISO instant\", () => {\n const obj = getObject();\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"isoInstant\",\n EN_US,\n );\n\n expect(formatted).toBe(\"2025-01-15T14:30:00.000Z\");\n });\n\n it(\"formats timestamp with user timezone (no override)\", () => {\n const obj = getObject();\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"timestampWithUserTimezone\",\n EN_US,\n );\n\n // Without an override, should use the browser's default timezone\n // The exact output depends on the system timezone, so we verify it's a non-empty string\n expect(formatted).toBeTruthy();\n expect(typeof formatted).toBe(\"string\");\n });\n\n it(\"formats timestamp with user timezone override\", () => {\n const obj = getObject();\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"timestampWithUserTimezone\",\n EN_US_TOKYO,\n );\n\n // With Asia/Tokyo override (UTC+9), 14:30 UTC = 23:30 JST\n expect(formatted).toBe(\"Wed, Jan 15, 2025, 11:30:00 PM\");\n });\n\n it(\"formats timestamp with dynamic timezone from property\", () => {\n const obj = getObject({ timezoneId: \"Europe/London\" });\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"timestampWithDynamicTimezone\",\n EN_US,\n );\n\n // Europe/London in January is GMT (UTC+0), so same as UTC: 14:30 = 2:30 PM\n expect(formatted).toBe(\"Wed, Jan 15, 2025, 2:30:00 PM\");\n });\n\n it(\"formats timestamp with dynamic timezone from property (different timezone)\", () => {\n const obj = getObject({ timezoneId: \"Australia/Sydney\" });\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"timestampWithDynamicTimezone\",\n EN_US,\n );\n\n // Australia/Sydney in January is UTC+11, so 14:30 UTC = 1:30 AM next day\n expect(formatted).toBe(\"Thu, Jan 16, 2025, 1:30:00 AM\");\n });\n\n it(\"formats timestamp when dynamic timezone property is null\", () => {\n const obj = getObject({ timezoneId: undefined });\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"timestampWithDynamicTimezone\",\n EN_US,\n );\n\n // Should fall back to no timezone (browser default)\n // The exact output depends on the system timezone, so we verify it's a non-empty string\n expect(formatted).toBeTruthy();\n expect(typeof formatted).toBe(\"string\");\n });\n\n it(\"handles invalid date strings gracefully\", () => {\n const obj = getObject({ createdDate: \"invalid-date\" });\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"createdDate\",\n EN_US,\n );\n\n expect(formatted).toBeUndefined();\n });\n });\n\n describe(\"Relative time formatting\", () => {\n beforeEach(() => {\n // Mock current time to January 15, 2025, 12:00:00 UTC since we're checking for relative time.\n vi.setSystemTime(new Date(\"2025-01-15T12:00:00.000Z\"));\n });\n\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it(\"formats time 45 seconds ago\", () => {\n const obj = getObject({ relativeDateTime: \"2025-01-15T11:59:15.000Z\" });\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"relativeDateTime\",\n EN_US,\n );\n\n expect(formatted).toBe(\"45 seconds ago\");\n });\n\n it(\"formats time 30 minutes from now\", () => {\n const obj = getObject({ relativeDateTime: \"2025-01-15T12:30:00.000Z\" });\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"relativeDateTime\",\n EN_US,\n );\n\n expect(formatted).toBe(\"in 30 minutes\");\n });\n\n it(\"formats time 3 hours ago\", () => {\n const obj = getObject({ relativeDateTime: \"2025-01-15T09:00:00.000Z\" });\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"relativeDateTime\",\n EN_US,\n );\n\n expect(formatted).toBe(\"3 hours ago\");\n });\n\n it(\"formats now\", () => {\n const obj = getObject({ relativeDateTime: \"2025-01-15T12:00:00.000Z\" });\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"relativeDateTime\",\n EN_US,\n );\n\n expect(formatted).toBe(\"now\");\n });\n\n it(\"falls back to absolute date formatting for times more than 1 day ago\", () => {\n const obj = getObject({ relativeDateTime: \"2025-01-10T08:00:00.000Z\" });\n const formatted = obj\n .$__EXPERIMENTAL__NOT_SUPPORTED_YET__getFormattedValue(\n \"relativeDateTime\",\n EN_US_TOKYO,\n );\n\n expect(formatted).toBe(\"Fri, Jan 10, 2025, 5:00 PM\");\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /**
18
+ * Formats a boolean value according to the specified formatting rule
19
+ */
20
+ export function formatBoolean(value, rule) {
21
+ return value ? rule.valueIfTrue : rule.valueIfFalse;
22
+ }
23
+ //# sourceMappingURL=formatBoolean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatBoolean.js","names":["formatBoolean","value","rule","valueIfTrue","valueIfFalse"],"sources":["formatBoolean.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { PropertyBooleanFormattingRule } from \"@osdk/api\";\n\n/**\n * Formats a boolean value according to the specified formatting rule\n */\nexport function formatBoolean(\n value: boolean,\n rule: PropertyBooleanFormattingRule,\n): string {\n return value ? rule.valueIfTrue : rule.valueIfFalse;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA,OAAO,SAASA,aAAaA,CAC3BC,KAAc,EACdC,IAAmC,EAC3B;EACR,OAAOD,KAAK,GAAGC,IAAI,CAACC,WAAW,GAAGD,IAAI,CAACE,YAAY;AACrD","ignoreList":[]}
@@ -0,0 +1,158 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { resolvePropertyReference } from "./propertyFormattingUtils.js";
18
+
19
+ /**
20
+ * Formats a date/timestamp value according to the specified formatting rule
21
+ */
22
+ export function formatDateTime(value, format, timezone, objectData, locale, userTimezoneOverride) {
23
+ const date = value instanceof Date ? value : new Date(value);
24
+ if (isNaN(date.getTime())) {
25
+ return undefined;
26
+ }
27
+ const resolvedTimezone = resolveTimezone(timezone, objectData, userTimezoneOverride);
28
+ switch (format.type) {
29
+ case "localizedFormat":
30
+ return formatLocalized(date, format, locale, resolvedTimezone);
31
+ case "stringFormat":
32
+ // TODO - pattern formatting
33
+ return undefined;
34
+ default:
35
+ return undefined;
36
+ }
37
+ }
38
+ const INVALID_DATE_STRING = "Invalid date or timezone";
39
+ function formatLocalized(date, format, locale, timezone) {
40
+ if (format.format === "DATE_FORMAT_ISO_INSTANT") {
41
+ return date.toISOString();
42
+ }
43
+ if (format.format === "DATE_FORMAT_RELATIVE_TO_NOW") {
44
+ return formatRelativeToNow(date, locale, timezone);
45
+ }
46
+ const options = getLocalizedFormatOptions(format.format);
47
+ try {
48
+ return new Intl.DateTimeFormat(locale, timezone ? {
49
+ ...options,
50
+ timeZone: timezone
51
+ } : options).format(date);
52
+ } catch (_e) {
53
+ // If a property reference is an invalid timezone we specifically say that it's invalid instead of returning undefined;
54
+ return INVALID_DATE_STRING;
55
+ }
56
+ }
57
+ function getLocalizedFormatOptions(format) {
58
+ switch (format) {
59
+ case "DATE_FORMAT_DATE":
60
+ return FORMAT_DATE;
61
+ case "DATE_FORMAT_YEAR_AND_MONTH":
62
+ return FORMAT_YEAR_AND_MONTH;
63
+ case "DATE_FORMAT_DATE_TIME":
64
+ return FORMAT_DATE_TIME;
65
+ case "DATE_FORMAT_DATE_TIME_SHORT":
66
+ return FORMAT_DATE_TIME_SHORT;
67
+ case "DATE_FORMAT_TIME":
68
+ return FORMAT_TIME;
69
+ default:
70
+ return {};
71
+ }
72
+ }
73
+ const FORMAT_DATE = {
74
+ day: "numeric",
75
+ month: "short",
76
+ weekday: "short",
77
+ year: "numeric"
78
+ };
79
+ const FORMAT_YEAR_AND_MONTH = {
80
+ month: "short",
81
+ year: "numeric"
82
+ };
83
+ const FORMAT_DATE_TIME = {
84
+ day: "numeric",
85
+ month: "short",
86
+ weekday: "short",
87
+ year: "numeric",
88
+ hour: "numeric",
89
+ minute: "numeric",
90
+ second: "numeric"
91
+ };
92
+ const FORMAT_DATE_TIME_SHORT = {
93
+ day: "numeric",
94
+ month: "short",
95
+ year: "numeric",
96
+ hour: "numeric",
97
+ minute: "numeric"
98
+ };
99
+ const FORMAT_TIME = {
100
+ hour: "numeric",
101
+ minute: "numeric",
102
+ second: "numeric"
103
+ };
104
+ const DATE_TIME_SHORT_WITH_WEEKDAY = {
105
+ day: "numeric",
106
+ month: "short",
107
+ weekday: "short",
108
+ year: "numeric",
109
+ hour: "numeric",
110
+ minute: "numeric"
111
+ };
112
+ function resolveTimezone(timezone, objectData, userTimezoneOverride) {
113
+ if (userTimezoneOverride != null) {
114
+ return userTimezoneOverride;
115
+ }
116
+ if (timezone == null) {
117
+ return undefined;
118
+ }
119
+ switch (timezone.type) {
120
+ case "user":
121
+ return undefined;
122
+ case "static":
123
+ return resolvePropertyReference(timezone.zoneId, objectData);
124
+ default:
125
+ return undefined;
126
+ }
127
+ }
128
+ const SECOND_MS = 1_000;
129
+ const MINUTE_MS = 60 * SECOND_MS;
130
+ const HOUR_MS = 60 * MINUTE_MS;
131
+ const DAY_MS = 24 * HOUR_MS;
132
+ function formatRelativeToNow(date, locale, timezone) {
133
+ const now = Date.now();
134
+ const diff = date.valueOf() - now;
135
+ const absDiff = Math.abs(diff);
136
+
137
+ // More than 1 day - fall back to absolute date formatting
138
+ if (absDiff >= DAY_MS) {
139
+ const dtf = new Intl.DateTimeFormat(locale, {
140
+ ...DATE_TIME_SHORT_WITH_WEEKDAY,
141
+ timeZone: timezone
142
+ });
143
+ return dtf.format(date);
144
+ }
145
+
146
+ // Within 1 day - use relative formatting
147
+ const rtf = new Intl.RelativeTimeFormat(locale, {
148
+ numeric: "auto"
149
+ });
150
+ const units = [["hour", HOUR_MS], ["minute", MINUTE_MS], ["second", SECOND_MS]];
151
+ for (const [unit, ms] of units) {
152
+ if (absDiff >= ms) {
153
+ return rtf.format(Math.floor(diff / ms), unit);
154
+ }
155
+ }
156
+ return rtf.format(0, "second");
157
+ }
158
+ //# sourceMappingURL=formatDateTime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatDateTime.js","names":["resolvePropertyReference","formatDateTime","value","format","timezone","objectData","locale","userTimezoneOverride","date","Date","isNaN","getTime","undefined","resolvedTimezone","resolveTimezone","type","formatLocalized","INVALID_DATE_STRING","toISOString","formatRelativeToNow","options","getLocalizedFormatOptions","Intl","DateTimeFormat","timeZone","_e","FORMAT_DATE","FORMAT_YEAR_AND_MONTH","FORMAT_DATE_TIME","FORMAT_DATE_TIME_SHORT","FORMAT_TIME","day","month","weekday","year","hour","minute","second","DATE_TIME_SHORT_WITH_WEEKDAY","zoneId","SECOND_MS","MINUTE_MS","HOUR_MS","DAY_MS","now","diff","valueOf","absDiff","Math","abs","dtf","rtf","RelativeTimeFormat","numeric","units","unit","ms","floor"],"sources":["formatDateTime.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n DatetimeFormat,\n DatetimeLocalizedFormat,\n DatetimeTimezone,\n} from \"@osdk/api\";\nimport type { DatetimeLocalizedFormatType } from \"@osdk/foundry.ontologies\";\nimport type { SimpleOsdkProperties } from \"../SimpleOsdkProperties.js\";\nimport { resolvePropertyReference } from \"./propertyFormattingUtils.js\";\n\n/**\n * Formats a date/timestamp value according to the specified formatting rule\n */\nexport function formatDateTime(\n value: Date,\n format: DatetimeFormat,\n timezone: DatetimeTimezone | undefined,\n objectData: SimpleOsdkProperties,\n locale: string,\n userTimezoneOverride?: string,\n): string | undefined {\n const date = value instanceof Date ? value : new Date(value);\n if (isNaN(date.getTime())) {\n return undefined;\n }\n\n const resolvedTimezone = resolveTimezone(\n timezone,\n objectData,\n userTimezoneOverride,\n );\n\n switch (format.type) {\n case \"localizedFormat\":\n return formatLocalized(date, format, locale, resolvedTimezone);\n case \"stringFormat\":\n // TODO - pattern formatting\n return undefined;\n default:\n format satisfies never;\n return undefined;\n }\n}\n\nconst INVALID_DATE_STRING = \"Invalid date or timezone\";\n\nfunction formatLocalized(\n date: Date,\n format: DatetimeLocalizedFormat,\n locale: string,\n timezone: string | undefined,\n): string | undefined {\n if (format.format === \"DATE_FORMAT_ISO_INSTANT\") {\n return date.toISOString();\n }\n if (format.format === \"DATE_FORMAT_RELATIVE_TO_NOW\") {\n return formatRelativeToNow(date, locale, timezone);\n }\n\n const options = getLocalizedFormatOptions(format.format);\n try {\n return new Intl.DateTimeFormat(\n locale,\n timezone ? { ...options, timeZone: timezone } : options,\n ).format(date);\n } catch (_e) {\n // If a property reference is an invalid timezone we specifically say that it's invalid instead of returning undefined;\n return INVALID_DATE_STRING;\n }\n}\n\nfunction getLocalizedFormatOptions(\n format: Exclude<\n DatetimeLocalizedFormatType,\n \"DATE_FORMAT_RELATIVE_TO_NOW\" | \"DATE_FORMAT_ISO_INSTANT\"\n >,\n): Intl.DateTimeFormatOptions {\n switch (format) {\n case \"DATE_FORMAT_DATE\":\n return FORMAT_DATE;\n\n case \"DATE_FORMAT_YEAR_AND_MONTH\":\n return FORMAT_YEAR_AND_MONTH;\n\n case \"DATE_FORMAT_DATE_TIME\":\n return FORMAT_DATE_TIME;\n\n case \"DATE_FORMAT_DATE_TIME_SHORT\":\n return FORMAT_DATE_TIME_SHORT;\n\n case \"DATE_FORMAT_TIME\":\n return FORMAT_TIME;\n\n default:\n format satisfies never;\n return {};\n }\n}\n\nconst FORMAT_DATE: Intl.DateTimeFormatOptions = {\n day: \"numeric\",\n month: \"short\",\n weekday: \"short\",\n year: \"numeric\",\n};\n\nconst FORMAT_YEAR_AND_MONTH: Intl.DateTimeFormatOptions = {\n month: \"short\",\n year: \"numeric\",\n};\n\nconst FORMAT_DATE_TIME: Intl.DateTimeFormatOptions = {\n day: \"numeric\",\n month: \"short\",\n weekday: \"short\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n};\n\nconst FORMAT_DATE_TIME_SHORT: Intl.DateTimeFormatOptions = {\n day: \"numeric\",\n month: \"short\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n};\n\nconst FORMAT_TIME: Intl.DateTimeFormatOptions = {\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n};\n\nconst DATE_TIME_SHORT_WITH_WEEKDAY: Intl.DateTimeFormatOptions = {\n day: \"numeric\",\n month: \"short\",\n weekday: \"short\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n};\n\nfunction resolveTimezone(\n timezone: DatetimeTimezone | undefined,\n objectData: SimpleOsdkProperties,\n userTimezoneOverride?: string,\n): string | undefined {\n if (userTimezoneOverride != null) {\n return userTimezoneOverride;\n }\n if (timezone == null) {\n return undefined;\n }\n\n switch (timezone.type) {\n case \"user\":\n return undefined;\n case \"static\":\n return resolvePropertyReference(timezone.zoneId, objectData);\n default:\n timezone satisfies never;\n return undefined;\n }\n}\n\nconst SECOND_MS = 1_000;\nconst MINUTE_MS = 60 * SECOND_MS;\nconst HOUR_MS = 60 * MINUTE_MS;\nconst DAY_MS = 24 * HOUR_MS;\n\nfunction formatRelativeToNow(\n date: Date,\n locale: string,\n timezone: string | undefined,\n): string {\n const now = Date.now();\n const diff = date.valueOf() - now;\n const absDiff = Math.abs(diff);\n\n // More than 1 day - fall back to absolute date formatting\n if (absDiff >= DAY_MS) {\n const dtf = new Intl.DateTimeFormat(locale, {\n ...DATE_TIME_SHORT_WITH_WEEKDAY,\n timeZone: timezone,\n });\n return dtf.format(date);\n }\n\n // Within 1 day - use relative formatting\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: \"auto\" });\n\n const units: [Intl.RelativeTimeFormatUnit, number][] = [\n [\"hour\", HOUR_MS],\n [\"minute\", MINUTE_MS],\n [\"second\", SECOND_MS],\n ];\n\n for (const [unit, ms] of units) {\n if (absDiff >= ms) {\n return rtf.format(Math.floor(diff / ms), unit);\n }\n }\n return rtf.format(0, \"second\");\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,242 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { resolvePropertyReference } from "./propertyFormattingUtils.js";
18
+
19
+ /**
20
+ * Extended NumberFormatOptions that includes rounding mode support
21
+ * which is available in modern browsers but not yet in TypeScript types.
22
+ * Only includes modes that are actually supported by Intl.NumberFormat and used in our API.
23
+ */
24
+
25
+ /**
26
+ * Formats a number value according to the specified formatting rule
27
+ */
28
+ export function formatNumber(value, numberType, objectData, locale) {
29
+ switch (numberType.type) {
30
+ case "standard":
31
+ return formatStandardNumber(value, numberType.baseFormatOptions, locale);
32
+ case "fixedValues":
33
+ return numberType.values[value];
34
+ case "currency":
35
+ return formatCurrency(value, numberType, objectData, locale);
36
+ case "standardUnit":
37
+ return formatStandardUnit(value, numberType, objectData, locale);
38
+ case "customUnit":
39
+ return formatCustomUnit(value, numberType, objectData, locale);
40
+ case "affix":
41
+ return formatAffix(value, numberType, objectData, locale);
42
+ case "duration":
43
+ // TODO (duration is a bit more complex)
44
+ return undefined;
45
+ case "scale":
46
+ return formatScale(value, numberType, locale);
47
+ case "ratio":
48
+ return formatRatio(value, numberType, locale);
49
+ default:
50
+ return undefined;
51
+ }
52
+ }
53
+ function formatStandardNumber(value, options, locale) {
54
+ return formatNumberWithAffixes(value, options, locale);
55
+ }
56
+ function formatCurrency(value, rule, objectData, locale) {
57
+ const currencyCode = resolvePropertyReference(rule.currencyCode, objectData);
58
+ if (currencyCode == null) {
59
+ return formatStandardNumber(value, rule.baseFormatOptions, locale);
60
+ }
61
+ const options = {
62
+ ...convertToIntlOptions(rule.baseFormatOptions),
63
+ style: "currency",
64
+ currency: currencyCode,
65
+ currencyDisplay: rule.style === "COMPACT" ? "narrowSymbol" : "symbol"
66
+ };
67
+ return formatWithIntl(value, options, locale);
68
+ }
69
+ function formatStandardUnit(value, rule, objectData, locale) {
70
+ const unit = resolvePropertyReference(rule.unit, objectData);
71
+ if (unit == null) {
72
+ return formatStandardNumber(value, rule.baseFormatOptions, locale);
73
+ }
74
+ const options = {
75
+ ...convertToIntlOptions(rule.baseFormatOptions),
76
+ style: "unit",
77
+ unit: unit
78
+ };
79
+ try {
80
+ return formatWithIntl(value, options, locale);
81
+ } catch (error) {
82
+ return formatNumberWithAffixes(value, rule.baseFormatOptions, locale, "", ` ${unit}`);
83
+ }
84
+ }
85
+ function formatCustomUnit(value, rule, objectData, locale) {
86
+ const unit = resolvePropertyReference(rule.unit, objectData);
87
+ const suffix = unit != null ? ` ${unit}` : "";
88
+ return formatNumberWithAffixes(value, rule.baseFormatOptions, locale, "", suffix);
89
+ }
90
+ function formatAffix(value, rule, objectData, locale) {
91
+ const prefix = rule.affix.prefix != null ? resolvePropertyReference(rule.affix.prefix, objectData) ?? "" : "";
92
+ const suffix = rule.affix.postfix != null ? resolvePropertyReference(rule.affix.postfix, objectData) ?? "" : "";
93
+ return formatNumberWithAffixes(value, rule.baseFormatOptions, locale, prefix, suffix);
94
+ }
95
+
96
+ /**
97
+ * Gets the scale divisor for a given scale type
98
+ */
99
+ function getScaleDivisor(scaleType) {
100
+ switch (scaleType) {
101
+ case "THOUSANDS":
102
+ return 1e3;
103
+ case "MILLIONS":
104
+ return 1e6;
105
+ case "BILLIONS":
106
+ return 1e9;
107
+ default:
108
+ throw new Error(`Unknown scale type: ${scaleType}`);
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Extracts the localized compact suffix for a given scale.
114
+ * Uses Intl.NumberFormat with compact notation to get the proper i18n suffix.
115
+ */
116
+ function getLocalizedCompactSuffix(scaleDivisor, locale) {
117
+ const compactFormatter = new Intl.NumberFormat(locale, {
118
+ notation: "compact",
119
+ compactDisplay: "short"
120
+ });
121
+ const parts = compactFormatter.formatToParts(scaleDivisor);
122
+ const compactPart = parts.find(p => p.type === "compact");
123
+ return compactPart?.value ?? "";
124
+ }
125
+ function formatScale(value, rule, locale) {
126
+ const scaleDivisor = getScaleDivisor(rule.scaleType);
127
+ const suffix = getLocalizedCompactSuffix(scaleDivisor, locale);
128
+ return formatNumberWithAffixes(value / scaleDivisor, rule.baseFormatOptions, locale, "", suffix);
129
+ }
130
+ function getRatioScaledValue(value, ratioType) {
131
+ switch (ratioType) {
132
+ case "PERCENTAGE":
133
+ return value * 100;
134
+ case "PER_MILLE":
135
+ return value * 1000;
136
+ case "BASIS_POINTS":
137
+ return value * 10000;
138
+ default:
139
+ throw new Error(`Unknown ratio type: ${ratioType}`);
140
+ }
141
+ }
142
+ function formatRatio(value, rule, locale) {
143
+ // Special case: PERCENTAGE uses Intl's native percent style
144
+ if (rule.ratioType === "PERCENTAGE") {
145
+ const options = {
146
+ ...convertToIntlOptions(rule.baseFormatOptions),
147
+ style: "percent"
148
+ };
149
+ return formatWithIntl(value, options, locale);
150
+ }
151
+
152
+ // Other ratio types: scale and add suffix
153
+ const scaledValue = getRatioScaledValue(value, rule.ratioType);
154
+ let suffix;
155
+ switch (rule.ratioType) {
156
+ case "PER_MILLE":
157
+ suffix = "‰";
158
+ break;
159
+ case "BASIS_POINTS":
160
+ suffix = " bps";
161
+ break;
162
+ default:
163
+ rule.ratioType;
164
+ throw new Error(`Unknown ratio type: ${rule.ratioType}`);
165
+ }
166
+ return formatNumberWithAffixes(scaledValue, rule.baseFormatOptions, locale, "", suffix);
167
+ }
168
+
169
+ /**
170
+ * Maps notation from OSDK format to Intl format
171
+ */
172
+ function mapNotation(notation) {
173
+ switch (notation) {
174
+ case "STANDARD":
175
+ return "standard";
176
+ case "SCIENTIFIC":
177
+ return "scientific";
178
+ case "ENGINEERING":
179
+ return "engineering";
180
+ case "COMPACT":
181
+ return "compact";
182
+ default:
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Maps rounding mode from OSDK format to Intl format
188
+ */
189
+ function mapRoundingMode(mode) {
190
+ switch (mode) {
191
+ case "CEIL":
192
+ return "ceil";
193
+ case "FLOOR":
194
+ return "floor";
195
+ case "ROUND_CLOSEST":
196
+ return "halfExpand";
197
+ default:
198
+ return undefined;
199
+ }
200
+ }
201
+ function convertToIntlOptions(options) {
202
+ return {
203
+ useGrouping: options.useGrouping,
204
+ minimumIntegerDigits: options.minimumIntegerDigits,
205
+ minimumFractionDigits: options.minimumFractionDigits,
206
+ maximumFractionDigits: options.maximumFractionDigits,
207
+ minimumSignificantDigits: options.minimumSignificantDigits,
208
+ maximumSignificantDigits: options.maximumSignificantDigits,
209
+ notation: options.notation ? mapNotation(options.notation) : undefined,
210
+ roundingMode: options.roundingMode ? mapRoundingMode(options.roundingMode) : undefined,
211
+ convertNegativeToParenthesis: options.convertNegativeToParenthesis
212
+ };
213
+ }
214
+
215
+ /**
216
+ * Applies negative-to-parenthesis conversion if requested
217
+ */
218
+ function maybeConvertNegativeToParenthesis(formatted, value, shouldConvert) {
219
+ if (shouldConvert && value < 0) {
220
+ return formatted.replace(/^-/, "(") + ")";
221
+ }
222
+ return formatted;
223
+ }
224
+
225
+ /**
226
+ * Formats a number using Intl.NumberFormat with the given options
227
+ */
228
+ function formatWithIntl(value, options, locale) {
229
+ const formatter = new Intl.NumberFormat(locale, options);
230
+ const formatted = formatter.format(value);
231
+ return maybeConvertNegativeToParenthesis(formatted, value, options.convertNegativeToParenthesis ?? false);
232
+ }
233
+
234
+ /**
235
+ * Formats a number and optionally adds prefix/suffix
236
+ */
237
+ function formatNumberWithAffixes(value, baseOptions, locale, prefix, suffix) {
238
+ const intlOptions = convertToIntlOptions(baseOptions);
239
+ const formatted = formatWithIntl(value, intlOptions, locale);
240
+ return `${prefix || ""}${formatted}${suffix || ""}`;
241
+ }
242
+ //# sourceMappingURL=formatNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatNumber.js","names":["resolvePropertyReference","formatNumber","value","numberType","objectData","locale","type","formatStandardNumber","baseFormatOptions","values","formatCurrency","formatStandardUnit","formatCustomUnit","formatAffix","undefined","formatScale","formatRatio","options","formatNumberWithAffixes","rule","currencyCode","convertToIntlOptions","style","currency","currencyDisplay","formatWithIntl","unit","error","suffix","prefix","affix","postfix","getScaleDivisor","scaleType","Error","getLocalizedCompactSuffix","scaleDivisor","compactFormatter","Intl","NumberFormat","notation","compactDisplay","parts","formatToParts","compactPart","find","p","getRatioScaledValue","ratioType","scaledValue","mapNotation","mapRoundingMode","mode","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","roundingMode","convertNegativeToParenthesis","maybeConvertNegativeToParenthesis","formatted","shouldConvert","replace","formatter","format","baseOptions","intlOptions"],"sources":["formatNumber.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n NumberFormatAffix,\n NumberFormatCurrency,\n NumberFormatCustomUnit,\n NumberFormatOptions,\n NumberFormatRatio,\n NumberFormatScale,\n NumberFormatStandardUnit,\n NumberRatioType,\n NumberScaleType,\n PropertyNumberFormattingRuleType,\n} from \"@osdk/api\";\nimport type { SimpleOsdkProperties } from \"../SimpleOsdkProperties.js\";\nimport { resolvePropertyReference } from \"./propertyFormattingUtils.js\";\n\n/**\n * Extended NumberFormatOptions that includes rounding mode support\n * which is available in modern browsers but not yet in TypeScript types.\n * Only includes modes that are actually supported by Intl.NumberFormat and used in our API.\n */\nexport interface ExtendedNumberFormatOptions extends Intl.NumberFormatOptions {\n roundingMode?: \"ceil\" | \"floor\" | \"halfExpand\";\n convertNegativeToParenthesis?: boolean;\n}\n\n/**\n * Formats a number value according to the specified formatting rule\n */\nexport function formatNumber(\n value: number,\n numberType: PropertyNumberFormattingRuleType,\n objectData: SimpleOsdkProperties,\n locale: string,\n): string | undefined {\n switch (numberType.type) {\n case \"standard\":\n return formatStandardNumber(\n value,\n numberType.baseFormatOptions,\n locale,\n );\n\n case \"fixedValues\":\n return numberType.values[value];\n\n case \"currency\":\n return formatCurrency(value, numberType, objectData, locale);\n\n case \"standardUnit\":\n return formatStandardUnit(value, numberType, objectData, locale);\n\n case \"customUnit\":\n return formatCustomUnit(value, numberType, objectData, locale);\n\n case \"affix\":\n return formatAffix(value, numberType, objectData, locale);\n\n case \"duration\":\n // TODO (duration is a bit more complex)\n return undefined;\n\n case \"scale\":\n return formatScale(value, numberType, locale);\n\n case \"ratio\":\n return formatRatio(value, numberType, locale);\n\n default:\n numberType satisfies never;\n return undefined;\n }\n}\n\nfunction formatStandardNumber(\n value: number,\n options: NumberFormatOptions,\n locale: string,\n): string {\n return formatNumberWithAffixes(value, options, locale);\n}\n\nfunction formatCurrency(\n value: number,\n rule: NumberFormatCurrency,\n objectData: SimpleOsdkProperties,\n locale: string,\n): string {\n const currencyCode = resolvePropertyReference(rule.currencyCode, objectData);\n if (currencyCode == null) {\n return formatStandardNumber(value, rule.baseFormatOptions, locale);\n }\n\n const options: ExtendedNumberFormatOptions = {\n ...convertToIntlOptions(rule.baseFormatOptions),\n style: \"currency\",\n currency: currencyCode,\n currencyDisplay: rule.style === \"COMPACT\" ? \"narrowSymbol\" : \"symbol\",\n };\n\n return formatWithIntl(value, options, locale);\n}\n\nfunction formatStandardUnit(\n value: number,\n rule: NumberFormatStandardUnit,\n objectData: SimpleOsdkProperties,\n locale: string,\n): string {\n const unit = resolvePropertyReference(rule.unit, objectData);\n if (unit == null) {\n return formatStandardNumber(value, rule.baseFormatOptions, locale);\n }\n\n const options: ExtendedNumberFormatOptions = {\n ...convertToIntlOptions(rule.baseFormatOptions),\n style: \"unit\",\n unit: unit,\n };\n\n try {\n return formatWithIntl(value, options, locale);\n } catch (error) {\n const suffix = ` ${unit}`;\n return formatNumberWithAffixes(\n value,\n rule.baseFormatOptions,\n locale,\n \"\",\n suffix,\n );\n }\n}\n\nfunction formatCustomUnit(\n value: number,\n rule: NumberFormatCustomUnit,\n objectData: SimpleOsdkProperties,\n locale: string,\n): string {\n const unit = resolvePropertyReference(rule.unit, objectData);\n const suffix = unit != null ? ` ${unit}` : \"\";\n return formatNumberWithAffixes(\n value,\n rule.baseFormatOptions,\n locale,\n \"\",\n suffix,\n );\n}\n\nfunction formatAffix(\n value: number,\n rule: NumberFormatAffix,\n objectData: SimpleOsdkProperties,\n locale: string,\n): string {\n const prefix = rule.affix.prefix != null\n ? resolvePropertyReference(rule.affix.prefix, objectData) ?? \"\"\n : \"\";\n const suffix = rule.affix.postfix != null\n ? resolvePropertyReference(rule.affix.postfix, objectData) ?? \"\"\n : \"\";\n return formatNumberWithAffixes(\n value,\n rule.baseFormatOptions,\n locale,\n prefix,\n suffix,\n );\n}\n\n/**\n * Gets the scale divisor for a given scale type\n */\nfunction getScaleDivisor(scaleType: NumberScaleType): number {\n switch (scaleType) {\n case \"THOUSANDS\":\n return 1e3;\n case \"MILLIONS\":\n return 1e6;\n case \"BILLIONS\":\n return 1e9;\n default:\n scaleType satisfies never;\n throw new Error(`Unknown scale type: ${scaleType}`);\n }\n}\n\n/**\n * Extracts the localized compact suffix for a given scale.\n * Uses Intl.NumberFormat with compact notation to get the proper i18n suffix.\n */\nfunction getLocalizedCompactSuffix(\n scaleDivisor: number,\n locale: string,\n): string {\n const compactFormatter = new Intl.NumberFormat(locale, {\n notation: \"compact\",\n compactDisplay: \"short\",\n });\n\n const parts = compactFormatter.formatToParts(scaleDivisor);\n const compactPart = parts.find(p => p.type === \"compact\");\n return compactPart?.value ?? \"\";\n}\n\nfunction formatScale(\n value: number,\n rule: NumberFormatScale,\n locale: string,\n): string {\n const scaleDivisor = getScaleDivisor(rule.scaleType);\n const scaledValue = value / scaleDivisor;\n const suffix = getLocalizedCompactSuffix(scaleDivisor, locale);\n\n return formatNumberWithAffixes(\n scaledValue,\n rule.baseFormatOptions,\n locale,\n \"\",\n suffix,\n );\n}\n\nfunction getRatioScaledValue(\n value: number,\n ratioType: NumberRatioType,\n): number {\n switch (ratioType) {\n case \"PERCENTAGE\":\n return value * 100;\n case \"PER_MILLE\":\n return value * 1000;\n case \"BASIS_POINTS\":\n return value * 10000;\n default:\n ratioType satisfies never;\n throw new Error(`Unknown ratio type: ${ratioType}`);\n }\n}\n\nfunction formatRatio(\n value: number,\n rule: NumberFormatRatio,\n locale: string,\n): string {\n // Special case: PERCENTAGE uses Intl's native percent style\n if (rule.ratioType === \"PERCENTAGE\") {\n const options: ExtendedNumberFormatOptions = {\n ...convertToIntlOptions(rule.baseFormatOptions),\n style: \"percent\",\n };\n return formatWithIntl(value, options, locale);\n }\n\n // Other ratio types: scale and add suffix\n const scaledValue = getRatioScaledValue(value, rule.ratioType);\n\n let suffix: string;\n switch (rule.ratioType) {\n case \"PER_MILLE\":\n suffix = \"‰\";\n break;\n case \"BASIS_POINTS\":\n suffix = \" bps\";\n break;\n default:\n rule.ratioType satisfies never;\n throw new Error(`Unknown ratio type: ${rule.ratioType}`);\n }\n\n return formatNumberWithAffixes(\n scaledValue,\n rule.baseFormatOptions,\n locale,\n \"\",\n suffix,\n );\n}\n\n/**\n * Maps notation from OSDK format to Intl format\n */\nfunction mapNotation(\n notation: \"STANDARD\" | \"SCIENTIFIC\" | \"ENGINEERING\" | \"COMPACT\",\n): Intl.NumberFormatOptions[\"notation\"] {\n switch (notation) {\n case \"STANDARD\":\n return \"standard\";\n case \"SCIENTIFIC\":\n return \"scientific\";\n case \"ENGINEERING\":\n return \"engineering\";\n case \"COMPACT\":\n return \"compact\";\n default:\n notation satisfies never;\n }\n}\n\n/**\n * Maps rounding mode from OSDK format to Intl format\n */\nfunction mapRoundingMode(\n mode: \"CEIL\" | \"FLOOR\" | \"ROUND_CLOSEST\",\n): ExtendedNumberFormatOptions[\"roundingMode\"] {\n switch (mode) {\n case \"CEIL\":\n return \"ceil\";\n case \"FLOOR\":\n return \"floor\";\n case \"ROUND_CLOSEST\":\n return \"halfExpand\";\n default:\n mode satisfies never;\n return undefined;\n }\n}\n\nfunction convertToIntlOptions(\n options: NumberFormatOptions,\n): ExtendedNumberFormatOptions {\n return {\n useGrouping: options.useGrouping,\n minimumIntegerDigits: options.minimumIntegerDigits,\n minimumFractionDigits: options.minimumFractionDigits,\n maximumFractionDigits: options.maximumFractionDigits,\n minimumSignificantDigits: options.minimumSignificantDigits,\n maximumSignificantDigits: options.maximumSignificantDigits,\n notation: options.notation ? mapNotation(options.notation) : undefined,\n roundingMode: options.roundingMode\n ? mapRoundingMode(options.roundingMode)\n : undefined,\n convertNegativeToParenthesis: options.convertNegativeToParenthesis,\n };\n}\n\n/**\n * Applies negative-to-parenthesis conversion if requested\n */\nfunction maybeConvertNegativeToParenthesis(\n formatted: string,\n value: number,\n shouldConvert: boolean,\n): string {\n if (shouldConvert && value < 0) {\n return formatted.replace(/^-/, \"(\") + \")\";\n }\n return formatted;\n}\n\n/**\n * Formats a number using Intl.NumberFormat with the given options\n */\nfunction formatWithIntl(\n value: number,\n options: ExtendedNumberFormatOptions,\n locale: string,\n): string {\n const formatter = new Intl.NumberFormat(locale, options);\n const formatted = formatter.format(value);\n return maybeConvertNegativeToParenthesis(\n formatted,\n value,\n options.convertNegativeToParenthesis ?? false,\n );\n}\n\n/**\n * Formats a number and optionally adds prefix/suffix\n */\nfunction formatNumberWithAffixes(\n value: number,\n baseOptions: NumberFormatOptions,\n locale: string,\n prefix?: string,\n suffix?: string,\n): string {\n const intlOptions = convertToIntlOptions(baseOptions);\n const formatted = formatWithIntl(value, intlOptions, locale);\n return `${prefix || \"\"}${formatted}${suffix || \"\"}`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ /*
2
+ * Copyright 2025 Palantir Technologies, Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /**
18
+ * Resolves a property reference or string constant to its actual value
19
+ */
20
+
21
+ export function resolvePropertyReference(ref, objectData) {
22
+ if (ref.type === "constant") {
23
+ return ref.value;
24
+ } else if (ref.type === "propertyType") {
25
+ const value = objectData[ref.propertyApiName];
26
+ return value != null ? String(value) : undefined;
27
+ }
28
+ return undefined;
29
+ }
30
+ /**
31
+ * Gets the browser's current locale
32
+ */
33
+ export function getBrowserLocale() {
34
+ if (typeof navigator !== "undefined" && navigator.language != null) {
35
+ return navigator.language;
36
+ }
37
+ return "en-US";
38
+ }
39
+ //# sourceMappingURL=propertyFormattingUtils.js.map