-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[native_assets_cli] Unify metadata and assets #1251
Comments
@bdero Just a heads up, we might break the metadata soon (or temporarily remove it until we find an API that we want to add to do this). As a workaround, you could try to build the compiler in |
I thought I had posted an API sketch here earlier, but apparently I didn't. My current way of thinking is: void addAsset(
Asset asset, {
Iterable<Uri>? dependencies,
bool forBuildHooks, // if true, not bundled, but available to build hooks that have this build hook as direct dependency
String? linkInPackage, // if set, not bundled directly but sent to specific link hook
}); This way we can properly track dependencies per asset no matter where these assets are wired to: |
We might not address this issue fully before stable. * #1251 But we're quite sure to remove the current metadata API, so deprecate it.
The API is starting to look a bit overloaded with arguments. I wonder if there is a way to simplify this. Maybe use asset types instead? This would make asset creation a bit more nested. class MetadataAsset {
final Asset asset;
}
class LinkableAsset {
final String targetPackage;
final Asset asset;
} @lrhn, as you like to simplify APIs :) |
Or maybe we should have a "Routing" (name tbd) param instead. That would also give us a place to document the behavior. addAsset(
Asset asset, {
Routing routing = const Routing.bundleInApp,
});
final class Routing {
/// This asset will be bundled in the app by the Dart or Flutter SDK.
static const Routing bundleInApp;
/// This asset is available in build hooks of which the packages have a
/// direct dependency on the package with this build hook.
static const Routing forBuildHooks;
/// The asset will not be bundled during the build step, but sent as input to
/// the link hook of the specified package, where it can be further processed
/// and possibly bundled.
factory Routing.linkInPackage(String packageName)
} |
We currently have 3 types of output of a build hook:
The most common use cases for metadata are:
Maybe there are other use cases but, we haven't come up with them yet.
If there's a use case for structured data, it might be fine to just put that structured data in a json file and make it a data asset.
Unifying these 3 types of assets would:
addAsset(...)
for assets for bundling andassetAsset(linkIn: 'some_package', ...)
for sending it to a link hook, andaddMetadata(...)
for sending info to another build hook.)Then we need to come up with some name for these 3 types of "buildables".
Thanks @mosuem @mkustermann @liamappelbe @HosseinYousefi for the input! And please leave any other thoughts and suggestions.
The text was updated successfully, but these errors were encountered: