[REQUIRES_CACHE_FLUSH_FOR_FIELD_AND_OBJECT]FlatFieldMetadata and FlatObjectMetadata required universal (#17557)

# Introduction
In this PR we're migrating both the `field` and `object` metadata to be
using the new `FlatEntityFromV2` that requires all the
`UniversalFlatEntityExtraProperties` to be spread at the flat entity
root.

This means that we have to update all of their flat declaration

This type swap allows to isole a specific entity migration into his own
type scope and avoid to have everything handled at once

```ts
/**
 * Currently under migration but aims to replace FlatEntity afterwards
 */
export type FlatEntityFromV2<
  TEntity,
  TMetadataName extends AllMetadataName | undefined = undefined,
  TInnerFlatEntity extends { __universal?: unknown } = FlatEntityFrom<
    TEntity,
    TMetadataName
  >,
> = Omit<TInnerFlatEntity, '__universal'> & TInnerFlatEntity['__universal'];

```

## Impact
Both object and field:
- Create input transpilation utils
- from entity to flat tools
- mocks

## Note
Removed from the universal extra properties the jsonb properties that do
not contain a serialized

## Next
Next step is to incrementally make the builder and runner expect
`UniversalFlatEntity` for both of these metadata
This way we will be able to fully migrate an entity e2e typesafely
This commit is contained in:
Paul Rastoin
2026-01-29 19:11:19 +01:00
committed by GitHub
parent e91457a47e
commit fbbd8fe967
69 changed files with 1244 additions and 498 deletions
@@ -10,6 +10,11 @@ export const getFlatObjectMetadataMock = (
overrides: FlatObjectMetadataOverrides,
): FlatObjectMetadata => {
const createdAt = '2024-01-01T00:00:00.000Z';
const applicationId = overrides.applicationId ?? faker.string.uuid();
const labelIdentifierFieldMetadataId =
overrides.labelIdentifierFieldMetadataId ?? faker.string.uuid();
const imageIdentifierFieldMetadataId =
overrides.imageIdentifierFieldMetadataId ?? faker.string.uuid();
return {
viewIds: [],
@@ -18,7 +23,7 @@ export const getFlatObjectMetadataMock = (
description: 'default flat object metadata description',
icon: 'icon',
id: faker.string.uuid(),
imageIdentifierFieldMetadataId: faker.string.uuid(),
imageIdentifierFieldMetadataId,
isActive: true,
isAuditLogged: true,
isCustom: true,
@@ -27,20 +32,28 @@ export const getFlatObjectMetadataMock = (
isSearchable: true,
isSystem: false,
isUIReadOnly: false,
labelIdentifierFieldMetadataId: faker.string.uuid(),
labelIdentifierFieldMetadataId,
labelPlural: 'default flat object metadata label plural',
labelSingular: 'default flat object metadata label singular',
namePlural: 'defaultflatObjectMetadataNamePlural',
nameSingular: 'defaultflatObjectMetadataNameSingular',
shortcut: 'shortcut',
standardId: null,
applicationId: faker.string.uuid(),
applicationId,
standardOverrides: null,
targetTableName: '',
workspaceId: faker.string.uuid(),
createdAt,
updatedAt: createdAt,
duplicateCriteria: null,
applicationUniversalIdentifier: applicationId,
fieldUniversalIdentifiers: [],
viewUniversalIdentifiers: [],
indexMetadataUniversalIdentifiers: [],
labelIdentifierFieldMetadataUniversalIdentifier:
labelIdentifierFieldMetadataId,
imageIdentifierFieldMetadataUniversalIdentifier:
imageIdentifierFieldMetadataId,
...overrides,
};
};