UNPKG

ts-lit-plugin

Version:

Typescript plugin that adds type checking and code completion to lit-html

58 lines (57 loc) 2.5 kB
"use strict"; /* 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;