From cc42d530f8f3319f2cf76f49bd80cbb32bcb2729 Mon Sep 17 00:00:00 2001 From: Xiaohan Zhang Date: Tue, 21 Jul 2015 21:36:09 -0700 Subject: [PATCH] add preprocessors to plugins --- less/less-tests.ts | 24 ++++++++++++++++++++++++ less/less.d.ts | 18 ++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/less/less-tests.ts b/less/less-tests.ts index 589250d0bb..b6326b4a4d 100644 --- a/less/less-tests.ts +++ b/less/less-tests.ts @@ -11,3 +11,27 @@ less.render("fail").then((output) => { }, (error: Less.RenderError) => { console.log("rejected as expected on line number " + error.line); }); + +var preProcessor: Less.PreProcessor = { + process: (src, extra) => { + console.log(extra.imports, extra.context); + if (extra.fileInfo.filename === "foo.less") { + return ".other-rule { width: (1 + 1); }\n " + src; + } else { + return src; + } + } +}; + +var myPlugin: Less.Plugin = { + install: (less, pluginManager) => { + alert(less.version[2]); + pluginManager.addPreProcessor(preProcessor, 1000); + } +}; + +var options: Less.Options = { + plugins: [myPlugin] +}; + +less.render("h1 { background: red; }", options); diff --git a/less/less.d.ts b/less/less.d.ts index f329dd48ef..c8a83fbc86 100644 --- a/less/less.d.ts +++ b/less/less.d.ts @@ -30,12 +30,30 @@ declare module Less { class PluginManager { constructor(less: LessStatic); + + addPreProcessor(preProcessor: PreProcessor, priority?: number): void; } interface Plugin { install: (less: LessStatic, pluginManager: PluginManager) => void; } + interface PreProcessor { + process: (src: string, extra: PreProcessorExtraInfo) => string; + } + + interface PreProcessorExtraInfo { + context: { + pluginManager: PluginManager; + }; + + fileInfo: RootFileInfo; + + imports: { + [key: string]: any; + }; + } + interface SourceMapOption { sourceMapURL: string; sourceMapBasepath: string;