let yauzl_open = util.promisify(yauzl.open)
-let ZipCache = function(diag) {
+let ZipCache = function(diag1, diag) {
if (!this instanceof ZipCache)
- throw Error('ZipCache is a constructor')
- this.diag = diag || false
-
- this.build_cache = new BuildCache()
+ throw new Error('ZipCache is a constructor')
+ BuildCache.call(this, diag)
+ this.diag1 = diag1
}
-ZipCache.prototype.get = function(key) {
- return /*await*/ this.build_cache.get(
- key,
- async result => {
- let zipfile = await yauzl_open(key, {autoClose: false})
- if (this.diag)
- console.log(`loading zip file ${key}`)
+ZipCache.prototype = Object.create(BuildCache.prototype)
- let entries = []
- await new Promise(
- (resolve, reject) => {
- zipfile.
- on('entry', entry => {entries.push(entry)}).
- on('end', () => resolve())
- }
- )
+ZipCache.prototype.build = async function(key, result) {
+ let zipfile = await yauzl_open(key, {autoClose: false})
+ if (this.diag1)
+ console.log(`loading zip file ${key}`)
- result.value = {}
- for (let i = 0; i < entries.length; ++i) {
- let read_stream = await new Promise(
- (resolve, reject) => {
- zipfile.openReadStream(
- entries[i],
- (err, stream) => {
- if (err)
- reject(err)
- resolve(stream)
- }
- )
- }
- )
+ let entries = []
+ await new Promise(
+ (resolve, reject) => {
+ zipfile.
+ on('entry', entry => {entries.push(entry)}).
+ on('end', () => resolve())
+ }
+ )
- let write_stream = new stream_buffers.WritableStreamBuffer()
- let data = new Promise(
- (resolve, reject) => {
- write_stream.
- on('finish', () => {resolve(write_stream.getContents())}).
- on('error', err => {reject(err)})
+ result.value = {}
+ for (let i = 0; i < entries.length; ++i) {
+ let read_stream = await new Promise(
+ (resolve, reject) => {
+ zipfile.openReadStream(
+ entries[i],
+ (err, stream) => {
+ if (err)
+ reject(err)
+ resolve(stream)
}
)
- read_stream.pipe(write_stream)
- data = await data
+ }
+ )
- let entry_pathname = '/' + entries[i].fileName
- if (this.diag)
- console.log(`entry pathname ${entry_pathname} size ${data.length}`)
- result.value[entry_pathname] = data
+ let write_stream = new stream_buffers.WritableStreamBuffer()
+ let data = new Promise(
+ (resolve, reject) => {
+ write_stream.
+ on('finish', () => {resolve(write_stream.getContents())}).
+ on('error', err => {reject(err)})
}
- await zipfile.close()
- }
- )
+ )
+ read_stream.pipe(write_stream)
+ data = await data
+
+ let entry_pathname = '/' + entries[i].fileName
+ if (this.diag1)
+ console.log(`entry pathname ${entry_pathname} size ${data.length}`)
+ result.value[entry_pathname] = data
+ }
+ await zipfile.close()
}
module.exports = ZipCache