mirror of
https://github.com/dart-lang/sdk
synced 2024-11-02 12:24:24 +00:00
c4dc032f6c
Change-Id: I4185e3bdc1f0f6f8464ebc2a043254200e3df486 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/233502 Reviewed-by: Samuel Rawlins <srawlins@google.com> Commit-Queue: Devon Carew <devoncarew@google.com>
70 lines
2.3 KiB
Dart
70 lines
2.3 KiB
Dart
// Copyright (c) 2017, 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' show JsonEncoder;
|
|
import 'dart:io' show File, exit, stderr;
|
|
import 'dart:isolate' show RawReceivePort;
|
|
|
|
import 'package:yaml/yaml.dart' show loadYaml;
|
|
|
|
main(List<String> rawArguments) {
|
|
var port = RawReceivePort();
|
|
bool check = false;
|
|
String? relative;
|
|
List<String> arguments = [];
|
|
for (String argument in rawArguments) {
|
|
if (argument == '--check') {
|
|
check = true;
|
|
} else if (argument.startsWith('--relative=')) {
|
|
relative = argument.substring('--relative='.length);
|
|
} else {
|
|
arguments.add(argument);
|
|
}
|
|
}
|
|
if (arguments.length != 2) {
|
|
stderr.writeln("Usage: yaml2json.dart input.yaml output.json [--check]");
|
|
exit(1);
|
|
}
|
|
Uri input = File(arguments[0]).absolute.uri;
|
|
Uri output = File(arguments[1]).absolute.uri;
|
|
String inputString = arguments[0];
|
|
String outputString = arguments[1];
|
|
if (relative != null) {
|
|
String relativeTo = File(relative).absolute.uri.toString();
|
|
if (input.toString().startsWith(relativeTo)) {
|
|
inputString = input.toString().substring(relativeTo.length);
|
|
}
|
|
if (output.toString().startsWith(relativeTo)) {
|
|
outputString = output.toString().substring(relativeTo.length);
|
|
}
|
|
}
|
|
Map yaml = loadYaml(File.fromUri(input).readAsStringSync());
|
|
Map<String, dynamic> result = <String, dynamic>{};
|
|
result["comment:0"] = "NOTE: THIS FILE IS GENERATED. DO NOT EDIT.";
|
|
result["comment:1"] =
|
|
"Instead modify '$inputString' and follow the instructions therein.";
|
|
for (String key in yaml.keys) {
|
|
result[key] = yaml[key];
|
|
}
|
|
File file = File.fromUri(output);
|
|
String text = const JsonEncoder.withIndent(" ").convert(result);
|
|
if (check) {
|
|
bool needsUpdate = true;
|
|
if (file.existsSync()) {
|
|
String existingText = file.readAsStringSync();
|
|
needsUpdate = text != existingText;
|
|
}
|
|
if (needsUpdate) {
|
|
stderr.write('''
|
|
The file $outputString is not up to date. Regenerate using
|
|
|
|
dart tools/yaml2json.dart $inputString $outputString
|
|
''');
|
|
exit(1);
|
|
}
|
|
} else {
|
|
file.writeAsStringSync(text);
|
|
}
|
|
port.close();
|
|
}
|