pug-filters
Advanced tools
Comparing version 3.1.1 to 4.0.0-canary-1
'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" | ||
} |
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
9629
5
9
183
2
+ Added@babel/helper-string-parser@7.24.8(transitive)
+ Added@babel/helper-validator-identifier@7.24.7(transitive)
+ Added@babel/parser@7.24.8(transitive)
+ Added@babel/types@7.24.9(transitive)
+ Addedconstantinople@4.0.1(transitive)
+ Addedpug-error@2.0.0-canary-1(transitive)
+ Addedpug-walk@2.0.0-canary-1(transitive)
+ Addedto-fast-properties@2.0.0(transitive)
- Removedclean-css@^4.1.11
- Removeduglify-js@^2.6.1
- Removed@types/babel-types@7.0.15(transitive)
- Removed@types/babylon@6.16.9(transitive)
- Removedalign-text@0.1.4(transitive)
- Removedbabel-runtime@6.26.0(transitive)
- Removedbabel-types@6.26.0(transitive)
- Removedbabylon@6.18.0(transitive)
- Removedcamelcase@1.2.1(transitive)
- Removedcenter-align@0.1.3(transitive)
- Removedclean-css@4.2.4(transitive)
- Removedcliui@2.1.0(transitive)
- Removedconstantinople@3.1.2(transitive)
- Removedcore-js@2.6.12(transitive)
- Removeddecamelize@1.2.0(transitive)
- Removedesutils@2.0.3(transitive)
- Removedis-buffer@1.1.6(transitive)
- Removedkind-of@3.2.2(transitive)
- Removedlazy-cache@1.0.4(transitive)
- Removedlodash@4.17.21(transitive)
- Removedlongest@1.0.1(transitive)
- Removedpug-error@1.3.3(transitive)
- Removedpug-walk@1.1.8(transitive)
- Removedregenerator-runtime@0.11.1(transitive)
- Removedrepeat-string@1.6.1(transitive)
- Removedright-align@0.1.3(transitive)
- Removedsource-map@0.5.70.6.1(transitive)
- Removedto-fast-properties@1.0.3(transitive)
- Removeduglify-js@2.8.29(transitive)
- Removeduglify-to-browserify@1.0.2(transitive)
- Removedwindow-size@0.1.0(transitive)
- Removedwordwrap@0.0.2(transitive)
- Removedyargs@3.10.0(transitive)
Updatedconstantinople@^4.0.1
Updatedpug-error@2.0.0-canary-1
Updatedpug-walk@2.0.0-canary-1
Updatedresolve@^1.15.1