typescript-strict-plugin
Version:
Typescript tools that help with migration to the strict mode
41 lines (40 loc) • 1.74 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.log = exports.setupStrictLanguageServiceHostProxy = exports.setupLanguageServiceProxy = void 0;
const constants_1 = require("../common/constants");
function setupLanguageServiceProxy(info) {
const proxy = Object.create(null);
for (const k of Object.keys(info.languageService)) {
const serviceFunction = info.languageService[k];
// @ts-ignore
proxy[k] = (...args) => serviceFunction.apply(info.languageService, args);
}
return proxy;
}
exports.setupLanguageServiceProxy = setupLanguageServiceProxy;
function setupStrictLanguageServiceHostProxy(info) {
const host = info.languageServiceHost;
const strictGetCompilationSettings = () => {
const settings = info.languageServiceHost.getCompilationSettings();
return { ...settings, strict: true };
};
const proxy = new Proxy(host, {
get(target, prop, receiver) {
if (prop === 'getCompilationSettings') {
return strictGetCompilationSettings;
}
// returning `false` because of https://github.com/microsoft/TypeScript/blob/v5.4.5/src/services/services.ts#L1625
// if `true` was returned instead, the `program` would become undefined and it would crash the plugin
if (prop === 'updateFromProject') {
return false;
}
return Reflect.get(target, prop, receiver);
},
});
return proxy;
}
exports.setupStrictLanguageServiceHostProxy = setupStrictLanguageServiceHostProxy;
function log(info, message) {
info.project.projectService.logger.info(`[${constants_1.PLUGIN_NAME}]: ` + message);
}
exports.log = log;
;