isConformingNamespaces static method
void
isConformingNamespaces()
Implementation
static void isConformingNamespaces(
Map<String, RequiredNamespace> requiredNamespaces,
Map<String, Namespace> namespaces,
String context,
) {
List<String> requiredNamespaceKeys = requiredNamespaces.keys.toList();
List<String> namespaceKeys = namespaces.keys.toList();
if (!hasOverlap(requiredNamespaceKeys, namespaceKeys)) {
throw Errors.getInternalError(
Errors.NON_CONFORMING_NAMESPACES,
context: "$context namespaces keys don't satisfy requiredNamespaces",
);
} else {
requiredNamespaceKeys.forEach((key) {
List<dynamic> requiredNamespaceChains = requiredNamespaces[key]!.chains;
List<dynamic> namespaceChains = NamespaceUtils.getAccountsChains(
namespaces[key]!.accounts,
);
if (!hasOverlap(requiredNamespaceChains, namespaceChains)) {
throw Errors.getInternalError(
Errors.NON_CONFORMING_NAMESPACES,
context:
"$context namespaces accounts don't satisfy requiredNamespaces chains for $key",
);
} else if (!hasOverlap(
requiredNamespaces[key]!.methods, namespaces[key]!.methods)) {
throw Errors.getInternalError(
Errors.NON_CONFORMING_NAMESPACES,
context:
"$context namespaces methods don't satisfy requiredNamespaces methods for $key",
);
} else if (!hasOverlap(
requiredNamespaces[key]!.events, namespaces[key]!.events)) {
throw Errors.getInternalError(
Errors.NON_CONFORMING_NAMESPACES,
context:
"$context namespaces events don't satisfy requiredNamespaces events for $key",
);
}
// Check each required extension
if (requiredNamespaces[key]!.extension != null) {
for (var requiredExt in requiredNamespaces[key]!.extension!) {
// Make sure that some extension in the namespaces satisfies it
if (namespaces[key]!.extension != null) {
for (var ext in namespaces[key]!.extension!) {
List<dynamic> accChains = NamespaceUtils.getAccountsChains(
ext.accounts,
);
// If the required extension is satisfied, break out of the loop so we don't throw
if (hasOverlap(requiredExt.chains, accChains) &&
hasOverlap(requiredExt.events, ext.events) &&
hasOverlap(requiredExt.methods, ext.methods)) {
break;
}
}
}
throw Errors.getInternalError(
Errors.NON_CONFORMING_NAMESPACES,
context:
"$context namespaces extension doesn't satisfy requiredNamespaces extension for $key",
);
}
}
});
}
}