UNPKG

3.79 kBJavaScriptView Raw
1"use strict";
2var __importStar = (this && this.__importStar) || function (mod) {
3 if (mod && mod.__esModule) return mod;
4 var result = {};
5 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
6 result["default"] = mod;
7 return result;
8};
9/* eslint-disable @typescript-eslint/no-explicit-any */
10var lit_analyzer_1 = require("lit-analyzer");
11var ts = __importStar(require("typescript"));
12var web_component_analyzer_1 = require("web-component-analyzer");
13var decorate_language_service_1 = require("./decorate-language-service");
14var logger_1 = require("./logger");
15var lit_plugin_context_1 = require("./ts-lit-plugin/lit-plugin-context");
16var ts_lit_plugin_1 = require("./ts-lit-plugin/ts-lit-plugin");
17var ts_module_1 = require("./ts-module");
18var tsHtmlPluginSymbol = Symbol.for("__tsHtmlPlugin__");
19var context = undefined;
20/**
21 * Export a function for the ts-service to initialize our plugin.
22 * @param typescript
23 */
24function init(_a) {
25 var typescript = _a.typescript;
26 // Cache the typescript module
27 ts_module_1.setTypescriptModule(typescript);
28 /**
29 * This function is used to print debug info once
30 * Yes, it's a self destructing function!
31 */
32 var printDebugOnce = function () {
33 if (logger_1.logger.level >= logger_1.LoggingLevel.DEBUG) {
34 logger_1.logger.debug("Lit Analyzer: " + lit_analyzer_1.VERSION);
35 logger_1.logger.debug("Web Component Analyzer: " + web_component_analyzer_1.VERSION);
36 logger_1.logger.debug("Installed Typescript: " + ts.version);
37 logger_1.logger.debug("Running Typescript: " + typescript.version);
38 logger_1.logger.debug("DIRNAME: " + __dirname);
39 printDebugOnce = undefined;
40 }
41 };
42 return {
43 create: function (info) {
44 // Check if the language service is already decorated
45 if (info.languageService[tsHtmlPluginSymbol] != null) {
46 return info.languageService;
47 }
48 // Save the current working directory
49 info.config.cwd = info.config.cwd || info.project.getCurrentDirectory();
50 // Extend existing language service with the plugin functions
51 try {
52 context = new lit_plugin_context_1.LitPluginContext({
53 ts: typescript,
54 getProgram: function () {
55 return info.languageService.getProgram();
56 },
57 getProject: function () {
58 return info.project;
59 }
60 });
61 context.updateConfig(lit_analyzer_1.makeConfig(info.config));
62 logger_1.logger.verbose("Starting ts-lit-plugin...");
63 if (printDebugOnce != null)
64 printDebugOnce();
65 var plugin = new ts_lit_plugin_1.TsLitPlugin(info.languageService, context);
66 var decoratedService = decorate_language_service_1.decorateLanguageService(info.languageService, plugin);
67 // Save that we've extended this service to prevent extending it again
68 decoratedService[tsHtmlPluginSymbol] = plugin;
69 return decoratedService;
70 }
71 catch (e) {
72 logger_1.logger.error("ts-lit-plugin crashed while decorating the language service...", e);
73 return info.languageService;
74 }
75 },
76 onConfigurationChanged: function (config) {
77 if (context == null || config == null)
78 return;
79 context.updateConfig(lit_analyzer_1.makeConfig(config));
80 if (printDebugOnce != null)
81 printDebugOnce();
82 }
83 };
84}
85module.exports = init;