@rippling/rippling-sdk 0.2.0-alpha.32 → 0.2.0-alpha.34

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 (191) hide show
  1. package/client.d.mts +8 -2
  2. package/client.d.mts.map +1 -1
  3. package/client.d.ts +8 -2
  4. package/client.d.ts.map +1 -1
  5. package/client.js +17 -0
  6. package/client.js.map +1 -1
  7. package/client.mjs +17 -0
  8. package/client.mjs.map +1 -1
  9. package/internal/types.d.mts +6 -6
  10. package/internal/types.d.mts.map +1 -1
  11. package/internal/types.d.ts +6 -6
  12. package/internal/types.d.ts.map +1 -1
  13. package/lib/manifest/_helpers.d.mts +91 -0
  14. package/lib/manifest/_helpers.d.mts.map +1 -0
  15. package/lib/manifest/_helpers.d.ts +91 -0
  16. package/lib/manifest/_helpers.d.ts.map +1 -0
  17. package/lib/manifest/_helpers.js +65 -0
  18. package/lib/manifest/_helpers.js.map +1 -0
  19. package/lib/manifest/_helpers.mjs +61 -0
  20. package/lib/manifest/_helpers.mjs.map +1 -0
  21. package/lib/manifest/app.d.mts +45 -0
  22. package/lib/manifest/app.d.mts.map +1 -0
  23. package/lib/manifest/app.d.ts +45 -0
  24. package/lib/manifest/app.d.ts.map +1 -0
  25. package/lib/manifest/app.js +74 -0
  26. package/lib/manifest/app.js.map +1 -0
  27. package/lib/manifest/app.mjs +70 -0
  28. package/lib/manifest/app.mjs.map +1 -0
  29. package/lib/manifest/category.d.mts +23 -0
  30. package/lib/manifest/category.d.mts.map +1 -0
  31. package/lib/manifest/category.d.ts +23 -0
  32. package/lib/manifest/category.d.ts.map +1 -0
  33. package/lib/manifest/category.js +37 -0
  34. package/lib/manifest/category.js.map +1 -0
  35. package/lib/manifest/category.mjs +33 -0
  36. package/lib/manifest/category.mjs.map +1 -0
  37. package/lib/manifest/custom-object-field-section.d.mts +21 -0
  38. package/lib/manifest/custom-object-field-section.d.mts.map +1 -0
  39. package/lib/manifest/custom-object-field-section.d.ts +21 -0
  40. package/lib/manifest/custom-object-field-section.d.ts.map +1 -0
  41. package/lib/manifest/custom-object-field-section.js +42 -0
  42. package/lib/manifest/custom-object-field-section.js.map +1 -0
  43. package/lib/manifest/custom-object-field-section.mjs +38 -0
  44. package/lib/manifest/custom-object-field-section.mjs.map +1 -0
  45. package/lib/manifest/custom-object-page-layout.d.mts +158 -0
  46. package/lib/manifest/custom-object-page-layout.d.mts.map +1 -0
  47. package/lib/manifest/custom-object-page-layout.d.ts +158 -0
  48. package/lib/manifest/custom-object-page-layout.d.ts.map +1 -0
  49. package/lib/manifest/custom-object-page-layout.js +112 -0
  50. package/lib/manifest/custom-object-page-layout.js.map +1 -0
  51. package/lib/manifest/custom-object-page-layout.mjs +108 -0
  52. package/lib/manifest/custom-object-page-layout.mjs.map +1 -0
  53. package/lib/manifest/custom-object.d.mts +52 -0
  54. package/lib/manifest/custom-object.d.mts.map +1 -0
  55. package/lib/manifest/custom-object.d.ts +52 -0
  56. package/lib/manifest/custom-object.d.ts.map +1 -0
  57. package/lib/manifest/custom-object.js +219 -0
  58. package/lib/manifest/custom-object.js.map +1 -0
  59. package/lib/manifest/custom-object.mjs +215 -0
  60. package/lib/manifest/custom-object.mjs.map +1 -0
  61. package/lib/manifest/field.d.mts +276 -0
  62. package/lib/manifest/field.d.mts.map +1 -0
  63. package/lib/manifest/field.d.ts +276 -0
  64. package/lib/manifest/field.d.ts.map +1 -0
  65. package/lib/manifest/field.js +418 -0
  66. package/lib/manifest/field.js.map +1 -0
  67. package/lib/manifest/field.mjs +395 -0
  68. package/lib/manifest/field.mjs.map +1 -0
  69. package/lib/manifest/index.d.mts +15 -0
  70. package/lib/manifest/index.d.mts.map +1 -0
  71. package/lib/manifest/index.d.ts +15 -0
  72. package/lib/manifest/index.d.ts.map +1 -0
  73. package/lib/manifest/index.js +53 -0
  74. package/lib/manifest/index.js.map +1 -0
  75. package/lib/manifest/index.mjs +18 -0
  76. package/lib/manifest/index.mjs.map +1 -0
  77. package/lib/manifest/list-view.d.mts +47 -0
  78. package/lib/manifest/list-view.d.mts.map +1 -0
  79. package/lib/manifest/list-view.d.ts +47 -0
  80. package/lib/manifest/list-view.d.ts.map +1 -0
  81. package/lib/manifest/list-view.js +73 -0
  82. package/lib/manifest/list-view.js.map +1 -0
  83. package/lib/manifest/list-view.mjs +69 -0
  84. package/lib/manifest/list-view.mjs.map +1 -0
  85. package/lib/manifest/manifest-builder.d.mts +44 -0
  86. package/lib/manifest/manifest-builder.d.mts.map +1 -0
  87. package/lib/manifest/manifest-builder.d.ts +44 -0
  88. package/lib/manifest/manifest-builder.d.ts.map +1 -0
  89. package/lib/manifest/manifest-builder.js +69 -0
  90. package/lib/manifest/manifest-builder.js.map +1 -0
  91. package/lib/manifest/manifest-builder.mjs +65 -0
  92. package/lib/manifest/manifest-builder.mjs.map +1 -0
  93. package/lib/manifest/manifest-function.d.mts +39 -0
  94. package/lib/manifest/manifest-function.d.mts.map +1 -0
  95. package/lib/manifest/manifest-function.d.ts +39 -0
  96. package/lib/manifest/manifest-function.d.ts.map +1 -0
  97. package/lib/manifest/manifest-function.js +56 -0
  98. package/lib/manifest/manifest-function.js.map +1 -0
  99. package/lib/manifest/manifest-function.mjs +52 -0
  100. package/lib/manifest/manifest-function.mjs.map +1 -0
  101. package/lib/manifest/rule.d.mts +50 -0
  102. package/lib/manifest/rule.d.mts.map +1 -0
  103. package/lib/manifest/rule.d.ts +50 -0
  104. package/lib/manifest/rule.d.ts.map +1 -0
  105. package/lib/manifest/rule.js +84 -0
  106. package/lib/manifest/rule.js.map +1 -0
  107. package/lib/manifest/rule.mjs +80 -0
  108. package/lib/manifest/rule.mjs.map +1 -0
  109. package/lib/manifest/sdui-page.d.mts +33 -0
  110. package/lib/manifest/sdui-page.d.mts.map +1 -0
  111. package/lib/manifest/sdui-page.d.ts +33 -0
  112. package/lib/manifest/sdui-page.d.ts.map +1 -0
  113. package/lib/manifest/sdui-page.js +52 -0
  114. package/lib/manifest/sdui-page.js.map +1 -0
  115. package/lib/manifest/sdui-page.mjs +48 -0
  116. package/lib/manifest/sdui-page.mjs.map +1 -0
  117. package/lib/manifest/validation.d.mts +41 -0
  118. package/lib/manifest/validation.d.mts.map +1 -0
  119. package/lib/manifest/validation.d.ts +41 -0
  120. package/lib/manifest/validation.d.ts.map +1 -0
  121. package/lib/manifest/validation.js +57 -0
  122. package/lib/manifest/validation.js.map +1 -0
  123. package/lib/manifest/validation.mjs +53 -0
  124. package/lib/manifest/validation.mjs.map +1 -0
  125. package/package.json +11 -1
  126. package/resources/draft-hires.d.mts +22 -0
  127. package/resources/draft-hires.d.mts.map +1 -1
  128. package/resources/draft-hires.d.ts +22 -0
  129. package/resources/draft-hires.d.ts.map +1 -1
  130. package/resources/earnings-inputs.d.mts +104 -1
  131. package/resources/earnings-inputs.d.mts.map +1 -1
  132. package/resources/earnings-inputs.d.ts +104 -1
  133. package/resources/earnings-inputs.d.ts.map +1 -1
  134. package/resources/earnings-inputs.js +17 -0
  135. package/resources/earnings-inputs.js.map +1 -1
  136. package/resources/earnings-inputs.mjs +17 -0
  137. package/resources/earnings-inputs.mjs.map +1 -1
  138. package/resources/files.d.mts +149 -0
  139. package/resources/files.d.mts.map +1 -0
  140. package/resources/files.d.ts +149 -0
  141. package/resources/files.d.ts.map +1 -0
  142. package/resources/files.js +25 -0
  143. package/resources/files.js.map +1 -0
  144. package/resources/files.mjs +21 -0
  145. package/resources/files.mjs.map +1 -0
  146. package/resources/index.d.mts +2 -1
  147. package/resources/index.d.mts.map +1 -1
  148. package/resources/index.d.ts +2 -1
  149. package/resources/index.d.ts.map +1 -1
  150. package/resources/index.js +4 -2
  151. package/resources/index.js.map +1 -1
  152. package/resources/index.mjs +1 -0
  153. package/resources/index.mjs.map +1 -1
  154. package/resources/object-categories.d.mts +1 -1
  155. package/resources/object-categories.d.ts +1 -1
  156. package/resources/object-categories.js +1 -1
  157. package/resources/object-categories.mjs +1 -1
  158. package/resources/report-runs.d.mts +11 -11
  159. package/resources/report-runs.d.ts +11 -11
  160. package/resources/workflow-action-executions.d.mts +17 -2
  161. package/resources/workflow-action-executions.d.mts.map +1 -1
  162. package/resources/workflow-action-executions.d.ts +17 -2
  163. package/resources/workflow-action-executions.d.ts.map +1 -1
  164. package/src/client.ts +29 -0
  165. package/src/internal/types.ts +6 -8
  166. package/src/lib/manifest/_helpers.ts +164 -0
  167. package/src/lib/manifest/app.ts +108 -0
  168. package/src/lib/manifest/category.ts +51 -0
  169. package/src/lib/manifest/custom-object-field-section.ts +54 -0
  170. package/src/lib/manifest/custom-object-page-layout.ts +292 -0
  171. package/src/lib/manifest/custom-object.ts +269 -0
  172. package/src/lib/manifest/field.ts +632 -0
  173. package/src/lib/manifest/index.ts +114 -0
  174. package/src/lib/manifest/list-view.ts +103 -0
  175. package/src/lib/manifest/manifest-builder.ts +97 -0
  176. package/src/lib/manifest/manifest-function.ts +81 -0
  177. package/src/lib/manifest/rule.ts +125 -0
  178. package/src/lib/manifest/sdui-page.ts +72 -0
  179. package/src/lib/manifest/validation.ts +87 -0
  180. package/src/resources/draft-hires.ts +26 -0
  181. package/src/resources/earnings-inputs.ts +140 -0
  182. package/src/resources/files.ts +186 -0
  183. package/src/resources/index.ts +3 -0
  184. package/src/resources/object-categories.ts +1 -1
  185. package/src/resources/report-runs.ts +32 -32
  186. package/src/resources/workflow-action-executions.ts +22 -1
  187. package/src/version.ts +1 -1
  188. package/version.d.mts +1 -1
  189. package/version.d.ts +1 -1
  190. package/version.js +1 -1
  191. package/version.mjs +1 -1
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ /*
3
+ * The contents of this file were inserted manually and are not generated by Stainless.
4
+ *
5
+ * CustomObject builder. Backend schema: CUSTOM_OBJECT (v2).
6
+ *
7
+ * Construction is CDK-style: `new CustomObject(scope, props)` where `scope`
8
+ * is the `ManifestBuilder` (or any `ManifestScope`). The CO also acts as a
9
+ * scope for its own children (fields, validations, rules, list views, page
10
+ * layouts, sections, actions) — those take the CO as their first arg and
11
+ * auto-register with the manifest through it.
12
+ *
13
+ * Every CO auto-registers 9 platform-managed standard field stubs at
14
+ * construction, matching `STANDARD_FIELDS` in the backend's `constants.py`:
15
+ * id, created_at, updated_at, system_updated_at, external_id, name,
16
+ * owner_role, last_modified_by, created_by
17
+ * The backend's closed-world `extract_from_configs` path (used by
18
+ * `POST /metadata/v2/validate`) treats these as hard dependencies of the CO —
19
+ * for any brand-new CO their configs must already be present in the submitted
20
+ * manifest, else validation raises `DEPENDENCY_ERROR`. Users never declare
21
+ * them explicitly; the SDK emits them with `is_standard: true`.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.CustomObject = void 0;
25
+ // ────────────────────────────────────────────────────────────────────────
26
+ // Platform-managed standard fields — mirrors
27
+ // `app/hub_platform/custom_objects/constants.py::STANDARD_FIELDS`.
28
+ // Kept here (not in `field.ts`) so the `Field` class stays focused on
29
+ // user-authored `__c` fields with full validation.
30
+ // ────────────────────────────────────────────────────────────────────────
31
+ /** Specs for the 9 standard fields every CO ships with. Order matches the backend constant. */
32
+ const STANDARD_FIELD_SPECS = [
33
+ {
34
+ apiName: 'id',
35
+ displayName: 'ID',
36
+ description: 'The Rippling ID of a record',
37
+ dataType: { field_type: 'TEXT' },
38
+ required: true,
39
+ unique: true,
40
+ },
41
+ {
42
+ apiName: 'created_at',
43
+ displayName: 'Created Date',
44
+ description: 'The date and time a record was created',
45
+ dataType: { field_type: 'DATETIME' },
46
+ required: false,
47
+ unique: false,
48
+ },
49
+ {
50
+ apiName: 'updated_at',
51
+ displayName: 'Last Modified Date',
52
+ description: 'The date and time a record was last updated',
53
+ dataType: { field_type: 'DATETIME' },
54
+ required: false,
55
+ unique: false,
56
+ },
57
+ {
58
+ apiName: 'system_updated_at',
59
+ displayName: 'System Modified At',
60
+ description: 'The date and time a record was last updated by the system',
61
+ dataType: { field_type: 'DATETIME' },
62
+ required: false,
63
+ unique: false,
64
+ },
65
+ {
66
+ apiName: 'external_id',
67
+ displayName: 'External ID',
68
+ description: 'The external identifier for a record used in third party integrations',
69
+ dataType: { field_type: 'TEXT' },
70
+ required: false,
71
+ unique: true,
72
+ },
73
+ {
74
+ apiName: 'name',
75
+ displayName: 'Name',
76
+ description: 'A string used to describe a record. This is used for display purposes as well as search',
77
+ dataType: { field_type: 'TEXT' },
78
+ required: true,
79
+ unique: false,
80
+ },
81
+ {
82
+ apiName: 'owner_role',
83
+ displayName: 'Owner',
84
+ description: 'The Employee responsible for the record. This is used by Permissions to determine who has ability to view, edit, and delete data',
85
+ dataType: {
86
+ field_type: 'NATIVE_EDGE',
87
+ og_model_rql_name: 'Employee',
88
+ db_model_name: 'RoleWithCompany',
89
+ reference_column_storage_type: 'STRING',
90
+ },
91
+ required: false,
92
+ unique: false,
93
+ },
94
+ {
95
+ apiName: 'last_modified_by',
96
+ displayName: 'Last Modified by',
97
+ description: 'The Employee who made the latest change.',
98
+ dataType: {
99
+ field_type: 'NATIVE_EDGE',
100
+ og_model_rql_name: 'Employee',
101
+ db_model_name: 'RoleWithCompany',
102
+ reference_column_storage_type: 'STRING',
103
+ },
104
+ required: false,
105
+ unique: false,
106
+ },
107
+ {
108
+ apiName: 'created_by',
109
+ displayName: 'Created by',
110
+ description: 'The Employee who created the record',
111
+ dataType: {
112
+ field_type: 'NATIVE_EDGE',
113
+ og_model_rql_name: 'Employee',
114
+ db_model_name: 'RoleWithCompany',
115
+ reference_column_storage_type: 'STRING',
116
+ },
117
+ required: false,
118
+ unique: false,
119
+ },
120
+ ];
121
+ /**
122
+ * Minimal `ManifestComponent` that emits a single standard field stub.
123
+ * Intentionally bypasses `Field`'s `__c` validator since standard api_names
124
+ * (`id`, `created_at`, …) don't carry the custom-field suffix.
125
+ */
126
+ class _StandardField {
127
+ constructor(customObjectApiName, spec) {
128
+ this.customObjectApiName = customObjectApiName;
129
+ this.spec = spec;
130
+ }
131
+ toDict() {
132
+ return {
133
+ type: 'CUSTOM_OBJECT_FIELD',
134
+ custom_object_api_name: this.customObjectApiName,
135
+ field_api_name: this.spec.apiName,
136
+ field_display_name: this.spec.displayName,
137
+ data_type: { options_list: [], supported_types: [], ...this.spec.dataType },
138
+ description: this.spec.description,
139
+ is_required: this.spec.required,
140
+ is_unique: this.spec.unique,
141
+ is_indexed: null,
142
+ rql_formula: null,
143
+ formula_attr_metas: null,
144
+ is_standard: true,
145
+ derived_aggregated_field: null,
146
+ derived_field_formula: null,
147
+ section: null,
148
+ };
149
+ }
150
+ }
151
+ class CustomObject {
152
+ /** Build a new CO and auto-register with `scope`; enforces `__c` suffix on `apiName`. */
153
+ constructor(scope, props) {
154
+ if (!props.apiName.endsWith('__c')) {
155
+ throw new Error(`Custom object api_name must end with __c: ${props.apiName}`);
156
+ }
157
+ this._scope = scope;
158
+ this._apiName = props.apiName;
159
+ this._name = props.name;
160
+ this._category = props.category;
161
+ this._description = props.description;
162
+ this._icon = props.icon;
163
+ this._pluralLabel = props.pluralLabel;
164
+ this._nameFieldDetails = props.nameFieldDetails;
165
+ this._defaultFieldSectionName = props.defaultFieldSectionName;
166
+ scope._register(this);
167
+ // Backend closed-world validation requires these 9 configs for every new CO.
168
+ for (const spec of STANDARD_FIELD_SPECS) {
169
+ scope._register(new _StandardField(this._apiName, spec));
170
+ }
171
+ }
172
+ /** @internal Scope hook: forward child registration up to the builder. */
173
+ _register(component) {
174
+ this._scope._register(component);
175
+ }
176
+ /** Backend api_name for this custom object. */
177
+ getApiName() {
178
+ return this._apiName;
179
+ }
180
+ /** Singular display name. */
181
+ getName() {
182
+ return this._name;
183
+ }
184
+ /** Serialize to the backend `CUSTOM_OBJECT` wire shape. */
185
+ toDict() {
186
+ const component = {
187
+ type: 'CUSTOM_OBJECT',
188
+ api_name: this._apiName,
189
+ name: this._name,
190
+ description: this._description ?? null,
191
+ category_api_name: typeof this._category === 'string' ? this._category : this._category.getApiName(),
192
+ };
193
+ if (this._icon != null) {
194
+ const iconDict = {};
195
+ if (this._icon.emoji != null)
196
+ iconDict['emoji'] = this._icon.emoji;
197
+ if (this._icon.ripplingIcon != null)
198
+ iconDict['rippling_icon'] = this._icon.ripplingIcon;
199
+ if (this._icon.s3Bucket != null)
200
+ iconDict['s3_bucket'] = this._icon.s3Bucket;
201
+ if (this._icon.s3Key != null)
202
+ iconDict['s3_key'] = this._icon.s3Key;
203
+ // Mirror backend `if self.icon:` — empty dict is falsy and gets omitted.
204
+ if (Object.keys(iconDict).length > 0) {
205
+ component['icon'] = iconDict;
206
+ }
207
+ }
208
+ if (this._pluralLabel != null)
209
+ component['plural_label'] = this._pluralLabel;
210
+ if (this._nameFieldDetails != null)
211
+ component['name_field_details'] = this._nameFieldDetails;
212
+ if (this._defaultFieldSectionName != null) {
213
+ component['default_field_section_name'] = this._defaultFieldSectionName;
214
+ }
215
+ return component;
216
+ }
217
+ }
218
+ exports.CustomObject = CustomObject;
219
+ //# sourceMappingURL=custom-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-object.js","sourceRoot":"","sources":["../../src/lib/manifest/custom-object.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ /*
2
+ * The contents of this file were inserted manually and are not generated by Stainless.
3
+ *
4
+ * CustomObject builder. Backend schema: CUSTOM_OBJECT (v2).
5
+ *
6
+ * Construction is CDK-style: `new CustomObject(scope, props)` where `scope`
7
+ * is the `ManifestBuilder` (or any `ManifestScope`). The CO also acts as a
8
+ * scope for its own children (fields, validations, rules, list views, page
9
+ * layouts, sections, actions) — those take the CO as their first arg and
10
+ * auto-register with the manifest through it.
11
+ *
12
+ * Every CO auto-registers 9 platform-managed standard field stubs at
13
+ * construction, matching `STANDARD_FIELDS` in the backend's `constants.py`:
14
+ * id, created_at, updated_at, system_updated_at, external_id, name,
15
+ * owner_role, last_modified_by, created_by
16
+ * The backend's closed-world `extract_from_configs` path (used by
17
+ * `POST /metadata/v2/validate`) treats these as hard dependencies of the CO —
18
+ * for any brand-new CO their configs must already be present in the submitted
19
+ * manifest, else validation raises `DEPENDENCY_ERROR`. Users never declare
20
+ * them explicitly; the SDK emits them with `is_standard: true`.
21
+ */
22
+ // ────────────────────────────────────────────────────────────────────────
23
+ // Platform-managed standard fields — mirrors
24
+ // `app/hub_platform/custom_objects/constants.py::STANDARD_FIELDS`.
25
+ // Kept here (not in `field.ts`) so the `Field` class stays focused on
26
+ // user-authored `__c` fields with full validation.
27
+ // ────────────────────────────────────────────────────────────────────────
28
+ /** Specs for the 9 standard fields every CO ships with. Order matches the backend constant. */
29
+ const STANDARD_FIELD_SPECS = [
30
+ {
31
+ apiName: 'id',
32
+ displayName: 'ID',
33
+ description: 'The Rippling ID of a record',
34
+ dataType: { field_type: 'TEXT' },
35
+ required: true,
36
+ unique: true,
37
+ },
38
+ {
39
+ apiName: 'created_at',
40
+ displayName: 'Created Date',
41
+ description: 'The date and time a record was created',
42
+ dataType: { field_type: 'DATETIME' },
43
+ required: false,
44
+ unique: false,
45
+ },
46
+ {
47
+ apiName: 'updated_at',
48
+ displayName: 'Last Modified Date',
49
+ description: 'The date and time a record was last updated',
50
+ dataType: { field_type: 'DATETIME' },
51
+ required: false,
52
+ unique: false,
53
+ },
54
+ {
55
+ apiName: 'system_updated_at',
56
+ displayName: 'System Modified At',
57
+ description: 'The date and time a record was last updated by the system',
58
+ dataType: { field_type: 'DATETIME' },
59
+ required: false,
60
+ unique: false,
61
+ },
62
+ {
63
+ apiName: 'external_id',
64
+ displayName: 'External ID',
65
+ description: 'The external identifier for a record used in third party integrations',
66
+ dataType: { field_type: 'TEXT' },
67
+ required: false,
68
+ unique: true,
69
+ },
70
+ {
71
+ apiName: 'name',
72
+ displayName: 'Name',
73
+ description: 'A string used to describe a record. This is used for display purposes as well as search',
74
+ dataType: { field_type: 'TEXT' },
75
+ required: true,
76
+ unique: false,
77
+ },
78
+ {
79
+ apiName: 'owner_role',
80
+ displayName: 'Owner',
81
+ description: 'The Employee responsible for the record. This is used by Permissions to determine who has ability to view, edit, and delete data',
82
+ dataType: {
83
+ field_type: 'NATIVE_EDGE',
84
+ og_model_rql_name: 'Employee',
85
+ db_model_name: 'RoleWithCompany',
86
+ reference_column_storage_type: 'STRING',
87
+ },
88
+ required: false,
89
+ unique: false,
90
+ },
91
+ {
92
+ apiName: 'last_modified_by',
93
+ displayName: 'Last Modified by',
94
+ description: 'The Employee who made the latest change.',
95
+ dataType: {
96
+ field_type: 'NATIVE_EDGE',
97
+ og_model_rql_name: 'Employee',
98
+ db_model_name: 'RoleWithCompany',
99
+ reference_column_storage_type: 'STRING',
100
+ },
101
+ required: false,
102
+ unique: false,
103
+ },
104
+ {
105
+ apiName: 'created_by',
106
+ displayName: 'Created by',
107
+ description: 'The Employee who created the record',
108
+ dataType: {
109
+ field_type: 'NATIVE_EDGE',
110
+ og_model_rql_name: 'Employee',
111
+ db_model_name: 'RoleWithCompany',
112
+ reference_column_storage_type: 'STRING',
113
+ },
114
+ required: false,
115
+ unique: false,
116
+ },
117
+ ];
118
+ /**
119
+ * Minimal `ManifestComponent` that emits a single standard field stub.
120
+ * Intentionally bypasses `Field`'s `__c` validator since standard api_names
121
+ * (`id`, `created_at`, …) don't carry the custom-field suffix.
122
+ */
123
+ class _StandardField {
124
+ constructor(customObjectApiName, spec) {
125
+ this.customObjectApiName = customObjectApiName;
126
+ this.spec = spec;
127
+ }
128
+ toDict() {
129
+ return {
130
+ type: 'CUSTOM_OBJECT_FIELD',
131
+ custom_object_api_name: this.customObjectApiName,
132
+ field_api_name: this.spec.apiName,
133
+ field_display_name: this.spec.displayName,
134
+ data_type: { options_list: [], supported_types: [], ...this.spec.dataType },
135
+ description: this.spec.description,
136
+ is_required: this.spec.required,
137
+ is_unique: this.spec.unique,
138
+ is_indexed: null,
139
+ rql_formula: null,
140
+ formula_attr_metas: null,
141
+ is_standard: true,
142
+ derived_aggregated_field: null,
143
+ derived_field_formula: null,
144
+ section: null,
145
+ };
146
+ }
147
+ }
148
+ export class CustomObject {
149
+ /** Build a new CO and auto-register with `scope`; enforces `__c` suffix on `apiName`. */
150
+ constructor(scope, props) {
151
+ if (!props.apiName.endsWith('__c')) {
152
+ throw new Error(`Custom object api_name must end with __c: ${props.apiName}`);
153
+ }
154
+ this._scope = scope;
155
+ this._apiName = props.apiName;
156
+ this._name = props.name;
157
+ this._category = props.category;
158
+ this._description = props.description;
159
+ this._icon = props.icon;
160
+ this._pluralLabel = props.pluralLabel;
161
+ this._nameFieldDetails = props.nameFieldDetails;
162
+ this._defaultFieldSectionName = props.defaultFieldSectionName;
163
+ scope._register(this);
164
+ // Backend closed-world validation requires these 9 configs for every new CO.
165
+ for (const spec of STANDARD_FIELD_SPECS) {
166
+ scope._register(new _StandardField(this._apiName, spec));
167
+ }
168
+ }
169
+ /** @internal Scope hook: forward child registration up to the builder. */
170
+ _register(component) {
171
+ this._scope._register(component);
172
+ }
173
+ /** Backend api_name for this custom object. */
174
+ getApiName() {
175
+ return this._apiName;
176
+ }
177
+ /** Singular display name. */
178
+ getName() {
179
+ return this._name;
180
+ }
181
+ /** Serialize to the backend `CUSTOM_OBJECT` wire shape. */
182
+ toDict() {
183
+ const component = {
184
+ type: 'CUSTOM_OBJECT',
185
+ api_name: this._apiName,
186
+ name: this._name,
187
+ description: this._description ?? null,
188
+ category_api_name: typeof this._category === 'string' ? this._category : this._category.getApiName(),
189
+ };
190
+ if (this._icon != null) {
191
+ const iconDict = {};
192
+ if (this._icon.emoji != null)
193
+ iconDict['emoji'] = this._icon.emoji;
194
+ if (this._icon.ripplingIcon != null)
195
+ iconDict['rippling_icon'] = this._icon.ripplingIcon;
196
+ if (this._icon.s3Bucket != null)
197
+ iconDict['s3_bucket'] = this._icon.s3Bucket;
198
+ if (this._icon.s3Key != null)
199
+ iconDict['s3_key'] = this._icon.s3Key;
200
+ // Mirror backend `if self.icon:` — empty dict is falsy and gets omitted.
201
+ if (Object.keys(iconDict).length > 0) {
202
+ component['icon'] = iconDict;
203
+ }
204
+ }
205
+ if (this._pluralLabel != null)
206
+ component['plural_label'] = this._pluralLabel;
207
+ if (this._nameFieldDetails != null)
208
+ component['name_field_details'] = this._nameFieldDetails;
209
+ if (this._defaultFieldSectionName != null) {
210
+ component['default_field_section_name'] = this._defaultFieldSectionName;
211
+ }
212
+ return component;
213
+ }
214
+ }
215
+ //# sourceMappingURL=custom-object.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-object.mjs","sourceRoot":"","sources":["../../src/lib/manifest/custom-object.ts"],"names":[],"mappings":"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"}