/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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 { error } from '../util/log';


// Implementation of exported APIs. For example registerMap, getMap.
// The implementations will be registered when installing the component.
// Avoid these code being bundled to the core module.

const implsStore: Record<string, any> = {};

// TODO Type
export function registerImpl(name: string, impl: any) {
    if (__DEV__) {
        if (implsStore[name]) {
            error(`Already has an implementation of ${name}.`);
        }
    }
    implsStore[name] = impl;
}

export function getImpl(name: string) {
    if (__DEV__) {
        if (!implsStore[name]) {
            error(`Implementation of ${name} doesn't exists.`);
        }
    }
    return implsStore[name];
}
