Files
twenty/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts
T
Raphaël Bosi 0f06fccdee Make page layout tab layoutMode diffable and default standalone pages to vertical list (#23596)
Reported on Discord: an app declared a `STANDALONE_PAGE` layout with one
`FRONT_COMPONENT` widget and got a small bordered card instead of a
full-bleed page, and setting `layoutMode` afterwards changed nothing.

Two bugs:

- `pageLayoutTab.layoutMode` was `toCompare: false`, so it was written
once at create and never diffed again. Changing it in a manifest and
redeploying was a silent no-op, and `updatePageLayoutTab(layoutMode:)`
was accepted by the API then dropped by the runner's update sanitizer.
- A manifest tab that omits `layoutMode` defaulted to `GRID` regardless
of page layout type, and a `GRID` tab always renders its widgets as
cards on a 12-column grid. Standalone pages now default to
`VERTICAL_LIST`, where a lone widget owns the tab.

Also fixes the SDK scaffolder (`twenty add page-layout` emitted a tab
with no `position`, which does not typecheck) and the docs claim that a
single widget is always full-bleed.

Worth knowing for review: this does not migrate workspaces holding
legacy `CANVAS` tabs. The standard-app sync only runs against a fresh
schema, so those rows stay `CANVAS` and keep rendering correctly through
the derived presentation.


<!-- This is an auto-generated description by cubic. -->
<a
href="https://cubic.dev/pr/twentyhq/twenty/pull/23596?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->
2026-07-31 13:12:19 +00:00

1891 lines
46 KiB
TypeScript

import { type AllMetadataName } from 'twenty-shared/metadata';
import { type UnwrapWasRemovedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-removed-in-upgrade.decorator';
import { type MetadataEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-entity.type';
import { type MetadataManyToOneJoinColumn } from 'src/engine/metadata-modules/flat-entity/types/metadata-many-to-one-join-column.type';
import { type ScalarFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/scalar-flat-entity.type';
import { type AllJsonbPropertiesWithSerializedPropertiesForMetadataName } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/constants/all-jsonb-properties-with-serialized-relation-by-metadata-name.constant';
import { type ExtractJsonbProperties } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/extract-jsonb-properties.type';
import { type ToUniversalForeignKey } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/to-universal-foreign-key.type';
type HasObjectInUnion<T> = T extends unknown
? T extends object
? true
: false
: never;
type MetadataEntityPropertyConfiguration<
TMetadataName extends AllMetadataName,
> = {
[K in keyof Omit<
ScalarFlatEntity<MetadataEntity<TMetadataName>>,
'id' | 'workspaceId' | 'applicationId' | 'universalIdentifier'
>]: {
universalProperty: K extends AllJsonbPropertiesWithSerializedPropertiesForMetadataName<TMetadataName> &
string
? `universal${Capitalize<K>}`
: K extends MetadataManyToOneJoinColumn<TMetadataName> & string
? ToUniversalForeignKey<K>
: undefined;
toStringify: K extends ExtractJsonbProperties<MetadataEntity<TMetadataName>>
? true
: K extends keyof MetadataEntity<TMetadataName>
? NonNullable<
UnwrapWasRemovedInUpgrade<MetadataEntity<TMetadataName>[K]>
> extends Date
? false
: HasObjectInUnion<
UnwrapWasRemovedInUpgrade<MetadataEntity<TMetadataName>[K]>
>
: boolean;
toCompare: boolean;
isOverridable?: boolean;
translatable?: boolean;
};
};
export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = {
fieldMetadata: {
isSystemSideEffect: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
defaultValue: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
description: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
translatable: true,
},
icon: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
isActive: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isLabelSyncedWithName: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
// isUnique is derived from IndexMetadata at cache build time and is
// not a column on the fieldMetadata table. It stays in
// propertiesToCompare so per-type validators see the proposed
// change (e.g. rejecting unique on FILES), but the field-metadata
// runner drops it before issuing the SQL UPDATE — the actual state
// change rides on the side-effect index create/delete.
isUnique: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
label: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
translatable: true,
},
name: { toCompare: true, toStringify: false, universalProperty: undefined },
options: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
overrides: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
settings: {
toCompare: true,
toStringify: true,
universalProperty: 'universalSettings',
},
objectMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'objectMetadataUniversalIdentifier',
},
type: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
isSystem: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
isUIEditable: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isNullable: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
relationTargetFieldMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'relationTargetFieldMetadataUniversalIdentifier',
},
relationTargetObjectMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'relationTargetObjectMetadataUniversalIdentifier',
},
morphId: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
objectMetadata: {
dataSourceId: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
color: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
description: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
translatable: true,
},
icon: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
isActive: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isLabelSyncedWithName: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
labelPlural: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
translatable: true,
},
labelSingular: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
translatable: true,
},
namePlural: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
nameSingular: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
labelIdentifierFieldMetadataId: {
toCompare: true,
toStringify: false,
// @ts-expect-error remove once https://github.com/twentyhq/core-team-issues/issues/2172 has been resolved
universalProperty: 'labelIdentifierFieldMetadataUniversalIdentifier',
},
overrides: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
isRemote: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
isSystem: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
isUIEditable: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isUICreatable: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isAuditLogged: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
isSearchable: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
duplicateCriteria: {
toCompare: false,
toStringify: true,
universalProperty: undefined,
},
shortcut: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
imageIdentifierFieldMetadataId: {
toCompare: true,
toStringify: false,
// @ts-expect-error remove once https://github.com/twentyhq/core-team-issues/issues/2172 has been resolved
universalProperty: 'imageIdentifierFieldMetadataUniversalIdentifier',
isOverridable: true,
},
targetTableName: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
view: {
isSystemSideEffect: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
key: { toCompare: false, toStringify: false, universalProperty: undefined },
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdByUserWorkspaceId: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
name: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
type: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
icon: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
position: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
isCompact: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
openRecordIn: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
kanbanAggregateOperation: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
kanbanAggregateOperationFieldMetadataId: {
toCompare: true,
toStringify: false,
universalProperty:
'kanbanAggregateOperationFieldMetadataUniversalIdentifier',
isOverridable: true,
},
anyFieldFilterValue: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
calendarLayout: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
calendarFieldMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'calendarFieldMetadataUniversalIdentifier',
isOverridable: true,
},
calendarEndFieldMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'calendarEndFieldMetadataUniversalIdentifier',
isOverridable: true,
},
visibility: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
mainGroupByFieldMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'mainGroupByFieldMetadataUniversalIdentifier',
isOverridable: true,
},
shouldHideEmptyGroups: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
kanbanColumnWidth: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
isActive: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: false,
},
overrides: {
toCompare: true,
toStringify: true,
universalProperty: 'universalOverrides',
},
objectMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'objectMetadataUniversalIdentifier',
},
isCustom: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
viewFieldGroup: {
name: {
toStringify: false,
universalProperty: undefined,
toCompare: true,
isOverridable: true,
},
position: {
toStringify: false,
universalProperty: undefined,
toCompare: true,
isOverridable: true,
},
isVisible: {
toStringify: false,
universalProperty: undefined,
toCompare: true,
isOverridable: true,
},
isActive: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: false,
},
deletedAt: {
toStringify: false,
universalProperty: undefined,
toCompare: true,
},
createdAt: {
toCompare: false,
universalProperty: undefined,
toStringify: false,
},
updatedAt: {
toCompare: false,
universalProperty: undefined,
toStringify: false,
},
viewId: {
toCompare: true,
universalProperty: 'viewUniversalIdentifier',
toStringify: false,
},
overrides: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
},
viewField: {
isSystemSideEffect: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
isVisible: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
size: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
position: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
aggregateOperation: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
viewFieldGroupId: {
toStringify: false,
universalProperty: 'viewFieldGroupUniversalIdentifier',
toCompare: true,
isOverridable: true,
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
fieldMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'fieldMetadataUniversalIdentifier',
},
viewId: {
toCompare: true,
toStringify: false,
universalProperty: 'viewUniversalIdentifier',
},
isActive: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: false,
},
overrides: {
toCompare: true,
toStringify: true,
universalProperty: 'universalOverrides',
},
},
viewGroup: {
isVisible: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
fieldValue: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
position: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
viewId: {
toCompare: true,
toStringify: false,
universalProperty: 'viewUniversalIdentifier',
},
},
index: {
isSystemSideEffect: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
indexType: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
indexWhereClause: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isUnique: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
name: { toCompare: true, toStringify: false, universalProperty: undefined },
objectMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'objectMetadataUniversalIdentifier',
},
isCustom: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
logicFunction: {
name: { toCompare: true, toStringify: false, universalProperty: undefined },
description: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
timeoutSeconds: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
checksum: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
sourceHandlerPath: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
handlerName: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isBuildUpToDate: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
executionMode: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
cronTriggerSettings: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
databaseEventTriggerSettings: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
httpRouteTriggerSettings: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
serverRouteTriggerSettings: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
toolTriggerSettings: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
workflowActionTriggerSettings: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
builtHandlerPath: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
runtime: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
viewFilter: {
viewId: {
toCompare: true,
toStringify: false,
universalProperty: 'viewUniversalIdentifier',
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
fieldMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'fieldMetadataUniversalIdentifier',
},
operand: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
value: { toCompare: true, toStringify: true, universalProperty: undefined },
viewFilterGroupId: {
toCompare: true,
toStringify: false,
universalProperty: 'viewFilterGroupUniversalIdentifier',
},
positionInViewFilterGroup: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
subFieldName: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
relationTargetFieldMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'relationTargetFieldMetadataUniversalIdentifier',
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
role: {
label: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
description: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
icon: { toCompare: true, toStringify: false, universalProperty: undefined },
canUpdateAllSettings: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canAccessAllTools: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canReadAllObjectRecords: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canUpdateAllObjectRecords: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canSoftDeleteAllObjectRecords: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canDestroyAllObjectRecords: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canBeAssignedToUsers: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canBeAssignedToAgents: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canBeAssignedToApiKeys: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isEditable: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
roleTarget: {
roleId: {
toCompare: true,
toStringify: false,
universalProperty: 'roleUniversalIdentifier',
},
userWorkspaceId: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
apiKeyId: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
agentId: {
toCompare: true,
toStringify: false,
universalProperty: 'agentUniversalIdentifier',
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
agent: {
name: { toCompare: true, toStringify: false, universalProperty: undefined },
label: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
icon: { toCompare: true, toStringify: false, universalProperty: undefined },
description: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
prompt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
modelId: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
responseFormat: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
modelConfiguration: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
evaluationInputs: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
isCustom: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
deletedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
pageLayout: {
isSystemSideEffect: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
name: { toCompare: true, toStringify: false, universalProperty: undefined },
type: { toCompare: true, toStringify: false, universalProperty: undefined },
objectMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'objectMetadataUniversalIdentifier',
},
defaultTabToFocusOnMobileAndSidePanelId: {
toCompare: true,
toStringify: false,
universalProperty:
'defaultTabToFocusOnMobileAndSidePanelUniversalIdentifier',
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
pageLayoutWidget: {
isSystemSideEffect: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
title: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
type: { toCompare: true, toStringify: false, universalProperty: undefined },
objectMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'objectMetadataUniversalIdentifier',
},
gridPosition: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
position: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
isOverridable: true,
},
configuration: {
toCompare: true,
toStringify: true,
universalProperty: 'universalConfiguration',
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
pageLayoutTabId: {
toCompare: true,
toStringify: false,
universalProperty: 'pageLayoutTabUniversalIdentifier',
isOverridable: true,
},
conditionalDisplay: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
isOverridable: true,
},
conditionalAvailabilityExpression: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
isActive: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: false,
},
overrides: {
toCompare: true,
toStringify: true,
universalProperty: 'universalOverrides',
},
},
pageLayoutTab: {
isSystemSideEffect: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
title: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
position: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
icon: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
pageLayoutId: {
toCompare: false,
toStringify: false,
universalProperty: 'pageLayoutUniversalIdentifier',
},
layoutMode: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isActive: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: false,
},
overrides: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
},
skill: {
name: { toCompare: true, toStringify: false, universalProperty: undefined },
label: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
icon: { toCompare: true, toStringify: false, universalProperty: undefined },
description: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
content: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isActive: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isCustom: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
commandMenuItem: {
isSystemSideEffect: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
label: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
icon: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
shortLabel: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
position: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
isPinned: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
availabilityType: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
conditionalAvailabilityExpression: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
availabilityObjectMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'availabilityObjectMetadataUniversalIdentifier',
isOverridable: true,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
frontComponentId: {
toCompare: false,
toStringify: false,
universalProperty: 'frontComponentUniversalIdentifier',
},
engineComponentKey: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
payload: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
hotKeys: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
isOverridable: true,
},
workflowVersionId: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
pageLayoutId: {
toCompare: false,
toStringify: false,
universalProperty: 'pageLayoutUniversalIdentifier',
isOverridable: true,
},
isActive: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: false,
},
overrides: {
toCompare: true,
toStringify: true,
universalProperty: 'universalOverrides',
},
},
navigationMenuItem: {
type: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
position: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
folderId: {
toCompare: true,
toStringify: false,
universalProperty: 'folderUniversalIdentifier',
},
name: { toCompare: true, toStringify: false, universalProperty: undefined },
link: { toCompare: true, toStringify: false, universalProperty: undefined },
icon: { toCompare: true, toStringify: false, universalProperty: undefined },
color: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
viewId: {
toCompare: false,
toStringify: false,
universalProperty: 'viewUniversalIdentifier',
},
userWorkspaceId: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
targetRecordId: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
targetObjectMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'targetObjectMetadataUniversalIdentifier',
},
pageLayoutId: {
toCompare: false,
toStringify: false,
universalProperty: 'pageLayoutUniversalIdentifier',
},
},
rolePermissionFlag: {
permissionFlagId: {
toCompare: true,
toStringify: false,
universalProperty: 'permissionFlagUniversalIdentifier',
},
roleId: {
toCompare: true,
toStringify: false,
universalProperty: 'roleUniversalIdentifier',
},
flag: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
permissionFlag: {
key: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
label: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
description: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
icon: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
permissionType: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
fieldPermission: {
roleId: {
toCompare: true,
toStringify: false,
universalProperty: 'roleUniversalIdentifier',
},
objectMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'objectMetadataUniversalIdentifier',
},
fieldMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'fieldMetadataUniversalIdentifier',
},
canReadFieldValue: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canUpdateFieldValue: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
objectPermission: {
roleId: {
toCompare: true,
toStringify: false,
universalProperty: 'roleUniversalIdentifier',
},
objectMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'objectMetadataUniversalIdentifier',
},
canReadObjectRecords: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canUpdateObjectRecords: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canSoftDeleteObjectRecords: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
canDestroyObjectRecords: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
rowLevelPermissionPredicate: {
fieldMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'fieldMetadataUniversalIdentifier',
},
operand: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
value: { toCompare: true, toStringify: true, universalProperty: undefined },
rowLevelPermissionPredicateGroupId: {
toCompare: true,
toStringify: false,
universalProperty: 'rowLevelPermissionPredicateGroupUniversalIdentifier',
},
positionInRowLevelPermissionPredicateGroup: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
subFieldName: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
workspaceMemberFieldMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'workspaceMemberFieldMetadataUniversalIdentifier',
},
workspaceMemberSubFieldName: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
objectMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'objectMetadataUniversalIdentifier',
},
roleId: {
toCompare: false,
toStringify: false,
universalProperty: 'roleUniversalIdentifier',
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
rowLevelPermissionPredicateGroup: {
logicalOperator: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
positionInRowLevelPermissionPredicateGroup: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
parentRowLevelPermissionPredicateGroupId: {
toCompare: true,
toStringify: false,
universalProperty:
'parentRowLevelPermissionPredicateGroupUniversalIdentifier',
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
objectMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'objectMetadataUniversalIdentifier',
},
roleId: {
toCompare: false,
toStringify: false,
universalProperty: 'roleUniversalIdentifier',
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
viewSort: {
direction: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
subFieldName: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
fieldMetadataId: {
toCompare: true,
toStringify: false,
universalProperty: 'fieldMetadataUniversalIdentifier',
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
viewId: {
toCompare: true,
toStringify: false,
universalProperty: 'viewUniversalIdentifier',
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
},
viewFilterGroup: {
viewId: {
toCompare: true,
toStringify: false,
universalProperty: 'viewUniversalIdentifier',
},
deletedAt: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
parentViewFilterGroupId: {
toCompare: true,
toStringify: false,
universalProperty: 'parentViewFilterGroupUniversalIdentifier',
},
logicalOperator: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
positionInViewFilterGroup: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
frontComponent: {
name: { toCompare: true, toStringify: false, universalProperty: undefined },
description: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
builtComponentChecksum: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
sourceComponentPath: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
builtComponentPath: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
componentName: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isHeadless: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
usesSdkClient: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
webhook: {
targetUrl: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
operations: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
description: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
secret: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
deletedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
applicationVariable: {
key: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
value: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
description: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
isSecret: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
type: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
options: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
connectionProvider: {
name: { toCompare: true, toStringify: false, universalProperty: undefined },
displayName: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
type: { toCompare: true, toStringify: false, universalProperty: undefined },
oauthConfig: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
onConnectLogicFunctionUniversalIdentifier: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
searchFieldMetadata: {
isSystemSideEffect: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
objectMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'objectMetadataUniversalIdentifier',
},
fieldMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'fieldMetadataUniversalIdentifier',
},
tsVectorFieldMetadataId: {
toCompare: false,
toStringify: false,
universalProperty: 'tsVectorFieldMetadataUniversalIdentifier',
},
position: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
},
createdAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
updatedAt: {
toCompare: false,
toStringify: false,
universalProperty: undefined,
},
},
} as const satisfies {
[P in AllMetadataName]: MetadataEntityPropertyConfiguration<P>;
};
export type MetadataEntityPropertyName<T extends AllMetadataName> =
keyof (typeof ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME)[T];
type FilterComparableKeys<TConfig> = {
[P in keyof TConfig]: TConfig[P] extends { toCompare: true } ? P : never;
}[keyof TConfig];
export type MetadataEntityComparablePropertyName<T extends AllMetadataName> =
FilterComparableKeys<
(typeof ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME)[T]
>;
type FilterOverridableKeys<TConfig> = {
[P in keyof TConfig]: TConfig[P] extends { isOverridable: true } ? P : never;
}[keyof TConfig];
export type MetadataEntityOverridablePropertyName<T extends AllMetadataName> =
FilterOverridableKeys<
(typeof ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME)[T]
>;
type FilterTranslatableKeys<TConfig> = {
[P in keyof TConfig]: TConfig[P] extends { translatable: true } ? P : never;
}[keyof TConfig];
export type MetadataEntityTranslatablePropertyName<T extends AllMetadataName> =
FilterTranslatableKeys<
(typeof ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME)[T]
>;