@finos/legend-graph
Version:
Legend graph and graph manager
409 lines (361 loc) • 19.1 kB
text/typescript
/**
* 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 { hashArray, hashObject, hashValue } from '@finos/legend-shared';
import { SOURCE_INFORMATION_PROPERTY_KEY_SUFFIX } from './MetaModelConst.js';
/**
* The main point of maintaining this enum is to keep lessen magic string in hash computation
* so that we are less error-prone in the process of defining hash.
*
* These tokens will be used in the definition of the hash as marker for the type of the strucure
* arguably some of these can be redundant since this information is encoded in the resulting hash
* code anyway, but sometimes when polymorphism manifests, such as when we have an array of structure
* which are subclasses of an abstract stucture, hashing the marker is sometimes the only way to
* discern between instances of different sub-structures
*
* TODO: when we refactor hashing, we could potentially move this to graphManager/changeDetection/
*/
export enum CORE_HASH_STRUCTURE {
INTERNAL__UNKNOWN_ELEMENT = 'INTERNAL__UNKNOWN_ELEMENT',
INTERNAL__UNKNOWN_PACKAGEABLE_ELEMENT = 'INTERNAL__UNKNOWN_PACKAGEABLE_ELEMENT',
INTERNAL__UNKNOWN_FUNCTION_ACTIVATOR = 'INTERNAL__UNKNOWN_FUNCTION_ACTIVATOR',
PACKAGE = 'PACKAGE',
PACKAGEABLE_ELEMENT = 'PACKAGEABLE_ELEMENT',
PACKAGEABLE_ELEMENT_POINTER = 'PACKAGEABLE_ELEMENT_POINTER',
// domain
PROFILE = 'PROFILE',
TAG_POINTER = 'TAG_POINTER',
STEREOTYPE_POINTER = 'STEREOTYPE_POINTER',
TAGGED_VALUE = 'TAGGED_VALUE',
ENUMERATION = 'ENUMERATION',
ENUM_VALUE = 'ENUM_VALUE',
CLASS = 'CLASS',
PROPERTY = 'PROPERTY',
PROPERTY_DEFAULT_VALUE = 'PROPERTY_DEFAULT_VALUE',
PROPERTY_POINTER = 'PROPERTY_POINTER',
MULTIPLICITY = 'MULTIPLICITY',
CONSTRAINT = 'CONSTRAINT',
DERIVED_PROPERTY = 'DERIVED_PROPERTY',
ASSOCIATION = 'ASSOCIATION',
FUNCTION = 'FUNCTION',
MEASURE = 'MEASURE',
UNIT = 'UNIT',
// function test
FUNCTION_TEST_SUITE = 'FUNCTION_TEST_SUITE',
FUNCTION_TEST = 'FUNCTION_TEST',
FUNCTION_STORE_TEST_DATA = 'FUNCTION_STORE_TEST_DATA',
FUNCTION_PARAMETER_VALUE = 'FUNCTION_PARAMETER_VALUE',
// Function Activator
FUNCTION_ACTIVATOR_POST_DEPLOYMENT_PROPERTIES = 'FUNCTION_ACTIVATOR_POST_DEPLOYMENT_PROPERTIES',
// testable
ASSERT_FAIL = 'ASSERT_FAIL',
ASSERT_PASS = 'ASSERT_PASS',
EQUAL_TO_JSON_ASSERT_FAIL = 'EQUAL_TO_JSON_ASSERT_FAIL',
EQUAL_TO = 'EQUAL_TO',
EQUAL_TO_JSON = 'EQUAL_TO_JSON',
EQUAL_TO_TDS = 'EQUAL_TO_TDS',
// section index
SECTION_INDEX = 'SECTION_INDEX',
SECTION = 'SECTION',
IMPORT_AWARE_CODE_SECTION = 'IMPORT_AWARE_CODE_SECTION',
DEFAULT_CODE_SECTION = 'DEFAULT_CODE_SECTION',
// raw value specification
RAW_LAMBDA = 'RAW_LAMBDA',
RAW_VARIABLE = 'RAW_VARIABLE',
RAW_INSTANCE_VALUE = 'RAW_INSTANCE_VALUE',
BINDING_TRANSFORMER = 'BINDING_TRANSFORMER',
// value specification
INTERNAL__UNKNOWN_VALUE_SPECIFICATION = 'INTERNAL__UNKNOWN_VALUE_SPECIFICATION',
INTERNAL__PROPAGATED_VALUE = 'INTERNAL__PROPAGATED_VALUE',
VARIABLE_EXPRESSION = 'VARIABLE_EXPRESSION',
EXPRESSION = 'EXPRESSION',
FUNCTION_EXPRESSION = 'FUNCTION_EXPRESSION',
SIMPLE_FUNCTION_EXPRESSION = 'SIMPLE_FUNCTION_EXPRESSION',
ABSTRACT_PROPERTY_EXPRESSION = 'ABSTRACT_PROPERTY_EXPRESSION',
INSTANCE_VALUE = 'INSTANCE_VALUE',
PRIMITIVE_INSTANCE_VALUE = 'PRIMITIVE_INSTANCE_VALUE',
ENUM_INSTANCE_VALUE = 'ENUM_INSTANCE_VALUE',
KEY_EXPRESSION_INSTANCE_VALUE = 'KEY_EXPRESSION_INSTANCE_VALUE',
KEY_EXPRESSION_VALUE = 'KEY_EXPRESSION_VALUE',
RUNTIME_INSTANCE_VALUE = 'RUNTIME_INSTANCE_VALUE',
PAIR_INSTANCE_VALUE = 'PAIR_INSTANCE_VALUE',
MAPPING_INSTANCE_VALUE = 'MAPPING_INSTANCE_VALUE',
PURE_LIST_INSTANCE_VALUE = 'PURE_LIST_INSTANCE_VALUE',
COLLECTION_INSTANCE_VALUE = 'COLLECTION_INSTANCE_VALUE',
LAMBDA_FUNCTION_INSTANCE_VALUE = 'LAMBDA_FUNCTION_INSTANCE_VALUE',
FUNCTION_TYPE = 'FUNCTION_TYPE',
LAMBDA_FUNCTION = 'LAMBDA_FUNCTION',
ALLOY_SERIALIZATION_CONFIG_INSTANCE_VALUE = 'ALLOY_SERIALIZATION_CONFIG_INSTANCE_VALUE',
ALLOY_SERIALIZATION_CONFIG = 'ALLOY_SERIALIZATION_CONFIG',
ROOT_GRAPH_FETCH_TREE = 'ROOT_GRAPH_FETCH_TREE',
PROPERTY_GRAPH_FETCH_TREE = 'PROPERTY_GRAPH_FETCH_TREE',
SUBTYPE_GRAPH_FETCH_TREE = 'SUBTYPE_GRAPH_FETCH_TREE',
SUBTYPE_GRAPH_FETCH_TREE_INSTANCE_VALUE = 'SUBTYPE_GRAPH_FETCH_TREE_INSTANCE_VALUE',
PROPERTY_GRAPH_FETCH_TREE_INSTANCE_VALUE = 'PROEPRTY_GRAPH_FETCH_TREE_INSTANCE_VALUE',
ROOT_GRAPH_FETCH_TREE_INSTANCE_VALUE = 'ROOT_GRAPH_FETCH_TREE_INSTANCE_VALUE',
RELATION_COL_SPEC_ARRAY = 'RELATION_COL_SPEC_ARRAY',
RELATION_COL_SPEC = 'RELATION_COL_SPEC',
// ---------------------------------- DSL Mapping --------------------------------------
INTERNAL__UNKNOWN_STORE = 'INTERNAL__UNKNOWN_STORE',
INTERNAL__UNKNOWN_CONNECTION = 'INTERNAL__UNKNOWN_CONNECTION',
INTERNAL__UNKNOWN_PROPERTY_MAPPING = 'INTERNAL__UNKNOWN_PROPERTY_MAPPING',
INTERNAL__UNKNOWN_CLASS_MAPPING = 'INTERNAL__UNKNOWN_CLASS_MAPPING',
INTERNAL__UNKNOWN_MAPPING_INCLUDE = 'INTERNAL__UNKNOWN_MAPPING_INCLUDE',
MAPPING = 'MAPPING',
MAPPING_INCLUDE_MAPPING = 'MAPPING_INCLUDE_MAPPING',
ASSOCIATION_IMPLEMENTATION = 'ASSOCIATION_IMPLEMENTATION',
RELATIONAL_ASSOCIATION_IMPLEMENTATION = 'RELATIONAL_ASSOCIATION_IMPLEMENTATION',
XSTORE_ASSOCIATION_IMPLEMENTATION = 'XSTORE_ASSOCIATION_IMPLEMENTATION',
ENUMERATION_MAPPING = 'ENUMERATION_MAPPING',
ENUM_VALUE_MAPPING = 'ENUM_VALUE_MAPPING',
SET_IMPLEMENTATION = 'SET_IMPLEMENTATION',
OPERATION_SET_IMPLEMENTATION = 'OPERATION_SET_IMPLEMENTATION',
PURE_INSTANCE_SET_IMPLEMENTATION = 'PURE_INSTANCE_SET_IMPLEMENTATION',
PROPERTY_MAPPING = 'PROPERTY_MAPPING',
LOCAL_MAPPING_PROPERTY = 'LOCAL_MAPPING_PROPERTY',
PURE_PROPERTY_MAPPING = 'PURE_PROPERTY_MAPPING',
XSTORE_PROPERTY_MAPPING = 'XSTORE_PROPERTY_MAPPING',
MAPPING_TEST_LEGACY = 'MAPPING_TEST_LEGACY',
MAPPING_TEST_SUITE = 'MAPPING_TEST_SUITE',
MAPPING_TEST = 'MAPPING_TEST',
STORE_TEST_DATA = 'STORE_TEST_DATA',
INPUT_DATA = 'INPUT_DATA',
FLAT_DATA_INPUT_DATA = 'FLAT_DATA_INPUT_DATA',
RELATIONAL_INPUT_DATA = 'RELATIONAL_INPUT_DATA',
OBJECT_INPUT_DATA = 'OBJECT_INPUT_DATA',
MAPPING_TEST_ASSERT = 'MAPPING_TEST_ASSERT',
EXPECTED_OUTPUT_MAPPING_TEST_ASSERT = 'EXPECTED_OUTPUT_MAPPING_TEST_ASSERT',
FILTER_MAPPING = 'FILTER_MAPPING',
COLUMN_MAPPING = 'COLUMN_MAPPING',
GROUP_BY_MAPPING = 'GROUP_BY_MAPPING',
// runtime
RUNTIME = 'RUNTIME',
PACKAGEABLE_RUNTIME = 'PACKAGEABLE_RUNTIME',
ENGINE_RUNTIME = 'ENGINE_RUNTIME',
SINGLE_ENGINE_RUNTIME = 'SINGLE_ENGINE_RUNTIME',
LEGACY_RUNTIME = 'LEGACY_RUNTIME',
LAKEHOUSE_RUNTIME = 'LAKEHOUSE_RUNTIME',
RUNTIME_POINTER = 'RUNTIME_POINTER',
STORE_CONNECTIONS = 'STORE_CONNECTIONS',
IDENTIFIED_CONNECTION = 'IDENTIFIED_CONNECTION',
// connection
PACKAGEABLE_CONNECTION = 'PACKAGEABLE_CONNECTION',
CONNECTION_POINTER = 'CONNECTION_POINTER',
XML_MODEL_CONNECTION = 'XML_MODEL_CONNECTION',
JSON_MODEL_CONNECTION = 'JSON_MODEL_CONNECTION',
MODEL_CHAIN_CONNECTION = 'MODEL_CHAIN_CONNECTION',
FLAT_DATA_CONNECTION = 'FLAT_DATA_CONNECTION',
// aggregation aware mapping
AGGREGATION_AWARE_MAPPING = 'AGGREGATION_AWARE_MAPPING',
AGGREGATION_AWARE_SPECIFICATION = 'AGGREGATION_AWARE_SPECIFICATION',
AGGREGATION_AWARE_SET_IMPLEMENTATION_CONTAINER = 'AGGREGATION_AWARE_SET_IMPLEMENTATION_CONTAINER',
AGGREGATE_FUNCTION = 'AGGREGATE_FUNCTION',
GROUP_BY_FUNCTION = 'GROUP_BY_FUNCTION',
// ---------------------------------- DSL Generation --------------------------------------
GENERATION_TREE = 'GENERATION_TREE',
GENERATION_TREE_NODE = 'GENERATION_TREE_NODE',
FILE_GENERATION = 'FILE_GENERATION',
CONFIGURATION_PROPERTY = 'CONFIGURATION_PROPERTY',
// ---------------------------------- DSL Data --------------------------------------
INTERNAL__UNKNOWN_EMBEDDED_DATA = 'INTERNAL__UNKNOWN_EMBEDDED_DATA',
EXTERNAL_FORMAT_DATA = 'EXTERNAL_FORMAT_DATA',
MODEL_STORE_DATA = 'MODEL_STORE_DATA',
MODEL_DATA = 'MODEL_DATA',
MODEL_EMBEDDED_DATA = 'MODEL_EMBEDDED_DATA',
MODEL_INSTANCE_DATA = 'MODEL_INSTANCE_DATA',
DATA_ELEMENT_REFERENCE = 'DATA_ELEMENT_REFERENCE',
DATA_ELEMENT = 'DATA_ELEMENT',
RELATIONAL_CSV_DATA = 'RELATIONAL_CSV_DATA',
RELATIONAL_TDS = 'RELATIONAL_TDS',
RELATIONAL_CSV_DATA_TABLE = 'RELATIONAL_CSV_DATA_TABLE',
// ---------------------------------- DSL External Format --------------------------------------
BINDING = 'BINDING',
SCHEMA_SET = 'SCHEMA_SET',
SCHEMA = 'SCHEMA',
MODEL_UNIT = 'MODEL_UNIT',
URL_STREAM = 'URL_STREAM',
EXTERNAL_FORMAT_CONNECTION = 'EXTERNAL_FORMAT_CONNECTION',
// ---------------------------------- DSL Service --------------------------------------
SERVICE = 'SERVICE',
SERVICE_OWNER = 'SERVICE_OWNER',
SERVICE_PURE_EXECUTION = 'SERVICE_PURE_EXECUTION',
SERVICE_PURE_SINGLE_EXECUTION = 'SERVICE_PURE_SINGLE_EXECUTION',
SERVICE_KEYED_EXECUTION_PARAMETER = 'SERVICE_KEYED_EXECUTION_PARAMETER',
SERVICE_PURE_MULTI_EXECUTION = 'SERVICE_PURE_MULTI_EXECUTION',
SERVICE_TEST_CONTAINER = 'SERVICE_TEST_CONTAINER',
SERVICE_LEGACY_SINGLE_EXECUTION_TEST = 'SERVICE_LEGACY_SINGLE_EXECUTION_TEST',
SERVICE_LEGACY_KEYED_SINGLE_EXECUTION_TEST = 'SERVICE_LEGACY_KEYED_SINGLE_EXECUTION_TEST',
SERVICE_LEGACY_MULTI_EXECUTION_TEST = 'SERVICE_LEGACY_MULTI_EXECUTION_TEST',
SERVICE_CONNECTION_TEST_DATA = 'SERVICE_CONNECTION_TEST_DATA',
SERVICE_TEST_DATA = 'SERVICE_TEST_DATA',
SERVICE_TEST_SUITE = 'SERVICE_TEST_SUITE',
SERVICE_TEST = 'SERVICE_TEST',
SERVICE_PARAMETER_VALUE = 'SERVICE_PARAMETER_VALUE',
SERVICE_POST_VALIDATION = 'SERVICE_POST_VALIDATION',
SERVICE_POST_VALIDATION_ASSERTION = 'SERVICE_POST_VALIDATION_ASSERTION',
// execution environment instance
EXECUTION_ENVIRONMENT_INSTANCE = 'EXECUTION_ENVIRONMENT_INSTANCE',
SINGLE_EXECUTION_PARAMETER = 'SINGLE_EXECUTION_PARAMETER',
MULTI_EXECUTION_PARAMETER = 'MULTI_EXECUTION_PARAMETER',
RUNTIME_COMPONENTS = 'RUNTIME_COMPONENTS',
// ---------------------------------- STO Relational --------------------------------------
INTERNAL__UNKNOWN_DATASOURCE_SPECIFICATION = 'INTERNAL__UNKNOWN_DATASOURCE_SPECIFICATION',
INTERNAL__UNKNOWN_AUTHENTICATION_STRATEGY = 'INTERNAL__UNKNOWN_AUTHENTICATION_STRATEGY',
INTERNAL__UNKNOWN_POST_PROCESSOR = 'INTERNAL__UNKNOWN_POST_PROCESSOR',
// database
DATABASE = 'DATABASE',
DATABASE_SCHEMA = 'DATABASE_SCHEMA',
DATABASE_JOIN = 'DATABASE_JOIN',
DATABASE_FILTER = 'DATABASE_FILTER',
DATBASE_VIEW = 'DATBASE_VIEW',
DATABASE_SCHEMA_TABLE = 'DATABASE_SCHEMA_TABLE',
DATABASE_SCHEMA_TABULARFUNCTION = 'DATABASE_SCHEMA_TABULARFUNCTION',
DATABASE_TABLE_COLUMN = 'DATABASE_TABLE_COLUMN',
// relational operation element
RELATIONAL = 'RELATIONAL',
RELATIONAL_OPERATION_DYNA_FUNC = 'RELATIONAL_OPERATION_DYNA_FUNC',
RELATIONAL_OPERATION_ELEMENTS_WITH_JOINS = 'RELATIONAL_OPERATION_ELEMENTS_WITH_JOINS',
RELATIONAL_OPERATION_LITERAL = 'RELATIONAL_OPERATION_LITERAL',
RELATIONAL_OPERATION_LITERAL_LIST = 'RELATIONAL_OPERATION_LITERAL_LIST',
RELATIONAL_OPERATION_TABLE_ALIAS_COLUMN = 'RELATIONAL_OPERATION_TABLE_ALIAS_COLUMN',
RELATIONAL_OPERATION_TABLE_POINTER = 'RELATIONAL_OPERATION_TABLE_POINTER',
RELATIONAL_OPERATION_JOIN_POINTER = 'RELATIONAL_OPERATION_JOIN_POINTER',
// relational data type
RELATIONAL_DATATYPE_VARCHAR = 'RELATIONAL_DATATYPE_VARCHAR',
RELATIONAL_DATATYPE_CHAR = 'RELATIONAL_DATATYPE_CHAR',
RELATIONAL_DATATYPE_VARBINARY = 'RELATIONAL_DATATYPE_VARBINARY',
RELATIONAL_DATATYPE_BINARY = 'RELATIONAL_DATATYPE_BINARY',
RELATIONAL_DATATYPE_BIT = 'RELATIONAL_DATATYPE_BIT',
RELATIONAL_DATATYPE_INTEGER = 'RELATIONAL_DATATYPE_INTEGER',
RELATIONAL_DATATYPE_BIGINT = 'RELATIONAL_DATATYPE_BIGINT',
RELATIONAL_DATATYPE_SMALLINT = 'RELATIONAL_DATATYPE_SMALLINT',
RELATIONAL_DATATYPE_TINYINT = 'RELATIONAL_DATATYPE_TINYINT',
RELATIONAL_DATATYPE_NUMERIC = 'RELATIONAL_DATATYPE_NUMERIC',
RELATIONAL_DATATYPE_DECIMAL = 'RELATIONAL_DATATYPE_DECIMAL',
RELATIONAL_DATATYPE_DOUBLE = 'RELATIONAL_DATATYPE_DOUBLE',
RELATIONAL_DATATYPE_FLOAT = 'RELATIONAL_DATATYPE_FLOAT',
RELATIONAL_DATATYPE_REAL = 'RELATIONAL_DATATYPE_REAL',
RELATIONAL_DATATYPE_DATE = 'RELATIONAL_DATATYPE_DATE',
RELATIONAL_DATATYPE_TIMESTAMP = 'RELATIONAL_DATATYPE_TIMESTAMP',
RELATIONAL_DATATYPE_OTHER = 'RELATIONAL_DATATYPE_OTHER',
RELATIONAL_DATATYPE_SEMISTRUCTURED = 'RELATIONAL_DATATYPE_SEMISTRUCTURED',
RELATIONAL_DATATYPE_JSON = 'RELATIONAL_DATATYPE_JSON',
// relational mapping
ROOT_RELATIONAL_INSTANCE_SET_IMPLEMENTATION = 'ROOT_RELATIONAL_INSTANCE_SET_IMPLEMENTATION',
RELATIONAL_INSTANCE_SET_IMPLEMENTATION = 'RELATIONAL_INSTANCE_SET_IMPLEMENTATION',
REALTIONAL_PROPERTY_MAPPING = 'REALTIONAL_PROPERTY_MAPPING',
EMBEDDED_REALTIONAL_PROPERTY_MAPPING = 'EMBEDDED_REALTIONAL_PROPERTY_MAPPING',
INLINE_EMBEDDED_REALTIONAL_PROPERTY_MAPPING = 'INLINE_EMBEDDED_REALTIONAL_PROPERTY_MAPPING',
OTHERWISE_EMBEDDED_REALTIONAL_PROPERTY_MAPPING = 'OTHERWISE_EMBEDDED_REALTIONAL_PROPERTY_MAPPING',
RELATION_FUNCTION_INSTANCE_SET_IMPLEMENTATION = 'RELATION_FUNCTION_INSTANCE_SET_IMPLEMENTATION',
RELATION_FUNCTION_PROPERTY_MAPPING = 'RELATION_FUNCTION_PROPERTY_MAPPING',
// milestoning
BUSINESS_MILESTONING = 'BUSINESS_MILESTONING',
BUSINESS_SNAPSHOT_MILESTONING = 'BUSINESS_SNAPSHOT_MILESTONING',
PROCESSING_MILESTONING = 'PROCESSING_MILESTONING',
// relational database connection
RELATIONAL_DATABASE_CONNECTION = 'RELATIONAL_DATABASE_CONNECTION',
// relational database connection datasource specification
STATIC_DATASOURCE_SPECIFICATION = 'STATIC_DATASOURCE_SPECIFICATION',
LOCAL_H2_DATASOURCE_SPECIFICATION = 'LOCAL_H2_DATASOURCE_SPECIFICATION',
EMBEDDED_H2_DATASOURCE_SPECIFICATION = 'EMBEDDED_H2_DATASOURCE_SPECIFICATION',
SNOWFLAKE_DATASOURCE_SPECIFICATION = 'SNOWFLAKE_DATASOURCE_SPECIFICATION',
REDSHIFT_DATASOURCE_SPECIFICATION = 'REDSHIFT_DATASOURCE_SPECIFICATION',
BIGQUERY_DATASOURCE_SPECIFICATION = 'BIGQUERY_DATASOURCE_SPECIFICATION',
DATABRICKS_DATASOURCE_SPECIFICATION = 'DATABRICKS_DATASOURCE_SPECIFICATION',
SPANNER_DATASOURCE_SPECIFICATION = 'SPANNER_DATASOURCE_SPECIFICATION',
TRINO_DATASOURCE_SPECIFICATION = 'TRINO_DATASOURCE_SPECIFICATION',
DUCKDB_DATASOURCE_SPECIFICATION = 'DUCKDB_DATASOURCE_SPECIFICATION',
TRINO_SSL_SPECIFICATION = 'TRINO_SSL_SPECIFICATION',
// relational database connection authentication strategy
DELEGRATED_KEREBEROS_AUTHENTICATION_STRATEGY = 'DELEGRATED_KEREBEROS_AUTHENTICATION_STRATEGY',
DEFAULT_H2_AUTHENTICATION_STRATEGY = 'DEFAULT_H2_AUTHENTICATION_STRATEGY',
TEST_AUTHENTICATION_STRATEGY = 'TEST_AUTHENTICATION_STRATEGY',
SNOWFLAKE_PUBLIC_AUTHENTICATION_STRATEGY = 'SNOWFLAKE_PUBLIC_AUTHENTICATION_STRATEGY',
API_TOKEN_AUTHENTICATION_STRATEGY = 'API_TOKEN_AUTHENTICATION_STRATEGY',
GCP_APPLICATION_DEFAULT_CREDENTIALS_AUTHENTICATION_STRATEGY = 'GCP_APPLICATION_DEFAULT_CREDENTIALS_AUTHENTICATION_STRATEGY',
USERNAME_PASSWORD_AUTHENTICATION_STRATEGY = 'USERNAME_PASSWORD_AUTHENTICATION_STRATEGY',
OAUTH_AUTHENTICATION_STRATEGY = 'OAUTH_AUTHENTICATION_STRATEGY',
GCP_WORKLOAD_IDENTITY_FEDERATION_AUTHENTICATION_STRATEGY = 'GCP_WORKLOAD_IDENTITY_FEDERATION_AUTHENTICATION_STRATEGY',
MIDDLE_TIER_USERNAME_PASSWORD_AUTHENTICATION_STRATEGY = 'MIDDLE_TIER_USERNAME_PASSWORD_AUTHENTICATION_STRATEGY',
TRINO_DELEGATED_KERBEROS_AUTHENTICATION_STRATEGY = 'TRINO_KEREBEROS_AUTHENTICATION_STRATEGY',
// relational database connection post-processors
MAPPER_POST_PROCESSOR = 'MAPPER_POST_PROCESSOR',
SCHEMA_MAPPER = 'SCHEMA_MAPPER',
TABLE_MAPPER = 'TABLE_MAPPER',
// relational database connection query generation config
GENERATION_FEATURES_CONFIG = 'GENERATION_FEATURES_CONFIG',
// ---------------------------------- STO Flat-Data --------------------------------------
FLAT_DATA = 'FLAT_DATA',
FLAT_DATA_SECTION = 'FLAT_DATA_SECTION',
FLAT_DATA_PROPERTY = 'FLAT_DATA_PROPERTY',
FLAT_DATA_ROOT_RECORD_TYPE = 'FLAT_DATA_ROOT_RECORD_TYPE',
FLAT_DATA_RECORD_TYPE = 'FLAT_DATA_RECORD_TYPE',
FLAT_DATA_RECORD_FIELD = 'FLAT_DATA_RECORD_FIELD',
FLAT_DATA_STRING = 'FLAT_DATA_STRING',
FLAT_DATA_BOOLEAN = 'FLAT_DATA_BOOLEAN',
FLAT_DATA_NUMBER = 'FLAT_DATA_NUMBER',
FLAT_DATA_INTEGER = 'FLAT_DATA_INTEGER',
FLAT_DATA_FLOAT = 'FLAT_DATA_FLOAT',
FLAT_DATA_DECIMAL = 'FLAT_DATA_DECIMAL',
FLAT_DATA_DATE = 'FLAT_DATA_DATE',
FLAT_DATA_DATE_TIME = 'FLAT_DATA_DATE_TIME',
FLAT_DATA_STRICT_DATE = 'FLAT_DATA_STRICT_DATE',
FLAT_DATA_INSTANCE_SET_IMPLEMENTATION = 'FLAT_DATA_INSTANCE_SET_IMPLEMENTATION',
FLAT_DATA_PROPERTY_MAPPING = 'FLAT_DATA_PROPERTY_MAPPING',
FLAT_DATA_ASSOCIATION_IMPLEMENTATION = 'FLAT_DATA_ASSOCIATION_IMPLEMENTATION',
FLAT_DATA_ASSOCIATION_PROPERTY_MAPPING = 'FLAT_DATA_ASSOCIATION_PROPERTY_MAPPING',
EMBEDDED_FLAT_DATA_PROPERTY_MAPPING = 'EMBEDDED_FLAT_DATA_PROPERTY_MAPPING',
FLAT_DATA_SECTION_POINTER = 'FLAT_DATA_SECTION_POINTER',
// -------------------------------------- Function Activator --------------------------------------
SNOWFLAKE_APP = 'SNOWFLAKE_APP',
HOSTED_SERVICE = 'HOSTED_SERVICE',
HOSTED_SERVICE_OWNER = 'HOSTED_SERVICE_OWNER',
// ---------------------------------- Relation --------------------------------------
RELATION_TYPE = 'RELATION_TYPE',
RELATION_COLUMN = 'RELATION_COLUMN',
// ---------------------------------- Data Product --------------------------------------
DATA_PRODUCT = 'DATA_PRODUCT',
DATA_PRODUCT_ACCESS_POINT_GROUP = 'DATA_PRODUCT_ACCESS_POINT_GROUP',
DATA_PRODUCT_ACCESS_POINT = 'DATA_PRODUCT_ACCESS_POINT',
LAKEHOUSE_ACCESS_POINT = 'LAKEHOUSE_ACCESS_POINT',
UNKNOWN_ACCESS_POINT = 'UNKNOWN_ACCESS_POINT',
}
export const hashObjectWithoutSourceInformation = (val: object): string =>
hashObject(val, {
/**
* NOTE: this is over-simplification as there could be source information fields with other names
* see note in {@link pruneSourceInformation}
*/
excludeKeys: (propKey: string) =>
propKey
.toLowerCase()
.endsWith(SOURCE_INFORMATION_PROPERTY_KEY_SUFFIX.toLowerCase()),
});
export const hashRawLambda = (
parameters: object | undefined,
body: object | undefined,
): string =>
hashArray([
parameters ? hashObjectWithoutSourceInformation(parameters) : '',
body ? hashObjectWithoutSourceInformation(body) : '',
]);
export const hashElementPointer = (
pointerType: string | undefined,
path: string,
): string =>
[CORE_HASH_STRUCTURE.PACKAGEABLE_ELEMENT_POINTER, pointerType ?? '', path]
.map(hashValue)
.join(',');