[Content Management] Maps onboard (#153304)

This commit is contained in:
Sébastien Loix 2023-04-13 10:32:39 +01:00 committed by GitHub
parent 045b58fe5b
commit 42a893db40
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
61 changed files with 1094 additions and 300 deletions

View file

@ -64,52 +64,52 @@ export interface ServicesDefinition {
export interface ServiceTransforms {
get: {
in: {
options: ObjectTransforms;
options: ObjectTransforms<any, any, any, any>;
};
out: {
result: ObjectTransforms;
result: ObjectTransforms<any, any, any, any>;
};
};
bulkGet: {
in: {
options: ObjectTransforms;
options: ObjectTransforms<any, any, any, any>;
};
out: {
result: ObjectTransforms;
result: ObjectTransforms<any, any, any, any>;
};
};
create: {
in: {
data: ObjectTransforms;
options: ObjectTransforms;
data: ObjectTransforms<any, any, any, any>;
options: ObjectTransforms<any, any, any, any>;
};
out: {
result: ObjectTransforms;
result: ObjectTransforms<any, any, any, any>;
};
};
update: {
in: {
data: ObjectTransforms;
options: ObjectTransforms;
data: ObjectTransforms<any, any, any, any>;
options: ObjectTransforms<any, any, any, any>;
};
out: {
result: ObjectTransforms;
result: ObjectTransforms<any, any, any, any>;
};
};
delete: {
in: {
options: ObjectTransforms;
options: ObjectTransforms<any, any, any, any>;
};
out: {
result: ObjectTransforms;
result: ObjectTransforms<any, any, any, any>;
};
};
search: {
in: {
options: ObjectTransforms;
options: ObjectTransforms<any, any, any, any>;
};
out: {
result: ObjectTransforms;
result: ObjectTransforms<any, any, any, any>;
};
};
}

View file

@ -9,12 +9,7 @@
import { schema } from '@kbn/config-schema';
import { initTransform } from './object_transform';
import type {
ObjectMigrationDefinition,
ObjectTransforms,
Version,
VersionableObject,
} from './types';
import type { ObjectMigrationDefinition, Version, VersionableObject } from './types';
interface FooV1 {
fullName: string;
@ -58,7 +53,7 @@ const fooMigrationDef: ObjectMigrationDefinition = {
const setup = <UpIn = unknown, UpOut = unknown, DownIn = unknown, DownOut = unknown>(
browserVersion: Version
): ObjectTransforms<UpIn, UpOut, DownIn, DownOut> => {
) => {
const transformsFactory = initTransform<UpIn, UpOut, DownIn, DownOut>(browserVersion);
return transformsFactory(fooMigrationDef);
};

View file

@ -6,7 +6,7 @@
* Side Public License, v 1.
*/
import { ObjectMigrationDefinition, ObjectTransform, ObjectTransforms, Version } from './types';
import { ObjectMigrationDefinition, ObjectTransform, Version } from './types';
import { validateObj, validateVersion } from './utils';
/**
@ -97,11 +97,8 @@ const getTransformFns = <I = unknown, O = unknown>(
*/
export const initTransform =
<UpIn = unknown, UpOut = unknown, DownIn = unknown, DownOut = unknown>(requestVersion: Version) =>
(
migrationDefinition: ObjectMigrationDefinition
): ObjectTransforms<UpIn, UpOut, DownIn, DownOut> => {
(migrationDefinition: ObjectMigrationDefinition) => {
const { latestVersion } = getVersionsMeta(migrationDefinition);
const getVersion = (v: Version | 'latest'): Version => (v === 'latest' ? latestVersion : v);
const validateFn = (value: unknown, version: number = requestVersion) => {
@ -120,7 +117,11 @@ export const initTransform =
};
return {
up: (obj, to = 'latest', { validate = true }: { validate?: boolean } = {}) => {
up: <I = UpIn, O = UpOut>(
obj: I,
to: number | 'latest' = 'latest',
{ validate = true }: { validate?: boolean } = {}
) => {
try {
if (!migrationDefinition[requestVersion]) {
return {
@ -145,16 +146,12 @@ export const initTransform =
};
}
const fns = getTransformFns<UpIn, UpOut>(
requestVersion,
targetVersion,
migrationDefinition
);
const fns = getTransformFns<I, O>(requestVersion, targetVersion, migrationDefinition);
const value = fns.reduce((acc, fn) => {
const res = fn(acc as unknown as UpIn);
const res = fn(acc as unknown as I);
return res;
}, obj as unknown as UpOut);
}, obj as unknown as O);
return { value, error: null };
} catch (e) {
@ -164,7 +161,11 @@ export const initTransform =
};
}
},
down: (obj, from = 'latest', { validate = true }: { validate?: boolean } = {}) => {
down: <I = DownIn, O = DownOut>(
obj: I,
from: number | 'latest' = 'latest',
{ validate = true }: { validate?: boolean } = {}
) => {
try {
if (!migrationDefinition[requestVersion]) {
return {
@ -189,16 +190,12 @@ export const initTransform =
}
}
const fns = getTransformFns<DownIn, DownOut>(
fromVersion,
requestVersion,
migrationDefinition
);
const fns = getTransformFns<I, O>(fromVersion, requestVersion, migrationDefinition);
const value = fns.reduce((acc, fn) => {
const res = fn(acc as unknown as DownIn);
const res = fn(acc as unknown as I);
return res;
}, obj as unknown as DownOut);
}, obj as unknown as O);
return { value: value as any, error: null };
} catch (e) {

View file

@ -42,21 +42,21 @@ export interface ObjectTransforms<
DownIn = unknown,
DownOut = unknown
> {
up: (
obj: UpIn,
up: <I = UpIn, O = UpOut>(
obj: I,
version?: Version | 'latest',
options?: {
/** Validate the object _before_ up transform */
validate?: boolean;
}
) => TransformReturn<UpOut>;
down: (
) => TransformReturn<O>;
down: <I = DownIn, O = DownOut>(
obj: DownIn,
version?: Version | 'latest',
options?: {
/** Validate the object _before_ down transform */
validate?: boolean;
}
) => TransformReturn<DownOut>;
) => TransformReturn<O>;
validate: (obj: any, version?: Version) => ValidationError | null;
}