Skip to content

Commit 2573d5f

Browse files
helper script translated to dart
1 parent ff1b8fa commit 2573d5f

File tree

9 files changed

+146
-100
lines changed

9 files changed

+146
-100
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ The main scenario is Supabase Edge Functions, but it should also work for other
3636

3737
4. Add imports to generated file by calling the script:
3838
```bash
39-
python3 add_imports.py example/functions/dart_edge/main.dart.js
39+
dart run tools/add_imports/bin/add_imports.dart
40+
--filename=example/functions/dart_edge/main.dart.js
4041
```
41-
Note: your filepath may differ from the example
42+
Note: your filename may differ from the example
4243

4344
5. You can use the function now.

add_imports.py

Lines changed: 0 additions & 98 deletions
This file was deleted.

tools/add_imports/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# https://dart.dev/guides/libraries/private-files
2+
# Created by `dart pub`
3+
.dart_tool/
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
include: package:solid_lints/analysis_options.yaml
2+
3+
linter:
4+
rules:
5+
package_api_docs: true
6+
prefer_foreach: true
7+
prefer_single_quotes: true
8+
public_member_api_docs: false
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import 'dart:io';
2+
3+
import 'package:add_imports/src/args.dart';
4+
import 'package:add_imports/src/config.dart';
5+
import 'package:collection/collection.dart';
6+
7+
void main(List<String> arguments) {
8+
final args = Args.tryParse(arguments);
9+
if (args == null) {
10+
print(Args.usage);
11+
12+
return;
13+
}
14+
15+
final config = Config.fromYaml(File(args.configpath).readAsStringSync());
16+
final sourceFile = File(args.filename);
17+
final sourceString = sourceFile.readAsStringSync();
18+
19+
final classes = RegExp(r'new self.([A-Za-z]+)\(')
20+
.allMatches(sourceString)
21+
.map((e) => e.group(1))
22+
.whereNotNull()
23+
.toSet()
24+
.intersection(config.classesMap.values.flattened.toSet())
25+
.whereNot((e) => sourceString.contains('import { $e }'))
26+
.toList();
27+
28+
if (classes.isEmpty) return;
29+
30+
final imports = classes.map(
31+
(classname) {
32+
final filename = config.classesMap.entries
33+
.firstWhere((e) => e.value.contains(classname))
34+
.key;
35+
36+
final url = '${config.fileUrlPrefix}$filename';
37+
38+
return 'import { $classname } from "$url";';
39+
},
40+
);
41+
42+
final inits = classes.map((e) => 'self.$e = $e');
43+
44+
final newSource = [
45+
imports.join('\n'),
46+
inits.join('\n'),
47+
sourceString,
48+
].join('\n');
49+
50+
sourceFile.writeAsStringSync(newSource);
51+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
int calculate() {
2+
return 6 * 7;
3+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import 'package:args/args.dart';
2+
3+
class Args {
4+
static final parser = ArgParser()
5+
..addOption('filename')
6+
..addOption('configpath', defaultsTo: 'add_imports.yaml');
7+
8+
final String filename;
9+
final String configpath;
10+
11+
static String get usage => parser.usage;
12+
13+
Args({required this.filename, required this.configpath});
14+
15+
factory Args.parse(List<String> arguments) {
16+
final result = parser.parse(arguments);
17+
18+
19+
return Args(
20+
filename: result['filename'] as String,
21+
configpath: result['configpath'] as String,
22+
);
23+
}
24+
25+
static Args? tryParse(List<String> arguments) {
26+
try {
27+
return Args.parse(arguments);
28+
} catch (_) {
29+
return null;
30+
}
31+
}
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import 'package:yaml/yaml.dart';
2+
3+
class Config {
4+
final String fileUrlPrefix;
5+
final Map<String, List<String>> classesMap;
6+
7+
Config({required this.fileUrlPrefix, required this.classesMap});
8+
9+
factory Config.fromYaml(String yamlString) {
10+
final parsedYaml = loadYaml(yamlString) as YamlMap;
11+
12+
final classesMap = (parsedYaml['classes_map'] as YamlMap).map(
13+
(key, value) => MapEntry(
14+
key as String,
15+
[...value as YamlList].cast<String>(),
16+
),
17+
);
18+
19+
return Config(
20+
classesMap: classesMap,
21+
fileUrlPrefix: parsedYaml['file_url_prefix'] as String,
22+
);
23+
}
24+
25+
static Config? tryFromYaml(String yamlString) {
26+
try {
27+
return Config.fromYaml(yamlString);
28+
} catch (_) {
29+
return null;
30+
}
31+
}
32+
}

tools/add_imports/pubspec.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: add_imports
2+
description: add_imports.
3+
version: 1.0.0
4+
5+
environment:
6+
sdk: ^3.1.0
7+
8+
dependencies:
9+
args: ^2.4.2
10+
collection: ^1.18.0
11+
yaml: ^3.1.2
12+
13+
dev_dependencies:
14+
solid_lints: ^0.0.19

0 commit comments

Comments
 (0)