Add namespaceType to SavedObjectModelTransformationContext (#168489)

## Summary

Required for https://github.com/elastic/kibana/issues/161002

Add `namespaceType` to the SO migration context that is passed down to
MV transformation functions

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Pierre Gayvallet 2023-10-11 12:21:15 +02:00 committed by GitHub
parent 2df247a75b
commit 3afef435de
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 22 additions and 33 deletions

View file

@ -22,6 +22,7 @@ describe('buildModelVersionTransformFn', () => {
const createContext = (): SavedObjectModelTransformationContext => ({
log: loggerMock.create(),
modelVersion: 42,
namespaceType: 'single',
});
const createDoc = <T = any>(attributes: T = {} as T): SavedObjectModelTransformationDoc<T> => ({

View file

@ -112,6 +112,7 @@ describe('convertModelVersionTransformFn', () => {
};
it('generates a transform function calling the model transform', () => {
const typeDefinition = createType({});
const upTransform = createModelTransformFn();
const definition: SavedObjectsModelVersion = {
@ -127,13 +128,14 @@ describe('convertModelVersionTransformFn', () => {
log,
modelVersion: 1,
virtualVersion: '10.1.0',
definition,
modelVersionDefinition: definition,
typeDefinition,
});
expect(upTransform).not.toHaveBeenCalled();
const doc = createDoc();
const context = { log, modelVersion: 1 };
const context = { log, modelVersion: 1, namespaceType: typeDefinition.namespaceType };
transform(doc);
@ -142,6 +144,7 @@ describe('convertModelVersionTransformFn', () => {
});
it('generates a transform function calling all model transforms of the version', () => {
const typeDefinition = createType({});
const upTransform1 = createModelTransformFn();
const upTransform2 = createModelTransformFn();
@ -162,11 +165,12 @@ describe('convertModelVersionTransformFn', () => {
log,
modelVersion: 1,
virtualVersion: '10.1.0',
definition,
typeDefinition,
modelVersionDefinition: definition,
});
const doc = createDoc();
const context = { log, modelVersion: 1 };
const context = { log, modelVersion: 1, namespaceType: typeDefinition.namespaceType };
transform(doc);

View file

@ -61,10 +61,11 @@ export const getModelVersionTransforms = ({
return {
version: virtualVersion,
transform: convertModelVersionTransformFn({
typeDefinition,
log,
modelVersion,
virtualVersion,
definition,
modelVersionDefinition: definition,
}),
transformType: TransformType.Migrate,
};
@ -72,21 +73,24 @@ export const getModelVersionTransforms = ({
};
export const convertModelVersionTransformFn = ({
typeDefinition,
virtualVersion,
modelVersion,
definition,
modelVersionDefinition,
log,
}: {
typeDefinition: SavedObjectsType;
virtualVersion: string;
modelVersion: number;
definition: SavedObjectsModelVersion;
modelVersionDefinition: SavedObjectsModelVersion;
log: Logger;
}): TransformFn => {
const context: SavedObjectModelTransformationContext = {
log,
modelVersion,
namespaceType: typeDefinition.namespaceType,
};
const modelTransformFn = buildModelVersionTransformFn(definition.changes);
const modelTransformFn = buildModelVersionTransformFn(modelVersionDefinition.changes);
return function convertedTransform(doc: SavedObjectUnsanitizedDoc) {
try {

View file

@ -133,7 +133,6 @@ export type {
SavedObjectModelTransformationDoc,
SavedObjectModelTransformationContext,
SavedObjectModelTransformationFn,
SavedObjectModelBidirectionalTransformation,
SavedObjectModelTransformationResult,
SavedObjectModelDataBackfillFn,
SavedObjectModelDataBackfillResult,

View file

@ -25,7 +25,6 @@ export type {
SavedObjectModelTransformationDoc,
SavedObjectModelTransformationContext,
SavedObjectModelTransformationFn,
SavedObjectModelBidirectionalTransformation,
SavedObjectModelTransformationResult,
SavedObjectModelDataBackfillFn,
SavedObjectModelDataBackfillResult,

View file

@ -6,6 +6,7 @@
* Side Public License, v 1.
*/
import type { SavedObjectsNamespaceType } from '@kbn/core-saved-objects-common';
import type { SavedObjectUnsanitizedDoc } from '../serialization';
import type { SavedObjectsMigrationLogger } from '../migration';
@ -30,6 +31,10 @@ export interface SavedObjectModelTransformationContext {
* The model version this migration is registered for
*/
readonly modelVersion: number;
/**
* The namespace type of the savedObject type this migration is registered for
*/
readonly namespaceType: SavedObjectsNamespaceType;
}
/**
@ -57,29 +62,6 @@ export type SavedObjectModelTransformationFn<
context: SavedObjectModelTransformationContext
) => SavedObjectModelTransformationResult<OutputAttributes>;
/**
* A bidirectional transformation.
*
* Bidirectional transformations define migration functions that can be used to
* transform a document from the lower version to the higher one (`up`), and
* the other way around, from the higher version to the lower one (`down`)
*
* @public
*/
export interface SavedObjectModelBidirectionalTransformation<
PreviousAttributes = unknown,
NewAttributes = unknown
> {
/**
* The upward (previous=>next) transformation.
*/
up: SavedObjectModelTransformationFn<PreviousAttributes, NewAttributes>;
/**
* The downward (next=>previous) transformation.
*/
down: SavedObjectModelTransformationFn<NewAttributes, PreviousAttributes>;
}
/**
* Return type for the {@link SavedObjectModelTransformationFn | transformation functions}
*