blob: 819b614f225a88160981c9e70b782d673cfaf8bb [file]
// Copyright (c) 2024, 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 'package:pub_semver/pub_semver.dart';
import 'helper.dart';
/// Metadata attached to a recorded usages file.
///
/// Whatever [Metadata] should be added to the usage recording. Care should be
/// applied to not include non-deterministic or dynamic data such as timestamps,
/// as this would mess with the usage recording caching.
class Metadata {
/// The underlying data.
///
/// Together with the metadata extension [MetadataExt], this makes the
/// metadata extensible by the user implementing the recording. For example,
/// dart2js might want to store different metadata than the Dart VM.
final Map<String, Object?> json;
const Metadata._({required this.json});
factory Metadata.fromJson(Map<String, Object?> json) =>
Metadata._(json: json);
@override
bool operator ==(covariant Metadata other) {
if (identical(this, other)) return true;
return deepEquals(other.json, json);
}
@override
int get hashCode => deepHash(json);
}
extension MetadataExt on Metadata {
Version get version => Version.parse(json['version'] as String);
String get comment => json['comment'] as String;
}