Skip to content

Commit 6690e26

Browse files
authored
[native_*] Hooks with DataAssets read from disk (#1345)
While working on #1208, I released that most likely you'd want to report all files from the `assets/` directory as `DataAsset`s in a hook. (This also means that there's implicitly a `dependency` on the directory itself.) This PR also cleans up the remaining dart files listed in `dependencies`.
1 parent d4b7cda commit 6690e26

File tree

22 files changed

+159
-102
lines changed

22 files changed

+159
-102
lines changed

pkgs/native_assets_builder/CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
## 0.8.2-wip
22

3-
- Nothing yet.
3+
- Fix some more cases of: `BuildConfig.dependencies` and
4+
`LinkConfig.dependencies` no longer have to specify Dart sources.
5+
- `DataAsset` test projects report all assets from `assets/` dir.
46

57
## 0.8.1
68

pkgs/native_assets_builder/test/build_runner/link_dry_run_test.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@ void main() async {
7474
linkingEnabled: true,
7575
);
7676
expect(buildResult.success, true);
77-
expect(_getNames(buildResult.assets), orderedEquals(builtHelperAssets));
77+
expect(
78+
_getNames(buildResult.assets), unorderedEquals(builtHelperAssets));
7879
expect(
7980
_getNames(buildResult.assetsForLinking['complex_link']!),
80-
orderedEquals(assetsForLinking),
81+
unorderedEquals(assetsForLinking),
8182
);
8283

8384
final linkResult = await linkDryRun(
@@ -88,7 +89,7 @@ void main() async {
8889
);
8990
expect(linkResult.success, true);
9091

91-
expect(_getNames(linkResult.assets), orderedEquals(linkedAssets));
92+
expect(_getNames(linkResult.assets), unorderedEquals(linkedAssets));
9293
});
9394
},
9495
);

pkgs/native_assets_builder/test/build_runner/link_test.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,11 @@ void main() async {
8282
linkingEnabled: true,
8383
);
8484
expect(buildResult.success, true);
85-
expect(_getNames(buildResult.assets), orderedEquals(builtHelperAssets));
85+
expect(
86+
_getNames(buildResult.assets), unorderedEquals(builtHelperAssets));
8687
expect(
8788
_getNames(buildResult.assetsForLinking['complex_link']!),
88-
orderedEquals(assetsForLinking),
89+
unorderedEquals(assetsForLinking),
8990
);
9091

9192
final linkResult = await link(
@@ -96,7 +97,7 @@ void main() async {
9697
);
9798
expect(linkResult.success, true);
9899

99-
expect(_getNames(linkResult.assets), orderedEquals(linkedAssets));
100+
expect(_getNames(linkResult.assets), unorderedEquals(linkedAssets));
100101
});
101102
},
102103
);

pkgs/native_assets_builder/test_data/complex_link/hook/build.dart

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,35 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'dart:io';
6+
57
import 'package:native_assets_cli/native_assets_cli.dart';
68

