@styled/typescript-styled-plugin
Version:
TypeScript language service plugin that adds IntelliSense for styled components
58 lines • 2.3 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.StyledVirtualDocumentFactory = void 0;
/**
* Standard virtual document provider for styled content.
*
* Wraps content in a top level `:root { }` rule to make css language service happy
* since styled allows properties to be top level elements.
*/
class StyledVirtualDocumentFactory {
createVirtualDocument(context) {
const contents = `${this.getVirtualDocumentWrapper(context)}${context.text}\n}`;
return {
uri: 'untitled://embedded.scss',
languageId: 'scss',
version: 1,
getText: () => contents,
positionAt: (offset) => {
const pos = context.toPosition(this.fromVirtualDocOffset(offset, context));
return this.toVirtualDocPosition(pos);
},
offsetAt: (p) => {
const offset = context.toOffset(this.fromVirtualDocPosition(p));
return this.toVirtualDocOffset(offset, context);
},
lineCount: contents.split(/\n/g).length + 1,
};
}
toVirtualDocPosition(position) {
return {
line: position.line + 1,
character: position.character,
};
}
fromVirtualDocPosition(position) {
return {
line: position.line - 1,
character: position.character,
};
}
toVirtualDocOffset(offset, context) {
return offset + this.getVirtualDocumentWrapper(context).length;
}
fromVirtualDocOffset(offset, context) {
return offset - this.getVirtualDocumentWrapper(context).length;
}
getVirtualDocumentWrapper(context) {
var _a, _b;
const tag = (_b = (_a = context.node.parent) === null || _a === void 0 ? void 0 : _a.tag) === null || _b === void 0 ? void 0 : _b.escapedText;
return tag === 'keyframes'
? StyledVirtualDocumentFactory.wrapperPreKeyframes
: StyledVirtualDocumentFactory.wrapperPreRoot;
}
}
StyledVirtualDocumentFactory.wrapperPreRoot = ':root{\n';
StyledVirtualDocumentFactory.wrapperPreKeyframes = '@keyframes custom {\n';
exports.StyledVirtualDocumentFactory = StyledVirtualDocumentFactory;
//# sourceMappingURL=_virtual-document-provider.js.map
;