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

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 (359) hide show
  1. package/client.d.mts +4 -4
  2. package/client.d.mts.map +1 -1
  3. package/client.d.ts +4 -4
  4. package/client.d.ts.map +1 -1
  5. package/client.js.map +1 -1
  6. package/client.mjs.map +1 -1
  7. package/core/platform/custom-objects/category.d.mts +125 -0
  8. package/core/platform/custom-objects/category.d.mts.map +1 -0
  9. package/core/platform/custom-objects/category.d.ts +125 -0
  10. package/core/platform/custom-objects/category.d.ts.map +1 -0
  11. package/core/platform/custom-objects/category.js +188 -0
  12. package/core/platform/custom-objects/category.js.map +1 -0
  13. package/core/platform/custom-objects/category.mjs +178 -0
  14. package/core/platform/custom-objects/category.mjs.map +1 -0
  15. package/core/platform/custom-objects/definition.d.mts +147 -0
  16. package/core/platform/custom-objects/definition.d.mts.map +1 -0
  17. package/core/platform/custom-objects/definition.d.ts +147 -0
  18. package/core/platform/custom-objects/definition.d.ts.map +1 -0
  19. package/core/platform/custom-objects/definition.js +200 -0
  20. package/core/platform/custom-objects/definition.js.map +1 -0
  21. package/core/platform/custom-objects/definition.mjs +190 -0
  22. package/core/platform/custom-objects/definition.mjs.map +1 -0
  23. package/core/platform/custom-objects/fields.d.mts +302 -0
  24. package/core/platform/custom-objects/fields.d.mts.map +1 -0
  25. package/core/platform/custom-objects/fields.d.ts +302 -0
  26. package/core/platform/custom-objects/fields.d.ts.map +1 -0
  27. package/core/platform/custom-objects/fields.js +369 -0
  28. package/core/platform/custom-objects/fields.js.map +1 -0
  29. package/core/platform/custom-objects/fields.mjs +347 -0
  30. package/core/platform/custom-objects/fields.mjs.map +1 -0
  31. package/core/platform/custom-objects/function-runtime.d.mts +42 -0
  32. package/core/platform/custom-objects/function-runtime.d.mts.map +1 -0
  33. package/core/platform/custom-objects/function-runtime.d.ts +42 -0
  34. package/core/platform/custom-objects/function-runtime.d.ts.map +1 -0
  35. package/core/platform/custom-objects/function-runtime.js +38 -0
  36. package/core/platform/custom-objects/function-runtime.js.map +1 -0
  37. package/core/platform/custom-objects/function-runtime.mjs +35 -0
  38. package/core/platform/custom-objects/function-runtime.mjs.map +1 -0
  39. package/core/platform/custom-objects/lifecycle.d.mts +83 -0
  40. package/core/platform/custom-objects/lifecycle.d.mts.map +1 -0
  41. package/core/platform/custom-objects/lifecycle.d.ts +83 -0
  42. package/core/platform/custom-objects/lifecycle.d.ts.map +1 -0
  43. package/core/platform/custom-objects/lifecycle.js +372 -0
  44. package/core/platform/custom-objects/lifecycle.js.map +1 -0
  45. package/core/platform/custom-objects/lifecycle.mjs +367 -0
  46. package/core/platform/custom-objects/lifecycle.mjs.map +1 -0
  47. package/core/platform/custom-objects/manager.d.mts +354 -0
  48. package/core/platform/custom-objects/manager.d.mts.map +1 -0
  49. package/core/platform/custom-objects/manager.d.ts +354 -0
  50. package/core/platform/custom-objects/manager.d.ts.map +1 -0
  51. package/core/platform/custom-objects/manager.js +646 -0
  52. package/core/platform/custom-objects/manager.js.map +1 -0
  53. package/core/platform/custom-objects/manager.mjs +637 -0
  54. package/core/platform/custom-objects/manager.mjs.map +1 -0
  55. package/core/platform/custom-objects/provisioning.d.mts +138 -0
  56. package/core/platform/custom-objects/provisioning.d.mts.map +1 -0
  57. package/core/platform/custom-objects/provisioning.d.ts +138 -0
  58. package/core/platform/custom-objects/provisioning.d.ts.map +1 -0
  59. package/core/platform/custom-objects/provisioning.js +455 -0
  60. package/core/platform/custom-objects/provisioning.js.map +1 -0
  61. package/core/platform/custom-objects/provisioning.mjs +447 -0
  62. package/core/platform/custom-objects/provisioning.mjs.map +1 -0
  63. package/core/platform/custom-objects/rql.d.mts +122 -0
  64. package/core/platform/custom-objects/rql.d.mts.map +1 -0
  65. package/core/platform/custom-objects/rql.d.ts +122 -0
  66. package/core/platform/custom-objects/rql.d.ts.map +1 -0
  67. package/core/platform/custom-objects/rql.js +225 -0
  68. package/core/platform/custom-objects/rql.js.map +1 -0
  69. package/core/platform/custom-objects/rql.mjs +222 -0
  70. package/core/platform/custom-objects/rql.mjs.map +1 -0
  71. package/core/platform/custom-objects/schema-manager.d.mts +203 -0
  72. package/core/platform/custom-objects/schema-manager.d.mts.map +1 -0
  73. package/core/platform/custom-objects/schema-manager.d.ts +203 -0
  74. package/core/platform/custom-objects/schema-manager.d.ts.map +1 -0
  75. package/core/platform/custom-objects/schema-manager.js +256 -0
  76. package/core/platform/custom-objects/schema-manager.js.map +1 -0
  77. package/core/platform/custom-objects/schema-manager.mjs +249 -0
  78. package/core/platform/custom-objects/schema-manager.mjs.map +1 -0
  79. package/core/platform/custom-objects/typed-rql.d.mts +157 -0
  80. package/core/platform/custom-objects/typed-rql.d.mts.map +1 -0
  81. package/core/platform/custom-objects/typed-rql.d.ts +157 -0
  82. package/core/platform/custom-objects/typed-rql.d.ts.map +1 -0
  83. package/core/platform/custom-objects/typed-rql.js +583 -0
  84. package/core/platform/custom-objects/typed-rql.js.map +1 -0
  85. package/core/platform/custom-objects/typed-rql.mjs +580 -0
  86. package/core/platform/custom-objects/typed-rql.mjs.map +1 -0
  87. package/core/platform/custom-objects/types.d.mts +549 -0
  88. package/core/platform/custom-objects/types.d.mts.map +1 -0
  89. package/core/platform/custom-objects/types.d.ts +549 -0
  90. package/core/platform/custom-objects/types.d.ts.map +1 -0
  91. package/core/platform/custom-objects/types.js +20 -0
  92. package/core/platform/custom-objects/types.js.map +1 -0
  93. package/core/platform/custom-objects/types.mjs +17 -0
  94. package/core/platform/custom-objects/types.mjs.map +1 -0
  95. package/core/platform/custom-objects/validation.d.mts +97 -0
  96. package/core/platform/custom-objects/validation.d.mts.map +1 -0
  97. package/core/platform/custom-objects/validation.d.ts +97 -0
  98. package/core/platform/custom-objects/validation.d.ts.map +1 -0
  99. package/core/platform/custom-objects/validation.js +477 -0
  100. package/core/platform/custom-objects/validation.js.map +1 -0
  101. package/core/platform/custom-objects/validation.mjs +465 -0
  102. package/core/platform/custom-objects/validation.mjs.map +1 -0
  103. package/core/platform/custom-objects.d.mts +67 -0
  104. package/core/platform/custom-objects.d.mts.map +1 -0
  105. package/core/platform/custom-objects.d.ts +67 -0
  106. package/core/platform/custom-objects.d.ts.map +1 -0
  107. package/core/platform/custom-objects.js +118 -0
  108. package/core/platform/custom-objects.js.map +1 -0
  109. package/core/platform/custom-objects.mjs +45 -0
  110. package/core/platform/custom-objects.mjs.map +1 -0
  111. package/core/platform/manifest/custom-objects/action.d.mts +58 -0
  112. package/core/platform/manifest/custom-objects/action.d.mts.map +1 -0
  113. package/core/platform/manifest/custom-objects/action.d.ts +58 -0
  114. package/core/platform/manifest/custom-objects/action.d.ts.map +1 -0
  115. package/core/platform/manifest/custom-objects/action.js +44 -0
  116. package/core/platform/manifest/custom-objects/action.js.map +1 -0
  117. package/core/platform/manifest/custom-objects/action.mjs +40 -0
  118. package/core/platform/manifest/custom-objects/action.mjs.map +1 -0
  119. package/core/platform/manifest/custom-objects/conditions.d.mts +240 -0
  120. package/core/platform/manifest/custom-objects/conditions.d.mts.map +1 -0
  121. package/core/platform/manifest/custom-objects/conditions.d.ts +240 -0
  122. package/core/platform/manifest/custom-objects/conditions.d.ts.map +1 -0
  123. package/core/platform/manifest/custom-objects/conditions.js +326 -0
  124. package/core/platform/manifest/custom-objects/conditions.js.map +1 -0
  125. package/core/platform/manifest/custom-objects/conditions.mjs +321 -0
  126. package/core/platform/manifest/custom-objects/conditions.mjs.map +1 -0
  127. package/core/platform/manifest/custom-objects/existing.d.mts +87 -0
  128. package/core/platform/manifest/custom-objects/existing.d.mts.map +1 -0
  129. package/core/platform/manifest/custom-objects/existing.d.ts +87 -0
  130. package/core/platform/manifest/custom-objects/existing.d.ts.map +1 -0
  131. package/core/platform/manifest/custom-objects/existing.js +113 -0
  132. package/core/platform/manifest/custom-objects/existing.js.map +1 -0
  133. package/core/platform/manifest/custom-objects/existing.mjs +109 -0
  134. package/core/platform/manifest/custom-objects/existing.mjs.map +1 -0
  135. package/core/platform/manifest/custom-objects/field-resolution.d.mts +48 -0
  136. package/core/platform/manifest/custom-objects/field-resolution.d.mts.map +1 -0
  137. package/core/platform/manifest/custom-objects/field-resolution.d.ts +48 -0
  138. package/core/platform/manifest/custom-objects/field-resolution.d.ts.map +1 -0
  139. package/core/platform/manifest/custom-objects/field-resolution.js +61 -0
  140. package/core/platform/manifest/custom-objects/field-resolution.js.map +1 -0
  141. package/core/platform/manifest/custom-objects/field-resolution.mjs +58 -0
  142. package/core/platform/manifest/custom-objects/field-resolution.mjs.map +1 -0
  143. package/core/platform/manifest/custom-objects/function-file.d.mts +87 -0
  144. package/core/platform/manifest/custom-objects/function-file.d.mts.map +1 -0
  145. package/core/platform/manifest/custom-objects/function-file.d.ts +87 -0
  146. package/core/platform/manifest/custom-objects/function-file.d.ts.map +1 -0
  147. package/core/platform/manifest/custom-objects/function-file.js +76 -0
  148. package/core/platform/manifest/custom-objects/function-file.js.map +1 -0
  149. package/core/platform/manifest/custom-objects/function-file.mjs +69 -0
  150. package/core/platform/manifest/custom-objects/function-file.mjs.map +1 -0
  151. package/core/platform/manifest/custom-objects/list-view.d.mts +65 -0
  152. package/core/platform/manifest/custom-objects/list-view.d.mts.map +1 -0
  153. package/core/platform/manifest/custom-objects/list-view.d.ts +65 -0
  154. package/core/platform/manifest/custom-objects/list-view.d.ts.map +1 -0
  155. package/core/platform/manifest/custom-objects/list-view.js +33 -0
  156. package/core/platform/manifest/custom-objects/list-view.js.map +1 -0
  157. package/core/platform/manifest/custom-objects/list-view.mjs +30 -0
  158. package/core/platform/manifest/custom-objects/list-view.mjs.map +1 -0
  159. package/core/platform/manifest/custom-objects/object-list-page.d.mts +43 -0
  160. package/core/platform/manifest/custom-objects/object-list-page.d.mts.map +1 -0
  161. package/core/platform/manifest/custom-objects/object-list-page.d.ts +43 -0
  162. package/core/platform/manifest/custom-objects/object-list-page.d.ts.map +1 -0
  163. package/core/platform/manifest/custom-objects/object-list-page.js +54 -0
  164. package/core/platform/manifest/custom-objects/object-list-page.js.map +1 -0
  165. package/core/platform/manifest/custom-objects/object-list-page.mjs +50 -0
  166. package/core/platform/manifest/custom-objects/object-list-page.mjs.map +1 -0
  167. package/core/platform/manifest/custom-objects/page-layout.d.mts +142 -0
  168. package/core/platform/manifest/custom-objects/page-layout.d.mts.map +1 -0
  169. package/core/platform/manifest/custom-objects/page-layout.d.ts +142 -0
  170. package/core/platform/manifest/custom-objects/page-layout.d.ts.map +1 -0
  171. package/core/platform/manifest/custom-objects/page-layout.js +184 -0
  172. package/core/platform/manifest/custom-objects/page-layout.js.map +1 -0
  173. package/core/platform/manifest/custom-objects/page-layout.mjs +180 -0
  174. package/core/platform/manifest/custom-objects/page-layout.mjs.map +1 -0
  175. package/core/platform/manifest/custom-objects/register.d.mts +87 -0
  176. package/core/platform/manifest/custom-objects/register.d.mts.map +1 -0
  177. package/core/platform/manifest/custom-objects/register.d.ts +87 -0
  178. package/core/platform/manifest/custom-objects/register.d.ts.map +1 -0
  179. package/core/platform/manifest/custom-objects/register.js +395 -0
  180. package/core/platform/manifest/custom-objects/register.js.map +1 -0
  181. package/core/platform/manifest/custom-objects/register.mjs +391 -0
  182. package/core/platform/manifest/custom-objects/register.mjs.map +1 -0
  183. package/core/platform/manifest/custom-objects/rule.d.mts +113 -0
  184. package/core/platform/manifest/custom-objects/rule.d.mts.map +1 -0
  185. package/core/platform/manifest/custom-objects/rule.d.ts +113 -0
  186. package/core/platform/manifest/custom-objects/rule.d.ts.map +1 -0
  187. package/core/platform/manifest/custom-objects/rule.js +49 -0
  188. package/core/platform/manifest/custom-objects/rule.js.map +1 -0
  189. package/core/platform/manifest/custom-objects/rule.mjs +45 -0
  190. package/core/platform/manifest/custom-objects/rule.mjs.map +1 -0
  191. package/core/platform/manifest/custom-objects/sdui-page.d.mts +214 -0
  192. package/core/platform/manifest/custom-objects/sdui-page.d.mts.map +1 -0
  193. package/core/platform/manifest/custom-objects/sdui-page.d.ts +214 -0
  194. package/core/platform/manifest/custom-objects/sdui-page.d.ts.map +1 -0
  195. package/core/platform/manifest/custom-objects/sdui-page.js +194 -0
  196. package/core/platform/manifest/custom-objects/sdui-page.js.map +1 -0
  197. package/core/platform/manifest/custom-objects/sdui-page.mjs +182 -0
  198. package/core/platform/manifest/custom-objects/sdui-page.mjs.map +1 -0
  199. package/core/platform/manifest/custom-objects/typed-condition.d.mts +28 -0
  200. package/core/platform/manifest/custom-objects/typed-condition.d.mts.map +1 -0
  201. package/core/platform/manifest/custom-objects/typed-condition.d.ts +28 -0
  202. package/core/platform/manifest/custom-objects/typed-condition.d.ts.map +1 -0
  203. package/core/platform/manifest/custom-objects/typed-condition.js +434 -0
  204. package/core/platform/manifest/custom-objects/typed-condition.js.map +1 -0
  205. package/core/platform/manifest/custom-objects/typed-condition.mjs +431 -0
  206. package/core/platform/manifest/custom-objects/typed-condition.mjs.map +1 -0
  207. package/core/platform/manifest/custom-objects/types.d.mts +29 -0
  208. package/core/platform/manifest/custom-objects/types.d.mts.map +1 -0
  209. package/core/platform/manifest/custom-objects/types.d.ts +29 -0
  210. package/core/platform/manifest/custom-objects/types.d.ts.map +1 -0
  211. package/core/platform/manifest/custom-objects/types.js +3 -0
  212. package/core/platform/manifest/custom-objects/types.js.map +1 -0
  213. package/core/platform/manifest/custom-objects/types.mjs +2 -0
  214. package/core/platform/manifest/custom-objects/types.mjs.map +1 -0
  215. package/core/platform/manifest/custom-objects/validation.d.mts +44 -0
  216. package/core/platform/manifest/custom-objects/validation.d.mts.map +1 -0
  217. package/core/platform/manifest/custom-objects/validation.d.ts +44 -0
  218. package/core/platform/manifest/custom-objects/validation.d.ts.map +1 -0
  219. package/core/platform/manifest/custom-objects/validation.js +30 -0
  220. package/core/platform/manifest/custom-objects/validation.js.map +1 -0
  221. package/core/platform/manifest/custom-objects/validation.mjs +27 -0
  222. package/core/platform/manifest/custom-objects/validation.mjs.map +1 -0
  223. package/core/platform/manifest/custom-objects/workflow.d.mts +47 -0
  224. package/core/platform/manifest/custom-objects/workflow.d.mts.map +1 -0
  225. package/core/platform/manifest/custom-objects/workflow.d.ts +47 -0
  226. package/core/platform/manifest/custom-objects/workflow.d.ts.map +1 -0
  227. package/core/platform/manifest/custom-objects/workflow.js +38 -0
  228. package/core/platform/manifest/custom-objects/workflow.js.map +1 -0
  229. package/core/platform/manifest/custom-objects/workflow.mjs +34 -0
  230. package/core/platform/manifest/custom-objects/workflow.mjs.map +1 -0
  231. package/core/platform/manifest/custom-objects.d.mts +85 -0
  232. package/core/platform/manifest/custom-objects.d.mts.map +1 -0
  233. package/core/platform/manifest/custom-objects.d.ts +85 -0
  234. package/core/platform/manifest/custom-objects.d.ts.map +1 -0
  235. package/core/platform/manifest/custom-objects.js +84 -0
  236. package/core/platform/manifest/custom-objects.js.map +1 -0
  237. package/core/platform/manifest/custom-objects.mjs +55 -0
  238. package/core/platform/manifest/custom-objects.mjs.map +1 -0
  239. package/examples/manifest/custom-object-creation-workflow/custom-object-creation-workflow.ts +26 -44
  240. package/examples/manifest/custom-object-creation-workflow/functions/intake-request-created.ts +20 -0
  241. package/examples/manifest/custom-object-creation-workflow/schema.ts +29 -0
  242. package/examples/manifest/dental-practice-management/dental-practice-management.ts +143 -471
  243. package/examples/manifest/dental-practice-management/functions/chair-schedule.ts +13 -23
  244. package/examples/manifest/dental-practice-management/functions/complete-visit.ts +32 -55
  245. package/examples/manifest/dental-practice-management/functions/operatory-list.ts +13 -23
  246. package/examples/manifest/dental-practice-management/functions/patient-list.ts +13 -23
  247. package/examples/manifest/dental-practice-management/functions/treatment-plan-list.ts +13 -23
  248. package/examples/manifest/dental-practice-management/schema.ts +298 -0
  249. package/examples/manifest/existing-manifest-mutations/existing-manifest-mutations.ts +68 -23
  250. package/examples/manifest/field-service-dispatch/field-service-dispatch.ts +102 -375
  251. package/examples/manifest/field-service-dispatch/schema.ts +248 -0
  252. package/examples/manifest/grant-program-management/grant-program-management.ts +125 -419
  253. package/examples/manifest/grant-program-management/schema.ts +269 -0
  254. package/examples/manifest/gym-membership-management/functions/check-in-desk.ts +13 -23
  255. package/examples/manifest/gym-membership-management/functions/member-list.ts +13 -23
  256. package/examples/manifest/gym-membership-management/functions/today-schedule.ts +13 -23
  257. package/examples/manifest/gym-membership-management/functions/trainer-list.ts +13 -23
  258. package/examples/manifest/gym-membership-management/gym-membership-management.ts +93 -443
  259. package/examples/manifest/gym-membership-management/schema.ts +266 -0
  260. package/examples/manifest/procurement-approval-hub/functions/route-purchase-request.ts +20 -0
  261. package/examples/manifest/procurement-approval-hub/procurement-approval-hub.ts +122 -408
  262. package/examples/manifest/procurement-approval-hub/schema.ts +256 -0
  263. package/examples/manifest/simple-todo-app/functions/mark-done.ts +16 -12
  264. package/examples/manifest/simple-todo-app/functions/todo-list.ts +13 -23
  265. package/examples/manifest/simple-todo-app/schema.ts +60 -0
  266. package/examples/manifest/simple-todo-app/simple-todo-app.ts +41 -110
  267. package/examples/manifest/todo-app-without-object-list-view/functions/todo-page.ts +156 -183
  268. package/examples/manifest/todo-app-without-object-list-view/schema.ts +28 -0
  269. package/examples/manifest/todo-app-without-object-list-view/todo-app-without-object-list-view.ts +25 -48
  270. package/functions.d.mts +1 -0
  271. package/functions.d.mts.map +1 -1
  272. package/functions.d.ts +1 -0
  273. package/functions.d.ts.map +1 -1
  274. package/functions.js.map +1 -1
  275. package/functions.mjs.map +1 -1
  276. package/package.json +7 -13
  277. package/resources/custom-objects/custom-objects.d.mts +7 -0
  278. package/resources/custom-objects/custom-objects.d.mts.map +1 -1
  279. package/resources/custom-objects/custom-objects.d.ts +7 -0
  280. package/resources/custom-objects/custom-objects.d.ts.map +1 -1
  281. package/resources/custom-objects/custom-objects.js.map +1 -1
  282. package/resources/custom-objects/custom-objects.mjs.map +1 -1
  283. package/resources/custom-objects/fields.d.mts +170 -15
  284. package/resources/custom-objects/fields.d.mts.map +1 -1
  285. package/resources/custom-objects/fields.d.ts +170 -15
  286. package/resources/custom-objects/fields.d.ts.map +1 -1
  287. package/resources/index.d.mts +2 -2
  288. package/resources/index.d.mts.map +1 -1
  289. package/resources/index.d.ts +2 -2
  290. package/resources/index.d.ts.map +1 -1
  291. package/resources/index.js.map +1 -1
  292. package/resources/index.mjs.map +1 -1
  293. package/resources/leave-program-evaluations.d.mts +510 -3
  294. package/resources/leave-program-evaluations.d.mts.map +1 -1
  295. package/resources/leave-program-evaluations.d.ts +510 -3
  296. package/resources/leave-program-evaluations.d.ts.map +1 -1
  297. package/resources/levels.d.mts +64 -2
  298. package/resources/levels.d.mts.map +1 -1
  299. package/resources/levels.d.ts +64 -2
  300. package/resources/levels.d.ts.map +1 -1
  301. package/resources/levels.js +22 -0
  302. package/resources/levels.js.map +1 -1
  303. package/resources/levels.mjs +22 -0
  304. package/resources/levels.mjs.map +1 -1
  305. package/resources/tracks.d.mts +45 -1
  306. package/resources/tracks.d.mts.map +1 -1
  307. package/resources/tracks.d.ts +45 -1
  308. package/resources/tracks.d.ts.map +1 -1
  309. package/resources/tracks.js +22 -0
  310. package/resources/tracks.js.map +1 -1
  311. package/resources/tracks.mjs +22 -0
  312. package/resources/tracks.mjs.map +1 -1
  313. package/src/client.ts +8 -0
  314. package/src/core/platform/README.md +20 -0
  315. package/src/core/platform/custom-objects/category.ts +294 -0
  316. package/src/core/platform/custom-objects/definition.ts +373 -0
  317. package/src/core/platform/custom-objects/fields.ts +653 -0
  318. package/src/core/platform/custom-objects/function-runtime.ts +76 -0
  319. package/src/core/platform/custom-objects/lifecycle.ts +557 -0
  320. package/src/core/platform/custom-objects/manager.ts +959 -0
  321. package/src/core/platform/custom-objects/provisioning.ts +672 -0
  322. package/src/core/platform/custom-objects/rql.ts +375 -0
  323. package/src/core/platform/custom-objects/schema-manager.ts +351 -0
  324. package/src/core/platform/custom-objects/typed-rql.ts +1273 -0
  325. package/src/core/platform/custom-objects/types.ts +753 -0
  326. package/src/core/platform/custom-objects/validation.ts +573 -0
  327. package/src/core/platform/custom-objects.ts +269 -0
  328. package/src/core/platform/manifest/README.md +26 -0
  329. package/src/core/platform/manifest/custom-objects/action.ts +87 -0
  330. package/src/core/platform/manifest/custom-objects/conditions.ts +762 -0
  331. package/src/core/platform/manifest/custom-objects/existing.ts +221 -0
  332. package/src/core/platform/manifest/custom-objects/field-resolution.ts +116 -0
  333. package/src/core/platform/manifest/custom-objects/function-file.ts +149 -0
  334. package/src/core/platform/manifest/custom-objects/list-view.ts +95 -0
  335. package/src/core/platform/manifest/custom-objects/object-list-page.ts +87 -0
  336. package/src/core/platform/manifest/custom-objects/page-layout.ts +380 -0
  337. package/src/core/platform/manifest/custom-objects/register.ts +555 -0
  338. package/src/core/platform/manifest/custom-objects/rule.ts +192 -0
  339. package/src/core/platform/manifest/custom-objects/sdui-page.ts +515 -0
  340. package/src/core/platform/manifest/custom-objects/typed-condition.ts +617 -0
  341. package/src/core/platform/manifest/custom-objects/types.ts +92 -0
  342. package/src/core/platform/manifest/custom-objects/validation.ts +70 -0
  343. package/src/core/platform/manifest/custom-objects/workflow.ts +71 -0
  344. package/src/core/platform/manifest/custom-objects.ts +203 -0
  345. package/src/functions.md +1 -0
  346. package/src/functions.ts +1 -0
  347. package/src/pebble-sdui-web-custom-apps-shim.d.ts +3 -0
  348. package/src/resources/custom-objects/custom-objects.ts +8 -0
  349. package/src/resources/custom-objects/fields.ts +239 -14
  350. package/src/resources/index.ts +4 -0
  351. package/src/resources/leave-program-evaluations.ts +610 -3
  352. package/src/resources/levels.ts +93 -1
  353. package/src/resources/tracks.ts +70 -0
  354. package/src/tsconfig.json +1 -1
  355. package/src/version.ts +1 -1
  356. package/version.d.mts +1 -1
  357. package/version.d.ts +1 -1
  358. package/version.js +1 -1
  359. package/version.mjs +1 -1
