@rippling/rippling-sdk 0.2.0-alpha.108 → 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.
- package/client.d.mts +14 -0
- package/client.d.mts.map +1 -1
- package/client.d.ts +14 -0
- package/client.d.ts.map +1 -1
- package/client.js +18 -0
- package/client.js.map +1 -1
- package/client.mjs +18 -0
- package/client.mjs.map +1 -1
- package/index.d.mts +5 -0
- package/index.d.mts.map +1 -1
- package/index.d.ts +5 -0
- package/index.d.ts.map +1 -1
- package/index.js +11 -1
- package/index.js.map +1 -1
- package/index.mjs +5 -0
- package/index.mjs.map +1 -1
- package/lib/charts/builders.d.mts +18 -19
- package/lib/charts/builders.d.mts.map +1 -1
- package/lib/charts/builders.d.ts +18 -19
- package/lib/charts/builders.d.ts.map +1 -1
- package/lib/charts/builders.js +35 -28
- package/lib/charts/builders.js.map +1 -1
- package/lib/charts/builders.mjs +35 -28
- package/lib/charts/builders.mjs.map +1 -1
- package/lib/charts/describe.d.mts +6 -7
- package/lib/charts/describe.d.mts.map +1 -1
- package/lib/charts/describe.d.ts +6 -7
- package/lib/charts/describe.d.ts.map +1 -1
- package/lib/charts/describe.js +26 -27
- package/lib/charts/describe.js.map +1 -1
- package/lib/charts/describe.mjs +27 -28
- package/lib/charts/describe.mjs.map +1 -1
- package/lib/charts/errors.d.mts +2 -6
- package/lib/charts/errors.d.mts.map +1 -1
- package/lib/charts/errors.d.ts +2 -6
- package/lib/charts/errors.d.ts.map +1 -1
- package/lib/charts/errors.js +2 -6
- package/lib/charts/errors.js.map +1 -1
- package/lib/charts/errors.mjs +2 -6
- package/lib/charts/errors.mjs.map +1 -1
- package/lib/charts/evaluate.d.mts +5 -7
- package/lib/charts/evaluate.d.mts.map +1 -1
- package/lib/charts/evaluate.d.ts +5 -7
- package/lib/charts/evaluate.d.ts.map +1 -1
- package/lib/charts/evaluate.js +21 -35
- package/lib/charts/evaluate.js.map +1 -1
- package/lib/charts/evaluate.mjs +22 -36
- package/lib/charts/evaluate.mjs.map +1 -1
- package/lib/charts/schema.d.mts +8 -97
- package/lib/charts/schema.d.mts.map +1 -1
- package/lib/charts/schema.d.ts +8 -97
- package/lib/charts/schema.d.ts.map +1 -1
- package/lib/charts/schema.js +186 -65
- package/lib/charts/schema.js.map +1 -1
- package/lib/charts/schema.mjs +185 -65
- package/lib/charts/schema.mjs.map +1 -1
- package/lib/charts/types.d.mts +40 -25
- package/lib/charts/types.d.mts.map +1 -1
- package/lib/charts/types.d.ts +40 -25
- package/lib/charts/types.d.ts.map +1 -1
- package/lib/charts/types.js +8 -10
- package/lib/charts/types.js.map +1 -1
- package/lib/charts/types.mjs +8 -10
- package/lib/charts/types.mjs.map +1 -1
- package/lib/charts/visualization-grammar.d.mts +66 -0
- package/lib/charts/visualization-grammar.d.mts.map +1 -0
- package/lib/charts/visualization-grammar.d.ts +66 -0
- package/lib/charts/visualization-grammar.d.ts.map +1 -0
- package/lib/charts/visualization-grammar.js +70 -0
- package/lib/charts/visualization-grammar.js.map +1 -0
- package/lib/charts/visualization-grammar.mjs +67 -0
- package/lib/charts/visualization-grammar.mjs.map +1 -0
- package/lib/charts/vocabulary.d.mts +7 -0
- package/lib/charts/vocabulary.d.mts.map +1 -0
- package/lib/charts/vocabulary.d.ts +7 -0
- package/lib/charts/vocabulary.d.ts.map +1 -0
- package/lib/charts/vocabulary.js +10 -0
- package/lib/charts/vocabulary.js.map +1 -0
- package/lib/charts/vocabulary.mjs +7 -0
- package/lib/charts/vocabulary.mjs.map +1 -0
- package/lib/charts.d.mts +3 -3
- package/lib/charts.d.mts.map +1 -1
- package/lib/charts.d.ts +3 -3
- package/lib/charts.d.ts.map +1 -1
- package/lib/charts.js +2 -1
- package/lib/charts.js.map +1 -1
- package/lib/charts.mjs +1 -1
- package/lib/charts.mjs.map +1 -1
- package/lib/manifest/composition.d.mts +21 -0
- package/lib/manifest/composition.d.mts.map +1 -0
- package/lib/manifest/composition.d.ts +21 -0
- package/lib/manifest/composition.d.ts.map +1 -0
- package/lib/manifest/composition.js +103 -0
- package/lib/manifest/composition.js.map +1 -0
- package/lib/manifest/composition.mjs +99 -0
- package/lib/manifest/composition.mjs.map +1 -0
- package/lib/manifest/definitions/_object-records.d.mts +23 -0
- package/lib/manifest/definitions/_object-records.d.mts.map +1 -0
- package/lib/manifest/definitions/_object-records.d.ts +23 -0
- package/lib/manifest/definitions/_object-records.d.ts.map +1 -0
- package/lib/manifest/definitions/_object-records.js +151 -0
- package/lib/manifest/definitions/_object-records.js.map +1 -0
- package/lib/manifest/definitions/_object-records.mjs +147 -0
- package/lib/manifest/definitions/_object-records.mjs.map +1 -0
- package/lib/manifest/definitions/action.d.mts +7 -0
- package/lib/manifest/definitions/action.d.mts.map +1 -0
- package/lib/manifest/definitions/action.d.ts +7 -0
- package/lib/manifest/definitions/action.d.ts.map +1 -0
- package/lib/manifest/definitions/action.js +25 -0
- package/lib/manifest/definitions/action.js.map +1 -0
- package/lib/manifest/definitions/action.mjs +22 -0
- package/lib/manifest/definitions/action.mjs.map +1 -0
- package/lib/manifest/definitions/agent.d.mts +51 -0
- package/lib/manifest/definitions/agent.d.mts.map +1 -0
- package/lib/manifest/definitions/agent.d.ts +51 -0
- package/lib/manifest/definitions/agent.d.ts.map +1 -0
- package/lib/manifest/definitions/agent.js +65 -0
- package/lib/manifest/definitions/agent.js.map +1 -0
- package/lib/manifest/definitions/agent.mjs +59 -0
- package/lib/manifest/definitions/agent.mjs.map +1 -0
- package/lib/manifest/definitions/app.d.mts +3 -0
- package/lib/manifest/definitions/app.d.mts.map +1 -0
- package/lib/manifest/definitions/app.d.ts +3 -0
- package/lib/manifest/definitions/app.d.ts.map +1 -0
- package/lib/manifest/definitions/app.js +14 -0
- package/lib/manifest/definitions/app.js.map +1 -0
- package/lib/manifest/definitions/app.mjs +11 -0
- package/lib/manifest/definitions/app.mjs.map +1 -0
- package/lib/manifest/definitions/category.d.mts +9 -0
- package/lib/manifest/definitions/category.d.mts.map +1 -0
- package/lib/manifest/definitions/category.d.ts +9 -0
- package/lib/manifest/definitions/category.d.ts.map +1 -0
- package/lib/manifest/definitions/category.js +27 -0
- package/lib/manifest/definitions/category.js.map +1 -0
- package/lib/manifest/definitions/category.mjs +23 -0
- package/lib/manifest/definitions/category.mjs.map +1 -0
- package/lib/manifest/definitions/component.d.mts +101 -0
- package/lib/manifest/definitions/component.d.mts.map +1 -0
- package/lib/manifest/definitions/component.d.ts +101 -0
- package/lib/manifest/definitions/component.d.ts.map +1 -0
- package/lib/manifest/definitions/component.js +106 -0
- package/lib/manifest/definitions/component.js.map +1 -0
- package/lib/manifest/definitions/component.mjs +97 -0
- package/lib/manifest/definitions/component.mjs.map +1 -0
- package/lib/manifest/definitions/custom-field-section.d.mts +13 -0
- package/lib/manifest/definitions/custom-field-section.d.mts.map +1 -0
- package/lib/manifest/definitions/custom-field-section.d.ts +13 -0
- package/lib/manifest/definitions/custom-field-section.d.ts.map +1 -0
- package/lib/manifest/definitions/custom-field-section.js +15 -0
- package/lib/manifest/definitions/custom-field-section.js.map +1 -0
- package/lib/manifest/definitions/custom-field-section.mjs +12 -0
- package/lib/manifest/definitions/custom-field-section.mjs.map +1 -0
- package/lib/manifest/definitions/custom-field.d.mts +10 -0
- package/lib/manifest/definitions/custom-field.d.mts.map +1 -0
- package/lib/manifest/definitions/custom-field.d.ts +10 -0
- package/lib/manifest/definitions/custom-field.d.ts.map +1 -0
- package/lib/manifest/definitions/custom-field.js +18 -0
- package/lib/manifest/definitions/custom-field.js.map +1 -0
- package/lib/manifest/definitions/custom-field.mjs +15 -0
- package/lib/manifest/definitions/custom-field.mjs.map +1 -0
- package/lib/manifest/definitions/custom-object.d.mts +162 -0
- package/lib/manifest/definitions/custom-object.d.mts.map +1 -0
- package/lib/manifest/definitions/custom-object.d.ts +162 -0
- package/lib/manifest/definitions/custom-object.d.ts.map +1 -0
- package/lib/manifest/definitions/custom-object.js +412 -0
- package/lib/manifest/definitions/custom-object.js.map +1 -0
- package/lib/manifest/definitions/custom-object.mjs +386 -0
- package/lib/manifest/definitions/custom-object.mjs.map +1 -0
- package/lib/manifest/definitions/custom-skill.d.mts +8 -0
- package/lib/manifest/definitions/custom-skill.d.mts.map +1 -0
- package/lib/manifest/definitions/custom-skill.d.ts +8 -0
- package/lib/manifest/definitions/custom-skill.d.ts.map +1 -0
- package/lib/manifest/definitions/custom-skill.js +15 -0
- package/lib/manifest/definitions/custom-skill.js.map +1 -0
- package/lib/manifest/definitions/custom-skill.mjs +12 -0
- package/lib/manifest/definitions/custom-skill.mjs.map +1 -0
- package/lib/manifest/definitions/field-section.d.mts +7 -0
- package/lib/manifest/definitions/field-section.d.mts.map +1 -0
- package/lib/manifest/definitions/field-section.d.ts +7 -0
- package/lib/manifest/definitions/field-section.d.ts.map +1 -0
- package/lib/manifest/definitions/field-section.js +16 -0
- package/lib/manifest/definitions/field-section.js.map +1 -0
- package/lib/manifest/definitions/field-section.mjs +13 -0
- package/lib/manifest/definitions/field-section.mjs.map +1 -0
- package/lib/manifest/definitions/field.d.mts +38 -0
- package/lib/manifest/definitions/field.d.mts.map +1 -0
- package/lib/manifest/definitions/field.d.ts +38 -0
- package/lib/manifest/definitions/field.d.ts.map +1 -0
- package/lib/manifest/definitions/field.js +50 -0
- package/lib/manifest/definitions/field.js.map +1 -0
- package/lib/manifest/definitions/field.mjs +45 -0
- package/lib/manifest/definitions/field.mjs.map +1 -0
- package/lib/manifest/definitions/function.d.mts +61 -0
- package/lib/manifest/definitions/function.d.mts.map +1 -0
- package/lib/manifest/definitions/function.d.ts +61 -0
- package/lib/manifest/definitions/function.d.ts.map +1 -0
- package/lib/manifest/definitions/function.js +79 -0
- package/lib/manifest/definitions/function.js.map +1 -0
- package/lib/manifest/definitions/function.mjs +73 -0
- package/lib/manifest/definitions/function.mjs.map +1 -0
- package/lib/manifest/definitions/index.d.mts +22 -0
- package/lib/manifest/definitions/index.d.mts.map +1 -0
- package/lib/manifest/definitions/index.d.ts +22 -0
- package/lib/manifest/definitions/index.d.ts.map +1 -0
- package/lib/manifest/definitions/index.js +64 -0
- package/lib/manifest/definitions/index.js.map +1 -0
- package/lib/manifest/definitions/index.mjs +22 -0
- package/lib/manifest/definitions/index.mjs.map +1 -0
- package/lib/manifest/definitions/list-view.d.mts +9 -0
- package/lib/manifest/definitions/list-view.d.mts.map +1 -0
- package/lib/manifest/definitions/list-view.d.ts +9 -0
- package/lib/manifest/definitions/list-view.d.ts.map +1 -0
- package/lib/manifest/definitions/list-view.js +25 -0
- package/lib/manifest/definitions/list-view.js.map +1 -0
- package/lib/manifest/definitions/list-view.mjs +22 -0
- package/lib/manifest/definitions/list-view.mjs.map +1 -0
- package/lib/manifest/definitions/object-search-config.d.mts +13 -0
- package/lib/manifest/definitions/object-search-config.d.mts.map +1 -0
- package/lib/manifest/definitions/object-search-config.d.ts +13 -0
- package/lib/manifest/definitions/object-search-config.d.ts.map +1 -0
- package/lib/manifest/definitions/object-search-config.js +25 -0
- package/lib/manifest/definitions/object-search-config.js.map +1 -0
- package/lib/manifest/definitions/object-search-config.mjs +22 -0
- package/lib/manifest/definitions/object-search-config.mjs.map +1 -0
- package/lib/manifest/definitions/object-settings.d.mts +24 -0
- package/lib/manifest/definitions/object-settings.d.mts.map +1 -0
- package/lib/manifest/definitions/object-settings.d.ts +24 -0
- package/lib/manifest/definitions/object-settings.d.ts.map +1 -0
- package/lib/manifest/definitions/object-settings.js +32 -0
- package/lib/manifest/definitions/object-settings.js.map +1 -0
- package/lib/manifest/definitions/object-settings.mjs +29 -0
- package/lib/manifest/definitions/object-settings.mjs.map +1 -0
- package/lib/manifest/definitions/page-layout.d.mts +21 -0
- package/lib/manifest/definitions/page-layout.d.mts.map +1 -0
- package/lib/manifest/definitions/page-layout.d.ts +21 -0
- package/lib/manifest/definitions/page-layout.d.ts.map +1 -0
- package/lib/manifest/definitions/page-layout.js +155 -0
- package/lib/manifest/definitions/page-layout.js.map +1 -0
- package/lib/manifest/definitions/page-layout.mjs +152 -0
- package/lib/manifest/definitions/page-layout.mjs.map +1 -0
- package/lib/manifest/definitions/page.d.mts +8 -0
- package/lib/manifest/definitions/page.d.mts.map +1 -0
- package/lib/manifest/definitions/page.d.ts +8 -0
- package/lib/manifest/definitions/page.d.ts.map +1 -0
- package/lib/manifest/definitions/page.js +15 -0
- package/lib/manifest/definitions/page.js.map +1 -0
- package/lib/manifest/definitions/page.mjs +12 -0
- package/lib/manifest/definitions/page.mjs.map +1 -0
- package/lib/manifest/definitions/record-triggered-flow.d.mts +24 -0
- package/lib/manifest/definitions/record-triggered-flow.d.mts.map +1 -0
- package/lib/manifest/definitions/record-triggered-flow.d.ts +24 -0
- package/lib/manifest/definitions/record-triggered-flow.d.ts.map +1 -0
- package/lib/manifest/definitions/record-triggered-flow.js +28 -0
- package/lib/manifest/definitions/record-triggered-flow.js.map +1 -0
- package/lib/manifest/definitions/record-triggered-flow.mjs +25 -0
- package/lib/manifest/definitions/record-triggered-flow.mjs.map +1 -0
- package/lib/manifest/definitions/validation.d.mts +8 -0
- package/lib/manifest/definitions/validation.d.mts.map +1 -0
- package/lib/manifest/definitions/validation.d.ts +8 -0
- package/lib/manifest/definitions/validation.d.ts.map +1 -0
- package/lib/manifest/definitions/validation.js +24 -0
- package/lib/manifest/definitions/validation.js.map +1 -0
- package/lib/manifest/definitions/validation.mjs +21 -0
- package/lib/manifest/definitions/validation.mjs.map +1 -0
- package/lib/manifest/definitions/workflow.d.mts +10 -0
- package/lib/manifest/definitions/workflow.d.mts.map +1 -0
- package/lib/manifest/definitions/workflow.d.ts +10 -0
- package/lib/manifest/definitions/workflow.d.ts.map +1 -0
- package/lib/manifest/definitions/workflow.js +33 -0
- package/lib/manifest/definitions/workflow.js.map +1 -0
- package/lib/manifest/definitions/workflow.mjs +29 -0
- package/lib/manifest/definitions/workflow.mjs.map +1 -0
- package/lib/manifest/index.d.mts +3 -0
- package/lib/manifest/index.d.mts.map +1 -1
- package/lib/manifest/index.d.ts +3 -0
- package/lib/manifest/index.d.ts.map +1 -1
- package/lib/manifest/index.js +4 -0
- package/lib/manifest/index.js.map +1 -1
- package/lib/manifest/index.mjs +3 -0
- package/lib/manifest/index.mjs.map +1 -1
- package/lib/manifest/package-manifest.d.mts +17 -0
- package/lib/manifest/package-manifest.d.mts.map +1 -0
- package/lib/manifest/package-manifest.d.ts +17 -0
- package/lib/manifest/package-manifest.d.ts.map +1 -0
- package/lib/manifest/package-manifest.js +26 -0
- package/lib/manifest/package-manifest.js.map +1 -0
- package/lib/manifest/package-manifest.mjs +23 -0
- package/lib/manifest/package-manifest.mjs.map +1 -0
- package/package.json +4 -2
- package/resources/index.d.mts +1 -0
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +1 -0
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js +4 -2
- package/resources/index.js.map +1 -1
- package/resources/index.mjs +1 -0
- package/resources/index.mjs.map +1 -1
- package/resources/reimbursements.d.mts +1 -1
- package/resources/reimbursements.d.ts +1 -1
- package/resources/reimbursements.js +1 -1
- package/resources/reimbursements.mjs +1 -1
- package/resources/spend-categories.d.mts +140 -0
- package/resources/spend-categories.d.mts.map +1 -0
- package/resources/spend-categories.d.ts +140 -0
- package/resources/spend-categories.d.ts.map +1 -0
- package/resources/spend-categories.js +83 -0
- package/resources/spend-categories.js.map +1 -0
- package/resources/spend-categories.mjs +79 -0
- package/resources/spend-categories.mjs.map +1 -0
- package/src/client.ts +41 -0
- package/src/index.ts +17 -0
- package/src/lib/charts/README.md +35 -28
- package/src/lib/charts/agent-reference.md +73 -0
- package/src/lib/charts/builders.ts +51 -35
- package/src/lib/charts/capabilities.json +96 -0
- package/src/lib/charts/describe.ts +31 -29
- package/src/lib/charts/errors.ts +2 -6
- package/src/lib/charts/evaluate.ts +25 -38
- package/src/lib/charts/schema.ts +232 -66
- package/src/lib/charts/types.ts +42 -31
- package/src/lib/charts/visualization-grammar.ts +67 -0
- package/src/lib/charts/vocabulary.ts +7 -0
- package/src/lib/charts.ts +8 -1
- package/src/lib/manifest/composition.ts +133 -0
- package/src/lib/manifest/definitions/README.md +89 -0
- package/src/lib/manifest/definitions/_object-records.ts +218 -0
- package/src/lib/manifest/definitions/action.ts +31 -0
- package/src/lib/manifest/definitions/agent.ts +149 -0
- package/src/lib/manifest/definitions/app.ts +12 -0
- package/src/lib/manifest/definitions/category.ts +35 -0
- package/src/lib/manifest/definitions/component.ts +241 -0
- package/src/lib/manifest/definitions/custom-field-section.ts +39 -0
- package/src/lib/manifest/definitions/custom-field.ts +32 -0
- package/src/lib/manifest/definitions/custom-object.ts +786 -0
- package/src/lib/manifest/definitions/custom-skill.ts +28 -0
- package/src/lib/manifest/definitions/field-section.ts +31 -0
- package/src/lib/manifest/definitions/field.ts +119 -0
- package/src/lib/manifest/definitions/function.ts +198 -0
- package/src/lib/manifest/definitions/index.ts +91 -0
- package/src/lib/manifest/definitions/list-view.ts +48 -0
- package/src/lib/manifest/definitions/object-search-config.ts +44 -0
- package/src/lib/manifest/definitions/object-settings.ts +61 -0
- package/src/lib/manifest/definitions/page-layout.ts +218 -0
- package/src/lib/manifest/definitions/page.ts +28 -0
- package/src/lib/manifest/definitions/record-triggered-flow.ts +71 -0
- package/src/lib/manifest/definitions/validation.ts +46 -0
- package/src/lib/manifest/definitions/workflow.ts +62 -0
- package/src/lib/manifest/index.ts +4 -0
- package/src/lib/manifest/package-manifest.ts +40 -0
- package/src/resources/index.ts +7 -0
- package/src/resources/reimbursements.ts +1 -1
- package/src/resources/spend-categories.ts +175 -0
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
- package/lib/charts/guards.d.mts +0 -15
- package/lib/charts/guards.d.mts.map +0 -1
- package/lib/charts/guards.d.ts +0 -15
- package/lib/charts/guards.d.ts.map +0 -1
- package/lib/charts/guards.js +0 -38
- package/lib/charts/guards.js.map +0 -1
- package/lib/charts/guards.mjs +0 -34
- package/lib/charts/guards.mjs.map +0 -1
- package/src/lib/charts/guards.ts +0 -42
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import type { ManifestComponentType, ManifestScope, ManifestComponent } from '../manifest-builder';
|
|
2
|
+
|
|
3
|
+
export type ComponentType = ManifestComponentType | 'CUSTOM_OBJECT_SETTINGS' | 'CUSTOM_OBJECT_SEARCH_CONFIG';
|
|
4
|
+
|
|
5
|
+
/** New definitions compose explicitly; legacy constructors still register through their original scopes. */
|
|
6
|
+
export const detachedManifestScope: ManifestScope = { _register() {} };
|
|
7
|
+
|
|
8
|
+
/** Shared by components whose backend writers require the custom API-name suffix. */
|
|
9
|
+
export function validateCustomApiName(apiName: string): void {
|
|
10
|
+
if (typeof apiName !== 'string' || !apiName.endsWith('__c'))
|
|
11
|
+
throw new Error(`apiName must end with __c: ${apiName}`);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Decorate only a newly created instance; the existing class and serializer stay unchanged. */
|
|
15
|
+
export function withApiName<D extends ManifestComponent>(
|
|
16
|
+
definition: D,
|
|
17
|
+
apiName: string,
|
|
18
|
+
extra: Record<string, unknown> = {},
|
|
19
|
+
) {
|
|
20
|
+
const serialize = definition.toDict.bind(definition);
|
|
21
|
+
return Object.assign(definition, {
|
|
22
|
+
getApiName: () => apiName,
|
|
23
|
+
toDict: () => ({ ...serialize(), ...extra, api_name: apiName, identity_format_version: 2 as const }),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Identifying fields belong to the component's serialized metadata. */
|
|
28
|
+
export type MetadataConfig =
|
|
29
|
+
| {
|
|
30
|
+
readonly type: Exclude<
|
|
31
|
+
ComponentType,
|
|
32
|
+
| 'CUSTOM_OBJECT_FIELD'
|
|
33
|
+
| 'CUSTOM_OBJECT_FIELD_SECTION'
|
|
34
|
+
| 'CUSTOM_OBJECT_ACTION'
|
|
35
|
+
| 'CUSTOM_OBJECT_LIST_VIEW'
|
|
36
|
+
| 'CUSTOM_OBJECT_PAGE_LAYOUT'
|
|
37
|
+
| 'CUSTOM_OBJECT_RECORD_TRIGGERED_FLOW'
|
|
38
|
+
| 'CUSTOM_OBJECT_VALIDATION_RULE'
|
|
39
|
+
| 'CUSTOM_FIELD_SECTION'
|
|
40
|
+
| 'CUSTOM_FIELD_V2'
|
|
41
|
+
| 'CUSTOM_OBJECT_SETTINGS'
|
|
42
|
+
| 'CUSTOM_OBJECT_SEARCH_CONFIG'
|
|
43
|
+
>;
|
|
44
|
+
readonly api_name: string;
|
|
45
|
+
}
|
|
46
|
+
| {
|
|
47
|
+
readonly type: 'CUSTOM_OBJECT_FIELD';
|
|
48
|
+
readonly custom_object_api_name: string;
|
|
49
|
+
readonly field_api_name: string;
|
|
50
|
+
}
|
|
51
|
+
| {
|
|
52
|
+
readonly type: 'CUSTOM_OBJECT_FIELD_SECTION';
|
|
53
|
+
readonly api_name: string;
|
|
54
|
+
readonly model_name: string;
|
|
55
|
+
}
|
|
56
|
+
| {
|
|
57
|
+
readonly type: 'CUSTOM_OBJECT_ACTION' | 'CUSTOM_OBJECT_LIST_VIEW' | 'CUSTOM_OBJECT_PAGE_LAYOUT';
|
|
58
|
+
readonly api_name: string;
|
|
59
|
+
readonly object_rql_name: string;
|
|
60
|
+
}
|
|
61
|
+
| {
|
|
62
|
+
readonly type:
|
|
63
|
+
| 'CUSTOM_OBJECT_RECORD_TRIGGERED_FLOW'
|
|
64
|
+
| 'CUSTOM_OBJECT_VALIDATION_RULE'
|
|
65
|
+
| 'CUSTOM_FIELD_SECTION'
|
|
66
|
+
| 'CUSTOM_FIELD_V2';
|
|
67
|
+
readonly api_name: string;
|
|
68
|
+
readonly model_rql_name: string;
|
|
69
|
+
}
|
|
70
|
+
| { readonly type: 'CUSTOM_OBJECT_SETTINGS'; readonly object_rql_name: string; readonly setting_id: string }
|
|
71
|
+
| { readonly type: 'CUSTOM_OBJECT_SEARCH_CONFIG'; readonly model_rql_name: string };
|
|
72
|
+
|
|
73
|
+
export interface BuildContext {
|
|
74
|
+
bundle(entrypoint: URL): Promise<string>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface MetadataEntry<W extends MetadataConfig = MetadataConfig> {
|
|
78
|
+
readonly config: W;
|
|
79
|
+
/** Generated defaults yield to authored metadata with the same type, parent, and API name. */
|
|
80
|
+
readonly fallback?: boolean;
|
|
81
|
+
readonly buildKey?: string;
|
|
82
|
+
readonly build?: (context: BuildContext) => Promise<W>;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface CompileContext {
|
|
86
|
+
readonly definitions: readonly object[];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
type DefinitionFactory = (...args: never[]) => object;
|
|
90
|
+
|
|
91
|
+
interface ComponentFactory<F extends DefinitionFactory> {
|
|
92
|
+
/** Wire kind used to register this adapter; does not register an API endpoint. */
|
|
93
|
+
readonly type: ComponentType;
|
|
94
|
+
/** Creates the public definition. The wrapper registers the result without adding public properties. */
|
|
95
|
+
readonly define: F;
|
|
96
|
+
/**
|
|
97
|
+
* Receives the factory result and its original arguments. Return fixed references
|
|
98
|
+
* or a callback that reads current dependencies when setters can change them.
|
|
99
|
+
*/
|
|
100
|
+
references?(
|
|
101
|
+
definition: ReturnType<F>,
|
|
102
|
+
...args: Parameters<F>
|
|
103
|
+
): readonly object[] | (() => readonly object[]);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Use a single-definition serializer normally; batch compilers handle schema expansion and merging. */
|
|
107
|
+
export type ComponentImplementation<
|
|
108
|
+
F extends DefinitionFactory,
|
|
109
|
+
W extends MetadataConfig,
|
|
110
|
+
> = ComponentFactory<F> &
|
|
111
|
+
(
|
|
112
|
+
| {
|
|
113
|
+
serialize(definition: ReturnType<F>): W | MetadataEntry<W>;
|
|
114
|
+
compileBatch?: never;
|
|
115
|
+
}
|
|
116
|
+
| {
|
|
117
|
+
serialize?: never;
|
|
118
|
+
compileBatch(
|
|
119
|
+
definitions: readonly ReturnType<F>[],
|
|
120
|
+
context: CompileContext,
|
|
121
|
+
): readonly (W | MetadataEntry<W>)[];
|
|
122
|
+
}
|
|
123
|
+
| (ReturnType<F> extends ManifestComponent ? { serialize?: never; compileBatch?: never } : never)
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
/** Keep public declarations compact without expanding generic factories into their field unions. */
|
|
127
|
+
export interface ComponentDefinition<F extends DefinitionFactory> {
|
|
128
|
+
readonly define: F;
|
|
129
|
+
/** @internal Register a constructed value, preserving its concrete generic type. */
|
|
130
|
+
register<D extends object>(definition: D, ...args: unknown[]): D;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
interface RegisteredComponent {
|
|
134
|
+
readonly type: ComponentType;
|
|
135
|
+
references(): readonly object[];
|
|
136
|
+
readonly implementation: {
|
|
137
|
+
readonly batchKey: object;
|
|
138
|
+
compileBatch(
|
|
139
|
+
definitions: readonly object[],
|
|
140
|
+
context: CompileContext,
|
|
141
|
+
): readonly (MetadataConfig | MetadataEntry)[];
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Shared across SDK copies, and works for frozen schema definitions without mutating them.
|
|
146
|
+
const registryKey = Symbol.for('@rippling/sdk/component-registry/v3');
|
|
147
|
+
const shared = globalThis as typeof globalThis & { [registryKey]?: WeakMap<object, RegisteredComponent> };
|
|
148
|
+
const registry = (shared[registryKey] ??= new WeakMap());
|
|
149
|
+
|
|
150
|
+
export function registeredComponent(definition: object): RegisteredComponent | undefined {
|
|
151
|
+
return registry.get(definition);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** Retains the exact factory signature, including its generic type parameters. */
|
|
155
|
+
export function defineComponent<F extends DefinitionFactory, W extends MetadataConfig = MetadataConfig>(
|
|
156
|
+
implementation: ComponentImplementation<F, W>,
|
|
157
|
+
): ComponentDefinition<F> {
|
|
158
|
+
const adapter = {
|
|
159
|
+
batchKey: implementation.compileBatch ?? implementation,
|
|
160
|
+
compileBatch(
|
|
161
|
+
definitions: readonly object[],
|
|
162
|
+
context: CompileContext,
|
|
163
|
+
): readonly (MetadataConfig | MetadataEntry)[] {
|
|
164
|
+
// Type erasure is confined to registry dispatch; authoring and each implementation stay typed.
|
|
165
|
+
const typed = definitions as ReturnType<F>[];
|
|
166
|
+
if (implementation.compileBatch != null) return implementation.compileBatch(typed, context);
|
|
167
|
+
return typed.map((definition) =>
|
|
168
|
+
implementation.serialize != null ?
|
|
169
|
+
implementation.serialize(definition)
|
|
170
|
+
: ((definition as ManifestComponent).toDict() as W),
|
|
171
|
+
);
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
const register = <D extends object>(definition: D, ...args: unknown[]): D => {
|
|
175
|
+
const references =
|
|
176
|
+
implementation.references?.(definition as ReturnType<F>, ...(args as Parameters<F>)) ?? [];
|
|
177
|
+
const snapshot = typeof references === 'function' ? references : Object.freeze([...references]);
|
|
178
|
+
registry.set(definition, {
|
|
179
|
+
type: implementation.type,
|
|
180
|
+
references: typeof snapshot === 'function' ? snapshot : () => snapshot,
|
|
181
|
+
implementation: adapter,
|
|
182
|
+
});
|
|
183
|
+
return definition;
|
|
184
|
+
};
|
|
185
|
+
const define = new Proxy(implementation.define, {
|
|
186
|
+
apply(target, receiver, args) {
|
|
187
|
+
return register(Reflect.apply(target, receiver, args) as ReturnType<F>, ...(args as Parameters<F>));
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
return { define, register };
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/** Mirror backend identity and installation-map scopes, using wire fields rather than source IDs. */
|
|
194
|
+
export function entryKey({ config }: MetadataEntry): string {
|
|
195
|
+
switch (config.type) {
|
|
196
|
+
case 'CUSTOM_OBJECT_FIELD':
|
|
197
|
+
return JSON.stringify([config.type, config.custom_object_api_name, config.field_api_name]);
|
|
198
|
+
case 'CUSTOM_OBJECT_FIELD_SECTION':
|
|
199
|
+
case 'CUSTOM_OBJECT_ACTION':
|
|
200
|
+
case 'CUSTOM_OBJECT_LIST_VIEW':
|
|
201
|
+
case 'CUSTOM_OBJECT_RECORD_TRIGGERED_FLOW':
|
|
202
|
+
case 'CUSTOM_OBJECT_VALIDATION_RULE':
|
|
203
|
+
// These components still use company-wide API-name lookups or installation maps.
|
|
204
|
+
return JSON.stringify([config.type, config.api_name]);
|
|
205
|
+
case 'CUSTOM_OBJECT_PAGE_LAYOUT':
|
|
206
|
+
return JSON.stringify([config.type, config.object_rql_name, config.api_name]);
|
|
207
|
+
case 'CUSTOM_FIELD_SECTION':
|
|
208
|
+
case 'CUSTOM_FIELD_V2':
|
|
209
|
+
return JSON.stringify([config.type, config.model_rql_name, config.api_name]);
|
|
210
|
+
case 'CUSTOM_OBJECT_SETTINGS':
|
|
211
|
+
return JSON.stringify([config.type, config.object_rql_name]);
|
|
212
|
+
case 'CUSTOM_OBJECT_SEARCH_CONFIG':
|
|
213
|
+
return JSON.stringify([config.type, config.model_rql_name]);
|
|
214
|
+
default:
|
|
215
|
+
return JSON.stringify([config.type, config.api_name]);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/** Deferred builds must retain the same detached configuration snapshot as manifest composition. */
|
|
220
|
+
function snapshotMetadata<W extends MetadataConfig>(config: W): W {
|
|
221
|
+
return JSON.parse(JSON.stringify(config)) as W;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** Shared source-build plumbing; each component supplies its own wire format. */
|
|
225
|
+
export function sourceEntry<W extends MetadataConfig>(
|
|
226
|
+
metadata: W,
|
|
227
|
+
source: URL | undefined,
|
|
228
|
+
build: (config: W, content: string) => W,
|
|
229
|
+
): MetadataEntry<W> {
|
|
230
|
+
const config = snapshotMetadata(metadata);
|
|
231
|
+
const href = source?.href;
|
|
232
|
+
return {
|
|
233
|
+
config,
|
|
234
|
+
...(href === undefined ?
|
|
235
|
+
{}
|
|
236
|
+
: {
|
|
237
|
+
buildKey: href,
|
|
238
|
+
build: async ({ bundle }: BuildContext) => build(config, await bundle(new URL(href))),
|
|
239
|
+
}),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { defineComponent, withApiName, detachedManifestScope, type ComponentDefinition } from './component';
|
|
2
|
+
import { CustomFieldSection, type CustomFieldSectionProps } from '../custom-field-section';
|
|
3
|
+
|
|
4
|
+
export type DefinedCustomFieldSection<TModel extends string> = CustomFieldSection & {
|
|
5
|
+
readonly [modelScope]: TModel;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type DefineCustomFieldSectionProps<TModel extends string> = Omit<
|
|
9
|
+
CustomFieldSectionProps,
|
|
10
|
+
'sectionId' | 'apiName' | 'modelRqlName'
|
|
11
|
+
> & {
|
|
12
|
+
apiName: `${string}__cfs`;
|
|
13
|
+
modelName: string;
|
|
14
|
+
modelRqlName: TModel;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export function defineCustomFieldSection<const TModel extends string>(
|
|
18
|
+
props: DefineCustomFieldSectionProps<TModel>,
|
|
19
|
+
): DefinedCustomFieldSection<TModel> {
|
|
20
|
+
if (!/^[A-Za-z][A-Za-z0-9_]*__cfs$/.test(props.apiName))
|
|
21
|
+
throw new Error(
|
|
22
|
+
`Native field section apiName must start with a letter, contain only letters, digits or underscores, and end with __cfs: ${props.apiName}`,
|
|
23
|
+
);
|
|
24
|
+
return customFieldSectionComponent.register(
|
|
25
|
+
withApiName(
|
|
26
|
+
new CustomFieldSection(detachedManifestScope, { ...props, sectionId: props.apiName }),
|
|
27
|
+
props.apiName,
|
|
28
|
+
{ model_name: props.modelName },
|
|
29
|
+
) as unknown as DefinedCustomFieldSection<TModel>,
|
|
30
|
+
props,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
declare const modelScope: unique symbol;
|
|
35
|
+
|
|
36
|
+
const customFieldSectionComponent: ComponentDefinition<typeof defineCustomFieldSection> = defineComponent({
|
|
37
|
+
type: 'CUSTOM_FIELD_SECTION',
|
|
38
|
+
define: defineCustomFieldSection,
|
|
39
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { defineComponent, withApiName, detachedManifestScope, type ComponentDefinition } from './component';
|
|
2
|
+
import { CustomField, type CustomFieldProps } from '../custom-field';
|
|
3
|
+
import type { DefinedCustomFieldSection } from './custom-field-section';
|
|
4
|
+
|
|
5
|
+
export type DefineCustomFieldProps<TModel extends string> = WithoutLegacyCustomFieldIdentity<
|
|
6
|
+
CustomFieldProps<TModel>
|
|
7
|
+
> & { modelName: string; section: DefinedCustomFieldSection<NoInfer<TModel>> };
|
|
8
|
+
|
|
9
|
+
export function defineCustomField<const TModel extends string>(
|
|
10
|
+
props: DefineCustomFieldProps<TModel>,
|
|
11
|
+
): CustomField<TModel> {
|
|
12
|
+
return customFieldComponent.register(
|
|
13
|
+
withApiName(
|
|
14
|
+
new CustomField(detachedManifestScope, {
|
|
15
|
+
...props,
|
|
16
|
+
...(props.rqlDefinitionFormula == null ? { collectDuring: props.collectDuring ?? 'NONE' } : {}),
|
|
17
|
+
fieldId: props.apiName,
|
|
18
|
+
} as unknown as CustomFieldProps<TModel>),
|
|
19
|
+
props.apiName,
|
|
20
|
+
{ model_name: props.modelName },
|
|
21
|
+
),
|
|
22
|
+
props,
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type WithoutLegacyCustomFieldIdentity<T> = T extends unknown ? Omit<T, 'fieldId' | 'section'> : never;
|
|
27
|
+
|
|
28
|
+
const customFieldComponent: ComponentDefinition<typeof defineCustomField> = defineComponent({
|
|
29
|
+
type: 'CUSTOM_FIELD_V2',
|
|
30
|
+
define: defineCustomField,
|
|
31
|
+
references: (_definition, props) => [props.section],
|
|
32
|
+
});
|