invokeIdentifier method

Future<PatchbayInvocation> invokeIdentifier({
  1. required String identifier,
  2. required int generation,
  3. required PatchbaySemanticsAction action,
  4. String? text,
  5. bool inputWasStdin = false,
  6. String? requestId,
})

Resolves a stable Semantics identifier and dispatches one public action while preserving the caller's required generation fence.

Implementation

Future<PatchbayInvocation> invokeIdentifier({
  required String identifier,
  required int generation,
  required PatchbaySemanticsAction action,
  String? text,
  bool inputWasStdin = false,
  String? requestId,
}) {
  final String id = requestId ?? _newRequestId();
  final List<String> invalid = <String>[
    if (identifier.isEmpty) 'identifier',
    if (generation < 0) 'generation',
    if (!action.isPublicIdentifierAction) 'action',
  ];
  if (invalid.isNotEmpty) {
    return Future<PatchbayInvocation>.value(
      PatchbayInvocation.rejected(
        requestId: id,
        rejection: PatchbayRejection(
          code: 'invalidUiArguments',
          notice:
              'identifier must be non-empty, generation non-negative, and '
              'action publicly declared.',
          details: <String, Object?>{'invalid': invalid},
        ),
      ),
    );
  }
  return _dispatch(
    requestId: id,
    action: action,
    identifier: identifier,
    text: text,
    inputWasStdin: inputWasStdin,
    resolve: (int? pinnedGeneration) => _resolver.byIdentifier(
      identifier: identifier,
      expectedGeneration: pinnedGeneration ?? generation,
      action: action,
    ),
  );
}