resolvePolicy method

EnterprisePolicyDocument resolvePolicy({
  1. String? relativePackagePath,
})

Loads and resolves hierarchical enterprise policy for the workspace.

Searches:

  1. .fps/policy.json or .fps/policy.yaml (Project level)
  2. enterprise_policy.json / enterprise_policy.yaml (Org level)
  3. Optional override policy passed in constructor.

Implementation

EnterprisePolicyDocument resolvePolicy({
  String? relativePackagePath,
}) {
  if (_overridePolicy != null) {
    return _overridePolicy;
  }

  EnterprisePolicyDocument current = const EnterprisePolicyDocument();

  // 1. Check for organization-level policy file in project root or parent
  final orgPolicyFile = _findFileInRoot([
    'enterprise_policy.json',
    'enterprise_policy.yaml',
    'enterprise_policy.yml',
    '.fps/org_policy.json',
  ]);
  if (orgPolicyFile != null && orgPolicyFile.existsSync()) {
    try {
      final parsed = _parsePolicyFile(orgPolicyFile);
      if (parsed != null) {
        current = current.composeWith(parsed);
        _logger.info(
            'Loaded organization-level policy from ${orgPolicyFile.path}');
      }
    } catch (e) {
      _logger.warning('Failed to parse organization policy: $e');
    }
  }

  // 2. Check for project-level policy file
  final projectPolicyFile = _findFileInRoot([
    '.fps/policy.json',
    '.fps/policy.yaml',
    '.fps/policy.yml',
    'fps_policy.json',
    'fps_policy.yaml',
  ]);
  if (projectPolicyFile != null && projectPolicyFile.existsSync()) {
    try {
      final parsed = _parsePolicyFile(projectPolicyFile);
      if (parsed != null) {
        current = current.composeWith(parsed);
        _logger.info(
            'Loaded project-level policy from ${projectPolicyFile.path}');
      }
    } catch (e) {
      _logger.warning('Failed to parse project policy: $e');
    }
  }

  // 3. Check for package-level policy file if relativePackagePath is provided
  if (relativePackagePath != null && relativePackagePath.isNotEmpty) {
    final pkgDir = Directory(p.join(_projectRoot, relativePackagePath));
    if (pkgDir.existsSync()) {
      final pkgPolicyFile = File(p.join(pkgDir.path, '.fps_policy.json'));
      if (pkgPolicyFile.existsSync()) {
        try {
          final parsed = _parsePolicyFile(pkgPolicyFile);
          if (parsed != null) {
            current = current.composeWith(parsed);
            _logger.info(
                'Loaded package-level policy from ${pkgPolicyFile.path}');
          }
        } catch (e) {
          _logger.warning('Failed to parse package policy: $e');
        }
      }
    }
  }

  return current;
}