public function parse($filename) { if (!
file_exists($filename)) { $parsed_info =
[];
} else { try { $parsed_info = Yaml::
decode(file_get_contents($filename));
} catch (InvalidDataTypeException
$e) { throw new InfoParserException("Unable to parse
$filename " .
$e->
getMessage());
} $missing_keys =
array_diff($this->
getRequiredKeys(),
array_keys($parsed_info));
if (!
empty($missing_keys)) { throw new InfoParserException('Missing required keys (' .
implode(', ',
$missing_keys) . ') in ' .
$filename);
} if (!
isset($parsed_info['core_version_requirement'
])) { if (str_starts_with($filename, 'core/'
) ||
str_starts_with($filename,
$this->root . '/core/'
)) { // Core extensions do not need to specify core compatibility: they are
// by definition compatible so a sensible default is used. Core
// modules are allowed to provide these for testing purposes.
$parsed_info['core_version_requirement'
] = \Drupal::VERSION;
} elseif (isset($parsed_info['package'
]) &&
$parsed_info['package'
] === 'Testing'
) {