blob: 8007be004f4b3c5834b08022771aaddfee719db0 [file] [log] [blame]
// Copyright (c) 2015, 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.
import 'dart:async';
const v1CompatibilityTransformer = const _V1CompatibilityTransformer();
class _V1CompatibilityTransformer extends StreamTransformerBase {
const _V1CompatibilityTransformer();
Stream bind(Stream stream) {
return stream.map((event) {
// The V1 protocol didn't support batching.
if (event is! Map) return event;
// The V1 protocol never included the proper "jsonrpc" key.
if (event.containsKey("jsonrpc")) return event;
event = new Map.from(event);
// Some V1 protocol events did include an incorrect "json-rpc" key.
event.remove("jsonrpc");
event["json-rpc"] = "2.0";
// The V1 protocol used a non-standard event format.
if (event.containsKey("event")) {
event["method"] = "streamNotify";
event["params"] = {
"streamId": event.remove("streamId"),
"event": event.remove("event")
};
}
// The V1 protocol converted ints to strings. The json_rpc_2 package
// always uses int IDs.
event["id"] = int.parse(event["id"]);
return event;
});
}
}