@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
JavaScript
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