blob: d6deb8bd447854888effd8d173c84e7c4fc00562 [file] [log] [blame] [view]
# Component resolvers
Component resolvers extend the component framework through an
[environment][glossary.environment] to resolve a
[component URL][glossary.component-url] into a component.
Component manager resolves component URLs by finding a resolver that supports a
matching URL scheme in the relevant environment and sending a request using the
[`fuchsia.component.resolution.Resolver`][fidl-resolver] protocol.
If resolution succeeds, the component resolver returns a
[`ComponentDecl`][fidl-decl], the FIDL representation of a
[component manifest][component-manifest]. If the component being resolved has
an associated package, the component resolver also returns a
[`fuchsia.io.Directory`][fidl-directory] handle for the package directory.
## Providing resolver capabilities {#provide}
To provide a resolver capability, a component must declare a `resolver`
capability, whose `path` designates a FIDL protocol implementing
[`fuchsia.component.resolution.Resolver`][fidl-resolver] served from the component's
[outgoing directory][glossary.outgoing-directory].
```json5
{
capabilities: [
{
resolver: "my_resolver",
path: "/svc/fuchsia.component.resolution.Resolver",
},
],
}
```
Component manager submits requests to resolve a component URL to this protocol.
## Routing resolver capabilities {#route}
Components route resolver capabilities by [exposing](#expose) them to their
parent and [offering](#offer) them to their children.
For more details on how the framework routes component capabilities,
see [capability routing][capability-routing].
### Exposing {#expose}
Exposing a resolver capability gives the component's parent access to that
capability:
```json5
{
expose: [
{
resolver: "my_resolver",
from: "self",
},
],
}
```
### Offering {#offer}
Offering a resolver capability gives a child component access to that
capability:
```json5
{
offer: [
{
resolver: "my_resolver",
from: "self",
to: [ "#child-a" ],
},
],
}
```
## Registering a component resolver {#register}
Component resolvers are made available to components through their
[environment][environment]. To register a new resolver within an environment,
add a new entry to the `resolvers` section of the `environments` declaration:
```json5
environments: [
{
name: "my-environ",
extends: "realm",
resolvers: [
{
resolver: "my_resolver",
scheme: "my-scheme",
from: "parent",
}
],
},
]
```
The registered resolver will be used to resolve component URLs whose URL scheme
matches the provided `scheme`.
For more details on how to apply environments to components, see the
[environments documentation][environment].
## Framework resolvers {#framework}
Component framework provides the following built-in component resolvers to
support standard Fuchsia URL schemes:
| Resolver | URL scheme |
| ------------------- | -------------------------- |
| `boot_resolver` | [`fuchsia-boot`][url-boot] |
| `base_resolver` | [`fuchsia-pkg`][url-pkg] |
| `full-resolver` | [`fuchsia-pkg`][url-pkg] |
[glossary.component-url]: /docs/glossary/README.md#component-url
[glossary.environment]: /docs/glossary/README.md#environment
[glossary.outgoing-directory]: /docs/glossary/README.md#outgoing-directory
[capability-routing]: /docs/concepts/components/v2/capabilities/README.md#routing
[component-manifest]: /docs/concepts/components/v2/component_manifests.md
[environment]: /docs/concepts/components/v2/environments.md
[fidl-resolver]: /sdk/fidl/fuchsia.component.resolution/resolver.fidl
[fidl-decl]: /sdk/fidl/fuchsia.component.decl/component.fidl
[fidl-directory]: /sdk/fidl/fuchsia.io/directory.fidl
[url-boot]: /docs/reference/components/url.md#fuchsia-boot
[url-pkg]: /docs/reference/components/url.md#fuchsia-pkg