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 = '''