@rippling/rippling-sdk 0.2.0-alpha.109 → 0.2.0-alpha.110

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 (250) hide show
  1. package/client.d.mts +11 -0
  2. package/client.d.mts.map +1 -1
  3. package/client.d.ts +11 -0
  4. package/client.d.ts.map +1 -1
  5. package/client.js +15 -0
  6. package/client.js.map +1 -1
  7. package/client.mjs +15 -0
  8. package/client.mjs.map +1 -1
  9. package/index.d.mts +5 -0
  10. package/index.d.mts.map +1 -1
  11. package/index.d.ts +5 -0
  12. package/index.d.ts.map +1 -1
  13. package/index.js +11 -1
  14. package/index.js.map +1 -1
  15. package/index.mjs +5 -0
  16. package/index.mjs.map +1 -1
  17. package/lib/manifest/composition.d.mts +21 -0
  18. package/lib/manifest/composition.d.mts.map +1 -0
  19. package/lib/manifest/composition.d.ts +21 -0
  20. package/lib/manifest/composition.d.ts.map +1 -0
  21. package/lib/manifest/composition.js +103 -0
  22. package/lib/manifest/composition.js.map +1 -0
  23. package/lib/manifest/composition.mjs +99 -0
  24. package/lib/manifest/composition.mjs.map +1 -0
  25. package/lib/manifest/definitions/_object-records.d.mts +23 -0
  26. package/lib/manifest/definitions/_object-records.d.mts.map +1 -0
  27. package/lib/manifest/definitions/_object-records.d.ts +23 -0
  28. package/lib/manifest/definitions/_object-records.d.ts.map +1 -0
  29. package/lib/manifest/definitions/_object-records.js +151 -0
  30. package/lib/manifest/definitions/_object-records.js.map +1 -0
  31. package/lib/manifest/definitions/_object-records.mjs +147 -0
  32. package/lib/manifest/definitions/_object-records.mjs.map +1 -0
  33. package/lib/manifest/definitions/action.d.mts +7 -0
  34. package/lib/manifest/definitions/action.d.mts.map +1 -0
  35. package/lib/manifest/definitions/action.d.ts +7 -0
  36. package/lib/manifest/definitions/action.d.ts.map +1 -0
  37. package/lib/manifest/definitions/action.js +25 -0
  38. package/lib/manifest/definitions/action.js.map +1 -0
  39. package/lib/manifest/definitions/action.mjs +22 -0
  40. package/lib/manifest/definitions/action.mjs.map +1 -0
  41. package/lib/manifest/definitions/agent.d.mts +51 -0
  42. package/lib/manifest/definitions/agent.d.mts.map +1 -0
  43. package/lib/manifest/definitions/agent.d.ts +51 -0
  44. package/lib/manifest/definitions/agent.d.ts.map +1 -0
  45. package/lib/manifest/definitions/agent.js +65 -0
  46. package/lib/manifest/definitions/agent.js.map +1 -0
  47. package/lib/manifest/definitions/agent.mjs +59 -0
  48. package/lib/manifest/definitions/agent.mjs.map +1 -0
  49. package/lib/manifest/definitions/app.d.mts +3 -0
  50. package/lib/manifest/definitions/app.d.mts.map +1 -0
  51. package/lib/manifest/definitions/app.d.ts +3 -0
  52. package/lib/manifest/definitions/app.d.ts.map +1 -0
  53. package/lib/manifest/definitions/app.js +14 -0
  54. package/lib/manifest/definitions/app.js.map +1 -0
  55. package/lib/manifest/definitions/app.mjs +11 -0
  56. package/lib/manifest/definitions/app.mjs.map +1 -0
  57. package/lib/manifest/definitions/category.d.mts +9 -0
  58. package/lib/manifest/definitions/category.d.mts.map +1 -0
  59. package/lib/manifest/definitions/category.d.ts +9 -0
  60. package/lib/manifest/definitions/category.d.ts.map +1 -0
  61. package/lib/manifest/definitions/category.js +27 -0
  62. package/lib/manifest/definitions/category.js.map +1 -0
  63. package/lib/manifest/definitions/category.mjs +23 -0
  64. package/lib/manifest/definitions/category.mjs.map +1 -0
  65. package/lib/manifest/definitions/component.d.mts +101 -0
  66. package/lib/manifest/definitions/component.d.mts.map +1 -0
  67. package/lib/manifest/definitions/component.d.ts +101 -0
  68. package/lib/manifest/definitions/component.d.ts.map +1 -0
  69. package/lib/manifest/definitions/component.js +106 -0
  70. package/lib/manifest/definitions/component.js.map +1 -0
  71. package/lib/manifest/definitions/component.mjs +97 -0
  72. package/lib/manifest/definitions/component.mjs.map +1 -0
  73. package/lib/manifest/definitions/custom-field-section.d.mts +13 -0
  74. package/lib/manifest/definitions/custom-field-section.d.mts.map +1 -0
  75. package/lib/manifest/definitions/custom-field-section.d.ts +13 -0
  76. package/lib/manifest/definitions/custom-field-section.d.ts.map +1 -0
  77. package/lib/manifest/definitions/custom-field-section.js +15 -0
  78. package/lib/manifest/definitions/custom-field-section.js.map +1 -0
  79. package/lib/manifest/definitions/custom-field-section.mjs +12 -0
  80. package/lib/manifest/definitions/custom-field-section.mjs.map +1 -0
  81. package/lib/manifest/definitions/custom-field.d.mts +10 -0
  82. package/lib/manifest/definitions/custom-field.d.mts.map +1 -0
  83. package/lib/manifest/definitions/custom-field.d.ts +10 -0
  84. package/lib/manifest/definitions/custom-field.d.ts.map +1 -0
  85. package/lib/manifest/definitions/custom-field.js +18 -0
  86. package/lib/manifest/definitions/custom-field.js.map +1 -0
  87. package/lib/manifest/definitions/custom-field.mjs +15 -0
  88. package/lib/manifest/definitions/custom-field.mjs.map +1 -0
  89. package/lib/manifest/definitions/custom-object.d.mts +162 -0
  90. package/lib/manifest/definitions/custom-object.d.mts.map +1 -0
  91. package/lib/manifest/definitions/custom-object.d.ts +162 -0
  92. package/lib/manifest/definitions/custom-object.d.ts.map +1 -0
  93. package/lib/manifest/definitions/custom-object.js +412 -0
  94. package/lib/manifest/definitions/custom-object.js.map +1 -0
  95. package/lib/manifest/definitions/custom-object.mjs +386 -0
  96. package/lib/manifest/definitions/custom-object.mjs.map +1 -0
  97. package/lib/manifest/definitions/custom-skill.d.mts +8 -0
  98. package/lib/manifest/definitions/custom-skill.d.mts.map +1 -0
  99. package/lib/manifest/definitions/custom-skill.d.ts +8 -0
  100. package/lib/manifest/definitions/custom-skill.d.ts.map +1 -0
  101. package/lib/manifest/definitions/custom-skill.js +15 -0
  102. package/lib/manifest/definitions/custom-skill.js.map +1 -0
  103. package/lib/manifest/definitions/custom-skill.mjs +12 -0
  104. package/lib/manifest/definitions/custom-skill.mjs.map +1 -0
  105. package/lib/manifest/definitions/field-section.d.mts +7 -0
  106. package/lib/manifest/definitions/field-section.d.mts.map +1 -0
  107. package/lib/manifest/definitions/field-section.d.ts +7 -0
  108. package/lib/manifest/definitions/field-section.d.ts.map +1 -0
  109. package/lib/manifest/definitions/field-section.js +16 -0
  110. package/lib/manifest/definitions/field-section.js.map +1 -0
  111. package/lib/manifest/definitions/field-section.mjs +13 -0
  112. package/lib/manifest/definitions/field-section.mjs.map +1 -0
  113. package/lib/manifest/definitions/field.d.mts +38 -0
  114. package/lib/manifest/definitions/field.d.mts.map +1 -0
  115. package/lib/manifest/definitions/field.d.ts +38 -0
  116. package/lib/manifest/definitions/field.d.ts.map +1 -0
  117. package/lib/manifest/definitions/field.js +50 -0
  118. package/lib/manifest/definitions/field.js.map +1 -0
  119. package/lib/manifest/definitions/field.mjs +45 -0
  120. package/lib/manifest/definitions/field.mjs.map +1 -0
  121. package/lib/manifest/definitions/function.d.mts +61 -0
  122. package/lib/manifest/definitions/function.d.mts.map +1 -0
  123. package/lib/manifest/definitions/function.d.ts +61 -0
  124. package/lib/manifest/definitions/function.d.ts.map +1 -0
  125. package/lib/manifest/definitions/function.js +79 -0
  126. package/lib/manifest/definitions/function.js.map +1 -0
  127. package/lib/manifest/definitions/function.mjs +73 -0
  128. package/lib/manifest/definitions/function.mjs.map +1 -0
  129. package/lib/manifest/definitions/index.d.mts +22 -0
  130. package/lib/manifest/definitions/index.d.mts.map +1 -0
  131. package/lib/manifest/definitions/index.d.ts +22 -0
  132. package/lib/manifest/definitions/index.d.ts.map +1 -0
  133. package/lib/manifest/definitions/index.js +64 -0
  134. package/lib/manifest/definitions/index.js.map +1 -0
  135. package/lib/manifest/definitions/index.mjs +22 -0
  136. package/lib/manifest/definitions/index.mjs.map +1 -0
  137. package/lib/manifest/definitions/list-view.d.mts +9 -0
  138. package/lib/manifest/definitions/list-view.d.mts.map +1 -0
  139. package/lib/manifest/definitions/list-view.d.ts +9 -0
  140. package/lib/manifest/definitions/list-view.d.ts.map +1 -0
  141. package/lib/manifest/definitions/list-view.js +25 -0
  142. package/lib/manifest/definitions/list-view.js.map +1 -0
  143. package/lib/manifest/definitions/list-view.mjs +22 -0
  144. package/lib/manifest/definitions/list-view.mjs.map +1 -0
  145. package/lib/manifest/definitions/object-search-config.d.mts +13 -0
  146. package/lib/manifest/definitions/object-search-config.d.mts.map +1 -0
  147. package/lib/manifest/definitions/object-search-config.d.ts +13 -0
  148. package/lib/manifest/definitions/object-search-config.d.ts.map +1 -0
  149. package/lib/manifest/definitions/object-search-config.js +25 -0
  150. package/lib/manifest/definitions/object-search-config.js.map +1 -0
  151. package/lib/manifest/definitions/object-search-config.mjs +22 -0
  152. package/lib/manifest/definitions/object-search-config.mjs.map +1 -0
  153. package/lib/manifest/definitions/object-settings.d.mts +24 -0
  154. package/lib/manifest/definitions/object-settings.d.mts.map +1 -0
  155. package/lib/manifest/definitions/object-settings.d.ts +24 -0
  156. package/lib/manifest/definitions/object-settings.d.ts.map +1 -0
  157. package/lib/manifest/definitions/object-settings.js +32 -0
  158. package/lib/manifest/definitions/object-settings.js.map +1 -0
  159. package/lib/manifest/definitions/object-settings.mjs +29 -0
  160. package/lib/manifest/definitions/object-settings.mjs.map +1 -0
  161. package/lib/manifest/definitions/page-layout.d.mts +21 -0
  162. package/lib/manifest/definitions/page-layout.d.mts.map +1 -0
  163. package/lib/manifest/definitions/page-layout.d.ts +21 -0
  164. package/lib/manifest/definitions/page-layout.d.ts.map +1 -0
  165. package/lib/manifest/definitions/page-layout.js +155 -0
  166. package/lib/manifest/definitions/page-layout.js.map +1 -0
  167. package/lib/manifest/definitions/page-layout.mjs +152 -0
  168. package/lib/manifest/definitions/page-layout.mjs.map +1 -0
  169. package/lib/manifest/definitions/page.d.mts +8 -0
  170. package/lib/manifest/definitions/page.d.mts.map +1 -0
  171. package/lib/manifest/definitions/page.d.ts +8 -0
  172. package/lib/manifest/definitions/page.d.ts.map +1 -0
  173. package/lib/manifest/definitions/page.js +15 -0
  174. package/lib/manifest/definitions/page.js.map +1 -0
  175. package/lib/manifest/definitions/page.mjs +12 -0
  176. package/lib/manifest/definitions/page.mjs.map +1 -0
  177. package/lib/manifest/definitions/record-triggered-flow.d.mts +24 -0
  178. package/lib/manifest/definitions/record-triggered-flow.d.mts.map +1 -0
  179. package/lib/manifest/definitions/record-triggered-flow.d.ts +24 -0
  180. package/lib/manifest/definitions/record-triggered-flow.d.ts.map +1 -0
  181. package/lib/manifest/definitions/record-triggered-flow.js +28 -0
  182. package/lib/manifest/definitions/record-triggered-flow.js.map +1 -0
  183. package/lib/manifest/definitions/record-triggered-flow.mjs +25 -0
  184. package/lib/manifest/definitions/record-triggered-flow.mjs.map +1 -0
  185. package/lib/manifest/definitions/validation.d.mts +8 -0
  186. package/lib/manifest/definitions/validation.d.mts.map +1 -0
  187. package/lib/manifest/definitions/validation.d.ts +8 -0
  188. package/lib/manifest/definitions/validation.d.ts.map +1 -0
  189. package/lib/manifest/definitions/validation.js +24 -0
  190. package/lib/manifest/definitions/validation.js.map +1 -0
  191. package/lib/manifest/definitions/validation.mjs +21 -0
  192. package/lib/manifest/definitions/validation.mjs.map +1 -0
  193. package/lib/manifest/definitions/workflow.d.mts +10 -0
  194. package/lib/manifest/definitions/workflow.d.mts.map +1 -0
  195. package/lib/manifest/definitions/workflow.d.ts +10 -0
  196. package/lib/manifest/definitions/workflow.d.ts.map +1 -0
  197. package/lib/manifest/definitions/workflow.js +33 -0
  198. package/lib/manifest/definitions/workflow.js.map +1 -0
  199. package/lib/manifest/definitions/workflow.mjs +29 -0
  200. package/lib/manifest/definitions/workflow.mjs.map +1 -0
  201. package/lib/manifest/index.d.mts +3 -0
  202. package/lib/manifest/index.d.mts.map +1 -1
  203. package/lib/manifest/index.d.ts +3 -0
  204. package/lib/manifest/index.d.ts.map +1 -1
  205. package/lib/manifest/index.js +4 -0
  206. package/lib/manifest/index.js.map +1 -1
  207. package/lib/manifest/index.mjs +3 -0
  208. package/lib/manifest/index.mjs.map +1 -1
  209. package/lib/manifest/package-manifest.d.mts +17 -0
  210. package/lib/manifest/package-manifest.d.mts.map +1 -0
  211. package/lib/manifest/package-manifest.d.ts +17 -0
  212. package/lib/manifest/package-manifest.d.ts.map +1 -0
  213. package/lib/manifest/package-manifest.js +26 -0
  214. package/lib/manifest/package-manifest.js.map +1 -0
  215. package/lib/manifest/package-manifest.mjs +23 -0
  216. package/lib/manifest/package-manifest.mjs.map +1 -0
  217. package/package.json +1 -1
  218. package/src/client.ts +24 -0
  219. package/src/index.ts +17 -0
  220. package/src/lib/manifest/composition.ts +133 -0
  221. package/src/lib/manifest/definitions/README.md +89 -0
  222. package/src/lib/manifest/definitions/_object-records.ts +218 -0
  223. package/src/lib/manifest/definitions/action.ts +31 -0
  224. package/src/lib/manifest/definitions/agent.ts +149 -0
  225. package/src/lib/manifest/definitions/app.ts +12 -0
  226. package/src/lib/manifest/definitions/category.ts +35 -0
  227. package/src/lib/manifest/definitions/component.ts +241 -0
  228. package/src/lib/manifest/definitions/custom-field-section.ts +39 -0
  229. package/src/lib/manifest/definitions/custom-field.ts +32 -0
  230. package/src/lib/manifest/definitions/custom-object.ts +786 -0
  231. package/src/lib/manifest/definitions/custom-skill.ts +28 -0
  232. package/src/lib/manifest/definitions/field-section.ts +31 -0
  233. package/src/lib/manifest/definitions/field.ts +119 -0
  234. package/src/lib/manifest/definitions/function.ts +198 -0
  235. package/src/lib/manifest/definitions/index.ts +91 -0
  236. package/src/lib/manifest/definitions/list-view.ts +48 -0
  237. package/src/lib/manifest/definitions/object-search-config.ts +44 -0
  238. package/src/lib/manifest/definitions/object-settings.ts +61 -0
  239. package/src/lib/manifest/definitions/page-layout.ts +218 -0
  240. package/src/lib/manifest/definitions/page.ts +28 -0
  241. package/src/lib/manifest/definitions/record-triggered-flow.ts +71 -0
  242. package/src/lib/manifest/definitions/validation.ts +46 -0
  243. package/src/lib/manifest/definitions/workflow.ts +62 -0
  244. package/src/lib/manifest/index.ts +4 -0
  245. package/src/lib/manifest/package-manifest.ts +40 -0
  246. package/src/version.ts +1 -1
  247. package/version.d.mts +1 -1
  248. package/version.d.ts +1 -1
  249. package/version.js +1 -1
  250. package/version.mjs +1 -1
