149
throw new ProtocolError(JsonRpcErrorCodes.InvalidParams, `Operation '${params.operationId}' is disabled while a turn is active on changeset ${params.channel}`);
150
}
152
const targetKind: ChangesetOperationScope = params.target?.kind === ChangesetOperationTargetKind.Resource
153
? ChangesetOperationScope.Resource
155
? ChangesetOperationScope.Range
157
if (!op.scopes.includes(targetKind)) {
158
throw new ProtocolError(JsonRpcErrorCodes.InvalidParams, `Operation '${params.operationId}' does not support scope '${targetKind}' (allowed: ${op.scopes.join(', ')})`);
159
}
161
>
const handler = this._changesetOperationHandlers.get(params.operationId);
162
>
if (!handler) {
163
throw new ProtocolError(JsonRpcErrorCodes.InternalError, `No operation handler registered for '${params.operationId}' on changeset ${params.channel}`);
164
}
166
>
return this._invokeChangesetOperation(handler, params);
167
}
168
169
private _invokeChangesetOperation(
171
>
params: InvokeChangesetOperationParams,
172
>
): Promise<InvokeChangesetOperationResult> {
173
>
const operationKey = `${params.channel}\x00${params.operationId}\x00${JSON.stringify(params.target ?? null)}`;
174
>
const inFlightOperationResult = this._inFlightOperations.get(operationKey);
175
>
if (inFlightOperationResult) {
176
return inFlightOperationResult;
177
}
179
>
this._stateManager.dispatchServerAction(params.channel, {
180
>
type: ActionType.ChangesetOperationStatusChanged,
181
>
operationId: params.operationId,
182
>
status: ChangesetOperationStatus.Running,
183
>
});
184
>
185
>
const operationPromise = handler.invoke(params, CancellationToken.None)
186
>
.then(result => {
187
this._stateManager.dispatchServerAction(params.channel, {
188
type: ActionType.ChangesetOperationStatusChanged,