@finos/legend-graph
Version:
Legend graph and graph manager
123 lines • 6.46 kB
JavaScript
/**
* Copyright (c) 2020-present, Goldman Sachs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { createModelSchema, primitive, list, custom, serialize, deserialize, object, } from 'serializr';
import { usingConstantValueSchema, UnsupportedOperationError, usingModelSchema, } from '@finos/legend-shared';
import { V1_packageableElementPointerModelSchema } from '../../../transformation/pureProtocol/serializationHelpers/V1_CoreSerializationHelper.js';
import { V1_PackageableRuntime } from '../../../model/packageableElements/runtime/V1_PackageableRuntime.js';
import { V1_EngineRuntime, V1_IdentifiedConnection, V1_LegacyRuntime, V1_RuntimePointer, V1_StoreConnections, V1_ConnectionStores, V1_SingleConnectionEngineRuntime, V1_LakehouseRuntime, } from '../../../model/packageableElements/runtime/V1_Runtime.js';
import { V1_serializeConnectionValue, V1_deserializeConnectionValue, V1_connectionPointerModelSchema, } from './V1_ConnectionSerializationHelper.js';
export const V1_PACKAGEABLE_RUNTIME_ELEMENT_PROTOCOL_TYPE = 'runtime';
export var V1_RuntimeType;
(function (V1_RuntimeType) {
V1_RuntimeType["RUNTIME_POINTER"] = "runtimePointer";
V1_RuntimeType["LEGACY_RUNTIME"] = "legacyRuntime";
V1_RuntimeType["ENGINE_RUNTIME"] = "engineRuntime";
V1_RuntimeType["SINGLE_ENGINE_RUNTIME"] = "localEngineRuntime";
V1_RuntimeType["LAKEHOUSE_RUNTIME"] = "LakeRuntime";
})(V1_RuntimeType || (V1_RuntimeType = {}));
export const V1_runtimePointerModelSchema = createModelSchema(V1_RuntimePointer, {
_type: usingConstantValueSchema(V1_RuntimeType.RUNTIME_POINTER),
runtime: primitive(),
});
export const V1_setupLegacyRuntimeSerialization = (plugins) => {
createModelSchema(V1_LegacyRuntime, {
_type: usingConstantValueSchema(V1_RuntimeType.LEGACY_RUNTIME),
connections: list(custom((val) => V1_serializeConnectionValue(val, true, plugins), (val) => V1_deserializeConnectionValue(val, true, plugins))),
mappings: list(usingModelSchema(V1_packageableElementPointerModelSchema)),
});
};
export const V1_setupEngineRuntimeSerialization = (plugins) => {
createModelSchema(V1_IdentifiedConnection, {
connection: custom((val) => V1_serializeConnectionValue(val, true, plugins), (val) => V1_deserializeConnectionValue(val, true, plugins)),
id: primitive(),
});
createModelSchema(V1_ConnectionStores, {
connectionPointer: usingModelSchema(V1_connectionPointerModelSchema),
storePointers: list(usingModelSchema(V1_packageableElementPointerModelSchema)),
});
createModelSchema(V1_StoreConnections, {
store: usingModelSchema(V1_packageableElementPointerModelSchema),
storeConnections: list(object(V1_IdentifiedConnection)),
});
createModelSchema(V1_EngineRuntime, {
_type: usingConstantValueSchema(V1_RuntimeType.ENGINE_RUNTIME),
connectionStores: list(object(V1_ConnectionStores)),
connections: list(object(V1_StoreConnections)),
mappings: list(usingModelSchema(V1_packageableElementPointerModelSchema)),
});
createModelSchema(V1_SingleConnectionEngineRuntime, {
_type: usingConstantValueSchema(V1_RuntimeType.SINGLE_ENGINE_RUNTIME),
connectionStores: list(object(V1_ConnectionStores)),
connections: list(object(V1_StoreConnections)),
mappings: list(usingModelSchema(V1_packageableElementPointerModelSchema)),
});
createModelSchema(V1_LakehouseRuntime, {
_type: usingConstantValueSchema(V1_RuntimeType.LAKEHOUSE_RUNTIME),
connectionStores: list(object(V1_ConnectionStores)),
connections: list(object(V1_StoreConnections)),
mappings: list(usingModelSchema(V1_packageableElementPointerModelSchema)),
ingestEnv: primitive(),
warehouse: primitive(),
});
};
export const V1_serializeRuntime = (protocol) => {
if (protocol instanceof V1_EngineRuntime) {
return serialize(V1_EngineRuntime, protocol);
}
else if (protocol instanceof V1_RuntimePointer) {
return serialize(V1_runtimePointerModelSchema, protocol);
}
// NOTE: we don't want to serialize legacy runtime as we no longer want to circulate it any further
throw new UnsupportedOperationError(`Can't serialize runtime`, protocol);
};
export const V1_deserializeRuntime = (json) => {
switch (json._type) {
case V1_RuntimeType.RUNTIME_POINTER:
return deserialize(V1_runtimePointerModelSchema, json);
case V1_RuntimeType.ENGINE_RUNTIME:
return deserialize(V1_EngineRuntime, json);
case V1_RuntimeType.LEGACY_RUNTIME:
case undefined:
return deserialize(V1_LegacyRuntime, json);
default:
throw new UnsupportedOperationError(`Can't deeserialize runtime of type '${json._type}'`);
}
};
export const V1_serializeRuntimeValue = (protocol) => {
if (protocol instanceof V1_SingleConnectionEngineRuntime) {
return serialize(V1_SingleConnectionEngineRuntime, protocol);
}
else if (protocol instanceof V1_LakehouseRuntime) {
return serialize(V1_LakehouseRuntime, protocol);
}
return serialize(V1_EngineRuntime, protocol);
};
export const V1_deserializeRuntimeValue = (json) => {
if (json._type === V1_RuntimeType.SINGLE_ENGINE_RUNTIME) {
return deserialize(V1_SingleConnectionEngineRuntime, json);
}
else if (json._type === V1_RuntimeType.LAKEHOUSE_RUNTIME) {
return deserialize(V1_LakehouseRuntime, json);
}
return deserialize(V1_EngineRuntime, json);
};
export const V1_packageableRuntimeModelSchema = createModelSchema(V1_PackageableRuntime, {
_type: usingConstantValueSchema(V1_PACKAGEABLE_RUNTIME_ELEMENT_PROTOCOL_TYPE),
name: primitive(),
package: primitive(),
runtimeValue: custom((val) => V1_serializeRuntimeValue(val), (val) => V1_deserializeRuntimeValue(val)),
});
//# sourceMappingURL=V1_RuntimeSerializationHelper.js.map