public function compile() : string
{
$ruleKeys = \array_keys($this->policies);
if (\in_array('report-only', $ruleKeys)) {
$this->reportOnly = !!$this->policies['report-only'];
} else {
$this->reportOnly = false;
}
$compiled = [];
foreach (self::$directives as $dir) {
if (\in_array($dir, $ruleKeys)) {
if (empty($ruleKeys)) {
if ($dir === 'base-uri') {
continue;
}
}
$compiled[] = $this->compileSubgroup($dir, $this->policies[$dir]);
}
}
if (!empty($this->policies['report-uri'])) {
$compiled[] = 'report-uri ' . $this->policies['report-uri'] . '; ';
}
if (!empty($this->policies['upgrade-insecure-requests'])) {
$compiled[] = 'upgrade-insecure-requests';
}
$this->compiled = \implode('', $compiled);
$this->needsCompile = false;
return $this->compiled;
}