7-
const packageName = 'complex_link';
9+
void main(List<String> args) async {
10+
await build(args, (config, output) async {
11+
final packageName = config.packageName;
12+
final assetDirectory =
13+
Directory.fromUri(config.packageRoot.resolve('assets/'));
14+
// If assets are added, rerun hook.
15+
output.addDependency(assetDirectory.uri);
816

9-
void main(List<String> args) async => build(args, (config, output) async {
10-
output.addAssets(
11-
List.generate(
12-
2,
13-
(index) => DataAsset(
14-
name: 'data_$index',
15-
// TODO(mosuem): Simplify specifying files/file paths
16-
file: config.packageRoot.resolve('assets/data_$index.json'),
17-
package: packageName,
18-
),
17+
await for (final dataAsset in assetDirectory.list()) {
18+
if (dataAsset is! File) {
19+
continue;
20+
}
21+
final fileName = dataAsset.uri.pathSegments.last;
22+
final name = fileName.split('.').first;
23+
output.addAsset(
24+
DataAsset(
25+
package: packageName,
26+
name: name,
27+
file: dataAsset.uri,
1928
),
20-
linkInPackage: config.linkingEnabled ? 'complex_link' : null,
29+
linkInPackage: config.linkingEnabled ? packageName : null,
2130
);
22-
});
31+
// TODO(https://github.com/dart-lang/native/issues/1208): Report
32+
// dependency on asset.
33+
output.addDependency(dataAsset.uri);
34+
}
35+
});
36+
}

pkgs/native_assets_builder/test_data/complex_link_helper/hook/build.dart

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,37 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'dart:io';
6+
57
import 'package:native_assets_cli/native_assets_cli.dart';
68

7-
const packageName = 'complex_link_helper';
9+
void main(List<String> args) async {
10+
await build(args, (config, output) async {
11+
final packageName = config.packageName;
12+
final assetDirectory =
13+
Directory.fromUri(config.packageRoot.resolve('assets/'));
14+
// If assets are added, rerun hook.
15+
output.addDependency(assetDirectory.uri);
816

9-
void main(List<String> args) async => build(args, (config, output) async {
10-
output.addAssets(
11-
List.generate(
12-
2,
13-
(index) => DataAsset(
14-
name: 'data_helper_$index',
15-
// TODO(mosuem): Simplify specifying files/file paths
16-
file: config.packageRoot.resolve('assets/data_helper_$index.json'),
17-
package: packageName,
18-
),
19-
),
20-
);
21-
output.addAssets(
22-
List.generate(
23-
2,
24-
(index) => DataAsset(
25-
name: 'data_helper_${index + 2}',
26-
// TODO(mosuem): Simplify specifying files/file paths
27-
file: config.packageRoot
28-
.resolve('assets/data_helper_${index + 2}.json'),
29-
package: packageName,
30-
),
17+
await for (final dataAsset in assetDirectory.list()) {
18+
if (dataAsset is! File) {
19+
continue;
20+
}
21+
final fileName = dataAsset.uri.pathSegments.last;
22+
final name = fileName.split('.').first;
23+
final forLinking = name.contains('2') || name.contains('3');
24+
output.addAsset(
25+
DataAsset(
26+
package: packageName,
27+
name: name,
28+
file: dataAsset.uri,
3129
),
32-
linkInPackage: config.linkingEnabled ? 'complex_link' : null,
30+
linkInPackage:
31+
forLinking && config.linkingEnabled ? 'complex_link' : null,
3332
);
34-
});
33+
// TODO(https://github.com/dart-lang/native/issues/1208): Report
34+
// dependency on asset.
35+
output.addDependency(dataAsset.uri);
36+
}
37+
});
38+
}

pkgs/native_assets_builder/test_data/drop_dylib_link/hook/build.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,14 @@ import 'package:logging/logging.dart';
66
import 'package:native_assets_cli/native_assets_cli.dart';
77
import 'package:native_toolchain_c/native_toolchain_c.dart';
88

9-
const packageName = 'drop_dylib_link';
10-
119
void main(List<String> arguments) async {
1210
await build(arguments, (config, output) async {
1311
final logger = Logger('')
1412
..level = Level.ALL
1513
..onRecord.listen((record) {
1614
print('${record.level.name}: ${record.time}: ${record.message}');
1715
});
18-
final linkInPackage = config.linkingEnabled ? packageName : null;
16+
final linkInPackage = config.linkingEnabled ? config.packageName : null;
1917
await CBuilder.library(
2018
name: 'add',
2119
assetName: 'dylib_add',

pkgs/native_assets_builder/test_data/native_add/hook/build.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ import 'package:logging/logging.dart';
66
import 'package:native_assets_cli/native_assets_cli.dart';
77
import 'package:native_toolchain_c/native_toolchain_c.dart';
88

9-
const packageName = 'native_add';
10-
119
void main(List<String> arguments) async {
1210
await build(arguments, (config, output) async {
11+
final packageName = config.packageName;
1312
final cbuilder = CBuilder.library(
1413
name: packageName,
1514
assetName: 'src/${packageName}_bindings_generated.dart',

pkgs/native_assets_builder/test_data/native_add_add_source/hook/build.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ import 'package:logging/logging.dart';
66
import 'package:native_assets_cli/native_assets_cli.dart';
77
import 'package:native_toolchain_c/native_toolchain_c.dart';
88

9-
const packageName = 'native_add';
10-
119
void main(List<String> arguments) async {
1210
await build(arguments, (config, output) async {
11+
final packageName = config.packageName;
1312
final cbuilder = CBuilder.library(
1413
name: packageName,
1514
assetName: '${packageName}_bindings_generated.dart',

pkgs/native_assets_builder/test_data/native_subtract/hook/build.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ import 'package:logging/logging.dart';
66
import 'package:native_assets_cli/native_assets_cli.dart';
77
import 'package:native_toolchain_c/native_toolchain_c.dart';
88

9-
const packageName = 'native_subtract';
10-
119
void main(List<String> arguments) async {
1210
await build(arguments, (config, output) async {
11+
final packageName = config.packageName;
1312
final cbuilder = CBuilder.library(
1413
name: packageName,
1514
assetName: 'src/${packageName}_bindings_generated.dart',

pkgs/native_assets_builder/test_data/simple_data_asset/bin/deep_modify_data_asset.dart.debug

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Future<void> main(List<String> args) async {
1010

1111
// Expect this to throw
1212
Future<String> getWorld() async {
13-
const asset = ByteAsset('package:simple_data_asset/assetId');
13+
const asset = ByteAsset('package:simple_data_asset/test_asset.txt');
1414
final byteBuffer = await asset.load();
1515
byteBuffer.buffer.asFloat32List()[0] = 1.0;
1616
return String.fromCharCodes(byteBuffer);

pkgs/native_assets_builder/test_data/simple_data_asset/bin/modify_data_asset.dart.debug

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Future<void> main(List<String> args) async {
1010

1111
// Expect this to throw
1212
Future<String> getWorld() async {
13-
const asset = ByteAsset('package:simple_data_asset/assetId');
13+
const asset = ByteAsset('package:simple_data_asset/test_asset.txt');
1414
final byteBuffer = await asset.load();
1515
byteBuffer[0] = 42;
1616
return String.fromCharCodes(byteBuffer);

pkgs/native_assets_builder/test_data/simple_data_asset/bin/simple_data_asset.dart.debug

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Future<void> main(List<String> args) async {
88
}
99

1010
Future<String> getWorld() async {
11-
const asset = ByteAsset('package:simple_data_asset/assetId');
11+
const asset = ByteAsset('package:simple_data_asset/test_asset.txt');
1212
final byteBuffer = await asset.load();
1313
return String.fromCharCodes(byteBuffer);
1414
}
Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,35 @@
11
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
4+
import 'dart:io';
5+
46
import 'package:native_assets_cli/native_assets_cli.dart';
57

6-
void main(List<String> args) => build(
7-
args,
8-
(config, output) async {
8+
void main(List<String> args) async {
9+
await build(
10+
args,
11+
(config, output) async {
12+
final assetDirectory =
13+
Directory.fromUri(config.packageRoot.resolve('assets/'));
14+
// If assets are added, rerun hook.
15+
output.addDependency(assetDirectory.uri);
16+
17+
await for (final dataAsset in assetDirectory.list()) {
18+
if (dataAsset is! File) {
19+
continue;
20+
}
21+
final name = dataAsset.uri.pathSegments.last;
922
output.addAsset(
1023
DataAsset(
1124
package: config.packageName,
12-
name: 'assetId',
13-
file: config.packageRoot.resolve('asset/test_asset.txt'),
25+
name: name,
26+
file: dataAsset.uri,
1427
),
1528
);
16-
output.addDependency(config.packageRoot.resolve('hook/build.dart'));
17-
},
18-
);
29+
// TODO(https://github.com/dart-lang/native/issues/1208): Report
30+
// dependency on asset.
31+
output.addDependency(dataAsset.uri);
32+
}
33+
},
34+
);
35+
}

pkgs/native_assets_builder/test_data/simple_link/hook/build.dart

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,35 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'dart:io';
6+
57
import 'package:native_assets_cli/native_assets_cli.dart';
68

7-
const packageName = 'simple_link';
9+
void main(List<String> args) async {
10+
await build(args, (config, output) async {
11+
final packageName = config.packageName;
12+
final assetDirectory =
13+
Directory.fromUri(config.packageRoot.resolve('assets/'));
14+
// If assets are added, rerun hook.
15+
output.addDependency(assetDirectory.uri);
816

9-
void main(List<String> args) async => build(args, (config, output) async {
10-
output.addAssets(
11-
List.generate(
12-
4,
13-
(index) => DataAsset(
14-
name: 'data_$index',
15-
// TODO(mosuem): Simplify specifying files/file paths
16-
file: config.packageRoot.resolve('assets/data_$index.json'),
17-
package: packageName,
18-
),
17+
await for (final dataAsset in assetDirectory.list()) {
18+
if (dataAsset is! File) {
19+
continue;
20+
}
21+
final fileName = dataAsset.uri.pathSegments.last;
22+
final name = fileName.split('.').first;
23+
output.addAsset(
24+
DataAsset(
25+
package: packageName,
26+
name: name,
27+
file: dataAsset.uri,
1928
),
20-
linkInPackage: config.linkingEnabled ? 'simple_link' : null,
29+
linkInPackage: config.linkingEnabled ? packageName : null,
2130
);
22-
});
31+
// TODO(https://github.com/dart-lang/native/issues/1208): Report
32+
// dependency on asset.
33+
output.addDependency(dataAsset.uri);
34+
}
35+
});
36+
}

pkgs/native_assets_cli/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 0.7.3-wip
2+
3+
- Fix some more cases of: `BuildConfig.dependencies` and
4+
`LinkConfig.dependencies` no longer have to specify Dart sources.
5+
- `DataAsset` examples report all assets from `assets/` dir.
6+
17
## 0.7.2
28

39
- Deprecate metadata concept.

pkgs/native_assets_cli/example/build/local_asset/hook/build.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ void main(List<String> args) async {
2727

2828
output.addDependencies([
2929
assetSourcePath,
30-
config.packageRoot.resolve('hook/build.dart'),
3130
]);
3231
}
3332

pkgs/native_assets_cli/example/build/use_dart_api/hook/build.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ import 'package:logging/logging.dart';
66
import 'package:native_assets_cli/native_assets_cli.dart';
77
import 'package:native_toolchain_c/native_toolchain_c.dart';
88

9-
const packageName = 'use_dart_api';
10-
119
void main(List<String> arguments) async {
1210
await build(arguments, (config, output) async {
11+
final packageName = config.packageName;
1312
final cbuilder = CBuilder.library(
1413
name: packageName,
1514
assetName: 'src/${packageName}_bindings_generated.dart',

0 commit comments

Comments
 (0)