Determine common OS/platform paths (home, temp, ...)
npm install os-paths> Determine common OS/platform paths (home, temp, ...)
[![Build status (GHA)][gha-image]][gha-url]
[![Build status (AppVeyor)][appveyor-image]][appveyor-url]
[![Coverage status][coverage-image]][coverage-url]
[![License][license-image]][license-url]
[![Style Guide][style-image]][style-url]
[![Repository][repository-image]][repository-url]
[![Deno version][deno-image]][deno-url]
[![NPM version][npm-image]][npm-url]
[![NodeJS version][nodejsv-image]][repository-url]
[![npmJS Downloads][downloads-image]][downloads-url]
[![JSDelivr Downloads][jsdelivr-image]][jsdelivr-url]
``shellnpm install "git:github.com/rivy/js.os-paths"
npm install os-pathsor...
npm install "git:github.com/rivy/js.os-paths#v7.4.0"or...
npm install "https://cdn.jsdelivr.net/gh/rivy/js.os-paths@v7.4.0/dist/os-paths.tgz"or...
npm install "https://cdn.jsdelivr.net/gh/rivy/js.os-paths@COMMIT_SHA/dist/os-paths.tgz"or...
`
#### CommonJS (CJS)
`js`
const osPaths = require('os-paths/cjs');
const home = osPaths.home();
const temp = osPaths.temp();
#### ECMAScript (ESM)/TypeScript
`js`
import osPaths from 'os-paths';
const home = osPaths.home();
const temp = osPaths.temp();
#### Deno
`ts`
import osPaths from 'https://deno.land/x/os_paths@v7.4.0/src/mod.deno.ts';
//or (via CDN, [ie, JSDelivr with GitHub version/version-range, commit, 'latest' support])...
//import osPaths from 'https://cdn.jsdelivr.net/gh/rivy/js.os-paths@v7.4.0/src/mod.deno.ts';
//import osPaths from 'https://cdn.jsdelivr.net/gh/rivy/js.os-paths@COMMIT_SHA/src/mod.deno.ts';
const home = osPaths.home();
const temp = osPaths.temp();
#### OSPaths()
`js`
const osPaths = require('os-paths/cjs'); // CJS
//or...
//import osPaths from 'os-paths'; // ESM/TypeScript
//import osPaths from 'https://deno.land/x/os_paths/src/mod.deno.ts'; // Deno
When importing this module, the object returned is a function object, OSPaths, augmented with attached methods. Additional OSPaths objects may be constructed by direct call of the imported OSPaths object (eg, const p = osPaths()) or by using new (eg, const p = new osPaths()). Notably, since the OSPaths object contains no instance state, all OSPaths objects will be functionally identical.
All methods return simple, platform-specific, and platform-compatible path strings which are normalized and have no trailing path separators.
The returned path strings are _not_ guaranteed to already exist on the file system. So, the user application is responsible for directory construction, if/when needed. However, since all of these are _standard_ OS directories, they should all exist without the need for user intervention.
If/when necessary, make-dir or mkdirp can be used to create the directories.
#### osPaths.home(): string | undefined
- Returns the path string of the user's home directory (or undefined if the user's home directory is not resolvable).
`js`
console.log(osPaths.home());
//(*nix) => '/home/rivy
//(windows) => 'C:\Users\rivy'
#### osPaths.temp(): string
- Returns the path string of the system's default directory for temporary files.
`js`
console.log(osPaths.temp());
//(*nix) => '/tmp'
//(windows) => 'C:\Users\rivy\AppData\Local\Temp'
temp() will _always_ return a non-empty path string (as sanely as possible).
> #### Requirements
>
> NodeJS >= 4.0[^*]
[^*]: With the conversion to a TypeScript-based project, due to tooling constraints, building and testing are more difficult and more limited on Node platforms earlier than NodeJS-v10. However, the generated CommonJS/UMD project code is fully tested (for NodeJS-v10+) and continues to be compatible with NodeJS-v4+.
#### CommonJS modules (CJS; .js and .cjs)
CJS is the basic supported output (with support for NodeJS versions as early as NodeJS-v4).
`js`
const osPaths = require('os-paths/cjs');
console.log(osPaths.home());
console.log(osPaths.temp());
> Note: for CJS, require('os-paths') is supported for backward-compatibility and will execute correctly at run-time. However, require('os-paths') links to the default package type declarations which, though _correct_ for Deno/ESM/TypeScript, are _incorrect_ for CJS. This, then, leads to incorrect analysis of CJS files by static analysis tools such as TypeScript and Intellisense.require('os-paths/cjs')
>
> Using is preferred as it associates the proper CJS type declarations and provides correct information to static analysis tools.
#### ECMAScript modules (ESM; *.mjs)
- Requires OSPaths v6.0+.
OSPaths fully supports ESM imports.
`js`
import osPaths from 'os-paths';
console.log(osPaths.home());
console.log(osPaths.temp());
- Requires OSPaths v5.0+.
As of v5.0+, OSPaths has been converted to a TypeScript-based module.
As a consequence, TypeScript type definitions are automatically generated, bundled, and exported by the module.
> #### Requirements
>
> Deno >= v1.8.0[^deno-version-req]
[^deno-version-req]: The Deno.permissions API (stabilized in Deno v1.8.0) is required to avoid needless panics or prompts by Deno during static imports of this module/package. Note: Deno v1.3.0+ may be used if the run flag --unstable is also used.
> #### Required Permissions
>
> - --allow-env · _allow access to the process environment variables_
> This module/package requires access to various environment variables to determine platform configuration (eg, location of temp and user directories).
- Requires OSPaths v6.0+.
OSPaths also fully supports use by Deno.
`js deno`
import osPaths from 'https://deno.land/x/os_paths/src/mod.deno.ts';
console.log(osPaths.home());
console.log(osPaths.temp());
[![Repository][repository-image]][repository-url]
[![Build status (GHA)][gha-image]][gha-url]
[![Build status (AppVeyor)][appveyor-image]][appveyor-url]
[![Coverage status][coverage-image]][coverage-url]
[![Quality status (Codacy)][codacy-image]][codacy-url]
[![Quality status (CodeClimate)][codeclimate-image]][codeclimate-url]
[![Quality status (CodeFactor)][codefactor-image]][codefactor-url]
- NodeJS >= 10.14
- a JavaScript package/project manager (npm or yarn)
- git
> #### optional
>
> - bmp (v0.0.6+) ... synchronizes version strings within the project
> - git-changelog (v1.1+) ... enables changelog automation
`shell`
npm install-test
#### _Reproducible_ setup (for CI or local development)
`shellcp
git clone "https://github.com/rivy/js.os-paths"
cd js.os-paths* note: for WinOS, replace
with copy (or use uutils)`npm
cp .deps-lock/package-lock.json .
npm clean-installyarn
cp .deps-lock/yarn.lock .
yarn --immutable --immutable-cache --check-cache
#### Project development scripts
`shellnpm run TARGET
> npm run help
...
usage: or npx run-s TARGET [TARGET..]
TARGETs:
build build/compile package
clean remove build artifacts
coverage calculate and display (or send) code coverage [alias: 'cov']
fix fix package issues (automated/non-interactive)
fix:lint fix ESLint issues
fix:style fix Prettier formatting issues
help display help
lint check for package code 'lint'
lint:audit check for npm audit violations in project codecommitlint
lint:commits check for commit flaws (using and cspell)editorconfig-checker
lint:editorconfig check for EditorConfig format flaws (using )eslint
lint:lint check for code 'lint' (using )remark
lint:markdown check for markdown errors (using )cspell
lint:spell check for spelling errors (using )prettier
lint:style check for format imperfections (using )--test-code=...
prerelease clean, rebuild, and fully test (useful prior to publish/release)
realclean remove all generated files
rebuild clean and (re-)build project
refresh clean and rebuild/regenerate all project artifacts
refresh:dist clean, rebuild, and regenerate project distribution
retest clean and (re-)test project
reset:hard remove all generated files and reinstall dependencies
show:deps show package dependencies
test test package
test:code test package code (use to pass options to testing harness)tsd
test:types test for type declaration errors (using )git changelog ...
update update/prepare for distribution [alias: 'dist']
update:changelog update CHANGELOG (using )`
update:dist update distribution content
verify fully (and verbosely) test package
#### Packaging & Publishing
##### Package
`shellbmp --[major|minor|patch]
#=== * POSIXupdate project VERSION strings (package.json,...)
*
; next VERSION in M.m.r (semver) formatyarn import
bmp --minor
VERSION=$(cat VERSION)
git-changelog --next-tag "v${VERSION}" > CHANGELOG.mkdcreate/commit updates and distribution
git add package.json CHANGELOG.mkd README.md VERSION .bmp.yml
git commit -m "${VERSION}"
npm run clean && npm run update:dist && git add dist && git commit --amend --no-edit(optional) update/save dependency locks
* note:
of 'package-lock.json' (when available) is faster but may not work for later versions of 'package-lock.json'bmp --[major|minor|patch]
rm -f package-lock.json yarn.lock
npm install --package-lock
yarn install
mkdir .deps-lock 2> /dev/null
cp package-lock.json .deps-lock/
cp yarn.lock .deps-lock/
git add .deps-lock
git commit --amend --no-edittag VERSION commit
git tag -f "v${VERSION}"(optional) prerelease checkup
npm run prerelease
#=== * WinOS
@rem # update project VERSION strings (package.json,...)
@rem # * ; next VERSION in M.m.r (semver) formatyarn import
bmp --minor
for /f %G in (VERSION) do @set "VERSION=%G"
git-changelog --next-tag "v%VERSION%" > CHANGELOG.mkd
@rem # create/commit updates and distribution
git add package.json CHANGELOG.mkd README.md VERSION .bmp.yml
git commit -m "%VERSION%"
npm run clean && npm run update:dist && git add dist && git commit --amend --no-edit
@rem # (optional) update/save dependency locks
@rem # * note: of 'package-lock.json' (when available) is faster but may not work for later versions of 'package-lock.json'`
del package-lock.json yarn.lock 2>NUL
npm install --package-lock
yarn install
mkdir .deps-lock 2>NUL
copy /y package-lock.json .deps-lock >NUL
copy /y yarn.lock .deps-lock >NUL
git add .deps-lock
git commit --amend --no-edit
@rem # tag VERSION commit
git tag -f "v%VERSION%"
@rem # (optional) prerelease checkup
npm run prerelease
##### Publish
`shellnpm publishpublish
* optional (will be done in 'prePublishOnly' by
)npm publish --dry-run
npm run clean && npm run test && npm run dist && git-changelog > CHANGELOG.mkd #expect exit code == 0
git diff-index --quiet HEAD || echo "[lint] ERROR uncommitted changes" # expect no output and exit code == 0*
npm publish # will perform all prepublication actions and stop just before the actual publish push`* if published to NPMjs with no ERRORs; push to deno.land with tag push
git push origin --tags
Contributions are welcome.
Any pull requests should be based off of the default branch (master). And, whenever possible, please include tests for any new code, ensuring that local (via npm test) and remote CI testing passes.
By contributing to the project, you are agreeing to provide your contributions under the same license as the project itself.
- xdg-app-paths ... easy XDG for applications
- xdg-portable ... XDG Base Directory paths (cross-platform)
[repository-image]: https://img.shields.io/github/v/tag/rivy/js.os-paths?sort=semver&label=%E2%81%A3&logo=github&logoColor=white
[repository-url]: https://github.com/rivy/js.os-paths
[license-image]: https://img.shields.io/npm/l/os-paths.svg?color=tomato&style=flat
[license-url]: license
[nodejsv-image]: https://img.shields.io/node/v/os-paths?color=slateblue
[style-image]: https://img.shields.io/badge/code_style-prettier-mediumvioletred.svg
[style-url]: https://prettier.io
[appveyor-image]: https://img.shields.io/appveyor/ci/rivy/js-os-paths/master.svg?style=flat&logo=AppVeyor&logoColor=deepskyblue
[appveyor-url]: https://ci.appveyor.com/project/rivy/js-os-paths
[gha-image]: https://img.shields.io/github/actions/workflow/status/rivy/js.os-paths/CI.yml?label=CI&logo=github
[gha-url]: https://github.com/rivy/js.os-paths/actions?query=workflow%3ACI
[coverage-image]: https://img.shields.io/codecov/c/github/rivy/js.os-paths/master.svg
[coverage-url]: https://codecov.io/gh/rivy/js.os-paths
[codeclimate-url]: https://codeclimate.com/github/rivy/js.os-paths
[codeclimate-image]: https://img.shields.io/codeclimate/maintainability/rivy/js.os-paths?label=codeclimate
[codacy-image]: https://img.shields.io/codacy/grade/4fa161040bcd483890691190293ff950?label=codacy
[codacy-url]: https://app.codacy.com/gh/rivy/js.os-paths/dashboard
[codefactor-image]: https://img.shields.io/codefactor/grade/github/rivy/js.os-paths?label=codefactor
[codefactor-url]: https://www.codefactor.io/repository/github/rivy/js.os-paths
[deno-image]: https://img.shields.io/github/package-json/v/rivy/js.os-paths/master?label=deno
[deno-url]: https://deno.land/x/os_paths
[downloads-image]: http://img.shields.io/npm/dm/os-paths.svg?style=flat
[downloads-url]: https://npmjs.org/package/os-paths
[jsdelivr-image]: https://img.shields.io/jsdelivr/gh/hm/rivy/js.os-paths?style=flat
[jsdelivr-url]: https://www.jsdelivr.com/package/gh/rivy/js.os-paths
[npm-image]: https://img.shields.io/npm/v/os-paths.svg?style=flat
[npm-url]: https://npmjs.org/package/os-paths