Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/web_generator.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ jobs:

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: actions/setup-node@v4
with:
node-version: 22
- uses: dart-lang/setup-dart@e51d8e571e22473a2ddebf0ef8a2123f0ab2c02c
with:
sdk: ${{ matrix.sdk }}
Expand Down
10 changes: 7 additions & 3 deletions web_generator/lib/src/config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import 'package:path/path.dart' as p;
import 'package:pub_semver/pub_semver.dart';
import 'package:yaml/yaml.dart';

import 'util.dart';

class FunctionConfig {
/// The number of variable arguments
final int? varArgs;
Expand Down Expand Up @@ -154,11 +156,13 @@ class YamlConfig implements Config {
throw TypeError();
}

final allFiles =
expandGlobs(inputFiles, extension: '.d.ts', cwd: p.dirname(filename));

return YamlConfig._(
filename: Uri.file(filename),
input: inputFiles
.map((file) => p.join(p.dirname(filename), file))
.toList(),
input:
allFiles.map((file) => p.join(p.dirname(filename), file)).toList(),
output:
p.join(p.dirname(filename), (yaml['output'] ?? output) as String),
name: yaml['name'] as String?,
Expand Down
8 changes: 5 additions & 3 deletions web_generator/lib/src/dart_main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ void main(List<String> args) async {
await generateIDLBindings(
input: (argResult['input'] as List<String>).isEmpty
? null
: argResult['input'] as Iterable<String>,
: argResult['input'] as List<String>,
output: argResult['output'] as String,
generateAll: argResult['generate-all'] as bool,
languageVersion: Version.parse(languageVersionString),
Expand All @@ -55,7 +55,8 @@ void main(List<String> args) async {
);
} else {
config = Config(
input: argResult['input'] as List<String>,
input:
expandGlobs(argResult['input'] as List<String>, extension: '.d.ts'),
output: argResult['output'] as String,
languageVersion: Version.parse(languageVersionString),
);
Expand Down Expand Up @@ -138,11 +139,12 @@ Future<void> generateIDLBindings({
fs.writeFileSync('$output/$libraryPath'.toJS, contents);
}
} else {
final allInputFiles = expandGlobs(input.toList(), extension: '.idl');
// parse individual files
ensureDirectoryExists(output);

final bindings = await generateBindingsForFiles({
for (final file in input)
for (final file in allInputFiles)
file: (fs.readFileSync(
file.toJS, JSReadFileOptions(encoding: 'utf-8'.toJS))
as JSString)
Expand Down
14 changes: 14 additions & 0 deletions web_generator/lib/src/js/filesystem_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,18 @@ extension type FileSystem._(JSObject _) implements JSObject {
external JSAny readFileSync(JSString path, [JSReadFileOptions options]);

external void writeFileSync(JSString path, JSString contents);

external JSArray<JSString> globSync(JSArray<JSString> patterns,
[FSGlobSyncOptions? options]);
}

extension type FSGlobSyncOptions._(JSObject _) implements JSObject {
external FSGlobSyncOptions({JSString cwd, FSGlobSyncExcludeFunc? exclude});

external JSString get cwd;
external JSArray<JSString>? get exclude;
}

extension type FSGlobSyncExcludeFunc(JSFunction _) implements JSFunction {
external bool call(String entry);
}
16 changes: 16 additions & 0 deletions web_generator/lib/src/util.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

import 'dart:js_interop';

import 'package:path/path.dart' as p;

import 'js/filesystem_api.dart';

// TODO(joshualitt): Let's find a better place for these.
Expand Down Expand Up @@ -47,3 +49,17 @@ const packageRoot = 'package:web';

String capitalize(String s) =>
s.isEmpty ? '' : '${s[0].toUpperCase()}${s.substring(1)}';

List<String> expandGlobs(List<String> input,
{String? cwd, required String extension}) {
cwd ??= p.current;
final globSync = fs.globSync(
input.map((i) => i.toJS).toList().toJS,
FSGlobSyncOptions(
cwd: cwd.toJS,
));
return globSync.toDart
.map((i) => i.toDart)
.where((f) => f.endsWith(extension))
.toList();
}
2 changes: 1 addition & 1 deletion web_generator/test/assets/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ preamble: |
// GENERATED FILE: DO NOT EDIT
//
// Created by `web_generator`
input: test.d.ts
input: 'test.d.ts'
output: '../../.dart_tool/test_config.dart'
include:
- APP_NAME
Expand Down
70 changes: 0 additions & 70 deletions web_generator/test/config_test.dart

This file was deleted.

8 changes: 6 additions & 2 deletions web_generator/test/integration/idl_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,18 @@ void main() {
group('IDL Integration Test', () {
final testGenFolder = p.join('test', 'integration', 'idl');
final inputDir = Directory(testGenFolder);
final outputDir = p.join('.dart_tool', 'idl');

setUpAll(() async {
// set up npm
await runProc('npm', ['install'], workingDirectory: bindingsGenPath);

// compile file
await compileDartMain(dir: bindingsGenPath);

if (!(await Directory(outputDir).exists())) {
await Directory(outputDir).create(recursive: true);
}
});

for (final inputFile in inputDir
Expand All @@ -29,8 +34,7 @@ void main() {
final inputFileName = p.basenameWithoutExtension(inputFile.path);
final inputName = inputFileName.replaceFirst('_input', '');

final outputActualPath =
p.join('.dart_tool', 'idl', '${inputName}_actual.dart');
final outputActualPath = p.join(outputDir, '${inputName}_actual.dart');
final outputExpectedPath =
p.join(testGenFolder, '${inputName}_expected.dart');

Expand Down