verdaccio-tarball-local-storage 31.4.0 → 31.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js.map +1 -1
- package/dist/package-storage.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import path from 'path';\nimport buildDebug from 'debug';\nimport isNil from 'lodash/isNil';\nimport isString from 'lodash/isString';\nimport { Config, Logger, Token, IPluginStorage, IPackageStorage } from '@verdaccio/types';\n\nimport { PackageStorage } from './package-storage';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage');\n\n// eslint-disable-next-line import/no-default-export\nexport default class LocalStorage implements IPluginStorage<unknown> {\n config: Config;\n logger: Logger;\n\n constructor(config: Config, logger: Logger) {\n this.config = config;\n this.logger = logger;\n }\n\n getSecret(): Promise<string> {\n throw new Error('Method not implemented.');\n }\n\n setSecret(): Promise<any> {\n throw new Error('Method not implemented.');\n }\n\n add(): void {\n throw new Error('Method not implemented.');\n }\n\n search(): void {\n throw new Error('Method not implemented.');\n }\n\n remove(): void {\n throw new Error('Method not implemented.');\n }\n\n get(): void {\n throw new Error('Method not implemented.');\n }\n\n getPackageStorage(packageName: string): IPackageStorage {\n const packageAccess = this.config.getMatchedPackagesSpec(packageName);\n\n const packagePath = this.getLocalStoragePath(\n packageAccess ? packageAccess.storage : undefined\n );\n debug('storage path selected: ', packagePath);\n\n if (isString(packagePath) === false) {\n debug('the package %o has no storage defined ', packageName);\n return;\n }\n\n const packageStoragePath = path.join(\n path.resolve(path.dirname(this.config.self_path || ''), packagePath),\n packageName\n );\n\n debug('storage absolute path: ', packageStoragePath);\n\n return new PackageStorage(packageStoragePath, this.logger);\n }\n\n saveToken(): Promise<any> {\n throw new Error('Method not implemented.');\n }\n\n deleteToken(): Promise<any> {\n throw new Error('Method not implemented.');\n }\n\n readTokens(): Promise<Token[]> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Verify the right local storage location.\n * @param {String} path\n * @return {String}\n * @private\n */\n private getLocalStoragePath(storage: string | void) {\n const globalConfigStorage = this.config ? this.config.storage : undefined;\n if (isNil(globalConfigStorage)) {\n throw new Error('global storage is required for this plugin');\n } else {\n if (isNil(storage) === false && isString(storage)) {\n return path.join(globalConfigStorage as string, storage as string);\n }\n\n return globalConfigStorage as string;\n }\n }\n}\n"],"names":["LocalStorage","debug","buildDebug","getSecret","Error","setSecret","add","search","remove","get","getPackageStorage","packageName","packageAccess","config","getMatchedPackagesSpec","packagePath","getLocalStoragePath","storage","undefined","isString","packageStoragePath","path","join","resolve","dirname","self_path","PackageStorage","logger","saveToken","deleteToken","readTokens","globalConfigStorage","isNil"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import path from 'path';\nimport buildDebug from 'debug';\nimport isNil from 'lodash/isNil';\nimport isString from 'lodash/isString';\nimport { Config, Logger, Token, IPluginStorage, IPackageStorage } from '@verdaccio/types';\n\nimport { PackageStorage } from './package-storage';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage');\n\n// eslint-disable-next-line import/no-default-export\nexport default class LocalStorage implements IPluginStorage<unknown> {\n config: Config;\n logger: Logger;\n\n constructor(config: Config, logger: Logger) {\n this.config = config;\n this.logger = logger;\n }\n\n getSecret(): Promise<string> {\n throw new Error('Method not implemented.');\n }\n\n setSecret(): Promise<any> {\n throw new Error('Method not implemented.');\n }\n\n add(): void {\n throw new Error('Method not implemented.');\n }\n\n search(): void {\n throw new Error('Method not implemented.');\n }\n\n remove(): void {\n throw new Error('Method not implemented.');\n }\n\n get(): void {\n throw new Error('Method not implemented.');\n }\n\n getPackageStorage(packageName: string): IPackageStorage {\n const packageAccess = this.config.getMatchedPackagesSpec(packageName);\n\n const packagePath = this.getLocalStoragePath(\n packageAccess ? packageAccess.storage : undefined\n );\n debug('storage path selected: ', packagePath);\n\n if (isString(packagePath) === false) {\n debug('the package %o has no storage defined ', packageName);\n return;\n }\n\n const packageStoragePath = path.join(\n path.resolve(path.dirname(this.config.self_path || ''), packagePath),\n packageName\n );\n\n debug('storage absolute path: ', packageStoragePath);\n\n return new PackageStorage(packageStoragePath, this.logger);\n }\n\n saveToken(): Promise<any> {\n throw new Error('Method not implemented.');\n }\n\n deleteToken(): Promise<any> {\n throw new Error('Method not implemented.');\n }\n\n readTokens(): Promise<Token[]> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Verify the right local storage location.\n * @param {String} path\n * @return {String}\n * @private\n */\n private getLocalStoragePath(storage: string | void) {\n const globalConfigStorage = this.config ? this.config.storage : undefined;\n if (isNil(globalConfigStorage)) {\n throw new Error('global storage is required for this plugin');\n } else {\n if (isNil(storage) === false && isString(storage)) {\n return path.join(globalConfigStorage as string, storage as string);\n }\n\n return globalConfigStorage as string;\n }\n }\n}\n"],"names":["LocalStorage","debug","buildDebug","getSecret","Error","setSecret","add","search","remove","get","getPackageStorage","packageName","packageAccess","config","getMatchedPackagesSpec","packagePath","getLocalStoragePath","storage","undefined","isString","packageStoragePath","path","join","resolve","dirname","self_path","PackageStorage","logger","saveToken","deleteToken","readTokens","globalConfigStorage","isNil"],"mappings":";;;;;;;eAWqBA;;;6DAXJ;8DACM;8DACL;iEACG;gCAGU;;;;;;;;;;;;;;;;;;;AAE/B,MAAMC,QAAQC,IAAAA,cAAU,EAAC;AAGV,MAAMF;IASjBG,YAA6B;QACzB,MAAM,IAAIC,MAAM;IACpB;IAEAC,YAA0B;QACtB,MAAM,IAAID,MAAM;IACpB;IAEAE,MAAY;QACR,MAAM,IAAIF,MAAM;IACpB;IAEAG,SAAe;QACX,MAAM,IAAIH,MAAM;IACpB;IAEAI,SAAe;QACX,MAAM,IAAIJ,MAAM;IACpB;IAEAK,MAAY;QACR,MAAM,IAAIL,MAAM;IACpB;IAEAM,kBAAkBC,WAAmB,EAAmB;QACpD,MAAMC,gBAAgB,IAAI,CAACC,MAAM,CAACC,sBAAsB,CAACH;QAEzD,MAAMI,cAAc,IAAI,CAACC,mBAAmB,CACxCJ,gBAAgBA,cAAcK,OAAO,GAAGC;QAE5CjB,MAAM,2BAA2Bc;QAEjC,IAAII,IAAAA,iBAAQ,EAACJ,iBAAiB,OAAO;YACjCd,MAAM,0CAA0CU;YAChD;QACJ;QAEA,MAAMS,qBAAqBC,aAAI,CAACC,IAAI,CAChCD,aAAI,CAACE,OAAO,CAACF,aAAI,CAACG,OAAO,CAAC,IAAI,CAACX,MAAM,CAACY,SAAS,IAAI,KAAKV,cACxDJ;QAGJV,MAAM,2BAA2BmB;QAEjC,OAAO,IAAIM,8BAAc,CAACN,oBAAoB,IAAI,CAACO,MAAM;IAC7D;IAEAC,YAA0B;QACtB,MAAM,IAAIxB,MAAM;IACpB;IAEAyB,cAA4B;QACxB,MAAM,IAAIzB,MAAM;IACpB;IAEA0B,aAA+B;QAC3B,MAAM,IAAI1B,MAAM;IACpB;IAEA;;;;;KAKC,GACD,AAAQY,oBAAoBC,OAAsB,EAAE;QAChD,MAAMc,sBAAsB,IAAI,CAAClB,MAAM,GAAG,IAAI,CAACA,MAAM,CAACI,OAAO,GAAGC;QAChE,IAAIc,IAAAA,cAAK,EAACD,sBAAsB;YAC5B,MAAM,IAAI3B,MAAM;QACpB,OAAO;YACH,IAAI4B,IAAAA,cAAK,EAACf,aAAa,SAASE,IAAAA,iBAAQ,EAACF,UAAU;gBAC/C,OAAOI,aAAI,CAACC,IAAI,CAACS,qBAA+Bd;YACpD;YAEA,OAAOc;QACX;IACJ;IAjFA,YAAYlB,MAAc,EAAEc,MAAc,CAAE;QAH5Cd,uBAAAA,UAAAA,KAAAA;QACAc,uBAAAA,UAAAA,KAAAA;QAGI,IAAI,CAACd,MAAM,GAAGA;QACd,IAAI,CAACc,MAAM,GAAGA;IAClB;AA+EJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/package-storage.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport buildDebug from 'debug';\nimport isNil from 'lodash/isNil';\nimport { getCode, VerdaccioError } from '@verdaccio/commons-api';\nimport { UploadTarball, ReadTarball } from '@verdaccio/streams';\nimport { Logger, ILocalPackageManager, IUploadTarball, IReadTarball } from '@verdaccio/types';\n\nconst fileExist = 'EEXISTS';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage:fs');\n\nfunction fSError(message: string, code = 409) {\n const err: VerdaccioError = getCode(code, message);\n // FIXME: we should return http-status codes here instead, future improvement\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n err.code = message;\n\n return err;\n}\n\nfunction tempFile(str: string) {\n return `${str}.tmp${String(Math.random()).substr(2)}`;\n}\n\nfunction renameTmp(src: string, dst: string, _cb: fs.NoParamCallback) {\n const cb: fs.NoParamCallback = err => {\n if (err) {\n fs.unlink(src, () => {});\n }\n _cb(err);\n };\n\n if (process.platform !== 'win32') {\n return fs.rename(src, dst, cb);\n }\n\n /*\n * windows can't remove opened file,\n * but it seem to be able to rename it\n */\n const tmp = tempFile(dst);\n fs.rename(dst, tmp, err => {\n fs.rename(src, dst, cb);\n if (!err) {\n fs.unlink(tmp, () => {});\n }\n });\n}\n\nexport class PackageStorage implements ILocalPackageManager {\n path: string;\n logger: Logger;\n\n constructor(path: string, logger: Logger) {\n this.path = path;\n this.logger = logger;\n }\n\n updatePackage(): void {\n throw new Error('Method not implemented.');\n }\n\n deletePackage(\n packageName: string,\n callback: (err: NodeJS.ErrnoException | null) => void\n ): void {\n debug('delete a package %o', packageName);\n\n return fs.unlink(this.getStorage(packageName), callback);\n }\n\n removePackage(callback: (err: NodeJS.ErrnoException | null) => void): void {\n debug('remove a package %o', this.path);\n\n fs.rmdir(this.getStorage('.'), callback);\n }\n\n createPackage(): void {\n throw new Error('Method not implemented.');\n }\n\n savePackage(): void {\n throw new Error('Method not implemented.');\n }\n\n readPackage(): void {\n throw new Error('Method not implemented.');\n }\n\n writeTarball(name: string): IUploadTarball {\n const uploadStream = new UploadTarball({});\n debug('write a tarball for a package %o', name);\n\n let ended = 0;\n uploadStream.on('end', () => {\n ended = 1;\n });\n\n const pathName = this.getStorage(name);\n\n fs.access(pathName, fileNotFound => {\n const exists = !fileNotFound;\n if (exists) {\n uploadStream.emit('error', fSError(fileExist));\n } else {\n // this condition is missing in the original plugin\n if (!fs.existsSync(this.path)) {\n fs.mkdirSync(this.path, { recursive: true });\n }\n const temporalName = path.join(\n this.path,\n `${name}.tmp-${String(Math.random()).replace(/^0\\./, '')}`\n );\n debug('write a temporal name %o', temporalName);\n const file = fs.createWriteStream(temporalName);\n const removeTempFile = () => fs.unlink(temporalName, () => {});\n let opened = false;\n uploadStream.pipe(file);\n\n uploadStream.done = () => {\n const onend = () => {\n file.on('close', () => {\n renameTmp(temporalName, pathName, function (err) {\n if (err) {\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n });\n });\n file.end();\n };\n if (ended) {\n onend();\n } else {\n uploadStream.on('end', onend);\n }\n };\n\n uploadStream.abort = () => {\n if (opened) {\n opened = false;\n file.on('close', () => {\n removeTempFile();\n });\n } else {\n // if the file does not recieve any byte never is opened and has to be removed anyway.\n removeTempFile();\n }\n file.end();\n };\n\n file.on('open', () => {\n opened = true;\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n file.on('error', err => {\n uploadStream.emit('error', err);\n });\n }\n });\n\n return uploadStream;\n }\n\n readTarball(name: string): IReadTarball {\n const pathName = this.getStorage(name);\n debug('read a a tarball %o on path %o', name, pathName);\n\n const readTarballStream = new ReadTarball({});\n\n const readStream = fs.createReadStream(pathName);\n\n readStream.on('error', err => {\n debug('error on read a tarball %o with error %o', name, err);\n readTarballStream.emit('error', err);\n });\n\n readStream.on('open', fd => {\n fs.fstat(fd, (err, stats) => {\n if (isNil(err) === false) {\n debug('error on read a tarball %o with error %o', name, err);\n return readTarballStream.emit('error', err);\n }\n readTarballStream.emit('content-length', stats.size);\n readTarballStream.emit('open');\n debug('open on read a tarball %o', name);\n readStream.pipe(readTarballStream);\n });\n });\n\n readTarballStream.abort = () => {\n debug('abort on read a tarball %o', name);\n readStream.close();\n };\n\n return readTarballStream;\n }\n\n private getStorage(fileName = '') {\n return path.join(this.path, fileName);\n }\n}\n"],"names":["PackageStorage","fileExist","debug","buildDebug","fSError","message","code","err","getCode","tempFile","str","String","Math","random","substr","renameTmp","src","dst","_cb","cb","fs","unlink","process","platform","rename","tmp","updatePackage","Error","deletePackage","packageName","callback","getStorage","removePackage","path","rmdir","createPackage","savePackage","readPackage","writeTarball","name","uploadStream","UploadTarball","ended","on","pathName","access","fileNotFound","exists","emit","existsSync","mkdirSync","recursive","temporalName","join","replace","file","createWriteStream","removeTempFile","opened","pipe","done","onend","end","abort","readTarball","readTarballStream","ReadTarball","readStream","createReadStream","fd","fstat","stats","isNil","size","close","fileName","constructor","logger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/package-storage.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport buildDebug from 'debug';\nimport isNil from 'lodash/isNil';\nimport { getCode, VerdaccioError } from '@verdaccio/commons-api';\nimport { UploadTarball, ReadTarball } from '@verdaccio/streams';\nimport { Logger, ILocalPackageManager, IUploadTarball, IReadTarball } from '@verdaccio/types';\n\nconst fileExist = 'EEXISTS';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage:fs');\n\nfunction fSError(message: string, code = 409) {\n const err: VerdaccioError = getCode(code, message);\n // FIXME: we should return http-status codes here instead, future improvement\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n err.code = message;\n\n return err;\n}\n\nfunction tempFile(str: string) {\n return `${str}.tmp${String(Math.random()).substr(2)}`;\n}\n\nfunction renameTmp(src: string, dst: string, _cb: fs.NoParamCallback) {\n const cb: fs.NoParamCallback = err => {\n if (err) {\n fs.unlink(src, () => {});\n }\n _cb(err);\n };\n\n if (process.platform !== 'win32') {\n return fs.rename(src, dst, cb);\n }\n\n /*\n * windows can't remove opened file,\n * but it seem to be able to rename it\n */\n const tmp = tempFile(dst);\n fs.rename(dst, tmp, err => {\n fs.rename(src, dst, cb);\n if (!err) {\n fs.unlink(tmp, () => {});\n }\n });\n}\n\nexport class PackageStorage implements ILocalPackageManager {\n path: string;\n logger: Logger;\n\n constructor(path: string, logger: Logger) {\n this.path = path;\n this.logger = logger;\n }\n\n updatePackage(): void {\n throw new Error('Method not implemented.');\n }\n\n deletePackage(\n packageName: string,\n callback: (err: NodeJS.ErrnoException | null) => void\n ): void {\n debug('delete a package %o', packageName);\n\n return fs.unlink(this.getStorage(packageName), callback);\n }\n\n removePackage(callback: (err: NodeJS.ErrnoException | null) => void): void {\n debug('remove a package %o', this.path);\n\n fs.rmdir(this.getStorage('.'), callback);\n }\n\n createPackage(): void {\n throw new Error('Method not implemented.');\n }\n\n savePackage(): void {\n throw new Error('Method not implemented.');\n }\n\n readPackage(): void {\n throw new Error('Method not implemented.');\n }\n\n writeTarball(name: string): IUploadTarball {\n const uploadStream = new UploadTarball({});\n debug('write a tarball for a package %o', name);\n\n let ended = 0;\n uploadStream.on('end', () => {\n ended = 1;\n });\n\n const pathName = this.getStorage(name);\n\n fs.access(pathName, fileNotFound => {\n const exists = !fileNotFound;\n if (exists) {\n uploadStream.emit('error', fSError(fileExist));\n } else {\n // this condition is missing in the original plugin\n if (!fs.existsSync(this.path)) {\n fs.mkdirSync(this.path, { recursive: true });\n }\n const temporalName = path.join(\n this.path,\n `${name}.tmp-${String(Math.random()).replace(/^0\\./, '')}`\n );\n debug('write a temporal name %o', temporalName);\n const file = fs.createWriteStream(temporalName);\n const removeTempFile = () => fs.unlink(temporalName, () => {});\n let opened = false;\n uploadStream.pipe(file);\n\n uploadStream.done = () => {\n const onend = () => {\n file.on('close', () => {\n renameTmp(temporalName, pathName, function (err) {\n if (err) {\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n });\n });\n file.end();\n };\n if (ended) {\n onend();\n } else {\n uploadStream.on('end', onend);\n }\n };\n\n uploadStream.abort = () => {\n if (opened) {\n opened = false;\n file.on('close', () => {\n removeTempFile();\n });\n } else {\n // if the file does not recieve any byte never is opened and has to be removed anyway.\n removeTempFile();\n }\n file.end();\n };\n\n file.on('open', () => {\n opened = true;\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n file.on('error', err => {\n uploadStream.emit('error', err);\n });\n }\n });\n\n return uploadStream;\n }\n\n readTarball(name: string): IReadTarball {\n const pathName = this.getStorage(name);\n debug('read a a tarball %o on path %o', name, pathName);\n\n const readTarballStream = new ReadTarball({});\n\n const readStream = fs.createReadStream(pathName);\n\n readStream.on('error', err => {\n debug('error on read a tarball %o with error %o', name, err);\n readTarballStream.emit('error', err);\n });\n\n readStream.on('open', fd => {\n fs.fstat(fd, (err, stats) => {\n if (isNil(err) === false) {\n debug('error on read a tarball %o with error %o', name, err);\n return readTarballStream.emit('error', err);\n }\n readTarballStream.emit('content-length', stats.size);\n readTarballStream.emit('open');\n debug('open on read a tarball %o', name);\n readStream.pipe(readTarballStream);\n });\n });\n\n readTarballStream.abort = () => {\n debug('abort on read a tarball %o', name);\n readStream.close();\n };\n\n return readTarballStream;\n }\n\n private getStorage(fileName = '') {\n return path.join(this.path, fileName);\n }\n}\n"],"names":["PackageStorage","fileExist","debug","buildDebug","fSError","message","code","err","getCode","tempFile","str","String","Math","random","substr","renameTmp","src","dst","_cb","cb","fs","unlink","process","platform","rename","tmp","updatePackage","Error","deletePackage","packageName","callback","getStorage","removePackage","path","rmdir","createPackage","savePackage","readPackage","writeTarball","name","uploadStream","UploadTarball","ended","on","pathName","access","fileNotFound","exists","emit","existsSync","mkdirSync","recursive","temporalName","join","replace","file","createWriteStream","removeTempFile","opened","pipe","done","onend","end","abort","readTarball","readTarballStream","ReadTarball","readStream","createReadStream","fd","fstat","stats","isNil","size","close","fileName","logger"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "verdaccio-tarball-local-storage",
|
|
3
|
-
"version": "31.
|
|
3
|
+
"version": "31.5.0",
|
|
4
4
|
"description": "Cropped and fixed version of the @verdaccio/local-storage plugin (https://github.com/verdaccio/monorepo/tree/9.x/plugins/local-storage)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -32,5 +32,5 @@
|
|
|
32
32
|
"cli": {
|
|
33
33
|
"webpack": false
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "6fce124ae36f2a36705247f6300ca8354aba6fb2"
|
|
36
36
|
}
|