resolvePolicy method
Loads and resolves hierarchical enterprise policy for the workspace.
Searches:
.fps/policy.jsonor.fps/policy.yaml(Project level)enterprise_policy.json/enterprise_policy.yaml(Org level)- 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;
}