going out

This commit is contained in:
Daniel Hübleitner
2019-08-26 23:10:07 +02:00
parent ea4b5ce7a5
commit 7a8c301392
+50 -29
View File
@@ -141,10 +141,9 @@ export abstract class FSExtension<Status extends FSStatus> extends Extension<FSS
} }
type NPMStatus = FSStatus & { type NPMStatus = FSStatus & {
version?: string, current?: string
wanted?: string, wanted?: string
latest?: string, latest?: string
location: string,
} }
export class NPMExtension extends FSExtension<NPMStatus>{ export class NPMExtension extends FSExtension<NPMStatus>{
@@ -157,69 +156,91 @@ export class NPMExtension extends FSExtension<NPMStatus>{
public async status(): Promise<NPMStatus> { public async status(): Promise<NPMStatus> {
const files = await fs.readdir(this.localPrefix) const empty = this.isEmpty()
const empty: boolean = files.length === 0 const exists = this.exists()
if(empty){ const i = this.isInstalled()
return { exists: true, empty: true, name: this.name, location: this.localPrefix }; const o = this.isOutdated()
} const n = this.name
const p = this.p
const { _error, _stdout, _stderr } = await exec('npm outdated --prefix ' + this.localPrefix + " --json" + ' ' + this.name)
const { error, stdout, stderr } = await exec('npm info --prefix ' + this.localPrefix + ' ' + this.name + " version") return {name: this.name,}
return {
name: n,
prefix: p,
installed: i,
outdated: o,
exists: exists,
empty: empty,
};
//const { _error, _stdout, _stderr } = await exec('npm outdated --prefix ' + this.prefix + " --json" + ' ' + this.name)
//const { error, stdout, stderr } = await exec('npm info --prefix ' + this.prefix + ' ' + this.name + " version")
if(_error | error){ /*if(_error | error){
logger.warn( _stderr, stderr) logger.warn( _stderr, stderr)
return {
name: this.name,
prefix: this.prefix,
installed: false,
outdated: false,
exists: true,
empty: false
};
return {exists: true, empty: false, name: this.name, location: this.localPrefix} return {exists: true, empty: false, name: this.name, location: this.localPrefix}
} }
const statusJson:{latest:string, location: string, wanted:string} = JSON.parse(_stdout) const statusJson:{latest:string, location: string, wanted:string} = JSON.parse(_stdout)
return { exists: true, empty: false, name: this.name, location: this.localPrefix, version: stdout, latest: statusJson.latest, wanted: statusJson.wanted } return { exists: true, empty: false, name: this.name, location: this.localPrefix, version: stdout, latest: statusJson.latest, wanted: statusJson.wanted }
*/
} }
public async install(): Promise<boolean> { public async install(): Promise<boolean> {
logger.info("npm install", this.name, 'to', path.resolve(this.localPrefix, this.name)) logger.info("npm install", this.name, 'to', path.resolve(this.prefix, this.name))
await fs.mkdir(this.localPrefix, {recursive: true}) const { error, stdout, stderr } = await exec('npm install --prefix '+ this.prefix + ' ' + this.name)
const { error, stdout, stderr } = await exec('npm install --prefix '+ this.localPrefix + ' ' + this.name)
if (error !== null) { if (error !== null) {
logger.warn('npm install', this.name, 'from prefix', this.localPrefix, 'stderr:', stderr) logger.warn('npm install', this.name, 'from prefix', this.prefix, 'stderr:', stderr)
return false return false
} else { } else {
logger.info('npm install', this.name, 'from prefix', this.localPrefix, 'stdout:', stdout) logger.info('npm install', this.name, 'from prefix', this.prefix, 'stdout:', stdout)
return true return true
} }
} }
public async uninstall(): Promise<boolean> { public async uninstall(): Promise<boolean> {
logger.info("npm uninstall", this.name, 'from', path.resolve(this.localPrefix, this.name)) logger.info("npm uninstall", this.name, 'from', path.resolve(this.prefix, this.name))
const { error, stdout, stderr } = await exec('npm uninstall --prefix '+ this.localPrefix + ' ' + this.name) const { error, stdout, stderr } = await exec('npm uninstall --prefix '+ this.prefix + ' ' + this.name)
if (error !== null) { if (error !== null) {
logger.warn('npm uninstall', this.name, 'from prefix', this.localPrefix, 'stderr:', stderr) logger.warn('npm uninstall', this.name, 'from prefix', this.prefix, 'stderr:', stderr)
return false return false
} else { } else {
logger.info('npm uninstall', this.name, 'from prefix', this.localPrefix, 'stdout:', stdout) logger.info('npm uninstall', this.name, 'from prefix', this.prefix, 'stdout:', stdout)
return true return true
} }
} }
public async update(): Promise<boolean> { public async update(): Promise<boolean> {
logger.info("npm update", path.resolve(this.localPrefix, this.name)) logger.info("npm update", path.resolve(this.prefix, this.name))
const { error, stdout, stderr } = await exec('npm update --prefix '+ this.localPrefix + ' ' + this.name) const { error, stdout, stderr } = await exec('npm update --prefix '+ this.prefix + ' ' + this.name)
if (error !== null) { if (error !== null) {
logger.warn('npm update', this.name, 'from prefix', this.localPrefix, 'stderr:', stderr) logger.warn('npm update', this.name, 'from prefix', this.prefix, 'stderr:', stderr)
return false return false
} else { } else {
logger.info('npm update', this.name, 'from prefix', this.localPrefix, 'stdout:', stdout) logger.info('npm update', this.name, 'from prefix', this.prefix, 'stdout:', stdout)
return true return true
} }
} }
public async isOutdated(): Promise<boolean> { //TODO public async isOutdated(): Promise<boolean> { //TODO
logger.info("npm outdated", path.resolve(this.localPrefix, this.name)) logger.info("npm outdated", path.resolve(this.prefix, this.name))
const { error, stdout, stderr } = await exec('npm list --prefix '+ this.localPrefix + ' --depth=0 | grep ' + this.name) const { error, stdout, stderr } = await exec('npm list --prefix '+ this.prefix + ' --depth=0 | grep ' + this.name)
if (error !== null) { if (error !== null) {
logger.warn('npm outdated', this.name, 'from prefix', this.localPrefix, 'stderr:', stderr) logger.warn('npm outdated', this.name, 'from prefix', this.prefix, 'stderr:', stderr)
return false return false
} else { } else {
logger.info('npm outdated', this.name, 'from prefix', this.localPrefix, 'stdout:', stdout) logger.info('npm outdated', this.name, 'from prefix', this.prefix, 'stdout:', stdout)
return true return true
} }
} }