@@ -29,23 +29,31 @@ import {
29
29
  TextInput,
30
30
  VStack,
31
31
  render,
32
- setState,
33
- triggerFunction,
34
32
  } from '@rippling/pebble-sdui-web/catalogs/custom-apps';
35
- import RipplingSDK, {
36
- FunctionContext,
37
- FunctionResponse,
38
- SduiPageFunctionEvent,
39
- } from '@rippling/rippling-sdk';
40
- import type { CustomObjectDataRow } from '@rippling/rippling-sdk/resources/custom-objects/records';
41
-
42
- const OBJECT_API_NAME = 'todo__c';
33
+ import { FunctionContext, FunctionResponse, SduiPageFunctionEvent } from '@rippling/rippling-sdk';
34
+ import {
35
+ createCustomObjectFunctionRuntime,
36
+ createRqlHelpers,
37
+ type RecordShape,
38
+ type TypedCustomObjectRecordManager,
39
+ } from '@rippling/rippling-sdk/core/platform/custom-objects';
40
+ import {
41
+ createTypedSduiMutationTrigger,
42
+ defineTypedSduiPageHandlerFor,
43
+ defineTypedSduiStateAssignments,
44
+ resolveTypedSduiStatePath,
45
+ type TypedSduiPageActionParams,
46
+ type TypedSduiPageOutput,
47
+ } from '@rippling/rippling-sdk/core/platform/manifest/custom-objects';
48
+ import { todoDefinition } from '../schema';
49
+
50
+ const todoRql = createRqlHelpers(todoDefinition);
43
51
  type TodoPageAction = 'init' | 'addTodo' | 'toggleTodo' | 'clearCompleted';
