Socket
Socket
Sign inDemoInstall

pug-filters

Package Overview
Dependencies
5
Maintainers
3
Versions
22
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.1.1 to 4.0.0-canary-1

2

index.js
'use strict';
exports.runFilter = require('./lib/run-filter');
exports.handleFilters = require('./lib/handle-filters');
exports.handleFilters = require('./lib/handle-filters');

@@ -12,52 +12,67 @@ 'use strict';

options = options || {};
walk(ast, function (node) {
var dir = node.filename ? dirname(node.filename) : null;
if (node.type === 'Filter') {
handleNestedFilters(node, filters, options, filterAliases);
var text = getBodyAsText(node);
var attrs = getAttributes(node, options);
attrs.filename = node.filename;
node.type = 'Text';
node.val = filterWithFallback(node, text, attrs);
} else if (node.type === 'RawInclude' && node.filters.length) {
var firstFilter = node.filters.pop();
var attrs = getAttributes(firstFilter, options);
var filename = attrs.filename = node.file.fullPath;
var str = node.file.str;
node.type = 'Text';
node.val = filterFileWithFallback(firstFilter, filename, str, attrs);
node.filters.slice().reverse().forEach(function (filter) {
var attrs = getAttributes(filter, options);
attrs.filename = filename;
node.val = filterWithFallback(filter, node.val, attrs);
});
node.filters = undefined;
node.file = undefined;
}
walk(
ast,
function(node) {
var dir = node.filename ? dirname(node.filename) : null;
if (node.type === 'Filter') {
handleNestedFilters(node, filters, options, filterAliases);
var text = getBodyAsText(node);
var attrs = getAttributes(node, options);
attrs.filename = node.filename;
node.type = 'Text';
node.val = filterWithFallback(node, text, attrs);
} else if (node.type === 'RawInclude' && node.filters.length) {
var firstFilter = node.filters.pop();
var attrs = getAttributes(firstFilter, options);
var filename = (attrs.filename = node.file.fullPath);
node.type = 'Text';
node.val = filterFileWithFallback(
firstFilter,
filename,
node.file,
attrs
);
node.filters
.slice()
.reverse()
.forEach(function(filter) {
var attrs = getAttributes(filter, options);
attrs.filename = filename;
node.val = filterWithFallback(filter, node.val, attrs);
});
node.filters = undefined;
node.file = undefined;
}
function filterWithFallback(filter, text, attrs, funcName) {
try {
function filterWithFallback(filter, text, attrs, funcName) {
try {
var filterName = getFilterName(filter);
if (filters && filters[filterName]) {
return filters[filterName](text, attrs);
} else {
return runFilter(filterName, text, attrs, dir, funcName);
}
} catch (ex) {
if (ex.code === 'UNKNOWN_FILTER') {
throw error(ex.code, ex.message, filter);
}
throw ex;
}
}
function filterFileWithFallback(filter, filename, file, attrs) {
var filterName = getFilterName(filter);
if (filters && filters[filterName]) {
return filters[filterName](text, attrs);
if (filters[filterName].renderBuffer) {
return filters[filterName].renderBuffer(file.raw, attrs);
} else {
return filters[filterName](file.str, attrs);
}
} else {
return runFilter(filterName, text, attrs, dir, funcName);
return filterWithFallback(filter, filename, attrs, 'renderFile');
}
} catch (ex) {
if (ex.code === 'UNKNOWN_FILTER') {
throw error(ex.code, ex.message, filter);
}
throw ex;
}
}
function filterFileWithFallback(filter, filename, text, attrs) {
var filterName = getFilterName(filter);
if (filters && filters[filterName]) {
return filters[filterName](text, attrs);
} else {
return filterWithFallback(filter, filename, attrs, 'renderFile');
}
}
}, {includeDependencies: true});
},
{includeDependencies: true}
);
function getFilterName(filter) {

@@ -70,5 +85,9 @@ var filterName = filter.name;

'FILTER_ALISE_CHAIN',
'The filter "' + filter.name + '" is an alias for "' + filterName +
'", which is an alias for "' + filterAliases[filterName] +
'". Pug does not support chains of filter aliases.',
'The filter "' +
filter.name +
'" is an alias for "' +
filterName +
'", which is an alias for "' +
filterAliases[filterName] +
'". Pug does not support chains of filter aliases.',
filter

@@ -81,7 +100,12 @@ );

return ast;
};
}
function handleNestedFilters(node, filters, options, filterAliases) {
if (node.block.nodes[0] && node.block.nodes[0].type === 'Filter') {
node.block.nodes[0] = handleFilters(node.block, filters, options, filterAliases).nodes[0];
node.block.nodes[0] = handleFilters(
node.block,
filters,
options,
filterAliases
).nodes[0];
}

@@ -91,5 +115,7 @@ }

