55 lines
No EOL
1.8 KiB
TypeScript
55 lines
No EOL
1.8 KiB
TypeScript
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<ts.Node> {
|
|
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") {
|
|
}
|
|
});
|
|
});
|
|
*/
|
|
}
|
|
} |