Skip to content

Commit f57bb4d

Browse files
authored
feat: remove sync methods (#140)
BREAKING CHANGE: this package is now async only, all synchronous methods have been removed
1 parent 295b5b1 commit f57bb4d

12 files changed

Lines changed: 56 additions & 750 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ See: [options](#tmp-options)
601601

602602
```javascript
603603
cacache.tmp.withTmp(cache, dir => {
604-
return fs.writeFileAsync(path.join(dir, 'blablabla'), Buffer#<1234>, ...)
604+
return fs.writeFile(path.join(dir, 'blablabla'), 'blabla contents', { encoding: 'utf8' })
605605
}).then(() => {
606606
// `dir` no longer exists
607607
})

lib/content/read.js

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,6 @@ const readPipeline = (cpath, size, sri, stream) => {
4646
return stream
4747
}
4848

49-
module.exports.sync = readSync
50-
51-
function readSync (cache, integrity, opts = {}) {
52-
const { size } = opts
53-
return withContentSriSync(cache, integrity, (cpath, sri) => {
54-
const data = fs.readFileSync(cpath, { encoding: null })
55-
if (typeof size === 'number' && size !== data.length) {
56-
throw sizeError(size, data.length)
57-
}
58-
59-
if (ssri.checkData(data, sri)) {
60-
return data
61-
}
62-
63-
throw integrityError(sri, cpath)
64-
})
65-
}
66-
6749
module.exports.stream = readStream
6850
module.exports.readStream = readStream
6951

@@ -88,20 +70,13 @@ function readStream (cache, integrity, opts = {}) {
8870
}
8971

9072
module.exports.copy = copy
91-
module.exports.copy.sync = copySync
9273

9374
function copy (cache, integrity, dest) {
9475
return withContentSri(cache, integrity, (cpath, sri) => {
9576
return fs.copyFile(cpath, dest)
9677
})
9778
}
9879

99-
function copySync (cache, integrity, dest) {
100-
return withContentSriSync(cache, integrity, (cpath, sri) => {
101-
return fs.copyFileSync(cpath, dest)
102-
})
103-
}
104-
10580
module.exports.hasContent = hasContent
10681

10782
async function hasContent (cache, integrity) {
@@ -130,34 +105,6 @@ async function hasContent (cache, integrity) {
130105
}
131106
}
132107

133-
module.exports.hasContent.sync = hasContentSync
134-
135-
function hasContentSync (cache, integrity) {
136-
if (!integrity) {
137-
return false
138-
}
139-
140-
return withContentSriSync(cache, integrity, (cpath, sri) => {
141-
try {
142-
const stat = fs.statSync(cpath)
143-
return { size: stat.size, sri, stat }
144-
} catch (err) {
145-
if (err.code === 'ENOENT') {
146-
return false
147-
}
148-
149-
if (err.code === 'EPERM') {
150-
/* istanbul ignore else */
151-
if (process.platform !== 'win32') {
152-
throw err
153-
} else {
154-
return false
155-
}
156-
}
157-
}
158-
})
159-
}
160-
161108
async function withContentSri (cache, integrity, fn) {
162109
const sri = ssri.parse(integrity)
163110
// If `integrity` has multiple entries, pick the first digest
@@ -201,28 +148,6 @@ async function withContentSri (cache, integrity, fn) {
201148
}
202149
}
203150

204-
function withContentSriSync (cache, integrity, fn) {
205-
const sri = ssri.parse(integrity)
206-
// If `integrity` has multiple entries, pick the first digest
207-
// with available local data.
208-
const algo = sri.pickAlgorithm()
209-
const digests = sri[algo]
210-
if (digests.length <= 1) {
211-
const cpath = contentPath(cache, digests[0])
212-
return fn(cpath, digests[0])
213-
} else {
214-
let lastErr = null
215-
for (const meta of digests) {
216-
try {
217-
return withContentSriSync(cache, meta, fn)
218-
} catch (err) {
219-
lastErr = err
220-
}
221-
}
222-
throw lastErr
223-
}
224-
}
225-
226151
function sizeError (expected, found) {
227152
/* eslint-disable-next-line max-len */
228153
const err = new Error(`Bad data size: expected inserted data to be ${expected} bytes, but got ${found} instead`)

lib/entry-index.js

Lines changed: 2 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ const indexV = require('../package.json')['cache-version'].index
1515
const moveFile = require('@npmcli/move-file')
1616
const _rimraf = require('rimraf')
1717
const rimraf = util.promisify(_rimraf)
18-
rimraf.sync = _rimraf.sync
1918

2019
module.exports.NotFoundError = class NotFoundError extends Error {
2120
constructor (cache, key) {
@@ -151,31 +150,6 @@ async function insert (cache, key, integrity, opts = {}) {
151150
return formatEntry(cache, entry)
152151
}
153152

154-
module.exports.insert.sync = insertSync
155-
156-
function insertSync (cache, key, integrity, opts = {}) {
157-
const { metadata, size } = opts
158-
const bucket = bucketPath(cache, key)
159-
const entry = {
160-
key,
161-
integrity: integrity && ssri.stringify(integrity),
162-
time: Date.now(),
163-
size,
164-
metadata,
165-
}
166-
fixOwner.mkdirfix.sync(cache, path.dirname(bucket))
167-
const stringified = JSON.stringify(entry)
168-
fs.appendFileSync(bucket, `\n${hashEntry(stringified)}\t${stringified}`)
169-
try {
170-
fixOwner.chownr.sync(cache, bucket)
171-
} catch (err) {
172-
if (err.code !== 'ENOENT') {
173-
throw err
174-
}
175-
}
176-
return formatEntry(cache, entry)
177-
}
178-
179153
module.exports.find = find
180154

181155
async function find (cache, key) {
@@ -198,27 +172,6 @@ async function find (cache, key) {
198172
}
199173
}
200174

201-
module.exports.find.sync = findSync
202-
203-
function findSync (cache, key) {
204-
const bucket = bucketPath(cache, key)
205-
try {
206-
return bucketEntriesSync(bucket).reduce((latest, next) => {
207-
if (next && next.key === key) {
208-
return formatEntry(cache, next)
209-
} else {
210-
return latest
211-
}
212-
}, null)
213-
} catch (err) {
214-
if (err.code === 'ENOENT') {
215-
return null
216-
} else {
217-
throw err
218-
}
219-
}
220-
}
221-
222175
module.exports.delete = del
223176

224177
function del (cache, key, opts = {}) {
@@ -230,17 +183,6 @@ function del (cache, key, opts = {}) {
230183
return rimraf(bucket)
231184
}
232185

233-
module.exports.delete.sync = delSync
234-
235-
function delSync (cache, key, opts = {}) {
236-
if (!opts.removeFully) {
237-
return insertSync(cache, key, null, opts)
238-
}
239-
240-
const bucket = bucketPath(cache, key)
241-
return rimraf.sync(bucket)
242-
}
243-
244186
module.exports.lsStream = lsStream
245187

246188
function lsStream (cache) {
@@ -308,13 +250,6 @@ async function bucketEntries (bucket, filter) {
308250
return _bucketEntries(data, filter)
309251
}
310252

311-
module.exports.bucketEntries.sync = bucketEntriesSync
312-
313-
function bucketEntriesSync (bucket, filter) {
314-
const data = fs.readFileSync(bucket, 'utf8')
315-
return _bucketEntries(data, filter)
316-
}
317-
318253
function _bucketEntries (data, filter) {
319254
const entries = []
320255
data.split('\n').forEach((entry) => {
@@ -335,6 +270,8 @@ function _bucketEntries (data, filter) {
335270
// Entry is corrupted!
336271
return
337272
}
273+
// coverage disabled here, no need to test with an entry that parses to something falsey
274+
// istanbul ignore else
338275
if (obj) {
339276
entries.push(obj)
340277
}

lib/get.js

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -53,61 +53,6 @@ async function getDataByDigest (cache, key, opts = {}) {
5353
}
5454
module.exports.byDigest = getDataByDigest
5555

56-
function getDataSync (cache, key, opts = {}) {
57-
const { integrity, memoize, size } = opts
58-
const memoized = memo.get(cache, key, opts)
59-
60-
if (memoized && memoize !== false) {
61-
return {
62-
metadata: memoized.entry.metadata,
63-
data: memoized.data,
64-
integrity: memoized.entry.integrity,
65-
size: memoized.entry.size,
66-
}
67-
}
68-
const entry = index.find.sync(cache, key, opts)
69-
if (!entry) {
70-
throw new index.NotFoundError(cache, key)
71-
}
72-
const data = read.sync(cache, entry.integrity, {
73-
integrity: integrity,
74-
size: size,
75-
})
76-
const res = {
77-
metadata: entry.metadata,
78-
data: data,
79-
size: entry.size,
80-
integrity: entry.integrity,
81-
}
82-
if (memoize) {
83-
memo.put(cache, entry, res.data, opts)
84-
}
85-
86-
return res
87-
}
88-
89-
module.exports.sync = getDataSync
90-
91-
function getDataByDigestSync (cache, digest, opts = {}) {
92-
const { integrity, memoize, size } = opts
93-
const memoized = memo.get.byDigest(cache, digest, opts)
94-
95-
if (memoized && memoize !== false) {
96-
return memoized
97-
}
98-
99-
const res = read.sync(cache, digest, {
100-
integrity: integrity,
101-
size: size,
102-
})
103-
if (memoize) {
104-
memo.put.byDigest(cache, digest, res, opts)
105-
}
106-
107-
return res
108-
}
109-
module.exports.sync.byDigest = getDataByDigestSync
110-
11156
const getMemoizedStream = (memoized) => {
11257
const stream = new Minipass()
11358
stream.on('newListener', function (ev, cb) {

lib/index.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,12 @@ module.exports.ls.stream = index.lsStream
1717

1818
module.exports.get = get
1919
module.exports.get.byDigest = get.byDigest
20-
module.exports.get.sync = get.sync
21-
module.exports.get.sync.byDigest = get.sync.byDigest
2220
module.exports.get.stream = get.stream
2321
module.exports.get.stream.byDigest = get.stream.byDigest
2422
module.exports.get.copy = get.copy
2523
module.exports.get.copy.byDigest = get.copy.byDigest
2624
module.exports.get.info = get.info
2725
module.exports.get.hasContent = get.hasContent
28-
module.exports.get.hasContent.sync = get.hasContent.sync
2926

3027
module.exports.put = put
3128
module.exports.put.stream = put.stream

lib/util/fix-owner.js

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -67,40 +67,6 @@ async function fixOwner (cache, filepath) {
6767
)
6868
}
6969

70-
module.exports.chownr.sync = fixOwnerSync
71-
72-
function fixOwnerSync (cache, filepath) {
73-
if (!process.getuid) {
74-
// This platform doesn't need ownership fixing
75-
return
76-
}
77-
const { uid, gid } = inferOwner.sync(cache)
78-
getSelf()
79-
if (self.uid !== 0) {
80-
// almost certainly can't chown anyway
81-
return
82-
}
83-
84-
if (self.uid === uid && self.gid === gid) {
85-
// No need to override if it's already what we used.
86-
return
87-
}
88-
try {
89-
chownr.sync(
90-
filepath,
91-
typeof uid === 'number' ? uid : self.uid,
92-
typeof gid === 'number' ? gid : self.gid
93-
)
94-
} catch (err) {
95-
// only catch ENOENT, any other error is a problem.
96-
if (err.code === 'ENOENT') {
97-
return null
98-
}
99-
100-
throw err
101-
}
102-
}
103-
10470
module.exports.mkdirfix = mkdirfix
10571

10672
async function mkdirfix (cache, p, cb) {
@@ -123,23 +89,3 @@ async function mkdirfix (cache, p, cb) {
12389
throw err
12490
}
12591
}
126-
127-
module.exports.mkdirfix.sync = mkdirfixSync
128-
129-
function mkdirfixSync (cache, p) {
130-
try {
131-
inferOwner.sync(cache)
132-
const made = mkdirp.sync(p)
133-
if (made) {
134-
fixOwnerSync(cache, made)
135-
return made
136-
}
137-
} catch (err) {
138-
if (err.code === 'EEXIST') {
139-
fixOwnerSync(cache, p)
140-
return null
141-
} else {
142-
throw err
143-
}
144-
}
145-
}

lib/verify.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -239,14 +239,11 @@ function cleanTmp (cache, opts) {
239239
return rimraf(path.join(cache, 'tmp'))
240240
}
241241

242-
function writeVerifile (cache, opts) {
242+
async function writeVerifile (cache, opts) {
243243
const verifile = path.join(cache, '_lastverified')
244244
opts.log.silly('verify', 'writing verifile to ' + verifile)
245-
try {
246-
return fs.writeFile(verifile, `${Date.now()}`)
247-
} finally {
248-
fixOwner.chownr.sync(cache, verifile)
249-
}
245+
await fs.writeFile(verifile, `${Date.now()}`)
246+
return fixOwner.chownr(cache, verifile)
250247
}
251248

252249
module.exports.lastRun = lastRun

0 commit comments

Comments
 (0)