@@ -37,6 +37,55 @@ void main(List<String> args) async {
3737 await _run ('dart' , ['run' , 'swagger_parser' ], packageDir.path);
3838 });
3939
40+ /// swagger_parser が生成した震度 enum のメンバー名を修正する。
41+ ///
42+ /// swagger_parser は `+` `-` `!` をセパレータとして除去するため、
43+ /// `5-` と `5+` が両方 `value5` になり重複エラーが起きる。
44+ /// ここで以下の置換を行う:
45+ /// - `!5-` (undefined0) → value5unknown
46+ /// - `{N}-` (value{N}) → value{N}minus
47+ /// - `{N}+` (value{N}) → value{N}plus
48+ await _step ('震度 enum メンバー名をパッチ' , () async {
49+ final modelsDir = Directory ('${packageDir .path }/lib/models' );
50+
51+ if (! modelsDir.existsSync ()) return ;
52+
53+ final dartFiles = modelsDir.listSync ().whereType <File >().where (
54+ (f) => f.path.endsWith ('.dart' ) && ! f.path.endsWith ('.g.dart' ),
55+ );
56+
57+ for (final file in dartFiles) {
58+ var content = file.readAsStringSync ();
59+ final original = content;
60+
61+ // `!5-` の自動生成コメントを除去し undefined0 → value5unknown に置換
62+ content = content.replaceAll (
63+ RegExp (
64+ r" /// Incorrect name has been replaced\. Original name: `!5-`\.\n" ,
65+ ),
66+ '' ,
67+ );
68+ content = content.replaceAll ("undefined0('!5-')" , "value5unknown('!5-')" );
69+
70+ // value{N}('{N}-') → value{N}minus('{N}-')
71+ content = content.replaceAllMapped (
72+ RegExp (r"value(\d+)\('(\d+)-'\)" ),
73+ (m) => "value${m [1 ]}minus('${m [2 ]}-')" ,
74+ );
75+
76+ // value{N}('{N}+') → value{N}plus('{N}+')
77+ content = content.replaceAllMapped (
78+ RegExp (r"value(\d+)\('(\d+)\+'\)" ),
79+ (m) => "value${m [1 ]}plus('${m [2 ]}+')" ,
80+ );
81+
82+ if (content != original) {
83+ file.writeAsStringSync (content);
84+ stdout.writeln (' patched: ${file .path }' );
85+ }
86+ }
87+ });
88+
4089 await _step ('build_runner で Freezed / Retrofit コードを生成' , () async {
4190 await _run ('dart' , [
4291 'run' ,
0 commit comments