New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

metalsmith-jstransformer

Package Overview
Dependencies
Maintainers
1
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

metalsmith-jstransformer - npm Package Compare versions

Comparing version 0.4.0 to 0.5.0

4

HISTORY.md
# Changelog
## v0.5.0: 2015-07-11
- Added async support
## v0.4.0: 2015-07-08

@@ -4,0 +8,0 @@

135

index.js
var jstransformer = require('jstransformer')
var toTransformer = require('inputformat-to-jstransformer')
var transformers = {}
var path = require('path')
var extend = require('extend')
var async = require('async')
var clone = require('clone')
var transformers = {}

@@ -13,11 +15,8 @@ /**

function getTransformer (name) {
if (transformers[name]) {
if (name in transformers) {
return transformers[name]
}
var transformer = toTransformer(name)
if (transformer) {
transformer = jstransformer(transformer)
}
transformers[name] = transformer
return transformer
transformers[name] = transformer ? jstransformer(transformer) : false
return transformers[name]
}

@@ -27,53 +26,91 @@

return function (files, metalsmith, done) {
// Loop through every file.
for (var file in files) {
// Do not process partials.
if (path.basename(file).charAt(0) !== '_') {
// Get all the transforming extensions.
var extensions = file.split('.')
// Prepare what the default output format should be.
var outputFormat = ''
// Loop through all the extensions in reverse order.
for (var i = extensions.length - 1; i > 0; i--) {
// Retrieve the transformer.
var transformer = getTransformer(extensions[i])
if (transformer) {
// Process the content of the file with the transformer.
var input = files[file].contents.toString()
/**
* Return whether or not we are to process the given file.
*/
function filterFile (file, done) {
done(path.basename(file).charAt(0) !== '_')
}
// Construct the options.
// TODO: Figure out what other options to inject.
var options = extend({}, metalsmith.metadata(), files[file], {
filename: metalsmith.source() + '/' + file
})
/**
* Process the given file. Call done() when done processing.
*/
function processFile (file, done) {
/**
* Process the given extension on the file.
*/
function processExtension (extension, done) {
// Retrieve the transformer.
var transformer = getTransformer(extension)
var output = transformer.render(input, options, options)
files[file].contents = new Buffer(output.body)
// Process the extension until the transformation is done.
if (transformer && !files[file].jstransformer_done) {
// Construct the options.
var options = extend({}, metalsmith.metadata(), files[file], {
filename: metalsmith.source() + '/' + file
})
// Rename the file, removing the extension.
var data = files[file]
delete files[file]
var filepath = extensions
filepath.pop()
file = filepath.join('.')
files[file] = data
// Get the transformer to render the contents.
transformer.renderAsync(files[file].contents.toString(), options, options).then(function (result) {
// Allow providing the default output format.
files[file].jstransformer_outputFormat = transformer.outputFormat
// Remove an extension from the end.
files[file].jstransformer_filepath.pop()
files[file].contents = result.body
done()
}, function (err) {
files[file].jstransformer_done = true
done(err)
})
} else {
// The transformer isn't supported, skip the rest.
files[file].jstransformer_done = true
done()
}
}
// Retrieve the new output format for the given transformer.
outputFormat = transformer.outputFormat
} else {
// Skip the rest of the file transformations.
break
}
// Prepare the extension processing.
var extensions = file.split('.')
files[file].jstransformer_filepath = clone(extensions)
extensions.reverse().pop()
// Loop through the transformer series.
async.mapSeries(extensions, processExtension, done)
}
/**
* Rename the given file to its desired new name.
*/
function renameFile (file, done) {
var filename = file
// Check if there is a potential filepath change.
if (files[file].jstransformer_filepath) {
// See if we should add the default output format.
if (files[file].jstransformer_filepath.length === 1) {
files[file].jstransformer_filepath.push(files[file].jstransformer_outputFormat)
}
// Rename the file to the output format, if no extension was provided.
if (path.extname(file) === '' && outputFormat !== '') {
var newFile = files[file]
delete files[file]
files[file + '.' + outputFormat] = newFile
}
filename = files[file].jstransformer_filepath.join('.')
}
// See if we are to now rename the file.
if (filename !== file) {
var newFile = clone(files[file])
delete files[file]
files[filename] = newFile
}
done()
}
done()
// Filter out each file that we don't need to act on.
async.filter(Object.keys(files), filterFile, function (results) {
// Process each individual file.
async.map(results, processFile, function (err) {
if (err) {
done(err)
} else {
// Now rename all the files.
async.map(results, renameFile, done)
}
})
})
}
}
{
"name": "metalsmith-jstransformer",
"version": "0.4.0",
"version": "0.5.0",
"description": "Metalsmith JSTransformer Plugin",

@@ -10,3 +10,3 @@ "main": "index.js",

"scripts": {
"test": "standard index.js test/index.js; mocha"
"test": "standard index.js test/index.js; mocha --no-timeouts"
},

@@ -27,4 +27,6 @@ "repository": {

"dependencies": {
"async": "^1.3.0",
"clone": "^1.0.2",
"extend": "^3.0.0",
"inputformat-to-jstransformer": "^1.1.0",
"inputformat-to-jstransformer": "^1.1.2",
"jstransformer": "^0.0.2"

@@ -34,7 +36,7 @@ },

"assert-dir-equal": "1.*",
"jstransformer-coffee-script": "0.*",
"jstransformer-jade": "0.*",
"jstransformer-marked": "0.0.2",
"jstransformer-styl": "0.*",
"jstransformer-uglify-js": "0.*",
"jstransformer-coffee-script": "*",
"jstransformer-jade": "*",
"jstransformer-styl": "*",
"jstransformer-uglify-js": "*",
"jstransformer-markdown-it": "*",
"metalsmith": "1.*",

@@ -41,0 +43,0 @@ "mocha": "*",

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc