From e170bf2cef6b23f132dd0932ef9f7fd0d5f02bce Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Fri, 15 Dec 2023 09:48:20 -0800 Subject: [PATCH] move the tool/bindings_generator dart+node script into the top-level bindings_generator/ directory (#123) move the tool/bindings_generator dart+node script into the top-level bindings_generator/ directory --- .github/workflows/build.yml | 2 +- .gitignore | 7 ++-- README.md | 3 ++ bindings_generator/README.md | 19 +++++++++ .../banned_names.dart | 0 .../dart_main.dart | 0 .../filesystem_api.dart | 0 .../generate_bindings.dart | 0 .../js_type_supertypes.dart | 2 +- .../main.mjs | 0 .../package-lock.json | 0 .../package.json | 0 .../singletons.dart | 0 .../translator.dart | 0 .../type_aliases.dart | 0 .../type_union.dart | 0 .../util.dart | 0 .../webidl_api.dart | 0 .../webref_css_api.dart | 0 .../webref_idl_api.dart | 0 test/type_union_test.dart | 3 +- tool/bindings_generator/README.md | 17 -------- tool/update_bindings.dart | 41 +++++++++---------- 23 files changed, 49 insertions(+), 45 deletions(-) create mode 100644 bindings_generator/README.md rename {tool/bindings_generator => bindings_generator}/banned_names.dart (100%) rename {tool/bindings_generator => bindings_generator}/dart_main.dart (100%) rename {tool/bindings_generator => bindings_generator}/filesystem_api.dart (100%) rename {tool/bindings_generator => bindings_generator}/generate_bindings.dart (100%) rename {tool/bindings_generator => bindings_generator}/js_type_supertypes.dart (96%) rename {tool/bindings_generator => bindings_generator}/main.mjs (100%) rename {tool/bindings_generator => bindings_generator}/package-lock.json (100%) rename {tool/bindings_generator => bindings_generator}/package.json (100%) rename {tool/bindings_generator => bindings_generator}/singletons.dart (100%) rename {tool/bindings_generator => bindings_generator}/translator.dart (100%) rename {tool/bindings_generator => bindings_generator}/type_aliases.dart (100%) rename {tool/bindings_generator => bindings_generator}/type_union.dart (100%) rename {tool/bindings_generator => bindings_generator}/util.dart (100%) rename {tool/bindings_generator => bindings_generator}/webidl_api.dart (100%) rename {tool/bindings_generator => bindings_generator}/webref_css_api.dart (100%) rename {tool/bindings_generator => bindings_generator}/webref_idl_api.dart (100%) delete mode 100644 tool/bindings_generator/README.md diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8aa7fa3e..507091a8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -74,7 +74,7 @@ jobs: run: dart pub get - name: Install Node dependencies run: npm install - working-directory: tool/bindings_generator + working-directory: bindings_generator - name: Run the generator run: dart tool/update_bindings.dart - name: Analyze code diff --git a/.gitignore b/.gitignore index c6212fe8..6fae96c1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .dart_tool doc/api/ pubspec.lock -tool/bindings_generator/*.js -tool/bindings_generator/*.js.* -tool/bindings_generator/node_modules/ + +bindings_generator/*.js +bindings_generator/*.js.* +bindings_generator/node_modules/ diff --git a/README.md b/README.md index 63175c00..74632257 100644 --- a/README.md +++ b/README.md @@ -36,3 +36,6 @@ void main() { Based on [`@webref/idl 3.39.1`](https://www.npmjs.com/package/@webref/idl/v/3.39.1). + +For instructions on re-generating the DOM bindings, see +(bindings_generator/README.md)[bindings_generator/README.md]. diff --git a/bindings_generator/README.md b/bindings_generator/README.md new file mode 100644 index 00000000..ed1d7326 --- /dev/null +++ b/bindings_generator/README.md @@ -0,0 +1,19 @@ +The bindings generator for `package:web`. + +This tool is written in Dart, compiled to JavaScript, and run on Node. + +## Generating the bindings + +Run: + +``` +dart tool/update_bindings.dart +``` + +## Update to the latest Web IDL versions and regenerate + +Run: + +``` +dart tool/update_bindings.dart --update +``` diff --git a/tool/bindings_generator/banned_names.dart b/bindings_generator/banned_names.dart similarity index 100% rename from tool/bindings_generator/banned_names.dart rename to bindings_generator/banned_names.dart diff --git a/tool/bindings_generator/dart_main.dart b/bindings_generator/dart_main.dart similarity index 100% rename from tool/bindings_generator/dart_main.dart rename to bindings_generator/dart_main.dart diff --git a/tool/bindings_generator/filesystem_api.dart b/bindings_generator/filesystem_api.dart similarity index 100% rename from tool/bindings_generator/filesystem_api.dart rename to bindings_generator/filesystem_api.dart diff --git a/tool/bindings_generator/generate_bindings.dart b/bindings_generator/generate_bindings.dart similarity index 100% rename from tool/bindings_generator/generate_bindings.dart rename to bindings_generator/generate_bindings.dart diff --git a/tool/bindings_generator/js_type_supertypes.dart b/bindings_generator/js_type_supertypes.dart similarity index 96% rename from tool/bindings_generator/js_type_supertypes.dart rename to bindings_generator/js_type_supertypes.dart index 312e9d7e..121e8589 100644 --- a/tool/bindings_generator/js_type_supertypes.dart +++ b/bindings_generator/js_type_supertypes.dart @@ -28,5 +28,5 @@ const Map jsTypeSupertypes = { 'JSUint16Array': 'JSTypedArray', 'JSUint32Array': 'JSTypedArray', 'JSUint8Array': 'JSTypedArray', - 'JSUint8ClampedArray': 'JSTypedArray' + 'JSUint8ClampedArray': 'JSTypedArray', }; diff --git a/tool/bindings_generator/main.mjs b/bindings_generator/main.mjs similarity index 100% rename from tool/bindings_generator/main.mjs rename to bindings_generator/main.mjs diff --git a/tool/bindings_generator/package-lock.json b/bindings_generator/package-lock.json similarity index 100% rename from tool/bindings_generator/package-lock.json rename to bindings_generator/package-lock.json diff --git a/tool/bindings_generator/package.json b/bindings_generator/package.json similarity index 100% rename from tool/bindings_generator/package.json rename to bindings_generator/package.json diff --git a/tool/bindings_generator/singletons.dart b/bindings_generator/singletons.dart similarity index 100% rename from tool/bindings_generator/singletons.dart rename to bindings_generator/singletons.dart diff --git a/tool/bindings_generator/translator.dart b/bindings_generator/translator.dart similarity index 100% rename from tool/bindings_generator/translator.dart rename to bindings_generator/translator.dart diff --git a/tool/bindings_generator/type_aliases.dart b/bindings_generator/type_aliases.dart similarity index 100% rename from tool/bindings_generator/type_aliases.dart rename to bindings_generator/type_aliases.dart diff --git a/tool/bindings_generator/type_union.dart b/bindings_generator/type_union.dart similarity index 100% rename from tool/bindings_generator/type_union.dart rename to bindings_generator/type_union.dart diff --git a/tool/bindings_generator/util.dart b/bindings_generator/util.dart similarity index 100% rename from tool/bindings_generator/util.dart rename to bindings_generator/util.dart diff --git a/tool/bindings_generator/webidl_api.dart b/bindings_generator/webidl_api.dart similarity index 100% rename from tool/bindings_generator/webidl_api.dart rename to bindings_generator/webidl_api.dart diff --git a/tool/bindings_generator/webref_css_api.dart b/bindings_generator/webref_css_api.dart similarity index 100% rename from tool/bindings_generator/webref_css_api.dart rename to bindings_generator/webref_css_api.dart diff --git a/tool/bindings_generator/webref_idl_api.dart b/bindings_generator/webref_idl_api.dart similarity index 100% rename from tool/bindings_generator/webref_idl_api.dart rename to bindings_generator/webref_idl_api.dart diff --git a/test/type_union_test.dart b/test/type_union_test.dart index f1c5a543..282bf08d 100644 --- a/test/type_union_test.dart +++ b/test/type_union_test.dart @@ -3,7 +3,8 @@ // BSD-style license that can be found in the LICENSE file. import 'package:test/test.dart'; -import '../tool/bindings_generator/type_union.dart'; + +import '../bindings_generator/type_union.dart'; void main() { test('Non-JS types', () { diff --git a/tool/bindings_generator/README.md b/tool/bindings_generator/README.md deleted file mode 100644 index f3b47049..00000000 --- a/tool/bindings_generator/README.md +++ /dev/null @@ -1,17 +0,0 @@ -The bindings generator requires dart and node. - -If you haven't installed the required node packages, or they have been updated, -please run: -``` -npm install -``` - -To compile the bindings generator run: -``` -dart compile js dart_main.dart -o dart_main.js -``` - -Finally, run node to build the bindingS: -``` -node main.mjs -``` diff --git a/tool/update_bindings.dart b/tool/update_bindings.dart index 3f6a3559..29792eea 100644 --- a/tool/update_bindings.dart +++ b/tool/update_bindings.dart @@ -36,13 +36,13 @@ $_usage'''); assert(p.fromUri(Platform.script).endsWith(_thisScript)); - // Run `npm install` or `npm upgrade` as needed. - if (argResult['update'] as bool) { - await _runProc('npm', ['update'], workingDirectory: _bindingsGeneratorPath); - } else { - await _runProc('npm', ['install'], - workingDirectory: _bindingsGeneratorPath); - } + // Run `npm install` or `npm update` as needed. + final update = argResult['update'] as bool; + await _runProc( + 'npm', + [update ? 'update' : 'install'], + workingDirectory: _bindingsGeneratorPath, + ); // Compute JS type supertypes for union calculation in translator. await _generateJsTypeSupertypes(); @@ -79,7 +79,7 @@ $_usage'''); // Run app with `node`. await _runProc( 'node', - ['main.mjs', '../../lib/src'], + ['main.mjs', '../lib/src'], workingDirectory: _bindingsGeneratorPath, ); @@ -93,7 +93,7 @@ $_usage'''); // Update readme. final readmeFile = File( - p.normalize(p.join(_bindingsGeneratorPath, '..', '..', 'README.md')), + p.normalize(p.join(_bindingsGeneratorPath, '..', 'README.md')), ); final sourceContent = readmeFile.readAsStringSync(); @@ -138,8 +138,7 @@ String _webRefIdlVersion() { return webRefIdl['version'] as String; } -final _bindingsGeneratorPath = - p.fromUri(Platform.script.resolve('bindings_generator/')); +const _bindingsGeneratorPath = 'bindings_generator'; const _webRefIdl = '@webref/idl'; @@ -194,6 +193,7 @@ Future _generateJsTypeSupertypes() async { // the old code. void storeSupertypes(InterfaceElement element) { if (!_isInJsTypesOrJsInterop(element)) return; + String? parentJsType; final supertype = element.supertype; final immediateSupertypes = [ @@ -222,22 +222,19 @@ Future _generateJsTypeSupertypes() async { } final jsTypeSupertypesScript = ''' - // Copyright (c) 2023, 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. +// Copyright (c) 2023, 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. - // Updated by $_thisScript. Do not modify by hand. +// Updated by $_thisScript. Do not modify by hand. - const Map jsTypeSupertypes = $jsTypeSupertypes; - '''; +const Map jsTypeSupertypes = { +${jsTypeSupertypes.entries.map((e) => " ${e.key}: ${e.value},").join('\n')} +}; +'''; final jsTypeSupertypesPath = p.join(_bindingsGeneratorPath, 'js_type_supertypes.dart'); await File(jsTypeSupertypesPath).writeAsString(jsTypeSupertypesScript); - await _runProc( - Platform.executable, - ['format', jsTypeSupertypesPath], - workingDirectory: _bindingsGeneratorPath, - ); } final _usage = '''