diff --git a/frontend_server_common/lib/src/frontend_server_client.dart b/frontend_server_common/lib/src/frontend_server_client.dart index b517dfe8c..fd992a40c 100644 --- a/frontend_server_common/lib/src/frontend_server_client.dart +++ b/frontend_server_common/lib/src/frontend_server_client.dart @@ -12,9 +12,9 @@ import 'package:dwds/expression_compiler.dart'; import 'package:logging/logging.dart'; import 'package:package_config/package_config.dart'; import 'package:test_common/test_sdk_layout.dart'; -import 'package:uuid/uuid.dart'; import 'utilities.dart'; +import 'uuid.dart'; Logger _logger = Logger('FrontendServerClient'); Logger _serverLogger = Logger('FrontendServer'); @@ -320,7 +320,7 @@ class ResidentCompiler { } var server = _server!; - var inputKey = const Uuid().v4(); + var inputKey = generateV4UUID(); server.stdin.writeln('recompile $mainUri$inputKey'); _logger.info('<- recompile $mainUri$inputKey'); for (var fileUri in request.invalidatedFiles) { @@ -463,7 +463,7 @@ class ResidentCompiler { } var server = _server!; - var inputKey = const Uuid().v4(); + var inputKey = generateV4UUID(); server.stdin.writeln('compile-expression $inputKey'); server.stdin.writeln(request.expression); request.definitions.forEach(server.stdin.writeln); @@ -508,7 +508,7 @@ class ResidentCompiler { } var server = _server!; - var inputKey = const Uuid().v4(); + var inputKey = generateV4UUID(); server.stdin.writeln('compile-expression-to-js $inputKey'); server.stdin.writeln(request.libraryUri); server.stdin.writeln(request.line); diff --git a/frontend_server_common/lib/src/uuid.dart b/frontend_server_common/lib/src/uuid.dart new file mode 100644 index 000000000..b375a98a1 --- /dev/null +++ b/frontend_server_common/lib/src/uuid.dart @@ -0,0 +1,32 @@ +// 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 'dart:math' show Random; + +/// A UUID generator. +/// +/// The generated values are 128 bit numbers encoded in a specific string +/// format. +/// +/// Generate a version 4 (random) uuid. This is a uuid scheme that only uses +/// random numbers as the source of the generated uuid. +String generateV4UUID() { + final special = 8 + _random.nextInt(4); + + return '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}-' + '${_bitsDigits(16, 4)}-' + '4${_bitsDigits(12, 3)}-' + '${_printDigits(special, 1)}${_bitsDigits(12, 3)}-' + '${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}${_bitsDigits(16, 4)}'; +} + +final Random _random = Random(); + +String _bitsDigits(int bitCount, int digitCount) => + _printDigits(_generateBits(bitCount), digitCount); + +int _generateBits(int bitCount) => _random.nextInt(1 << bitCount); + +String _printDigits(int value, int count) => + value.toRadixString(16).padLeft(count, '0'); diff --git a/frontend_server_common/pubspec.yaml b/frontend_server_common/pubspec.yaml index d4bb1dc64..0e1fde902 100644 --- a/frontend_server_common/pubspec.yaml +++ b/frontend_server_common/pubspec.yaml @@ -17,4 +17,3 @@ dependencies: pub_semver: ^2.1.1 test_common: path: ../test_common - uuid: ^3.0.7