register method
Register p. Order is preserved across every dispatch.
Throws StateError if mergedTools/finalize has already run.
Throws ArgumentError if the namespace fails the ^[a-z][a-z0-9_]*$
regex. Throws StateError on a duplicate namespace.
Implementation
void register(LeonardExtension p) {
if (_finalized) {
throw StateError('ExtensionRegistry already finalized');
}
if (!_nsRe.hasMatch(p.namespace)) {
throw ArgumentError.value(
p.namespace,
'namespace',
r'must match ^[a-z][a-z0-9_]*$',
);
}
for (final e in _entries) {
if (e.plugin.namespace == p.namespace) {
throw StateError('duplicate extension namespace: ${p.namespace}');
}
}
_entries.add(
_Entry(p, ExtensionContext(namespace: p.namespace)),
);
}