@@ -0,0 +1,218 @@
1
+ import { defineComponent, withApiName, registeredComponent, type ComponentDefinition } from './component';
2
+ import { CustomObjectPageLayout, type CustomObjectPageLayoutProps } from '../custom-object-page-layout';
3
+ import type { CustomObjectFieldSection } from '../custom-object-field-section';
4
+ import type { Field } from '../field';
5
+ import {
6
+ manifestObject,
7
+ manifestField,
8
+ manifestSection,
9
+ type ObjectReference,
10
+ type DefinitionFieldReference,
11
+ type SectionReference,
12
+ scopedDefinition,
13
+ type ObjectScoped,
14
+ } from './custom-object';
15
+
16
+ export type PageLayoutOptions<O extends ObjectReference> = LayoutInput<
17
+ O,
18
+ Omit<CustomObjectPageLayoutProps, 'layoutId'>
19
+ >;
20
+
21
+ export type DefinedPageLayout<O extends ObjectReference> = ObjectScoped<
22
+ O,
23
+ Omit<CustomObjectPageLayout, Mutations> & {
24
+ setTitleField(field: DefinitionFieldReference<O>): DefinedPageLayout<O>;
25
+ setDescriptionField(field: DefinitionFieldReference<O>): DefinedPageLayout<O>;
26
+ removeSection(
27
+ section: SectionReference<O> | string,
28
+ options?:
29
+ | import('../custom-object-page-layout').RemovePageLayoutSectionOptions
30
+ | import('../custom-object-page-layout').RemoveSystemPageLayoutSectionOptions,
31
+ ): DefinedPageLayout<O>;
32
+ } & {
33
+ [K in Exclude<
34
+ Mutations,
35
+ 'setTitleField' | 'setDescriptionField' | 'removeSection'
36
+ >]: CustomObjectPageLayout[K] extends (...args: infer A) => unknown ?
37
+ (...args: LayoutInput<O, A>) => DefinedPageLayout<O>
38
+ : never;
39
+ }
40
+ >;
41
+
42
+ export function definePageLayout<O extends ObjectReference>(
43
+ object: O,
44
+ props: PageLayoutOptions<NoInfer<O>>,
45
+ ): DefinedPageLayout<O> {
46
+ const candidates = new Map<object, { field?: string; sections?: Set<string> }>();
47
+ // Adapt explicit references and delegate every layout operation to the existing implementation.
48
+ const adapt = (value: unknown, key?: string): any => {
49
+ if (key != null && opaque.has(key)) return value;
50
+ if (isSectionReference(value)) {
51
+ const sections = candidates.get(value)?.sections ?? new Set<string>();
52
+ sections.add(value.getSectionId());
53
+ candidates.set(value, { sections });
54
+ return manifestSection(object, value as SectionReference<O>);
55
+ }
56
+ if (
57
+ isFieldReference(value) ||
58
+ (value != null && typeof value === 'object' && 'objectApiName' in value && 'apiName' in value)
59
+ ) {
60
+ const field = manifestField(object, value as DefinitionFieldReference<O>);
61
+ if (registeredComponent(value) != null) candidates.set(value, { field: field.getApiName() });
62
+ return key != null && headerFields.has(key) ? field.getApiName() : field;
63
+ }
64
+ if (Array.isArray(value)) return value.map((item) => adapt(item));
65
+ if (value != null && typeof value === 'object') {
66
+ const input = value as Record<string, any>;
67
+ const result = Object.fromEntries(
68
+ Object.entries(input).map(([name, item]) => [
69
+ name,
70
+ input['type'] === 'fields_section' && name === 'section' ?
71
+ manifestSection(object, item as SectionReference<O>)
72
+ : adapt(item, name),
73
+ ]),
74
+ );
75
+ if (input['type'] === 'fields_section' && typeof input['section'] === 'object') {
76
+ const section = input['section'] as CustomObjectFieldSection;
77
+ const sections = candidates.get(section)?.sections ?? new Set<string>();
78
+ sections.add(input['key'] ?? section.getSectionId());
79
+ candidates.set(section, { sections });
80
+ }
81
+ return result;
82
+ }
83
+ return value;
84
+ };
85
+ const adapted = adapt(props) as CustomObjectPageLayoutProps;
86
+ if (adapted.tabEdits != null && adapted.tabEdits.tabsOrder === undefined) {
87
+ adapted.tabEdits.tabsOrder = [
88
+ ...new Set([
89
+ ...(adapted.tabEdits.newTabs ?? []).map((tab) => tab.key),
90
+ ...Object.entries(adapted.tabEdits.systemTabEdits ?? {})
91
+ .filter(([, tab]) => !tab.deleted)
92
+ .map(([key]) => key),
93
+ ]),
94
+ ];
95
+ }
96
+ const layout = withApiName(
97
+ new CustomObjectPageLayout(manifestObject(object), {
98
+ ...adapted,
99
+ layoutId: props.apiName,
100
+ }),
101
+ props.apiName,
102
+ );
103
+ for (const name of Object.getOwnPropertyNames(CustomObjectPageLayout.prototype)) {
104
+ if (!/^(add|remove|set)[A-Z]/.test(name)) continue;
105
+ const method = (layout as any)[name].bind(layout);
106
+ (layout as any)[name] = (...args: unknown[]) => {
107
+ if (/^(add|remove)Fields?$/.test(name)) {
108
+ const options = args[1];
109
+ if (
110
+ options != null &&
111
+ typeof options === 'object' &&
112
+ 'section' in options &&
113
+ typeof options.section === 'string'
114
+ ) {
115
+ args[1] = {
116
+ ...options,
117
+ section: manifestSection(object, options.section as SectionReference<O>),
118
+ };
119
+ }
120
+ }
121
+ method(...args.map((arg) => adapt(arg)));
122
+ return layout;
123
+ };
124
+ }
125
+ // Only currently serialized structural references count; removed fields/sections do not become roots.
126
+ dependencies.set(layout, () => {
127
+ const config = layout.toDict();
128
+ const fields = new Set<string>();
129
+ const sections = new Set<string>();
130
+ const header = config['header_edits'] ?? {};
131
+ for (const name of [
132
+ header.newTitleField,
133
+ header.newDescriptionField,
134
+ ...(header.newFields ?? []).map((f: any) => f.rqlName),
135
+ ...Object.values(header.systemFieldEdits ?? {}).map((f: any) => f.newRqlField),
136
+ ])
137
+ if (typeof name === 'string') fields.add(name);
138
+ const collectSection = (section: any) => {
139
+ if (section.type !== 'fields_section') return;
140
+ sections.add(section.key);
141
+ for (const field of section.fields ?? []) fields.add(field.fieldRqlName);
142
+ };
143
+ const tabs = config['tab_edits'] ?? {};
144
+ for (const tab of tabs.newTabs ?? []) for (const section of tab.sections ?? []) collectSection(section);
145
+ for (const tab of Object.values(tabs.systemTabEdits ?? {}) as any[]) {
146
+ if (tab.deleted) continue;
147
+ for (const section of tab.newSections ?? []) collectSection(section);
148
+ for (const [key, section] of Object.entries(tab.systemSectionEdits ?? {}) as [string, any][]) {
149
+ if (section.deleted) continue;
150
+ sections.add(key);
151
+ for (const field of section.newFields ?? []) fields.add(field.fieldRqlName);
152
+ }
153
+ }
154
+ return [...candidates]
155
+ .filter(([, ref]) =>
156
+ ref.field != null ?
157
+ fields.has(ref.field)
158
+ : [...(ref.sections ?? [])].some((key) => sections.has(key)),
159
+ )
160
+ .map(([definition]) => definition);
161
+ });
162
+ return pageLayoutComponent.register(
163
+ scopedDefinition(object, layout) as unknown as DefinedPageLayout<O>,
164
+ object,
165
+ props,
166
+ );
167
+ }
168
+
169
+ function isFieldReference(value: unknown): value is Field {
170
+ return (
171
+ value != null &&
172
+ typeof value === 'object' &&
173
+ 'getApiName' in value &&
174
+ typeof value.getApiName === 'function' &&
175
+ 'getCustomObjectApiName' in value &&
176
+ typeof value.getCustomObjectApiName === 'function'
177
+ );
178
+ }
179
+
180
+ function isSectionReference(value: unknown): value is CustomObjectFieldSection {
181
+ return (
182
+ value != null &&
183
+ typeof value === 'object' &&
184
+ 'getSectionId' in value &&
185
+ typeof value.getSectionId === 'function' &&
186
+ 'getModelApiName' in value &&
187
+ typeof value.getModelApiName === 'function'
188
+ );
189
+ }
190
+
191
+ type LayoutInput<O extends ObjectReference, T> = T extends CustomObjectFieldSection ? SectionReference<O>
192
+ : T extends Field ? DefinitionFieldReference<O>
193
+ : T extends readonly unknown[] ? { [K in keyof T]: LayoutInput<O, T[K]> }
194
+ : T extends object ?
195
+ {
196
+ [K in keyof T]: K extends 'defaultValue' | 'visibilityConditions' | 'inputMapping' ? T[K]
197
+ : K extends 'newRqlField' | 'newTitleField' | 'newDescriptionField' | 'rqlName' ?
198
+ T[K] | DefinitionFieldReference<O>
199
+ : LayoutInput<O, T[K]>;
200
+ }
201
+ : T;
202
+
203
+ type Mutations = Extract<keyof CustomObjectPageLayout, `add${string}` | `remove${string}` | `set${string}`>;
204
+
205
+ const dependencies = new WeakMap<object, () => object[]>();
206
+
207
+ const opaque = new Set(['defaultValue', 'visibilityConditions', 'inputMapping']);
208
+
209
+ const headerFields = new Set(['newRqlField', 'newTitleField', 'newDescriptionField', 'rqlName']);
210
+
211
+ const pageLayoutComponent: ComponentDefinition<typeof definePageLayout> = defineComponent({
212
+ type: 'CUSTOM_OBJECT_PAGE_LAYOUT',
213
+ define: definePageLayout,
214
+ references: (definition, object) => () => [
215
+ object,
216
+ ...(dependencies.get(definition)?.() ?? []).filter((reference) => registeredComponent(reference) != null),
217
+ ],
218
+ });
@@ -0,0 +1,28 @@
1
+ import {
2
+ defineComponent,
3
+ withApiName,
4
+ detachedManifestScope,
5
+ validateCustomApiName,
6
+ type ComponentDefinition,
7
+ } from './component';
8
+ import { ManifestFunction } from '../manifest-function';
9
+ import { SduiPage, type SduiPageProps } from '../sdui-page';
10
+
11
+ export type DefinePageProps = Omit<SduiPageProps, 'sduiPageId' | 'apiName' | 'function'> & {
12
+ apiName: `${string}__c`;
13
+ function: ManifestFunction;
14
+ };
15
+
16
+ export function definePage(props: DefinePageProps): SduiPage {
17
+ validateCustomApiName(props.apiName);
18
+ return pageComponent.register(
19
+ withApiName(new SduiPage(detachedManifestScope, { ...props, sduiPageId: props.apiName }), props.apiName),
20
+ props,
21
+ );
22
+ }
23
+
24
+ const pageComponent: ComponentDefinition<typeof definePage> = defineComponent({
25
+ type: 'SDUI_PAGE',
26
+ define: definePage,
27
+ references: (_definition, props) => [props.function],
28
+ });
@@ -0,0 +1,71 @@
1
+ import { defineComponent, withApiName, validateCustomApiName, type ComponentDefinition } from './component';
2
+ import {
3
+ fieldReferences,
4
+ type ObjectScoped,
5
+ manifestObject,
6
+ manifestField,
7
+ type ObjectReference,
8
+ type DefinitionFieldReference,
9
+ } from './custom-object';
10
+ import type { Field } from '../field';
11
+ import type { AnyCustomObjectDefinition, FieldValue } from '../../../core/platform/custom-objects/types';
12
+ import { Rule, type RuleProps, type RuleAction } from '../rule';
13
+
14
+ /** Flow actions accept shared writable field definitions as well as existing manifest fields. */
15
+ export type DefinedRuleAction<TObject extends ObjectReference> =
16
+ | (Omit<RuleAction, 'targetField'> & { targetField: ObjectScoped<TObject, Field> })
17
+ | (TObject extends AnyCustomObjectDefinition ?
18
+ {
19
+ [K in keyof TObject['fields']]: TypedRuleAction<TObject['fields'][K]>;
20
+ }[keyof TObject['fields']]
21
+ : never);
22
+
23
+ export type DefineRecordTriggeredFlowProps<TObject extends ObjectReference> = Omit<
24
+ RuleProps,
25
+ 'flowId' | 'apiName' | 'actions'
26
+ > & {
27
+ apiName: `${string}__c`;
28
+ actions?: readonly DefinedRuleAction<NoInfer<TObject>>[];
29
+ };
30
+
31
+ export function defineRecordTriggeredFlow<TObject extends ObjectReference>(
32
+ object: TObject,
33
+ props: DefineRecordTriggeredFlowProps<TObject>,
34
+ ): Rule {
35
+ validateCustomApiName(props.apiName);
36
+ const { actions: inputActions, ...rest } = props;
37
+ const actions = inputActions?.map((action) => ({
38
+ ...action,
39
+ targetField: manifestField(object, action.targetField as DefinitionFieldReference<TObject>),
40
+ }));
41
+ return recordTriggeredFlowComponent.register(
42
+ withApiName(
43
+ new Rule(manifestObject(object), {
44
+ ...rest,
45
+ flowId: rest.apiName,
46
+ ...(actions != null ? { actions } : {}),
47
+ }),
48
+ rest.apiName,
49
+ ),
50
+ object,
51
+ props,
52
+ );
53
+ }
54
+
55
+ type TypedRuleAction<TField> =
56
+ TField extends { writable: true } ?
57
+ {
58
+ targetField: TField;
59
+ fixedValue?: FieldValue<TField>;
60
+ rqlFormula?: string;
61
+ }
62
+ : never;
63
+
64
+ const recordTriggeredFlowComponent: ComponentDefinition<typeof defineRecordTriggeredFlow> = defineComponent({
65
+ type: 'CUSTOM_OBJECT_RECORD_TRIGGERED_FLOW',
66
+ define: defineRecordTriggeredFlow,
67
+ references: (_definition, object, props) => [
68
+ object,
69
+ ...(props.actions ?? []).flatMap((action) => fieldReferences(object, action.targetField)),
70
+ ],
71
+ });
@@ -0,0 +1,46 @@
1
+ import { defineComponent, withApiName, validateCustomApiName, type ComponentDefinition } from './component';
2
+ import {
3
+ fieldReferences,
4
+ manifestObject,
5
+ manifestField,
6
+ type ObjectReference,
7
+ type DefinitionFieldReference,
8
+ } from './custom-object';
9
+ import { Validation, type ValidationProps } from '../validation';
10
+
11
+ export type DefineValidationProps<TObject extends ObjectReference> = Omit<
12
+ ValidationProps,
13
+ 'ruleId' | 'apiName' | 'fieldRef'
14
+ > & {
15
+ apiName: `${string}__c`;
16
+ fieldRef?: NoInfer<DefinitionFieldReference<TObject>>;
17
+ };
18
+
19
+ export function defineValidation<TObject extends ObjectReference>(
20
+ object: TObject,
21
+ props: DefineValidationProps<TObject>,
22
+ ): Validation {
23
+ validateCustomApiName(props.apiName);
24
+ const { fieldRef, ...rest } = props;
25
+ return validationComponent.register(
26
+ withApiName(
27
+ new Validation(manifestObject(object), {
28
+ ...rest,
29
+ ruleId: rest.apiName,
30
+ ...(fieldRef != null ? { fieldRef: manifestField(object, fieldRef) } : {}),
31
+ }),
32
+ rest.apiName,
33
+ ),
34
+ object,
35
+ props,
36
+ );
37
+ }
38
+
39
+ const validationComponent: ComponentDefinition<typeof defineValidation> = defineComponent({
40
+ type: 'CUSTOM_OBJECT_VALIDATION_RULE',
41
+ define: defineValidation,
42
+ references: (_definition, object, props) => [
43
+ object,
44
+ ...(props.fieldRef == null ? [] : fieldReferences(object, props.fieldRef)),
45
+ ],
46
+ });
@@ -0,0 +1,62 @@
1
+ import {
2
+ detachedManifestScope,
3
+ defineComponent,
4
+ withApiName,
5
+ validateCustomApiName,
6
+ type ComponentDefinition,
7
+ } from './component';
8
+ import { Workflow, type WorkflowProps, type WorkflowNode, type WorkflowGraph } from '../workflow';
9
+ import type { WorkflowActionPayloads } from '../workflow/actions';
10
+ import type { ManifestFunction } from '../manifest-function';
11
+
12
+ export type DefineWorkflowProps = Omit<WorkflowProps, 'definitionId' | 'apiName'> & {
13
+ apiName: `${string}__c`;
14
+ };
15
+
16
+ /** An explicit graph reference includes its function in the manifest and keeps the wire graph unchanged. */
17
+ export function workflowFunction(
18
+ definition: ManifestFunction,
19
+ payload: Omit<WorkflowActionPayloads['RunFunction'], 'function_id'>,
20
+ options: Omit<WorkflowNode, 'config_id' | 'payload' | 'processing_context'> = {},
21
+ ): WorkflowNode {
22
+ const node: ReferencedNode = {
23
+ ...options,
24
+ config_id: 'RunFunction',
25
+ payload: { ...payload, function_id: definition.getApiName() },
26
+ processing_context: { function_context: { function_api_name: definition.getApiName() } },
27
+ };
28
+ Object.defineProperty(node, nodeFunction, { value: definition, enumerable: true });
29
+ return node;
30
+ }
31
+
32
+ export function defineWorkflow(props: DefineWorkflowProps): Workflow {
33
+ validateCustomApiName(props.apiName);
34
+ return workflowComponent.register(
35
+ withApiName(
36
+ new Workflow(detachedManifestScope, { ...props, definitionId: props.apiName }),
37
+ props.apiName,
38
+ ),
39
+ props,
40
+ );
41
+ }
42
+
43
+ const nodeFunction = Symbol.for('@rippling/sdk/workflow-node-function/v1');
44
+
45
+ type ReferencedNode = WorkflowNode & { readonly [nodeFunction]?: ManifestFunction };
46
+
47
+ const graphFunctions = (graph: WorkflowGraph | undefined): ManifestFunction[] =>
48
+ Object.values(graph?.nodes ?? {}).flatMap((node: ReferencedNode) =>
49
+ node[nodeFunction] == null ? [] : [node[nodeFunction]],
50
+ );
51
+
52
+ const workflowComponent: ComponentDefinition<typeof defineWorkflow> = defineComponent({
53
+ type: 'WORKFLOW_DEFINITION',
54
+ define: defineWorkflow,
55
+ references:
56
+ (_definition, { function: fn, graph, functionsInferredGraph }) =>
57
+ () => [
58
+ ...(fn == null || typeof fn === 'string' ? [] : [fn]),
59
+ ...graphFunctions(graph),
60
+ ...graphFunctions(functionsInferredGraph),
61
+ ],
62
+ });
@@ -322,3 +322,7 @@ export {
322
322
  type WorkflowWebhookDefinition,
323
323
  type WorkflowWebhookTrigger,
324
324
  } from './workflow';
