UNPKG

verdaccio-memory

Version:

Storage implementation in memory

1 lines 7.95 kB
{"version":3,"file":"memory-handler.mjs","names":[],"sources":["../src/memory-handler.ts"],"sourcesContent":["import MemoryFileSystem from 'memory-fs';\nimport path from 'node:path';\n\nimport type { VerdaccioError } from '@verdaccio/core';\nimport { errorUtils } from '@verdaccio/core';\nimport { ReadTarball, UploadTarball } from '@verdaccio/streams';\nimport type {\n Callback,\n CallbackAction,\n Logger,\n Package,\n PackageTransformer,\n ReadPackageCallback,\n StorageUpdateCallback,\n StorageWriteCallback,\n} from '@verdaccio/types';\n\nimport type { IPackageStorageManager } from './legacy-plugin-api';\n\nimport { parsePackage, stringifyPackage } from './utils';\n\nconst fs = new MemoryFileSystem();\nconst { getBadRequest, getInternalError, getConflict, getNotFound } = errorUtils;\n\nexport type DataHandler = {\n [key: string]: string;\n};\n\nclass MemoryHandler implements IPackageStorageManager {\n private data: DataHandler;\n private name: string;\n private path: string;\n public logger: Logger;\n\n public constructor(packageName: string, data: DataHandler, logger: Logger) {\n // this is not need it\n this.data = data;\n this.name = packageName;\n this.logger = logger;\n this.path = `/${packageName}`;\n }\n\n public updatePackage(\n pkgFileName: string,\n updateHandler: StorageUpdateCallback,\n onWrite: StorageWriteCallback,\n transformPackage: PackageTransformer,\n onEnd: CallbackAction\n ): void {\n const json: string = this._getStorage(pkgFileName);\n let pkg: Package;\n\n try {\n pkg = parsePackage(json) as Package;\n } catch (err) {\n return onEnd(err);\n }\n\n updateHandler(pkg, (err: VerdaccioError) => {\n if (err) {\n return onEnd(err);\n }\n try {\n onWrite(pkgFileName, transformPackage(pkg), onEnd);\n } catch {\n return onEnd(getInternalError('error on parse the metadata'));\n }\n });\n }\n\n public deletePackage(pkgName: string, callback: Callback): void {\n delete this.data[pkgName];\n return callback(null);\n }\n\n public removePackage(callback: CallbackAction): void {\n return callback(null);\n }\n\n public createPackage(name: string, value: Package, cb: CallbackAction): void {\n this.savePackage(name, value, cb);\n }\n\n public savePackage(name: string, value: Package, cb: CallbackAction): void {\n try {\n const json: string = stringifyPackage(value);\n\n this.data[name] = json;\n return cb(null);\n } catch (err: any) {\n return cb(getInternalError(err.message));\n }\n }\n\n public readPackage(name: string, cb: ReadPackageCallback): void {\n const json = this._getStorage(name);\n const isJson = typeof json === 'undefined';\n\n try {\n return cb(isJson ? getNotFound() : null, parsePackage(json));\n } catch {\n return cb(getNotFound());\n }\n }\n\n public writeTarball(name: string): UploadTarball {\n const uploadStream: UploadTarball = new UploadTarball({});\n const temporalName = `${this.path}/${name}`;\n\n process.nextTick(function () {\n fs.mkdirp(path.dirname(temporalName), function (mkdirpError) {\n if (mkdirpError) {\n return uploadStream.emit('error', mkdirpError);\n }\n fs.stat(temporalName, function (fileError, stats) {\n if (!fileError && stats) {\n return uploadStream.emit('error', getConflict());\n }\n\n try {\n const file = fs.createWriteStream(temporalName);\n\n uploadStream.pipe(file);\n\n uploadStream.done = function (): void {\n const onEnd = function (): void {\n uploadStream.emit('success');\n };\n\n uploadStream.on('end', onEnd);\n };\n\n uploadStream.abort = function (): void {\n uploadStream.emit('error', getBadRequest('transmision aborted'));\n file.end();\n };\n\n uploadStream.emit('open');\n return;\n } catch (err) {\n uploadStream.emit('error', err);\n return;\n }\n });\n });\n });\n\n return uploadStream;\n }\n\n public readTarball(name: string): ReadTarball {\n const pathName = `${this.path}/${name}`;\n\n const readTarballStream: ReadTarball = new ReadTarball({});\n\n process.nextTick(function () {\n fs.stat(pathName, function (fileError, stats) {\n if (fileError && !stats) {\n return readTarballStream.emit('error', getNotFound());\n }\n\n try {\n const readStream = fs.createReadStream(pathName);\n\n const pathMeta = fs.meta(pathName);\n const contentLength: number = (pathMeta && pathMeta.length) || 0;\n readTarballStream.emit('content-length', contentLength);\n readTarballStream.emit('open');\n readStream.pipe(readTarballStream);\n readStream.on('error', (error: VerdaccioError) => {\n readTarballStream.emit('error', error);\n });\n\n readTarballStream.abort = function (): void {\n readStream.destroy(getBadRequest('read has been aborted'));\n };\n return;\n } catch (err) {\n readTarballStream.emit('error', err);\n return;\n }\n });\n });\n\n return readTarballStream;\n }\n\n private _getStorage(name = ''): string {\n return this.data[name];\n }\n}\n\nexport default MemoryHandler;\n"],"mappings":"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"}