blob: d4397fb66b784bd58476752cbe97fcffc4779685 [file] [log] [blame] [view] [edit]
<!--
Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
for details. All rights reserved. Use of this source code is governed by a
BSD-style license that can be found in the LICENSE file.
-->
# Dynamic interface specification
This file describes the format of dynamic_interface.yaml file.
Dynamic interface specifies classes and members of the host
application which can be used, extended,
implemented and overridden by a dynamically loaded module.
TODO(alexmarkov) Add a link to dynamic module API.
The dynamic interface yaml file can contain the following sections:
```
callable:
- item 1
...
- item N
extendable:
- item 1
...
- item N
can-be-overridden:
- item 1
...
- item N
```
`callable` section specifies members which can be
called from dynamic module and classes which can be
referenced in types of dynamic module.
`extendable` section specifies classes which dynamic module can be
extend, mix-in or implement.
`can-be-overridden` section specifies instance members which
dynamic module can override.
## Library
```
- library: '<library-uri>'
```
Library item specifies all _public_ classes and members in the given
library. Public members of private classes are not included.
## Library prefix
```
- library: '<prefix>*'
```
Library prefix item specifies all _public_ classes and members of
all libraries with given prefix. Public members of private classes are not included.
## Class
```
- library: '<library-uri>'
class: '<class-name>'
```
Class item specifies given class and all _public_ members of this class.
## Class list
```
- library: '<library-uri>'
class: ['<class-name-1>', ..., 'class-name-N']
```
Class list item specifies given classes and all _public_ members of these classes.
## Library member
```
- library: '<library-uri>'
member: '<member-name>'
```
Library member item specifies given top-level member in the given library.
## Class member
```
- library: '<library-uri>'
class: '<class-name>'
member: '<member-name>'
```
Class member item specifies given member of the given class.
## Example
```
callable:
# All public classes and members in `dart:core`.
- library: 'dart:core'
# All public classes and members in `package:flutter`.
- library: 'package:flutter/*'
# Only `foo` in `package:my_app/dyn_interface.dart`.
- library: 'package:my_app/dyn_interface.dart'
member: foo
# Only `DynInterface.bar` in `package:my_app/dyn_interface.dart`.
- library: 'package:my_app/dyn_interface.dart'
class: DynInterface
member: 'bar'
extendable:
# All public classes in `dart:core`.
- library: 'dart:core'
# `StatefulWidget` and `StatelessWidget` classes in `package:flutter/src/widgets/framework.dart`.
- library: 'package:flutter/src/widgets/framework.dart'
class: ['StatefulWidget', 'StatelessWidget']
can-be-overridden:
# All public classes and members in `dart:core`.
- library: 'dart:core'
# Only `StatelessWidget.build` in `package:flutter/src/widgets/framework.dart`.
- library: 'package:flutter/src/widgets/framework.dart'
class: 'StatelessWidget'
member: 'build'
```