import * as ts from "typescript"; import {createTransformer, deltaTranslations, TransformerConfig} from "./TsTransformer"; import * as webpack from "webpack"; import {extractJsRendererTranslations} from "./JsRendererGenerator"; import * as path from "path"; export interface TranslateableWebpackPluginConfig { assetName: string, } export class TranslateableWebpackPlugin { private readonly config: TranslateableWebpackPluginConfig; private readonly transformerConfig: TransformerConfig; constructor(config: TranslateableWebpackPluginConfig) { this.config = config; this.transformerConfig = { optimized: true, translations: [], verbose: true }; } createTypeScriptTransformer(program: ts.Program) : ts.TransformerFactory { return createTransformer(program, this.transformerConfig); } createTemplateLoader() { return { loader: path.join(__dirname, "JsRendererTranslationLoader.js"), options: { translations: this.transformerConfig.translations } }; } apply(compiler: webpack.Compiler) { compiler.hooks.emit.tap("TranslateableWebpackPlugin", compilation => { const payload = JSON.stringify(this.transformerConfig.translations); compilation.assets[this.config.assetName] = { size() { return payload.length; }, source() { return payload; } } as any; }); /* compiler.hooks.normalModuleFactory.tap("TranslateableWebpackPlugin", normalModuleFactory => { normalModuleFactory.hooks.resolve.tap("TranslateableWebpackPlugin", resolveData => { if(resolveData.request === "generated-translations") { } }); }); */ } }