diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..f5f1080e --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +*.lcov +.nyc_output +*.log +package-lock.json diff --git a/packages/ipfs-unixfs-exporter/.travis.yml b/.travis.yml similarity index 57% rename from packages/ipfs-unixfs-exporter/.travis.yml rename to .travis.yml index be3ad283..ee63401d 100644 --- a/packages/ipfs-unixfs-exporter/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ stages: node_js: - '12' + - '13' os: - linux @@ -21,20 +22,32 @@ jobs: - stage: check script: - npx aegir commitlint --travis - - npx aegir dep-check + - npm run depcheck - npm run lint - stage: test name: chrome addons: chrome: stable - script: npx aegir test -t browser -t webworker + script: npm run test:browser + + - stage: test + name: chrome webworker + addons: + chrome: stable + script: npm run test:webworker + + - stage: test + name: firefox + addons: + firefox: latest + script: npm run test:browser -- --browsers FirefoxHeadless - stage: test name: firefox addons: firefox: latest - script: npx aegir test -t browser -t webworker -- --browsers FirefoxHeadless + script: npm run test:webworker -- --browsers FirefoxHeadless notifications: email: false diff --git a/README.md b/README.md new file mode 100644 index 00000000..7b45fee7 --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +# ipfs-unixfs JavaScript Implementation + +[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) +[![](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](http://ipfs.io/) +[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) +[![Travis CI](https://flat.badgen.net/travis/ipfs/js-ipfs-unixfs)](https://travis-ci.com/ipfs/js-ipfs-unixfs) +[![Codecov](https://codecov.io/gh/ipfs/js-ipfs-unixfs/branch/master/graph/badge.svg)](https://codecov.io/gh/ipfs/js-ipfs-unixfs) +[![Deps](https://david-dm.org/ipfs/js-ipfs-unixfs.svg?style=flat-square)](https://david-dm.org/ipfs/js-ipfs-unixfs) +[![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%3D8.0.0-orange.svg?style=flat-square) + +> JavaScript implementation of IPFS' UnixFS (a Unix FileSystem files representation on top of a MerkleDAG) + +The UnixFS spec can be found inside the [ipfs/specs repository](http://github.com/ipfs/specs) + +## Lead Maintainer + +[Alex Potsides](https://github.com/achingbrain) + +## Table of Contents + +- [Install](#install) + - [npm](#npm) + - [Use in Node.js](#use-in-nodejs) + - [Use in a browser with browserify, webpack or any other bundler](#use-in-a-browser-with-browserify-webpack-or-any-other-bundler) + - [Use in a browser Using a script tag](#use-in-a-browser-using-a-script-tag) +- [Usage](#usage) + - [Examples](#examples) + - [Create a file composed by several blocks](#create-a-file-composed-by-several-blocks) + - [Create a directory that contains several files](#create-a-directory-that-contains-several-files) +- [API](#api) + - [UnixFS Data Structure](#unixfs-data-structure) + - [create an unixfs Data element](#create-an-unixfs-data-element) + - [add and remove a block size to the block size list](#add-and-remove-a-block-size-to-the-block-size-list) + - [get total fileSize](#get-total-filesize) + - [marshal and unmarshal](#marshal-and-unmarshal) + - [is this UnixFS entry a directory?](#is-this-unixfs-entry-a-directory) + - [has an mtime been set?](#has-an-mtime-been-set) +- [Contribute](#contribute) +- [License](#license) + +## Structure + +* `/packages/ipfs-unixfs` Serialization/deserialization of UnixFS objects to protocol buffers +* `/packages/ipfs-unixfs-importer` Builds DAGs from files and directories +* `/packages/ipfs-unixfs-exporter` Exports DAGs + +## Contribute + +Feel free to join in. All welcome. Open an [issue](https://github.com/ipfs/js-ipfs-unixfs/issues)! + +This repository falls under the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md). + +[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md) + +## License + +[MIT](LICENSE) diff --git a/lerna.json b/lerna.json new file mode 100644 index 00000000..a5f6cd11 --- /dev/null +++ b/lerna.json @@ -0,0 +1,15 @@ +{ + "lerna": "3.20.2", + "packages": [ + "packages/*" + ], + "version": "independent", + "command": { + "bootstrap": { + "hoist": true + }, + "run": { + "stream": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..ef28c415 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "js-ipfs-unixfs", + "version": "1.0.0", + "description": "JS implementation of the IPFS UnixFS", + "scripts": { + "postinstall": "lerna bootstrap", + "reset": "lerna run --parallel clean && rm -rf packages/*/node_modules packages/*/package-lock.json node_modules", + "test": "lerna run --parallel test", + "test:node": "lerna run --parallel test:node", + "test:browser": "lerna run --parallel test:browser", + "test:webworker": "lerna run --parallel test:webworker", + "coverage": "lerna run --parallel coverage", + "build": "lerna run --parallel build", + "deploy": "lerna run --parallel deploy", + "start": "NODE_ENV=development lerna run --parallel start", + "clean": "lerna run --parallel clean", + "lint": "lerna run --parallel lint", + "depcheck": "lerna run --parallel depcheck", + "publish": "lerna publish" + }, + "devDependencies": { + "lerna": "^3.20.2" + } +} diff --git a/packages/ipfs-unixfs-exporter/package.json b/packages/ipfs-unixfs-exporter/package.json index 6e09717b..f051f447 100644 --- a/packages/ipfs-unixfs-exporter/package.json +++ b/packages/ipfs-unixfs-exporter/package.json @@ -14,11 +14,9 @@ "test:webworker": "aegir test -t webworker", "build": "aegir build", "lint": "aegir lint", - "release": "aegir release", - "release-minor": "aegir release --type minor", - "release-major": "aegir release --type major", + "prepublishOnly": "aegir release --test=false --lint=false --bump=false --publish=false", "coverage": "nyc -s npm run test:node && nyc report --reporter=html", - "dep-check": "aegir dep-check" + "depcheck": "aegir dep-check" }, "repository": { "type": "git", diff --git a/packages/ipfs-unixfs-importer/.travis.yml b/packages/ipfs-unixfs-importer/.travis.yml deleted file mode 100644 index be3ad283..00000000 --- a/packages/ipfs-unixfs-importer/.travis.yml +++ /dev/null @@ -1,40 +0,0 @@ -language: node_js -cache: npm -stages: - - check - - test - - cov - -node_js: - - '12' - -os: - - linux - - osx - - windows - -script: npx nyc -s npm run test:node -- --bail -after_success: npx nyc report --reporter=text-lcov > coverage.lcov && npx codecov - -jobs: - include: - - stage: check - script: - - npx aegir commitlint --travis - - npx aegir dep-check - - npm run lint - - - stage: test - name: chrome - addons: - chrome: stable - script: npx aegir test -t browser -t webworker - - - stage: test - name: firefox - addons: - firefox: latest - script: npx aegir test -t browser -t webworker -- --browsers FirefoxHeadless - -notifications: - email: false diff --git a/packages/ipfs-unixfs-importer/package.json b/packages/ipfs-unixfs-importer/package.json index 48524778..ebd37c7e 100644 --- a/packages/ipfs-unixfs-importer/package.json +++ b/packages/ipfs-unixfs-importer/package.json @@ -14,11 +14,9 @@ "test:webworker": "aegir test -t webworker", "build": "aegir build", "lint": "aegir lint", - "release": "aegir release", - "release-minor": "aegir release --type minor", - "release-major": "aegir release --type major", + "prepublishOnly": "aegir release --test=false --lint=false --bump=false --publish=false", "coverage": "nyc -s npm run test:node && nyc report --reporter=html", - "dep-check": "aegir dep-check" + "depcheck": "aegir dep-check" }, "repository": { "type": "git", diff --git a/packages/ipfs-unixfs/.travis.yml b/packages/ipfs-unixfs/.travis.yml deleted file mode 100644 index 133e1cfb..00000000 --- a/packages/ipfs-unixfs/.travis.yml +++ /dev/null @@ -1,40 +0,0 @@ -language: node_js -cache: npm -stages: - - check - - test - - cov - -node_js: - - '10' - -os: - - linux - - osx - - windows - -script: npx nyc -s npm run test:node -- --bail -after_success: npx nyc report --reporter=text-lcov > coverage.lcov && npx codecov - -jobs: - include: - - stage: check - script: - - npx aegir commitlint --travis - - npx aegir dep-check - - npm run lint - - - stage: test - name: chrome - addons: - chrome: stable - script: npx aegir test -t browser - - - stage: test - name: firefox - addons: - firefox: latest - script: npx aegir test -t browser -- --browsers FirefoxHeadless - -notifications: - email: false diff --git a/packages/ipfs-unixfs/package.json b/packages/ipfs-unixfs/package.json index 99588241..2aa8c07b 100644 --- a/packages/ipfs-unixfs/package.json +++ b/packages/ipfs-unixfs/package.json @@ -14,10 +14,9 @@ "test:webworker": "aegir test -t webworker", "build": "aegir build", "lint": "aegir lint", - "release": "aegir release", - "release-minor": "aegir release --type minor", - "release-major": "aegir release --type major", - "coverage": "nyc -s aegir test -t node && nyc report --reporter=html" + "prepublishOnly": "aegir release --test=false --lint=false --bump=false --publish=false", + "coverage": "nyc -s aegir test -t node && nyc report --reporter=html", + "depcheck": "aegir dep-check" }, "repository": { "type": "git",