@rippling/rippling-sdk 0.2.0-alpha.83 → 0.2.0-alpha.85

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 (314) hide show
  1. package/examples/manifest/custom-object-creation-workflow/custom-object-creation-workflow.ts +44 -26
  2. package/examples/manifest/dental-practice-management/dental-practice-management.ts +470 -142
  3. package/examples/manifest/dental-practice-management/functions/chair-schedule.ts +23 -13
  4. package/examples/manifest/dental-practice-management/functions/complete-visit.ts +55 -32
  5. package/examples/manifest/dental-practice-management/functions/operatory-list.ts +23 -13
  6. package/examples/manifest/dental-practice-management/functions/patient-list.ts +23 -13
  7. package/examples/manifest/dental-practice-management/functions/treatment-plan-list.ts +23 -13
  8. package/examples/manifest/existing-manifest-mutations/existing-manifest-mutations.ts +23 -68
  9. package/examples/manifest/field-service-dispatch/field-service-dispatch.ts +375 -102
  10. package/examples/manifest/grant-program-management/grant-program-management.ts +419 -125
  11. package/examples/manifest/gym-membership-management/functions/check-in-desk.ts +23 -13
  12. package/examples/manifest/gym-membership-management/functions/member-list.ts +23 -13
  13. package/examples/manifest/gym-membership-management/functions/today-schedule.ts +23 -13
  14. package/examples/manifest/gym-membership-management/functions/trainer-list.ts +23 -13
  15. package/examples/manifest/gym-membership-management/gym-membership-management.ts +442 -92
  16. package/examples/manifest/procurement-approval-hub/procurement-approval-hub.ts +408 -122
  17. package/examples/manifest/simple-todo-app/functions/mark-done.ts +12 -16
  18. package/examples/manifest/simple-todo-app/functions/todo-list.ts +23 -13
  19. package/examples/manifest/simple-todo-app/simple-todo-app.ts +109 -40
  20. package/examples/manifest/todo-app-without-object-list-view/functions/todo-page.ts +193 -166
  21. package/examples/manifest/todo-app-without-object-list-view/todo-app-without-object-list-view.ts +47 -24
  22. package/package.json +13 -7
  23. package/resources/custom-objects/custom-objects.d.mts +0 -7
  24. package/resources/custom-objects/custom-objects.d.mts.map +1 -1
  25. package/resources/custom-objects/custom-objects.d.ts +0 -7
  26. package/resources/custom-objects/custom-objects.d.ts.map +1 -1
  27. package/resources/custom-objects/custom-objects.js.map +1 -1
  28. package/resources/custom-objects/custom-objects.mjs.map +1 -1
  29. package/resources/custom-objects/fields.d.mts +14 -128
  30. package/resources/custom-objects/fields.d.mts.map +1 -1
  31. package/resources/custom-objects/fields.d.ts +14 -128
  32. package/resources/custom-objects/fields.d.ts.map +1 -1
  33. package/src/resources/custom-objects/custom-objects.ts +0 -8
  34. package/src/resources/custom-objects/fields.ts +13 -191
  35. package/src/tsconfig.json +1 -1
  36. package/src/version.ts +1 -1
  37. package/version.d.mts +1 -1
  38. package/version.d.ts +1 -1
  39. package/version.js +1 -1
  40. package/version.mjs +1 -1
  41. package/core/platform/custom-objects/category.d.mts +0 -125
  42. package/core/platform/custom-objects/category.d.mts.map +0 -1
  43. package/core/platform/custom-objects/category.d.ts +0 -125
  44. package/core/platform/custom-objects/category.d.ts.map +0 -1
  45. package/core/platform/custom-objects/category.js +0 -188
  46. package/core/platform/custom-objects/category.js.map +0 -1
  47. package/core/platform/custom-objects/category.mjs +0 -178
  48. package/core/platform/custom-objects/category.mjs.map +0 -1
  49. package/core/platform/custom-objects/definition.d.mts +0 -147
  50. package/core/platform/custom-objects/definition.d.mts.map +0 -1
  51. package/core/platform/custom-objects/definition.d.ts +0 -147
  52. package/core/platform/custom-objects/definition.d.ts.map +0 -1
  53. package/core/platform/custom-objects/definition.js +0 -200
  54. package/core/platform/custom-objects/definition.js.map +0 -1
  55. package/core/platform/custom-objects/definition.mjs +0 -190
  56. package/core/platform/custom-objects/definition.mjs.map +0 -1
  57. package/core/platform/custom-objects/fields.d.mts +0 -302
  58. package/core/platform/custom-objects/fields.d.mts.map +0 -1
  59. package/core/platform/custom-objects/fields.d.ts +0 -302
  60. package/core/platform/custom-objects/fields.d.ts.map +0 -1
  61. package/core/platform/custom-objects/fields.js +0 -369
  62. package/core/platform/custom-objects/fields.js.map +0 -1
  63. package/core/platform/custom-objects/fields.mjs +0 -347
  64. package/core/platform/custom-objects/fields.mjs.map +0 -1
  65. package/core/platform/custom-objects/function-runtime.d.mts +0 -42
  66. package/core/platform/custom-objects/function-runtime.d.mts.map +0 -1
  67. package/core/platform/custom-objects/function-runtime.d.ts +0 -42
  68. package/core/platform/custom-objects/function-runtime.d.ts.map +0 -1
  69. package/core/platform/custom-objects/function-runtime.js +0 -38
  70. package/core/platform/custom-objects/function-runtime.js.map +0 -1
  71. package/core/platform/custom-objects/function-runtime.mjs +0 -35
  72. package/core/platform/custom-objects/function-runtime.mjs.map +0 -1
  73. package/core/platform/custom-objects/lifecycle.d.mts +0 -83
  74. package/core/platform/custom-objects/lifecycle.d.mts.map +0 -1
  75. package/core/platform/custom-objects/lifecycle.d.ts +0 -83
  76. package/core/platform/custom-objects/lifecycle.d.ts.map +0 -1
  77. package/core/platform/custom-objects/lifecycle.js +0 -372
  78. package/core/platform/custom-objects/lifecycle.js.map +0 -1
  79. package/core/platform/custom-objects/lifecycle.mjs +0 -367
  80. package/core/platform/custom-objects/lifecycle.mjs.map +0 -1
  81. package/core/platform/custom-objects/manager.d.mts +0 -354
  82. package/core/platform/custom-objects/manager.d.mts.map +0 -1
  83. package/core/platform/custom-objects/manager.d.ts +0 -354
  84. package/core/platform/custom-objects/manager.d.ts.map +0 -1
  85. package/core/platform/custom-objects/manager.js +0 -646
  86. package/core/platform/custom-objects/manager.js.map +0 -1
  87. package/core/platform/custom-objects/manager.mjs +0 -637
  88. package/core/platform/custom-objects/manager.mjs.map +0 -1
  89. package/core/platform/custom-objects/provisioning.d.mts +0 -138
  90. package/core/platform/custom-objects/provisioning.d.mts.map +0 -1
  91. package/core/platform/custom-objects/provisioning.d.ts +0 -138
  92. package/core/platform/custom-objects/provisioning.d.ts.map +0 -1
  93. package/core/platform/custom-objects/provisioning.js +0 -455
  94. package/core/platform/custom-objects/provisioning.js.map +0 -1
  95. package/core/platform/custom-objects/provisioning.mjs +0 -447
  96. package/core/platform/custom-objects/provisioning.mjs.map +0 -1
  97. package/core/platform/custom-objects/rql.d.mts +0 -122
  98. package/core/platform/custom-objects/rql.d.mts.map +0 -1
  99. package/core/platform/custom-objects/rql.d.ts +0 -122
  100. package/core/platform/custom-objects/rql.d.ts.map +0 -1
  101. package/core/platform/custom-objects/rql.js +0 -225
  102. package/core/platform/custom-objects/rql.js.map +0 -1
  103. package/core/platform/custom-objects/rql.mjs +0 -222
  104. package/core/platform/custom-objects/rql.mjs.map +0 -1
  105. package/core/platform/custom-objects/schema-manager.d.mts +0 -203
  106. package/core/platform/custom-objects/schema-manager.d.mts.map +0 -1
  107. package/core/platform/custom-objects/schema-manager.d.ts +0 -203
  108. package/core/platform/custom-objects/schema-manager.d.ts.map +0 -1
  109. package/core/platform/custom-objects/schema-manager.js +0 -256
  110. package/core/platform/custom-objects/schema-manager.js.map +0 -1
  111. package/core/platform/custom-objects/schema-manager.mjs +0 -249
  112. package/core/platform/custom-objects/schema-manager.mjs.map +0 -1
  113. package/core/platform/custom-objects/typed-rql.d.mts +0 -157
  114. package/core/platform/custom-objects/typed-rql.d.mts.map +0 -1
  115. package/core/platform/custom-objects/typed-rql.d.ts +0 -157
  116. package/core/platform/custom-objects/typed-rql.d.ts.map +0 -1
  117. package/core/platform/custom-objects/typed-rql.js +0 -583
  118. package/core/platform/custom-objects/typed-rql.js.map +0 -1
  119. package/core/platform/custom-objects/typed-rql.mjs +0 -580
  120. package/core/platform/custom-objects/typed-rql.mjs.map +0 -1
  121. package/core/platform/custom-objects/types.d.mts +0 -549
  122. package/core/platform/custom-objects/types.d.mts.map +0 -1
  123. package/core/platform/custom-objects/types.d.ts +0 -549
  124. package/core/platform/custom-objects/types.d.ts.map +0 -1
  125. package/core/platform/custom-objects/types.js +0 -20
  126. package/core/platform/custom-objects/types.js.map +0 -1
  127. package/core/platform/custom-objects/types.mjs +0 -17
  128. package/core/platform/custom-objects/types.mjs.map +0 -1
  129. package/core/platform/custom-objects/validation.d.mts +0 -97
  130. package/core/platform/custom-objects/validation.d.mts.map +0 -1
  131. package/core/platform/custom-objects/validation.d.ts +0 -97
  132. package/core/platform/custom-objects/validation.d.ts.map +0 -1
  133. package/core/platform/custom-objects/validation.js +0 -477
  134. package/core/platform/custom-objects/validation.js.map +0 -1
  135. package/core/platform/custom-objects/validation.mjs +0 -465
  136. package/core/platform/custom-objects/validation.mjs.map +0 -1
  137. package/core/platform/custom-objects.d.mts +0 -67
  138. package/core/platform/custom-objects.d.mts.map +0 -1
  139. package/core/platform/custom-objects.d.ts +0 -67
  140. package/core/platform/custom-objects.d.ts.map +0 -1
  141. package/core/platform/custom-objects.js +0 -118
  142. package/core/platform/custom-objects.js.map +0 -1
  143. package/core/platform/custom-objects.mjs +0 -45
  144. package/core/platform/custom-objects.mjs.map +0 -1
  145. package/core/platform/manifest/custom-objects/action.d.mts +0 -58
  146. package/core/platform/manifest/custom-objects/action.d.mts.map +0 -1
  147. package/core/platform/manifest/custom-objects/action.d.ts +0 -58
  148. package/core/platform/manifest/custom-objects/action.d.ts.map +0 -1
  149. package/core/platform/manifest/custom-objects/action.js +0 -44
  150. package/core/platform/manifest/custom-objects/action.js.map +0 -1
  151. package/core/platform/manifest/custom-objects/action.mjs +0 -40
  152. package/core/platform/manifest/custom-objects/action.mjs.map +0 -1
  153. package/core/platform/manifest/custom-objects/conditions.d.mts +0 -240
  154. package/core/platform/manifest/custom-objects/conditions.d.mts.map +0 -1
  155. package/core/platform/manifest/custom-objects/conditions.d.ts +0 -240
  156. package/core/platform/manifest/custom-objects/conditions.d.ts.map +0 -1
  157. package/core/platform/manifest/custom-objects/conditions.js +0 -326
  158. package/core/platform/manifest/custom-objects/conditions.js.map +0 -1
  159. package/core/platform/manifest/custom-objects/conditions.mjs +0 -321
  160. package/core/platform/manifest/custom-objects/conditions.mjs.map +0 -1
  161. package/core/platform/manifest/custom-objects/existing.d.mts +0 -87
  162. package/core/platform/manifest/custom-objects/existing.d.mts.map +0 -1
  163. package/core/platform/manifest/custom-objects/existing.d.ts +0 -87
  164. package/core/platform/manifest/custom-objects/existing.d.ts.map +0 -1
  165. package/core/platform/manifest/custom-objects/existing.js +0 -113
  166. package/core/platform/manifest/custom-objects/existing.js.map +0 -1
  167. package/core/platform/manifest/custom-objects/existing.mjs +0 -109
  168. package/core/platform/manifest/custom-objects/existing.mjs.map +0 -1
  169. package/core/platform/manifest/custom-objects/field-resolution.d.mts +0 -48
  170. package/core/platform/manifest/custom-objects/field-resolution.d.mts.map +0 -1
  171. package/core/platform/manifest/custom-objects/field-resolution.d.ts +0 -48
  172. package/core/platform/manifest/custom-objects/field-resolution.d.ts.map +0 -1
  173. package/core/platform/manifest/custom-objects/field-resolution.js +0 -61
  174. package/core/platform/manifest/custom-objects/field-resolution.js.map +0 -1
  175. package/core/platform/manifest/custom-objects/field-resolution.mjs +0 -58
  176. package/core/platform/manifest/custom-objects/field-resolution.mjs.map +0 -1
  177. package/core/platform/manifest/custom-objects/function-file.d.mts +0 -87
  178. package/core/platform/manifest/custom-objects/function-file.d.mts.map +0 -1
  179. package/core/platform/manifest/custom-objects/function-file.d.ts +0 -87
  180. package/core/platform/manifest/custom-objects/function-file.d.ts.map +0 -1
  181. package/core/platform/manifest/custom-objects/function-file.js +0 -76
  182. package/core/platform/manifest/custom-objects/function-file.js.map +0 -1
  183. package/core/platform/manifest/custom-objects/function-file.mjs +0 -69
  184. package/core/platform/manifest/custom-objects/function-file.mjs.map +0 -1
  185. package/core/platform/manifest/custom-objects/list-view.d.mts +0 -65
  186. package/core/platform/manifest/custom-objects/list-view.d.mts.map +0 -1
  187. package/core/platform/manifest/custom-objects/list-view.d.ts +0 -65
  188. package/core/platform/manifest/custom-objects/list-view.d.ts.map +0 -1
  189. package/core/platform/manifest/custom-objects/list-view.js +0 -33
  190. package/core/platform/manifest/custom-objects/list-view.js.map +0 -1
  191. package/core/platform/manifest/custom-objects/list-view.mjs +0 -30
  192. package/core/platform/manifest/custom-objects/list-view.mjs.map +0 -1
  193. package/core/platform/manifest/custom-objects/object-list-page.d.mts +0 -43
  194. package/core/platform/manifest/custom-objects/object-list-page.d.mts.map +0 -1
  195. package/core/platform/manifest/custom-objects/object-list-page.d.ts +0 -43
  196. package/core/platform/manifest/custom-objects/object-list-page.d.ts.map +0 -1
  197. package/core/platform/manifest/custom-objects/object-list-page.js +0 -54
  198. package/core/platform/manifest/custom-objects/object-list-page.js.map +0 -1
  199. package/core/platform/manifest/custom-objects/object-list-page.mjs +0 -50
  200. package/core/platform/manifest/custom-objects/object-list-page.mjs.map +0 -1
  201. package/core/platform/manifest/custom-objects/page-layout.d.mts +0 -142
  202. package/core/platform/manifest/custom-objects/page-layout.d.mts.map +0 -1
  203. package/core/platform/manifest/custom-objects/page-layout.d.ts +0 -142
  204. package/core/platform/manifest/custom-objects/page-layout.d.ts.map +0 -1
  205. package/core/platform/manifest/custom-objects/page-layout.js +0 -184
  206. package/core/platform/manifest/custom-objects/page-layout.js.map +0 -1
  207. package/core/platform/manifest/custom-objects/page-layout.mjs +0 -180
  208. package/core/platform/manifest/custom-objects/page-layout.mjs.map +0 -1
  209. package/core/platform/manifest/custom-objects/register.d.mts +0 -87
  210. package/core/platform/manifest/custom-objects/register.d.mts.map +0 -1
  211. package/core/platform/manifest/custom-objects/register.d.ts +0 -87
  212. package/core/platform/manifest/custom-objects/register.d.ts.map +0 -1
  213. package/core/platform/manifest/custom-objects/register.js +0 -395
  214. package/core/platform/manifest/custom-objects/register.js.map +0 -1
  215. package/core/platform/manifest/custom-objects/register.mjs +0 -391
  216. package/core/platform/manifest/custom-objects/register.mjs.map +0 -1
  217. package/core/platform/manifest/custom-objects/rule.d.mts +0 -113
  218. package/core/platform/manifest/custom-objects/rule.d.mts.map +0 -1
  219. package/core/platform/manifest/custom-objects/rule.d.ts +0 -113
  220. package/core/platform/manifest/custom-objects/rule.d.ts.map +0 -1
  221. package/core/platform/manifest/custom-objects/rule.js +0 -49
  222. package/core/platform/manifest/custom-objects/rule.js.map +0 -1
  223. package/core/platform/manifest/custom-objects/rule.mjs +0 -45
  224. package/core/platform/manifest/custom-objects/rule.mjs.map +0 -1
  225. package/core/platform/manifest/custom-objects/sdui-page.d.mts +0 -214
  226. package/core/platform/manifest/custom-objects/sdui-page.d.mts.map +0 -1
  227. package/core/platform/manifest/custom-objects/sdui-page.d.ts +0 -214
  228. package/core/platform/manifest/custom-objects/sdui-page.d.ts.map +0 -1
  229. package/core/platform/manifest/custom-objects/sdui-page.js +0 -194
  230. package/core/platform/manifest/custom-objects/sdui-page.js.map +0 -1
  231. package/core/platform/manifest/custom-objects/sdui-page.mjs +0 -182
  232. package/core/platform/manifest/custom-objects/sdui-page.mjs.map +0 -1
  233. package/core/platform/manifest/custom-objects/typed-condition.d.mts +0 -28
  234. package/core/platform/manifest/custom-objects/typed-condition.d.mts.map +0 -1
  235. package/core/platform/manifest/custom-objects/typed-condition.d.ts +0 -28
  236. package/core/platform/manifest/custom-objects/typed-condition.d.ts.map +0 -1
  237. package/core/platform/manifest/custom-objects/typed-condition.js +0 -434
  238. package/core/platform/manifest/custom-objects/typed-condition.js.map +0 -1
  239. package/core/platform/manifest/custom-objects/typed-condition.mjs +0 -431
  240. package/core/platform/manifest/custom-objects/typed-condition.mjs.map +0 -1
  241. package/core/platform/manifest/custom-objects/types.d.mts +0 -29
  242. package/core/platform/manifest/custom-objects/types.d.mts.map +0 -1
  243. package/core/platform/manifest/custom-objects/types.d.ts +0 -29
  244. package/core/platform/manifest/custom-objects/types.d.ts.map +0 -1
  245. package/core/platform/manifest/custom-objects/types.js +0 -3
  246. package/core/platform/manifest/custom-objects/types.js.map +0 -1
  247. package/core/platform/manifest/custom-objects/types.mjs +0 -2
  248. package/core/platform/manifest/custom-objects/types.mjs.map +0 -1
  249. package/core/platform/manifest/custom-objects/validation.d.mts +0 -44
  250. package/core/platform/manifest/custom-objects/validation.d.mts.map +0 -1
  251. package/core/platform/manifest/custom-objects/validation.d.ts +0 -44
  252. package/core/platform/manifest/custom-objects/validation.d.ts.map +0 -1
  253. package/core/platform/manifest/custom-objects/validation.js +0 -30
  254. package/core/platform/manifest/custom-objects/validation.js.map +0 -1
  255. package/core/platform/manifest/custom-objects/validation.mjs +0 -27
  256. package/core/platform/manifest/custom-objects/validation.mjs.map +0 -1
  257. package/core/platform/manifest/custom-objects/workflow.d.mts +0 -47
  258. package/core/platform/manifest/custom-objects/workflow.d.mts.map +0 -1
  259. package/core/platform/manifest/custom-objects/workflow.d.ts +0 -47
  260. package/core/platform/manifest/custom-objects/workflow.d.ts.map +0 -1
  261. package/core/platform/manifest/custom-objects/workflow.js +0 -38
  262. package/core/platform/manifest/custom-objects/workflow.js.map +0 -1
  263. package/core/platform/manifest/custom-objects/workflow.mjs +0 -34
  264. package/core/platform/manifest/custom-objects/workflow.mjs.map +0 -1
  265. package/core/platform/manifest/custom-objects.d.mts +0 -85
  266. package/core/platform/manifest/custom-objects.d.mts.map +0 -1
  267. package/core/platform/manifest/custom-objects.d.ts +0 -85
  268. package/core/platform/manifest/custom-objects.d.ts.map +0 -1
  269. package/core/platform/manifest/custom-objects.js +0 -84
  270. package/core/platform/manifest/custom-objects.js.map +0 -1
  271. package/core/platform/manifest/custom-objects.mjs +0 -55
  272. package/core/platform/manifest/custom-objects.mjs.map +0 -1
  273. package/examples/manifest/custom-object-creation-workflow/functions/intake-request-created.ts +0 -20
  274. package/examples/manifest/custom-object-creation-workflow/schema.ts +0 -29
  275. package/examples/manifest/dental-practice-management/schema.ts +0 -298
  276. package/examples/manifest/field-service-dispatch/schema.ts +0 -248
  277. package/examples/manifest/grant-program-management/schema.ts +0 -269
  278. package/examples/manifest/gym-membership-management/schema.ts +0 -266
  279. package/examples/manifest/procurement-approval-hub/functions/route-purchase-request.ts +0 -20
  280. package/examples/manifest/procurement-approval-hub/schema.ts +0 -256
  281. package/examples/manifest/simple-todo-app/schema.ts +0 -60
  282. package/examples/manifest/todo-app-without-object-list-view/schema.ts +0 -28
  283. package/src/core/platform/README.md +0 -20
  284. package/src/core/platform/custom-objects/category.ts +0 -294
  285. package/src/core/platform/custom-objects/definition.ts +0 -373
  286. package/src/core/platform/custom-objects/fields.ts +0 -653
  287. package/src/core/platform/custom-objects/function-runtime.ts +0 -76
  288. package/src/core/platform/custom-objects/lifecycle.ts +0 -557
  289. package/src/core/platform/custom-objects/manager.ts +0 -959
  290. package/src/core/platform/custom-objects/provisioning.ts +0 -672
  291. package/src/core/platform/custom-objects/rql.ts +0 -375
  292. package/src/core/platform/custom-objects/schema-manager.ts +0 -351
  293. package/src/core/platform/custom-objects/typed-rql.ts +0 -1273
  294. package/src/core/platform/custom-objects/types.ts +0 -753
  295. package/src/core/platform/custom-objects/validation.ts +0 -573
  296. package/src/core/platform/custom-objects.ts +0 -269
  297. package/src/core/platform/manifest/README.md +0 -26
  298. package/src/core/platform/manifest/custom-objects/action.ts +0 -87
  299. package/src/core/platform/manifest/custom-objects/conditions.ts +0 -762
  300. package/src/core/platform/manifest/custom-objects/existing.ts +0 -221
  301. package/src/core/platform/manifest/custom-objects/field-resolution.ts +0 -116
  302. package/src/core/platform/manifest/custom-objects/function-file.ts +0 -149
  303. package/src/core/platform/manifest/custom-objects/list-view.ts +0 -95
  304. package/src/core/platform/manifest/custom-objects/object-list-page.ts +0 -87
  305. package/src/core/platform/manifest/custom-objects/page-layout.ts +0 -380
  306. package/src/core/platform/manifest/custom-objects/register.ts +0 -555
  307. package/src/core/platform/manifest/custom-objects/rule.ts +0 -192
  308. package/src/core/platform/manifest/custom-objects/sdui-page.ts +0 -515
  309. package/src/core/platform/manifest/custom-objects/typed-condition.ts +0 -617
  310. package/src/core/platform/manifest/custom-objects/types.ts +0 -92
  311. package/src/core/platform/manifest/custom-objects/validation.ts +0 -70
  312. package/src/core/platform/manifest/custom-objects/workflow.ts +0 -71
  313. package/src/core/platform/manifest/custom-objects.ts +0 -203
  314. package/src/pebble-sdui-web-custom-apps-shim.d.ts +0 -3