function getBodyAsText(node) {
return node.block.nodes.map(
function(node){ return node.val; }
).join('');
return node.block.nodes
.map(function(node) {
return node.val;
})
.join('');
}

@@ -99,8 +125,14 @@

var attrs = {};
node.attrs.forEach(function (attr) {
node.attrs.forEach(function(attr) {
try {
attrs[attr.name] = attr.val === true ? true : constantinople.toConstant(attr.val);
attrs[attr.name] =
attr.val === true ? true : constantinople.toConstant(attr.val);
} catch (ex) {
if (/not constant/.test(ex.message)) {
throw error('FILTER_OPTION_NOT_CONSTANT', ex.message + ' All filters are rendered compile-time so filter options must be constants.', node);
throw error(
'FILTER_OPTION_NOT_CONSTANT',
ex.message +
' All filters are rendered compile-time so filter options must be constants.',
node
);
}

@@ -111,3 +143,3 @@ throw ex;

var opts = options[node.name] || {};
Object.keys(opts).forEach(function (opt) {
Object.keys(opts).forEach(function(opt) {
if (!attrs.hasOwnProperty(opt)) {

@@ -114,0 +146,0 @@ attrs[opt] = opts[opt];

'use strict';
var jstransformer = require('jstransformer');
var uglify = require('uglify-js');
var CleanCSS = require('clean-css');
var resolve = require('resolve');
module.exports = filter;
function getMinifyTransformerName(outputFormat) {
switch (outputFormat) {
case 'js':
return 'uglify-js';
case 'css':
return 'clean-css';
}
}
function filter(name, str, options, currentDirectory, funcName) {

@@ -14,3 +22,5 @@ funcName = funcName || 'render';

try {
trPath = resolve.sync('jstransformer-' + name, {basedir: currentDirectory || process.cwd()});
trPath = resolve.sync('jstransformer-' + name, {
basedir: currentDirectory || process.cwd(),
});
} catch (ex) {

@@ -28,13 +38,9 @@ trPath = require.resolve('jstransformer-' + name);

if (options && options.minify) {
try {
switch (tr.outputFormat) {
case 'js':
result = uglify.minify(result, {fromString: true}).code;
break;
case 'css':
result = new CleanCSS().minify(result).styles;
break;
var minifyTranformer = getMinifyTransformerName(tr.outputFormat);
if (minifyTranformer) {
try {
result = filter(minifyTranformer, result, null, currentDirectory);
} catch (ex) {
// better to fail to minify than output nothing
}
} catch (ex) {
// better to fail to minify than output nothing
}

@@ -41,0 +47,0 @@ }

{
"name": "pug-filters",
"version": "3.1.1",
"version": "4.0.0-canary-1",
"description": "Code for processing filters in pug templates",

@@ -9,21 +9,18 @@ "keywords": [

"dependencies": {
"clean-css": "^4.1.11",
"constantinople": "^3.0.1",
"constantinople": "^4.0.1",
"jstransformer": "1.0.0",
"pug-error": "^1.3.3",
"pug-walk": "^1.1.8",
"resolve": "^1.1.6",
"uglify-js": "^2.6.1"
"pug-error": "2.0.0-canary-1",
"pug-walk": "2.0.0-canary-1",
"resolve": "^1.15.1"
},
"devDependencies": {
"get-repo": "^1.0.0",
"jstransformer-cdata": "^1.0.0",
"jstransformer-coffee-script": "^1.0.0",
"jstransformer-less": "^2.1.0",
"jstransformer-markdown-it": "^1.0.0",
"jstransformer-stylus": "^1.0.0",
"jstransformer-uglify-js": "^1.1.1",
"pug-lexer": "^4.1.0",
"pug-load": "^2.0.12",
"pug-parser": "^5.0.1"
"jstransformer-coffee-script": "^1.1.1",
"jstransformer-less": "^2.3.0",
"jstransformer-markdown-it": "^2.0.0",
"jstransformer-stylus": "^1.5.0",
"jstransformer-uglify-js": "^1.2.0",
"pug-lexer": "5.0.0-canary-1",
"pug-load": "3.0.0-canary-1",
"pug-parser": "6.0.0-canary-1"
},

@@ -40,4 +37,3 @@ "files": [

"author": "Forbes Lindesay",
"license": "MIT",
"gitHead": "1bdf628a70fda7a0d840c52f3abce54b1c6b0130"
"license": "MIT"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc