# src/MapShadow.js

    import {
    	iteratorFor,
    	iterateOver,
    } from "akutils";

    import Shadow from "./Shadow";

    /**
    	Default shadow api for the `MapProperty`. Exposes the {@link Map} interface.

    	@see {@link MapProperty}
    */
    export default class MapShadow extends Shadow {
    	constructor(impl) {
    		super(impl)
    	}

    	//------------------------------------------------------------------------------------------------------
    	// Select Map methods (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)
    	//------------------------------------------------------------------------------------------------------

    	get size() {
    		return this.__().size();
    	}

    	clear() {
    		this.__().clear();
    	}

    	delete(key) {
    		return this.__().delete(key);
    	}

    	entries() {
    		return iterateOver(this.__().keys(), key => [ key, this.get(key) ] );
    	}

    	get(key) {
    		const childImpl = this.__().get(key);

    		return childImpl && childImpl.shadow();
    	}

    	has(key) {
    		return this.__().has(key);
    	}

    	keys() {
    		return iteratorFor(this.__().keys());
    	}

    	keysArray() {
    		return this.__().keys();
    	}

    	set(key, value) {
    		return this.__().set(key, value);
    	}

    	values() {
    		return iterateOver(this.__().keys(), key => this.get(key));
    	}

    	valuesArray() {
    		return this.__().values().map( v => v.shadow() )
    	}

    	[Symbol.iterator]() { return this.entries() }
    }