1e484b35bSopenharmony_ci/* 2e484b35bSopenharmony_ci * Licensed to the Apache Software Foundation (ASF) under one 3e484b35bSopenharmony_ci * or more contributor license agreements. See the NOTICE file 4e484b35bSopenharmony_ci * distributed with this work for additional information 5e484b35bSopenharmony_ci * regarding copyright ownership. The ASF licenses this file 6e484b35bSopenharmony_ci * to you under the Apache License, Version 2.0 (the 7e484b35bSopenharmony_ci * "License"); you may not use this file except in compliance 8e484b35bSopenharmony_ci * with the License. You may obtain a copy of the License at 9e484b35bSopenharmony_ci * 10e484b35bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 11e484b35bSopenharmony_ci * 12e484b35bSopenharmony_ci * Unless required by applicable law or agreed to in writing, 13e484b35bSopenharmony_ci * software distributed under the License is distributed on an 14e484b35bSopenharmony_ci * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15e484b35bSopenharmony_ci * KIND, either express or implied. See the License for the 16e484b35bSopenharmony_ci * specific language governing permissions and limitations 17e484b35bSopenharmony_ci * under the License. 18e484b35bSopenharmony_ci */ 19e484b35bSopenharmony_ci 20e484b35bSopenharmony_ciimport Page from '../page/index'; 21e484b35bSopenharmony_ci 22e484b35bSopenharmony_ci/** 23e484b35bSopenharmony_ci * This class defines the map for the page instances. 24e484b35bSopenharmony_ci */ 25e484b35bSopenharmony_ciexport class PageLinkedMap { 26e484b35bSopenharmony_ci public _map: Page[]; 27e484b35bSopenharmony_ci 28e484b35bSopenharmony_ci constructor() { 29e484b35bSopenharmony_ci this._map = []; 30e484b35bSopenharmony_ci } 31e484b35bSopenharmony_ci 32e484b35bSopenharmony_ci public unshift(instance: Page) { 33e484b35bSopenharmony_ci this._map.unshift(instance); 34e484b35bSopenharmony_ci Object.defineProperty(this, instance.id, { 35e484b35bSopenharmony_ci configurable: true, 36e484b35bSopenharmony_ci enumerable: true, 37e484b35bSopenharmony_ci get: function proxyGetter() { 38e484b35bSopenharmony_ci return proxyGet(this, instance.id); 39e484b35bSopenharmony_ci } 40e484b35bSopenharmony_ci }); 41e484b35bSopenharmony_ci } 42e484b35bSopenharmony_ci 43e484b35bSopenharmony_ci public push(instance: Page) { 44e484b35bSopenharmony_ci this._map.push(instance); 45e484b35bSopenharmony_ci Object.defineProperty(this, instance.id, { 46e484b35bSopenharmony_ci configurable: true, 47e484b35bSopenharmony_ci enumerable: true, 48e484b35bSopenharmony_ci get: function proxyGetter() { 49e484b35bSopenharmony_ci return proxyGet(this, instance.id); 50e484b35bSopenharmony_ci } 51e484b35bSopenharmony_ci }); 52e484b35bSopenharmony_ci } 53e484b35bSopenharmony_ci 54e484b35bSopenharmony_ci public remove(instance: Page) { 55e484b35bSopenharmony_ci const index = this._map.indexOf(instance); 56e484b35bSopenharmony_ci delete this[instance.id]; 57e484b35bSopenharmony_ci // @ts-ignore 58e484b35bSopenharmony_ci delete this._map.splice(index, 1); 59e484b35bSopenharmony_ci } 60e484b35bSopenharmony_ci 61e484b35bSopenharmony_ci public getTop(packageName: string) { 62e484b35bSopenharmony_ci const appMap = this._map.filter(instance => { 63e484b35bSopenharmony_ci return instance.packageName === packageName; 64e484b35bSopenharmony_ci }); 65e484b35bSopenharmony_ci return appMap && appMap[appMap.length - 1]; 66e484b35bSopenharmony_ci } 67e484b35bSopenharmony_ci} 68e484b35bSopenharmony_ci 69e484b35bSopenharmony_cifunction proxyGet(pageLinkedMap: PageLinkedMap, id: string) { 70e484b35bSopenharmony_ci const index = pageLinkedMap._map.map(instance => instance.id).lastIndexOf(id); 71e484b35bSopenharmony_ci return pageLinkedMap._map[index]; 72e484b35bSopenharmony_ci} 73e484b35bSopenharmony_ci 74e484b35bSopenharmony_ciexport const pageMap: PageLinkedMap = new PageLinkedMap(); 75e484b35bSopenharmony_ci 76e484b35bSopenharmony_ciexport const appMap = {}; 77