UNPKG

adonisjs-livewire

Version:

A front-end framework for AdonisJS

65 lines (64 loc) 1.88 kB
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); }, }; }