UNPKG

@gecut/mixins

Version:

A tiny, TypeScript-powered package of hyper-fast LitElement mixins. Enhance your web components with swift, type-safe functionality that’s easy to integrate.

75 lines 2.54 kB
import { GecutLogger } from '@gecut/logger'; import { LitElement } from 'lit'; export function LoggerMixin(superClass) { class LoggerMixinClass extends superClass { constructor() { super(...arguments); Object.defineProperty(this, "log", { enumerable: true, configurable: true, writable: true, value: new GecutLogger(`<${this.tagName.toLowerCase()}>`) }); Object.defineProperty(this, "_$firstUpdated", { enumerable: true, configurable: true, writable: true, value: void 0 }); } connectedCallback() { this.log.method?.('connectedCallback'); super.connectedCallback(); } disconnectedCallback() { this.log.method?.('disconnectedCallback'); super.disconnectedCallback(); } dispatchEvent(event) { this.log.methodArgs?.('dispatchEvent', { type: event.type, detail: event.detail, }); return super.dispatchEvent(event); } remove() { this.log.method?.('remove'); super.remove(); } requestUpdate(name, oldValue, options) { this?.log?.methodArgs?.('requestUpdate', { name, newValue: this[name], oldValue, options, }); super.requestUpdate(name, oldValue, options); } update(changedProperties) { this.log.method?.('update'); this.log.time?.(this._$firstUpdated ? 'update-time' : 'first-update-time'); super.update(changedProperties); } firstUpdated(changedProperties) { this.log.methodArgs?.('firstUpdated', { changedProperties }); this.log.timeEnd?.('first-update-time'); super.firstUpdated(changedProperties); } updated(changedProperties) { this.log.methodArgs?.('updated', { changedProperties }); if (this._$firstUpdated) { this.log.timeEnd?.('update-time'); } else { this._$firstUpdated = true; } super.updated(changedProperties); } render() { this.log.method?.('render'); return; } } return LoggerMixinClass; } //# sourceMappingURL=logger.js.map