generateSomGoProject function

Future<SomGoGenerationResult> generateSomGoProject({
  1. required String modelPackagePath,
  2. required String runtimePackagePath,
  3. required String outputRoot,
  4. required int modelVersion,
  5. required String modelLabel,
  6. required String generatedAt,
  7. String versionLabel = 'v0',
  8. List<String> documentRoots = const [],
})

Generates the Go v0 artefact tree from modelPackagePath into outputRoot.

  • outputRoot — the tom_som_go_<label> module directory (created).
  • runtimePackagePath — tom_som_go_runtime; the generated go.mod records it as a relative replace directive (computed from outputRoot) 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,
  );
}