JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 180
  • Score
    100M100P100Q82121F
  • License ISC

Promise based path operations including read, write, find, fetch, make, clean, position, and run.

Package Exports

  • promise-path
  • promise-path/api.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (promise-path) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Promise Path

A collection of promise based path operations including read, write, find, fetch, make, clean, position, and run.

Quick start:

npm install promise-path

Then pick the features you need:

const { read, write, find, fetch, make, clean, position, run } = require('promise-path')

API

The API currently supports the following methods read, write, find, fetch, make, clean, position, and run as follows:

Read

Read the contents of a file, and return the result as a promise.

const { read } = require('promise-path')

let promise = (async () => {
  const readme = await read('README.md', 'utf8')
  console.log('Readme file:', readme)

  const json = JSON.parse(await read('package.json'))
  console.log(JSON.stringify(json, null, '  '))
})()

Write

Write contents to a file, and return a promise.

const { write } = require('promise-path')

let promise = (async () => {
  const log = ['message 1', 'message 2', 'message 3']
  const file = 'output.log'
  await write(file, log.join('\n'))
  console.log('Contents written to', file)
})()

Find

Find files that match a pattern, and return a promise.

const { find } = require('promise-path')

let promise = (async () => {
  const filepaths = await find('./lib/**/*.js')
  console.log('JS files:', filepaths)
})()

Fetch

Retrieve a remote file, and return a promise.

const { fetch } = require('promise-path')

let promise = (async () => {
  const fileContents = await fetch('https://raw.githubusercontent.com/connected-web/remote-test/master/info.json')
  console.log('Remote file:', fileContents)
})()
const { fetch } = require('promise-path')

let promise = (async () => {
  const GITHUB_PERSONAL_ACCESS_TOKEN = process.argv[1] || ''
  const apiContents = await fetch({
    url: 'https://api.github.com/repos/connected-web/promise-path/contents/readme',
    headers: {
      'Authorization': `token ${GITHUB_PERSONAL_ACCESS_TOKEN}`,
      'Accept': 'application/vnd.github.v3.raw',
      'User-Agent': `My App - node ${process.version}`
    }
  })
  console.log('Remote file:', apiContents)
})()

Clean

Remove local files and folders, and return a promise.

const { clean } = require('promise-path')
const path = require('path')

let promise = (async () => {
  await clean(path.join(__dirname, '/temp'))
  console.log('Temp directory has been removed')
})

Make

Use mkdirp to make a directory, and return a promise.

const { make } = require('promise-path')
const path = require('path')

let promise = (async () => {
  await make(path.join(__dirname, '/temp'))
  console.log('Temp directory has been created')
})()

Position

Create a function that helps you position new paths relative to a base path:

const { position } = require('promise-path')(__dirname, '../data')
const filepath = position('item-list.json')
console.log('Avoids having to use path.join directly:', filepath)

Run

Use child_process.exec to run a command, and return a promise.

const  { run } = require('promise-path')

let promise = (async () => {
  try {
    const result = await run('cat package.json')
    console.log('Error', result.error)
    console.log('Exit code', result.exitCode)
    console.log('Std out', result.stdout)
    console.log('Std err', result.stderr)
  }
  catch(ex) {
    console.error(ex)
  }
})()

With a current working directory (cwd), and custom environment variables (env):

const { run } = require('promise-path')

let promise = (async () => {
  const cwd = process.cwd()
  const env = {HOME: process.cwd()}
  try {
    const result = await run('npm install', cwd, env)
    console.log('Error', result.error)
    console.log('Exit code', result.exitCode)
    console.log('Std out', result.stdout)
    console.log('Std err', result.stderr)
  }
  catch(ex) {
    console.error(ex)
  }
})()

Dependencies

  • denodeify
  • glob
  • fs-extra
  • request

Development

Checkout the code, then:

npm install
npm test

Changelog

1.4.4

  • Merge dependabot patch bumping json5 from 1.0.1 to 1.0.2

1.4.3

  • Update package dependencies to latest versions

1.4.2

  • Update package dependencies to latest versions

1.4.0

  • Remove dependency the denodeify package

1.3.1

  • Update package dependencies to latest versions

1.3.0

  • Add position command to create a path friendly helper function
  • Update examples.js and fix typos in README.md

1.2.7

  • Rewrite all tests and examples using async await style
  • Add examples.js file to harness worked examples in README.md

1.2.6

  • Support quoted spaces in commands
  • e.g. git commit -m "Some message with spaces"

1.2.4

  • Updated node dependencies
  • Added example for fetching data from the github API with headers

1.2.3

  • Updated node dependencies
  • Changed run to use process.env.comspec on windows, to reduce ENOENT errors

1.2.2

  • Added make command

1.2.1

  • Added env : environment variables as option to run

1.2.0

  • Added cwd as a second optional parameter to run

1.1.1

  • Reworked run command to use child_process.spawn
  • Added exitCode to the return object on run

1.1.0

  • Added method with test: run

1.0.0

  • Initial release
  • Supported methods: read, write, find, fetch, clean
  • Created tests