325
+
326
+ export * from './composition';
327
+ export * from './package-manifest';
328
+ export * from './definitions';
@@ -0,0 +1,40 @@
1
+ import type { BuiltManifest } from './manifest-builder';
2
+
3
+ /** Publisher-owned package information, independent of component identities. */
4
+ export interface PackageInformation {
5
+ key: string;
6
+ name: string;
7
+ type: 'managed' | 'unmanaged';
8
+ description?: string;
9
+ }
10
+
11
+ /** Package information and a reference to the project's source manifest. */
12
+ export interface PackageManifest {
13
+ package: PackageInformation;
14
+ version: string;
15
+ manifest: Readonly<BuiltManifest>;
16
+ }
17
+
18
+ /** Define package information around an existing manifest without compiling its sources. */
19
+ export function definePackageManifest(input: PackageManifest): Readonly<PackageManifest> {
20
+ if (!/^[a-z][a-z0-9_]{0,99}$/.test(input.package.key))
21
+ throw new Error(
22
+ 'Package key must start with a lowercase letter and contain only lowercase letters, digits, or underscores (maximum 100 characters).',
23
+ );
24
+ if (input.package.key.includes('rippling'))
25
+ throw new Error('Package key cannot contain the reserved name rippling.');
26
+ if (!input.package.name.trim()) throw new Error('Package name is required.');
27
+ if (input.package.type !== 'managed' && input.package.type !== 'unmanaged')
28
+ throw new Error('Package type must be managed or unmanaged.');
29
+ if (!/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(input.version))
30
+ throw new Error('Package version must be major.minor.patch.');
31
+ if (input.manifest.metadata == null || !Array.isArray(input.manifest.components))
32
+ throw new Error('Package manifest requires metadata and components.');
33
+ if (input.manifest.components_to_delete != null && input.manifest.components_to_delete.length > 0)
34
+ throw new Error('Package snapshots cannot contain component deletions.');
35
+ return Object.freeze({
36
+ package: Object.freeze({ ...input.package }),
37
+ version: input.version,
38
+ manifest: input.manifest,
39
+ });
40
+ }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const VERSION = '0.2.0-alpha.109'; // x-release-please-version
1
+ export const VERSION = '0.2.0-alpha.110'; // x-release-please-version
package/version.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.2.0-alpha.109";
1
+ export declare const VERSION = "0.2.0-alpha.110";
2
2
  //# sourceMappingURL=version.d.mts.map
package/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.2.0-alpha.109";
1
+ export declare const VERSION = "0.2.0-alpha.110";
2
2
  //# sourceMappingURL=version.d.ts.map
package/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '0.2.0-alpha.109'; // x-release-please-version
4
+ exports.VERSION = '0.2.0-alpha.110'; // x-release-please-version
5
5
  //# sourceMappingURL=version.js.map
package/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '0.2.0-alpha.109'; // x-release-please-version
1
+ export const VERSION = '0.2.0-alpha.110'; // x-release-please-version
2
2
  //# sourceMappingURL=version.mjs.map