|
|
@@ -0,0 +1,100 @@
|
|
|
+/**
|
|
|
+ * This class is responsible for loading assets from the server.
|
|
|
+ */
|
|
|
+export class assets_getter {
|
|
|
+ #app_url;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * This create new assets getter.
|
|
|
+ *
|
|
|
+ * @param {string} app_url - This is base app url
|
|
|
+ */
|
|
|
+ constructor(app_url) {
|
|
|
+ this.#app_url = app_url;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * This fetch file from the config directory.
|
|
|
+ *
|
|
|
+ * @async
|
|
|
+ * @param {string} file - Name of the file to load
|
|
|
+ * @returns {string, object} - Content of the file, or object if json
|
|
|
+ * @throws {Error} - When file not exists on the server
|
|
|
+ * @throws {TypeError} - When JSON file is bad formated
|
|
|
+ */
|
|
|
+ async load(file) {
|
|
|
+ const url = this.#get_url(file);
|
|
|
+ const result = await fetch(url);
|
|
|
+
|
|
|
+ if (!result.ok) {
|
|
|
+ let info = `Can not load file: "${url}", `;
|
|
|
+ info += `status: "${result.status}".`;
|
|
|
+
|
|
|
+ throw new Error(info);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.#is_json(file)) {
|
|
|
+ try {
|
|
|
+ return await result.json();
|
|
|
+ } catch (error) {
|
|
|
+ let info = `JSON file "${file}" is bad formated. `;
|
|
|
+ info += `More: "${error.message}".`;
|
|
|
+
|
|
|
+ throw new TypeError(info);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return await result.text();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @async
|
|
|
+ * @returns {object} - Return enviroment json as object
|
|
|
+ */
|
|
|
+ get enviroment() {
|
|
|
+ return this.load("enviroment.json");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @async
|
|
|
+ * @returns {object} - Return items json as object
|
|
|
+ */
|
|
|
+ get items() {
|
|
|
+ return this.load("items.json");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @async
|
|
|
+ * @returns {object} - Return rooms json as object
|
|
|
+ */
|
|
|
+ get rooms() {
|
|
|
+ return this.load("rooms.json");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @returns {string} - Base config directory on server
|
|
|
+ */
|
|
|
+ get #base_url() {
|
|
|
+ return "/static/config";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * This function generate full URL to the file on server.
|
|
|
+ *
|
|
|
+ * @param {string} file - Name of the file in config location
|
|
|
+ * @returns {string} - Full path to the file on server
|
|
|
+ */
|
|
|
+ #get_url(file) {
|
|
|
+ return `${this.#app_url}/${this.#base_url}/${file}`;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * This function check that file is json.
|
|
|
+ *
|
|
|
+ * @param {string} file - Name of the file to load
|
|
|
+ * @returns {bool} - True if file is json, os false when not
|
|
|
+ */
|
|
|
+ #is_json(file) {
|
|
|
+ return file.substring(file.length - 5) === ".json";
|
|
|
+ }
|
|
|
+}
|