HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/shop.komma.nl/node_modules/@akryum/winattr/lib/shell/index.js
const childProcess = require('child_process')
const path = require('path')

// For attrib command
const params =
{
  archive: 'a',
  hidden: 'h',
  readonly: 'r',
  system: 's',
}

function getArgs (file) {
  return [
    path.join(__dirname, 'hostscript.js'),
    file,
    '//nologo',
    '//E:jscript',
  ]
}

function getParseResult (result) {
  let json
  let error = null

  result.stdout = result.stdout.trim()

  if (result.stdout.length <= 0) {
    error = new Error('unknown error')
  } else {
    json = JSON.parse(result.stdout)

    if (json.error !== undefined) {
      error = new Error(json.error)
      json = undefined
    }
  }

  return { error: error, attrs: json }
}

function setArgs (file, attrs) {
  const args = []

  for (let i in attrs) {
    if (attrs.hasOwnProperty(i) === true && params.hasOwnProperty(i) === true) {
      args.push((attrs[i] === true ? '+' : '-') + params[i])
    }
  }

  args.push(file)

  return args
}

function setParseResult (result) {
  // `result.stdout` is empty when successful
  if (result.stdout.length <= 0) {
    return null
  } else {
    return new Error(result.stdout)
  }
}

function shell (command, args, callback) {
  let instance = childProcess.spawn(command, args)

  let stderr = ''
  let stdout = ''

  instance.stderr.on('data', function (data) {
    stderr += data.toString()
  })

  instance.stdout.on('data', function (data) {
    stdout += data.toString()
  })

  instance.on('exit', function (status) {
    this.removeAllListeners()

    // Pass an Object so that it's similar to spawnSync()
    // eslint-disable-next-line standard/no-callback-literal
    callback({ status: status, stdout: stdout, stderr: stderr })
  })
}

function shellSync (command, args) {
  let result = childProcess.spawnSync(command, args, {encoding: 'utf8'})

  // Consistent with shell()
  if (result.stderr === null) result.stderr = ''
  if (result.stdout === null) result.stdout = ''

  return result
}

// ::: PUBLIC FUNCTIONS

function get (file, callback) {
  shell('cscript', getArgs(file), function (result) {
    result = getParseResult(result)

    callback(result.error, result.attrs)
  })
}

function getSync (file) {
  let result = shellSync('cscript', getArgs(file))
  result = getParseResult(result)

  if (result.error !== null) {
    throw result.error
  }

  return result.attrs
}

function set (file, attrs, callback) {
  shell('attrib', setArgs(file, attrs), function (result) {
    callback(setParseResult(result))
  })
}

function setSync (file, attrs, callback) {
  let result = shellSync('attrib', setArgs(file, attrs))
  result = setParseResult(result)

  if (result !== null) {
    throw result
  }
}

module.exports = {
  get,
  getSync,
  set,
  setSync,
}