broccoli-flatiron
Advanced tools
Comparing version 0.1.2 to 0.1.3
43
index.js
@@ -1,8 +0,7 @@ | ||
var fs = require("fs"), | ||
path = require("path"), | ||
mkdirp = require("mkdirp"), | ||
Writer = require("broccoli-writer"), | ||
Promise = require("rsvp").Promise; | ||
var fs = require('fs'), | ||
path = require('path'), | ||
mkdirp = require('mkdirp'), | ||
Plugin = require('broccoli-plugin'); | ||
Flatiron.prototype = Object.create(Writer.prototype); | ||
Flatiron.prototype = Object.create(Plugin.prototype); | ||
Flatiron.prototype.constructor = Flatiron; | ||
@@ -13,6 +12,12 @@ | ||
this.inputTree = inputTree; | ||
Plugin.call(this, [inputTree], { | ||
name: 'Flatiron', | ||
annotation: `Flatiron output: ${options.outputFile}`, | ||
persistentOutput: options.persistentOutput, | ||
needCache: options.needCache | ||
}); | ||
this.options = { | ||
trimExtensions: Boolean(options.trimExtensions), | ||
prefix: options.prefix === undefined ? "export default " : String(options.prefix), | ||
prefix: options.prefix === undefined ? 'export default ' : String(options.prefix), | ||
suffix: options.suffix === undefined ? ';' : String(options.suffix), | ||
@@ -23,10 +28,7 @@ outputFile: options.outputFile | ||
Flatiron.prototype.write = function (readTree, destDir) { | ||
var _this = this; | ||
return readTree(this.inputTree).then(function(srcDir) { | ||
var obj = readDirectory(srcDir), | ||
Flatiron.prototype.build = function () { | ||
var obj = readDirectory(this.inputPaths[0], this.options), | ||
output; | ||
function readDirectory (srcDir) { | ||
function readDirectory (srcDir, options) { | ||
var obj = {}, | ||
@@ -37,6 +39,6 @@ entries = fs.readdirSync(srcDir); | ||
if (fs.statSync(path.join(srcDir, entry)).isDirectory()) | ||
obj[entry] = readDirectory(path.join(srcDir, entry)); | ||
obj[entry] = readDirectory(path.join(srcDir, entry), options); | ||
else | ||
obj[_this.options.trimExtensions ? entry.split(".")[0] : entry] = | ||
fs.readFileSync(path.join(srcDir, entry), { encoding: "utf8" }); | ||
obj[options.trimExtensions ? entry.split('.')[0] : entry] = | ||
fs.readFileSync(path.join(srcDir, entry), { encoding: 'utf8' }); | ||
}); | ||
@@ -47,8 +49,7 @@ | ||
output = _this.options.prefix + JSON.stringify(obj, null, 2) + _this.options.suffix; | ||
mkdirp.sync(path.join(destDir, path.dirname(_this.options.outputFile))); | ||
fs.writeFileSync(path.join(destDir, _this.options.outputFile), output); | ||
}); | ||
output = this.options.prefix + JSON.stringify(obj, null, 2) + this.options.suffix; | ||
mkdirp.sync(path.join(this.outputPath, path.dirname(this.options.outputFile))); | ||
fs.writeFileSync(path.join(this.outputPath, this.options.outputFile), output); | ||
} | ||
module.exports = Flatiron; |
{ | ||
"name": "broccoli-flatiron", | ||
"version": "0.1.2", | ||
"version": "0.1.3", | ||
"description": "Broccoli plugin to create json objects from directory structures", | ||
@@ -21,12 +21,10 @@ "main": "index.js", | ||
"dependencies": { | ||
"broccoli-kitchen-sink-helpers": "~0.2.4", | ||
"broccoli-writer": "~0.1.1", | ||
"mkdirp": "^0.3.5", | ||
"rsvp": "~3.0.6" | ||
"broccoli-plugin": "^1.3.0", | ||
"mkdirp": "^0.5.1" | ||
}, | ||
"devDependencies": { | ||
"broccoli": "~0.12.3", | ||
"broccoli-builder": "^0.18.14", | ||
"expect.js": "~0.3.1", | ||
"mocha": "~1.18.2" | ||
"mocha": "~5.2.0" | ||
} | ||
} |
@@ -10,3 +10,7 @@ # Broccoli Flatiron | ||
var tree = flatiron(targetDirectory); | ||
var options = { | ||
outputFile: 'path/to/output/file' | ||
}; | ||
var tree = flatiron(targetDirectory, options); | ||
``` | ||
@@ -16,10 +20,14 @@ | ||
- `option.outputFile` | ||
- `option.trimExtensions` | ||
- `option.prefix` | ||
- `option.suffix` | ||
### Available options | ||
- `outputFile` - path of the generated file | ||
- `trimExtensions` - trim file extensions object keys or not | ||
- `prefix` - use custom prefix, `default: export default` | ||
- `suffix` - use custom suffix, `default: ;` | ||
- `persistentOutput`: boolean flag passed to [broccoli-plugin](https://github.com/broccolijs/broccoli-plugin#reference). | ||
- `needCache`: boolean flag passed to [broccoli-plugin](https://github.com/broccolijs/broccoli-plugin#reference). | ||
## ZOMG!!! TESTS?!?!!? | ||
Yeah, no. Not now. But when I finally add some, you can run them like so: | ||
Yeah, I know. | ||
@@ -26,0 +34,0 @@ ```javascript |
'use strict'; | ||
var jsonConcat = require('../index'); | ||
var flatiron = require('../index'); | ||
var expect = require('expect.js'); | ||
var fs = require('fs'); | ||
var broccoli = require('broccoli'); | ||
var broccoli = require('broccoli-builder'); | ||
var builder; | ||
describe('broccoli-file-creator', function(){ | ||
describe('broccoli-flatiron', function(){ | ||
afterEach(function() { | ||
@@ -17,37 +17,79 @@ if (builder) { | ||
it('creates the files specified with fixturify', function(){ | ||
var sourcePath = 'tests/fixtures'; | ||
var tree = jsonConcat(sourcePath, { | ||
outputFile: '/assets/books.json', | ||
variableName: 'window.fixtures' | ||
it('creates the files with default configuration', function(){ | ||
var sourcePath = 'tests/fixtures/assets_one'; | ||
var node = flatiron(sourcePath, { | ||
outputFile: '/assets/output.json' | ||
}); | ||
builder = new broccoli.Builder(tree); | ||
builder = new broccoli.Builder(node); | ||
return builder.build().then(function(results) { | ||
var expectedOutput = { | ||
'dr-seuss': { | ||
'how-the-grinch-stole-christmas': { | ||
publicationDate: 'November 24, 1957', | ||
pages: 69 | ||
}, | ||
'the-cat-in-the-hat': { | ||
publicationDate: 'March 12, 1957', | ||
pages: 61 | ||
} | ||
one: { | ||
'something.txt': 'Something' | ||
} | ||
}; | ||
expectedOutput = 'export default ' + JSON.stringify(expectedOutput, null, 2) + ';'; | ||
expect(fs.readFileSync(results.directory + '/assets/output.json', {encoding: 'utf8'})).to.eql(expectedOutput); | ||
}); | ||
}); | ||
it('creates the files with "trimExtensions" enabled', function(){ | ||
var sourcePath = 'tests/fixtures/assets_one'; | ||
var node = flatiron(sourcePath, { | ||
outputFile: '/assets/output.json', | ||
trimExtensions: true | ||
}); | ||
builder = new broccoli.Builder(node); | ||
return builder.build().then(function(results) { | ||
var expectedOutput = { | ||
one: { | ||
something: 'Something' | ||
} | ||
}; | ||
expectedOutput = 'export default ' + JSON.stringify(expectedOutput, null, 2) + ';'; | ||
expect(fs.readFileSync(results.directory + '/assets/output.json', {encoding: 'utf8'})).to.eql(expectedOutput); | ||
}); | ||
}); | ||
it('creates the files with custom "prefix" and "suffix"', function(){ | ||
var sourcePath = 'tests/fixtures/assets_one'; | ||
var node = flatiron(sourcePath, { | ||
outputFile: '/assets/output.json', | ||
prefix: 'my-prefix ', | ||
suffix: 'my-suffix' | ||
}); | ||
builder = new broccoli.Builder(node); | ||
return builder.build().then(function(results) { | ||
var expectedOutput = { | ||
one: { | ||
'something.txt': 'Something' | ||
} | ||
}; | ||
expectedOutput = 'my-prefix ' + JSON.stringify(expectedOutput, null, 2) + 'my-suffix'; | ||
expect(fs.readFileSync(results.directory + '/assets/output.json', {encoding: 'utf8'})).to.eql(expectedOutput); | ||
}); | ||
}); | ||
it('creates the files with multiple assets', function(){ | ||
var sourcePath = 'tests/fixtures/assets_multiple'; | ||
var node = flatiron(sourcePath, { | ||
outputFile: '/assets/output.json' | ||
}); | ||
builder = new broccoli.Builder(node); | ||
return builder.build().then(function(results) { | ||
var expectedOutput = { | ||
one: { | ||
'something.txt': 'Something' | ||
}, | ||
'pd-eastman': { | ||
'are-you-my-mother': { | ||
publicationDate: 'June 12, 1960', | ||
pages: 12 | ||
}, | ||
'go-dog-go': { | ||
publicationDate: 'March 12, 1961', | ||
pages: 72 | ||
} | ||
two: { | ||
'other.txt': 'Other' | ||
} | ||
}; | ||
expectedOutput = 'window.fixtures = ' + JSON.stringify(expectedOutput, null, 2); | ||
expect(fs.readFileSync(results.directory + '/assets/books.json', {encoding: 'utf8'})).to.eql(expectedOutput); | ||
expectedOutput = 'export default ' + JSON.stringify(expectedOutput, null, 2) + ';'; | ||
expect(fs.readFileSync(results.directory + '/assets/output.json', {encoding: 'utf8'})).to.eql(expectedOutput); | ||
}); | ||
}) | ||
}); | ||
}); |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
7313
2
124
40
9
+ Addedbroccoli-plugin@^1.3.0
+ Addedbroccoli-plugin@1.3.1(transitive)
+ Addedpromise-map-series@0.2.3(transitive)
+ Addedrsvp@3.6.2(transitive)
+ Addedsymlink-or-copy@1.3.1(transitive)
- Removedbroccoli-kitchen-sink-helpers@~0.2.4
- Removedbroccoli-writer@~0.1.1
- Removedrsvp@~3.0.6
- Removedbroccoli-kitchen-sink-helpers@0.2.9(transitive)
- Removedbroccoli-writer@0.1.1(transitive)
- Removedglob@5.0.15(transitive)
- Removedmkdirp@0.3.5(transitive)
- Removedrsvp@3.0.21(transitive)
Updatedmkdirp@^0.5.1