Лечение ошибки "TypeError: databaseImporter.loadRecursive is not a function"

Krinkels

Он где то тут
Администратор
Нижеследующее для продвинутых. Если не понимаете что почём то лучше дождаться нормального релиза мода.

Итак, будем лечить ошибку:
Код:
TypeError: databaseImporter.loadRecursive is not a function
Связана она с тем что разрабы удалили функцию loadRecursive, переведя всё на асинхрон. Значит будем её возвращать.
Вот сама функция в виде класса:
Код:
class RDclass 
{
    public loadRecursiveOld<T>(
        filepath: string,
        onReadCallback: (fileWithPath: string, data: string) => void = () => {},
        onObjectDeserialized: (fileWithPath: string, object: any) => void = () => {},
    ): T {
        const result = {} as T;
    
        const files = this.getFiles(filepath);
        const directories = this.getDirs(filepath);
        
        for (const file of files) 
        {
            if (this.getFileExtension(file) === "json") 
            {
                const filename = this.stripExtension(file);            
                const filePathAndName = `${filepath}${file}`;
                const fileData = this.readFile(filePathAndName);
                onReadCallback(filePathAndName, fileData);
                const fileDeserialized = JSON.parse( fileData );
                onObjectDeserialized(filePathAndName, fileDeserialized);
                result[filename] = fileDeserialized;
            }
        }
        
        for (const dir of directories) 
        {
            result[dir] = this.loadRecursiveOld(`${filepath}${dir}/`);            
        }
        
        return result;
    }

    private getFiles(filepath: string): string[] 
    {
        return fs.readdirSync(filepath).filter((item) => 
        {
            return fs.statSync(path.join(filepath, item)).isFile();
        });
    }

    private getDirs(filepath: string): string[] 
    {
        return fs.readdirSync(filepath).filter((item) => 
        {
            return fs.statSync(path.join(filepath, item)).isDirectory();
        });
    }

    private getFileExtension(filepath: string): string | undefined 
    {
        return filepath.split(".").pop();
    }

    private stripExtension(filepath: string): string 
    {
        return filepath.split(".").slice(0, -1).join(".");
    }

    private readFile(...args: Parameters<typeof fs.readFileSync>): string 
    {
        const read = fs.readFileSync(...args);
        if (this.isBuffer(read)) 
        {
            return read.toString();
        }
        return read;
    }

    private isBuffer(value: any): value is Buffer 
    {
        return value?.write && value.toString && value.toJSON && value.equals;
    }
}

Можно вставить почти в любом месте в том файле где используется "loadRecursive".
Теперь просто нужно заменить вызов databaseImporter.loadRecursive на нашу функцию. Вот небольшой пример:

Было:
Код:
this.mydb                 =     databaseImporter.loadRecursive(`${modLoader.getModPath(modFolderName)}database/`);
Стало:
Код:
//this.mydb                 =     databaseImporter.loadRecursive(`${modLoader.getModPath(modFolderName)}database/`);        
        const RD = new RDclass;
        this.mydb = RD.loadRecursiveOld(`${modLoader.getModPath(modFolderName)}database/`);
 
Сверху