diff --git a/.gitignore b/.gitignore index 103a91cf..22bf811a 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,3 @@ build/Release node_modules dist -lib diff --git a/.travis.yml b/.travis.yml index dd9e44ef..b5409ef4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,16 @@ sudo: false language: node_js -node_js: - - 4 - - 5 - - stable + +matrix: + include: + - node_js: 4 + env: CXX=g++-4.8 + - node_js: 6 + env: + - SAUCE=true + - CXX=g++-4.8 + - node_js: stable + env: CXX=g++-4.8 # Make sure we have new NPM. before_install: @@ -14,12 +21,17 @@ script: - npm test - npm run coverage -addons: - firefox: 'latest' - before_script: - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start after_success: - npm run coverage-publish + +addons: + firefox: 'latest' + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-4.8 \ No newline at end of file diff --git a/README.md b/README.md index 19592aed..fbf69031 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,10 @@ IPFS unixFS Engine [![Coverage Status](https://coveralls.io/repos/github/ipfs/js-ipfs-unixfs-engine/badge.svg?branch=master)](https://coveralls.io/github/ipfs/js-ipfs-unixfs-engine?branch=master) [![Dependency Status](https://david-dm.org/ipfs/js-ipfs-unixfs-engine.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs-engine) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) +![](https://img.shields.io/badge/npm-%3E%3D3.0.0-orange.svg?style=flat-square) +![](https://img.shields.io/badge/Node.js-%3E%3D4.0.0-orange.svg?style=flat-square) + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/ipfs-unixfs-engine.svg)](https://saucelabs.com/u/ipfs-unixfs-engine) > JavaScript implementation of the layout and chunking mechanisms used by IPFS @@ -114,11 +118,11 @@ When run, the stat of DAG Node is outputted for each file on data event until th { multihash: , size: 93242, - path: '/tmp/foo' } + path: '/tmp/foo' } { multihash: , size: 94234, - path: '/tmp' } + path: '/tmp' } ``` diff --git a/package.json b/package.json index 716cf27a..14288b0a 100644 --- a/package.json +++ b/package.json @@ -2,17 +2,19 @@ "name": "ipfs-unixfs-engine", "version": "0.12.0", "description": "JavaScript implementation of the unixfs Engine used by IPFS", - "main": "lib/index.js", - "jsnext:main": "src/index.js", + "main": "src/index.js", + "browser": { + "fs": false + }, "scripts": { "lint": "aegir-lint", "build": "aegir-build", - "test": "PHANTOM=off aegir-test", + "test": "aegir-test", "test:node": "aegir-test --env node", - "test:browser": "PHANTOM=off aegir-test --env browser", - "release": "PHANTOM=off aegir-release", - "release-minor": "PHANTOM=off aegir-release --type minor", - "release-major": "PHANTOM=off aegir-release --type major", + "test:browser": "aegir-test --env browser", + "release": "aegir-release", + "release-minor": "aegir-release --type minor", + "release-major": "aegir-release --type major", "coverage": "aegir-coverage", "coverage-publish": "aegir-coverage publish" }, @@ -32,36 +34,37 @@ "bugs": { "url": "https://github.com/ipfs/js-ipfs-unixfs-engine/issues" }, - "homepage": "https://github.com/ipfs/js-ipfs-unixfs-engineg#readme", + "engines": { + "node": ">=4.0.0" + }, + "homepage": "https://github.com/ipfs/js-ipfs-unixfs-engine#readme", "devDependencies": { - "aegir": "^8.1.2", + "aegir": "^9.1.0", "buffer-loader": "0.0.1", "chai": "^3.5.0", "fs-pull-blob-store": "^0.4.1", "idb-pull-blob-store": "^0.5.1", "ipfs-block-service": "^0.6.0", - "ipfs-repo": "^0.10.0", + "ipfs-repo": "^0.11.0", "ncp": "^2.0.0", "pre-commit": "^1.1.3", "pull-zip": "^2.0.1", - "raw-loader": "^0.5.1", - "rimraf": "^2.5.4", - "run-series": "^1.1.4" + "rimraf": "^2.5.4" }, "dependencies": { + "async": "^2.1.2", "cids": "^0.2.0", - "ipfs-unixfs": "^0.1.4", - "ipld-dag-pb": "^0.1.3", - "ipld-resolver": "^0.1.1", + "ipfs-unixfs": "^0.1.5", + "ipld-dag-pb": "^0.8.0", + "ipld-resolver": "^0.2.0", "is-ipfs": "^0.2.1", "multihashes": "^0.2.2", "pull-block": "^1.0.2", "pull-paramap": "^1.2.0", "pull-pushable": "^2.0.1", - "pull-stream": "^3.4.5", + "pull-stream": "^3.5.0", "pull-traverse": "^1.0.3", - "pull-write": "^1.1.1", - "run-parallel": "^1.1.6" + "pull-write": "^1.1.1" }, "contributors": [ "David Dias ", @@ -73,4 +76,4 @@ "jbenet ", "nginnever " ] -} \ No newline at end of file +} diff --git a/src/exporter/index.js b/src/exporter/index.js index e87970fb..63fba476 100644 --- a/src/exporter/index.js +++ b/src/exporter/index.js @@ -3,6 +3,7 @@ const traverse = require('pull-traverse') const pull = require('pull-stream') const CID = require('cids') +const isIPFS = require('is-ipfs') const util = require('./../util') const switchType = util.switchType @@ -12,6 +13,10 @@ const dirExporter = require('./dir') const fileExporter = require('./file') module.exports = (hash, ipldResolver, options) => { + if (!isIPFS.multihash(hash)) { + return pull.error(new Error('not valid multihash')) + } + hash = cleanMultihash(hash) options = options || {} diff --git a/src/importer/index.js b/src/importer/index.js index bcf770d7..a26ea662 100644 --- a/src/importer/index.js +++ b/src/importer/index.js @@ -5,7 +5,7 @@ const assert = require('assert') const pull = require('pull-stream') const pullPushable = require('pull-pushable') const pullWrite = require('pull-write') -const parallel = require('run-parallel') +const parallel = require('async/parallel') const dagPB = require('ipld-dag-pb') const CID = require('cids') diff --git a/src/util.js b/src/util.js index 8f44ae01..2742316d 100644 --- a/src/util.js +++ b/src/util.js @@ -3,23 +3,23 @@ const UnixFS = require('ipfs-unixfs') const pull = require('pull-stream') const mh = require('multihashes') -const isIPFS = require('is-ipfs') exports.switchType = (node, dirHandler, fileHandler) => { const data = UnixFS.unmarshal(node.data) const type = data.type - if (type === 'directory') return dirHandler() - if (type === 'file') return fileHandler() + if (type === 'directory') { + return dirHandler() + } + + if (type === 'file') { + return fileHandler() + } return pull.error(new Error('Unkown node type')) } exports.cleanMultihash = (multihash) => { - if (!isIPFS.multihash(multihash)) { - throw new Error('not valid multihash') - } - if (Buffer.isBuffer(multihash)) { return mh.toB58String(multihash) } diff --git a/test/test-data/1.2MiB.txt b/test/fixtures/1.2MiB.txt similarity index 100% rename from test/test-data/1.2MiB.txt rename to test/fixtures/1.2MiB.txt diff --git a/test/test-data/1.2MiB.txt.block b/test/fixtures/1.2MiB.txt.block similarity index 100% rename from test/test-data/1.2MiB.txt.block rename to test/fixtures/1.2MiB.txt.block diff --git a/test/test-data/1.2MiB.txt.link-block0 b/test/fixtures/1.2MiB.txt.link-block0 similarity index 100% rename from test/test-data/1.2MiB.txt.link-block0 rename to test/fixtures/1.2MiB.txt.link-block0 diff --git a/test/test-data/1.2MiB.txt.link-block1 b/test/fixtures/1.2MiB.txt.link-block1 similarity index 100% rename from test/test-data/1.2MiB.txt.link-block1 rename to test/fixtures/1.2MiB.txt.link-block1 diff --git a/test/test-data/1.2MiB.txt.link-block2 b/test/fixtures/1.2MiB.txt.link-block2 similarity index 100% rename from test/test-data/1.2MiB.txt.link-block2 rename to test/fixtures/1.2MiB.txt.link-block2 diff --git a/test/test-data/1.2MiB.txt.link-block3 b/test/fixtures/1.2MiB.txt.link-block3 similarity index 100% rename from test/test-data/1.2MiB.txt.link-block3 rename to test/fixtures/1.2MiB.txt.link-block3 diff --git a/test/test-data/1.2MiB.txt.link-block4 b/test/fixtures/1.2MiB.txt.link-block4 similarity index 100% rename from test/test-data/1.2MiB.txt.link-block4 rename to test/fixtures/1.2MiB.txt.link-block4 diff --git a/test/test-data/1.2MiB.txt.unixfs-file b/test/fixtures/1.2MiB.txt.unixfs-file similarity index 100% rename from test/test-data/1.2MiB.txt.unixfs-file rename to test/fixtures/1.2MiB.txt.unixfs-file diff --git a/test/test-data/1.2MiB.txt.unixfs-raw0 b/test/fixtures/1.2MiB.txt.unixfs-raw0 similarity index 100% rename from test/test-data/1.2MiB.txt.unixfs-raw0 rename to test/fixtures/1.2MiB.txt.unixfs-raw0 diff --git a/test/test-data/1.2MiB.txt.unixfs-raw1 b/test/fixtures/1.2MiB.txt.unixfs-raw1 similarity index 100% rename from test/test-data/1.2MiB.txt.unixfs-raw1 rename to test/fixtures/1.2MiB.txt.unixfs-raw1 diff --git a/test/test-data/1.2MiB.txt.unixfs-raw2 b/test/fixtures/1.2MiB.txt.unixfs-raw2 similarity index 100% rename from test/test-data/1.2MiB.txt.unixfs-raw2 rename to test/fixtures/1.2MiB.txt.unixfs-raw2 diff --git a/test/test-data/1.2MiB.txt.unixfs-raw3 b/test/fixtures/1.2MiB.txt.unixfs-raw3 similarity index 100% rename from test/test-data/1.2MiB.txt.unixfs-raw3 rename to test/fixtures/1.2MiB.txt.unixfs-raw3 diff --git a/test/test-data/1.2MiB.txt.unixfs-raw4 b/test/fixtures/1.2MiB.txt.unixfs-raw4 similarity index 100% rename from test/test-data/1.2MiB.txt.unixfs-raw4 rename to test/fixtures/1.2MiB.txt.unixfs-raw4 diff --git a/test/test-data/1MiB.txt b/test/fixtures/1MiB.txt similarity index 100% rename from test/test-data/1MiB.txt rename to test/fixtures/1MiB.txt diff --git a/test/test-data/200Bytes.txt b/test/fixtures/200Bytes.txt similarity index 100% rename from test/test-data/200Bytes.txt rename to test/fixtures/200Bytes.txt diff --git a/test/test-data/200Bytes.txt.block b/test/fixtures/200Bytes.txt.block similarity index 100% rename from test/test-data/200Bytes.txt.block rename to test/fixtures/200Bytes.txt.block diff --git a/test/test-data/200Bytes.txt.unixfs-file b/test/fixtures/200Bytes.txt.unixfs-file similarity index 100% rename from test/test-data/200Bytes.txt.unixfs-file rename to test/fixtures/200Bytes.txt.unixfs-file diff --git a/test/test-data/dir-big.block b/test/fixtures/dir-big.block similarity index 100% rename from test/test-data/dir-big.block rename to test/fixtures/dir-big.block diff --git a/test/test-data/dir-big.unixfs-dir b/test/fixtures/dir-big.unixfs-dir similarity index 100% rename from test/test-data/dir-big.unixfs-dir rename to test/fixtures/dir-big.unixfs-dir diff --git a/test/test-data/dir-big/1.2MiB.txt b/test/fixtures/dir-big/1.2MiB.txt similarity index 100% rename from test/test-data/dir-big/1.2MiB.txt rename to test/fixtures/dir-big/1.2MiB.txt diff --git a/test/test-data/dir-nested.block b/test/fixtures/dir-nested.block similarity index 100% rename from test/test-data/dir-nested.block rename to test/fixtures/dir-nested.block diff --git a/test/test-data/dir-nested/200Bytes.txt b/test/fixtures/dir-nested/200Bytes.txt similarity index 100% rename from test/test-data/dir-nested/200Bytes.txt rename to test/fixtures/dir-nested/200Bytes.txt diff --git a/test/test-data/dir-nested/level-1/200Bytes.txt b/test/fixtures/dir-nested/level-1/200Bytes.txt similarity index 100% rename from test/test-data/dir-nested/level-1/200Bytes.txt rename to test/fixtures/dir-nested/level-1/200Bytes.txt diff --git a/test/test-data/dir-small.block b/test/fixtures/dir-small.block similarity index 100% rename from test/test-data/dir-small.block rename to test/fixtures/dir-small.block diff --git a/test/test-data/dir-small.unixfs-dir b/test/fixtures/dir-small.unixfs-dir similarity index 100% rename from test/test-data/dir-small.unixfs-dir rename to test/fixtures/dir-small.unixfs-dir diff --git a/test/test-data/dir-small/200Bytes.txt b/test/fixtures/dir-small/200Bytes.txt similarity index 100% rename from test/test-data/dir-small/200Bytes.txt rename to test/fixtures/dir-small/200Bytes.txt diff --git a/test/test-data/empty.txt b/test/fixtures/empty.txt similarity index 100% rename from test/test-data/empty.txt rename to test/fixtures/empty.txt diff --git a/test/test-data/foo-big/1.2MiB.txt b/test/fixtures/foo-big/1.2MiB.txt similarity index 100% rename from test/test-data/foo-big/1.2MiB.txt rename to test/fixtures/foo-big/1.2MiB.txt diff --git a/test/test-data/foo/bar/200Bytes.txt b/test/fixtures/foo/bar/200Bytes.txt similarity index 100% rename from test/test-data/foo/bar/200Bytes.txt rename to test/fixtures/foo/bar/200Bytes.txt diff --git a/test/test-data/ipfsmarket-1.ogv b/test/fixtures/ipfsmarket-1.ogv similarity index 100% rename from test/test-data/ipfsmarket-1.ogv rename to test/fixtures/ipfsmarket-1.ogv diff --git a/test/test-data/pam/1.2MiB.txt b/test/fixtures/pam/1.2MiB.txt similarity index 100% rename from test/test-data/pam/1.2MiB.txt rename to test/fixtures/pam/1.2MiB.txt diff --git a/test/test-data/pam/pum/1.2MiB.txt b/test/fixtures/pam/pum/1.2MiB.txt similarity index 100% rename from test/test-data/pam/pum/1.2MiB.txt rename to test/fixtures/pam/pum/1.2MiB.txt diff --git a/test/test-data/pam/pum/200Bytes.txt b/test/fixtures/pam/pum/200Bytes.txt similarity index 100% rename from test/test-data/pam/pum/200Bytes.txt rename to test/fixtures/pam/pum/200Bytes.txt diff --git a/test/test-data/pim/1.2MiB.txt b/test/fixtures/pim/1.2MiB.txt similarity index 100% rename from test/test-data/pim/1.2MiB.txt rename to test/fixtures/pim/1.2MiB.txt diff --git a/test/test-data/pim/200Bytes.txt b/test/fixtures/pim/200Bytes.txt similarity index 100% rename from test/test-data/pim/200Bytes.txt rename to test/fixtures/pim/200Bytes.txt diff --git a/test/test-data/test-file.txt b/test/fixtures/test-file.txt similarity index 100% rename from test/test-data/test-file.txt rename to test/fixtures/test-file.txt diff --git a/test/test-data/test-file.txt.link-block0 b/test/fixtures/test-file.txt.link-block0 similarity index 100% rename from test/test-data/test-file.txt.link-block0 rename to test/fixtures/test-file.txt.link-block0 diff --git a/test/test-data/test-video.ogv b/test/fixtures/test-video.ogv similarity index 100% rename from test/test-data/test-video.ogv rename to test/fixtures/test-video.ogv diff --git a/test/node.js b/test/node.js index 33c81a2a..ae88ab82 100644 --- a/test/node.js +++ b/test/node.js @@ -7,7 +7,7 @@ const path = require('path') const IPFSRepo = require('ipfs-repo') const Store = require('fs-pull-blob-store') const mkdirp = require('mkdirp') -const series = require('run-series') +const series = require('async/series') describe('core', () => { const repoExample = path.join(process.cwd(), '/test/repo-example') diff --git a/test/test-exporter.js b/test/test-exporter.js index e93db266..d1005281 100644 --- a/test/test-exporter.js +++ b/test/test-exporter.js @@ -5,22 +5,21 @@ const expect = require('chai').expect const BlockService = require('ipfs-block-service') const IPLDResolver = require('ipld-resolver') const UnixFS = require('ipfs-unixfs') -const fs = require('fs') -const path = require('path') const bs58 = require('bs58') const pull = require('pull-stream') const zip = require('pull-zip') const CID = require('cids') +const loadFixture = require('aegir/fixtures') const unixFSEngine = require('./../src') const exporter = unixFSEngine.exporter +const bigFile = loadFixture(__dirname, 'fixtures/1.2MiB.txt') + module.exports = (repo) => { describe('exporter', () => { let ipldResolver - const bigFile = fs.readFileSync(path.join(__dirname, '/test-data/1.2MiB.txt')) - before(() => { const bs = new BlockService(repo) ipldResolver = new IPLDResolver(bs) diff --git a/test/test-fixed-size-chunker.js b/test/test-fixed-size-chunker.js index e3e8a076..dd7408b3 100644 --- a/test/test-fixed-size-chunker.js +++ b/test/test-fixed-size-chunker.js @@ -2,14 +2,11 @@ 'use strict' const chunker = require('./../src/chunker/fixed-size') -const fs = require('fs') const expect = require('chai').expect -const path = require('path') const pull = require('pull-stream') +const loadFixture = require('aegir/fixtures') -const rawFile = fs.readFileSync( - path.join(__dirname, '/test-data/1MiB.txt') -) +const rawFile = loadFixture(__dirname, 'fixtures/1MiB.txt') describe('chunker: fixed size', () => { it('chunks non flat buffers', (done) => { diff --git a/test/test-importer.js b/test/test-importer.js index 5b4fb9cb..98a1f6cf 100644 --- a/test/test-importer.js +++ b/test/test-importer.js @@ -4,11 +4,10 @@ const importer = require('./../src').importer const expect = require('chai').expect const BlockService = require('ipfs-block-service') -const fs = require('fs') -const path = require('path') const pull = require('pull-stream') const mh = require('multihashes') const IPLDResolver = require('ipld-resolver') +const loadFixture = require('aegir/fixtures') function stringifyMh (files) { return files.map((file) => { @@ -17,17 +16,13 @@ function stringifyMh (files) { }) } +const bigFile = loadFixture(__dirname, 'fixtures/1.2MiB.txt') +const smallFile = loadFixture(__dirname, 'fixtures/200Bytes.txt') + module.exports = function (repo) { describe('importer', function () { let ipldResolver - const bigFile = fs.readFileSync(path.join(__dirname, '/test-data/1.2MiB.txt')) - const smallFile = fs.readFileSync(path.join(__dirname, '/test-data/200Bytes.txt')) - - // const dirSmall = path.join(__dirname, '/test-data/dir-small') - // const dirBig = path.join(__dirname, '/test-data/dir-big') - // const dirNested = path.join(__dirname, '/test-data/dir-nested') - before(() => { const bs = new BlockService(repo) ipldResolver = new IPLDResolver(bs)