@finos/legend-extension-dsl-data-space-studio
Version:
Legend extension for Data Space DSL - Studio
153 lines • 7.81 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 { DataSpaceSupportEmail, DataSpaceSupportCombinedInfo, DataSpacePackageableElementExecutable, DataSpaceExecutableTemplate, } from '@finos/legend-extension-dsl-data-space/graph';
import { DataProduct, InternalDataProductType, DataProductDiagram, DataProductElementScope, SupportInfo, DataProductLink, Email, observe_DataProduct, InLineSampleQuery, NativeModelAccess, NativeModelExecutionContext, PackageableElementSampleQuery, } from '@finos/legend-graph';
import { guaranteeNonNullable, UnsupportedOperationError, } from '@finos/legend-shared';
export var DATA_PRODUCT_SUPPORT_TYPE;
(function (DATA_PRODUCT_SUPPORT_TYPE) {
DATA_PRODUCT_SUPPORT_TYPE["DOCUMENTATION"] = "Documentation";
DATA_PRODUCT_SUPPORT_TYPE["SUPPORT"] = "Support";
DATA_PRODUCT_SUPPORT_TYPE["WEBSITE"] = "Website";
DATA_PRODUCT_SUPPORT_TYPE["FAQ"] = "FAQ";
})(DATA_PRODUCT_SUPPORT_TYPE || (DATA_PRODUCT_SUPPORT_TYPE = {}));
export const DATA_PRODUCT_DEFAULT_TITLE = 'DataProduct Auto Generated title: Please update';
export const DATA_PRODUCT_DEFAULT_DESCRIPTION_PREFIX = 'Migrated using studio converter from dataspace: ';
export const DATA_PRODUCT_NATIVE_MODEL_ACCESS_SAMPLE_QUERY_ID_PREFIX = 'DATA_PRODUCT_NATIVE_MODEL_ACCESS_SAMPLE_QUERY_ID';
const convertDataSpaceToDiagrams = (dataSpace) => {
if (!dataSpace.diagrams) {
return [];
}
return dataSpace.diagrams.map((dataSpaceDiagram) => {
const dataProductDiagram = new DataProductDiagram();
dataProductDiagram.title = dataSpaceDiagram.title;
dataProductDiagram.description = dataSpaceDiagram.description;
dataProductDiagram.diagram = dataSpaceDiagram.diagram.value;
return dataProductDiagram;
});
};
const convertDataSpaceToFeaturedElements = (dataSpace) => {
if (dataSpace.elements) {
const featuredElements = dataSpace.elements.map((element) => {
const scope = new DataProductElementScope();
scope.element = element.element;
scope.exclude = element.exclude;
return scope;
});
return featuredElements;
}
return [];
};
const convertDataSpaceToSupportInfo = (dataSpace) => {
if (!dataSpace.supportInfo) {
return undefined;
}
const supportInfo = new SupportInfo();
if (dataSpace.supportInfo.documentationUrl) {
supportInfo.documentation = new DataProductLink(dataSpace.supportInfo.documentationUrl, DATA_PRODUCT_SUPPORT_TYPE.DOCUMENTATION);
}
if (dataSpace.supportInfo instanceof DataSpaceSupportEmail) {
supportInfo.emails = [
new Email(dataSpace.supportInfo.address, DATA_PRODUCT_SUPPORT_TYPE.SUPPORT),
];
}
else if (dataSpace.supportInfo instanceof DataSpaceSupportCombinedInfo) {
if (dataSpace.supportInfo.emails) {
supportInfo.emails = dataSpace.supportInfo.emails.map((email) => new Email(email, DATA_PRODUCT_SUPPORT_TYPE.SUPPORT));
}
if (dataSpace.supportInfo.website) {
supportInfo.website = new DataProductLink(dataSpace.supportInfo.website, DATA_PRODUCT_SUPPORT_TYPE.WEBSITE);
}
if (dataSpace.supportInfo.faqUrl) {
supportInfo.faqUrl = new DataProductLink(dataSpace.supportInfo.faqUrl, DATA_PRODUCT_SUPPORT_TYPE.FAQ);
}
if (dataSpace.supportInfo.supportUrl) {
supportInfo.supportUrl = new DataProductLink(dataSpace.supportInfo.supportUrl, DATA_PRODUCT_SUPPORT_TYPE.SUPPORT);
}
}
return supportInfo;
};
const convertDataSpaceExecutablesToSampleQueries = (dataSpace) => {
if (!dataSpace.executables) {
return [];
}
let idCounter = 0;
return dataSpace.executables.map((executable) => {
let sampleQuery;
if (executable instanceof DataSpacePackageableElementExecutable) {
const packageableElementSampleQuery = new PackageableElementSampleQuery();
packageableElementSampleQuery.query = executable.executable;
sampleQuery = packageableElementSampleQuery;
}
else if (executable instanceof DataSpaceExecutableTemplate) {
const inLineSampleQuery = new InLineSampleQuery();
inLineSampleQuery.query = executable.query;
sampleQuery = inLineSampleQuery;
}
else {
throw new UnsupportedOperationError(`Can't convert to DataProduct nativeModelAccess sample query: Unsupported DataSpace executable`);
}
sampleQuery.description = executable.description;
sampleQuery.executionContextKey =
executable.executionContextKey ?? dataSpace.defaultExecutionContext.name;
sampleQuery.title = executable.title;
if (executable.id) {
sampleQuery.id = executable.id;
}
else {
sampleQuery.id = `${DATA_PRODUCT_NATIVE_MODEL_ACCESS_SAMPLE_QUERY_ID_PREFIX}_${idCounter}`;
idCounter++;
}
return sampleQuery;
});
};
const convertDataSpaceExecutionContextsToNativeModelExecutionContexts = (dataSpace, owner) => {
return dataSpace.executionContexts.map((context) => {
const nativeModelExecutionContext = new NativeModelExecutionContext();
nativeModelExecutionContext.key = context.name;
nativeModelExecutionContext.mapping = context.mapping;
nativeModelExecutionContext.runtime = context.defaultRuntime;
nativeModelExecutionContext.__owner = owner;
return nativeModelExecutionContext;
});
};
const convertDataSpaceToNativeModelAccess = (dataSpace) => {
const nativeModelAccess = new NativeModelAccess();
nativeModelAccess.featuredElements =
convertDataSpaceToFeaturedElements(dataSpace);
nativeModelAccess.diagrams = convertDataSpaceToDiagrams(dataSpace);
nativeModelAccess.nativeModelExecutionContexts =
convertDataSpaceExecutionContextsToNativeModelExecutionContexts(dataSpace, nativeModelAccess);
nativeModelAccess.defaultExecutionContext = guaranteeNonNullable(nativeModelAccess.nativeModelExecutionContexts.find((e) => e.key === dataSpace.defaultExecutionContext.name), `Unable to resolve default execution context '${dataSpace.defaultExecutionContext.name}' from nativeModelExecutionContexts`);
nativeModelAccess.sampleQueries =
convertDataSpaceExecutablesToSampleQueries(dataSpace);
return nativeModelAccess;
};
export const convertDataSpaceToDataProduct = (dataSpace) => {
const name = dataSpace.name.replace(/dataspace/i, 'DataProduct');
const dataProduct = new DataProduct(name);
dataProduct.stereotypes = [...dataSpace.stereotypes];
dataProduct.taggedValues = [...dataSpace.taggedValues];
dataProduct.title = dataSpace.title ?? DATA_PRODUCT_DEFAULT_TITLE;
dataProduct.description =
dataSpace.description ??
`${DATA_PRODUCT_DEFAULT_DESCRIPTION_PREFIX}${dataSpace.path}`;
dataProduct.nativeModelAccess =
convertDataSpaceToNativeModelAccess(dataSpace);
dataProduct.supportInfo = convertDataSpaceToSupportInfo(dataSpace);
dataProduct.type = new InternalDataProductType();
return observe_DataProduct(dataProduct);
};
//# sourceMappingURL=DataSpaceToDataProductConverter.js.map