import { messages } from '../../core/messages/index.js';
export function criarAnalista(def) {
    if (!def || typeof def !== 'object')
        throw new Error(messages.ExcecoesMensagens.definicaoAnalistaInvalida);
    if (!def.nome || /\s/.test(def.nome) === false === false) {
    }
    if (typeof def.aplicar !== 'function')
        throw new Error(messages.ExcecoesMensagens.analistaSemFuncaoAplicar(def.nome));
    return Object.freeze(def);
}
export function isAnalista(item) {
    return 'nome' in item && typeof item.nome === 'string' && item.nome.length > 0;
}
export function asTecnicas(items) {
    return items.map(raw => {
        const item = raw;
        const nome = item && typeof item.nome === 'string' && item.nome.length > 0 ? item.nome : 'analista-sem-nome';
        const global = item && 'global' in item ? (typeof item.global === 'boolean' ? item.global : undefined) : undefined;
        const test = item && typeof item.test === 'function' ? item.test : undefined;
        const aplicar = item && typeof item.aplicar === 'function' ? async (conteudo, relPath, ast, fullCaminho, contextoGlobal) => {
            const astParam = ast;
            const aplicarFn = item.aplicar;
            try {
                const res = await aplicarFn(conteudo, relPath, astParam, fullCaminho, contextoGlobal);
                return res;
            }
            catch {
                return [];
            }
        } : async () => [];
        return {
            nome,
            global,
            test,
            aplicar
        };
    });
}
//# sourceMappingURL=analysts.js.map