blob: 0f459e62aeb8dbc83e1899b362383dcace43514c [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.sys2;
using fuchsia.data;
/// A component declaration.
///
/// This information is typically encoded in the component manifest (.cm file)
/// if it has one or may be generated at runtime by a component resolver for
/// those that don't.
table ComponentDecl {
/// Information about the program to run when the component is executed.
///
/// The component manager provides the contents of this dictionary to the
/// component runner when executing the program. Each component runner can
/// freely define the contents of this dictionary as needed.
///
/// The system's default runner understands the following entries:
///
/// - "binary": string
/// The path of the executable relative to the root of the package.
/// Typically an ELF binary.
///
/// - "args": vector of strings
/// The command-line arguments to provide to the executable at runtime.
///
/// - "env": dictionary of strings
/// The environment variables to provide to the executable at runtime.
///
/// Other runners may define different entries.
1: fuchsia.data.Dictionary program;
/// List of capabilities used by the component. These consist of
/// capabilities offered to the component that are installed in its incoming
/// namespace.
///
/// The used capabilities must be unique and non-overlapping.
2: vector<UseDecl> uses;
/// List of capabilities exposed by the component. These consist of
/// capabilities that are made visible to the containing realm. The parent
/// may `offer` these capabilities to its children, but not `use` them.
///
/// The exposed capabilities must be unique and non-overlapping.
3: vector<ExposeDecl> exposes;
/// List of capabilities offered to the component’s children. These consist
/// of capabilities that the given children may `use`, which may come from a
/// child, the containing realm, or the component's own outgoing namespace.
///
/// The offered capabilities must be unique and non-overlapping.
4: vector<OfferDecl> offers;
/// Additional metadata about the component.
5: Object facets;
/// The component's statically instantiated children. The children must have
/// unique names.
6: vector<ChildDecl> children;
/// The component's collections. The collections must have unique names.
7: vector<CollectionDecl> collections;
/// List of storage capabilities created by this component.
/// Storage capabilities can be offered to children.
8: vector<StorageDecl> storage;
/// List of runner capabilities created by this component.
/// Runner capabilities can be exposed to the parent's realm or offered to children.
9: vector<RunnerDecl> runners;
/// List of environments created by this component.
/// Environments are assigned to children and control aspects of a child component's
/// runtime.
10: vector<EnvironmentDecl> environments;
/// List of resolver capabilities created by this component.
///
/// A component can:
///
/// - "expose" a resolver capability to its realm,
/// - "offer" a resolver capability to its children,
/// - register a resolver in an environment.
///
/// A component cannot "use" a resolver capability directly. Component manager uses
/// a resolver capability on behalf of a component when that component's environment
/// contains the resolver capability.
11: vector<ResolverDecl> resolvers;
};