public function getFieldsDefinitions(array $stubFields = []) : array
    {
        $result = [];

        // Get cached definitions
        if (! empty($this->_fieldDefinitions)) {
            $result = $this->_fieldDefinitions;
        }

        // Fetch definitions from CSV if cache is empty
        if (empty($result)) {
            $moduleName = App::shortName(get_class($this), 'Model/Table', 'Table');
            list(, $moduleName) = pluginSplit($moduleName);

            $mc = new ModuleConfig(ConfigType::MIGRATION(), $moduleName);
            $config = json_encode($mc->parse());
            $result = false === $config ? [] : json_decode($config, true);
            if (! empty($result)) {
                $this->_fieldDefinitions = $result;
            }
        }

        if (empty($stubFields)) {
            return $result;
        }

        // Merge $result with $stubFields
        foreach ($stubFields as $field => $definition) {
            if (!array_key_exists($field, $result)) {
                $result[$field] = $definition;
            }
        }

        return $result;
    }