ce-decorators
Version:
Custom Element decorators for typescript
48 lines (44 loc) • 1.85 kB
JavaScript
/**
* Copyright (c) 2018 Mathis Zeiher
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
import { getComponentProperties, getAllComponents } from './componentproperties';
import { getClassProperties } from './classproperties';
import { getClassEvents } from './classevents';
/**
* return a catalog of all controls registered with ce-decorators
*/
export function getComponentCatalog() {
const components = getAllComponents();
const catalog = {};
components.forEach(value => {
const componentProperties = getComponentProperties(value);
const properties = {};
Array.from(getClassProperties(value).entries()).forEach(([name, options]) => {
properties[name.toString()] = options;
});
const events = Array.from(getClassEvents(value).values());
catalog[componentProperties.tag] = {
properties,
events
};
});
return catalog;
}
if (!window['CEDECORATORCOMPONENTS']) {
// tslint:disable-line
window['CEDECORATORCOMPONENTS'] = []; // tslint:disable-line
} // ts-lint:disable-line
window['CEDECORATORCOMPONENTS'].push(getComponentCatalog); // tslint:disable-line
//# sourceMappingURL=componentcatalog.js.map