Upgrading build 0.9 to 0.10
Breaking0.9.3 → 0.10.2+1Breaking5New2Changed2Fixed2Other1
BreakingUpgrade verdict
5 breaking changes.
In plain terms
- Because builders can now run on any package, the previous assumption that only the main package is built no longer holds.
- A deprecated way to check whether a build step can read a file has been removed. Use the replacement check instead.
- File searching now looks in the package being built rather than always the main package, which changes behavior for existing callers.
- Looking up libraries and assets through the resolver is now asynchronous, though you still get the resolver itself directly from the build step.
Must act Top 3 of 5 that need code or config changes
What you must change
Breaking5
Explains that builders can now run on any package, so the old root-package-only behavior no longer makes sense.
Removes the deprecated method BuildStep.hasInput; all uses should go through BuildStep.canRead.
BuildStep.hasInputBuildStep.canReadChanges AssetReader#findAssets docs so it globs within the current package instead of the root package.
AssetReader#findAssetsbuildStep.inputId.packageResolver now has asynchronous resolution APIs and is retrieved synchronously from BuildStep.
ResolverBuildStepReplaces Resolver.getLibrary with libraryFor and getLibraryByName with findLibraryByName.
Resolver.getLibraryResolver.libraryForResolver.getLibraryByNameResolver.findLibraryByNameAPI changes
Generated by DepDelta from published Dart source. Not mixed with prose notes.
- removed:
method BuildStep.hasInput(AssetId id): Future<bool> - removed:
method Resolver.getLibrary(AssetId assetId): LibraryElement - removed:
method Resolver.getLibraryByName(String libraryName): LibraryElement - changed:
ctor AssetId.deserialize(data) → ctor AssetId.deserialize(List data) - changed:
function runBuilder(Builder builder, Iterable<AssetId> inputs, AssetReader reader, AssetWriter writer, Resolvers resolvers, {Logger logger, String rootPackage}): Future<Null> → function runBuilder(Builder builder, Iterable<AssetId> inputs, AssetReader reader, AssetWriter writer, Resolvers resolvers, {Logger logger, ResourceManager resourceManager, @deprecated String rootPackage}): Future<Null> - changed:
get BuildStep.resolver: Future<Resolver> → get BuildStep.resolver: Resolver - changed:
get Resolver.libraries: Iterable<LibraryElement> → get Resolver.libraries: Stream<LibraryElement> - changed:
method AssetReader.canRead(AssetId id): FutureOr<bool> → method AssetReader.canRead(AssetId id): Future<bool> - changed:
method Resolver.isLibrary(AssetId assetId): bool → method Resolver.isLibrary(AssetId assetId): Future<bool> - added:
class MultiPackageAssetReader: abstract extends AssetReader - added:
class Resource<T> - added:
class ResourceManager - added:
ctor Resource(this._create, {DisposeInstance<T> dispose}) - added:
field Resource.Future<T>>: final - added:
method BuildStep.fetchResource<T>(Resource<T> resource): Future<T> - added:
method MultiPackageAssetReader.findAssets(Glob glob, {String package}): Iterable<AssetId> - added:
method Resolver.findLibraryByName(String libraryName): Future<LibraryElement> - added:
method Resolver.libraryFor(AssetId assetId): Future<LibraryElement> - added:
method ResourceManager.disposeAll(): Future<Null> - added:
method ResourceManager.fetch<T>(Resource<T> resource): Future<T> - added:
typedef FutureOr DisposeInstance<T>(T instance) - added:
typedef FutureOr<T> CreateInstance<T>()