|
1 | | -import type tslib from 'typescript/lib/tsserverlibrary' |
| 1 | +import { GetConfig } from './types' |
| 2 | +import { patchMethod } from './utils' |
2 | 3 |
|
3 | | -// not used for now |
4 | | -export default (info: ts.server.PluginCreateInfo) => { |
5 | | - // info.serverHost.readFile = fileName => { |
6 | | - // let contents = realReadFile(fileName) |
7 | | - // if (fileName.endsWith('/node_modules/typescript/lib/lib.dom.d.ts') && c('eventTypePatching.enable')) { |
8 | | - // contents = contents |
9 | | - // ?.replace('interface EventTarget {', 'interface EventTarget extends HTMLElement {') |
10 | | - // .replace('"change": Event;', '"change": Event & {currentTarget: HTMLInputElement, target: HTMLInputElement};') |
11 | | - // .replace('"change": Event;', '"change": Event & {currentTarget: HTMLInputElement, target: HTMLInputElement};') |
12 | | - // .replace('"input": Event;', '"input": Event & {currentTarget: HTMLInputElement, target: HTMLInputElement};') |
13 | | - // } |
14 | | - // return contents |
15 | | - // } |
| 4 | +export default (languageServiceHost: ts.LanguageServiceHost, c: GetConfig) => { |
| 5 | + if (!c('libDomPatching')) return |
| 6 | + patchMethod(languageServiceHost, 'getScriptSnapshot', oldMethod => fileName => { |
| 7 | + const scriptSnapshot = oldMethod(fileName) |
| 8 | + if (!fileName.endsWith('/node_modules/typescript/lib/lib.dom.d.ts') /* && c('eventTypePatching.enable') */) { |
| 9 | + return scriptSnapshot |
| 10 | + } |
| 11 | + if (!scriptSnapshot) return |
| 12 | + let contents = scriptSnapshot.getText(0, scriptSnapshot.getLength()) |
| 13 | + contents = contents |
| 14 | + // .replace(/(interface EventListener \{\n\s*\(evt: )Event(\): void;\n\})/, '$1CustomEvent$2') |
| 15 | + .replace('interface EventTarget {', 'interface EventTarget extends HTMLElement {') |
| 16 | + .replace('"change": Event;', '"change": Event & {currentTarget: HTMLInputElement, target: HTMLInputElement};') |
| 17 | + .replace('"change": Event;', '"change": Event & {currentTarget: HTMLInputElement, target: HTMLInputElement};') |
| 18 | + .replace('"input": Event;', '"input": Event & {currentTarget: HTMLInputElement, target: HTMLInputElement};') |
| 19 | + return ts.ScriptSnapshot.fromString(contents) |
| 20 | + }) |
16 | 21 | } |
0 commit comments