xstate-tsserver
Version:
XState tsserver plugin for easier navigation in state machines
77 lines • 2.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createNodeDefinition = createNodeDefinition;
exports.createNodeDefinitionWithTextSpan = createNodeDefinitionWithTextSpan;
exports.createNodeDefinitionWithDisplayParts = createNodeDefinitionWithDisplayParts;
exports.createReferenceDefinition = createReferenceDefinition;
exports.getTransitionType = getTransitionType;
const tsserverlibrary_1 = require("typescript/lib/tsserverlibrary");
function createNodeDefinition(fileName, node) {
return {
name: node.text,
textSpan: {
start: node.startIndex,
length: node.endIndex - node.startIndex,
},
fileName,
// TODO: Check if these are correct and what else should be added
containerName: "",
containerKind: tsserverlibrary_1.ScriptElementKind.unknown,
kind: tsserverlibrary_1.ScriptElementKind.string,
};
}
function createNodeDefinitionWithTextSpan(fileName, newNode, originalNode) {
return {
definitions: [createNodeDefinition(fileName, newNode)],
textSpan: {
start: originalNode.startIndex,
length: originalNode.endIndex - originalNode.startIndex,
},
};
}
function createNodeDefinitionWithDisplayParts(fileName, newNode) {
return {
...createNodeDefinition(fileName, newNode),
displayParts: [
{
kind: tsserverlibrary_1.ScriptElementKind.string,
text: newNode.text,
},
],
};
}
function createReferenceDefinition(fileName, node, extraOpts) {
return {
fileName,
textSpan: {
start: node.startIndex,
length: node.endIndex - node.startIndex,
},
isWriteAccess: true,
isDefinition: false,
...extraOpts,
};
}
/**
* Returns the transition type and target string
*/
function getTransitionType(transition) {
if (!transition)
return { type: "unknown", target: "" };
if (transition.startsWith("#"))
return {
type: "absolute",
target: transition.slice(1),
};
if (transition.startsWith(".")) {
return {
type: "relativeChildren",
target: transition.slice(1),
};
}
return {
type: "relative",
target: transition,
};
}
//# sourceMappingURL=utils.js.map