From 329d7781af0881cc6bedf2c725a176b5945ad9f5 Mon Sep 17 00:00:00 2001 From: Noam Hammer Date: Sun, 8 Mar 2020 16:38:47 +0200 Subject: [PATCH] with default config (#769) --- packages/core/src/core/adapters/adapters.ts | 23 ++++++++++++++----- packages/core/src/core/merger/index.ts | 2 +- .../src/core/merger/internal/instances.ts | 3 +++ packages/core/test/merger.test.ts | 23 +++++++++++++++++-- .../salesforce-adapter/src/adapter_creator.ts | 18 ++++++++++++--- 5 files changed, 57 insertions(+), 12 deletions(-) diff --git a/packages/core/src/core/adapters/adapters.ts b/packages/core/src/core/adapters/adapters.ts index 42f14b51987..195a5f686f6 100644 --- a/packages/core/src/core/adapters/adapters.ts +++ b/packages/core/src/core/adapters/adapters.ts @@ -15,10 +15,11 @@ */ import _ from 'lodash' import { - ObjectType, Adapter, ElemIdGetter, AdapterCreatorOpts, + ObjectType, Adapter, ElemIdGetter, AdapterCreatorOpts, ElemID, } from '@salto-io/adapter-api' import adapterCreators from './creators' import { ConfigSource } from '../../workspace/config_source' +import { createDefaultInstanceFromType } from '../merger/internal/instances' export const getAdaptersCredentialsTypes = ( names: string[] @@ -51,11 +52,21 @@ export const getAdapters = async ( ): Promise> => { const creatorConfig: Record = _ .fromPairs(await Promise.all(adapters.map( - async adapter => ([adapter, { - credentials: await credentials.get(adapter), - config: await config.get(adapter), - getElemIdFunc: elemIdGetter, - }]) + async adapter => { + const adapterConfig = await config.get(adapter) + const { configType } = adapterCreators[adapter] + const defaultConfig = configType + ? createDefaultInstanceFromType(ElemID.CONFIG_NAME, configType) + : undefined + if (_.isUndefined(adapterConfig) && defaultConfig) { + await config.set(adapter, defaultConfig) + } + return ([adapter, { + credentials: await credentials.get(adapter), + config: adapterConfig ?? defaultConfig, + getElemIdFunc: elemIdGetter, + }]) + } ))) return initAdapters(creatorConfig) } diff --git a/packages/core/src/core/merger/index.ts b/packages/core/src/core/merger/index.ts index aa22df3263d..8befa645bee 100644 --- a/packages/core/src/core/merger/index.ts +++ b/packages/core/src/core/merger/index.ts @@ -32,7 +32,7 @@ export { DuplicateAnnotationFieldDefinitionError, DuplicateAnnotationTypeError, } from './internal/object_types' -export { DuplicateInstanceKeyError } from './internal/instances' +export { DuplicateInstanceKeyError, createDefaultInstanceFromType } from './internal/instances' export { MultiplePrimitiveTypesUnsupportedError } from './internal/primitives' const log = logger(module) diff --git a/packages/core/src/core/merger/internal/instances.ts b/packages/core/src/core/merger/internal/instances.ts index dfadb9181dc..d411daf055d 100644 --- a/packages/core/src/core/merger/internal/instances.ts +++ b/packages/core/src/core/merger/internal/instances.ts @@ -92,3 +92,6 @@ export const mergeInstances = ( errors.length}]`) return { merged, errors } } + +export const createDefaultInstanceFromType = (name: string, objectType: ObjectType): +InstanceElement => mergeInstances([new InstanceElement(name, objectType)]).merged[0] diff --git a/packages/core/test/merger.test.ts b/packages/core/test/merger.test.ts index 5f5df77db28..fa88c7aeef4 100644 --- a/packages/core/test/merger.test.ts +++ b/packages/core/test/merger.test.ts @@ -15,14 +15,14 @@ */ import { ObjectType, ElemID, Field, BuiltinTypes, InstanceElement, PrimitiveType, - PrimitiveTypes, TypeElement, + PrimitiveTypes, TypeElement, CORE_ANNOTATIONS, } from '@salto-io/adapter-api' import { mergeElements, MultipleBaseDefinitionsMergeError, NoBaseDefinitionMergeError, DuplicateAnnotationTypeError, DuplicateAnnotationError, DuplicateAnnotationFieldDefinitionError, DuplicateInstanceKeyError, - MultiplePrimitiveTypesUnsupportedError, + MultiplePrimitiveTypesUnsupportedError, createDefaultInstanceFromType, } from '../src/core/merger' import { Keywords } from '../src/parser/language' @@ -365,6 +365,25 @@ describe('merger', () => { expect(errors).toHaveLength(1) expect(errors[0]).toBeInstanceOf(DuplicateAnnotationError) }) + + it('should create default instance from type', () => { + const mockElemID = new ElemID('test') + const configType = new ObjectType({ + elemID: mockElemID, + fields: { + val1: new Field( + mockElemID, + 'val1', + BuiltinTypes.STRING, + { + [CORE_ANNOTATIONS.DEFAULT]: 'test', + } + ), + }, + }) + expect(createDefaultInstanceFromType('test', configType)) + .toEqual(new InstanceElement('test', configType, { val1: 'test' })) + }) }) describe('merging primitives', () => { diff --git a/packages/salesforce-adapter/src/adapter_creator.ts b/packages/salesforce-adapter/src/adapter_creator.ts index ba4ca084caa..b4b7b071402 100644 --- a/packages/salesforce-adapter/src/adapter_creator.ts +++ b/packages/salesforce-adapter/src/adapter_creator.ts @@ -16,7 +16,7 @@ import { collections } from '@salto-io/lowerdash' import { logger } from '@salto-io/logging' import { - BuiltinTypes, ObjectType, ElemID, InstanceElement, Field, AdapterCreator, + BuiltinTypes, ObjectType, ElemID, InstanceElement, Field, AdapterCreator, CORE_ANNOTATIONS, } from '@salto-io/adapter-api' import SalesforceClient, { Credentials, validateCredentials } from './client/client' import { changeValidator } from './change_validator' @@ -43,10 +43,22 @@ const configType = new ObjectType({ elemID: configID, fields: { metadataTypesBlacklist: new Field( - configID, 'metadataTypesBlacklist', BuiltinTypes.STRING, {}, true, + configID, + 'metadataTypesBlacklist', + BuiltinTypes.STRING, + { + [CORE_ANNOTATIONS.DEFAULT]: [], + }, + true, ), instancesRegexBlacklist: new Field( - configID, 'instancesRegexBlacklist', BuiltinTypes.STRING, {}, true, + configID, + 'instancesRegexBlacklist', + BuiltinTypes.STRING, + { + [CORE_ANNOTATIONS.DEFAULT]: [], + }, + true, ), }, })