blob: 5cc31838fe9e4e88fae741e471268f93899220ab [file] [log] [blame] [edit]
// Copyright (c) 2025, 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.
// ignore_for_file: prefer_expression_function_bodies
import 'dart:io';
import 'package:json_syntax_generator/json_syntax_generator.dart';
import '../test/schema/helpers.dart';
const generateFor = ['hooks', 'code_assets', 'data_assets'];
final rootSchemas = loadSchemas([
packageUri.resolve('doc/schema/'),
packageUri.resolve('../code_assets/doc/schema/'),
packageUri.resolve('../data_assets/doc/schema/'),
]);
void main(List<String> args) {
for (final packageName in generateFor) {
const schemaName = 'shared';
final schemaUri = packageUri.resolve(
'../$packageName/doc/schema/$schemaName/shared_definitions.schema.json',
);
final schema = rootSchemas[schemaUri]!;
final analyzedSchema = SchemaAnalyzer(
schema,
nameOverrides: {
'ios': 'iOS',
'Ios': 'IOS',
'macos': 'macOS',
'Macos': 'MacOS',
'CodeAssetsCodeAsset': 'NativeCodeAssetNew',
'DataAssetsDataAsset': 'DataAssetNew',
},
publicSetters: [
'BuildOutput',
'Config',
'ConfigExtensions',
'HookInput',
'HookOutput',
'LinkOutput',
],
visbleUnionTagValues: ['Asset'],
).analyze();
final textDumpFile = File.fromUri(
packageUri.resolve('../$packageName/lib/src/$packageName/syntax.g.txt'),
);
if (args.contains('-d')) {
textDumpFile.writeAsStringSync(analyzedSchema.toString());
} else if (textDumpFile.existsSync()) {
textDumpFile.deleteSync();
}
final output = SyntaxGenerator(
analyzedSchema,
header:
'''
// This file is generated, do not edit.
// File generated by pkgs/hooks/tool/generate_syntax.dart.
// Must be rerun when pkgs/$packageName/doc/schema/ is modified.
''',
).generate();
final outputUri = packageUri.resolve(
'../$packageName/lib/src/$packageName/syntax.g.dart',
);
File.fromUri(outputUri).writeAsStringSync(output);
Process.runSync(Platform.executable, ['format', outputUri.toFilePath()]);
print('Generated $outputUri');
}
}
Uri packageUri = findPackageRoot('hooks');