Compile with swc on twenty-server (#4863)

Experiment using swc instead of tsc (as we did the switch on
twenty-front)

It's **much** faster (at least 5x) but has stricter requirements.
I fixed the build but there's still an error while starting the server,
opening this PR for discussion.

Checkout the branch and try `nx build:swc twenty-server`

Read: https://docs.nestjs.com/recipes/swc#common-pitfalls
This commit is contained in:
Félix Malfait
2024-04-14 09:09:51 +02:00
committed by GitHub
parent f82b1ff9ef
commit 9aa24ed803
50 changed files with 600 additions and 152 deletions

View File

@ -0,0 +1,14 @@
{
"$schema": "https://json.schemastore.org/swcrc",
"sourceMaps": true,
"jsc": {
"parser": {
"syntax": "typescript",
"decorators": true,
"dynamicImport": true
},
"baseUrl": "./../../"
},
"minify": false
}

View File

@ -6,3 +6,9 @@ type DeepPartial<T> = {
// eslint-disable-next-line @typescript-eslint/ban-types
type ExcludeFunctions<T> = T extends Function ? never : T;
/**
* Wrapper type used to circumvent ESM modules circular dependency issue
* caused by reflection metadata saving the type of the property.
*/
type CircularDep<T> = T;

View File

@ -1,5 +1,9 @@
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src"
"sourceRoot": "src",
"compilerOptions": {
"builder": "swc",
"typeCheck": true
}
}

View File

@ -9,7 +9,7 @@
"cwd": "packages/twenty-server",
"commands": ["rimraf dist", "nest build --path ./tsconfig.build.json"]
}
},
},
"build:packageJson": {
"executor": "@nx/js:tsc",
"options": {

View File

@ -25,7 +25,7 @@ export class RelationFieldAliasFactory {
constructor(
@Inject(forwardRef(() => FieldsStringFactory))
private readonly fieldsStringFactory: FieldsStringFactory,
private readonly fieldsStringFactory: CircularDep<FieldsStringFactory>,
private readonly argsStringFactory: ArgsStringFactory,
private readonly objectMetadataService: ObjectMetadataService,
) {}

View File

@ -30,7 +30,7 @@ export interface InputTypeDefinition {
export class InputTypeDefinitionFactory {
constructor(
@Inject(forwardRef(() => InputTypeFactory))
private readonly inputTypeFactory: InputTypeFactory,
private readonly inputTypeFactory: CircularDep<InputTypeFactory>,
private readonly typeMapperService: TypeMapperService,
) {}

View File

@ -8,6 +8,7 @@ import {
JoinColumn,
CreateDateColumn,
UpdateDateColumn,
Relation,
} from 'typeorm';
import { BeforeCreateOne, IDField } from '@ptc-org/nestjs-query-graphql';
@ -33,7 +34,7 @@ export class AppToken {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'userId' })
user: User;
user: Relation<User>;
@Column()
userId: string;
@ -42,7 +43,7 @@ export class AppToken {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'workspaceId' })
workspace: Workspace;
workspace: Relation<Workspace>;
@Column({ nullable: true })
workspaceId: string;

View File

@ -4,6 +4,7 @@ import {
Entity,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
Unique,
UpdateDateColumn,
} from 'typeorm';
@ -42,7 +43,7 @@ export class BillingSubscriptionItem {
onDelete: 'CASCADE',
},
)
billingSubscription: BillingSubscription;
billingSubscription: Relation<BillingSubscription>;
@Column({ nullable: false })
stripeProductId: string;

View File

@ -8,6 +8,7 @@ import {
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
Relation,
UpdateDateColumn,
} from 'typeorm';
import Stripe from 'stripe';
@ -37,7 +38,7 @@ export class BillingSubscription {
onDelete: 'CASCADE',
})
@JoinColumn()
workspace: Workspace;
workspace: Relation<Workspace>;
@Column({ nullable: false, type: 'uuid' })
workspaceId: string;
@ -48,17 +49,17 @@ export class BillingSubscription {
@Column({ unique: true, nullable: false })
stripeSubscriptionId: string;
@Field()
@Column({ nullable: false })
@Field(() => String)
@Column({ type: 'text', nullable: false })
status: Stripe.Subscription.Status;
@Field({ nullable: true })
@Column({ nullable: true })
@Field(() => String, { nullable: true })
@Column({ type: 'text', nullable: true })
interval: Stripe.Price.Recurring.Interval;
@OneToMany(
() => BillingSubscriptionItem,
(billingSubscriptionItem) => billingSubscriptionItem.billingSubscription,
)
billingSubscriptionItems: BillingSubscriptionItem[];
billingSubscriptionItems: Relation<BillingSubscriptionItem[]>;
}

View File

@ -8,6 +8,7 @@ import {
CreateDateColumn,
UpdateDateColumn,
ManyToOne,
Relation,
} from 'typeorm';
import { IDField } from '@ptc-org/nestjs-query-graphql';
@ -43,7 +44,7 @@ export class FeatureFlagEntity {
@ManyToOne(() => Workspace, (workspace) => workspace.featureFlags, {
onDelete: 'CASCADE',
})
workspace: Workspace;
workspace: Relation<Workspace>;
@Field()
@Column({ nullable: false })

View File

@ -8,6 +8,7 @@ import {
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
Relation,
Unique,
UpdateDateColumn,
} from 'typeorm';
@ -29,7 +30,7 @@ export class UserWorkspace {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'userId' })
user: User;
user: Relation<User>;
@Field({ nullable: false })
@Column()
@ -40,7 +41,7 @@ export class UserWorkspace {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'workspaceId' })
workspace: Workspace;
workspace: Relation<Workspace>;
@Field({ nullable: false })
@Column()

View File