@@ -1,672 +0,0 @@
1
- import type { RipplingSDK } from '../../../client';
2
- import type {
3
- CustomObject,
4
- CustomObjectCreateParams,
5
- CustomObjectUpdateParams,
6
- } from '../../../resources/custom-objects/custom-objects';
7
- import type {
8
- CustomObjectField,
9
- CustomObjectFieldDataType,
10
- CustomObjectNameFieldDetails,
11
- FieldCreateParams,
12
- FieldUpdateParams,
13
- } from '../../../resources/custom-objects/fields';
14
- import type { AnyCustomObjectDefinition, AnyFieldDefinition, FieldNames } from './types';
15
- import type { CustomObjectCategoryDefinition } from './category';
16
- import { provisionCustomObjectCategoryDefinition } from './category';
17
-
18
- /**
19
- * Provisioned custom-object summary returned by the SDK provisioning helpers.
20
- *
21
- * @typeParam TDefinition - Typed custom-object definition that was provisioned.
22
- */
23
- export interface ProvisionedCustomObject<
24
- TDefinition extends AnyCustomObjectDefinition = AnyCustomObjectDefinition,
25
- > {
26
- /** Logical object definition used as the source of truth. */
27
- readonly definition: TDefinition;
28
- /** Wire-level api name created on the backend. */
29
- readonly customObjectApiName: TDefinition['apiName'];
30
- /** Backend response returned by `client.customObjects.create(...)`. */
31
- readonly createdObject: CustomObject;
32
- /** Backend response returned by `client.customObjects.update(...)`. */
33
- readonly updatedObject: CustomObject;
34
- /** Optional response returned when the helper updates the platform-managed `name` field. */
35
- readonly updatedNameField?: CustomObjectField;
36
- /** Backend responses returned by field creation calls, keyed by logical field name. */
37
- readonly createdFields: Readonly<Record<FieldNames<TDefinition>, CustomObjectField>>;
38
- /** Backend responses returned by field update calls, keyed by logical field name. */
39
- readonly updatedFields: Readonly<Record<FieldNames<TDefinition>, CustomObjectField>>;
40
- }
41
-
42
- /**
43
- * Options for provisioning a single typed custom-object definition through the REST SDK.
44
- *
45
- * Assumptions baked into this helper:
46
- * - custom-object `create` derives the immutable `api_name` from the submitted logical name
47
- * - field `create` derives the immutable `api_name` from the submitted logical field name
48
- * - follow-up `update` calls can safely set human-facing display labels without changing api names
49
- */
50
- export interface ProvisionCustomObjectOptions {
51
- /**
52
- * Optional typed category definition to create or update before provisioning the object.
53
- */
54
- readonly categoryDefinition?: CustomObjectCategoryDefinition;
55
- /**
56
- * Resolved custom-category id or native category id used by the live REST object APIs.
57
- *
58
- * Supply this when the definition does not embed a typed category definition.
59
- */
60
- readonly categoryIdentifier?: string;
61
- /**
62
- * Whether to issue the follow-up object update that applies the human-facing display name.
63
- *
64
- * Defaults to `true`.
65
- */
66
- readonly updateObjectDisplayMetadata?: boolean;
67
- /**
68
- * Whether to issue the follow-up field updates that apply human-facing display names.
69
- *
70
- * Defaults to `true`.
71
- */
72
- readonly updateFieldDisplayMetadata?: boolean;
73
- /**
74
- * Whether to update the platform-managed `name` field when the object definition uses autonumber metadata.
75
- *
76
- * Defaults to `true`.
77
- */
78
- readonly updateNameFieldDetails?: boolean;
79
- }
80
-
81
- /** Options for provisioning multiple custom-object definitions in one batch. */
82
- export interface ProvisionCustomObjectsOptions
83
- extends Omit<ProvisionCustomObjectOptions, 'categoryDefinition' | 'categoryIdentifier'> {
84
- /** Optional typed categories to ensure before creating the objects in this batch. */
85
- readonly categoryDefinitions?: readonly CustomObjectCategoryDefinition[];
86
- /**
87
- * Resolved category ids keyed by object api name for definitions that do not embed a typed category definition.
88
- */
89
- readonly categoryIdentifiersByObjectApiName?: Readonly<Record<string, string>>;
90
- }
91
-
92
- /**
93
- * Normalized field payload returned by the field-param builder helpers.
94
- */
95
- export interface ProvisionableFieldParams {
96
- /** Payload passed to `client.customObjects.fields.create(...)`. */
97
- readonly create: FieldCreateParams;
98
- /** Payload passed to `client.customObjects.fields.update(...)`. */
99
- readonly update: FieldUpdateParams;
100
- }
101
-
102
- /**
103
- * Returns whether one field references another object and therefore benefits from being created after scalar fields.
104
- *
105
- * @param field - Typed field definition to inspect.
106
- * @returns Whether the field is a lookup or parent-child relationship.
107
- */
108
- function isRelationshipField(field: AnyFieldDefinition): boolean {
109
- return field.kind === 'lookup' || field.kind === 'parent-child';
110
- }
111
-
112
- /**
113
- * Returns whether one field uses a formula-field variant.
114
- *
115
- * @param field - Typed field definition to inspect.
116
- * @returns Whether the field is one of the `formula-*` kinds.
117
- */
118
- function isFormulaField(
119
- field: AnyFieldDefinition,
120
- ): field is Extract<AnyFieldDefinition, { kind: `formula-${string}` }> {
121
- return field.kind.startsWith('formula-');
122
- }
123
-
124
- /**
125
- * Builds the wire-level `data_type` payload expected by the custom-object field REST API.
126
- *
127
- * @param field - Typed field definition to compile.
128
- * @returns REST `data_type` payload for the supplied field definition.
129
- */
130
- function buildFieldDataType(field: AnyFieldDefinition): CustomObjectFieldDataType | Record<string, unknown> {
131
- switch (field.kind) {
132
- case 'text':
133
- return {
134
- field_type: 'TEXT',
135
- ...(field.maxLength != null ? { max_length: field.maxLength } : {}),
136
- };
137
- case 'long-text':
138
- return {
139
- field_type: 'LONG_TEXT',
140
- ...(field.maxLength != null ? { max_length: field.maxLength } : {}),
141
- };
142
- case 'email':
143
- return { field_type: 'EMAIL' };
144
- case 'url':
145
- return { field_type: 'URL' };
146
- case 'phone':
147
- return { field_type: 'PHONE_NUMBER' };
148
- case 'number':
149
- return {
150
- field_type: 'NUMBER',
151
- ...(field.decimalPlaces != null ? { num_of_decimal_places: field.decimalPlaces } : {}),
152
- };
153
- case 'currency':
154
- return {
155
- field_type: 'CURRENCY',
156
- ...(field.currency != null ? { currency: field.currency } : {}),
157
- ...(field.decimalPlaces != null ? { num_of_decimal_places: field.decimalPlaces } : {}),
158
- };
159
- case 'percentage':
160
- return { field_type: 'PERCENTAGE', num_of_decimal_places: 2 };
161
- case 'date':
162
- return { field_type: 'DATE' };
163
- case 'datetime':
164
- return { field_type: 'DATETIME' };
165
- case 'time':
166
- return { field_type: 'TIME' };
167
- case 'select':
168
- return { field_type: 'SELECT', options_list: [...field.options] };
169
- case 'radio':
170
- return { field_type: 'RADIO', options_list: [...field.options] };
171
- case 'boolean':
172
- return { field_type: 'BOOLEAN' };
173
- case 'file':
174
- return {
175
- field_type: 'FILE',
176
- supported_types: field.allowedType === 'any' ? ['*'] : [field.allowedType],
177
- };
178
- case 'lookup':
179
- return {
180
- field_type: 'OG_REFERENCE_FIELD',
181
- og_model_rql_name: field.target.apiName,
182
- edge_type: 'LOOKUP',
183
- ...(field.relatedDataLabel != null ? { related_data_label: field.relatedDataLabel } : {}),
184
- ...(field.lookupFilterRqlCondition != null ?
185
- { lookup_filter_rql_condition: field.lookupFilterRqlCondition }
186
- : {}),
187
- };
188
- case 'parent-child':
189
- return {
190
- field_type: 'OG_REFERENCE_FIELD',
191
- og_model_rql_name: field.target.apiName,
192
- edge_type: 'PARENT_CHILD',
193
- ...(field.relatedDataLabel != null ? { related_data_label: field.relatedDataLabel } : {}),
194
- ...(field.parentChildType != null ? { parent_child_type: field.parentChildType } : {}),
195
- ...(field.enableParentOwnerInheritance != null ?
196
- { enable_parent_owner_inheritance: field.enableParentOwnerInheritance }
197
- : {}),
198
- };
199
- case 'formula-text':
200
- return { field_type: 'TEXT', ...(field.maxLength != null ? { max_length: field.maxLength } : {}) };
201
- case 'formula-number':
202
- return { field_type: 'NUMBER' };
203
- case 'formula-boolean':
204
- return { field_type: 'BOOLEAN' };
205
- case 'formula-currency':
206
- return { field_type: 'CURRENCY' };
207
- case 'formula-percentage':
208
- return { field_type: 'PERCENTAGE' };
209
- case 'formula-date':
210
- return { field_type: 'DATE' };
211
- case 'formula-url':
212
- return { field_type: 'URL' };
213
- }
214
- }
215
-
216
- /**
217
- * Builds REST section metadata for one typed field definition.
218
- *
219
- * @param definition - Object definition that owns the field and section map.
220
- * @param field - Typed field definition whose section metadata should be compiled.
221
- * @returns Concrete section id string expected by the live REST API, when available.
222
- * @throws Error when REST provisioning would require a section id that cannot be resolved.
223
- * @typeParam TDefinition - Object definition that owns the field.
224
- */
225
- function buildFieldSection<TDefinition extends AnyCustomObjectDefinition>(
226
- definition: TDefinition,
227
- field: AnyFieldDefinition,
228
- ): FieldCreateParams['section'] {
229
- const sectionKey = field.section;
230
- const sectionOverride = field.restSection;
231
- const overrideSectionId =
232
- typeof sectionOverride === 'string' ? sectionOverride : sectionOverride?.section_id;
233
-
234
- if (sectionKey == null) {
235
- if (sectionOverride == null) return undefined;
236
- if (overrideSectionId == null) {
237
- throw new Error('REST field provisioning currently requires a concrete section id string.');
238
- }
239
- return overrideSectionId;
240
- }
241
-
242
- const sections = definition.sections as Readonly<
243
- Record<string, { readonly name: string; readonly sectionId?: string }>
244
- >;
245
- const sectionDefinition = sections[sectionKey];
246
- if (sectionDefinition == null) return overrideSectionId;
247
-
248
- const resolvedSectionId = overrideSectionId ?? sectionDefinition.sectionId;
249
- if (resolvedSectionId == null) {
250
- throw new Error(
251
- `Field section "${sectionKey}" for "${definition.name}" requires a sectionId for REST provisioning.`,
252
- );
253
- }
254
- return resolvedSectionId;
255
- }
256
-
257
- /**
258
- * Builds name-field metadata for REST field updates when the object uses autonumber names.
259
- *
260
- * @param definition - Typed object definition whose name-field metadata should be compiled.
261
- * @returns Name-field metadata payload for the platform-managed `name` field, when needed.
262
- * @typeParam TDefinition - Object definition being compiled.
263
- */
264
- export function buildCustomObjectNameFieldDetails<TDefinition extends AnyCustomObjectDefinition>(
265
- definition: TDefinition,
266
- ): CustomObjectNameFieldDetails | undefined {
267
- if (definition.nameField.kind !== 'autonumber') return undefined;
268
- return {
269
- is_autonumber_field: true,
270
- autonumber_format: definition.nameField.format,
271
- ...(definition.nameField.startingNumber != null ?
272
- { starting_number: definition.nameField.startingNumber }
273
- : {}),
274
- };
275
- }
276
-
277
- /**
278
- * Builds the object-creation payload for the low-level REST API using a resolved category id.
279
- *
280
- * @param definition - Typed object definition to compile.
281
- * @param categoryIdentifier - Resolved custom-category id or native category id required by the live API.
282
- * @returns REST object-create payload.
283
- * @typeParam TDefinition - Object definition being compiled.
284
- */
285
- export function buildCustomObjectCreateParams<TDefinition extends AnyCustomObjectDefinition>(
286
- definition: TDefinition,
287
- categoryIdentifier: string,
288
- ): CustomObjectCreateParams {
289
- return {
290
- category: categoryIdentifier,
291
- description: definition.description,
292
- name: definition.name,
293
- };
294
- }
295
-
296
- /**
297
- * Builds the object-update payload used to restore human-facing labels after creation.
298
- *
299
- * @param definition - Typed object definition to compile.
300
- * @param categoryIdentifier - Resolved custom-category id or native category id required by the live API.
301
- * @returns REST object-update payload.
302
- * @typeParam TDefinition - Object definition being compiled.
303
- */
304
- export function buildCustomObjectUpdateParams<TDefinition extends AnyCustomObjectDefinition>(
305
- definition: TDefinition,
306
- categoryIdentifier: string,
307
- ): CustomObjectUpdateParams {
308
- return {
309
- category: categoryIdentifier,
310
- description: definition.description,
311
- ...(definition.enableHistory != null ? { enable_history: definition.enableHistory } : {}),
312
- name: definition.displayName,
313
- ...(definition.ownerRole != null ? { owner_role: definition.ownerRole } : {}),
314
- ...(definition.pluralLabel != null ? { plural_label: definition.pluralLabel } : {}),
315
- };
316
- }
317
-
318
- /**
319
- * Builds field create/update payloads for one logical field in a typed object definition.
320
- *
321
- * @param definition - Typed object definition that owns the field.
322
- * @param fieldName - Logical field name to compile.
323
- * @returns Frozen create/update payload pair for the field.
324
- * @typeParam TDefinition - Object definition being compiled.
325
- * @typeParam TFieldName - Logical field name being compiled.
326
- */
327
- export function buildProvisionableFieldParams<
328
- TDefinition extends AnyCustomObjectDefinition,
329
- TFieldName extends FieldNames<TDefinition>,
330
- >(definition: TDefinition, fieldName: TFieldName): ProvisionableFieldParams {
331
- const field = definition.fields[fieldName] as AnyFieldDefinition & { logicalName: string; apiName: string };
332
- const dataType = buildFieldDataType(field);
333
- const section = buildFieldSection(definition, field);
334
- const shared = {
335
- description: field.description,
336
- data_type: dataType,
337
- required: field.required,
338
- ...(field.enableHistory != null ? { enable_history: field.enableHistory } : {}),
339
- ...(field.formulaAttributeMetas != null ? { formula_attr_metas: field.formulaAttributeMetas } : {}),
340
- ...(field.rqlDefinition != null ? { rql_definition: field.rqlDefinition } : {}),
341
- ...(section != null ? { section } : {}),
342
- ...(isFormulaField(field) ? { derived_field_formula: field.formula } : {}),
343
- ...('unique' in field && field.unique != null ? { is_unique: field.unique } : {}),
344
- };
345
-
346
- const create: FieldCreateParams = {
347
- name: field.logicalName,
348
- ...shared,
349
- ...(field.derivedAggregatedField != null ?
350
- { derived_aggregated_field: field.derivedAggregatedField }
351
- : {}),
352
- };
353
-
354
- // The live GA field update path currently does not accept `derived_aggregated_field`, so keep it create-only.
355
- const update: FieldUpdateParams = {
356
- name: field.displayName,
357
- ...shared,
358
- };
359
-
360
- return Object.freeze({ create, update });
361
- }
362
-
363
- /**
364
- * Requires a resolved category identifier for one provisioning operation.
365
- *
366
- * @param definition - Object definition that needs a category identifier.
367
- * @param categoryIdentifier - Resolved custom-category id or native category id, if available.
368
- * @returns Required category identifier.
369
- * @throws Error when no usable category identifier is available.
370
- * @typeParam TDefinition - Object definition being provisioned.
371
- */
372
- function requireCategoryIdentifier<TDefinition extends AnyCustomObjectDefinition>(
373
- definition: TDefinition,
374
- categoryIdentifier: string | undefined,
375
- ): string {
376
- if (categoryIdentifier != null) return categoryIdentifier;
377
- throw new Error(
378
- `A category identifier is required to provision "${definition.apiName}". ` +
379
- `Provide options.categoryIdentifier or embed/provide a typed category definition.`,
380
- );
381
- }
382
-
383
- /**
384
- * Rejects duplicate object definitions within one batch provisioning request.
385
- *
386
- * @param definitions - Typed object definitions to validate for uniqueness.
387
- * @throws Error when multiple definitions compile to the same object API name.
388
- */
389
- function assertUniqueObjectDefinitions(definitions: readonly AnyCustomObjectDefinition[]): void {
390
- const seen = new Map<string, string>();
391
- for (const definition of definitions) {
392
- const existingName = seen.get(definition.apiName);
393
- if (existingName != null) {
394
- throw new Error(
395
- `Duplicate custom object definition for "${definition.apiName}" in batch: ` +
396
- `"${existingName}" and "${definition.name}".`,
397
- );
398
- }
399
- seen.set(definition.apiName, definition.name);
400
- }
401
- }
402
-
403
- /**
404
- * Collects and deduplicates embedded or explicitly supplied category definitions for a batch provision.
405
- *
406
- * @param definitions - Object definitions participating in the batch.
407
- * @param explicitDefinitions - Optional explicit category definitions supplied by the caller.
408
- * @returns Frozen deduplicated category-definition list.
409
- * @throws Error when two definitions for the same category API name disagree on visible metadata.
410
- */
411
- function collectCategoryDefinitions(
412
- definitions: readonly AnyCustomObjectDefinition[],
413
- explicitDefinitions: readonly CustomObjectCategoryDefinition[] | undefined,
414
- ): readonly CustomObjectCategoryDefinition[] {
415
- const categoryDefinitions =
416
- explicitDefinitions ?? definitions.map((definition) => definition.categoryDefinition);
417
- const uniqueDefinitions = new Map<string, CustomObjectCategoryDefinition>();
418
-
419
- for (const definition of categoryDefinitions) {
420
- if (definition == null) continue;
421
- const existing = uniqueDefinitions.get(definition.apiName);
422
- if (existing != null) {
423
- if (
424
- existing.displayName !== definition.displayName ||
425
- existing.description !== definition.description
426
- ) {
427
- throw new Error(
428
- `Conflicting category definitions for "${definition.apiName}" in batch provisioning.`,
429
- );
430
- }
431
- continue;
432
- }
433
- uniqueDefinitions.set(definition.apiName, definition);
434
- }
435
-
436
- return Object.freeze([...uniqueDefinitions.values()]);
437
- }
438
-
439
- /**
440
- * Resolves the category identifier that should be sent to the live object APIs during provisioning.
441
- *
442
- * @param client - SDK client used to provision embedded category definitions when needed.
443
- * @param definition - Typed object definition being provisioned.
444
- * @param options - Provisioning options that may already contain a category identifier.
445
- * @returns Resolved custom-category id or native category id.
446
- * @typeParam TDefinition - Object definition being provisioned.
447
- */
448
- async function resolveProvisionedCategoryIdentifier<TDefinition extends AnyCustomObjectDefinition>(
449
- client: RipplingSDK,
450
- definition: TDefinition,
451
- options: ProvisionCustomObjectOptions,
452
- ): Promise<string> {
453
- const categoryDefinition = options.categoryDefinition ?? definition.categoryDefinition;
454
- if (categoryDefinition == null) {
455
- return requireCategoryIdentifier(definition, options.categoryIdentifier);
456
- }
457
-
458
- const provisionedCategory = await provisionCustomObjectCategoryDefinition(client, categoryDefinition);
459
- return provisionedCategory.updatedCategory.id;
460
- }
461
-
462
- /**
463
- * Updates the platform-managed `name` field when the typed definition uses autonumber metadata.
464
- *
465
- * @param client - SDK client used to call the field APIs.
466
- * @param definition - Typed object definition whose name-field metadata should be applied.
467
- * @param options - Provisioning behavior flags.
468
- * @returns Updated `name` field DTO, when a name-field update was required.
469
- * @typeParam TDefinition - Object definition being provisioned.
470
- */
471
- async function updateNameFieldDetailsIfNeeded<TDefinition extends AnyCustomObjectDefinition>(
472
- client: RipplingSDK,
473
- definition: TDefinition,
474
- options: ProvisionCustomObjectOptions,
475
- ): Promise<CustomObjectField | undefined> {
476
- if (!(options.updateNameFieldDetails ?? true)) return undefined;
477
- const nameFieldDetails = buildCustomObjectNameFieldDetails(definition);
478
- if (nameFieldDetails == null) return undefined;
479
- return client.customObjects.fields.update(definition.apiName, 'name', {
480
- name_field_details: nameFieldDetails,
481
- });
482
- }
483
-
484
- /**
485
- * Provisions every custom field for one object definition in relationship-safe order.
486
- *
487
- * @param client - SDK client used to call the field APIs.
488
- * @param definition - Typed object definition whose fields should be provisioned.
489
- * @param updateFieldDisplayMetadata - Whether to issue follow-up field updates for display metadata.
490
- * @returns Frozen maps of created and updated field DTOs keyed by logical field name.
491
- * @typeParam TDefinition - Object definition being provisioned.
492
- */
493
- async function provisionFieldsForDefinition<TDefinition extends AnyCustomObjectDefinition>(
494
- client: RipplingSDK,
495
- definition: TDefinition,
496
- updateFieldDisplayMetadata: boolean,
497
- ): Promise<{
498
- readonly createdFields: Readonly<Record<FieldNames<TDefinition>, CustomObjectField>>;
499
- readonly updatedFields: Readonly<Record<FieldNames<TDefinition>, CustomObjectField>>;
500
- }> {
501
- const createdFields: Partial<Record<FieldNames<TDefinition>, CustomObjectField>> = {};
502
- const updatedFields: Partial<Record<FieldNames<TDefinition>, CustomObjectField>> = {};
503
- const orderedFieldNames = Object.keys(definition.fields).sort((left, right) => {
504
- const leftField = definition.fields[left as FieldNames<TDefinition>] as AnyFieldDefinition;
505
- const rightField = definition.fields[right as FieldNames<TDefinition>] as AnyFieldDefinition;
506
- return Number(isRelationshipField(leftField)) - Number(isRelationshipField(rightField));
507
- }) as FieldNames<TDefinition>[];
508
-
509
- for (const fieldName of orderedFieldNames) {
510
- const field = definition.fields[fieldName] as AnyFieldDefinition & { apiName: string };
511
- const params = buildProvisionableFieldParams(definition, fieldName);
512
- const createdField = await client.customObjects.fields.create(definition.apiName, params.create);
513
- if (createdField.api_name !== field.apiName) {
514
- throw new Error(
515
- `Field api_name mismatch for "${definition.name}.${String(fieldName)}": expected "${
516
- field.apiName
517
- }", got "${createdField.api_name}".`,
518
- );
519
- }
520
- createdFields[fieldName] = createdField;
521
-
522
- updatedFields[fieldName] =
523
- updateFieldDisplayMetadata ?
524
- await client.customObjects.fields.update(definition.apiName, field.apiName, params.update)
525
- : createdField;
526
- }
527
-
528
- return Object.freeze({
529
- createdFields: Object.freeze(createdFields) as Readonly<
530
- Record<FieldNames<TDefinition>, CustomObjectField>
531
- >,
532
- updatedFields: Object.freeze(updatedFields) as Readonly<
533
- Record<FieldNames<TDefinition>, CustomObjectField>
534
- >,
535
- });
536
- }
537
-
538
- /**
539
- * Creates one typed custom object through the REST SDK and returns the backend responses.
540
- *
541
- * @param client - SDK client used to call the metadata APIs.
542
- * @param definition - Typed object definition to provision.
543
- * @param options - Provisioning behavior flags for categories, display metadata, and name fields.
544
- * @returns Frozen provisioning result describing the created object, fields, and optional name-field update.
545
- * @typeParam TDefinition - Object definition being provisioned.
546
- */
547
- export async function provisionCustomObjectDefinition<TDefinition extends AnyCustomObjectDefinition>(
548
- client: RipplingSDK,
549
- definition: TDefinition,
550
- options: ProvisionCustomObjectOptions = {},
551
- ): Promise<ProvisionedCustomObject<TDefinition>> {
552
- const updateObjectDisplayMetadata = options.updateObjectDisplayMetadata ?? true;
553
- const updateFieldDisplayMetadata = options.updateFieldDisplayMetadata ?? true;
554
-
555
- const categoryIdentifier = await resolveProvisionedCategoryIdentifier(client, definition, options);
556
-
557
- const createdObject = await client.customObjects.create(
558
- buildCustomObjectCreateParams(definition, categoryIdentifier),
559
- );
560
- if (createdObject.api_name !== definition.apiName) {
561
- throw new Error(
562
- `Custom object api_name mismatch for "${definition.name}": expected "${definition.apiName}", got "${
563
- createdObject.api_name ?? '<missing>'
564
- }".`,
565
- );
566
- }
567
-
568
- const updatedObject =
569
- updateObjectDisplayMetadata ?
570
- await client.customObjects.update(
571
- definition.apiName,
572
- buildCustomObjectUpdateParams(definition, categoryIdentifier),
573
- )
574
- : createdObject;
575
- const updatedNameField = await updateNameFieldDetailsIfNeeded(client, definition, options);
576
- const fieldResults = await provisionFieldsForDefinition(client, definition, updateFieldDisplayMetadata);
577
-
578
- return Object.freeze({
579
- definition,
580
- customObjectApiName: definition.apiName,
581
- createdObject,
582
- updatedObject,
583
- ...(updatedNameField != null ? { updatedNameField } : {}),
584
- createdFields: fieldResults.createdFields,
585
- updatedFields: fieldResults.updatedFields,
586
- });
587
- }
588
-
589
- /**
590
- * Provisions multiple typed custom-object definitions through the REST SDK.
591
- *
592
- * @param client - SDK client used to call the metadata APIs.
593
- * @param definitions - Typed object definitions to provision.
594
- * @param options - Batch provisioning behavior flags.
595
- * @returns Frozen provisioning results in input order.
596
- */
597
- export async function provisionCustomObjectDefinitions(
598
- client: RipplingSDK,
599
- definitions: readonly AnyCustomObjectDefinition[],
600
- options: ProvisionCustomObjectsOptions = {},
601
- ): Promise<ReadonlyArray<ProvisionedCustomObject>> {
602
- assertUniqueObjectDefinitions(definitions);
603
- const categoryDefinitions = collectCategoryDefinitions(definitions, options.categoryDefinitions);
604
- const provisionedCategoryIds = new Map<string, string>();
605
- for (const categoryDefinition of categoryDefinitions) {
606
- const provisionedCategory = await provisionCustomObjectCategoryDefinition(client, categoryDefinition);
607
- provisionedCategoryIds.set(categoryDefinition.apiName, provisionedCategory.updatedCategory.id);
608
- }
609
-
610
- const objectResults = new Map<string, { readonly created: CustomObject; readonly updated: CustomObject }>();
611
- const updatedNameFields = new Map<string, CustomObjectField>();
612
-
613
- for (const definition of definitions) {
614
- const categoryIdentifier =
615
- definition.categoryDefinition != null ?
616
- provisionedCategoryIds.get(definition.categoryDefinition.apiName)
617
- : options.categoryIdentifiersByObjectApiName?.[definition.apiName];
618
- const resolvedCategoryIdentifier = requireCategoryIdentifier(definition, categoryIdentifier);
619
-
620
- const createdObject = await client.customObjects.create(
621
- buildCustomObjectCreateParams(definition, resolvedCategoryIdentifier),
622
- );
623
- if (createdObject.api_name !== definition.apiName) {
624
- throw new Error(
625
- `Custom object api_name mismatch for "${definition.name}": expected "${definition.apiName}", got "${
626
- createdObject.api_name ?? '<missing>'
627
- }".`,
628
- );
629
- }
630
-
631
- const updatedObject =
632
- options.updateObjectDisplayMetadata ?? true ?
633
- await client.customObjects.update(
634
- definition.apiName,
635
- buildCustomObjectUpdateParams(definition, resolvedCategoryIdentifier),
636
- )
637
- : createdObject;
638
-
639
- objectResults.set(definition.apiName, Object.freeze({ created: createdObject, updated: updatedObject }));
640
- const updatedNameField = await updateNameFieldDetailsIfNeeded(client, definition, options);
641
- if (updatedNameField != null) updatedNameFields.set(definition.apiName, updatedNameField);
642
- }
643
-
644
- const results: ProvisionedCustomObject[] = [];
645
- for (const definition of definitions) {
646
- const objectResult = objectResults.get(definition.apiName);
647
- if (objectResult == null) {
648
- throw new Error(`Missing created object response for "${definition.apiName}".`);
649
- }
650
-
651
- const fieldResults = await provisionFieldsForDefinition(
652
- client,
653
- definition,
654
- options.updateFieldDisplayMetadata ?? true,
655
- );
656
-
657
- const updatedNameField = updatedNameFields.get(definition.apiName);
658
- results.push(
659
- Object.freeze({
660
- definition,
661
- customObjectApiName: definition.apiName,
662
- createdObject: objectResult.created,
663
- updatedObject: objectResult.updated,
664
- ...(updatedNameField != null ? { updatedNameField } : {}),
665
- createdFields: fieldResults.createdFields,
666
- updatedFields: fieldResults.updatedFields,
667
- }),
668
- );
669
- }
670
-
671
- return Object.freeze(results);
672
- }