@eclipse-glsp/protocol
Version:
The protocol definition for client-server communication in GLSP
210 lines • 9.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NavigateToExternalTargetAction = exports.SetResolvedNavigationTargetAction = exports.ResolveNavigationTargetAction = exports.NavigateToTargetAction = exports.SetNavigationTargetsAction = exports.RequestNavigationTargetsAction = exports.NavigationTarget = void 0;
const type_util_1 = require("../utils/type-util");
const base_protocol_1 = require("./base-protocol");
var NavigationTarget;
(function (NavigationTarget) {
function is(object) {
return type_util_1.AnyObject.is(object) && (0, type_util_1.hasStringProp)(object, 'uri');
}
NavigationTarget.is = is;
/**
* Generic key to store element ids as additional argument
*/
NavigationTarget.ELEMENT_IDS = 'elementIds';
/**
* The separator that is used to store he values for the {@link ELEMENT_IDS} as a single string.
*/
NavigationTarget.ELEMENT_IDS_SEPARATOR = '&';
/**
* Generic key ot store the line property of a {@link TextPosition} as additional argument.
*/
NavigationTarget.TEXT_LINE = 'line';
/**
* Generic key ot store the character property of a {@link TextPosition} as additional argument.
*/
NavigationTarget.TEXT_COLUMN = 'column';
/**
* Utility function to check wether the given {@link NavigationTarget} has additional arguments defined.
* @param target The navigation target to check.
* @returns `true` if the navigation target has a non-empty `args` property, `false`
*/
function hasArguments(target) {
return target.args !== undefined && Object.keys(target.args).length > 0;
}
NavigationTarget.hasArguments = hasArguments;
/**
* Adds a new key-value pair to the additional arguments of the given {@link NavigationTarget}.
* @param target The navigation target.
* @param key The key of the new argument.
* @param value The (primitive) value of the new argument.
*/
function addArgument(target, key, value) {
if (!target.args) {
target.args = {};
}
target.args[key] = value;
}
NavigationTarget.addArgument = addArgument;
/**
* Retrieves the element ids that have been stored with the generic {@link ELEMENT_IDS} key from the args of the
* given target.
* @param target The navigation target.
* @returns An array with the parsed element ids. The array is empty if no {@link ELEMENT_IDS} key is present in the args
* of the navigation target.
*/
function getElementIds(target) {
var _a;
if (!((_a = target === null || target === void 0 ? void 0 : target.args) === null || _a === void 0 ? void 0 : _a[NavigationTarget.ELEMENT_IDS])) {
return [];
}
const elementIdsValue = target.args[NavigationTarget.ELEMENT_IDS].toString();
return elementIdsValue.split(NavigationTarget.ELEMENT_IDS_SEPARATOR);
}
NavigationTarget.getElementIds = getElementIds;
/**
* Stores the given element ids in the given {@link NavigationTarget} as additional arguments using the generic {@link ELEMENT_IDS} key.
* @param target The navigation target.
* @param elementIds The element ids that should be stored.
* @returns the value of the {@link ELEMENT_IDS} key after storing the given element ids.
*/
function setElementIds(target, ...elementIds) {
if (target.args === undefined) {
target.args = {};
}
return (target.args[NavigationTarget.ELEMENT_IDS] = elementIds.join(NavigationTarget.ELEMENT_IDS_SEPARATOR));
}
NavigationTarget.setElementIds = setElementIds;
/**
* Stores the given {@link TextPosition} in the given {@link NavigationTarget} as additional arguments using
* the generic {@link TEXT_LINE} & {@link TEXT_COLUMN} keys.
* @param target The navigation target.
* @param position The text position that should be stored.
*/
function setTextPosition(target, position) {
if (position) {
if (target.args === undefined) {
target.args = {};
}
target.args[NavigationTarget.TEXT_LINE] = position.line;
target.args[NavigationTarget.TEXT_COLUMN] = position.character;
}
}
NavigationTarget.setTextPosition = setTextPosition;
/**
* Retrieves the {@link TextPosition} that have been stored with the generic {@link TEXT_LINE} & {@link TEXT_COLUMN} keys
* from the args of the given target.
* @param target The navigation target.
* @returns The parsed text position or `undefined` if one of the generic text keys is not present in the args
* of the navigation target.
*/
function getTextPosition(target) {
if (!target.args || !target.args[NavigationTarget.TEXT_LINE] || !target.args[NavigationTarget.TEXT_COLUMN]) {
return undefined;
}
return {
line: Number(target.args[NavigationTarget.TEXT_LINE]),
character: Number(target.args[NavigationTarget.TEXT_COLUMN])
};
}
NavigationTarget.getTextPosition = getTextPosition;
})(NavigationTarget || (exports.NavigationTarget = NavigationTarget = {}));
var RequestNavigationTargetsAction;
(function (RequestNavigationTargetsAction) {
RequestNavigationTargetsAction.KIND = 'requestNavigationTargets';
function is(object) {
return base_protocol_1.RequestAction.hasKind(object, RequestNavigationTargetsAction.KIND) && (0, type_util_1.hasStringProp)(object, 'targetTypeId') && (0, type_util_1.hasObjectProp)(object, 'editorContext');
}
RequestNavigationTargetsAction.is = is;
function create(options) {
return {
kind: RequestNavigationTargetsAction.KIND,
requestId: '',
...options
};
}
RequestNavigationTargetsAction.create = create;
})(RequestNavigationTargetsAction || (exports.RequestNavigationTargetsAction = RequestNavigationTargetsAction = {}));
var SetNavigationTargetsAction;
(function (SetNavigationTargetsAction) {
SetNavigationTargetsAction.KIND = 'setNavigationTargets';
function is(object) {
return base_protocol_1.Action.hasKind(object, SetNavigationTargetsAction.KIND) && (0, type_util_1.hasArrayProp)(object, 'targets');
}
SetNavigationTargetsAction.is = is;
function create(targets, options = {}) {
return {
kind: SetNavigationTargetsAction.KIND,
responseId: '',
targets,
...options
};
}
SetNavigationTargetsAction.create = create;
})(SetNavigationTargetsAction || (exports.SetNavigationTargetsAction = SetNavigationTargetsAction = {}));
var NavigateToTargetAction;
(function (NavigateToTargetAction) {
NavigateToTargetAction.KIND = 'navigateToTarget';
function is(object) {
return base_protocol_1.Action.hasKind(object, NavigateToTargetAction.KIND) && (0, type_util_1.hasObjectProp)(object, 'target');
}
NavigateToTargetAction.is = is;
function create(target) {
return {
kind: NavigateToTargetAction.KIND,
target
};
}
NavigateToTargetAction.create = create;
})(NavigateToTargetAction || (exports.NavigateToTargetAction = NavigateToTargetAction = {}));
var ResolveNavigationTargetAction;
(function (ResolveNavigationTargetAction) {
ResolveNavigationTargetAction.KIND = 'resolveNavigationTarget';
function is(object) {
return base_protocol_1.RequestAction.hasKind(object, ResolveNavigationTargetAction.KIND) && (0, type_util_1.hasObjectProp)(object, 'navigationTarget');
}
ResolveNavigationTargetAction.is = is;
function create(navigationTarget, options = {}) {
return {
kind: ResolveNavigationTargetAction.KIND,
requestId: '',
navigationTarget,
...options
};
}
ResolveNavigationTargetAction.create = create;
})(ResolveNavigationTargetAction || (exports.ResolveNavigationTargetAction = ResolveNavigationTargetAction = {}));
var SetResolvedNavigationTargetAction;
(function (SetResolvedNavigationTargetAction) {
SetResolvedNavigationTargetAction.KIND = 'setResolvedNavigationTarget';
function is(object) {
return base_protocol_1.Action.hasKind(object, SetResolvedNavigationTargetAction.KIND) && (0, type_util_1.hasArrayProp)(object, 'elementIds');
}
SetResolvedNavigationTargetAction.is = is;
function create(elementIds, options = {}) {
return {
kind: SetResolvedNavigationTargetAction.KIND,
responseId: '',
elementIds,
...options
};
}
SetResolvedNavigationTargetAction.create = create;
})(SetResolvedNavigationTargetAction || (exports.SetResolvedNavigationTargetAction = SetResolvedNavigationTargetAction = {}));
var NavigateToExternalTargetAction;
(function (NavigateToExternalTargetAction) {
NavigateToExternalTargetAction.KIND = 'navigateToExternalTarget';
function is(object) {
return base_protocol_1.Action.hasKind(object, NavigateToExternalTargetAction.KIND) && (0, type_util_1.hasObjectProp)(object, 'target');
}
NavigateToExternalTargetAction.is = is;
function create(target) {
return {
kind: NavigateToExternalTargetAction.KIND,
target
};
}
NavigateToExternalTargetAction.create = create;
})(NavigateToExternalTargetAction || (exports.NavigateToExternalTargetAction = NavigateToExternalTargetAction = {}));
//# sourceMappingURL=element-navigation.js.map