loadFromFile static method

Future<SetupConfig?> loadFromFile(
  1. String path
)

Load configuration from file

Implementation

static Future<SetupConfig?> loadFromFile(String path) async {
  final File file = File(path);
  if (!file.existsSync()) return null;

  final String content = await file.readAsString();
  final Map<String, String> values = <String, String>{};

  for (final String line in content.split('\n')) {
    final String trimmed = line.trim();
    if (trimmed.isEmpty || trimmed.startsWith('#')) continue;

    final List<String> parts = trimmed.split('=');
    if (parts.length >= 2) {
      values[parts[0].trim()] = parts.sublist(1).join('=').trim();
    }
  }

  final String templateName = values['TEMPLATE_NAME'] ?? 'arcane_template';
  final TemplateType template = TemplateType.values.firstWhere(
    (TemplateType t) => t.name == templateName,
    orElse: () => TemplateType.arcaneTemplate,
  );

  final List<String> platforms = _parsePlatforms(values['PLATFORMS'], template);

  return SetupConfig(
    appName: values['APP_NAME'] ?? 'my_app',
    orgDomain: values['ORG_DOMAIN'] ?? 'com.example',
    baseClassName: values['BASE_CLASS_NAME'] ?? 'MyApp',
    template: template,
    outputDir: values['OUTPUT_DIR'] ?? Directory.current.path,
    platforms: platforms,
    createModels: _parseBool(values['CREATE_MODELS']),
    createServer: _parseBool(values['CREATE_SERVER']),
    useFirebase: _parseBool(values['USE_FIREBASE']),
    firebaseProjectId: values['FIREBASE_PROJECT_ID'],
    setupCloudRun: _parseBool(values['SETUP_CLOUD_RUN']),
    serviceAccountKeyPath: values['SERVICE_ACCOUNT_KEY'],
    deployHostingRelease: _parseOptionalBool(values['DEPLOY_HOSTING_RELEASE']),
    deployHostingBeta: _parseOptionalBool(values['DEPLOY_HOSTING_BETA']),
    firestoreRegion: values['FIRESTORE_REGION'] ?? 'nam5',
    initializeFirestore: _parseBool(values['INITIALIZE_FIRESTORE'], defaultValue: true),
    initializeStorage: _parseBool(values['INITIALIZE_STORAGE'], defaultValue: true),
    enableEmailAuth: _parseBool(values['ENABLE_EMAIL_AUTH'], defaultValue: true),
    enableGoogleAuth: _parseBool(values['ENABLE_GOOGLE_AUTH'], defaultValue: true),
    requireBlaze: _parseOptionalBool(values['REQUIRE_BLAZE']),
    setupArtifactCleanup: _parseOptionalBool(values['SETUP_ARTIFACT_CLEANUP']),
    artifactKeepRecent: _parseInt(values['ARTIFACT_KEEP_RECENT'], defaultValue: 5),
    artifactDeleteOlderDays: _parseInt(values['ARTIFACT_DELETE_OLDER_DAYS'], defaultValue: 30),
    cloudRunKeepRevisions: _parseInt(values['CLOUD_RUN_KEEP_REVISIONS'], defaultValue: 3),
    jasprRenderMode: JasprRenderModeExtension.parse(
      values['JASPR_RENDER_MODE'],
    ),
    jasprServerServiceName: values['JASPR_SERVER_SERVICE_NAME'],
    embeddedFlutterMount: values['EMBEDDED_FLUTTER_MOUNT'] ?? '/app',
    hybridDynamicPrefixes: _parseHybridPrefixes(
      values['HYBRID_DYNAMIC_PREFIXES'],
    ),
  );
}