e1d687cb9e
This CL migrates the `dwds` and `dwds_test_common` packages into the Dart SDK repository. Key Changes: - Migration: Moved source code and tests into `pkg/dwds` & `pkg/dwds_test_common`. - Linting and path resolution were updated in https://github.com/dart-lang/webdev/pull/2797, https://github.com/dart-lang/webdev/pull/2798 & https://github.com/dart-lang/webdev/pull/2799 to support both environments (webdev and sdk). Testing: - All tests passing locally. - CI try bots are green. Design Doc: http://goto.google.com/migrating-webdev and http://goto.google.com/migrating-dwds Fixes https://github.com/dart-lang/sdk/issues/62100 Fixes https://github.com/dart-lang/sdk/issues/62101 Fixes https://github.com/dart-lang/sdk/issues/62102 Fixes https://github.com/dart-lang/sdk/issues/62103 Cq-Include-Trybots: luci.dart.try:pkg-win-release-try,pkg-win-release-arm64-try,pkg-mac-release-try,pkg-mac-release-arm64-try,pkg-linux-release-try,pkg-linux-release-arm64-try,pkg-linux-debug-try Change-Id: Icc2bf9a86efb79d04a67053962a4548fe6e894f7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/494640 Reviewed-by: Nicholas Shahan <nshahan@google.com> Reviewed-by: Nate Biggs <natebiggs@google.com> Reviewed-by: Ivan Inozemtsev <iinozemtsev@google.com> Reviewed-by: Ben Konyi <bkonyi@google.com> Reviewed-by: Mark Zhou <markzipan@google.com>
88 lines
2.7 KiB
Dart
88 lines
2.7 KiB
Dart
// Copyright (c) 2026, 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 'dart:io';
|
|
|
|
import 'package:crypto/crypto.dart';
|
|
|
|
void main() async {
|
|
// 1. Extract the version from pubspec.yaml
|
|
final pubspec = File('pubspec.yaml').readAsStringSync();
|
|
final versionMatch = RegExp(r'version: (.*)').firstMatch(pubspec);
|
|
final version = versionMatch?.group(1);
|
|
if (version == null) {
|
|
throw Exception('Failed to find version in pubspec.yaml');
|
|
}
|
|
|
|
// 2. Generate lib/src/version.dart
|
|
final versionFile = File('lib/src/version.dart');
|
|
versionFile.writeAsStringSync('''
|
|
// Generated code. Do not modify.
|
|
const packageVersion = '$version';
|
|
''');
|
|
|
|
// 3. Compile the web client to JavaScript
|
|
print('Compiling client.js...');
|
|
final result = await Process.run(Platform.executable, [
|
|
'compile',
|
|
'js',
|
|
'-O1',
|
|
'--no-source-maps',
|
|
'-o',
|
|
'lib/src/injected/client.js',
|
|
'web/client.dart',
|
|
]);
|
|
|
|
if (result.exitCode != 0) {
|
|
print('Failed to compile client.js');
|
|
print(result.stdout);
|
|
print(result.stderr);
|
|
exit(result.exitCode);
|
|
}
|
|
|
|
print('Compilation successful');
|
|
|
|
// 4. Clean up the generated .deps file
|
|
final depsFile = File('lib/src/injected/client.js.deps');
|
|
if (depsFile.existsSync()) {
|
|
depsFile.deleteSync();
|
|
}
|
|
|
|
// 5. Generate injected_client_js.dart
|
|
print('Generating injected_client_js.dart...');
|
|
|
|
final clientDartString = File(
|
|
'web/client.dart',
|
|
).readAsStringSync().replaceAll('\r\n', '\n');
|
|
final clientDartHash = sha256
|
|
.convert(utf8.encode(clientDartString))
|
|
.toString();
|
|
|
|
final compiledJs = File('lib/src/injected/client.js').readAsStringSync();
|
|
final lines = compiledJs.replaceAll('\r\n', '\n').split('\n');
|
|
|
|
// Escape JS payload line-by-line using jsonEncode for multiline readability,
|
|
// ensure newlines are preserved identically, and manually escape the dollar
|
|
// sign ($) to avoid Dart interpolation.
|
|
final safeDartString = [
|
|
for (var i = 0; i < lines.length; i++)
|
|
jsonEncode(
|
|
i == lines.length - 1 ? lines[i] : '${lines[i]}\n',
|
|
).replaceAll(r'$', r'\$'),
|
|
].join('\n');
|
|
|
|
final injectedClientJsFile = File('lib/src/handlers/injected_client_js.dart');
|
|
injectedClientJsFile.writeAsStringSync('''
|
|
// Generated code. Do not modify.
|
|
// Emits the transpiled client.js directly into a statically embeddable string.
|
|
// dart format off
|
|
|
|
const injectedClientJs = $safeDartString;
|
|
|
|
const clientDartHash = '$clientDartHash';
|
|
''');
|
|
print('Successfully packed client.js into injected_client_js.dart');
|
|
}
|