From 41eda0c73d0a1f5273ccacac57176f450c294e04 Mon Sep 17 00:00:00 2001
From: Sam Light <sam@lightscale.co.uk>
Date: Sun, 30 Mar 2025 22:22:27 +0100
Subject: Some basic structure

---
 src/Assets.php                   | 22 +++++++++++++++++
 src/AssetsServiceProvider.php    | 14 +++++++++++
 src/Contracts/ManifestParser.php |  8 +++++++
 src/File.php                     |  8 +++++++
 src/JsonManifestParser.php       | 13 ++++++++++
 src/Manifest.php                 | 51 ++++++++++++++++++++++++++++++++++++++++
 6 files changed, 116 insertions(+)
 create mode 100644 src/Assets.php
 create mode 100644 src/AssetsServiceProvider.php
 create mode 100644 src/Contracts/ManifestParser.php
 create mode 100644 src/File.php
 create mode 100644 src/JsonManifestParser.php
 create mode 100644 src/Manifest.php

diff --git a/src/Assets.php b/src/Assets.php
new file mode 100644
index 0000000..78cbe59
--- /dev/null
+++ b/src/Assets.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace Lightscale\LaralightAssets;
+
+class Assets
+{
+    private string $manifestParser;
+    private array $manifests = [];
+    private array $manifestsParsers = [];
+    private array $files = [];
+    private array $queuedHeadFiles = [];
+    private array $queuedFooterFiles = [];
+
+    public function registerManifest(
+        string $name,
+        string $path,
+        string $baseUrl,
+    ): void
+    {
+
+    }
+}
diff --git a/src/AssetsServiceProvider.php b/src/AssetsServiceProvider.php
new file mode 100644
index 0000000..c59be48
--- /dev/null
+++ b/src/AssetsServiceProvider.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace Lightscale\LaralightAssets;
+
+use Illuminate\Support\ServiceProvider;
+
+class AssetsServiceProvider extends ServiceProvider
+{
+
+    public function register(): void
+    {
+
+    }
+}
diff --git a/src/Contracts/ManifestParser.php b/src/Contracts/ManifestParser.php
new file mode 100644
index 0000000..d4442aa
--- /dev/null
+++ b/src/Contracts/ManifestParser.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Lightscale\LaralightAssets\Contracts;
+
+interface ManifestParser
+{
+    public function parse(string $data): array;
+}
diff --git a/src/File.php b/src/File.php
new file mode 100644
index 0000000..3e64938
--- /dev/null
+++ b/src/File.php
@@ -0,0 +1,8 @@
+<?php
+
+namespace Lightscale\LaralightAssets;
+
+class File
+{
+
+}
diff --git a/src/JsonManifestParser.php b/src/JsonManifestParser.php
new file mode 100644
index 0000000..9293af1
--- /dev/null
+++ b/src/JsonManifestParser.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace Lightscale\LaralightAssets;
+
+use Lightscale\LaralightAssets\Contracts\ManifestParser;
+
+class JsonManifestParser implements ManifestParser
+{
+    public function parse(string $data): array
+    {
+        return json_decode($data, true);
+    }
+}
diff --git a/src/Manifest.php b/src/Manifest.php
new file mode 100644
index 0000000..b7c5e96
--- /dev/null
+++ b/src/Manifest.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Lightscale\LaralightAssets;
+
+class Manifest
+{
+    private ?array $data;
+
+    public function __construct(
+        private string $path,
+        private string $baseUrl,
+        private string $parserClass = JsonManifestParser::class,
+    ) {}
+
+    private function readFile(): string
+    {
+        return filegetcontents($this->path);
+    }
+
+    private function loadData(): void
+    {
+        $data = $this->readFile();
+        $parser = new $this->parserClass;
+        $this->data = $parser->parse($data);
+    }
+
+    private function getData(): array
+    {
+        if ($this->data === null) $this->loadData();
+        return $this->data;
+    }
+
+    public function getFile(string $file): ?string
+    {
+        return $this->getData()[$file] ?? null;
+    }
+
+    public function getUrl(string $file): ?string
+    {
+        $file = $this->getFile($file);
+        return $file === null ? null : "{$this->baseUrl}/{$file}";
+    }
+
+    public function getPath(string $file): ?string
+    {
+        $file = $this->getFile($file);
+        $dir = $this->getDir();
+        return $file === null ? null : "{$dir}/{$file}";
+    }
+
+}
-- 
cgit v1.2.3