Skip to content

Commit 3082336

Browse files
authored
Merge pull request #955 from constructive-io/devin/1775098620-add-data-composite-field-registry
feat: add DataCompositeField to node-type-registry
2 parents d1cfd69 + e375541 commit 3082336

3 files changed

Lines changed: 51 additions & 1 deletion

File tree

graphql/node-type-registry/src/blueprint-types.generated.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,15 @@ export interface DataImmutableFieldsParams {
174174
/* Field names that cannot be modified after INSERT (e.g. ["key", "bucket_id", "owner_id"]) */
175175
fields: string[];
176176
}
177+
/** Creates a derived text field that automatically concatenates multiple source fields via BEFORE INSERT/UPDATE triggers. Used to produce a unified text representation (e.g., embedding_text) from multiple columns on a table. The trigger fires with '_000' prefix to run before Search* triggers alphabetically. */
178+
export interface DataCompositeFieldParams {
179+
/* Name of the derived text field to create (default: 'embedding_text') */
180+
target?: string;
181+
/* Array of source field names to concatenate into the target field */
182+
source_fields: string[];
183+
/* Output format: 'labeled' (field_name: value) or 'plain' (values only). Default: 'labeled' */
184+
format?: "labeled" | "plain";
185+
}
177186
/** Creates a user profiles table with standard profile fields (profile_picture, bio, first_name, last_name, tags, desired). Uses AuthzDirectOwner for edit access and AuthzAllowAll for select. */
178187
export type TableUserProfilesParams = {};
179188
/** Creates an organization settings table with standard business fields (legal_name, address fields). Uses AuthzEntityMembership for access control. */
@@ -794,7 +803,7 @@ export interface BlueprintTableUniqueConstraint {
794803
*/
795804
;
796805
/** String shorthand -- just the node type name. */
797-
export type BlueprintNodeShorthand = "AuthzDirectOwner" | "AuthzDirectOwnerAny" | "AuthzMembership" | "AuthzEntityMembership" | "AuthzRelatedEntityMembership" | "AuthzOrgHierarchy" | "AuthzTemporal" | "AuthzPublishable" | "AuthzMemberList" | "AuthzRelatedMemberList" | "AuthzAllowAll" | "AuthzDenyAll" | "AuthzComposite" | "AuthzPeerOwnership" | "AuthzRelatedPeerOwnership" | "DataId" | "DataDirectOwner" | "DataEntityMembership" | "DataOwnershipInEntity" | "DataTimestamps" | "DataPeoplestamps" | "DataPublishable" | "DataSoftDelete" | "SearchVector" | "SearchFullText" | "SearchBm25" | "SearchUnified" | "SearchSpatial" | "SearchSpatialAggregate" | "DataJobTrigger" | "DataTags" | "DataStatusField" | "DataJsonb" | "SearchTrgm" | "DataSlug" | "DataInflection" | "DataOwnedFields" | "DataInheritFromParent" | "DataForceCurrentUser" | "DataImmutableFields" | "TableUserProfiles" | "TableOrganizationSettings" | "TableUserSettings";
806+
export type BlueprintNodeShorthand = "AuthzDirectOwner" | "AuthzDirectOwnerAny" | "AuthzMembership" | "AuthzEntityMembership" | "AuthzRelatedEntityMembership" | "AuthzOrgHierarchy" | "AuthzTemporal" | "AuthzPublishable" | "AuthzMemberList" | "AuthzRelatedMemberList" | "AuthzAllowAll" | "AuthzDenyAll" | "AuthzComposite" | "AuthzPeerOwnership" | "AuthzRelatedPeerOwnership" | "DataId" | "DataDirectOwner" | "DataEntityMembership" | "DataOwnershipInEntity" | "DataTimestamps" | "DataPeoplestamps" | "DataPublishable" | "DataSoftDelete" | "SearchVector" | "SearchFullText" | "SearchBm25" | "SearchUnified" | "SearchSpatial" | "SearchSpatialAggregate" | "DataJobTrigger" | "DataTags" | "DataStatusField" | "DataJsonb" | "SearchTrgm" | "DataSlug" | "DataInflection" | "DataOwnedFields" | "DataInheritFromParent" | "DataForceCurrentUser" | "DataImmutableFields" | "DataCompositeField" | "TableUserProfiles" | "TableOrganizationSettings" | "TableUserSettings";
798807
/** Object form -- { $type, data } with typed parameters. */
799808
export type BlueprintNodeObject = {
800809
$type: "AuthzDirectOwner";
@@ -916,6 +925,9 @@ export type BlueprintNodeObject = {
916925
} | {
917926
$type: "DataImmutableFields";
918927
data: DataImmutableFieldsParams;
928+
} | {
929+
$type: "DataCompositeField";
930+
data: DataCompositeFieldParams;
919931
} | {
920932
$type: "TableUserProfiles";
921933
data?: Record<string, never>;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import type { NodeTypeDefinition } from '../types';
2+
3+
export const DataCompositeField: NodeTypeDefinition = {
4+
"name": "DataCompositeField",
5+
"slug": "data_composite_field",
6+
"category": "data",
7+
"display_name": "Composite Field",
8+
"description": "Creates a derived text field that automatically concatenates multiple source fields via BEFORE INSERT/UPDATE triggers. Used to produce a unified text representation (e.g., embedding_text) from multiple columns on a table. The trigger fires with '_000' prefix to run before Search* triggers alphabetically.",
9+
"parameter_schema": {
10+
"type": "object",
11+
"properties": {
12+
"target": {
13+
"type": "string",
14+
"description": "Name of the derived text field to create (default: 'embedding_text')"
15+
},
16+
"source_fields": {
17+
"type": "array",
18+
"items": {
19+
"type": "string"
20+
},
21+
"description": "Array of source field names to concatenate into the target field"
22+
},
23+
"format": {
24+
"type": "string",
25+
"enum": ["labeled", "plain"],
26+
"description": "Output format: 'labeled' (field_name: value) or 'plain' (values only). Default: 'labeled'"
27+
}
28+
},
29+
"required": [
30+
"source_fields"
31+
]
32+
},
33+
"tags": [
34+
"transform",
35+
"behavior"
36+
]
37+
};

graphql/node-type-registry/src/data/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export { DataOwnedFields } from './data-owned-fields';
2323
export { DataInheritFromParent } from './data-inherit-from-parent';
2424
export { DataForceCurrentUser } from './data-force-current-user';
2525
export { DataImmutableFields } from './data-immutable-fields';
26+
export { DataCompositeField } from './data-composite-field';
2627
export { TableUserProfiles } from './table-user-profiles';
2728
export { TableOrganizationSettings } from './table-organization-settings';
2829
export { TableUserSettings } from './table-user-settings';

0 commit comments

Comments
 (0)