|
| 1 | +import * as webpack from 'webpack'; |
| 2 | +import { AsyncSeriesHook, SyncHook } from 'tapable'; |
| 3 | + |
| 4 | +type ForkTsCheckerHooks = |
| 5 | + | 'serviceBeforeStart' |
| 6 | + | 'cancel' |
| 7 | + | 'serviceStartError' |
| 8 | + | 'waiting' |
| 9 | + | 'serviceStart' |
| 10 | + | 'receive' |
| 11 | + | 'serviceOutOfMemory' |
| 12 | + | 'emit' |
| 13 | + | 'done'; |
| 14 | +type ForkTsCheckerHookMap = Record< |
| 15 | + ForkTsCheckerHooks, |
| 16 | + SyncHook | AsyncSeriesHook |
| 17 | +>; |
| 18 | +type ForkTsCheckerLegacyHookMap = Record<ForkTsCheckerHooks, string>; |
| 19 | + |
| 20 | +const compilerHookMap = new WeakMap<webpack.Compiler, ForkTsCheckerHookMap>(); |
| 21 | + |
| 22 | +export const legacyHookMap: ForkTsCheckerLegacyHookMap = { |
| 23 | + serviceBeforeStart: 'fork-ts-checker-service-before-start', |
| 24 | + cancel: 'fork-ts-checker-cancel', |
| 25 | + serviceStartError: 'fork-ts-checker-service-start-error', |
| 26 | + waiting: 'fork-ts-checker-waiting', |
| 27 | + serviceStart: 'fork-ts-checker-service-start', |
| 28 | + receive: 'fork-ts-checker-receive', |
| 29 | + serviceOutOfMemory: 'fork-ts-checker-service-out-of-memory', |
| 30 | + emit: 'fork-ts-checker-emit', |
| 31 | + done: 'fork-ts-checker-done' |
| 32 | +}; |
| 33 | + |
| 34 | +function createForkTsCheckerWebpackPluginHooks(): ForkTsCheckerHookMap { |
| 35 | + return { |
| 36 | + serviceBeforeStart: new AsyncSeriesHook([]), |
| 37 | + cancel: new SyncHook(['cancellationToken']), |
| 38 | + serviceStartError: new SyncHook(['error']), |
| 39 | + waiting: new SyncHook(['hasTsLint']), |
| 40 | + serviceStart: new SyncHook([ |
| 41 | + 'tsconfigPath', |
| 42 | + 'tslintPath', |
| 43 | + 'watchPaths', |
| 44 | + 'workersNumber', |
| 45 | + 'memoryLimit' |
| 46 | + ]), |
| 47 | + receive: new SyncHook(['diagnostics', 'lints']), |
| 48 | + serviceOutOfMemory: new SyncHook([]), |
| 49 | + emit: new SyncHook(['diagnostics', 'lints', 'elapsed']), |
| 50 | + done: new SyncHook(['diagnostics', 'lints', 'elapsed']) |
| 51 | + }; |
| 52 | +} |
| 53 | + |
| 54 | +export function getForkTsCheckerWebpackPluginHooks(compiler: webpack.Compiler) { |
| 55 | + let hooks = compilerHookMap.get(compiler); |
| 56 | + if (hooks === undefined) { |
| 57 | + hooks = createForkTsCheckerWebpackPluginHooks(); |
| 58 | + compilerHookMap.set(compiler, hooks); |
| 59 | + } |
| 60 | + return hooks; |
| 61 | +} |
0 commit comments