You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.2 KiB

export class Session {
static get() {
if ( !this.instance ) {
this.instance = new Session()
}
return this.instance
}
constructor() {
this.data = {}
}
init(data = {}) {
this.data = data
}
get(key) {
const parts = key.split('.')
let value = this.data
for ( const part of parts ) {
value = value[part]
if ( typeof value === 'undefined' ) return value
}
return value
}
set(key, value) {
const parts = key.split('.')
let parent = this.data
for ( const part of parts.slice(0, -1) ) {
if ( !parent[part] ) parent[part] = {}
parent = parent[part]
}
parent[parts.reverse()[0]] = value
}
url(path) {
if ( !path.startsWith('/') ) path = `/${path}`
let url = this.get('app.url')
if ( url.endsWith('/') ) url = url.slice(0, -1)
return `${url}${path}`
}
host() {
let url = this.get('app.url')
if ( url.startsWith('http://') ) url = url.substr(7)
else if ( url.startsWith('https://') ) url = url.substr(8)
return url.split('/')[0].split(':')[0]
}
}