generateSomGoProject function
Generates the Go v0 artefact tree from modelPackagePath into outputRoot.
outputRoot— thetom_som_go_<label>module directory (created).runtimePackagePath—tom_som_go_runtime; the generatedgo.modrecords it as a relativereplacedirective (computed fromoutputRoot) so the committed file is portable across machines/checkout roots.versionLabel—v0(drives the generated model-version major).documentRoots— empty ⇒ every document root.modelVersion/modelLabel/generatedAt— the model version stamp baked into the meta-data (kept stable for idempotency).
Implementation
Future<SomGoGenerationResult> generateSomGoProject({
required String modelPackagePath,
required String runtimePackagePath,
required String outputRoot,
required int modelVersion,
required String modelLabel,
required String generatedAt,
String versionLabel = 'v0',
List<String> documentRoots = const [],
}) async {
final libDir = p.join(modelPackagePath, 'lib');
if (!Directory(libDir).existsSync()) {
throw ArgumentError('model lib/ not found at $libDir');
}
final driver = createAnalysisDriver(modelPackagePath);
final reader = ModelReader(driver);
await reader.analyzePackage(libDir);
return writeSomGoProject(
classes: reader.classes,
enums: reader.enums,
runtimePackagePath: runtimePackagePath,
outputRoot: outputRoot,
modelVersion: modelVersion,
modelLabel: modelLabel,
generatedAt: generatedAt,
versionLabel: versionLabel,
documentRoots: documentRoots,
);
}