xdg-app-paths
v8.2.0 appdir application cache common config cross-platform data directory environment and 18 more...
# build # build/compile package
build
run-s --silent "build:*"
build:cjs
exec-if-updated --source package.json --source tsconfig.json --source "tsconfig/**" --source "rollup.*.config.js" --source "src/**" --target build/.targets/build-cjs.succeeded "run-s -n rebuild:cjs"
build:esm
exec-if-updated --source package.json --source tsconfig.json --source "tsconfig/**" --source "rollup.*.config.js" --source "src/**" --target build/.targets/build-esm.succeeded "run-s -n rebuild:esm"
build:umd
exec-if-updated --source package.json --source tsconfig.json --source "tsconfig/**" --source "rollup.*.config.js" --source "src/**" --target build/.targets/build-umd.succeeded "run-s -n rebuild:umd"
build:lab
exec-if-updated --source package.json --source tsconfig.json --source "tsconfig/**" --source "rollup.*.config.js" --source "src/**" --target build/.targets/build-lab.succeeded "run-s -n rebuild:lab"
build:types
exec-if-updated --source package.json --source tsconfig.json --source "tsconfig/**" --source "rollup.*.config.js" --source "src/**" --target build/.targets/build-types.succeeded "run-s -n rebuild:types"
# clean # remove build artifacts
clean
rimraf build dist
# coverage # calculate and display (or send) code coverage [alias: 'cov']
coverage
run-s --silent +:max-node-8 && shx echo "[coverage] WARN Code coverage skipped [for NodeJS < v10]" 1>&2 || run-s "+:coverage"
cov
run-s coverage
cov:html
nyc report --reporter=html
#* cov:send # use `--cov-send=...` to pass options to coverage uploader
cov:send
shx mkdir -p coverage && nyc report --reporter=text-lcov > "coverage/@coverage.lcov" && cross-env-shell codecov --disable=gcov --file="coverage/@coverage.lcov" $npm_config_cov_send
cov:text
nyc report
cov:view
run-s cov:html && cd coverage && open-cli index.html
dist
run-s update
# fix # fix package issues (automated/non-interactive)
fix
run-s fix:*
# fix:lint # fix ESLint issues
fix:lint
eslint . --fix
# fix:style # fix Prettier formatting issues
fix:style
prettier . --write --list-different
# help # display help
help
run-s --silent _:help
# lint # check for package code 'lint'
lint
run-s --silent +:max-node-8 && shx echo "[lint] WARN Lint checks skipped [for NodeJS < v10]" 1>&2 || run-p --print-name "lint:*"
# lint:commits # check for commit flaws (using `commitlint` and `cspell`)
lint:commits
run-p --silent "_:lint:commits:new:*"
# lint:editorconfig # check for EditorConfig format flaws (using `editorconfig-checker`)
lint:editorconfig
editorconfig-checker -config .ecrc.JS.json
# lint:lint # check for code 'lint' (using `eslint`)
lint:lint
eslint .
# lint:markdown # check for markdown errors (using `remark`)
lint:markdown
remark --quiet .
# lint:spell # check for spelling errors (using `cspell`)
lint:spell
cspell {eg,examples,src,test}/**/* CHANGELOG{,.md,.mkd} README{,.md,.mkd} --no-summary --config ".vscode/cspell.json"
# lint:style # check for format imperfections (using `prettier`)
lint:style
prettier . --check --loglevel warn
# prerelease # clean, rebuild, and fully test (useful prior to publish/release)
prerelease
run-s clean update verify
# realclean # remove all generated files
realclean
run-s clean && rimraf coverage .nyc_output
# rebuild # clean and (re-)build project
rebuild
run-s clean build
rebuild:all
run-s clean build update
rebuild:cjs
shx rm -fr build/cjs && tsc -p tsconfig/tsconfig.cjs.json && shx cp -r src/esm-wrapper build/cjs/src && shx mkdir -p build/.targets && shx touch build/.targets/build-cjs.succeeded
rebuild:esm
shx rm -fr build/esm && tsc -p tsconfig/tsconfig.esm.json && shx cp src/esm-wrapper/package.json build/esm/src && shx mkdir -p build/.targets && shx touch build/.targets/build-esm.succeeded
rebuild:umd
shx rm -fr build/umd && tsc -p tsconfig/tsconfig.umd.json && shx mkdir -p build/.targets && shx touch build/.targets/build-umd.succeeded
rebuild:lab
shx rm -fr build/lab && tsc -p tsconfig/tsconfig.lab.json && shx cp -r src/esm-wrapper build/lab/src && shx mkdir -p build/.targets && shx touch build/.targets/build-lab.succeeded
rebuild:types
shx rm -fr build/types && tsc -p tsconfig/tsconfig.types.json && shx mkdir -p build/.targets && shx touch build/.targets/build-types.succeeded
# refresh # clean and rebuild/regenerate all project artifacts
refresh
run-s rebuild:all
# refresh:dist # clean, rebuild, and regenerate project distribution
refresh:dist
run-s rebuild update:dist
# retest # clean and (re-)test project
retest
run-s clean test
# reset:hard # remove *all* generated files and reinstall dependencies
reset:hard
git clean -dfx && git reset --hard && npm install
# show:deps # show package dependencies
show:deps
run-s --silent _:show:deps:prod _:show:deps:dev || shx true
# test # test package
test
run-s --silent lint update:dist && run-p test:*
# test:code # test package code (use `--test-code=...` to pass options to testing harness)
test:code
run-s --silent +:max-node-8 && cross-env-shell ava $npm_config_test_code || ( run-s --silent +:min-node-10 && cross-env-shell nyc --silent ava $npm_config_test_code )
# test:types # test for type declaration errors (using `tsd`)
test:types
run-s --silent +:max-node-8 && shx echo "[test:types] WARN Type testing skipped [for NodeJS < v10]" 1>&2 || tsd
# update # update/prepare for distribution [alias: 'dist']
update
run-s update:changelog update:dist
# update:changelog # update CHANGELOG (using `git changelog ...`)
update:changelog
run-s --silent _:update:changelog && git diff --quiet --exit-code CHANGELOG.mkd || shx echo "[update] info CHANGELOG updated"
# update:dist # update distribution content
update:dist
run-s --silent build && exec-if-updated --source "build/**" --target "dist/**" --target build/.targets/update-dist.succeeded "run-s --silent _:update:dist:rebuild"
# verify # fully (and verbosely) test package
verify
cross-env npm_config_test_dist=true npm_config_test=--verbose run-s test
## +:... == sub-scripts (may run 'visibly', but not user-facing)
+:coverage
run-s build test:code && is-ci && run-s cov:send || run-s cov:view
+:max-node-8
is-node-not-modern 10
+:min-node-10
is-node-modern 10
## _:... == sub-scripts ('hidden'; generally should be run 'silently' using `run-s/run-p --silent ...`
_:debug:env
node -e "console.log({env: process.env})"
_:exists:git-changelog
node -e "if (!require('command-exists').sync('git-changelog')){process.exit(1);};" || ( shx echo "WARN `git-changelog` missing (try `go get -u github.com/rivy-go/git-changelog/cmd/git-changelog`)" & exit 1 )
* _:help # print usage/TARGETs by matching lines containing leading double-quoted text like `# TARGET_NAME # HELP_TEXT`
_:help
< package.json node -e "s = {p:'',e:'npm'}; if (new String(process.env.npm_execpath).match(/yarn.js$/)) { s = {p:'\n',e:'yarn'}; }; console.log('%susage: \`%s run TARGET\` or \`npx run-s TARGET [TARGET..]\`\n\nTARGETs:\n', s.p, s.e); re = /^.*?\x22(?:#\s*)(\w[^#\x22]*)\s+#+\s+([^\x22]+?)(\s+#+)?\x22.*$/; require('readline').createInterface({ input: process.stdin, output: process.stdout, terminal: false }).on('line', function(line){ if (match = re.exec(line)) { console.log('%s %s', match[1].padEnd(19), match[2]); } });"
_:lint:commits:all:spell
node -e "result=require('child_process').spawnSync('git log --color=never | cspell stdin --no-summary --config ".vscode/cspell.json"',{shell:true,encoding:'utf-8'}); if (result.status != 0) {console.error('[cspell] ERR! Unknown words in commit(s)\n'+result.stdout+'\n'+result.stderr); process.exit(1);} else {console.log(result.stdout);};"
* _:lint:commits:new:... * note: review from 'origin/last' or tag just prior to version-sorted latest, with fallback to first commit
_:lint:commits:new:commitlint
node -e "result=require('child_process').spawnSync('( git tag --list [#v]* --contains origin/last --sort=v:refname || shx true ) && ( git describe --tags --abbrev=0 HEAD~1 || shx true ) && ( git rev-list --max-parents=0 HEAD --abbrev-commit --abbrev=16 || shx true )',{shell:true,encoding:'utf-8'}); o=result.stdout.split(/\r?\n/).filter((s)=>!!s); vs=o; v=vs[0]; result=require('child_process').spawnSync('commitlint --config .commitlint.config.js --from '+v,{shell:true,encoding:'utf-8'}); if (result.status != 0) {console.error('[commitlint] ERR! Flawed commit(s) found (within \'%s..HEAD\')\n'+result.stdout+'\n'+result.stderr, v); process.exit(1);} else { (result.stdout.length > 0) && console.log(result.stdout);};" || shx true
_:lint:commits:new:spell
node -e "result=require('child_process').spawnSync('( git tag --list [#v]* --contains origin/last --sort=v:refname || shx true ) && ( git describe --tags --abbrev=0 HEAD~1 || shx true ) && ( git rev-list --max-parents=0 HEAD --abbrev-commit --abbrev=16 || shx true )',{shell:true,encoding:'utf-8'}); o=result.stdout.split(/\r?\n/).filter((s)=>!!s); vs=o; v=vs[0]; result=require('child_process').spawnSync('git log '+v+'.. --color=never | cspell stdin --no-summary --config ".vscode/cspell.json"',{shell:true,encoding:'utf-8'}); if (result.status != 0) {console.error('[cspell] ERR! Unknown words in commit(s) (within \'%s..HEAD\')\n'+result.stdout+'\n'+result.stderr, v); process.exit(1);} else {(result.stdout.length > 0) && console.log(result.stdout);};" || shx true
_:show:deps:dev
npm --silent ls --only development || shx true
_:show:deps:prod
npm --silent ls --only production || shx true
_:vcs-clean
git diff --quiet
_:vcs-clean-err
run-s --silent _:vcs-clean || ( shx echo "[vcs] ERR! Uncommitted changes" 1>&2 & exit 1 )
_:vcs-strictly-clean
git status --porcelain | node -e "process.stdin.on('data',function(_){process.exit(1);});"
_:vcs-strictly-clean-err
run-s --silent _:vcs-strictly-clean || ( shx echo "[vcs] ERR! Uncommitted changes and/or untracked files" 1>&2 & exit 1 )
_:update:changelog
run-s --silent _:exists:git-changelog && git changelog > CHANGELOG.mkd || shx echo "[update] WARN CHANGELOG not updated" 1>&2
_:update:dist.build
shx rm -fr dist/cjs dist/esm && shx mkdir -p dist/cjs dist/esm && shx cp -r build/cjs/src/* dist/cjs && shx cp -r build/esm/src/* dist/esm
_:update:dist.normalizeEOL
eolConverter lf dist/**/*.{cjs,js,mjs,ts,json}
_:update:dist.pack
node -e "delete process.env.npm_config_dry_run; name=require('./package.json').name; result=require('child_process').spawnSync('npm pack && shx mkdir -p dist && shx mv '+name+'-*.tgz dist/'+name+'.tgz',{shell:true,encoding:'utf-8'}); if (result.status != 0) {console.error('[update] ERR! Unable to package (into *.tgz) for distribution\n'+result.stdout+'\n'+result.stderr); process.exit(1);} else {console.log(result.stdout);};"
_:update:dist.types
shx mkdir -p dist && shx rm -fr dist/types && rollup --config .rollup.config.types.js && replace-in-file "export { _default as default }" "export = _default" dist/types/mod.cjs.d.ts --quiet && shx mkdir -p dist/cjs && shx cp dist/types/*.cjs.d.ts dist/cjs
_:update:dist:rebuild
shx rm -fr dist && run-s --silent _:update:dist.build _:update:dist.types _:update:dist.normalizeEOL _:update:dist.pack && shx mkdir -p dist/.targets && shx touch build/.targets/update-dist.succeeded
_:version:spell:changelog_update
run-s --silent _:exists:git-changelog && git changelog -u | cspell stdin --config ".vscode/cspell.json" || shx echo "[lint] WARN CHANGELOG update `cspell` exception" 1>&2
_:version:update:changelog
run-s --silent _:exists:git-changelog && node -e "v=require('./package.json').version; result=require('child_process').spawnSync('git changelog --next-tag-now --next-tag v'+v,{shell:true,encoding:'utf-8'}); if (result.status != 0) {console.error('ERR! '+result.stderr); process.exit(1);} else {require('fs').writeFileSync('CHANGELOG.mkd',result.stdout);};" || shx echo "[version] WARN CHANGELOG not updated" 1>&2
## npm lifecycle scripts ##
prepublishOnly
run-s clean update && cross-env npm_config_test_dist=true npm run test && run-s --silent update _:vcs-strictly-clean-err
## npm-version scripts ##
preversion
run-s --silent _:version:spell:changelog_update && cross-env npm_config_test_dist=true npm run test
version
run-s --silent _:version:update:changelog && run-s lint:spell && run-s --silent update:dist && git add CHANGELOG.mkd dist