44
- type TodoPageFunctionParameters = {
45
- action: TodoPageAction;
46
- text?: string;
47
- todoId?: string;
48
- };
52
+ type TodoPageFunctionParameters =
53
+ | { action: 'init' }
54
+ | { action: 'addTodo'; text?: string }
55
+ | { action: 'toggleTodo'; todoId?: string }
56
+ | { action: 'clearCompleted' };
49
57
 
50
58
  type Todo = {
51
59
  id: string;
@@ -53,6 +61,8 @@ type Todo = {
53
61
  completed: boolean;
54
62
  };
55
63
 
64
+ type TodoRecord = RecordShape<typeof todoDefinition>;
65
+
56
66
  type TodoListState = {
57
67
  todos: Todo[];
58
68
  isEmpty: boolean;
@@ -67,27 +77,43 @@ type TodoAppState = {
67
77
 
68
78
  type TodoSpec = SpecContext<TodoAppState>;
69
79
 
70
- function createClient(context: FunctionContext): RipplingSDK {
71
- return new RipplingSDK({
72
- bearerToken: context.env.rippling_user_bearer_token,
73
- });
80
+ const todoStatePath = resolveTypedSduiStatePath<TodoAppState>();
81
+ const todoStatePaths = {
82
+ newTodoText: todoStatePath('/newTodoText'),
83
+ todoList: todoStatePath('/todoList'),
84
+ todoListTodos: todoStatePath('/todoList/todos'),
85
+ todoListIsEmpty: todoStatePath('/todoList/isEmpty'),
86
+ isMutating: todoStatePath('/isMutating'),
87
+ errorMessage: todoStatePath('/errorMessage'),
88
+ } as const;
89
+
90
+ export type Input = SduiPageFunctionEvent<TodoPageFunctionParameters>;
91
+
92
+ export type Output = TypedSduiPageOutput<TodoListState>;
93
+
94
+ function createTodoManager(context: FunctionContext): TypedCustomObjectRecordManager<typeof todoDefinition> {
95
+ const runtime = createCustomObjectFunctionRuntime(context);
96
+ return runtime.for(todoDefinition);
74
97
  }
75
98
 
76
- function toTodo(record: CustomObjectDataRow): Todo {
99
+ function toTodo(record: TodoRecord): Todo {
77
100
  return {
78
101
  id: record.id,
79
102
  text: record.name,
80
- completed: record['completed__c'] === true,
103
+ completed: record.completed === true,
81
104
  };
82
105
  }
83
106
 
84
- async function listTodos(client: RipplingSDK, roleId: string): Promise<Todo[]> {
85
- const response = await client.customObjects.records.query(OBJECT_API_NAME, {
107
+ async function listTodos(
108
+ manager: TypedCustomObjectRecordManager<typeof todoDefinition>,
109
+ roleId: string,
110
+ ): Promise<Todo[]> {
111
+ const response = await manager.query({
86
112
  limit: 100,
87
- query: `created_by = "${roleId}"`, // RQL query to filter todos by the current role
113
+ query: todoRql.render(todoRql.eq(todoRql.fields.created_by, { id: roleId, apiName: 'Employee' })),
88
114
  });
89
115
 
90
- return (response.results ?? []).map(toTodo);
116
+ return response.results.map(toTodo);
91
117
  }
92
118
 
93
119
  function todoListState(todos: Todo[]): TodoListState {
@@ -106,45 +132,28 @@ function todoState(todos: Todo[]): TodoAppState {
106
132
  };
107
133
  }
108
134
 
109
- function ok(body: Record<string, unknown> | unknown[] = {}): FunctionResponse {
110
- return new FunctionResponse({
111
- body: body as Record<string, unknown>,
112
- statusCode: 200,
113
- headers: {},
114
- message: '',
115
- });
116
- }
117
-
118
- function badRequest(message: string): FunctionResponse {
119
- return new FunctionResponse({
120
- body: { error: message },
121
- statusCode: 400,
122
- headers: {},
123
- message,
124
- });
125
- }
126
-
127
- function serverError(error: unknown): FunctionResponse {
128
- const message = error instanceof Error ? error.message : 'Unknown error';
129
-
130
- return new FunctionResponse({
131
- body: { error: message },
132
- statusCode: 500,
133
- headers: {},
134
- message,
135
- });
135
+ function todoTextParam(params: TypedSduiPageActionParams<TodoPageFunctionParameters, 'addTodo'>): string {
136
+ return typeof params.text === 'string' ? params.text.trim() : '';
136
137
  }
137
138
 
138
- function stringParam(params: TodoPageFunctionParameters, key: 'text' | 'todoId'): string {
139
- const value = params[key];
140
- return typeof value === 'string' ? value.trim() : '';
139
+ function todoIdParam(params: TypedSduiPageActionParams<TodoPageFunctionParameters, 'toggleTodo'>): string {
140
+ return typeof params.todoId === 'string' ? params.todoId.trim() : '';
141
141
  }
142
142
 
143
- // A single mutation flag disables all actions and drives the visible loading text.
144
- function setMutationState(isMutating: boolean) {
145
- return setState({
146
- statePath: '/isMutating',
147
- value: isMutating,
143
+ function mutationActions<TInputs extends { action: Exclude<TodoPageAction, 'init'> }>(
144
+ functionId: string,
145
+ inputs: TInputs,
146
+ errorMessage: string,
147
+ onSuccessState?: ReturnType<typeof defineTypedSduiStateAssignments<TodoAppState>>,
148
+ ) {
149
+ return createTypedSduiMutationTrigger<TodoAppState, TodoListState, typeof inputs>({
150
+ functionId,
151
+ inputs,
152
+ responsePath: todoStatePaths.todoList,
153
+ errorMessage,
154
+ mutationStatePath: todoStatePaths.isMutating,
155
+ errorStatePath: todoStatePaths.errorMessage,
156
+ ...(onSuccessState != null ? { onSuccessState } : {}),
148
157
  });
149
158
  }
150
159
 
@@ -164,8 +173,8 @@ function buildAddTodoSection(spec: TodoSpec, functionId: string) {
164
173
  props: {
165
174
  name: 'newTodo',
166
175
  placeholder: 'Enter a new todo item',
167
- value: spec.$bindState('/newTodoText'),
168
- isDisabled: spec.$state('/isMutating'),
176
+ value: spec.$bindState(todoStatePaths.newTodoText),
177
+ isDisabled: spec.$state(todoStatePaths.isMutating),
169
178
  },
170
179
  }),
171
180
  ],
@@ -177,29 +186,26 @@ function buildAddTodoSection(spec: TodoSpec, functionId: string) {
177
186
  appearance: 'PRIMARY',
178
187
  isFluid: true,
179
188
  isDisabled: spec.$cond(
180
- or_(equals(spec.$state('/newTodoText'), ''), equals(spec.$state('/isMutating'), true)),
189
+ or_(
190
+ equals(spec.$state(todoStatePaths.newTodoText), ''),
191
+ equals(spec.$state(todoStatePaths.isMutating), true),
192
+ ),
181
193
  true,
182
194
  false,
183
195
  ),
184
196
  },
185
197
  on: {
186
- press: [
187
- setMutationState(true),
188
- triggerFunction(
189
- {
190
- functionId,
191
- inputs: {
192
- action: 'addTodo',
193
- text: spec.$state('/newTodoText'),
194
- },
195
- responsePath: '/todoList',
196
- } as any,
197
- {
198
- onSuccess: { set: { '/newTodoText': '', '/errorMessage': '', '/isMutating': false } },
199
- onError: { set: { '/errorMessage': 'Could not add todo. Try again.', '/isMutating': false } },
200
- },
201
- ),
202
- ],
198
+ press: mutationActions(
199
+ functionId,
200
+ {
201
+ action: 'addTodo',
202
+ text: spec.$state(todoStatePaths.newTodoText),
203
+ },
204
+ 'Could not add todo. Try again.',
205
+ defineTypedSduiStateAssignments<TodoAppState>({
206
+ [todoStatePaths.newTodoText]: '',
207
+ }),
208
+ ),
203
209
  },
204
210
  }),
205
211
  ],
@@ -207,7 +213,7 @@ function buildAddTodoSection(spec: TodoSpec, functionId: string) {
207
213
  }
208
214
 
209
215
  function buildTodoItems(spec: TodoSpec, functionId: string) {
210
- const [todoRepeat, todo] = spec.repeat('/todoList/todos', 'id');
216
+ const [todoRepeat, todo] = spec.repeat(todoStatePaths.todoListTodos, 'id');
211
217
 
212
218
  return VStack({
213
219
  id: 'todoItems',
@@ -231,31 +237,17 @@ function buildTodoItems(spec: TodoSpec, functionId: string) {
231
237
  props: {
232
238
  name: 'completed',
233
239
  value: todo.$bind('completed'),
234
- isDisabled: spec.$state('/isMutating'),
240
+ isDisabled: spec.$state(todoStatePaths.isMutating),
235
241
  },
236
242
  on: {
237
- change: [
238
- setMutationState(true),
239
- triggerFunction(
240
- {
241
- functionId,
242
- inputs: {
243
- action: 'toggleTodo',
244
- todoId: todo.$('id'),
245
- },
246
- responsePath: '/todoList',
247
- } as any,
248
- {
249
- onSuccess: { set: { '/errorMessage': '', '/isMutating': false } },
250
- onError: {
251
- set: {
252
- '/errorMessage': 'Could not update todo. Refresh and try again.',
253
- '/isMutating': false,
254
- },
255
- },
256
- },
257
- ),
258
- ],
243
+ change: mutationActions(
244
+ functionId,
245
+ {
246
+ action: 'toggleTodo',
247
+ todoId: todo.$('id'),
248
+ },
249
+ 'Could not update todo. Refresh and try again.',
250
+ ),
259
251
  },
260
252
  }),
261
253
  Text({
@@ -301,40 +293,29 @@ function buildTodoList(spec: TodoSpec, functionId: string) {
301
293
  appearance: 'OUTLINE',
302
294
  size: 'S',
303
295
  isDisabled: spec.$cond(
304
- or_(equals(spec.$state('/isMutating'), true), equals(spec.$state('/todoList/isEmpty'), true)),
296
+ or_(
297
+ equals(spec.$state(todoStatePaths.isMutating), true),
298
+ equals(spec.$state(todoStatePaths.todoListIsEmpty), true),
299
+ ),
305
300
  true,
306
301
  false,
307
302
  ),
308
303
  },
309
304
  on: {
310
- press: [
311
- setMutationState(true),
312
- triggerFunction(
313
- {
314
- functionId,
315
- inputs: {
316
- action: 'clearCompleted',
317
- },
318
- responsePath: '/todoList',
319
- } as any,
320
- {
321
- onSuccess: { set: { '/errorMessage': '', '/isMutating': false } },
322
- onError: {
323
- set: {
324
- '/errorMessage': 'Could not clear completed todos. Try again.',
325
- '/isMutating': false,
326
- },
327
- },
328
- },
329
- ),
330
- ],
305
+ press: mutationActions(
306
+ functionId,
307
+ {
308
+ action: 'clearCompleted',
309
+ },
310
+ 'Could not clear completed todos. Try again.',
311
+ ),
331
312
  },
332
313
  }),
333
314
  ],
334
315
  }),
335
316
  Text({
336
317
  id: 'emptyTodos',
337
- visible: equals(spec.$state('/todoList/isEmpty'), true),
318
+ visible: equals(spec.$state(todoStatePaths.todoListIsEmpty), true),
338
319
  props: {
339
320
  text: 'No todos yet.',
340
321
  color: 'colorOnSurfaceVariant',
@@ -348,9 +329,9 @@ function buildTodoList(spec: TodoSpec, functionId: string) {
348
329
  function buildError(spec: TodoSpec) {
349
330
  return Text({
350
331
  id: 'todoError',
351
- visible: neq(spec.$state('/errorMessage'), ''),
332
+ visible: neq(spec.$state(todoStatePaths.errorMessage), ''),
352
333
  props: {
353
- text: spec.$state('/errorMessage'),
334
+ text: spec.$state(todoStatePaths.errorMessage),
354
335
  color: 'colorError',
355
336
  },
356
337
  });
@@ -360,7 +341,7 @@ function buildLoading(spec: TodoSpec) {
360
341
  return Text({
361
342
  id: 'todoLoading',
362
343
  // Keep disabled controls explainable while a triggerFunction call is in flight.
363
- visible: equals(spec.$state('/isMutating'), true),
344
+ visible: equals(spec.$state(todoStatePaths.isMutating), true),
364
345
  props: {
365
346
  text: 'Updating todos...',
366
347
  color: 'colorOnSurfaceVariant',
@@ -405,93 +386,85 @@ function renderSpec(state: TodoAppState, functionId: string) {
405
386
  }
406
387
 
407
388
  async function addTodo(
408
- client: RipplingSDK,
409
- params: TodoPageFunctionParameters,
389
+ manager: TypedCustomObjectRecordManager<typeof todoDefinition>,
390
+ params: TypedSduiPageActionParams<TodoPageFunctionParameters, 'addTodo'>,
410
391
  roleId: string,
411
392
  ): Promise<TodoListState> {
412
- const text = stringParam(params, 'text');
393
+ const text = todoTextParam(params);
413
394
 
414
395
  if (!text) {
415
396
  throw new Error('Todo text is required');
416
397
  }
417
398
 
418
- await client.customObjects.records.create(OBJECT_API_NAME, {
399
+ await manager.create({
419
400
  name: text,
420
- completed__c: false,
401
+ completed: false,
421
402
  });
422
403
 
423
- return todoListState(await listTodos(client, roleId));
404
+ return todoListState(await listTodos(manager, roleId));
424
405
  }
425
406
 
426
407
  async function toggleTodo(
427
- client: RipplingSDK,
428
- params: TodoPageFunctionParameters,
408
+ manager: TypedCustomObjectRecordManager<typeof todoDefinition>,
409
+ params: TypedSduiPageActionParams<TodoPageFunctionParameters, 'toggleTodo'>,
429
410
  roleId: string,
430
411
  ): Promise<TodoListState> {
431
- const todoId = stringParam(params, 'todoId');
412
+ const todoId = todoIdParam(params);
432
413
 
433
414
  if (!todoId) {
434
415
  throw new Error('todoId must be a todo record ID');
435
416
  }
436
417
 
437
- const todo = toTodo(await client.customObjects.records.retrieve(OBJECT_API_NAME, todoId));
438
- await client.customObjects.records.update(OBJECT_API_NAME, todoId, {
439
- completed__c: !todo.completed,
418
+ const todo = toTodo(await manager.get(todoId));
419
+ await manager.update(todoId, {
420
+ completed: !todo.completed,
440
421
  });
441
422
 
442
- return todoListState(await listTodos(client, roleId));
423
+ return todoListState(await listTodos(manager, roleId));
443
424
  }
444
425
 
445
- async function clearCompleted(client: RipplingSDK, roleId: string): Promise<TodoListState> {
446
- const todos = await listTodos(client, roleId);
426
+ async function clearCompleted(
427
+ manager: TypedCustomObjectRecordManager<typeof todoDefinition>,
428
+ roleId: string,
429
+ ): Promise<TodoListState> {
430
+ const todos = await listTodos(manager, roleId);
447
431
  const completedTodoIds = todos.filter((todo) => todo.completed).map((todo) => todo.id);
448
432
 
449
433
  if (completedTodoIds.length === 0) {
450
434
  return todoListState(todos);
451
435
  }
452
436
 
453
- await client.customObjects.records.bulkDelete(OBJECT_API_NAME, {
454
- all_or_nothing: false,
455
- rows_to_delete: completedTodoIds,
437
+ await manager.deleteMany(completedTodoIds, {
438
+ allOrNothing: false,
456
439
  });
457
440
 
458
- return todoListState(await listTodos(client, roleId));
441
+ return todoListState(await listTodos(manager, roleId));
459
442
  }
460
443
 
444
+ const defineTodoPageHandler = defineTypedSduiPageHandlerFor<TodoPageFunctionParameters, TodoListState>();
445
+
446
+ const todoPageHandler = defineTodoPageHandler({
447
+ requireRoleId: true,
448
+ createRuntime(context) {
449
+ return {
450
+ manager: createTodoManager(context),
451
+ functionId: context.function.function_id,
452
+ };
453
+ },
454
+ async init({ runtime, roleId }) {
455
+ const todos = await listTodos(runtime.manager, roleId);
456
+ return renderSpec(todoState(todos), runtime.functionId);
457
+ },
458
+ actions: {
459
+ addTodo: async ({ runtime, params, roleId }) => addTodo(runtime.manager, params, roleId),
460
+ toggleTodo: async ({ runtime, params, roleId }) => toggleTodo(runtime.manager, params, roleId),
461
+ clearCompleted: async ({ runtime, roleId }) => clearCompleted(runtime.manager, roleId),
462
+ },
463
+ });
464
+
461
465
  export async function onRipplingEvent(
462
- event: SduiPageFunctionEvent<TodoPageFunctionParameters>,
466
+ event: Input,
463
467
  context: FunctionContext,
464
- ): Promise<FunctionResponse> {
465
- const params = event.parameters;
466
- const action = params.action;
467
- const roleId = context.function.role_id;
468
- if (!roleId) {
469
- return badRequest('Role ID is required');
470
- }
471
-
472
- try {
473
- const client = createClient(context);
474
-
475
- if (action === 'init') {
476
- const functionId = context.function.function_id;
477
- const todos = await listTodos(client, roleId);
478
- return ok({ spec: JSON.stringify(renderSpec(todoState(todos), functionId)) });
479
- }
480
-
481
- if (action === 'addTodo') {
482
- return ok(await addTodo(client, params, roleId));
483
- }
484
-
485
- if (action === 'toggleTodo') {
486
- return ok(await toggleTodo(client, params, roleId));
487
- }
488
-
489
- if (action === 'clearCompleted') {
490
- return ok(await clearCompleted(client, roleId));
491
- }
492
-
493
- return badRequest(`Unknown action: ${action}`);
494
- } catch (error) {
495
- return serverError(error);
496
- }
468
+ ): Promise<FunctionResponse<Output>> {
469
+ return todoPageHandler(event, context);
497
470
  }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Typed custom-object schema for the custom SDUI todo example.
3
+ */
4
+
5
+ import { boolean, defineCustomObject, section } from '@rippling/rippling-sdk/core/platform/custom-objects';
6
+
7
+ /** Logical category shared by the custom SDUI todo example. */
8
+ export const CUSTOM_TODO_CATEGORY = 'custom_todo_app';
9
+
10
+ /** Typed schema used by the custom SDUI todo manifest and function code. */
11
+ export const todoDefinition = defineCustomObject({
12
+ name: 'todo',
13
+ displayName: 'Todo',
14
+ pluralLabel: 'Todos',
15
+ category: CUSTOM_TODO_CATEGORY,
16
+ description: 'A todo item rendered by a custom SDUI page.',
17
+ icon: { emoji: '✅' },
18
+ sections: {
19
+ details: section('Details', { sectionId: 'sec_custom_todo_details' }),
20
+ },
21
+ fields: {
22
+ completed: boolean({
23
+ displayName: 'Completed',
24
+ description: 'Whether the todo item is complete',
25
+ section: 'details',
26
+ }),
27
+ },
28
+ });
@@ -1,9 +1,9 @@
1
1
  /*
2
- * Todo App Without ObjectListView — custom SDUI backed by Custom Object records.
2
+ * Todo App Without ObjectListView — custom SDUI backed by typed custom-object records.
3
3
  *
4
4
  * This example intentionally does not render ObjectListView. The SDUI page reads
5
- * and writes `todo__c` records from the function, then renders its own
6
- * todo list with TextInput, Button, Checkbox, and layout components.
5
+ * and writes `todo__c` records from the function, then renders its own todo
6
+ * list with TextInput, Button, Checkbox, and layout components.
7
7
  *
8
8
  * todo__c <- name, completed__c
9
9
  *
@@ -12,54 +12,34 @@
12
12
  * > examples/manifest/todo-app-without-object-list-view/manifest.json
13
13
  */
14
14
 
15
- import * as fs from 'node:fs';
16
15
  import * as path from 'node:path';
16
+ import { toCustomCategoryApiName } from '@rippling/rippling-sdk/core/platform/custom-objects';
17
17
  import {
18
- App,
19
- BooleanField,
20
- Category,
21
- CustomObject,
22
- CustomObjectFieldSection,
23
- CustomObjectPageLayout,
24
- ManifestBuilder,
25
- ManifestFunction,
26
- SduiPage,
27
- } from '@rippling/rippling-sdk/lib/manifest';
18
+ defineSduiPageFromFunctionFile,
19
+ defineTypedPageLayout,
20
+ registerManifestCustomObject,
21
+ } from '@rippling/rippling-sdk/core/platform/manifest/custom-objects';
22
+ import { App, Category, ManifestBuilder } from '@rippling/rippling-sdk/lib/manifest';
23
+ import { CUSTOM_TODO_CATEGORY, todoDefinition } from './schema';
28
24
 
29
25
  const manifest = new ManifestBuilder({
30
26
  key: 'todo_app_without_object_list_view',
31
27
  name: 'Todo App Without ObjectListView',
32
- description: 'A todo app that renders custom SDUI and persists changes to Custom Object records',
28
+ description: 'A todo app that renders custom SDUI and persists changes to typed custom-object records',
33
29
  });
34
30
 
35
31
  const todoCategory = new Category(manifest, {
36
- apiName: 'custom_todo_app__c',
32
+ apiName: toCustomCategoryApiName(CUSTOM_TODO_CATEGORY),
37
33
  name: 'Todo App',
38
34
  description: 'Custom todo app records',
39
35
  });
40
36
 
41
- const todoObj = new CustomObject(manifest, {
42
- apiName: 'todo__c',
43
- name: 'Todo',
44
- pluralLabel: 'Todos',
37
+ const todo = registerManifestCustomObject(manifest, {
38
+ definition: todoDefinition,
45
39
  category: todoCategory,
46
- description: 'A todo item rendered by a custom SDUI page',
47
- icon: { emoji: '✅' },
48
- });
49
-
50
- const detailsSection = new CustomObjectFieldSection(todoObj, {
51
- name: 'Details',
52
- sectionId: 'sec_custom_todo_details',
53
40
  });
54
41
 
55
- const completedField = new BooleanField(todoObj, {
56
- apiName: 'completed__c',
57
- displayName: 'Completed',
58
- description: 'Whether the todo item is complete',
59
- section: detailsSection,
60
- });
61
-
62
- new CustomObjectPageLayout(todoObj, {
42
+ defineTypedPageLayout(todo, {
63
43
  apiName: 'default',
64
44
  name: 'Todo',
65
45
  layoutId: 'layout_custom_todo',
@@ -73,8 +53,8 @@ new CustomObjectPageLayout(todoObj, {
73
53
  {
74
54
  name: 'Details',
75
55
  type: 'fields_section',
76
- section: detailsSection,
77
- fields: [{ field: 'name', editable: true }, completedField],
56
+ section: todo.sections.details,
57
+ fields: [{ field: 'name', editable: true }, 'completed'],
78
58
  },
79
59
  ],
80
60
  },
@@ -85,25 +65,22 @@ new CustomObjectPageLayout(todoObj, {
85
65
  visibilityConditions: {},
86
66
  });
87
67
 
88
- const todoPageFn = new ManifestFunction(manifest, {
68
+ const { page: todoPage } = defineSduiPageFromFunctionFile(manifest, {
89
69
  apiName: 'custom_todo_page_fn',
90
70
  name: 'renderTodoPage',
91
- description: 'Custom SDUI todo page backed by Custom Object record APIs',
92
- code: fs.readFileSync(path.join(__dirname, 'functions', 'todo-page.ts'), 'utf-8'),
93
- dependencies: { '@rippling/rippling-sdk': '^0.2.0-alpha.65', '@rippling/pebble-sdui-web': '^0.6.3' },
71
+ description: 'Custom SDUI todo page backed by typed custom-object record APIs',
72
+ codeDirectory: path.join(__dirname, 'functions'),
73
+ codeFilename: 'todo-page.ts',
74
+ dependencies: { '@rippling/rippling-sdk': '^0.2.0-alpha.65', '@rippling/pebble-sdui-web': '^0.9.2' },
94
75
  isAsync: false,
95
- });
96
-
97
- const todoPage = new SduiPage(manifest, {
98
- sduiPageId: 'custom_todo_page',
99
- name: 'Todos',
100
- function: todoPageFn,
76
+ pageId: 'custom_todo_page',
77
+ pageName: 'Todos',
101
78
  });
102
79
 
103
80
  new App(manifest, {
104
81
  apiName: 'todo_app_without_object_list_view',
105
82
  name: 'Todo App Without ObjectListView',
106
- description: 'Todo app with a fully custom SDUI page and Custom Object persistence',
83
+ description: 'Todo app with a fully custom SDUI page and typed custom-object persistence',
107
84
  appType: 'custom',
108
85
  pages: [todoPage],
109
86
  });
package/functions.d.mts CHANGED
@@ -100,6 +100,7 @@ export interface FunctionContext {
100
100
  function: {
101
101
  company_id: string;
102
102
  function_id: string;
103
+ function_api_name: string;
103
104
  function_version_id: string;
104
105
  run_id: string;
105
106
  role_id?: string;