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
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 8aa7fa3..507091a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -74,7 +74,7 @@
         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 c6212fe..6fae96c 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 63175c0..7463225 100644
--- a/README.md
+++ b/README.md
@@ -36,3 +36,6 @@
 <!-- START updated by tool/update_bindings.dart. Do not modify by hand -->
 Based on [`@webref/idl 3.39.1`](https://www.npmjs.com/package/@webref/idl/v/3.39.1).
 <!-- END updated by tool/update_bindings.dart. Do not modify by hand -->
+
+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 0000000..ed1d732
--- /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 95%
rename from tool/bindings_generator/js_type_supertypes.dart
rename to bindings_generator/js_type_supertypes.dart
index 312e9d7..121e858 100644
--- a/tool/bindings_generator/js_type_supertypes.dart
+++ b/bindings_generator/js_type_supertypes.dart
@@ -28,5 +28,5 @@
   '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 f1c5a54..282bf08 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 f3b4704..0000000
--- 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 <output directory>
-```
diff --git a/tool/update_bindings.dart b/tool/update_bindings.dart
index 3f6a355..29792ee 100644
--- a/tool/update_bindings.dart
+++ b/tool/update_bindings.dart
@@ -36,13 +36,13 @@
 
   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 @@
   // Run app with `node`.
   await _runProc(
     'node',
-    ['main.mjs', '../../lib/src'],
+    ['main.mjs', '../lib/src'],
     workingDirectory: _bindingsGeneratorPath,
   );
 
@@ -93,7 +93,7 @@
 
   // 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 @@
   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 @@
       // the old code.
       void storeSupertypes(InterfaceElement element) {
         if (!_isInJsTypesOrJsInterop(element)) return;
+
         String? parentJsType;
         final supertype = element.supertype;
         final immediateSupertypes = <InterfaceType>[
@@ -222,22 +222,19 @@
   }
 
   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<String, String?> jsTypeSupertypes = $jsTypeSupertypes;
-  ''';
+const Map<String, String?> 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 = '''