Skip to content
This repository was archived by the owner on Mar 23, 2023. It is now read-only.

Commit 314d130

Browse files
authored
chore: convert to esm (#103)
BREAKING CHANGE: deep imports are no longer possible
1 parent cc096b0 commit 314d130

File tree

6 files changed

+161
-130
lines changed

6 files changed

+161
-130
lines changed

.github/workflows/main.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ jobs:
3131
with:
3232
node-version: ${{ matrix.node }}
3333
- run: npm install
34+
- run: npm run pretest
3435
- run: npx nyc --reporter=lcov aegir test -t node -- --bail
3536
- uses: codecov/codecov-action@v1
3637
test-electron-main:
@@ -39,11 +40,13 @@ jobs:
3940
steps:
4041
- uses: actions/checkout@v2
4142
- run: npm install
42-
- run: npx xvfb-maybe aegir test -t electron-main --bail
43+
- run: npm run pretest
44+
- run: npx xvfb-maybe aegir test -t electron-main --bail -f dist/cjs/node-test/*js
4345
test-electron-renderer:
4446
needs: check
4547
runs-on: ubuntu-latest
4648
steps:
4749
- uses: actions/checkout@v2
4850
- run: npm install
49-
- run: npx xvfb-maybe aegir test -t electron-renderer --bail
51+
- run: npm run pretest
52+
- run: npx xvfb-maybe aegir test -t electron-renderer --bail -f dist/cjs/browser-test/*js

.gitignore

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,66 @@
1-
yarn.lock
2-
package-lock.json
3-
**/node_modules/
4-
**/*.log
5-
test/repo-tests*
1+
dist/
62

73
# Logs
84
logs
95
*.log
10-
11-
coverage
6+
npm-debug.log*
7+
yarn-debug.log*
8+
yarn-error.log*
129

1310
# Runtime data
1411
pids
1512
*.pid
1613
*.seed
14+
*.pid.lock
1715

1816
# Directory for instrumented libs generated by jscoverage/JSCover
1917
lib-cov
2018

2119
# Coverage directory used by tools like istanbul
2220
coverage
2321

22+
# nyc test coverage
23+
.nyc_output
24+
2425
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
2526
.grunt
2627

28+
# Bower dependency directory (https://bower.io/)
29+
bower_components
30+
2731
# node-waf configuration
2832
.lock-wscript
2933

30-
build
34+
# Compiled binary addons (http://nodejs.org/api/addons.html)
35+
build/Release
36+
37+
# Dependency directories
38+
node_modules/
39+
jspm_packages/
40+
41+
# Typescript v1 declaration files
42+
typings/
3143

32-
# Dependency directory
33-
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
34-
node_modules
44+
# Optional npm cache directory
45+
.npm
3546

36-
lib
37-
dist
38-
docs
47+
# Optional eslint cache
48+
.eslintcache
49+
50+
# Optional REPL history
51+
.node_repl_history
52+
53+
# Output of 'npm pack'
54+
*.tgz
55+
56+
# Yarn Integrity file
57+
.yarn-integrity
58+
59+
# dotenv environment variables file
60+
.env
61+
62+
# while testing npm5
63+
package-lock.json
64+
yarn.lock
65+
types
66+
docs

package.json

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,28 @@
44
"description": "Datastore implementation with file system backend",
55
"leadMaintainer": "Alex Potsides <alex.potsides@protocol.ai>",
66
"main": "src/index.js",
7-
"types": "dist/src/index.d.ts",
7+
"types": "types/src/index.d.ts",
8+
"type": "module",
89
"files": [
9-
"src",
10-
"dist"
10+
"*",
11+
"!**/*.tsbuildinfo"
1112
],
13+
"browser": {
14+
"fs": false,
15+
"path": false,
16+
"util": false
17+
},
1218
"scripts": {
13-
"prepare": "aegir build --no-bundle",
14-
"test": "aegir test -t node",
15-
"build": "aegir build",
16-
"lint": "aegir lint",
17-
"release": "aegir release -t node --build false",
18-
"release-minor": "aegir release --type minor -t node --build false",
19-
"release-major": "aegir release --type major -t node --build false",
20-
"coverage": "nyc -s npm run test:node && nyc report --reporter=html",
21-
"dep-check": "aegir dep-check"
19+
"clean": "rimraf dist types",
20+
"prepare": "aegir build --no-bundle && cp -R types dist",
21+
"lint": "aegir ts -p check && aegir lint",
22+
"build": "aegir build --no-bundle",
23+
"release": "aegir release --target node",
24+
"release-minor": "aegir release --type minor --target node",
25+
"release-major": "aegir release --type major --target node",
26+
"pretest": "aegir build --esm-tests",
27+
"test": "aegir test",
28+
"dep-check": "aegir dep-check -i rimraf"
2229
},
2330
"repository": {
2431
"type": "git",
@@ -38,25 +45,30 @@
3845
},
3946
"homepage": "https://github.com/ipfs/js-datastore-fs#readme",
4047
"dependencies": {
41-
"datastore-core": "^5.0.0",
48+
"datastore-core": "^6.0.5",
4249
"fast-write-atomic": "^0.2.0",
43-
"interface-datastore": "^5.1.1",
44-
"it-glob": "0.0.13",
50+
"interface-datastore": "^6.0.2",
51+
"it-glob": "^1.0.1",
4552
"it-map": "^1.0.5",
4653
"it-parallel-batch": "^1.0.9",
4754
"mkdirp": "^1.0.4"
4855
},
4956
"devDependencies": {
50-
"aegir": "^34.0.2",
57+
"@types/mkdirp": "^1.0.2",
58+
"@types/rimraf": "^3.0.2",
59+
"aegir": "^35.0.3",
5160
"async-iterator-all": "^1.0.0",
5261
"detect-node": "^2.0.4",
53-
"interface-datastore-tests": "^1.0.0",
62+
"interface-datastore-tests": "^2.0.3",
5463
"ipfs-utils": "^8.1.3",
5564
"memdown": "^6.0.0",
5665
"rimraf": "^3.0.2"
5766
},
5867
"eslintConfig": {
59-
"extends": "ipfs"
68+
"extends": "ipfs",
69+
"parserOptions": {
70+
"sourceType": "module"
71+
}
6072
},
6173
"contributors": [
6274
"achingbrain <alex@achingbrain.net>",

src/index.js

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
1-
'use strict'
1+
import fs from 'fs'
2+
import glob from 'it-glob'
3+
import mkdirp from 'mkdirp'
4+
import path from 'path'
5+
import { promisify } from 'util'
6+
import {
7+
Key
8+
} from 'interface-datastore'
9+
import {
10+
BaseDatastore, Errors
11+
} from 'datastore-core'
12+
import map from 'it-map'
13+
import parallel from 'it-parallel-batch'
14+
// @ts-ignore no types
15+
import fwa from 'fast-write-atomic'
216

3-
const fs = require('fs')
4-
const glob = require('it-glob')
517
// @ts-ignore
6-
const mkdirp = require('mkdirp')
7-
const promisify = require('util').promisify
8-
// @ts-ignore
9-
const writeAtomic = promisify(require('fast-write-atomic'))
10-
const path = require('path')
11-
const {
12-
Adapter, Key, Errors
13-
} = require('interface-datastore')
14-
const map = require('it-map')
15-
const parallel = require('it-parallel-batch')
16-
17-
const noop = () => {}
18-
const fsAccess = promisify(fs.access || noop)
19-
const fsReadFile = promisify(fs.readFile || noop)
20-
const fsUnlink = promisify(fs.unlink || noop)
18+
const writeAtomic = promisify(fwa)
2119

2220
/**
2321
* @typedef {import('interface-datastore').Datastore} Datastore
@@ -40,13 +38,13 @@ const fsUnlink = promisify(fs.unlink || noop)
4038
async function writeFile (path, contents) {
4139
try {
4240
await writeAtomic(path, contents)
43-
} catch (err) {
41+
} catch (/** @type {any} */ err) {
4442
if (err.code === 'EPERM' && err.syscall === 'rename') {
4543
// fast-write-atomic writes a file to a temp location before renaming it.
4644
// On Windows, if the final file already exists this error is thrown.
4745
// No such error is thrown on Linux/Mac
4846
// Make sure we can read & write to this file
49-
await fsAccess(path, fs.constants.F_OK | fs.constants.W_OK)
47+
await fs.promises.access(path, fs.constants.F_OK | fs.constants.W_OK)
5048

5149
// The file was created by another context - this means there were
5250
// attempts to write the same block by two different function calls
@@ -65,7 +63,7 @@ async function writeFile (path, contents) {
6563
*
6664
* @implements {Datastore}
6765
*/
68-
class FsDatastore extends Adapter {
66+
export class DatastoreFs extends BaseDatastore {
6967
/**
7068
* @param {string} location
7169
* @param {{ createIfMissing?: boolean, errorIfExists?: boolean, extension?: string, putManyConcurrency?: number } | undefined} [opts]
@@ -217,7 +215,7 @@ class FsDatastore extends Adapter {
217215

218216
let data
219217
try {
220-
data = await fsReadFile(file)
218+
data = await fs.promises.readFile(file)
221219
} catch (err) {
222220
throw Errors.notFoundError(err)
223221
}
@@ -234,7 +232,7 @@ class FsDatastore extends Adapter {
234232
const parts = this._encode(key)
235233
let data
236234
try {
237-
data = await fsReadFile(parts.file)
235+
data = await fs.promises.readFile(parts.file)
238236
} catch (err) {
239237
throw Errors.notFoundError(err)
240238
}
@@ -283,7 +281,7 @@ class FsDatastore extends Adapter {
283281
const parts = this._encode(key)
284282

285283
try {
286-
await fsAccess(parts.file)
284+
await fs.promises.access(parts.file)
287285
} catch (err) {
288286
return false
289287
}
@@ -299,7 +297,7 @@ class FsDatastore extends Adapter {
299297
async delete (key) {
300298
const parts = this._encode(key)
301299
try {
302-
await fsUnlink(parts.file)
300+
await fs.promises.unlink(parts.file)
303301
} catch (err) {
304302
if (err.code === 'ENOENT') {
305303
return
@@ -327,7 +325,7 @@ class FsDatastore extends Adapter {
327325

328326
for await (const file of files) {
329327
try {
330-
const buf = await fsReadFile(file)
328+
const buf = await fs.promises.readFile(file)
331329

332330
/** @type {Pair} */
333331
const pair = {
@@ -365,5 +363,3 @@ class FsDatastore extends Adapter {
365363
yield * map(files, f => this._decode(f))
366364
}
367365
}
368-
369-
module.exports = FsDatastore

0 commit comments

Comments
 (0)