blob: 6edf255d5c6de382e5238e671575ce354b2bf3e4 [file] [log] [blame]
// Copyright 2022 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.component.resolution;
using fuchsia.mem;
/// A component is a unit of executable software.
///
/// This object provides the component's declaration, access to its package's
/// content, and relevant metadata as resolved `fuchsia.component.resolution.Resolver`.
type Component = resource table {
/// The resolved URL of the component.
/// This is the canonical URL obtained by the component resolver after
/// following redirects and resolving relative paths.
1: url string:MAX_COMPONENT_URL_LENGTH;
/// Binary representation of the component's declaration (`fuchsia.component.decl.Component`).
/// This information is typically obtained from the component's manifest
/// or generated by the component resolver.
2: decl fuchsia.mem.Data;
/// The package that contains the component.
/// By convention, the component's package is mapped to "/pkg" in its
/// namespace at runtime.
///
/// This is null if the component is not represented as a package.
/// In that case, it is the runner's responsibility to load the component's
/// resource from the `resolved_url`. This mechanism is used for web
/// applications.
///
/// Most runners, including but not limited to the builtin ELF runner,
/// require the package's directory connection to have OPEN_RIGHT_EXECUTABLE
/// rights in order to run the resolved component.
3: package Package;
/// Binary representation of the component's configuration values
/// (`fuchsia.component.config.ValuesData`).
4: config_values fuchsia.mem.Data;
};