Multiple errors on field input transpilation improvement (#13774)

# Introduction
- ~~returning deleted field on deleteOneField~~ postponed for later
cannot build dto from flat atm
- refactor createFieldInput transpilation to handle multiple errors
instead of throwing
- renamed extract function
This commit is contained in:
Paul Rastoin
2025-08-08 16:24:47 +02:00
committed by GitHub
parent 7a90fb2c5f
commit 4523ee45bc
15 changed files with 255 additions and 163 deletions
@@ -1,5 +0,0 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow should throw when extracting twice the same object 1`] = `"addFlatObjectMetadataWithFlatFieldMapsToFlatObjectMetadataMapsOrThrow: flat object metadata with fields maps to add already exists"`;
exports[`extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow should throw when object metadata id is not found 1`] = `"extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow object metadata not found"`;
@@ -0,0 +1,5 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`getSubFlatObjectMetadataMapsOrThrow should throw when extracting twice the same object 1`] = `"addFlatObjectMetadataWithFlatFieldMapsToFlatObjectMetadataMapsOrThrow: flat object metadata with fields maps to add already exists"`;
exports[`getSubFlatObjectMetadataMapsOrThrow should throw when object metadata id is not found 1`] = `"getSubFlatObjectMetadataMapsOrThrow object metadata not found"`;
@@ -1,27 +1,27 @@
import { jestExpectToBeDefined } from 'test/utils/expect-to-be-defined.util.test';
import {
type EachTestingContext,
eachTestingContextFilter,
type EachTestingContext,
} from 'twenty-shared/testing';
import { FLAT_OBJECT_METADATA_MAPS_MOCKS } from 'src/engine/metadata-modules/flat-object-metadata-maps/mocks/flat-object-metadata-maps.mock';
import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
import {
type ExtractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrowArgs,
extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow,
} from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/extract-flat-object-metadata-maps-out-of-flat-object-metadata-maps-or-throw.util';
getSubFlatObjectMetadataMapsOrThrow,
type GetSubFlatObjectMetadataMapsOrThrowArgs,
} from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/get-sub-flat-object-metadata-maps-or-throw.util';
import { PET_FLAT_OBJECT_MOCK } from 'src/engine/metadata-modules/flat-object-metadata/__mocks__/pet-flat-object.mock';
import { ROCKET_FLAT_OBJECT_MOCK } from 'src/engine/metadata-modules/flat-object-metadata/__mocks__/rocket-flat-object.mock';
import { fromFlatObjectMetadatasToFlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata/utils/from-flat-object-metadatas-to-flat-object-metadata-maps.util';
type ExtractFlatObjectMetadataMapsTestCase = {
input: ExtractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrowArgs;
type GetSubObjectMetadataMapsOrThrowTestCase = {
input: GetSubFlatObjectMetadataMapsOrThrowArgs;
shouldThrow?: true;
expected?: FlatObjectMetadataMaps;
};
describe('extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow', () => {
const testCases: EachTestingContext<ExtractFlatObjectMetadataMapsTestCase>[] =
describe('getSubFlatObjectMetadataMapsOrThrow', () => {
const testCases: EachTestingContext<GetSubObjectMetadataMapsOrThrowTestCase>[] =
[
{
title: 'should throw when object metadata id is not found',
@@ -89,18 +89,17 @@ describe('extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow', () =
}) => {
if (shouldThrow) {
expect(() =>
extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow({
getSubFlatObjectMetadataMapsOrThrow({
objectMetadataIds,
flatObjectMetadataMaps,
}),
).toThrowErrorMatchingSnapshot();
} else {
jestExpectToBeDefined(expected);
const result =
extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow({
objectMetadataIds,
flatObjectMetadataMaps,
});
const result = getSubFlatObjectMetadataMapsOrThrow({
objectMetadataIds,
flatObjectMetadataMaps,
});
expect(result).toEqual(expected);
}
@@ -1,19 +1,19 @@
import {
type EachTestingContext,
eachTestingContextFilter,
type EachTestingContext,
} from 'twenty-shared/testing';
import { FLAT_OBJECT_METADATA_MAPS_MOCKS } from 'src/engine/metadata-modules/flat-object-metadata-maps/mocks/flat-object-metadata-maps.mock';
import { type ExtractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrowArgs } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/extract-flat-object-metadata-maps-out-of-flat-object-metadata-maps-or-throw.util';
import { extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/extract-flat-object-metadata-maps-out-of-flat-object-metadata-maps.util';
import { type GetSubFlatObjectMetadataMapsOrThrowArgs } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/get-sub-flat-object-metadata-maps-or-throw.util';
import { getSubFlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/get-sub-flat-object-metadata-maps.util';
import { PET_FLAT_OBJECT_MOCK } from 'src/engine/metadata-modules/flat-object-metadata/__mocks__/pet-flat-object.mock';
type ExtractFlatObjectMetadataMapsTestCase = {
input: ExtractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrowArgs;
type GetSubFlatObjectMetadataMapsTestCase = {
input: GetSubFlatObjectMetadataMapsOrThrowArgs;
};
describe('extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMaps', () => {
const testCases: EachTestingContext<ExtractFlatObjectMetadataMapsTestCase>[] =
describe('getSubFlatObjectMetadataMaps', () => {
const testCases: EachTestingContext<GetSubFlatObjectMetadataMapsTestCase>[] =
[
{
title: 'should throw when object metadata id is not found',
@@ -47,7 +47,7 @@ describe('extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMaps', () => {
input: { objectMetadataIds, flatObjectMetadataMaps },
},
}) => {
const result = extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMaps({
const result = getSubFlatObjectMetadataMaps({
objectMetadataIds,
flatObjectMetadataMaps,
});
@@ -1,42 +0,0 @@
import { isDefined } from 'twenty-shared/utils';
import { EMPTY_FLAT_OBJECT_METADATA_MAPS } from 'src/engine/metadata-modules/flat-object-metadata-maps/constant/empty-flat-object-metadata-maps.constant';
import {
FlatObjectMetadataMapsException,
FlatObjectMetadataMapsExceptionCode,
} from 'src/engine/metadata-modules/flat-object-metadata-maps/flat-object-metadata-maps.exception';
import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
import { addFlatObjectMetadataWithFlatFieldMapsToFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/add-flat-object-metadata-with-field-maps-to-flat-object-metadata-maps-or-throw.util';
export type ExtractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrowArgs =
{
objectMetadataIds: string[];
flatObjectMetadataMaps: FlatObjectMetadataMaps;
};
export const extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow =
({
flatObjectMetadataMaps: sourceFlatObjectMetadataMaps,
objectMetadataIds,
}: ExtractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrowArgs): FlatObjectMetadataMaps => {
return objectMetadataIds.reduce(
(flatObjectMetadataMaps, objectMetadataId) => {
const flatObjectMetadataWithFlatFieldMaps =
sourceFlatObjectMetadataMaps.byId[objectMetadataId];
if (!isDefined(flatObjectMetadataWithFlatFieldMaps)) {
throw new FlatObjectMetadataMapsException(
'extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow object metadata not found',
FlatObjectMetadataMapsExceptionCode.OBJECT_METADATA_NOT_FOUND,
);
}
return addFlatObjectMetadataWithFlatFieldMapsToFlatObjectMetadataMapsOrThrow(
{
flatObjectMetadataMaps,
flatObjectMetadataWithFlatFieldMaps,
},
);
},
EMPTY_FLAT_OBJECT_METADATA_MAPS,
);
};
@@ -1,17 +0,0 @@
import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
import {
type ExtractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrowArgs,
extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow,
} from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/extract-flat-object-metadata-maps-out-of-flat-object-metadata-maps-or-throw.util';
export const extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMaps = (
args: ExtractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrowArgs,
): FlatObjectMetadataMaps | undefined => {
try {
return extractFlatObjectMetadataMapsOutOfFlatObjectMetadataMapsOrThrow(
args,
);
} catch {
return undefined;
}
};
@@ -0,0 +1,40 @@
import { isDefined } from 'twenty-shared/utils';
import { EMPTY_FLAT_OBJECT_METADATA_MAPS } from 'src/engine/metadata-modules/flat-object-metadata-maps/constant/empty-flat-object-metadata-maps.constant';
import {
FlatObjectMetadataMapsException,
FlatObjectMetadataMapsExceptionCode,
} from 'src/engine/metadata-modules/flat-object-metadata-maps/flat-object-metadata-maps.exception';
import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
import { addFlatObjectMetadataWithFlatFieldMapsToFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/add-flat-object-metadata-with-field-maps-to-flat-object-metadata-maps-or-throw.util';
export type GetSubFlatObjectMetadataMapsOrThrowArgs = {
objectMetadataIds: string[];
flatObjectMetadataMaps: FlatObjectMetadataMaps;
};
export const getSubFlatObjectMetadataMapsOrThrow = ({
flatObjectMetadataMaps: sourceFlatObjectMetadataMaps,
objectMetadataIds,
}: GetSubFlatObjectMetadataMapsOrThrowArgs): FlatObjectMetadataMaps => {
return objectMetadataIds.reduce(
(flatObjectMetadataMaps, objectMetadataId) => {
const flatObjectMetadataWithFlatFieldMaps =
sourceFlatObjectMetadataMaps.byId[objectMetadataId];
if (!isDefined(flatObjectMetadataWithFlatFieldMaps)) {
throw new FlatObjectMetadataMapsException(
'getSubFlatObjectMetadataMapsOrThrow object metadata not found',
FlatObjectMetadataMapsExceptionCode.OBJECT_METADATA_NOT_FOUND,
);
}
return addFlatObjectMetadataWithFlatFieldMapsToFlatObjectMetadataMapsOrThrow(
{
flatObjectMetadataMaps,
flatObjectMetadataWithFlatFieldMaps,
},
);
},
EMPTY_FLAT_OBJECT_METADATA_MAPS,
);
};
@@ -0,0 +1,15 @@
import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
import {
getSubFlatObjectMetadataMapsOrThrow,
type GetSubFlatObjectMetadataMapsOrThrowArgs,
} from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/get-sub-flat-object-metadata-maps-or-throw.util';
export const getSubFlatObjectMetadataMaps = (
args: GetSubFlatObjectMetadataMapsOrThrowArgs,
): FlatObjectMetadataMaps | undefined => {
try {
return getSubFlatObjectMetadataMapsOrThrow(args);
} catch {
return undefined;
}
};