Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
88.89% |
16 / 18 |
|
0.00% |
0 / 1 |
CRAP | n/a |
0 / 0 |
|
| vite_tags | |
88.24% |
15 / 17 |
|
0.00% |
0 / 1 |
6.06 | |||
| 1 | <?php |
| 2 | |
| 3 | if (! function_exists('vite_tags')) { |
| 4 | /** |
| 5 | * @param list<string> $entries |
| 6 | */ |
| 7 | function vite_tags(array $entries = ['resources/js/app.js']): string |
| 8 | { |
| 9 | $manifestPath = ROOTPATH . 'public/build/.vite/manifest.json'; |
| 10 | |
| 11 | if (! is_file($manifestPath)) { |
| 12 | return '<!-- Vite manifest missing. Run npm run build. -->'; |
| 13 | } |
| 14 | |
| 15 | /** @var array<string, array<string, mixed>>|null $manifest */ |
| 16 | static $manifest = null; |
| 17 | if ($manifest === null) { |
| 18 | $manifest = json_decode((string) file_get_contents($manifestPath), true); |
| 19 | } |
| 20 | |
| 21 | $html = []; |
| 22 | |
| 23 | foreach ($entries as $entry) { |
| 24 | if (! isset($manifest[$entry])) { |
| 25 | continue; |
| 26 | } |
| 27 | |
| 28 | $item = $manifest[$entry]; |
| 29 | |
| 30 | foreach ($item['css'] ?? [] as $css) { |
| 31 | $href = base_url('build/' . ltrim($css, '/')); |
| 32 | $html[] = '<link rel="stylesheet" href="' . esc($href, 'attr') . '">'; |
| 33 | } |
| 34 | |
| 35 | $src = base_url('build/' . ltrim($item['file'], '/')); |
| 36 | $html[] = '<script type="module" src="' . esc($src, 'attr') . '"></script>'; |
| 37 | } |
| 38 | |
| 39 | return implode(PHP_EOL, array_unique($html)); |
| 40 | } |
| 41 | } |