@verdaccio/local-storage 10.0.8 → 10.1.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/lib/local-database.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/local-database.ts"],"names":["DEPRECATED_DB_NAME","DB_NAME","debug","LocalDatabase","TokenActions","constructor","config","logger","path","_buildStoragePath","locked","data","_fetchLocalPackages","_sync","getSecret","Promise","resolve","secret","setSecret","add","name","cb","list","indexOf","push","search","onPackage","onEnd","validateName","storages","_getCustomPackageLocalStorages","JSON","stringify","base","Path","dirname","self_path","self","storageKeys","Object","keys","async","eachSeries","storage","position","base2","join","storagePath","fs","readdir","err","files","file","includes","match","fileLocation","file2","packagePath","stat","stats","_","isNil","item","time","mtime","getTime","remove","get","error","pkgName","splice","totalItems","length","getPackageStorage","packageName","packageAccess","getMatchedPackagesSpec","_getLocalStoragePath","undefined","isString","packageStoragePath","LocalDriver","clean","packages","listPackagesConf","map","pkg","Error","folderName","mkdirp","sync","writeFileSync","globalConfigStorage","sinopiadbPath","_dbGenPath","accessSync","constants","F_OK","process","emitWarning","code","detail","noSuchFile","emptyDatabase","message"],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport Path from 'path';\n\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport async from 'async';\nimport mkdirp from 'mkdirp';\nimport { Callback, Config, IPackageStorage, IPluginStorage, LocalStorage, Logger, StorageList } from '@verdaccio/types';\nimport { getInternalError } from '@verdaccio/commons-api';\n\nimport LocalDriver, { noSuchFile } from './local-fs';\nimport { loadPrivatePackages } from './pkg-utils';\nimport TokenActions from './token';\n\nconst DEPRECATED_DB_NAME = '.sinopia-db.json';\nconst DB_NAME = '.verdaccio-db.json';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage');\n\nclass LocalDatabase extends TokenActions implements IPluginStorage<{}> {\n public path: string;\n public logger: Logger;\n public data: LocalStorage;\n public config: Config;\n public locked: boolean;\n\n public constructor(config: Config, logger: Logger) {\n super(config);\n this.config = config;\n this.path = this._buildStoragePath(config);\n this.logger = logger;\n this.locked = false;\n this.data = this._fetchLocalPackages();\n this._sync();\n }\n\n public getSecret(): Promise<string> {\n return Promise.resolve(this.data.secret);\n }\n\n public setSecret(secret: string): Promise<Error | null> {\n return new Promise((resolve): void => {\n this.data.secret = secret;\n\n resolve(this._sync());\n });\n }\n\n public add(name: string, cb: Callback): void {\n if (this.data.list.indexOf(name) === -1) {\n this.data.list.push(name);\n\n debug('the private package %o has been added', name);\n cb(this._sync());\n } else {\n debug('the private package %o was not added', name);\n cb(null);\n }\n }\n\n public search(onPackage: Callback, onEnd: Callback, validateName: (name: string) => boolean): void {\n const storages = this._getCustomPackageLocalStorages();\n debug(`search custom local packages: %o`, JSON.stringify(storages));\n const base = Path.dirname(this.config.self_path);\n const self = this;\n const storageKeys = Object.keys(storages);\n debug(`search base: %o keys: %o`, base, storageKeys);\n\n async.eachSeries(\n storageKeys,\n function(storage, cb) {\n const position = storageKeys.indexOf(storage);\n const base2 = Path.join(position !== 0 ? storageKeys[0] : '');\n const storagePath: string = Path.resolve(base, base2, storage);\n debug('search path: %o : %o', storagePath, storage);\n fs.readdir(storagePath, (err, files) => {\n if (err) {\n return cb(err);\n }\n\n async.eachSeries(\n files,\n function(file, cb) {\n debug('local-storage: [search] search file path: %o', file);\n if (storageKeys.includes(file)) {\n return cb();\n }\n\n if (file.match(/^@/)) {\n // scoped\n const fileLocation = Path.resolve(base, storage, file);\n debug('search scoped file location: %o', fileLocation);\n fs.readdir(fileLocation, function(err, files) {\n if (err) {\n return cb(err);\n }\n\n async.eachSeries(\n files,\n (file2, cb) => {\n if (validateName(file2)) {\n const packagePath = Path.resolve(base, storage, file, file2);\n\n fs.stat(packagePath, (err, stats) => {\n if (_.isNil(err) === false) {\n return cb(err);\n }\n const item = {\n name: `${file}/${file2}`,\n path: packagePath,\n time: stats.mtime.getTime(),\n };\n onPackage(item, cb);\n });\n } else {\n cb();\n }\n },\n cb\n );\n });\n } else if (validateName(file)) {\n const base2 = Path.join(position !== 0 ? storageKeys[0] : '');\n const packagePath = Path.resolve(base, base2, storage, file);\n debug('search file location: %o', packagePath);\n fs.stat(packagePath, (err, stats) => {\n if (_.isNil(err) === false) {\n return cb(err);\n }\n onPackage(\n {\n name: file,\n path: packagePath,\n time: self.getTime(stats.mtime.getTime(), stats.mtime),\n },\n cb\n );\n });\n } else {\n cb();\n }\n },\n cb\n );\n });\n },\n // @ts-ignore\n onEnd\n );\n }\n\n public remove(name: string, cb: Callback): void {\n this.get((err, data) => {\n if (err) {\n cb(getInternalError('error remove private package'));\n this.logger.error({ err }, '[local-storage/remove]: remove the private package has failed @{err}');\n debug('error on remove package %o', name);\n }\n\n const pkgName = data.indexOf(name);\n if (pkgName !== -1) {\n this.data.list.splice(pkgName, 1);\n\n debug('remove package %o has been removed', name);\n }\n\n cb(this._sync());\n });\n }\n\n /**\n * Return all database elements.\n * @return {Array}\n */\n public get(cb: Callback): void {\n const list = this.data.list;\n const totalItems = this.data.list.length;\n\n cb(null, list);\n\n debug('get full list of packages (%o) has been fetched', totalItems);\n }\n\n public getPackageStorage(packageName: string): IPackageStorage {\n const packageAccess = this.config.getMatchedPackagesSpec(packageName);\n\n const packagePath: string = this._getLocalStoragePath(packageAccess ? packageAccess.storage : undefined);\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: string = 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 LocalDriver(packageStoragePath, this.logger);\n }\n\n public clean(): void {\n this._sync();\n }\n\n private getTime(time: number, mtime: Date): number | Date {\n return time ? time : mtime;\n }\n\n private _getCustomPackageLocalStorages(): object {\n const storages = {};\n\n // add custom storage if exist\n if (this.config.storage) {\n storages[this.config.storage] = true;\n }\n\n const { packages } = this.config;\n\n if (packages) {\n const listPackagesConf = Object.keys(packages || {});\n\n listPackagesConf.map(pkg => {\n const storage = packages[pkg].storage;\n if (storage) {\n storages[storage] = false;\n }\n });\n }\n\n return storages;\n }\n\n /**\n * Syncronize {create} database whether does not exist.\n * @return {Error|*}\n */\n private _sync(): Error | null {\n debug('sync database started');\n\n if (this.locked) {\n this.logger.error(\n 'Database is locked, please check error message printed during startup to ' + 'prevent data loss.'\n );\n return new Error(\n 'Verdaccio database is locked, please contact your administrator to checkout ' +\n 'logs during verdaccio startup.'\n );\n }\n // Uses sync to prevent ugly race condition\n try {\n // https://www.npmjs.com/package/mkdirp#mkdirpsyncdir-opts\n const folderName = Path.dirname(this.path);\n mkdirp.sync(folderName);\n debug('sync folder %o created succeed', folderName);\n } catch (err) {\n debug('sync create folder has failed with error: %o', err);\n return null;\n }\n\n try {\n fs.writeFileSync(this.path, JSON.stringify(this.data));\n debug('sync write succeed');\n\n return null;\n } catch (err) {\n debug('sync failed %o', err);\n\n return err;\n }\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): string {\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 /**\n * Build the local database path.\n * @param {Object} config\n * @return {string|String|*}\n * @private\n */\n private _buildStoragePath(config: Config): string {\n const sinopiadbPath: string = this._dbGenPath(DEPRECATED_DB_NAME, config);\n try {\n fs.accessSync(sinopiadbPath, fs.constants.F_OK);\n // @ts-ignore\n process.emitWarning('Database name deprecated!', {\n code: 'VERCODE01',\n detail: `Please rename database name from ${DEPRECATED_DB_NAME} to ${DB_NAME}`,\n });\n return sinopiadbPath;\n } catch (err) {\n if (err.code === noSuchFile) {\n return this._dbGenPath(DB_NAME, config);\n }\n\n throw err;\n }\n }\n\n /**\n * Fetch local packages.\n * @private\n * @return {Object}\n */\n private _fetchLocalPackages(): LocalStorage {\n const list: StorageList = [];\n const emptyDatabase = { list, secret: '' };\n\n try {\n return loadPrivatePackages(this.path, this.logger);\n } catch (err) {\n // readFileSync is platform specific, macOS, Linux and Windows thrown an error\n // Only recreate if file not found to prevent data loss\n if (err.code !== noSuchFile) {\n this.locked = true;\n this.logger.error(\n 'Failed to read package database file, please check the error printed below:\\n',\n `File Path: ${this.path}\\n\\n ${err.message}`\n );\n }\n\n return emptyDatabase;\n }\n }\n}\n\nexport default LocalDatabase;\n"],"file":"local-database.js"}
|
|
1
|
+
{"version":3,"sources":["../src/local-database.ts"],"names":["DEPRECATED_DB_NAME","DB_NAME","debug","LocalDatabase","TokenActions","constructor","config","logger","path","_buildStoragePath","locked","data","_fetchLocalPackages","_sync","getSecret","Promise","resolve","secret","setSecret","add","name","cb","list","indexOf","push","search","onPackage","onEnd","validateName","storages","_getCustomPackageLocalStorages","JSON","stringify","base","Path","dirname","self_path","self","storageKeys","Object","keys","async","eachSeries","storage","position","base2","join","storagePath","fs","readdir","err","files","file","includes","match","fileLocation","file2","packagePath","stat","stats","_","isNil","item","time","mtime","getTime","remove","get","error","pkgName","splice","totalItems","length","getPackageStorage","packageName","packageAccess","getMatchedPackagesSpec","_getLocalStoragePath","undefined","isString","packageStoragePath","LocalDriver","clean","packages","listPackagesConf","map","pkg","Error","folderName","mkdirp","sync","writeFileSync","globalConfigStorage","sinopiadbPath","_dbGenPath","accessSync","constants","F_OK","process","emitWarning","code","detail","noSuchFile","emptyDatabase","message"],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport Path from 'path';\n\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport async from 'async';\nimport mkdirp from 'mkdirp';\nimport { Callback, Config, IPackageStorage, IPluginStorage, LocalStorage, Logger, StorageList } from '@verdaccio/types';\nimport { getInternalError } from '@verdaccio/commons-api';\n\nimport LocalDriver, { noSuchFile } from './local-fs';\nimport { loadPrivatePackages } from './pkg-utils';\nimport TokenActions from './token';\n\nconst DEPRECATED_DB_NAME = '.sinopia-db.json';\nconst DB_NAME = '.verdaccio-db.json';\n\nconst debug = buildDebug('verdaccio:plugin:local-storage');\n\nclass LocalDatabase extends TokenActions implements IPluginStorage<{}> {\n public path: string;\n public logger: Logger;\n public data: LocalStorage;\n public config: Config;\n public locked: boolean;\n\n public constructor(config: Config, logger: Logger) {\n super(config);\n this.config = config;\n this.path = this._buildStoragePath(config);\n this.logger = logger;\n this.locked = false;\n this.data = this._fetchLocalPackages();\n this._sync();\n }\n\n public getSecret(): Promise<string> {\n return Promise.resolve(this.data.secret);\n }\n\n public setSecret(secret: string): Promise<Error | null> {\n return new Promise((resolve): void => {\n this.data.secret = secret;\n\n resolve(this._sync());\n });\n }\n\n public add(name: string, cb: Callback): void {\n if (this.data.list.indexOf(name) === -1) {\n this.data.list.push(name);\n\n debug('the private package %o has been added', name);\n cb(this._sync());\n } else {\n debug('the private package %o was not added', name);\n cb(null);\n }\n }\n\n public search(onPackage: Callback, onEnd: Callback, validateName: (name: string) => boolean): void {\n const storages = this._getCustomPackageLocalStorages();\n debug(`search custom local packages: %o`, JSON.stringify(storages));\n const base = Path.dirname(this.config.self_path);\n const self = this;\n const storageKeys = Object.keys(storages);\n debug(`search base: %o keys: %o`, base, storageKeys);\n\n async.eachSeries(\n storageKeys,\n function(storage, cb) {\n const position = storageKeys.indexOf(storage);\n const base2 = Path.join(position !== 0 ? storageKeys[0] : '');\n const storagePath: string = Path.resolve(base, base2, storage);\n debug('search path: %o : %o', storagePath, storage);\n fs.readdir(storagePath, (err, files) => {\n if (err) {\n return cb(err);\n }\n\n async.eachSeries(\n files,\n function(file, cb) {\n debug('local-storage: [search] search file path: %o', file);\n if (storageKeys.includes(file)) {\n return cb();\n }\n\n if (file.match(/^@/)) {\n // scoped\n const fileLocation = Path.resolve(base, storage, file);\n debug('search scoped file location: %o', fileLocation);\n fs.readdir(fileLocation, function(err, files) {\n if (err) {\n return cb(err);\n }\n\n async.eachSeries(\n files,\n (file2, cb) => {\n if (validateName(file2)) {\n const packagePath = Path.resolve(base, storage, file, file2);\n\n fs.stat(packagePath, (err, stats) => {\n if (_.isNil(err) === false) {\n return cb(err);\n }\n const item = {\n name: `${file}/${file2}`,\n path: packagePath,\n time: stats.mtime.getTime(),\n };\n onPackage(item, cb);\n });\n } else {\n cb();\n }\n },\n cb\n );\n });\n } else if (validateName(file)) {\n const base2 = Path.join(position !== 0 ? storageKeys[0] : '');\n const packagePath = Path.resolve(base, base2, storage, file);\n debug('search file location: %o', packagePath);\n fs.stat(packagePath, (err, stats) => {\n if (_.isNil(err) === false) {\n return cb(err);\n }\n onPackage(\n {\n name: file,\n path: packagePath,\n time: self.getTime(stats.mtime.getTime(), stats.mtime),\n },\n cb\n );\n });\n } else {\n cb();\n }\n },\n cb\n );\n });\n },\n // @ts-ignore\n onEnd\n );\n }\n\n public remove(name: string, cb: Callback): void {\n this.get((err, data) => {\n if (err) {\n cb(getInternalError('error remove private package'));\n this.logger.error({ err }, '[local-storage/remove]: remove the private package has failed @{err}');\n debug('error on remove package %o', name);\n }\n\n const pkgName = data.indexOf(name);\n if (pkgName !== -1) {\n this.data.list.splice(pkgName, 1);\n\n debug('remove package %o has been removed', name);\n }\n\n cb(this._sync());\n });\n }\n\n /**\n * Return all database elements.\n * @return {Array}\n */\n public get(cb: Callback): void {\n const list = this.data.list;\n const totalItems = this.data.list.length;\n\n cb(null, list);\n\n debug('get full list of packages (%o) has been fetched', totalItems);\n }\n\n public getPackageStorage(packageName: string): IPackageStorage {\n const packageAccess = this.config.getMatchedPackagesSpec(packageName);\n\n const packagePath: string = this._getLocalStoragePath(packageAccess ? packageAccess.storage : undefined);\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: string = 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 LocalDriver(packageStoragePath, this.logger);\n }\n\n public clean(): void {\n this._sync();\n }\n\n private getTime(time: number, mtime: Date): number | Date {\n return time ? time : mtime;\n }\n\n private _getCustomPackageLocalStorages(): object {\n const storages = {};\n\n // add custom storage if exist\n if (this.config.storage) {\n storages[this.config.storage] = true;\n }\n\n const { packages } = this.config;\n\n if (packages) {\n const listPackagesConf = Object.keys(packages || {});\n\n listPackagesConf.map(pkg => {\n const storage = packages[pkg].storage;\n if (storage) {\n storages[storage] = false;\n }\n });\n }\n\n return storages;\n }\n\n /**\n * Syncronize {create} database whether does not exist.\n * @return {Error|*}\n */\n private _sync(): Error | null {\n debug('sync database started');\n\n if (this.locked) {\n this.logger.error(\n 'Database is locked, please check error message printed during startup to ' + 'prevent data loss.'\n );\n return new Error(\n 'Verdaccio database is locked, please contact your administrator to checkout ' +\n 'logs during verdaccio startup.'\n );\n }\n // Uses sync to prevent ugly race condition\n try {\n // https://www.npmjs.com/package/mkdirp#mkdirpsyncdir-opts\n const folderName = Path.dirname(this.path);\n mkdirp.sync(folderName);\n debug('sync folder %o created succeed', folderName);\n } catch (err) {\n debug('sync create folder has failed with error: %o', err);\n return null;\n }\n\n try {\n fs.writeFileSync(this.path, JSON.stringify(this.data));\n debug('sync write succeed');\n\n return null;\n } catch (err) {\n debug('sync failed %o', err);\n\n return err;\n }\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): string {\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 /**\n * Build the local database path.\n * @param {Object} config\n * @return {string|String|*}\n * @private\n */\n private _buildStoragePath(config: Config): string {\n const sinopiadbPath: string = this._dbGenPath(DEPRECATED_DB_NAME, config);\n try {\n fs.accessSync(sinopiadbPath, fs.constants.F_OK);\n // @ts-ignore\n process.emitWarning('Database name deprecated!', {\n code: 'VERCODE01',\n detail: `Please rename database name from ${DEPRECATED_DB_NAME} to ${DB_NAME}`,\n });\n return sinopiadbPath;\n } catch (err) {\n if (err.code === noSuchFile) {\n return this._dbGenPath(DB_NAME, config);\n }\n\n throw err;\n }\n }\n\n /**\n * Fetch local packages.\n * @private\n * @return {Object}\n */\n private _fetchLocalPackages(): LocalStorage {\n const list: StorageList = [];\n const emptyDatabase = { list, secret: '' };\n\n try {\n return loadPrivatePackages(this.path, this.logger);\n } catch (err) {\n // readFileSync is platform specific, macOS, Linux and Windows thrown an error\n // Only recreate if file not found to prevent data loss\n if (err.code !== noSuchFile) {\n this.locked = true;\n this.logger.error(\n 'Failed to read package database file, please check the error printed below:\\n',\n `File Path: ${this.path}\\n\\n ${err.message}`\n );\n }\n\n return emptyDatabase;\n }\n }\n}\n\nexport default LocalDatabase;\n"],"file":"local-database.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/local-storage",
|
|
3
|
-
"version": "10.0
|
|
3
|
+
"version": "10.1.0",
|
|
4
4
|
"description": "Local storage implementation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"plugin",
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"node": ">=8"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@verdaccio/commons-api": "10.0
|
|
35
|
-
"@verdaccio/file-locking": "10.0
|
|
36
|
-
"@verdaccio/streams": "10.0
|
|
34
|
+
"@verdaccio/commons-api": "10.1.0",
|
|
35
|
+
"@verdaccio/file-locking": "10.1.0",
|
|
36
|
+
"@verdaccio/streams": "10.1.0",
|
|
37
37
|
"async": "3.2.2",
|
|
38
38
|
"debug": "4.3.3",
|
|
39
39
|
"lodash": "4.17.21",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/minimatch": "^3.0.3",
|
|
45
45
|
"@types/node": "^14.0.0",
|
|
46
|
-
"@verdaccio/types": "10.0
|
|
46
|
+
"@verdaccio/types": "10.1.0",
|
|
47
47
|
"minimatch": "^3.0.4",
|
|
48
48
|
"rmdir-sync": "^1.0.1"
|
|
49
49
|
},
|