blob: da56e2eae0622b6e1d2a836839abff30d448fa34 [file] [log] [blame]
// Copyright (c) 2025, 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:convert';
import 'package:analysis_server/src/session_logger/log_entry.dart';
import 'package:analyzer/file_system/file_system.dart';
/// The content of a log file.
class Log {
/// The entries in the log.
final List<LogEntry> entries;
/// Creates a log by reading the content of the [file] and decoding it as a
/// list of entries.
factory Log.fromFile(File file, Map<String, String> replacements) {
return Log.fromString(file.readAsStringSync(), replacements);
}
/// Creates a log by decoding the [logContent] as a list of entries.
///
/// The [logContent] should not include the opening and closing delimiters
/// for a Json array ('[' and ']'), but otherwise should be a comma-separated
/// list of json-encoded log entries.
///
/// Each entry in [replacements] is all occurences of the key replaced with
/// the value.
factory Log.fromString(String logContent, Map<String, String> replacements) {
logContent = logContent.trim();
for (var entry in replacements.entries) {
logContent = logContent.replaceAll(entry.key, entry.value);
}
if (logContent.endsWith(',')) {
logContent = logContent.substring(0, logContent.length - 1);
}
var list = json.decode('[$logContent]') as List<dynamic>;
return Log._(list.cast<LogEntry>().toList());
}
Log._(this.entries);
}