All files / mixins MetadataInitializerMixin.ts

100% Statements 15/15
50% Branches 1/2
100% Functions 3/3
100% Lines 15/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 583x   3x 3x 3x             3x     9x                       13x   13x                   13x   13x   13x   13x   13x         40x         3x  
import classMetadataRegistry from "../helpers/classMetadataRegistry";
import { CustomElementPropertyMetadata, CustomElementStateMetadata } from "../interfaces";
import AttributeChangeHandlerMixin from "./AttributeChangeHandlerMixin";
import StateChangeHandlerMixin from "./StateChangeHandlerMixin";
import StylesMetadataInitializerMixin from "./StylesMetadataInitializerMixin";
 
/**
 * Initializes a web component type (not instance) from the metadata provided
 * @param Base The base class to extend
 * @returns The mixin class
 */
const MetadataInitializerMixin = Base =>
 
    //@ts-ignore
    class MetadataInitializer extends
        StylesMetadataInitializerMixin(
            StateChangeHandlerMixin( // This one extends from StateMetadataInitializer
                AttributeChangeHandlerMixin( // This one extends from PropertyMetadataInitializer
                    Base
                )
            )
        ) {
 
        static get observedAttributes(): string[] {
 
            // Initialize the metadata
            Eif (!classMetadataRegistry.has(this)) {
 
                classMetadataRegistry.set(this, {
                    properties: new Map<string, CustomElementPropertyMetadata>(),
                    observedAttributes: [],
                    state: new Map<string, CustomElementStateMetadata>(),
                    styles: []
                });
            }
 
            const {
                metadata
            } = this;
 
            (this as any).initalizeProperties(metadata);
 
            (this as any).initializeState(metadata);
 
            (this as any).initializeStyles(metadata);
 
            return metadata.observedAttributes;
        }
 
        static get metadata() {
 
            return classMetadataRegistry.get(this);
        }
 
    }
 
export default MetadataInitializerMixin;