Skip to content

Upgrading build 0.9 to 0.10

Breaking0.9.3 → 0.10.2+1Breaking5New2Changed2Fixed2Other1

BreakingUpgrade verdict

5 breaking changes.

  • 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.
Top 3 of 5 that need code or config changes
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.canRead
Changes AssetReader#findAssets docs so it globs within the current package instead of the root package.
AssetReader#findAssetsbuildStep.inputId.package
Resolver now has asynchronous resolution APIs and is retrieved synchronously from BuildStep.
ResolverBuildStep
Replaces Resolver.getLibrary with libraryFor and getLibraryByName with findLibraryByName.
Resolver.getLibraryResolver.libraryForResolver.getLibraryByNameResolver.findLibraryByName

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>()