UNPKG

3.27 kBJavaScriptView Raw
1'use strict';
2
3var transformers = require('transformers');
4var jstransformer = require('jstransformer');
5var uglify = require('uglify-js');
6var CleanCSS = require('clean-css');
7
8var warned = {};
9var alternatives = {
10 uglifyJS: 'uglify-js',
11 uglify: 'uglify-js',
12 uglifyCSS: 'clean-css',
13 'uglify-css': 'clean-css' ,
14 uglifyJSON: 'json',
15 'uglify-json': 'json',
16 live: 'livescript',
17 LiveScript: 'livescript',
18 ls: 'livescript',
19 // TODO: remove if we add support for coffeekup
20 coffeekup: 'coffeecup',
21 // The `style` transformer is not the same as the `stylus` jstransformer
22 styl: 'stylus',
23 coffee: 'coffee-script',
24 coffeescript: 'coffee-script',
25 coffeeScript: 'coffee-script',
26 // these marker transformers haven't made sense in a long time
27 css: 'verbatim',
28 js: 'verbatim',
29};
30var deprecated = ['jqtpl', 'jazz'];
31function getMarkdownImplementation() {
32 var implementations = ['marked', 'supermarked', 'markdown-js', 'markdown'];
33 while (implementations.length) {
34 try {
35 require(implementations[0]);
36 return implementations[0];
37 } catch (ex) {
38 implementations.shift();
39 }
40 }
41 return 'markdown-it';
42}
43
44module.exports = filter;
45function filter(name, str, options) {
46 if (typeof filter[name] === 'function') {
47 return filter[name](str, options);
48 } else {
49 var tr;
50 try {
51 tr = jstransformer(require('jstransformer-' + name));
52 } catch (ex) {}
53 if (tr) {
54 // TODO: we may want to add a way for people to separately specify "locals"
55 var result = tr.render(str, options, options).body;
56 if (options && options.minify) {
57 try {
58 switch (tr.outputFormat) {
59 case 'js':
60 result = uglify.minify(result, {fromString: true}).code;
61 break;
62 case 'css':
63 result = new CleanCSS().minify(result).styles;
64 break;
65 }
66 } catch (ex) {
67 // better to fail to minify than output nothing
68 }
69 }
70 return result;
71 } else if (transformers[name]) {
72 if (!warned[name]) {
73 warned[name] = true;
74 if (name === 'md' || name === 'markdown') {
75 var implementation = getMarkdownImplementation();
76 console.log('Transformers.' + name + ' is deprecated, you must replace the :' +
77 name + ' jade filter, with :' +
78 implementation + ' and install jstransformer-' +
79 implementation + ' before you update to jade@2.0.0.');
80 } else if (alternatives[name]) {
81 console.log('Transformers.' + name + ' is deprecated, you must replace the :' +
82 name + ' jade filter, with :' +
83 alternatives[name] + ' and install jstransformer-' +
84 alternatives[name] + ' before you update to jade@2.0.0.');
85 } else {
86 console.log('Transformers.' + name + ' is deprecated, to continue using the :' +
87 name + ' jade filter after jade@2.0.0, you will need to install jstransformer-' +
88 name.toLowerCase() + '.');
89 }
90 }
91 return transformers[name].renderSync(str, options);
92 } else {
93 throw new Error('unknown filter ":' + name + '"');
94 }
95 }
96}