Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Unified Diff: dart/sdk/lib/_internal/pub/asset/dart/serialize/aggregate_transform.dart

Issue 310233002: Expose aggregate transformers in pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: code review Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: dart/sdk/lib/_internal/pub/asset/dart/serialize/aggregate_transform.dart
diff --git a/dart/sdk/lib/_internal/pub/asset/dart/serialize/transform.dart b/dart/sdk/lib/_internal/pub/asset/dart/serialize/aggregate_transform.dart
similarity index 58%
copy from dart/sdk/lib/_internal/pub/asset/dart/serialize/transform.dart
copy to dart/sdk/lib/_internal/pub/asset/dart/serialize/aggregate_transform.dart
index 38e2ff1d0f48ad1ecc18cebf081b1c11c150870b..da8a5afae86e90929574af115ba73e15a1143796 100644
--- a/dart/sdk/lib/_internal/pub/asset/dart/serialize/transform.dart
+++ b/dart/sdk/lib/_internal/pub/asset/dart/serialize/aggregate_transform.dart
@@ -2,26 +2,26 @@
// 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.
-library pub.asset.serialize.transform;
+library pub.asset.serialize.aggregate_transform;
import 'dart:async';
import 'dart:isolate';
-import 'dart:convert';
import 'package:barback/barback.dart';
// TODO(nweiz): don't import from "src" once issue 14966 is fixed.
import 'package:barback/src/internal_asset.dart';
import '../serialize.dart';
-import '../utils.dart';
+import 'get_input_transform.dart';
-/// Serialize the methods shared between [Transform] and [DeclaringTransform].
+/// Serialize the methods shared between [AggregateTransform] and
+/// [DeclaringAggregateTransform].
///
/// [additionalFields] contains additional serialized fields to add to the
/// serialized transform. [methodHandlers] is a set of additional methods. Each
/// value should take a JSON message and return the response (which may be a
/// Future).
-Map _serializeBaseTransform(transform, Map additionalFields,
+Map _serializeBaseAggregateTransform(transform, Map additionalFields,
Map<String, Function> methodHandlers) {
var receivePort = new ReceivePort();
receivePort.listen((wrappedMessage) {
@@ -30,7 +30,7 @@ Map _serializeBaseTransform(transform, Map additionalFields,
if (handler != null) return handler(message);
if (message['type'] == 'consumePrimary') {
- transform.consumePrimary();
+ transform.consumePrimary(deserializeId(message['assetId']));
return null;
}
@@ -51,13 +51,17 @@ Map _serializeBaseTransform(transform, Map additionalFields,
});
});
- return {'port': receivePort.sendPort}..addAll(additionalFields);
+ return {
+ 'port': receivePort.sendPort,
+ 'key': transform.key,
+ 'package': transform.package
+ }..addAll(additionalFields);
}
/// Converts [transform] into a serializable map.
-Map serializeTransform(Transform transform) {
- return _serializeBaseTransform(transform, {
- 'primaryInput': serializeAsset(transform.primaryInput)
+Map serializeAggregateTransform(AggregateTransform transform) {
+ return _serializeBaseAggregateTransform(transform, {
+ 'primaryInputs': serializeStream(transform.primaryInputs, serializeAsset)
}, {
'getInput': (message) => transform.getInput(deserializeId(message['id']))
.then((asset) => serializeAsset(asset)),
@@ -67,27 +71,35 @@ Map serializeTransform(Transform transform) {
}
/// Converts [transform] into a serializable map.
-Map serializeDeclaringTransform(DeclaringTransform transform) {
- return _serializeBaseTransform(transform, {
- 'primaryId': serializeId(transform.primaryId)
+Map serializeDeclaringAggregateTransform(
+ DeclaringAggregateTransform transform) {
+ return _serializeBaseAggregateTransform(transform, {
+ 'primaryIds': serializeStream(transform.primaryIds, serializeId)
}, {
'declareOutput': (message) =>
transform.declareOutput(deserializeId(message['output']))
});
}
-/// The base class for wrappers for [Transform]s that are in the host isolate.
-class _ForeignBaseTransform {
+/// The base class for wrappers for [AggregateTransform]s that are in the host
+/// isolate.
+class _ForeignBaseAggregateTransform {
/// The port with which we communicate with the host isolate.
///
/// This port and all messages sent across it are specific to this transform.
final SendPort _port;
+ final String key;
+
+ final String package;
+
TransformLogger get logger => _logger;
TransformLogger _logger;
- _ForeignBaseTransform(Map transform)
- : _port = transform['port'] {
+ _ForeignBaseAggregateTransform(Map transform)
+ : _port = transform['port'],
+ key = transform['key'],
+ package = transform['package'] {
_logger = new TransformLogger((assetId, level, message, span) {
call(_port, {
'type': 'log',
@@ -99,20 +111,28 @@ class _ForeignBaseTransform {
});
}
- void consumePrimary() {
- call(_port, {'type': 'consumePrimary'});
+ void consumePrimary(AssetId id) {
+ call(_port, {'type': 'consumePrimary', 'assetId': serializeId(id)});
}
}
-/// A wrapper for a [Transform] that's in the host isolate.
+// We can get away with only removing the class declarations in incompatible
+// barback versions because merely referencing undefined types in type
+// annotations isn't a static error. Only implementing an undefined interface is
+// a static error.
+//# if barback >=0.14.1-dev
+
+/// A wrapper for an [AggregateTransform] that's in the host isolate.
///
/// This retrieves inputs from and sends outputs and logs to the host isolate.
-class ForeignTransform extends _ForeignBaseTransform implements Transform {
- final Asset primaryInput;
+class ForeignAggregateTransform extends _ForeignBaseAggregateTransform
+ with GetInputTransform implements AggregateTransform {
+ final Stream<Asset> primaryInputs;
/// Creates a transform from a serialized map sent from the host isolate.
- ForeignTransform(Map transform)
- : primaryInput = deserializeAsset(transform['primaryInput']),
+ ForeignAggregateTransform(Map transform)
+ : primaryInputs = deserializeStream(
+ transform['primaryInputs'], deserializeAsset),
super(transform);
Future<Asset> getInput(AssetId id) {
@@ -122,21 +142,6 @@ class ForeignTransform extends _ForeignBaseTransform implements Transform {
}).then(deserializeAsset);
}
- Future<String> readInputAsString(AssetId id, {Encoding encoding}) {
- if (encoding == null) encoding = UTF8;
- return getInput(id).then((input) => input.readAsString(encoding: encoding));
- }
-
- Stream<List<int>> readInput(AssetId id) =>
- futureStream(getInput(id).then((input) => input.read()));
-
- Future<bool> hasInput(AssetId id) {
- return getInput(id).then((_) => true).catchError((error) {
- if (error is AssetNotFoundException && error.id == id) return false;
- throw error;
- });
- }
-
void addOutput(Asset output) {
call(_port, {
'type': 'addOutput',
@@ -145,14 +150,16 @@ class ForeignTransform extends _ForeignBaseTransform implements Transform {
}
}
-/// A wrapper for a [DeclaringTransform] that's in the host isolate.
-class ForeignDeclaringTransform extends _ForeignBaseTransform
- implements DeclaringTransform {
- final AssetId primaryId;
+/// A wrapper for a [DeclaringAggregateTransform] that's in the host isolate.
+class ForeignDeclaringAggregateTransform
+ extends _ForeignBaseAggregateTransform
+ implements DeclaringAggregateTransform {
+ final Stream<AssetId> primaryIds;
/// Creates a transform from a serializable map sent from the host isolate.
- ForeignDeclaringTransform(Map transform)
- : primaryId = deserializeId(transform['primaryId']),
+ ForeignDeclaringAggregateTransform(Map transform)
+ : primaryIds = deserializeStream(
+ transform['primaryIds'], deserializeId),
super(transform);
void declareOutput(AssetId id) {
@@ -162,3 +169,5 @@ class ForeignDeclaringTransform extends _ForeignBaseTransform
});
}
}
+
+//# end

Powered by Google App Engine
This is Rietveld 408576698