@ -8,6 +8,7 @@ import {
UpdateDateColumn,
OneToMany,
ManyToOne,
Relation,
} from 'typeorm';
import { IDField } from '@ptc-org/nestjs-query-graphql';
@ -72,7 +73,7 @@ export class User {
@ManyToOne(() => Workspace, (workspace) => workspace.users, {
onDelete: 'SET NULL',
})
defaultWorkspace: Workspace;
defaultWorkspace: Relation<Workspace>;
@Field()
@Column()
@ -89,12 +90,12 @@ export class User {
@OneToMany(() => AppToken, (appToken) => appToken.user, {
cascade: true,
})
appTokens: AppToken[];
appTokens: Relation<AppToken[]>;
@Field(() => WorkspaceMember, { nullable: true })
workspaceMember: WorkspaceMember;
workspaceMember: Relation<WorkspaceMember>;
@Field(() => [UserWorkspace])
@OneToMany(() => UserWorkspace, (userWorkspace) => userWorkspace.user)
workspaces: UserWorkspace[];
workspaces: Relation<UserWorkspace[]>;
}

View File

@ -7,6 +7,7 @@ import {
Entity,
OneToMany,
PrimaryGeneratedColumn,
Relation,
UpdateDateColumn,
} from 'typeorm';
import Stripe from 'stripe';
@ -60,25 +61,25 @@ export class Workspace {
@OneToMany(() => AppToken, (appToken) => appToken.workspace, {
cascade: true,
})
appTokens: AppToken[];
appTokens: Relation<AppToken[]>;
@OneToMany(() => User, (user) => user.defaultWorkspace)
users: User[];
users: Relation<User[]>;
@OneToMany(() => UserWorkspace, (userWorkspace) => userWorkspace.workspace, {
onDelete: 'CASCADE',
})
workspaceUsers: UserWorkspace[];
workspaceUsers: Relation<UserWorkspace[]>;
@Field()
@Column({ default: true })
allowImpersonation: boolean;
@OneToMany(() => FeatureFlagEntity, (featureFlag) => featureFlag.workspace)
featureFlags: FeatureFlagEntity[];
featureFlags: Relation<FeatureFlagEntity[]>;
@Field()
@Column({ default: 'incomplete' })
@Field(() => String)
@Column({ type: 'text', default: 'incomplete' })
subscriptionStatus: Stripe.Subscription.Status;
@Field({ nullable: true })
@ -91,5 +92,5 @@ export class Workspace {
() => BillingSubscription,
(billingSubscription) => billingSubscription.workspace,
)
billingSubscriptions: BillingSubscription[];
billingSubscriptions: Relation<BillingSubscription[]>;
}

View File

@ -1,6 +1,7 @@
import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
import { IsEnum, IsNotEmpty } from 'class-validator';
import { Relation } from 'typeorm';
import { FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto';
import { ObjectMetadataDTO } from 'src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto';
@ -22,19 +23,19 @@ registerEnumType(RelationDefinitionType, {
export class RelationDefinitionDTO {
@IsNotEmpty()
@Field(() => ObjectMetadataDTO)
sourceObjectMetadata: ObjectMetadataDTO;
sourceObjectMetadata: Relation<ObjectMetadataDTO>;
@IsNotEmpty()
@Field(() => ObjectMetadataDTO)
targetObjectMetadata: ObjectMetadataDTO;
targetObjectMetadata: Relation<ObjectMetadataDTO>;
@IsNotEmpty()
@Field(() => FieldMetadataDTO)
sourceFieldMetadata: FieldMetadataDTO;
sourceFieldMetadata: Relation<FieldMetadataDTO>;
@IsNotEmpty()
@Field(() => FieldMetadataDTO)
targetFieldMetadata: FieldMetadataDTO;
targetFieldMetadata: Relation<FieldMetadataDTO>;
@IsEnum(RelationDefinitionType)
@IsNotEmpty()

View File

@ -8,6 +8,7 @@ import {
OneToOne,
CreateDateColumn,
UpdateDateColumn,
Relation,
} from 'typeorm';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
@ -63,7 +64,7 @@ export class FieldMetadataEntity<
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'objectMetadataId' })
object: ObjectMetadataEntity;
object: Relation<ObjectMetadataEntity>;
@Column({ nullable: false })
type: FieldMetadataType;
@ -105,13 +106,13 @@ export class FieldMetadataEntity<
() => RelationMetadataEntity,
(relation: RelationMetadataEntity) => relation.fromFieldMetadata,
)
fromRelationMetadata: RelationMetadataEntity;
fromRelationMetadata: Relation<RelationMetadataEntity>;
@OneToOne(
() => RelationMetadataEntity,
(relation: RelationMetadataEntity) => relation.toFieldMetadata,
)
toRelationMetadata: RelationMetadataEntity;
toRelationMetadata: Relation<RelationMetadataEntity>;
@CreateDateColumn({ type: 'timestamptz' })
createdAt: Date;

View File

@ -7,6 +7,7 @@ import {
CreateDateColumn,
UpdateDateColumn,
ManyToOne,
Relation,
} from 'typeorm';
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
@ -79,7 +80,7 @@ export class ObjectMetadataEntity implements ObjectMetadataInterface {
@OneToMany(() => FieldMetadataEntity, (field) => field.object, {
cascade: true,
})
fields: FieldMetadataEntity[];
fields: Relation<FieldMetadataEntity[]>;
@OneToMany(
() => RelationMetadataEntity,
@ -88,7 +89,7 @@ export class ObjectMetadataEntity implements ObjectMetadataInterface {
cascade: true,
},
)
fromRelations: RelationMetadataEntity[];
fromRelations: Relation<RelationMetadataEntity[]>;
@OneToMany(
() => RelationMetadataEntity,
@ -97,12 +98,12 @@ export class ObjectMetadataEntity implements ObjectMetadataInterface {
cascade: true,
},
)
toRelations: RelationMetadataEntity[];
toRelations: Relation<RelationMetadataEntity[]>;
@ManyToOne(() => DataSourceEntity, (dataSource) => dataSource.objects, {
onDelete: 'CASCADE',
})
dataSource: DataSourceEntity;
dataSource: Relation<DataSourceEntity>;
@CreateDateColumn({ type: 'timestamptz' })
createdAt: Date;

View File

@ -6,6 +6,7 @@ import {
ManyToOne,
OneToOne,
PrimaryGeneratedColumn,
Relation,
UpdateDateColumn,
} from 'typeorm';
@ -65,7 +66,7 @@ export class RelationMetadataEntity implements RelationMetadataInterface {
onDelete: 'CASCADE',
},
)
fromObjectMetadata: ObjectMetadataEntity;
fromObjectMetadata: Relation<ObjectMetadataEntity>;
@ManyToOne(
() => ObjectMetadataEntity,
@ -74,21 +75,21 @@ export class RelationMetadataEntity implements RelationMetadataInterface {
onDelete: 'CASCADE',
},
)
toObjectMetadata: ObjectMetadataEntity;
toObjectMetadata: Relation<ObjectMetadataEntity>;
@OneToOne(
() => FieldMetadataEntity,
(field: FieldMetadataEntity) => field.fromRelationMetadata,
)
@JoinColumn()
fromFieldMetadata: FieldMetadataEntity;
fromFieldMetadata: Relation<FieldMetadataEntity>;
@OneToOne(
() => FieldMetadataEntity,
(field: FieldMetadataEntity) => field.toRelationMetadata,
)
@JoinColumn()
toFieldMetadata: FieldMetadataEntity;
toFieldMetadata: Relation<FieldMetadataEntity>;
@CreateDateColumn({ type: 'timestamptz' })
createdAt: Date;

View File

@ -39,7 +39,7 @@ export class RemoteServerEntity<T extends RemoteServerType> {
@Generated('uuid')
foreignDataWrapperId: string;
@Column({ nullable: true })
@Column({ type: 'text', nullable: true })
foreignDataWrapperType: T;
@Column({ nullable: true, type: 'jsonb' })

View File

@ -1,6 +1,6 @@
import { EntityManager } from 'typeorm';
import companiesDemo from './companies-demo.json';
import { companiesDemo } from 'src/engine/workspace-manager/demo-objects-prefill-data/companies-demo.json';
export const companyPrefillDemoData = async (
entityManager: EntityManager,

View File

@ -1,6 +1,6 @@
import { EntityManager } from 'typeorm';
import peopleDemo from './people-demo.json';
import { peopleDemo } from 'src/engine/workspace-manager/demo-objects-prefill-data/people-demo.json';
export const personPrefillDemoData = async (
entityManager: EntityManager,

View File

@ -0,0 +1,5 @@
/**
* Wrapper type used to circumvent ESM modules circular dependency issue
* caused by reflection metadata saving the type of the property.
*/
export type Relation<T> = T;

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { activityTargetStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -32,7 +34,7 @@ export class ActivityTargetObjectMetadata extends BaseObjectMetadata {
joinColumn: 'activityId',
})
@IsNullable()
activity: ActivityObjectMetadata;
activity: Relation<ActivityObjectMetadata>;
@FieldMetadata({
standardId: activityTargetStandardFieldIds.person,
@ -43,7 +45,7 @@ export class ActivityTargetObjectMetadata extends BaseObjectMetadata {
joinColumn: 'personId',
})
@IsNullable()
person: PersonObjectMetadata;
person: Relation<PersonObjectMetadata>;
@FieldMetadata({
standardId: activityTargetStandardFieldIds.company,
@ -54,7 +56,7 @@ export class ActivityTargetObjectMetadata extends BaseObjectMetadata {
joinColumn: 'companyId',
})
@IsNullable()
company: CompanyObjectMetadata;
company: Relation<CompanyObjectMetadata>;
@FieldMetadata({
standardId: activityTargetStandardFieldIds.opportunity,
@ -65,7 +67,7 @@ export class ActivityTargetObjectMetadata extends BaseObjectMetadata {
joinColumn: 'opportunityId',
})
@IsNullable()
opportunity: OpportunityObjectMetadata;
opportunity: Relation<OpportunityObjectMetadata>;
@DynamicRelationFieldMetadata((oppositeObjectMetadata) => ({
standardId: activityTargetStandardFieldIds.custom,
@ -75,5 +77,5 @@ export class ActivityTargetObjectMetadata extends BaseObjectMetadata {
joinColumn: `${oppositeObjectMetadata.nameSingular}Id`,
icon: 'IconBuildingSkyscraper',
}))
custom: CustomObjectMetadata;
custom: Relation<CustomObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import {
RelationMetadataType,
@ -97,7 +99,7 @@ export class ActivityObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.SET_NULL,
})
@IsNullable()
activityTargets: ActivityTargetObjectMetadata[];
activityTargets: Relation<ActivityTargetObjectMetadata[]>;
@FieldMetadata({
standardId: activityStandardFieldIds.attachments,
@ -112,7 +114,7 @@ export class ActivityObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.SET_NULL,
})
@IsNullable()
attachments: AttachmentObjectMetadata[];
attachments: Relation<AttachmentObjectMetadata[]>;
@FieldMetadata({
standardId: activityStandardFieldIds.comments,
@ -127,7 +129,7 @@ export class ActivityObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.CASCADE,
})
@IsNullable()
comments: CommentObjectMetadata[];
comments: Relation<CommentObjectMetadata[]>;
@FieldMetadata({
standardId: activityStandardFieldIds.author,
@ -138,7 +140,7 @@ export class ActivityObjectMetadata extends BaseObjectMetadata {
joinColumn: 'authorId',
})
@IsNullable()
author: WorkspaceMemberObjectMetadata;
author: Relation<WorkspaceMemberObjectMetadata>;
@FieldMetadata({
standardId: activityStandardFieldIds.assignee,
@ -149,5 +151,5 @@ export class ActivityObjectMetadata extends BaseObjectMetadata {
joinColumn: 'assigneeId',
})
@IsNullable()
assignee: WorkspaceMemberObjectMetadata;
assignee: Relation<WorkspaceMemberObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { commentStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -35,7 +37,7 @@ export class CommentObjectMetadata extends BaseObjectMetadata {
icon: 'IconCircleUser',
joinColumn: 'authorId',
})
author: WorkspaceMemberObjectMetadata;
author: Relation<WorkspaceMemberObjectMetadata>;
@FieldMetadata({
standardId: commentStandardFieldIds.activity,
@ -45,5 +47,5 @@ export class CommentObjectMetadata extends BaseObjectMetadata {
icon: 'IconNotes',
joinColumn: 'activityId',
})
activity: ActivityObjectMetadata;
activity: Relation<ActivityObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { attachmentStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -59,7 +61,7 @@ export class AttachmentObjectMetadata extends BaseObjectMetadata {
icon: 'IconCircleUser',
joinColumn: 'authorId',
})
author: WorkspaceMemberObjectMetadata;
author: Relation<WorkspaceMemberObjectMetadata>;
@FieldMetadata({
standardId: attachmentStandardFieldIds.activity,
@ -70,7 +72,7 @@ export class AttachmentObjectMetadata extends BaseObjectMetadata {
joinColumn: 'activityId',
})
@IsNullable()
activity: ActivityObjectMetadata;
activity: Relation<ActivityObjectMetadata>;
@FieldMetadata({
standardId: attachmentStandardFieldIds.person,
@ -81,7 +83,7 @@ export class AttachmentObjectMetadata extends BaseObjectMetadata {
joinColumn: 'personId',
})
@IsNullable()
person: PersonObjectMetadata;
person: Relation<PersonObjectMetadata>;
@FieldMetadata({
standardId: attachmentStandardFieldIds.company,
@ -92,7 +94,7 @@ export class AttachmentObjectMetadata extends BaseObjectMetadata {
joinColumn: 'companyId',
})
@IsNullable()
company: CompanyObjectMetadata;
company: Relation<CompanyObjectMetadata>;
@FieldMetadata({
standardId: attachmentStandardFieldIds.opportunity,
@ -103,7 +105,7 @@ export class AttachmentObjectMetadata extends BaseObjectMetadata {
joinColumn: 'opportunityId',
})
@IsNullable()
opportunity: OpportunityObjectMetadata;
opportunity: Relation<OpportunityObjectMetadata>;
@DynamicRelationFieldMetadata((oppositeObjectMetadata) => ({
standardId: attachmentStandardFieldIds.custom,
@ -113,5 +115,5 @@ export class AttachmentObjectMetadata extends BaseObjectMetadata {
joinColumn: `${oppositeObjectMetadata.nameSingular}Id`,
icon: 'IconBuildingSkyscraper',
}))
custom: CustomObjectMetadata;
custom: Relation<CustomObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { calendarChannelEventAssociationStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
@ -30,7 +32,7 @@ export class CalendarChannelEventAssociationObjectMetadata extends BaseObjectMet
icon: 'IconCalendar',
joinColumn: 'calendarChannelId',
})
calendarChannel: CalendarEventObjectMetadata;
calendarChannel: Relation<CalendarEventObjectMetadata>;
@FieldMetadata({
standardId: calendarChannelEventAssociationStandardFieldIds.calendarEvent,
@ -40,7 +42,7 @@ export class CalendarChannelEventAssociationObjectMetadata extends BaseObjectMet
icon: 'IconCalendar',
joinColumn: 'calendarEventId',
})
calendarEvent: CalendarEventObjectMetadata;
calendarEvent: Relation<CalendarEventObjectMetadata>;
@FieldMetadata({
standardId: calendarChannelEventAssociationStandardFieldIds.eventExternalId,

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import {
RelationMetadataType,
RelationOnDeleteAction,
@ -41,7 +43,7 @@ export class CalendarChannelObjectMetadata extends BaseObjectMetadata {
icon: 'IconUserCircle',
joinColumn: 'connectedAccountId',
})
connectedAccount: ConnectedAccountObjectMetadata;
connectedAccount: Relation<ConnectedAccountObjectMetadata>;
@FieldMetadata({
standardId: calendarChannelStandardFieldIds.handle,
@ -119,5 +121,7 @@ export class CalendarChannelObjectMetadata extends BaseObjectMetadata {
inverseSideTarget: () => CalendarChannelEventAssociationObjectMetadata,
onDelete: RelationOnDeleteAction.CASCADE,
})
calendarChannelEventAssociations: CalendarChannelEventAssociationObjectMetadata[];
calendarChannelEventAssociations: Relation<
CalendarChannelEventAssociationObjectMetadata[]
>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { calendarEventParticipantStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -39,7 +41,7 @@ export class CalendarEventParticipantObjectMetadata extends BaseObjectMetadata {
icon: 'IconCalendar',
joinColumn: 'calendarEventId',
})
calendarEvent: CalendarEventObjectMetadata;
calendarEvent: Relation<CalendarEventObjectMetadata>;
@FieldMetadata({
standardId: calendarEventParticipantStandardFieldIds.handle,
@ -114,7 +116,7 @@ export class CalendarEventParticipantObjectMetadata extends BaseObjectMetadata {
joinColumn: 'personId',
})
@IsNullable()
person: PersonObjectMetadata;
person: Relation<PersonObjectMetadata>;
@FieldMetadata({
standardId: calendarEventParticipantStandardFieldIds.workspaceMember,
@ -125,5 +127,5 @@ export class CalendarEventParticipantObjectMetadata extends BaseObjectMetadata {
joinColumn: 'workspaceMemberId',
})
@IsNullable()
workspaceMember: WorkspaceMemberObjectMetadata;
workspaceMember: Relation<WorkspaceMemberObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { RelationMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/decorators/relation-metadata.decorator';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
@ -168,7 +170,9 @@ export class CalendarEventObjectMetadata extends BaseObjectMetadata {
@Gate({
featureFlag: 'IS_CALENDAR_ENABLED',
})
calendarChannelEventAssociations: CalendarChannelEventAssociationObjectMetadata[];
calendarChannelEventAssociations: Relation<
CalendarChannelEventAssociationObjectMetadata[]
>;
@FieldMetadata({
standardId: calendarEventStandardFieldIds.calendarEventParticipants,
@ -182,5 +186,5 @@ export class CalendarEventObjectMetadata extends BaseObjectMetadata {
inverseSideTarget: () => CalendarEventParticipantObjectMetadata,
onDelete: RelationOnDeleteAction.CASCADE,
})
calendarEventParticipants: CalendarEventParticipantObjectMetadata[];
calendarEventParticipants: Relation<CalendarEventParticipantObjectMetadata[]>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { CurrencyMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/currency.composite-type';
import { LinkMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/link.composite-type';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
@ -135,7 +137,7 @@ export class CompanyObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.SET_NULL,
})
@IsNullable()
people: PersonObjectMetadata[];
people: Relation<PersonObjectMetadata[]>;
@FieldMetadata({
standardId: companyStandardFieldIds.accountOwner,
@ -162,7 +164,7 @@ export class CompanyObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.CASCADE,
})
@IsNullable()
activityTargets: ActivityTargetObjectMetadata[];
activityTargets: Relation<ActivityTargetObjectMetadata[]>;
@FieldMetadata({
standardId: companyStandardFieldIds.opportunities,
@ -177,7 +179,7 @@ export class CompanyObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.SET_NULL,
})
@IsNullable()
opportunities: OpportunityObjectMetadata[];
opportunities: Relation<OpportunityObjectMetadata[]>;
@FieldMetadata({
standardId: companyStandardFieldIds.favorites,
@ -193,7 +195,7 @@ export class CompanyObjectMetadata extends BaseObjectMetadata {
})
@IsNullable()
@IsSystem()
favorites: FavoriteObjectMetadata[];
favorites: Relation<FavoriteObjectMetadata[]>;
@FieldMetadata({
standardId: companyStandardFieldIds.attachments,
@ -208,7 +210,7 @@ export class CompanyObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.CASCADE,
})
@IsNullable()
attachments: AttachmentObjectMetadata[];
attachments: Relation<AttachmentObjectMetadata[]>;
@FieldMetadata({
standardId: companyStandardFieldIds.events,
@ -224,5 +226,5 @@ export class CompanyObjectMetadata extends BaseObjectMetadata {
})
@IsNullable()
@IsSystem()
events: EventObjectMetadata[];
events: Relation<EventObjectMetadata[]>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { blocklistStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -34,5 +36,5 @@ export class BlocklistObjectMetadata extends BaseObjectMetadata {
icon: 'IconCircleUser',
joinColumn: 'workspaceMemberId',
})
workspaceMember: WorkspaceMemberObjectMetadata;
workspaceMember: Relation<WorkspaceMemberObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import {
@ -75,7 +77,7 @@ export class ConnectedAccountObjectMetadata extends BaseObjectMetadata {
icon: 'IconUserCircle',
joinColumn: 'accountOwnerId',
})
accountOwner: WorkspaceMemberObjectMetadata;
accountOwner: Relation<WorkspaceMemberObjectMetadata>;
@FieldMetadata({
standardId: connectedAccountStandardFieldIds.lastSyncHistoryId,
@ -108,7 +110,7 @@ export class ConnectedAccountObjectMetadata extends BaseObjectMetadata {
inverseSideTarget: () => MessageChannelObjectMetadata,
onDelete: RelationOnDeleteAction.CASCADE,
})
messageChannels: MessageChannelObjectMetadata[];
messageChannels: Relation<MessageChannelObjectMetadata[]>;
@FieldMetadata({
standardId: connectedAccountStandardFieldIds.calendarChannels,
@ -125,5 +127,5 @@ export class ConnectedAccountObjectMetadata extends BaseObjectMetadata {
@Gate({
featureFlag: FeatureFlagKeys.IsCalendarEnabled,
})
calendarChannels: CalendarChannelObjectMetadata[];
calendarChannels: Relation<CalendarChannelObjectMetadata[]>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { eventStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -53,7 +55,7 @@ export class EventObjectMetadata extends BaseObjectMetadata {
joinColumn: 'workspaceMemberId',
})
@IsNullable()
workspaceMember: WorkspaceMemberObjectMetadata;
workspaceMember: Relation<WorkspaceMemberObjectMetadata>;
@FieldMetadata({
standardId: eventStandardFieldIds.person,
@ -64,7 +66,7 @@ export class EventObjectMetadata extends BaseObjectMetadata {
joinColumn: 'personId',
})
@IsNullable()
person: PersonObjectMetadata;
person: Relation<PersonObjectMetadata>;
@FieldMetadata({
standardId: eventStandardFieldIds.company,
@ -75,7 +77,7 @@ export class EventObjectMetadata extends BaseObjectMetadata {
joinColumn: 'companyId',
})
@IsNullable()
company: CompanyObjectMetadata;
company: Relation<CompanyObjectMetadata>;
@FieldMetadata({
standardId: eventStandardFieldIds.opportunity,
@ -86,7 +88,7 @@ export class EventObjectMetadata extends BaseObjectMetadata {
joinColumn: 'opportunityId',
})
@IsNullable()
opportunity: OpportunityObjectMetadata;
opportunity: Relation<OpportunityObjectMetadata>;
@DynamicRelationFieldMetadata((oppositeObjectMetadata) => ({
standardId: eventStandardFieldIds.custom,
@ -96,5 +98,5 @@ export class EventObjectMetadata extends BaseObjectMetadata {
joinColumn: `${oppositeObjectMetadata.nameSingular}Id`,
icon: 'IconBuildingSkyscraper',
}))
custom: CustomObjectMetadata;
custom: Relation<CustomObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { favoriteStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -42,7 +44,7 @@ export class FavoriteObjectMetadata extends BaseObjectMetadata {
icon: 'IconCircleUser',
joinColumn: 'workspaceMemberId',
})
workspaceMember: WorkspaceMemberObjectMetadata;
workspaceMember: Relation<WorkspaceMemberObjectMetadata>;
@FieldMetadata({
standardId: favoriteStandardFieldIds.person,
@ -53,7 +55,7 @@ export class FavoriteObjectMetadata extends BaseObjectMetadata {
joinColumn: 'personId',
})
@IsNullable()
person: PersonObjectMetadata;
person: Relation<PersonObjectMetadata>;
@FieldMetadata({
standardId: favoriteStandardFieldIds.company,
@ -64,7 +66,7 @@ export class FavoriteObjectMetadata extends BaseObjectMetadata {
joinColumn: 'companyId',
})
@IsNullable()
company: CompanyObjectMetadata;
company: Relation<CompanyObjectMetadata>;
@FieldMetadata({
standardId: favoriteStandardFieldIds.opportunity,
@ -75,7 +77,7 @@ export class FavoriteObjectMetadata extends BaseObjectMetadata {
joinColumn: 'opportunityId',
})
@IsNullable()
opportunity: OpportunityObjectMetadata;
opportunity: Relation<OpportunityObjectMetadata>;
@DynamicRelationFieldMetadata((oppositeObjectMetadata) => ({
standardId: favoriteStandardFieldIds.custom,
@ -85,5 +87,5 @@ export class FavoriteObjectMetadata extends BaseObjectMetadata {
joinColumn: `${oppositeObjectMetadata.nameSingular}Id`,
icon: 'IconBuildingSkyscraper',
}))
custom: CustomObjectMetadata;
custom: Relation<CustomObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { messageChannelMessageAssociationStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -29,7 +31,7 @@ export class MessageChannelMessageAssociationObjectMetadata extends BaseObjectMe
joinColumn: 'messageChannelId',
})
@IsNullable()
messageChannel: MessageChannelObjectMetadata;
messageChannel: Relation<MessageChannelObjectMetadata>;
@FieldMetadata({
standardId: messageChannelMessageAssociationStandardFieldIds.message,
@ -40,7 +42,7 @@ export class MessageChannelMessageAssociationObjectMetadata extends BaseObjectMe
joinColumn: 'messageId',
})
@IsNullable()
message: MessageObjectMetadata;
message: Relation<MessageObjectMetadata>;
@FieldMetadata({
standardId:
@ -62,7 +64,7 @@ export class MessageChannelMessageAssociationObjectMetadata extends BaseObjectMe
joinColumn: 'messageThreadId',
})
@IsNullable()
messageThread: MessageThreadObjectMetadata;
messageThread: Relation<MessageThreadObjectMetadata>;
@FieldMetadata({
standardId:

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import {
RelationMetadataType,
@ -89,7 +91,7 @@ export class MessageChannelObjectMetadata extends BaseObjectMetadata {
icon: 'IconUserCircle',
joinColumn: 'connectedAccountId',
})
connectedAccount: ConnectedAccountObjectMetadata;
connectedAccount: Relation<ConnectedAccountObjectMetadata>;
@FieldMetadata({
standardId: messageChannelStandardFieldIds.type,
@ -139,7 +141,9 @@ export class MessageChannelObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.CASCADE,
})
@IsNullable()
messageChannelMessageAssociations: MessageChannelMessageAssociationObjectMetadata[];
messageChannelMessageAssociations: Relation<
MessageChannelMessageAssociationObjectMetadata[]
>;
@FieldMetadata({
standardId: messageChannelStandardFieldIds.syncCursor,

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { messageParticipantStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -28,7 +30,7 @@ export class MessageParticipantObjectMetadata extends BaseObjectMetadata {
icon: 'IconMessage',
joinColumn: 'messageId',
})
message: MessageObjectMetadata;
message: Relation<MessageObjectMetadata>;
@FieldMetadata({
standardId: messageParticipantStandardFieldIds.role,
@ -73,7 +75,7 @@ export class MessageParticipantObjectMetadata extends BaseObjectMetadata {
joinColumn: 'personId',
})
@IsNullable()
person: PersonObjectMetadata;
person: Relation<PersonObjectMetadata>;
@FieldMetadata({
standardId: messageParticipantStandardFieldIds.workspaceMember,
@ -84,5 +86,5 @@ export class MessageParticipantObjectMetadata extends BaseObjectMetadata {
joinColumn: 'workspaceMemberId',
})
@IsNullable()
workspaceMember: WorkspaceMemberObjectMetadata;
workspaceMember: Relation<WorkspaceMemberObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import {
RelationMetadataType,
@ -37,7 +39,7 @@ export class MessageThreadObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.CASCADE,
})
@IsNullable()
messages: MessageObjectMetadata[];
messages: Relation<MessageObjectMetadata[]>;
@FieldMetadata({
standardId: messageThreadStandardFieldIds.messageChannelMessageAssociations,
@ -52,5 +54,7 @@ export class MessageThreadObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.RESTRICT,
})
@IsNullable()
messageChannelMessageAssociations: MessageChannelMessageAssociationObjectMetadata[];
messageChannelMessageAssociations: Relation<
MessageChannelMessageAssociationObjectMetadata[]
>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import {
RelationMetadataType,
@ -43,7 +45,7 @@ export class MessageObjectMetadata extends BaseObjectMetadata {
joinColumn: 'messageThreadId',
})
@IsNullable()
messageThread: MessageThreadObjectMetadata;
messageThread: Relation<MessageThreadObjectMetadata>;
@FieldMetadata({
standardId: messageStandardFieldIds.direction,
@ -101,7 +103,7 @@ export class MessageObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.CASCADE,
})
@IsNullable()
messageParticipants: MessageParticipantObjectMetadata[];
messageParticipants: Relation<MessageParticipantObjectMetadata[]>;
@FieldMetadata({
standardId: messageStandardFieldIds.messageChannelMessageAssociations,
@ -116,5 +118,7 @@ export class MessageObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.CASCADE,
})
@IsNullable()
messageChannelMessageAssociations: MessageChannelMessageAssociationObjectMetadata[];
messageChannelMessageAssociations: Relation<
MessageChannelMessageAssociationObjectMetadata[]
>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { CurrencyMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/currency.composite-type';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import {
@ -109,7 +111,7 @@ export class OpportunityObjectMetadata extends BaseObjectMetadata {
joinColumn: 'pointOfContactId',
})
@IsNullable()
pointOfContact: PersonObjectMetadata;
pointOfContact: Relation<PersonObjectMetadata>;
@FieldMetadata({
standardId: opportunityStandardFieldIds.company,
@ -120,7 +122,7 @@ export class OpportunityObjectMetadata extends BaseObjectMetadata {
joinColumn: 'companyId',
})
@IsNullable()
company: CompanyObjectMetadata;
company: Relation<CompanyObjectMetadata>;
@FieldMetadata({
standardId: opportunityStandardFieldIds.favorites,
@ -136,7 +138,7 @@ export class OpportunityObjectMetadata extends BaseObjectMetadata {
})
@IsNullable()
@IsSystem()
favorites: FavoriteObjectMetadata[];
favorites: Relation<FavoriteObjectMetadata[]>;
@FieldMetadata({
standardId: opportunityStandardFieldIds.activityTargets,
@ -151,7 +153,7 @@ export class OpportunityObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.CASCADE,
})
@IsNullable()
activityTargets: ActivityTargetObjectMetadata[];
activityTargets: Relation<ActivityTargetObjectMetadata[]>;
@FieldMetadata({
standardId: opportunityStandardFieldIds.attachments,
@ -166,7 +168,7 @@ export class OpportunityObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.CASCADE,
})
@IsNullable()
attachments: AttachmentObjectMetadata[];
attachments: Relation<AttachmentObjectMetadata[]>;
@FieldMetadata({
standardId: opportunityStandardFieldIds.events,
@ -181,5 +183,5 @@ export class OpportunityObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.SET_NULL,
})
@IsNullable()
events: EventObjectMetadata[];
events: Relation<EventObjectMetadata[]>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FullNameMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/full-name.composite-type';
import { LinkMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/link.composite-type';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
@ -129,7 +131,7 @@ export class PersonObjectMetadata extends BaseObjectMetadata {
joinColumn: 'companyId',
})
@IsNullable()
company: CompanyObjectMetadata;
company: Relation<CompanyObjectMetadata>;
@FieldMetadata({
standardId: personStandardFieldIds.pointOfContactForOpportunities,
@ -144,7 +146,7 @@ export class PersonObjectMetadata extends BaseObjectMetadata {
inverseSideFieldKey: 'pointOfContact',
onDelete: RelationOnDeleteAction.SET_NULL,
})
pointOfContactForOpportunities: OpportunityObjectMetadata[];
pointOfContactForOpportunities: Relation<OpportunityObjectMetadata[]>;
@FieldMetadata({
standardId: personStandardFieldIds.activityTargets,
@ -158,7 +160,7 @@ export class PersonObjectMetadata extends BaseObjectMetadata {
inverseSideTarget: () => ActivityTargetObjectMetadata,
onDelete: RelationOnDeleteAction.CASCADE,
})
activityTargets: ActivityTargetObjectMetadata[];
activityTargets: Relation<ActivityTargetObjectMetadata[]>;
@FieldMetadata({
standardId: personStandardFieldIds.favorites,
@ -173,7 +175,7 @@ export class PersonObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.CASCADE,
})
@IsSystem()
favorites: FavoriteObjectMetadata[];
favorites: Relation<FavoriteObjectMetadata[]>;
@FieldMetadata({
standardId: personStandardFieldIds.attachments,
@ -187,7 +189,7 @@ export class PersonObjectMetadata extends BaseObjectMetadata {
inverseSideTarget: () => AttachmentObjectMetadata,
onDelete: RelationOnDeleteAction.CASCADE,
})
attachments: AttachmentObjectMetadata[];
attachments: Relation<AttachmentObjectMetadata[]>;
@FieldMetadata({
standardId: personStandardFieldIds.messageParticipants,
@ -203,7 +205,7 @@ export class PersonObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.SET_NULL,
})
@IsSystem()
messageParticipants: MessageParticipantObjectMetadata[];
messageParticipants: Relation<MessageParticipantObjectMetadata[]>;
@FieldMetadata({
standardId: personStandardFieldIds.calendarEventParticipants,
@ -221,7 +223,7 @@ export class PersonObjectMetadata extends BaseObjectMetadata {
featureFlag: 'IS_CALENDAR_ENABLED',
})
@IsSystem()
calendarEventParticipants: CalendarEventParticipantObjectMetadata[];
calendarEventParticipants: Relation<CalendarEventParticipantObjectMetadata[]>;
@FieldMetadata({
standardId: personStandardFieldIds.events,
@ -237,5 +239,5 @@ export class PersonObjectMetadata extends BaseObjectMetadata {
})
@IsNullable()
@IsSystem()
events: EventObjectMetadata[];
events: Relation<EventObjectMetadata[]>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { viewFilterStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -60,5 +62,5 @@ export class ViewFilterObjectMetadata extends BaseObjectMetadata {
joinColumn: 'viewId',
})
@IsNullable()
view: ViewObjectMetadata;
view: Relation<ViewObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { viewSortStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -45,5 +47,5 @@ export class ViewSortObjectMetadata extends BaseObjectMetadata {
joinColumn: 'viewId',
})
@IsNullable()
view: ViewObjectMetadata;
view: Relation<ViewObjectMetadata>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import {
RelationMetadataType,
@ -108,7 +110,7 @@ export class ViewObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.SET_NULL,
})
@IsNullable()
viewFields: ViewFieldObjectMetadata[];
viewFields: Relation<ViewFieldObjectMetadata[]>;
@FieldMetadata({
standardId: viewStandardFieldIds.viewFilters,
@ -123,7 +125,7 @@ export class ViewObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.SET_NULL,
})
@IsNullable()
viewFilters: ViewFilterObjectMetadata[];
viewFilters: Relation<ViewFilterObjectMetadata[]>;
@FieldMetadata({
standardId: viewStandardFieldIds.viewSorts,
@ -138,5 +140,5 @@ export class ViewObjectMetadata extends BaseObjectMetadata {
onDelete: RelationOnDeleteAction.SET_NULL,
})
@IsNullable()
viewSorts: ViewSortObjectMetadata[];
viewSorts: Relation<ViewSortObjectMetadata[]>;
}

View File

@ -1,3 +1,5 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FullNameMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/full-name.composite-type';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import {
@ -104,7 +106,7 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
inverseSideFieldKey: 'author',
onDelete: RelationOnDeleteAction.SET_NULL,
})
authoredActivities: ActivityObjectMetadata[];
authoredActivities: Relation<ActivityObjectMetadata[]>;
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.assignedActivities,
@ -119,7 +121,7 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
inverseSideFieldKey: 'assignee',
onDelete: RelationOnDeleteAction.SET_NULL,
})
assignedActivities: ActivityObjectMetadata[];
assignedActivities: Relation<ActivityObjectMetadata[]>;
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.favorites,
@ -133,7 +135,7 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
inverseSideTarget: () => FavoriteObjectMetadata,
onDelete: RelationOnDeleteAction.CASCADE,
})
favorites: FavoriteObjectMetadata[];
favorites: Relation<FavoriteObjectMetadata[]>;
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.accountOwnerForCompanies,
@ -148,7 +150,7 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
inverseSideFieldKey: 'accountOwner',
onDelete: RelationOnDeleteAction.SET_NULL,
})
accountOwnerForCompanies: CompanyObjectMetadata[];
accountOwnerForCompanies: Relation<CompanyObjectMetadata[]>;
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.authoredAttachments,
@ -163,7 +165,7 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
inverseSideFieldKey: 'author',
onDelete: RelationOnDeleteAction.SET_NULL,
})
authoredAttachments: AttachmentObjectMetadata[];
authoredAttachments: Relation<AttachmentObjectMetadata[]>;
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.authoredComments,
@ -178,7 +180,7 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
inverseSideFieldKey: 'author',
onDelete: RelationOnDeleteAction.SET_NULL,
})
authoredComments: CommentObjectMetadata[];
authoredComments: Relation<CommentObjectMetadata[]>;
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.connectedAccounts,
@ -193,7 +195,7 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
inverseSideFieldKey: 'accountOwner',
onDelete: RelationOnDeleteAction.CASCADE,
})
connectedAccounts: ConnectedAccountObjectMetadata[];
connectedAccounts: Relation<ConnectedAccountObjectMetadata[]>;
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.messageParticipants,
@ -208,7 +210,7 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
inverseSideFieldKey: 'workspaceMember',
onDelete: RelationOnDeleteAction.SET_NULL,
})
messageParticipants: MessageParticipantObjectMetadata[];
messageParticipants: Relation<MessageParticipantObjectMetadata[]>;
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.blocklist,
@ -223,7 +225,7 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
inverseSideFieldKey: 'workspaceMember',
onDelete: RelationOnDeleteAction.SET_NULL,
})
blocklist: BlocklistObjectMetadata[];
blocklist: Relation<BlocklistObjectMetadata[]>;
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.calendarEventParticipants,
@ -241,7 +243,7 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
@Gate({
featureFlag: 'IS_CALENDAR_ENABLED',
})
calendarEventParticipants: CalendarEventParticipantObjectMetadata[];
calendarEventParticipants: Relation<CalendarEventParticipantObjectMetadata[]>;
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.events,
@ -257,5 +259,5 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
})
@IsNullable()
@IsSystem()
events: EventObjectMetadata[];
events: Relation<EventObjectMetadata[]>;
}

View File

@ -20,10 +20,16 @@ export function generateFrontConfig(): void {
)};`;
const distPath = path.join(__dirname, '../..', 'front');
const filePath = path.join(distPath, 'env-config.js');
if (!fs.existsSync(distPath)) {
fs.mkdirSync(distPath, { recursive: true });
}
fs.writeFileSync(path.join(distPath, 'env-config.js'), configString, 'utf8');
if (
!fs.existsSync(filePath) ||
fs.readFileSync(filePath, 'utf8') !== configString
) {
fs.writeFileSync(filePath, configString, 'utf8');
}
}