UNPKG

@osaedasia/oresume

Version:

A user-friendly library for generating complete Single Page Applications (SPAs)

2 lines (1 loc) 1.87 kB
import{Observable as e}from"../observer/Observable.js";import{Task as t}from"../task/Task.js";import{ProgressMessage as r}from"../task/messages/ProgressMessage.js";import{LocalizedUrl as i}from"../../domain/models/LocalizedUrl.js";import{Url as s}from"@osaedasia/std";import{MissingFileExtensionError as o,InvalidFileExtensionError as n}from"../../domain/exceptions/Resource.js";import{JSON_WORKER_URL as a}from"../task/workers/JsonWorkerURL.js";class l{_folderPath;_url;_localizedUrl;_languageService;constructor(e,t){this._languageService=t,this._folderPath=s.normalize(e),this._url=new URL(`${window.location.origin}/${this._folderPath}`),this._localizedUrl=this._generateLocalizedUrl()}get folderPath(){return this._folderPath}get url(){return this._url}get localizedUrl(){return this._localizedUrl}load(t,i){const o=this._assertFileExtension(t),n=s.normalize(this._url.toString()+t,!1),a=new e(new r(0,""));return i(this._handleFileLoading(new URL(n),o,a)),a}loadLocalized(t,i){const o=async()=>{const e=s.normalize(this._localizedUrl.state.url.toString()+t,!1);return await this._handleFileLoading(new URL(e),a,n)},n=new e(new r(0,"")),a=this._assertFileExtension(t);return this._localizedUrl.subscribe((e=>{i(o())})),i(o()),n}_generateLocalizedUrl(){const t=new i(this._url,this._languageService.countryCode.state),r=new e(t);return r.listen(this._languageService.countryCode,(e=>{r.state.languageCode=e})),r}_assertFileExtension(e){if(!e.match(/([.][a-zA-Z]+)$/g))throw new o(`The file must contain an extension: ${e}`);const t=e.substring(e.lastIndexOf(".")+1)||null;if(null===t||0===t.trim().length)throw new n(`The provided file extension is not valid: ${t}`);return t}async _handleFileLoading(e,r,i){if("json"===r){const r=new t(a);return r.service.onProgress((e=>{i.state=e})),await r.service.execute({url:e.toString()})}return e}}export{l as PublicResource};