/** * 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 { type LogService } from '@finos/legend-shared'; import type { PackageableElement } from '../../../../../../../graph/metamodel/pure/packageableElements/PackageableElement.js'; import type { PureModel } from '../../../../../../../graph/PureModel.js'; import type { Package } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/Package.js'; import { type Section } from '../../../../../../../graph/metamodel/pure/packageableElements/section/Section.js'; import { StereotypeImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/StereotypeReference.js'; import { GenericTypeImplicitReference, type GenericTypeReference } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/GenericTypeReference.js'; import type { Type } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/Type.js'; import type { Class } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/Class.js'; import type { Enumeration } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/Enumeration.js'; import type { Association } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/Association.js'; import type { Mapping } from '../../../../../../../graph/metamodel/pure/packageableElements/mapping/Mapping.js'; import type { Profile } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/Profile.js'; import type { ConcreteFunctionDefinition } from '../../../../../../../graph/metamodel/pure/packageableElements/function/ConcreteFunctionDefinition.js'; import type { Store } from '../../../../../../../graph/metamodel/pure/packageableElements/store/Store.js'; import type { Service } from '../../../../../../../graph/metamodel/pure/packageableElements/service/Service.js'; import type { FlatData } from '../../../../../../../graph/metamodel/pure/packageableElements/store/flatData/model/FlatData.js'; import type { Database, INTERNAL__LakehouseGeneratedDatabase } from '../../../../../../../graph/metamodel/pure/packageableElements/store/relational/model/Database.js'; import type { PackageableConnection } from '../../../../../../../graph/metamodel/pure/packageableElements/connection/PackageableConnection.js'; import type { PackageableRuntime } from '../../../../../../../graph/metamodel/pure/packageableElements/runtime/PackageableRuntime.js'; import type { FileGenerationSpecification } from '../../../../../../../graph/metamodel/pure/packageableElements/fileGeneration/FileGenerationSpecification.js'; import type { GenerationSpecification } from '../../../../../../../graph/metamodel/pure/packageableElements/generationSpecification/GenerationSpecification.js'; import type { Measure, Unit } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/Measure.js'; import { PackageableElementImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/PackageableElementReference.js'; import { TagImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/TagReference.js'; import { PropertyImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/PropertyReference.js'; import { JoinImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/store/relational/model/JoinReference.js'; import { FilterImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/store/relational/model/FilterReference.js'; import { RootFlatDataRecordTypeImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/store/flatData/model/RootFlatDataRecordTypeReference.js'; import type { ViewImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/store/relational/model/ViewReference.js'; import type { TableImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/store/relational/model/TableReference.js'; import { EnumValueImplicitReference } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/EnumValueReference.js'; import type { V1_StereotypePtr } from '../../../model/packageableElements/domain/V1_StereotypePtr.js'; import type { V1_PackageableElement } from '../../../model/packageableElements/V1_PackageableElement.js'; import type { V1_TagPtr } from '../../../model/packageableElements/domain/V1_TagPtr.js'; import type { V1_PropertyPointer } from '../../../model/packageableElements/domain/V1_PropertyPointer.js'; import type { V1_JoinPointer } from '../../../model/packageableElements/store/relational/model/V1_JoinPointer.js'; import type { V1_FilterPointer } from '../../../model/packageableElements/store/relational/mapping/V1_FilterPointer.js'; import type { V1_RootFlatDataClassMapping } from '../../../model/packageableElements/store/flatData/mapping/V1_RootFlatDataClassMapping.js'; import type { V1_TablePtr } from '../../../model/packageableElements/store/relational/model/V1_TablePtr.js'; import type { BasicModel } from '../../../../../../../graph/BasicModel.js'; import type { V1_GraphBuilderExtensions } from './V1_GraphBuilderExtensions.js'; import type { GraphBuilderOptions } from '../../../../../../../graph-manager/AbstractPureGraphManager.js'; import { DataType } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/DataType.js'; import type { PropertyOwner } from '../../../../../../../graph/metamodel/pure/packageableElements/domain/AbstractProperty.js'; import type { DataElement } from '../../../../../../../graph/metamodel/pure/packageableElements/data/DataElement.js'; import type { V1_GenericType } from '../../../model/packageableElements/type/V1_GenericType.js'; import type { DataProduct } from '../../../../../../../graph/metamodel/pure/dataProduct/DataProduct.js'; import { type V1_RawGenericType } from '../../../model/rawValueSpecification/V1_RawVariable.js'; export declare const V1_buildFullPath: (packagePath: string | undefined, name: string | undefined) => string; interface ResolutionResult { /** * The resolved element. */ element: T; /** * Flag indicating if we need to use section imports to resolve the element. */ resolvedUsingSectionImports?: boolean | undefined; /** * Flag indicating if the full path is already provided when resolving the element. */ isFullPath?: boolean | undefined; } export declare class V1_GraphBuilderContext { private readonly autoImports; private readonly sectionImports; readonly logService: LogService; readonly currentSubGraph: BasicModel; readonly extensions: V1_GraphBuilderExtensions; readonly graph: PureModel; readonly section?: Section | undefined; readonly options?: GraphBuilderOptions | undefined; constructor(builder: V1_GraphBuilderContextBuilder); /** * Since we haven't fully supported section index, shortened paths * using imports in the graph might need to be fully resolved. * * To handle this need, we make use of references. References can auto * resolve full paths when the section index is deleted. But, when * building the graph, we leave the value specifications * raw/unprocessed. Hence, we cannot make use of references to do full * path resolution, as such, we make a best effort traversal in the model * of raw value specifications to resolve path automatically. * * We create this flag to control the behavior of lambda auto path-resolution. * This rewriting behavior should not be done for immutable graphs, such as * system, depdendencies, and generation. However, in overall, it would be controlled * also by the `TEMPORARY__preserveSectionIndex` flag. * * NOTE: When we fully support section index, we would certainly need to * revise the usefullness of this flag, perhaps, we don't auto-resolve anymore, * but this mechanism would still be beneficial as we can keep it as an utility * to resolve raw lambdas' paths when the user deliberately delete the section * index, for example. * * https://github.com/finos/legend-studio/issues/1067 */ get enableRawLambdaAutoPathResolution(): boolean; resolve(path: string, resolverFn: (path: string) => T): ResolutionResult; /** * This method and this class in general demonstrates the difference * between explicit and implicit reference. * See {@link PackageableElementImplicitReference} for more details. * * Notice that every method in the resolver ends up creating an implicit reference. * It does not matter whether the full path is specified or not (i.e. so almost * no inference was done), the resulting reference must be implicit, as we took the * input into account when creating this reference. */ createImplicitPackageableElementReference: (path: string, resolverFn: (path: string) => T) => PackageableElementImplicitReference; resolveStereotype: (stereotypePtr: V1_StereotypePtr) => StereotypeImplicitReference; resolveTag: (tagPtr: V1_TagPtr) => TagImplicitReference; resolveGenericType: (path: string) => GenericTypeImplicitReference; resolveGenericTypeFromProtocol: (genericType: V1_GenericType) => GenericTypeReference; resolveGenericTypeFromProtocolWithRelationType: (genericType: V1_GenericType) => GenericTypeReference; resolveRawGenericTypeFromProtocol: (genericType: V1_RawGenericType) => GenericTypeReference; resolveOwnProperty: (pointer: V1_PropertyPointer) => PropertyImplicitReference; resolveProperty: (pointer: V1_PropertyPointer) => PropertyImplicitReference; resolveRootFlatDataRecordType: (classMapping: V1_RootFlatDataClassMapping) => RootFlatDataRecordTypeImplicitReference; resolveRelation: (tablePtr: V1_TablePtr, contextDatabse?: Map | undefined, allowImplicitToGeneratedDatabse?: boolean | undefined) => ViewImplicitReference | TableImplicitReference; resolveJoin: (joinPtr: V1_JoinPointer) => JoinImplicitReference; resolveFilter: (filterPtr: V1_FilterPointer) => FilterImplicitReference; resolveEnumValue: (enumeration: string, enumValue: string) => EnumValueImplicitReference; resolveElement: (path: string, includePackage: boolean) => PackageableElementImplicitReference; resolveType: (path: string) => PackageableElementImplicitReference; resolveDataType: (path: string) => PackageableElementImplicitReference; resolveProfile: (path: string) => PackageableElementImplicitReference; resolveClass: (path: string) => PackageableElementImplicitReference; resolveEnumeration: (path: string) => PackageableElementImplicitReference; resolveMeasure: (path: string) => PackageableElementImplicitReference; resolveUnit: (path: string) => PackageableElementImplicitReference; resolveAssociation: (path: string) => PackageableElementImplicitReference; resolvePropertyOwner: (path: string) => PackageableElementImplicitReference; resolveFunction: (path: string) => PackageableElementImplicitReference; resolveStore: (path: string) => PackageableElementImplicitReference; resolveFlatDataStore: (path: string) => PackageableElementImplicitReference; resolveDatabase: (path: string, generatedDatabasesInScope?: Map | undefined) => PackageableElementImplicitReference; resolveMapping: (path: string) => PackageableElementImplicitReference; resolveService: (path: string) => PackageableElementImplicitReference; resolveConnection: (path: string) => PackageableElementImplicitReference; resolveRuntime: (path: string) => PackageableElementImplicitReference; resolveGenerationSpecification: (path: string) => PackageableElementImplicitReference; resolveFileGeneration: (path: string) => PackageableElementImplicitReference; resolveDataElement: (path: string) => PackageableElementImplicitReference; resolveDataProduct: (path: string) => PackageableElementImplicitReference; } export declare class V1_GraphBuilderContextBuilder { readonly logService: LogService; /** * The (sub) graph where the current processing is taking place. * This information is important because each sub-graph holds their * own indexes for elements they are responsible for. * * e.g. dependency graph, generation graph, system graph, etc. */ readonly currentSubGraph: BasicModel; readonly extensions: V1_GraphBuilderExtensions; readonly graph: PureModel; sectionImports: Package[]; section?: Section | undefined; options?: GraphBuilderOptions | undefined; constructor(graph: PureModel, currentSubGraph: BasicModel, extensions: V1_GraphBuilderExtensions, logService: LogService, options?: GraphBuilderOptions); withElement(element: V1_PackageableElement): V1_GraphBuilderContextBuilder; withSection(section: Section | undefined): V1_GraphBuilderContextBuilder; build(): V1_GraphBuilderContext; } export {}; //# sourceMappingURL=V1_GraphBuilderContext.d.ts.map