adonisjs-livewire
Version:
A front-end framework for AdonisJS
65 lines (64 loc) • 1.88 kB
JavaScript
import { AsyncLocalStorage } from 'node:async_hooks';
export class DataStore {
id;
lookup = new WeakMap();
constructor(id) {
this.id = id;
}
push(component, key, value, iKey) {
if (!this.lookup.has(component))
this.lookup.set(component, {});
if (!this.lookup.get(component)[key] && !iKey)
this.lookup.get(component)[key] = [];
if (!this.lookup.get(component)[key] && iKey)
this.lookup.get(component)[key] = {};
if (iKey) {
this.lookup.get(component)[key][iKey] = value;
}
else {
this.lookup.get(component)[key].push(value);
}
}
set(component, key, value) {
if (!this.lookup.has(component))
this.lookup.set(component, {});
this.lookup.get(component)[key] = value;
}
get(component, key) {
return this.lookup.get(component)?.[key] || [];
}
has(component, key) {
return (this.lookup.has(component) && this.lookup.get(component)?.[key]) || false;
}
}
export const livewireContext = new AsyncLocalStorage();
export const getLivewireContext = () => livewireContext.getStore();
export function store(component) {
const s = () => {
let st = getLivewireContext();
if (!st) {
throw new Error('No store found');
}
return st.dataStore;
};
return {
get lookup() {
return s().lookup;
},
id() {
return s().id;
},
push: (key, value, iKey) => {
s().push(component, key, value, iKey);
},
get: (key) => {
return s().get(component, key);
},
has: (key) => {
return s().has(component, key);
},
set: (key, value) => {
s().set(component, key, value);
},
};
}