All files / custom-element/mixins/core MetadataInitializerMixin.ts

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

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 58 59 60 61 62 63 646x   6x 6x 6x 6x             6x     16x                           23x   23x                       23x   23x   23x   23x   23x   23x         176x       6x  
import classMetadataRegistry from "../../helpers/classMetadataRegistry";
import { CustomElementPropertyMetadata, CustomElementStateMetadata } from "../../interfaces";
import AttributeChangeHandlerMixin from "./AttributeChangeHandlerMixin";
import ComponentMetadataInitializerMixin from "./ComponentMetadataInitializerMixin";
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
                    ComponentMetadataInitializerMixin(
                        Base
                    )      
                )
            )
        ) {
 
        static get observedAttributes(): string[] {
 
            // Initialize the metadata
            Eif (!classMetadataRegistry.has(this)) {
 
                classMetadataRegistry.set(this, {
                    properties: new Map<string, CustomElementPropertyMetadata>(),
                    propertiesByAttribute: new Map<string, CustomElementPropertyMetadata>(),
                    observedAttributes: [],
                    state: new Map<string, CustomElementStateMetadata>(),
                    styles: undefined,
                    shadow: true
                });
            }
 
            const {
                metadata
            } = this;
 
            (this as any).initializeComponent(metadata);
 
            (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;