ts-lit-plugin
Version:
Typescript plugin that adds type checking and code completion to lit-html
58 lines (57 loc) • 2.5 kB
JavaScript
;
/* eslint-disable @typescript-eslint/no-explicit-any */
var lit_analyzer_1 = require("lit-analyzer");
var decorate_language_service_1 = require("./decorate-language-service");
var logger_1 = require("./logger");
var lit_plugin_context_1 = require("./ts-lit-plugin/lit-plugin-context");
var ts_lit_plugin_1 = require("./ts-lit-plugin/ts-lit-plugin");
var ts_module_1 = require("./ts-module");
var tsHtmlPluginSymbol = Symbol.for("__tsHtmlPlugin__");
var context = undefined;
/**
* Export a function for the ts-service to initialize our plugin.
* @param typescript
*/
function init(_a) {
var typescript = _a.typescript;
// Cache the typescript module
ts_module_1.setTypescriptModule(typescript);
return {
create: function (info) {
// Check if the language service is already decorated
if (info.languageService[tsHtmlPluginSymbol] != null) {
return info.languageService;
}
// Save the current working directory
info.config.cwd = info.config.cwd || info.project.getCurrentDirectory();
// Extend existing language service with the plugin functions
try {
context = new lit_plugin_context_1.LitPluginContext({
ts: typescript,
getProgram: function () {
return info.languageService.getProgram();
},
getProject: function () {
return info.project;
}
});
context.updateConfig(lit_analyzer_1.makeConfig(info.config));
var plugin = new ts_lit_plugin_1.TsLitPlugin(info.languageService, context);
var decoratedService = decorate_language_service_1.decorateLanguageService(info.languageService, plugin);
// Save that we've extended this service to prevent extending it again
decoratedService[tsHtmlPluginSymbol] = plugin;
return decoratedService;
}
catch (e) {
logger_1.logger.error("ts-lit-plugin crashed while decorating the language service...", e);
return info.languageService;
}
},
onConfigurationChanged: function (config) {
if (context == null || config == null)
return;
context.updateConfig(lit_analyzer_1.makeConfig(config));
}
};
}
module.exports = init;