Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
## v6.7.0 (2019-01-23):

Hey y'all! This is a quick hotfix release that includes some important fixes to
`npm@6.6.0` related to the large rewrite/refactor. We're tagging it as a feature
release because the changes involve some minor new features, and semver is
semver, but there's nothing major here.

### NEW FEATURES

* [`50463f58b`](https://github.com/npm/cli/commit/50463f58b4b70180a85d6d8c10fcf50d8970ef5e)
Improve usage errors to `npm org` commands and add optional filtering to `npm
org ls` subcommand.
([@zkat](https://github.com/zkat))

### BUGFIXES

* [`4027070b0`](https://github.com/npm/cli/commit/4027070b03be3bdae2515f2291de89b91f901df9)
Fix default usage printout for `npm org` so you actually see how it's supposed
to be used.
([@zkat](https://github.com/zkat))
* [`cfea6ea5b`](https://github.com/npm/cli/commit/cfea6ea5b67ec5e4ec57e3a9cb8c82d018cb5476)
fix default usage message for npm hook
([@zkat](https://github.com/zkat))

### DOCS

* [`e959e1421`](https://github.com/npm/cli/commit/e959e14217d751ddb295565fd75cc81de1ee0d5b)
Add manpage for `npm org` command.
([@zkat](https://github.com/zkat))

### DEPENDENCY BUMPS

* [`8543fc357`](https://github.com/npm/cli/commit/8543fc3576f64e91f7946d4c56a5ffb045b55156)
`pacote@9.4.0`: Fall back to "fullfat" packuments on ETARGET errors. This will
make it so that, when a package is published but the corgi follower hasn't
caught up, users can still install a freshly-published package.
([@zkat](https://github.com/zkat))
* [`75475043b`](https://github.com/npm/cli/commit/75475043b03a254b2e7db2c04c3f0baea31d8dc5)
[npm.community#4752](https://npm.community/t/npm-6-6-0-broke-authentication-with-npm-registry-couchapp/4752)
`libnpmpublish@1.1.1`: Fixes auth error for username/password legacy authentication.
([@sreeramjayan](https://github.com/sreeramjayan))
* [`0af8c00ac`](https://github.com/npm/cli/commit/0af8c00acb01849362ffca25b567cc62447c7175)
[npm.community#4746](https://npm.community/t/npm-6-6-0-release-breaking-docker-npm-ci-commands/4746)
`libcipm@3.0.3`: Fixes issue with "cannot run in wd" errors for run-scripts.
([@zkat](https://github.com/zkat))
* [`5a7962e46`](https://github.com/npm/cli/commit/5a7962e46f582c6bd91784b0ddc941ed45e9f802)
`write-file-atomic@2.4.2`:
Fixes issues with leaking `signal-exit` instances and file descriptors.
([@iarna](https://github.com/iarna))

## v6.6.0 (2019-01-17):

### REFACTORING OUT npm-REGISTRY-CLIENT
Expand Down
50 changes: 50 additions & 0 deletions doc/cli/npm-org.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
npm-org(1) -- Manage orgs
===================================

## SYNOPSIS

npm org set <orgname> <username> [developer | admin | owner]
npm org rm <orgname> <username>
npm org ls <orgname> [<username>]

## EXAMPLE

Add a new developer to an org:
```
$ npm org set my-org @mx-smith
```

Add a new admin to an org (or change a developer to an admin):
```
$ npm org set my-org @mx-santos admin
```

Remove a user from an org:
```
$ npm org rm my-org mx-santos
```

List all users in an org:
```
$ npm org ls my-org
```

List all users in JSON format:
```
$ npm org ls my-org --json
```

See what role a user has in an org:
```
$ npm org ls my-org @mx-santos
```

## DESCRIPTION

You can use the `npm org` commands to manage and view users of an organization.
It supports adding and removing users, changing their roles, listing them, and
finding specific ones and their roles.

## SEE ALSO

* [Documentation on npm Orgs](https://docs.npmjs.com/orgs/)
16 changes: 12 additions & 4 deletions lib/hook.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,15 +9,14 @@ const otplease = require('./utils/otplease.js')
const pudding = require('figgy-pudding')
const relativeDate = require('tiny-relative-date')
const Table = require('cli-table3')
const usage = require('./utils/usage.js')
const validate = require('aproba')

hook.usage = usage([
hook.usage = [
'npm hook add <pkg> <url> <secret> [--type=<type>]',
'npm hook ls [pkg]',
'npm hook rm <id>',
'npm hook update <id> <url> <secret>'
])
].join('\n')

hook.completion = (opts, cb) => {
validate('OF', [opts, cb])
Expand All@@ -32,7 +31,14 @@ const HookConfig = pudding({
unicode: {}
})

module.exports = (args, cb) => BB.try(() => hook(args)).nodeify(cb)
function UsageError () {
throw Object.assign(new Error(hook.usage), {code: 'EUSAGE'})
}

module.exports = (args, cb) => BB.try(() => hook(args)).then(
val => cb(null, val),
err => err.code === 'EUSAGE' ? cb(err.message) : cb(err)
)
function hook (args) {
return otplease(npmConfig(), opts => {
opts = HookConfig(opts)
Expand All@@ -46,6 +52,8 @@ function hook (args) {
case 'update':
case 'up':
return update(args[1], args[2], args[3], opts)
default:
UsageError()
}
})
}
Expand Down
34 changes: 30 additions & 4 deletions lib/org.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ org.subcommands = ['set', 'rm', 'ls']
org.usage =
'npm org set orgname username [developer | admin | owner]\n' +
'npm org rm orgname username\n' +
'npm org ls orgname'
'npm org ls orgname [<username>]'

const OrgConfig = figgyPudding({
json: {},
Expand DownExpand Up@@ -53,17 +53,27 @@ function org ([cmd, orgname, username, role], cb) {
case 'rm':
return orgRm(orgname, username, opts)
case 'ls':
return orgList(orgname, opts)
return orgList(orgname, username, opts)
default:
UsageError()
}
}).then(
x => cb(null, x),
err => err.code === 'EUSAGE' ? err.message : err
err => cb(err.code === 'EUSAGE' ? err.message : err)
)
}

function orgSet (org, user, role, opts) {
role = role || 'developer'
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
if (!['owner', 'admin', 'developer'].find(x => x === role)) {
throw new Error('Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.')
}
return liborg.set(org, user, role, opts).then(memDeets => {
if (opts.json) {
output(JSON.stringify(memDeets, null, 2))
Expand All@@ -83,6 +93,12 @@ function orgSet (org, user, role, opts) {
}

function orgRm (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
return liborg.rm(org, user, opts).then(() => {
return liborg.ls(org, opts)
}).then(roster => {
Expand All@@ -105,8 +121,18 @@ function orgRm (org, user, opts) {
})
}

function orgList (org, opts) {
function orgList (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
return liborg.ls(org, opts).then(roster => {
if (user) {
const newRoster = {}
if (roster[user]) {
newRoster[user] = roster[user]
}
roster = newRoster
}
if (opts.json) {
output(JSON.stringify(roster, null, 2))
} else if (opts.parseable) {
Expand Down
1 change: 1 addition & 0 deletions node_modules/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions node_modules/libcipm/CHANGELOG.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion node_modules/libcipm/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions node_modules/libcipm/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions node_modules/libnpm/node_modules/aproba/CHANGELOG.md

This file was deleted.

14 changes: 0 additions & 14 deletions node_modules/libnpm/node_modules/aproba/LICENSE

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
## v6.7.0 (2019-01-23):

Hey y'all! This is a quick hotfix release that includes some important fixes to
`npm@6.6.0` related to the large rewrite/refactor. We're tagging it as a feature
release because the changes involve some minor new features, and semver is
semver, but there's nothing major here.

### NEW FEATURES

* [`50463f58b`](https://github.com/npm/cli/commit/50463f58b4b70180a85d6d8c10fcf50d8970ef5e)
Improve usage errors to `npm org` commands and add optional filtering to `npm
org ls` subcommand.
([@zkat](https://github.com/zkat))

### BUGFIXES

* [`4027070b0`](https://github.com/npm/cli/commit/4027070b03be3bdae2515f2291de89b91f901df9)
Fix default usage printout for `npm org` so you actually see how it's supposed
to be used.
([@zkat](https://github.com/zkat))
* [`cfea6ea5b`](https://github.com/npm/cli/commit/cfea6ea5b67ec5e4ec57e3a9cb8c82d018cb5476)
fix default usage message for npm hook
([@zkat](https://github.com/zkat))

### DOCS

* [`e959e1421`](https://github.com/npm/cli/commit/e959e14217d751ddb295565fd75cc81de1ee0d5b)
Add manpage for `npm org` command.
([@zkat](https://github.com/zkat))

### DEPENDENCY BUMPS

* [`8543fc357`](https://github.com/npm/cli/commit/8543fc3576f64e91f7946d4c56a5ffb045b55156)
`pacote@9.4.0`: Fall back to "fullfat" packuments on ETARGET errors. This will
make it so that, when a package is published but the corgi follower hasn't
caught up, users can still install a freshly-published package.
([@zkat](https://github.com/zkat))
* [`75475043b`](https://github.com/npm/cli/commit/75475043b03a254b2e7db2c04c3f0baea31d8dc5)
[npm.community#4752](https://npm.community/t/npm-6-6-0-broke-authentication-with-npm-registry-couchapp/4752)
`libnpmpublish@1.1.1`: Fixes auth error for username/password legacy authentication.
([@sreeramjayan](https://github.com/sreeramjayan))
* [`0af8c00ac`](https://github.com/npm/cli/commit/0af8c00acb01849362ffca25b567cc62447c7175)
[npm.community#4746](https://npm.community/t/npm-6-6-0-release-breaking-docker-npm-ci-commands/4746)
`libcipm@3.0.3`: Fixes issue with "cannot run in wd" errors for run-scripts.
([@zkat](https://github.com/zkat))
* [`5a7962e46`](https://github.com/npm/cli/commit/5a7962e46f582c6bd91784b0ddc941ed45e9f802)
`write-file-atomic@2.4.2`:
Fixes issues with leaking `signal-exit` instances and file descriptors.
([@iarna](https://github.com/iarna))

## v6.6.0 (2019-01-17):

### REFACTORING OUT npm-REGISTRY-CLIENT
Expand Down
50 changes: 50 additions & 0 deletions doc/cli/npm-org.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
npm-org(1) -- Manage orgs
===================================

## SYNOPSIS

npm org set <orgname> <username> [developer | admin | owner]
npm org rm <orgname> <username>
npm org ls <orgname> [<username>]

## EXAMPLE

Add a new developer to an org:
```
$ npm org set my-org @mx-smith
```

Add a new admin to an org (or change a developer to an admin):
```
$ npm org set my-org @mx-santos admin
```

Remove a user from an org:
```
$ npm org rm my-org mx-santos
```

List all users in an org:
```
$ npm org ls my-org
```

List all users in JSON format:
```
$ npm org ls my-org --json
```

See what role a user has in an org:
```
$ npm org ls my-org @mx-santos
```

## DESCRIPTION

You can use the `npm org` commands to manage and view users of an organization.
It supports adding and removing users, changing their roles, listing them, and
finding specific ones and their roles.

## SEE ALSO

* [Documentation on npm Orgs](https://docs.npmjs.com/orgs/)
16 changes: 12 additions & 4 deletions lib/hook.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,15 +9,14 @@ const otplease = require('./utils/otplease.js')
const pudding = require('figgy-pudding')
const relativeDate = require('tiny-relative-date')
const Table = require('cli-table3')
const usage = require('./utils/usage.js')
const validate = require('aproba')

hook.usage = usage([
hook.usage = [
'npm hook add <pkg> <url> <secret> [--type=<type>]',
'npm hook ls [pkg]',
'npm hook rm <id>',
'npm hook update <id> <url> <secret>'
])
].join('\n')

hook.completion = (opts, cb) => {
validate('OF', [opts, cb])
Expand All@@ -32,7 +31,14 @@ const HookConfig = pudding({
unicode: {}
})

module.exports = (args, cb) => BB.try(() => hook(args)).nodeify(cb)
function UsageError () {
throw Object.assign(new Error(hook.usage), {code: 'EUSAGE'})
}

module.exports = (args, cb) => BB.try(() => hook(args)).then(
val => cb(null, val),
err => err.code === 'EUSAGE' ? cb(err.message) : cb(err)
)
function hook (args) {
return otplease(npmConfig(), opts => {
opts = HookConfig(opts)
Expand All@@ -46,6 +52,8 @@ function hook (args) {
case 'update':
case 'up':
return update(args[1], args[2], args[3], opts)
default:
UsageError()
}
})
}
Expand Down
34 changes: 30 additions & 4 deletions lib/org.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ org.subcommands = ['set', 'rm', 'ls']
org.usage =
'npm org set orgname username [developer | admin | owner]\n' +
'npm org rm orgname username\n' +
'npm org ls orgname'
'npm org ls orgname [<username>]'

const OrgConfig = figgyPudding({
json: {},
Expand DownExpand Up@@ -53,17 +53,27 @@ function org ([cmd, orgname, username, role], cb) {
case 'rm':
return orgRm(orgname, username, opts)
case 'ls':
return orgList(orgname, opts)
return orgList(orgname, username, opts)
default:
UsageError()
}
}).then(
x => cb(null, x),
err => err.code === 'EUSAGE' ? err.message : err
err => cb(err.code === 'EUSAGE' ? err.message : err)
)
}

function orgSet (org, user, role, opts) {
role = role || 'developer'
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
if (!['owner', 'admin', 'developer'].find(x => x === role)) {
throw new Error('Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.')
}
return liborg.set(org, user, role, opts).then(memDeets => {
if (opts.json) {
output(JSON.stringify(memDeets, null, 2))
Expand All@@ -83,6 +93,12 @@ function orgSet (org, user, role, opts) {
}

function orgRm (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
return liborg.rm(org, user, opts).then(() => {
return liborg.ls(org, opts)
}).then(roster => {
Expand All@@ -105,8 +121,18 @@ function orgRm (org, user, opts) {
})
}

function orgList (org, opts) {
function orgList (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
return liborg.ls(org, opts).then(roster => {
if (user) {
const newRoster = {}
if (roster[user]) {
newRoster[user] = roster[user]
}
roster = newRoster
}
if (opts.json) {
output(JSON.stringify(roster, null, 2))
} else if (opts.parseable) {
Expand Down
1 change: 1 addition & 0 deletions node_modules/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions node_modules/libcipm/CHANGELOG.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion node_modules/libcipm/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions node_modules/libcipm/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions node_modules/libnpm/node_modules/aproba/CHANGELOG.md

This file was deleted.

14 changes: 0 additions & 14 deletions node_modules/libnpm/node_modules/aproba/LICENSE

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
## v6.7.0 (2019-01-23):

Hey y'all! This is a quick hotfix release that includes some important fixes to
`npm@6.6.0` related to the large rewrite/refactor. We're tagging it as a feature
release because the changes involve some minor new features, and semver is
semver, but there's nothing major here.

### NEW FEATURES

* [`50463f58b`](https://github.com/npm/cli/commit/50463f58b4b70180a85d6d8c10fcf50d8970ef5e)
Improve usage errors to `npm org` commands and add optional filtering to `npm
org ls` subcommand.
([@zkat](https://github.com/zkat))

### BUGFIXES

* [`4027070b0`](https://github.com/npm/cli/commit/4027070b03be3bdae2515f2291de89b91f901df9)
Fix default usage printout for `npm org` so you actually see how it's supposed
to be used.
([@zkat](https://github.com/zkat))
* [`cfea6ea5b`](https://github.com/npm/cli/commit/cfea6ea5b67ec5e4ec57e3a9cb8c82d018cb5476)
fix default usage message for npm hook
([@zkat](https://github.com/zkat))

### DOCS

* [`e959e1421`](https://github.com/npm/cli/commit/e959e14217d751ddb295565fd75cc81de1ee0d5b)
Add manpage for `npm org` command.
([@zkat](https://github.com/zkat))

### DEPENDENCY BUMPS

* [`8543fc357`](https://github.com/npm/cli/commit/8543fc3576f64e91f7946d4c56a5ffb045b55156)
`pacote@9.4.0`: Fall back to "fullfat" packuments on ETARGET errors. This will
make it so that, when a package is published but the corgi follower hasn't
caught up, users can still install a freshly-published package.
([@zkat](https://github.com/zkat))
* [`75475043b`](https://github.com/npm/cli/commit/75475043b03a254b2e7db2c04c3f0baea31d8dc5)
[npm.community#4752](https://npm.community/t/npm-6-6-0-broke-authentication-with-npm-registry-couchapp/4752)
`libnpmpublish@1.1.1`: Fixes auth error for username/password legacy authentication.
([@sreeramjayan](https://github.com/sreeramjayan))
* [`0af8c00ac`](https://github.com/npm/cli/commit/0af8c00acb01849362ffca25b567cc62447c7175)
[npm.community#4746](https://npm.community/t/npm-6-6-0-release-breaking-docker-npm-ci-commands/4746)
`libcipm@3.0.3`: Fixes issue with "cannot run in wd" errors for run-scripts.
([@zkat](https://github.com/zkat))
* [`5a7962e46`](https://github.com/npm/cli/commit/5a7962e46f582c6bd91784b0ddc941ed45e9f802)
`write-file-atomic@2.4.2`:
Fixes issues with leaking `signal-exit` instances and file descriptors.
([@iarna](https://github.com/iarna))

## v6.6.0 (2019-01-17):

### REFACTORING OUT npm-REGISTRY-CLIENT
Expand Down
50 changes: 50 additions & 0 deletions doc/cli/npm-org.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
npm-org(1) -- Manage orgs
===================================

## SYNOPSIS

npm org set <orgname> <username> [developer | admin | owner]
npm org rm <orgname> <username>
npm org ls <orgname> [<username>]

## EXAMPLE

Add a new developer to an org:
```
$ npm org set my-org @mx-smith
```

Add a new admin to an org (or change a developer to an admin):
```
$ npm org set my-org @mx-santos admin
```

Remove a user from an org:
```
$ npm org rm my-org mx-santos
```

List all users in an org:
```
$ npm org ls my-org
```

List all users in JSON format:
```
$ npm org ls my-org --json
```

See what role a user has in an org:
```
$ npm org ls my-org @mx-santos
```

## DESCRIPTION

You can use the `npm org` commands to manage and view users of an organization.
It supports adding and removing users, changing their roles, listing them, and
finding specific ones and their roles.

## SEE ALSO

* [Documentation on npm Orgs](https://docs.npmjs.com/orgs/)
16 changes: 12 additions & 4 deletions lib/hook.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,15 +9,14 @@ const otplease = require('./utils/otplease.js')
const pudding = require('figgy-pudding')
const relativeDate = require('tiny-relative-date')
const Table = require('cli-table3')
const usage = require('./utils/usage.js')
const validate = require('aproba')

hook.usage = usage([
hook.usage = [
'npm hook add <pkg> <url> <secret> [--type=<type>]',
'npm hook ls [pkg]',
'npm hook rm <id>',
'npm hook update <id> <url> <secret>'
])
].join('\n')

hook.completion = (opts, cb) => {
validate('OF', [opts, cb])
Expand All@@ -32,7 +31,14 @@ const HookConfig = pudding({
unicode: {}
})

module.exports = (args, cb) => BB.try(() => hook(args)).nodeify(cb)
function UsageError () {
throw Object.assign(new Error(hook.usage), {code: 'EUSAGE'})
}

module.exports = (args, cb) => BB.try(() => hook(args)).then(
val => cb(null, val),
err => err.code === 'EUSAGE' ? cb(err.message) : cb(err)
)
function hook (args) {
return otplease(npmConfig(), opts => {
opts = HookConfig(opts)
Expand All@@ -46,6 +52,8 @@ function hook (args) {
case 'update':
case 'up':
return update(args[1], args[2], args[3], opts)
default:
UsageError()
}
})
}
Expand Down
34 changes: 30 additions & 4 deletions lib/org.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ org.subcommands = ['set', 'rm', 'ls']
org.usage =
'npm org set orgname username [developer | admin | owner]\n' +
'npm org rm orgname username\n' +
'npm org ls orgname'
'npm org ls orgname [<username>]'

const OrgConfig = figgyPudding({
json: {},
Expand DownExpand Up@@ -53,17 +53,27 @@ function org ([cmd, orgname, username, role], cb) {
case 'rm':
return orgRm(orgname, username, opts)
case 'ls':
return orgList(orgname, opts)
return orgList(orgname, username, opts)
default:
UsageError()
}
}).then(
x => cb(null, x),
err => err.code === 'EUSAGE' ? err.message : err
err => cb(err.code === 'EUSAGE' ? err.message : err)
)
}

function orgSet (org, user, role, opts) {
role = role || 'developer'
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
if (!['owner', 'admin', 'developer'].find(x => x === role)) {
throw new Error('Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.')
}
return liborg.set(org, user, role, opts).then(memDeets => {
if (opts.json) {
output(JSON.stringify(memDeets, null, 2))
Expand All@@ -83,6 +93,12 @@ function orgSet (org, user, role, opts) {
}

function orgRm (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
return liborg.rm(org, user, opts).then(() => {
return liborg.ls(org, opts)
}).then(roster => {
Expand All@@ -105,8 +121,18 @@ function orgRm (org, user, opts) {
})
}

function orgList (org, opts) {
function orgList (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
return liborg.ls(org, opts).then(roster => {
if (user) {
const newRoster = {}
if (roster[user]) {
newRoster[user] = roster[user]
}
roster = newRoster
}
if (opts.json) {
output(JSON.stringify(roster, null, 2))
} else if (opts.parseable) {
Expand Down
1 change: 1 addition & 0 deletions node_modules/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions node_modules/libcipm/CHANGELOG.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion node_modules/libcipm/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions node_modules/libcipm/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions node_modules/libnpm/node_modules/aproba/CHANGELOG.md

This file was deleted.

14 changes: 0 additions & 14 deletions node_modules/libnpm/node_modules/aproba/LICENSE

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
## v6.7.0 (2019-01-23):

Hey y'all! This is a quick hotfix release that includes some important fixes to
`npm@6.6.0` related to the large rewrite/refactor. We're tagging it as a feature
release because the changes involve some minor new features, and semver is
semver, but there's nothing major here.

### NEW FEATURES

* [`50463f58b`](https://github.com/npm/cli/commit/50463f58b4b70180a85d6d8c10fcf50d8970ef5e)
Improve usage errors to `npm org` commands and add optional filtering to `npm
org ls` subcommand.
([@zkat](https://github.com/zkat))

### BUGFIXES

* [`4027070b0`](https://github.com/npm/cli/commit/4027070b03be3bdae2515f2291de89b91f901df9)
Fix default usage printout for `npm org` so you actually see how it's supposed
to be used.
([@zkat](https://github.com/zkat))
* [`cfea6ea5b`](https://github.com/npm/cli/commit/cfea6ea5b67ec5e4ec57e3a9cb8c82d018cb5476)
fix default usage message for npm hook
([@zkat](https://github.com/zkat))

### DOCS

* [`e959e1421`](https://github.com/npm/cli/commit/e959e14217d751ddb295565fd75cc81de1ee0d5b)
Add manpage for `npm org` command.
([@zkat](https://github.com/zkat))

### DEPENDENCY BUMPS

* [`8543fc357`](https://github.com/npm/cli/commit/8543fc3576f64e91f7946d4c56a5ffb045b55156)
`pacote@9.4.0`: Fall back to "fullfat" packuments on ETARGET errors. This will
make it so that, when a package is published but the corgi follower hasn't
caught up, users can still install a freshly-published package.
([@zkat](https://github.com/zkat))
* [`75475043b`](https://github.com/npm/cli/commit/75475043b03a254b2e7db2c04c3f0baea31d8dc5)
[npm.community#4752](https://npm.community/t/npm-6-6-0-broke-authentication-with-npm-registry-couchapp/4752)
`libnpmpublish@1.1.1`: Fixes auth error for username/password legacy authentication.
([@sreeramjayan](https://github.com/sreeramjayan))
* [`0af8c00ac`](https://github.com/npm/cli/commit/0af8c00acb01849362ffca25b567cc62447c7175)
[npm.community#4746](https://npm.community/t/npm-6-6-0-release-breaking-docker-npm-ci-commands/4746)
`libcipm@3.0.3`: Fixes issue with "cannot run in wd" errors for run-scripts.
([@zkat](https://github.com/zkat))
* [`5a7962e46`](https://github.com/npm/cli/commit/5a7962e46f582c6bd91784b0ddc941ed45e9f802)
`write-file-atomic@2.4.2`:
Fixes issues with leaking `signal-exit` instances and file descriptors.
([@iarna](https://github.com/iarna))

## v6.6.0 (2019-01-17):

### REFACTORING OUT npm-REGISTRY-CLIENT
Expand Down
50 changes: 50 additions & 0 deletions doc/cli/npm-org.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
npm-org(1) -- Manage orgs
===================================

## SYNOPSIS

npm org set <orgname> <username> [developer | admin | owner]
npm org rm <orgname> <username>
npm org ls <orgname> [<username>]

## EXAMPLE

Add a new developer to an org:
```
$ npm org set my-org @mx-smith
```

Add a new admin to an org (or change a developer to an admin):
```
$ npm org set my-org @mx-santos admin
```

Remove a user from an org:
```
$ npm org rm my-org mx-santos
```

List all users in an org:
```
$ npm org ls my-org
```

List all users in JSON format:
```
$ npm org ls my-org --json
```

See what role a user has in an org:
```
$ npm org ls my-org @mx-santos
```

## DESCRIPTION

You can use the `npm org` commands to manage and view users of an organization.
It supports adding and removing users, changing their roles, listing them, and
finding specific ones and their roles.

## SEE ALSO

* [Documentation on npm Orgs](https://docs.npmjs.com/orgs/)
16 changes: 12 additions & 4 deletions lib/hook.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,15 +9,14 @@ const otplease = require('./utils/otplease.js')
const pudding = require('figgy-pudding')
const relativeDate = require('tiny-relative-date')
const Table = require('cli-table3')
const usage = require('./utils/usage.js')
const validate = require('aproba')

hook.usage = usage([
hook.usage = [
'npm hook add <pkg> <url> <secret> [--type=<type>]',
'npm hook ls [pkg]',
'npm hook rm <id>',
'npm hook update <id> <url> <secret>'
])
].join('\n')

hook.completion = (opts, cb) => {
validate('OF', [opts, cb])
Expand All@@ -32,7 +31,14 @@ const HookConfig = pudding({
unicode: {}
})

module.exports = (args, cb) => BB.try(() => hook(args)).nodeify(cb)
function UsageError () {
throw Object.assign(new Error(hook.usage), {code: 'EUSAGE'})
}

module.exports = (args, cb) => BB.try(() => hook(args)).then(
val => cb(null, val),
err => err.code === 'EUSAGE' ? cb(err.message) : cb(err)
)
function hook (args) {
return otplease(npmConfig(), opts => {
opts = HookConfig(opts)
Expand All@@ -46,6 +52,8 @@ function hook (args) {
case 'update':
case 'up':
return update(args[1], args[2], args[3], opts)
default:
UsageError()
}
})
}
Expand Down
34 changes: 30 additions & 4 deletions lib/org.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ org.subcommands = ['set', 'rm', 'ls']
org.usage =
'npm org set orgname username [developer | admin | owner]\n' +
'npm org rm orgname username\n' +
'npm org ls orgname'
'npm org ls orgname [<username>]'

const OrgConfig = figgyPudding({
json: {},
Expand DownExpand Up@@ -53,17 +53,27 @@ function org ([cmd, orgname, username, role], cb) {
case 'rm':
return orgRm(orgname, username, opts)
case 'ls':
return orgList(orgname, opts)
return orgList(orgname, username, opts)
default:
UsageError()
}
}).then(
x => cb(null, x),
err => err.code === 'EUSAGE' ? err.message : err
err => cb(err.code === 'EUSAGE' ? err.message : err)
)
}

function orgSet (org, user, role, opts) {
role = role || 'developer'
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
if (!['owner', 'admin', 'developer'].find(x => x === role)) {
throw new Error('Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.')
}
return liborg.set(org, user, role, opts).then(memDeets => {
if (opts.json) {
output(JSON.stringify(memDeets, null, 2))
Expand All@@ -83,6 +93,12 @@ function orgSet (org, user, role, opts) {
}

function orgRm (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
return liborg.rm(org, user, opts).then(() => {
return liborg.ls(org, opts)
}).then(roster => {
Expand All@@ -105,8 +121,18 @@ function orgRm (org, user, opts) {
})
}

function orgList (org, opts) {
function orgList (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
return liborg.ls(org, opts).then(roster => {
if (user) {
const newRoster = {}
if (roster[user]) {
newRoster[user] = roster[user]
}
roster = newRoster
}
if (opts.json) {
output(JSON.stringify(roster, null, 2))
} else if (opts.parseable) {
Expand Down
1 change: 1 addition & 0 deletions node_modules/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions node_modules/libcipm/CHANGELOG.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion node_modules/libcipm/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions node_modules/libcipm/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions node_modules/libnpm/node_modules/aproba/CHANGELOG.md

This file was deleted.

14 changes: 0 additions & 14 deletions node_modules/libnpm/node_modules/aproba/LICENSE

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
## v6.7.0 (2019-01-23):

Hey y'all! This is a quick hotfix release that includes some important fixes to
`npm@6.6.0` related to the large rewrite/refactor. We're tagging it as a feature
release because the changes involve some minor new features, and semver is
semver, but there's nothing major here.

### NEW FEATURES

* [`50463f58b`](https://github.com/npm/cli/commit/50463f58b4b70180a85d6d8c10fcf50d8970ef5e)
Improve usage errors to `npm org` commands and add optional filtering to `npm
org ls` subcommand.
([@zkat](https://github.com/zkat))

### BUGFIXES

* [`4027070b0`](https://github.com/npm/cli/commit/4027070b03be3bdae2515f2291de89b91f901df9)
Fix default usage printout for `npm org` so you actually see how it's supposed
to be used.
([@zkat](https://github.com/zkat))
* [`cfea6ea5b`](https://github.com/npm/cli/commit/cfea6ea5b67ec5e4ec57e3a9cb8c82d018cb5476)
fix default usage message for npm hook
([@zkat](https://github.com/zkat))

### DOCS

* [`e959e1421`](https://github.com/npm/cli/commit/e959e14217d751ddb295565fd75cc81de1ee0d5b)
Add manpage for `npm org` command.
([@zkat](https://github.com/zkat))

### DEPENDENCY BUMPS

* [`8543fc357`](https://github.com/npm/cli/commit/8543fc3576f64e91f7946d4c56a5ffb045b55156)
`pacote@9.4.0`: Fall back to "fullfat" packuments on ETARGET errors. This will
make it so that, when a package is published but the corgi follower hasn't
caught up, users can still install a freshly-published package.
([@zkat](https://github.com/zkat))
* [`75475043b`](https://github.com/npm/cli/commit/75475043b03a254b2e7db2c04c3f0baea31d8dc5)
[npm.community#4752](https://npm.community/t/npm-6-6-0-broke-authentication-with-npm-registry-couchapp/4752)
`libnpmpublish@1.1.1`: Fixes auth error for username/password legacy authentication.
([@sreeramjayan](https://github.com/sreeramjayan))
* [`0af8c00ac`](https://github.com/npm/cli/commit/0af8c00acb01849362ffca25b567cc62447c7175)
[npm.community#4746](https://npm.community/t/npm-6-6-0-release-breaking-docker-npm-ci-commands/4746)
`libcipm@3.0.3`: Fixes issue with "cannot run in wd" errors for run-scripts.
([@zkat](https://github.com/zkat))
* [`5a7962e46`](https://github.com/npm/cli/commit/5a7962e46f582c6bd91784b0ddc941ed45e9f802)
`write-file-atomic@2.4.2`:
Fixes issues with leaking `signal-exit` instances and file descriptors.
([@iarna](https://github.com/iarna))

## v6.6.0 (2019-01-17):

### REFACTORING OUT npm-REGISTRY-CLIENT
Expand Down
50 changes: 50 additions & 0 deletions doc/cli/npm-org.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
npm-org(1) -- Manage orgs
===================================

## SYNOPSIS

npm org set <orgname> <username> [developer | admin | owner]
npm org rm <orgname> <username>
npm org ls <orgname> [<username>]

## EXAMPLE

Add a new developer to an org:
```
$ npm org set my-org @mx-smith
```

Add a new admin to an org (or change a developer to an admin):
```
$ npm org set my-org @mx-santos admin
```

Remove a user from an org:
```
$ npm org rm my-org mx-santos
```

List all users in an org:
```
$ npm org ls my-org
```

List all users in JSON format:
```
$ npm org ls my-org --json
```

See what role a user has in an org:
```
$ npm org ls my-org @mx-santos
```

## DESCRIPTION

You can use the `npm org` commands to manage and view users of an organization.
It supports adding and removing users, changing their roles, listing them, and
finding specific ones and their roles.

## SEE ALSO

* [Documentation on npm Orgs](https://docs.npmjs.com/orgs/)
16 changes: 12 additions & 4 deletions lib/hook.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,15 +9,14 @@ const otplease = require('./utils/otplease.js')
const pudding = require('figgy-pudding')
const relativeDate = require('tiny-relative-date')
const Table = require('cli-table3')
const usage = require('./utils/usage.js')
const validate = require('aproba')

hook.usage = usage([
hook.usage = [
'npm hook add <pkg> <url> <secret> [--type=<type>]',
'npm hook ls [pkg]',
'npm hook rm <id>',
'npm hook update <id> <url> <secret>'
])
].join('\n')

hook.completion = (opts, cb) => {
validate('OF', [opts, cb])
Expand All@@ -32,7 +31,14 @@ const HookConfig = pudding({
unicode: {}
})

module.exports = (args, cb) => BB.try(() => hook(args)).nodeify(cb)
function UsageError () {
throw Object.assign(new Error(hook.usage), {code: 'EUSAGE'})
}

module.exports = (args, cb) => BB.try(() => hook(args)).then(
val => cb(null, val),
err => err.code === 'EUSAGE' ? cb(err.message) : cb(err)
)
function hook (args) {
return otplease(npmConfig(), opts => {
opts = HookConfig(opts)
Expand All@@ -46,6 +52,8 @@ function hook (args) {
case 'update':
case 'up':
return update(args[1], args[2], args[3], opts)
default:
UsageError()
}
})
}
Expand Down
34 changes: 30 additions & 4 deletions lib/org.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ org.subcommands = ['set', 'rm', 'ls']
org.usage =
'npm org set orgname username [developer | admin | owner]\n' +
'npm org rm orgname username\n' +
'npm org ls orgname'
'npm org ls orgname [<username>]'

const OrgConfig = figgyPudding({
json: {},
Expand DownExpand Up@@ -53,17 +53,27 @@ function org ([cmd, orgname, username, role], cb) {
case 'rm':
return orgRm(orgname, username, opts)
case 'ls':
return orgList(orgname, opts)
return orgList(orgname, username, opts)
default:
UsageError()
}
}).then(
x => cb(null, x),
err => err.code === 'EUSAGE' ? err.message : err
err => cb(err.code === 'EUSAGE' ? err.message : err)
)
}

function orgSet (org, user, role, opts) {
role = role || 'developer'
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
if (!['owner', 'admin', 'developer'].find(x => x === role)) {
throw new Error('Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.')
}
return liborg.set(org, user, role, opts).then(memDeets => {
if (opts.json) {
output(JSON.stringify(memDeets, null, 2))
Expand All@@ -83,6 +93,12 @@ function orgSet (org, user, role, opts) {
}

function orgRm (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
return liborg.rm(org, user, opts).then(() => {
return liborg.ls(org, opts)
}).then(roster => {
Expand All@@ -105,8 +121,18 @@ function orgRm (org, user, opts) {
})
}

function orgList (org, opts) {
function orgList (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
return liborg.ls(org, opts).then(roster => {
if (user) {
const newRoster = {}
if (roster[user]) {
newRoster[user] = roster[user]
}
roster = newRoster
}
if (opts.json) {
output(JSON.stringify(roster, null, 2))
} else if (opts.parseable) {
Expand Down
1 change: 1 addition & 0 deletions node_modules/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions node_modules/libcipm/CHANGELOG.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion node_modules/libcipm/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions node_modules/libcipm/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions node_modules/libnpm/node_modules/aproba/CHANGELOG.md

This file was deleted.

14 changes: 0 additions & 14 deletions node_modules/libnpm/node_modules/aproba/LICENSE

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
## v6.7.0 (2019-01-23):

Hey y'all! This is a quick hotfix release that includes some important fixes to
`npm@6.6.0` related to the large rewrite/refactor. We're tagging it as a feature
release because the changes involve some minor new features, and semver is
semver, but there's nothing major here.

### NEW FEATURES

* [`50463f58b`](https://github.com/npm/cli/commit/50463f58b4b70180a85d6d8c10fcf50d8970ef5e)
Improve usage errors to `npm org` commands and add optional filtering to `npm
org ls` subcommand.
([@zkat](https://github.com/zkat))

### BUGFIXES

* [`4027070b0`](https://github.com/npm/cli/commit/4027070b03be3bdae2515f2291de89b91f901df9)
Fix default usage printout for `npm org` so you actually see how it's supposed
to be used.
([@zkat](https://github.com/zkat))
* [`cfea6ea5b`](https://github.com/npm/cli/commit/cfea6ea5b67ec5e4ec57e3a9cb8c82d018cb5476)
fix default usage message for npm hook
([@zkat](https://github.com/zkat))

### DOCS

* [`e959e1421`](https://github.com/npm/cli/commit/e959e14217d751ddb295565fd75cc81de1ee0d5b)
Add manpage for `npm org` command.
([@zkat](https://github.com/zkat))

### DEPENDENCY BUMPS

* [`8543fc357`](https://github.com/npm/cli/commit/8543fc3576f64e91f7946d4c56a5ffb045b55156)
`pacote@9.4.0`: Fall back to "fullfat" packuments on ETARGET errors. This will
make it so that, when a package is published but the corgi follower hasn't
caught up, users can still install a freshly-published package.
([@zkat](https://github.com/zkat))
* [`75475043b`](https://github.com/npm/cli/commit/75475043b03a254b2e7db2c04c3f0baea31d8dc5)
[npm.community#4752](https://npm.community/t/npm-6-6-0-broke-authentication-with-npm-registry-couchapp/4752)
`libnpmpublish@1.1.1`: Fixes auth error for username/password legacy authentication.
([@sreeramjayan](https://github.com/sreeramjayan))
* [`0af8c00ac`](https://github.com/npm/cli/commit/0af8c00acb01849362ffca25b567cc62447c7175)
[npm.community#4746](https://npm.community/t/npm-6-6-0-release-breaking-docker-npm-ci-commands/4746)
`libcipm@3.0.3`: Fixes issue with "cannot run in wd" errors for run-scripts.
([@zkat](https://github.com/zkat))
* [`5a7962e46`](https://github.com/npm/cli/commit/5a7962e46f582c6bd91784b0ddc941ed45e9f802)
`write-file-atomic@2.4.2`:
Fixes issues with leaking `signal-exit` instances and file descriptors.
([@iarna](https://github.com/iarna))

## v6.6.0 (2019-01-17):

### REFACTORING OUT npm-REGISTRY-CLIENT
Expand Down
50 changes: 50 additions & 0 deletions doc/cli/npm-org.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
npm-org(1) -- Manage orgs
===================================

## SYNOPSIS

npm org set <orgname> <username> [developer | admin | owner]
npm org rm <orgname> <username>
npm org ls <orgname> [<username>]

## EXAMPLE

Add a new developer to an org:
```
$ npm org set my-org @mx-smith
```

Add a new admin to an org (or change a developer to an admin):
```
$ npm org set my-org @mx-santos admin
```

Remove a user from an org:
```
$ npm org rm my-org mx-santos
```

List all users in an org:
```
$ npm org ls my-org
```

List all users in JSON format:
```
$ npm org ls my-org --json
```

See what role a user has in an org:
```
$ npm org ls my-org @mx-santos
```

## DESCRIPTION

You can use the `npm org` commands to manage and view users of an organization.
It supports adding and removing users, changing their roles, listing them, and
finding specific ones and their roles.

## SEE ALSO

* [Documentation on npm Orgs](https://docs.npmjs.com/orgs/)
16 changes: 12 additions & 4 deletions lib/hook.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,15 +9,14 @@ const otplease = require('./utils/otplease.js')
const pudding = require('figgy-pudding')
const relativeDate = require('tiny-relative-date')
const Table = require('cli-table3')
const usage = require('./utils/usage.js')
const validate = require('aproba')

hook.usage = usage([
hook.usage = [
'npm hook add <pkg> <url> <secret> [--type=<type>]',
'npm hook ls [pkg]',
'npm hook rm <id>',
'npm hook update <id> <url> <secret>'
])
].join('\n')

hook.completion = (opts, cb) => {
validate('OF', [opts, cb])
Expand All@@ -32,7 +31,14 @@ const HookConfig = pudding({
unicode: {}
})

module.exports = (args, cb) => BB.try(() => hook(args)).nodeify(cb)
function UsageError () {
throw Object.assign(new Error(hook.usage), {code: 'EUSAGE'})
}

module.exports = (args, cb) => BB.try(() => hook(args)).then(
val => cb(null, val),
err => err.code === 'EUSAGE' ? cb(err.message) : cb(err)
)
function hook (args) {
return otplease(npmConfig(), opts => {
opts = HookConfig(opts)
Expand All@@ -46,6 +52,8 @@ function hook (args) {
case 'update':
case 'up':
return update(args[1], args[2], args[3], opts)
default:
UsageError()
}
})
}
Expand Down
34 changes: 30 additions & 4 deletions lib/org.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ org.subcommands = ['set', 'rm', 'ls']
org.usage =
'npm org set orgname username [developer | admin | owner]\n' +
'npm org rm orgname username\n' +
'npm org ls orgname'
'npm org ls orgname [<username>]'

const OrgConfig = figgyPudding({
json: {},
Expand DownExpand Up@@ -53,17 +53,27 @@ function org ([cmd, orgname, username, role], cb) {
case 'rm':
return orgRm(orgname, username, opts)
case 'ls':
return orgList(orgname, opts)
return orgList(orgname, username, opts)
default:
UsageError()
}
}).then(
x => cb(null, x),
err => err.code === 'EUSAGE' ? err.message : err
err => cb(err.code === 'EUSAGE' ? err.message : err)
)
}

function orgSet (org, user, role, opts) {
role = role || 'developer'
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
if (!['owner', 'admin', 'developer'].find(x => x === role)) {
throw new Error('Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.')
}
return liborg.set(org, user, role, opts).then(memDeets => {
if (opts.json) {
output(JSON.stringify(memDeets, null, 2))
Expand All@@ -83,6 +93,12 @@ function orgSet (org, user, role, opts) {
}

function orgRm (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
return liborg.rm(org, user, opts).then(() => {
return liborg.ls(org, opts)
}).then(roster => {
Expand All@@ -105,8 +121,18 @@ function orgRm (org, user, opts) {
})
}

function orgList (org, opts) {
function orgList (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
return liborg.ls(org, opts).then(roster => {
if (user) {
const newRoster = {}
if (roster[user]) {
newRoster[user] = roster[user]
}
roster = newRoster
}
if (opts.json) {
output(JSON.stringify(roster, null, 2))
} else if (opts.parseable) {
Expand Down
1 change: 1 addition & 0 deletions node_modules/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions node_modules/libcipm/CHANGELOG.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion node_modules/libcipm/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions node_modules/libcipm/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions node_modules/libnpm/node_modules/aproba/CHANGELOG.md

This file was deleted.

14 changes: 0 additions & 14 deletions node_modules/libnpm/node_modules/aproba/LICENSE

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
## v6.7.0 (2019-01-23):

Hey y'all! This is a quick hotfix release that includes some important fixes to
`npm@6.6.0` related to the large rewrite/refactor. We're tagging it as a feature
release because the changes involve some minor new features, and semver is
semver, but there's nothing major here.

### NEW FEATURES

* [`50463f58b`](https://github.com/npm/cli/commit/50463f58b4b70180a85d6d8c10fcf50d8970ef5e)
Improve usage errors to `npm org` commands and add optional filtering to `npm
org ls` subcommand.
([@zkat](https://github.com/zkat))

### BUGFIXES

* [`4027070b0`](https://github.com/npm/cli/commit/4027070b03be3bdae2515f2291de89b91f901df9)
Fix default usage printout for `npm org` so you actually see how it's supposed
to be used.
([@zkat](https://github.com/zkat))
* [`cfea6ea5b`](https://github.com/npm/cli/commit/cfea6ea5b67ec5e4ec57e3a9cb8c82d018cb5476)
fix default usage message for npm hook
([@zkat](https://github.com/zkat))

### DOCS

* [`e959e1421`](https://github.com/npm/cli/commit/e959e14217d751ddb295565fd75cc81de1ee0d5b)
Add manpage for `npm org` command.
([@zkat](https://github.com/zkat))

### DEPENDENCY BUMPS

* [`8543fc357`](https://github.com/npm/cli/commit/8543fc3576f64e91f7946d4c56a5ffb045b55156)
`pacote@9.4.0`: Fall back to "fullfat" packuments on ETARGET errors. This will
make it so that, when a package is published but the corgi follower hasn't
caught up, users can still install a freshly-published package.
([@zkat](https://github.com/zkat))
* [`75475043b`](https://github.com/npm/cli/commit/75475043b03a254b2e7db2c04c3f0baea31d8dc5)
[npm.community#4752](https://npm.community/t/npm-6-6-0-broke-authentication-with-npm-registry-couchapp/4752)
`libnpmpublish@1.1.1`: Fixes auth error for username/password legacy authentication.
([@sreeramjayan](https://github.com/sreeramjayan))
* [`0af8c00ac`](https://github.com/npm/cli/commit/0af8c00acb01849362ffca25b567cc62447c7175)
[npm.community#4746](https://npm.community/t/npm-6-6-0-release-breaking-docker-npm-ci-commands/4746)
`libcipm@3.0.3`: Fixes issue with "cannot run in wd" errors for run-scripts.
([@zkat](https://github.com/zkat))
* [`5a7962e46`](https://github.com/npm/cli/commit/5a7962e46f582c6bd91784b0ddc941ed45e9f802)
`write-file-atomic@2.4.2`:
Fixes issues with leaking `signal-exit` instances and file descriptors.
([@iarna](https://github.com/iarna))

## v6.6.0 (2019-01-17):

### REFACTORING OUT npm-REGISTRY-CLIENT
Expand Down
50 changes: 50 additions & 0 deletions doc/cli/npm-org.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
npm-org(1) -- Manage orgs
===================================

## SYNOPSIS

npm org set <orgname> <username> [developer | admin | owner]
npm org rm <orgname> <username>
npm org ls <orgname> [<username>]

## EXAMPLE

Add a new developer to an org:
```
$ npm org set my-org @mx-smith
```

Add a new admin to an org (or change a developer to an admin):
```
$ npm org set my-org @mx-santos admin
```

Remove a user from an org:
```
$ npm org rm my-org mx-santos
```

List all users in an org:
```
$ npm org ls my-org
```

List all users in JSON format:
```
$ npm org ls my-org --json
```

See what role a user has in an org:
```
$ npm org ls my-org @mx-santos
```

## DESCRIPTION

You can use the `npm org` commands to manage and view users of an organization.
It supports adding and removing users, changing their roles, listing them, and
finding specific ones and their roles.

## SEE ALSO

* [Documentation on npm Orgs](https://docs.npmjs.com/orgs/)
16 changes: 12 additions & 4 deletions lib/hook.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,15 +9,14 @@ const otplease = require('./utils/otplease.js')
const pudding = require('figgy-pudding')
const relativeDate = require('tiny-relative-date')
const Table = require('cli-table3')
const usage = require('./utils/usage.js')
const validate = require('aproba')

hook.usage = usage([
hook.usage = [
'npm hook add <pkg> <url> <secret> [--type=<type>]',
'npm hook ls [pkg]',
'npm hook rm <id>',
'npm hook update <id> <url> <secret>'
])
].join('\n')

hook.completion = (opts, cb) => {
validate('OF', [opts, cb])
Expand All@@ -32,7 +31,14 @@ const HookConfig = pudding({
unicode: {}
})

module.exports = (args, cb) => BB.try(() => hook(args)).nodeify(cb)
function UsageError () {
throw Object.assign(new Error(hook.usage), {code: 'EUSAGE'})
}

module.exports = (args, cb) => BB.try(() => hook(args)).then(
val => cb(null, val),
err => err.code === 'EUSAGE' ? cb(err.message) : cb(err)
)
function hook (args) {
return otplease(npmConfig(), opts => {
opts = HookConfig(opts)
Expand All@@ -46,6 +52,8 @@ function hook (args) {
case 'update':
case 'up':
return update(args[1], args[2], args[3], opts)
default:
UsageError()
}
})
}
Expand Down
34 changes: 30 additions & 4 deletions lib/org.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ org.subcommands = ['set', 'rm', 'ls']
org.usage =
'npm org set orgname username [developer | admin | owner]\n' +
'npm org rm orgname username\n' +
'npm org ls orgname'
'npm org ls orgname [<username>]'

const OrgConfig = figgyPudding({
json: {},
Expand DownExpand Up@@ -53,17 +53,27 @@ function org ([cmd, orgname, username, role], cb) {
case 'rm':
return orgRm(orgname, username, opts)
case 'ls':
return orgList(orgname, opts)
return orgList(orgname, username, opts)
default:
UsageError()
}
}).then(
x => cb(null, x),
err => err.code === 'EUSAGE' ? err.message : err
err => cb(err.code === 'EUSAGE' ? err.message : err)
)
}

function orgSet (org, user, role, opts) {
role = role || 'developer'
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
if (!['owner', 'admin', 'developer'].find(x => x === role)) {
throw new Error('Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.')
}
return liborg.set(org, user, role, opts).then(memDeets => {
if (opts.json) {
output(JSON.stringify(memDeets, null, 2))
Expand All@@ -83,6 +93,12 @@ function orgSet (org, user, role, opts) {
}

function orgRm (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
return liborg.rm(org, user, opts).then(() => {
return liborg.ls(org, opts)
}).then(roster => {
Expand All@@ -105,8 +121,18 @@ function orgRm (org, user, opts) {
})
}

function orgList (org, opts) {
function orgList (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
return liborg.ls(org, opts).then(roster => {
if (user) {
const newRoster = {}
if (roster[user]) {
newRoster[user] = roster[user]
}
roster = newRoster
}
if (opts.json) {
output(JSON.stringify(roster, null, 2))
} else if (opts.parseable) {
Expand Down
1 change: 1 addition & 0 deletions node_modules/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions node_modules/libcipm/CHANGELOG.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion node_modules/libcipm/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions node_modules/libcipm/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions node_modules/libnpm/node_modules/aproba/CHANGELOG.md

This file was deleted.

14 changes: 0 additions & 14 deletions node_modules/libnpm/node_modules/aproba/LICENSE

This file was deleted.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
## v6.7.0 (2019-01-23):

Hey y'all! This is a quick hotfix release that includes some important fixes to
`npm@6.6.0` related to the large rewrite/refactor. We're tagging it as a feature
release because the changes involve some minor new features, and semver is
semver, but there's nothing major here.

### NEW FEATURES

* [`50463f58b`](https://github.com/npm/cli/commit/50463f58b4b70180a85d6d8c10fcf50d8970ef5e)
Improve usage errors to `npm org` commands and add optional filtering to `npm
org ls` subcommand.
([@zkat](https://github.com/zkat))

### BUGFIXES

* [`4027070b0`](https://github.com/npm/cli/commit/4027070b03be3bdae2515f2291de89b91f901df9)
Fix default usage printout for `npm org` so you actually see how it's supposed
to be used.
([@zkat](https://github.com/zkat))
* [`cfea6ea5b`](https://github.com/npm/cli/commit/cfea6ea5b67ec5e4ec57e3a9cb8c82d018cb5476)
fix default usage message for npm hook
([@zkat](https://github.com/zkat))

### DOCS

* [`e959e1421`](https://github.com/npm/cli/commit/e959e14217d751ddb295565fd75cc81de1ee0d5b)
Add manpage for `npm org` command.
([@zkat](https://github.com/zkat))

### DEPENDENCY BUMPS

* [`8543fc357`](https://github.com/npm/cli/commit/8543fc3576f64e91f7946d4c56a5ffb045b55156)
`pacote@9.4.0`: Fall back to "fullfat" packuments on ETARGET errors. This will
make it so that, when a package is published but the corgi follower hasn't
caught up, users can still install a freshly-published package.
([@zkat](https://github.com/zkat))
* [`75475043b`](https://github.com/npm/cli/commit/75475043b03a254b2e7db2c04c3f0baea31d8dc5)
[npm.community#4752](https://npm.community/t/npm-6-6-0-broke-authentication-with-npm-registry-couchapp/4752)
`libnpmpublish@1.1.1`: Fixes auth error for username/password legacy authentication.
([@sreeramjayan](https://github.com/sreeramjayan))
* [`0af8c00ac`](https://github.com/npm/cli/commit/0af8c00acb01849362ffca25b567cc62447c7175)
[npm.community#4746](https://npm.community/t/npm-6-6-0-release-breaking-docker-npm-ci-commands/4746)
`libcipm@3.0.3`: Fixes issue with "cannot run in wd" errors for run-scripts.
([@zkat](https://github.com/zkat))
* [`5a7962e46`](https://github.com/npm/cli/commit/5a7962e46f582c6bd91784b0ddc941ed45e9f802)
`write-file-atomic@2.4.2`:
Fixes issues with leaking `signal-exit` instances and file descriptors.
([@iarna](https://github.com/iarna))

## v6.6.0 (2019-01-17):

### REFACTORING OUT npm-REGISTRY-CLIENT
Expand Down
50 changes: 50 additions & 0 deletions doc/cli/npm-org.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
npm-org(1) -- Manage orgs
===================================

## SYNOPSIS

npm org set <orgname> <username> [developer | admin | owner]
npm org rm <orgname> <username>
npm org ls <orgname> [<username>]

## EXAMPLE

Add a new developer to an org:
```
$ npm org set my-org @mx-smith
```

Add a new admin to an org (or change a developer to an admin):
```
$ npm org set my-org @mx-santos admin
```

Remove a user from an org:
```
$ npm org rm my-org mx-santos
```

List all users in an org:
```
$ npm org ls my-org
```

List all users in JSON format:
```
$ npm org ls my-org --json
```

See what role a user has in an org:
```
$ npm org ls my-org @mx-santos
```

## DESCRIPTION

You can use the `npm org` commands to manage and view users of an organization.
It supports adding and removing users, changing their roles, listing them, and
finding specific ones and their roles.

## SEE ALSO

* [Documentation on npm Orgs](https://docs.npmjs.com/orgs/)
16 changes: 12 additions & 4 deletions lib/hook.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,15 +9,14 @@ const otplease = require('./utils/otplease.js')
const pudding = require('figgy-pudding')
const relativeDate = require('tiny-relative-date')
const Table = require('cli-table3')
const usage = require('./utils/usage.js')
const validate = require('aproba')

hook.usage = usage([
hook.usage = [
'npm hook add <pkg> <url> <secret> [--type=<type>]',
'npm hook ls [pkg]',
'npm hook rm <id>',
'npm hook update <id> <url> <secret>'
])
].join('\n')

hook.completion = (opts, cb) => {
validate('OF', [opts, cb])
Expand All@@ -32,7 +31,14 @@ const HookConfig = pudding({
unicode: {}
})

module.exports = (args, cb) => BB.try(() => hook(args)).nodeify(cb)
function UsageError () {
throw Object.assign(new Error(hook.usage), {code: 'EUSAGE'})
}

module.exports = (args, cb) => BB.try(() => hook(args)).then(
val => cb(null, val),
err => err.code === 'EUSAGE' ? cb(err.message) : cb(err)
)
function hook (args) {
return otplease(npmConfig(), opts => {
opts = HookConfig(opts)
Expand All@@ -46,6 +52,8 @@ function hook (args) {
case 'update':
case 'up':
return update(args[1], args[2], args[3], opts)
default:
UsageError()
}
})
}
Expand Down
34 changes: 30 additions & 4 deletions lib/org.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,7 +14,7 @@ org.subcommands = ['set', 'rm', 'ls']
org.usage =
'npm org set orgname username [developer | admin | owner]\n' +
'npm org rm orgname username\n' +
'npm org ls orgname'
'npm org ls orgname [<username>]'

const OrgConfig = figgyPudding({
json: {},
Expand DownExpand Up@@ -53,17 +53,27 @@ function org ([cmd, orgname, username, role], cb) {
case 'rm':
return orgRm(orgname, username, opts)
case 'ls':
return orgList(orgname, opts)
return orgList(orgname, username, opts)
default:
UsageError()
}
}).then(
x => cb(null, x),
err => err.code === 'EUSAGE' ? err.message : err
err => cb(err.code === 'EUSAGE' ? err.message : err)
)
}

function orgSet (org, user, role, opts) {
role = role || 'developer'
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
if (!['owner', 'admin', 'developer'].find(x => x === role)) {
throw new Error('Third argument `role` must be one of `owner`, `admin`, or `developer`, with `developer` being the default value if omitted.')
}
return liborg.set(org, user, role, opts).then(memDeets => {
if (opts.json) {
output(JSON.stringify(memDeets, null, 2))
Expand All@@ -83,6 +93,12 @@ function orgSet (org, user, role, opts) {
}

function orgRm (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
if (!user) {
throw new Error('Second argument `username` is required.')
}
return liborg.rm(org, user, opts).then(() => {
return liborg.ls(org, opts)
}).then(roster => {
Expand All@@ -105,8 +121,18 @@ function orgRm (org, user, opts) {
})
}

function orgList (org, opts) {
function orgList (org, user, opts) {
if (!org) {
throw new Error('First argument `orgname` is required.')
}
return liborg.ls(org, opts).then(roster => {
if (user) {
const newRoster = {}
if (roster[user]) {
newRoster[user] = roster[user]
}
roster = newRoster
}
if (opts.json) {
output(JSON.stringify(roster, null, 2))
} else if (opts.parseable) {
Expand Down
1 change: 1 addition & 0 deletions node_modules/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions node_modules/libcipm/CHANGELOG.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion node_modules/libcipm/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 11 additions & 11 deletions node_modules/libcipm/package.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions node_modules/libnpm/node_modules/aproba/CHANGELOG.md

This file was deleted.

14 changes: 0 additions & 14 deletions node_modules/libnpm/node_modules/aproba/LICENSE

This file was deleted.

Loading