@antischematic/angular-state-library
Version:
Reactive state without boilerplate
45 lines • 7.77 kB
JavaScript
import { ChangeDetectorRef } from "@angular/core";
export const meta = new WeakMap();
export const action = Symbol("action");
export const selector = Symbol("selector");
export const tracked = Symbol("track");
export const injector = Symbol("injector");
export const caught = Symbol("caught");
export const attach = Symbol("attach");
function ensureKey(target, key) {
return target.has(key) ? target.get(key) : target.set(key, new Map()).get(key);
}
export function getMetaKeys(metaKey, target) {
return ensureKey(ensureKey(meta, target), metaKey);
}
export function getMeta(metaKey, target, key) {
return getMetaKeys(metaKey, target).get(key);
}
export function setMeta(metaKey, value, target, key) {
return ensureKey(ensureKey(meta, target), metaKey).set(key, value);
}
export function getMetaValues(metaKey, target) {
return Array.from(getMetaKeys(metaKey, target).values());
}
export function getActions(target, phase) {
return getMetaValues(action, target).filter(meta => phase ? meta.phase === phase : true);
}
export function getSelectors(target, withDescriptor) {
return getMetaValues(selector, target).filter(selector => !!selector.descriptor === withDescriptor);
}
export function getErrorHandlers(target) {
return getMetaValues(caught, target);
}
export function getDeps(target, key) {
return getMeta(tracked, target, key);
}
export function getToken(token, context, key) {
return getMeta(injector, context, key)?.get(token);
}
export function markDirty(context) {
getToken(ChangeDetectorRef, context).markForCheck();
}
export function getAttachments(target) {
return getMetaValues(attach, target);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9tZXRhZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBVXpFLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDdEMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUMxQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDMUMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUN0QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBRXRDLFNBQVMsU0FBUyxDQUFDLE1BQXlCLEVBQUUsR0FBUTtJQUNuRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLENBQUE7QUFDbkYsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUksT0FBWSxFQUFFLE1BQWM7SUFDeEQsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUNyRCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBSSxPQUFZLEVBQUUsTUFBYyxFQUFFLEdBQWlCO0lBQ3ZFLE9BQU8sV0FBVyxDQUFNLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDcEQsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsT0FBWSxFQUFFLEtBQVUsRUFBRSxNQUFjLEVBQUUsR0FBaUI7SUFDaEYsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ3JFLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFJLE9BQVksRUFBRSxNQUFjO0lBQzFELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQU0sT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7QUFDaEUsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBVSxFQUFFLEtBQWE7SUFDakQsT0FBTyxhQUFhLENBQWlCLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUMzRyxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBSSxNQUFVLEVBQUUsY0FBdUI7SUFDaEUsT0FBTyxhQUFhLENBQUksUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLGNBQWMsQ0FBQyxDQUFBO0FBQ3pHLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBVTtJQUN4QyxPQUFPLGFBQWEsQ0FBaUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ3ZELENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLE1BQVUsRUFBRSxHQUFnQjtJQUNqRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFJLEtBQXVCLEVBQUUsT0FBVyxFQUFFLEdBQVk7SUFDM0UsT0FBTyxPQUFPLENBQVcsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUE7QUFDaEUsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBVztJQUNsQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUE7QUFDdEQsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBVTtJQUN0QyxPQUFPLGFBQWEsQ0FBZ0MsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBJbmplY3RvciwgUHJvdmlkZXJUb2tlbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gICBBY3Rpb25NZXRhZGF0YSxcbiAgIENhdWdodE1ldGFkYXRhLFxuICAgRGVwTWFwLFxuICAgTWV0YWRhdGEsXG4gICBQaGFzZSxcbiAgIFNlbGVjdE1ldGFkYXRhLFxufSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCBjb25zdCBtZXRhID0gbmV3IFdlYWtNYXAoKVxuXG5leHBvcnQgY29uc3QgYWN0aW9uID0gU3ltYm9sKFwiYWN0aW9uXCIpXG5leHBvcnQgY29uc3Qgc2VsZWN0b3IgPSBTeW1ib2woXCJzZWxlY3RvclwiKVxuZXhwb3J0IGNvbnN0IHRyYWNrZWQgPSBTeW1ib2woXCJ0cmFja1wiKVxuZXhwb3J0IGNvbnN0IGluamVjdG9yID0gU3ltYm9sKFwiaW5qZWN0b3JcIilcbmV4cG9ydCBjb25zdCBjYXVnaHQgPSBTeW1ib2woXCJjYXVnaHRcIilcbmV4cG9ydCBjb25zdCBhdHRhY2ggPSBTeW1ib2woXCJhdHRhY2hcIilcblxuZnVuY3Rpb24gZW5zdXJlS2V5KHRhcmdldDogV2Vha01hcDxhbnksIGFueT4sIGtleTogYW55KSB7XG4gICByZXR1cm4gdGFyZ2V0LmhhcyhrZXkpID8gdGFyZ2V0LmdldChrZXkpISA6IHRhcmdldC5zZXQoa2V5LCBuZXcgTWFwKCkpLmdldChrZXkpIVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YUtleXM8VD4obWV0YUtleTogYW55LCB0YXJnZXQ6IG9iamVjdCk6IE1hcDx1bmtub3duLCBNZXRhZGF0YTxUPj4ge1xuICAgcmV0dXJuIGVuc3VyZUtleShlbnN1cmVLZXkobWV0YSwgdGFyZ2V0KSwgbWV0YUtleSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGE8VD4obWV0YUtleTogYW55LCB0YXJnZXQ6IG9iamVjdCwga2V5PzogUHJvcGVydHlLZXkpOiBNZXRhZGF0YTxUPiB8IHVuZGVmaW5lZCB7XG4gICByZXR1cm4gZ2V0TWV0YUtleXM8YW55PihtZXRhS2V5LCB0YXJnZXQpLmdldChrZXkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRNZXRhKG1ldGFLZXk6IGFueSwgdmFsdWU6IGFueSwgdGFyZ2V0OiBvYmplY3QsIGtleT86IFByb3BlcnR5S2V5KSB7XG4gICByZXR1cm4gZW5zdXJlS2V5KGVuc3VyZUtleShtZXRhLCB0YXJnZXQpLCBtZXRhS2V5KS5zZXQoa2V5LCB2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFWYWx1ZXM8VD4obWV0YUtleTogYW55LCB0YXJnZXQ6IG9iamVjdCk6IE1ldGFkYXRhPFQ+W10ge1xuICAgcmV0dXJuIEFycmF5LmZyb20oZ2V0TWV0YUtleXM8YW55PihtZXRhS2V5LCB0YXJnZXQpLnZhbHVlcygpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9ucyh0YXJnZXQ6IHt9LCBwaGFzZT86IFBoYXNlKSB7XG4gICByZXR1cm4gZ2V0TWV0YVZhbHVlczxBY3Rpb25NZXRhZGF0YT4oYWN0aW9uLCB0YXJnZXQpLmZpbHRlcihtZXRhID0+IHBoYXNlID8gbWV0YS5waGFzZSA9PT0gcGhhc2UgOiB0cnVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzPFQ+KHRhcmdldDoge30sIHdpdGhEZXNjcmlwdG9yOiBib29sZWFuKSB7XG4gICByZXR1cm4gZ2V0TWV0YVZhbHVlczxUPihzZWxlY3RvciwgdGFyZ2V0KS5maWx0ZXIoc2VsZWN0b3IgPT4gISFzZWxlY3Rvci5kZXNjcmlwdG9yID09PSB3aXRoRGVzY3JpcHRvcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9ySGFuZGxlcnModGFyZ2V0OiB7fSkge1xuICAgcmV0dXJuIGdldE1ldGFWYWx1ZXM8Q2F1Z2h0TWV0YWRhdGE+KGNhdWdodCwgdGFyZ2V0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVwcyh0YXJnZXQ6IHt9LCBrZXk6IFByb3BlcnR5S2V5KTogRGVwTWFwIHwgdW5kZWZpbmVkIHtcbiAgIHJldHVybiBnZXRNZXRhKHRyYWNrZWQsIHRhcmdldCwga2V5KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW48VD4odG9rZW46IFByb3ZpZGVyVG9rZW48VD4sIGNvbnRleHQ6IHt9LCBrZXk/OiBzdHJpbmcpOiBUIHtcbiAgIHJldHVybiBnZXRNZXRhPEluamVjdG9yPihpbmplY3RvciwgY29udGV4dCwga2V5KT8uZ2V0KHRva2VuKSFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtEaXJ0eShjb250ZXh0OiB7fSkge1xuICAgZ2V0VG9rZW4oQ2hhbmdlRGV0ZWN0b3JSZWYsIGNvbnRleHQpLm1hcmtGb3JDaGVjaygpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdHRhY2htZW50cyh0YXJnZXQ6IHt9KSB7XG4gICByZXR1cm4gZ2V0TWV0YVZhbHVlczx7IHRva2VuOiBQcm92aWRlclRva2VuPGFueT4gfT4oYXR0YWNoLCB0YXJnZXQpXG59XG4iXX0=