UNPKG

@etsoo/appscript

Version:

Applications shared TypeScript framework

72 lines (71 loc) 2.25 kB
/** * External settings namespace */ export var ExternalSettings; (function (ExternalSettings) { /** * Sub domain match regular expression */ let subDomainMatch = /(?<=\/\/)[0-9a-z]+(?=\.)/i; /** * Create settings instance * @param settings Settings * @returns Result */ function create(settings, hostname) { // Default settings reading from globalThis settings ??= Reflect.get(globalThis, "settings"); if (settings) { if (typeof settings === "string") { settings = JSON.parse(settings); } if (settings != null && typeof settings === "object" && "endpoint" in settings && "webUrl" in settings) { const s = settings; if (hostname) s.hostname = hostname; return s; } } throw new Error("No external settings found"); } ExternalSettings.create = create; /** * Format the app * @param hostname Hostname * @param app App key * @param endpoint Endpoint * @returns Result */ function formatApp(hostname, app, endpoint) { return formatHost(endpoint, hostname).replace(subDomainMatch, app); } ExternalSettings.formatApp = formatApp; function formatHost(setting, hostname) { // Default hostname hostname ??= globalThis.location.hostname; if (typeof setting === "string") { return setting.replace("{hostname}", hostname); } else { return Object.fromEntries(Object.entries(setting).map(([key, value]) => [ key, { endpoint: formatApp(hostname, key, value.endpoint), webUrl: formatApp(hostname, key, value.webUrl) } ])); } } ExternalSettings.formatHost = formatHost; /** * Update sub domain match regex * @param regex New regex */ function updateSubDomainMatch(regex) { subDomainMatch = regex; } ExternalSettings.updateSubDomainMatch = updateSubDomainMatch; })(ExternalSettings || (ExternalSettings = {}));