async processFile(file, ext) {
        const fileHandlers = _.filter(this.handlers, function (handler) {
            let match = _.includes(handler.extensions, ext);

            // CASE: content file handlers should ignore files in the root directory
            if (match && handler.directories && handler.directories.length) {
                const dir = path.dirname(file.path)?.split('/')[1];
                match = _.includes(handler.directories, dir);
            }

            return match;
        });

        const importData = {};

        await Promise.all(fileHandlers.map(async (fileHandler) => {
            debug('fileHandler', fileHandler.type);
            importData[fileHandler.type] = await fileHandler.loadFile([_.pick(file, 'name', 'path')]);
        }));

        return importData;
    }
Process File
Takes a reference to a single file, sends it to the relevant handler to be loaded and returns an object in the
importData format: {data: {}, images: []}
The data key contains JSON representing any data that should be imported
The image key contains references to images that will be stored (and where they will be stored)
@param {File} file
@returns {Promise<ImportData>}