Source: typedefs/typedef.js

/**
 * The definition object for a Page
 *
 * @typedef {Object} Page~PageDefinition
 * @property {String} name - the name of the page
 * @property {String} path - the relative path to this page
 * @property {Object} params - a map of query params to set when navigating to this page
 * @property {Array.<View~ViewDefinition>} [views] - views belonging to this Page
 * @property {Array.<Component~ComponentDefinition>} [components] - components to add to this Page
 */

/**
 * The definition object for a View
 *
 * @typedef {Object} View~ViewDefinition
 * @property {String} name - the name of the page
 * @property {String} locator - the locator for this page (can be a css selector or a {@link http://www.protractortest.org/#/api?view=ProtractorBy|ProtractorBy} locator)
 * @property {Array.<Component~ComponentDefinition>} [components] - components to add to this View
 */

/**
 * The definition object for a Component
 *
 * @typedef {Object} Component~ComponentDefinition
 * @property {String} name - the name of the component
 * @property {String} locator - the locator for this component (can be a css selector or a {@link http://www.protractortest.org/#/api?view=ProtractorBy|ProtractorBy} locator)
 * @property {Component|View|Page} [parent] - the parent component for this component. $locator should be relative to this parent.
 * @property {Object.<String, Function>} [methods] - a map of functions to be added as instance methods to this component
 * @property {Array.<ComponentDefinition>} [components] - sub-components to add to this Component
 */