Compare commits
20 Commits
@verdaccio
...
@verdaccio
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a01bdbcc9 | ||
|
|
5ddfa5264c | ||
|
|
1cc00cf2ab | ||
|
|
086c4a7c3c | ||
|
|
babe5c3f6c | ||
|
|
0da7031e77 | ||
|
|
393125baa1 | ||
|
|
7fb5c45243 | ||
|
|
aecbd226de | ||
|
|
9ffa205076 | ||
|
|
1b217fd346 | ||
|
|
84373c4669 | ||
|
|
c17ee46519 | ||
|
|
6791c2bcfa | ||
|
|
9a2f4a4667 | ||
|
|
629cbdd6b5 | ||
|
|
19d272d10e | ||
|
|
6e21bee204 | ||
|
|
4932d1f47e | ||
|
|
cbdccf7177 |
15
.changeset/afraid-mice-obey.md
Normal file
15
.changeset/afraid-mice-obey.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
'@verdaccio/types': minor
|
||||
'@verdaccio/ui-theme': minor
|
||||
'@verdaccio/web': minor
|
||||
---
|
||||
|
||||
allow disable login on ui and endpoints
|
||||
|
||||
To be able disable the login, set `login: false`, anything else would enable login. This flag will disable access via UI and web endpoints.
|
||||
|
||||
```yml
|
||||
web:
|
||||
title: verdaccio
|
||||
login: false
|
||||
```
|
||||
11
.changeset/gentle-parrots-lay.md
Normal file
11
.changeset/gentle-parrots-lay.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
'@verdaccio/config': minor
|
||||
'@verdaccio/local-storage': minor
|
||||
'@verdaccio/e2e-ui': minor
|
||||
---
|
||||
|
||||
Some verdaccio modules depend on 'mkdirp' library which provides recursive directory creation functionality.
|
||||
NodeJS can do this out of the box since v.10.12. The last commit in 'mkdirp' was made in early 2016, and it's mid 2021 now.
|
||||
Time to stick with a built-in library solution!
|
||||
|
||||
- All 'mkdirp' calls are replaced with appropriate 'fs' calls.
|
||||
21
.changeset/healthy-bikes-behave.md
Normal file
21
.changeset/healthy-bikes-behave.md
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
'@verdaccio/cli': patch
|
||||
'@verdaccio/types': patch
|
||||
'@verdaccio/node-api': patch
|
||||
'@verdaccio/server': patch
|
||||
---
|
||||
|
||||
fix: restore logger on init
|
||||
|
||||
Enable logger after parse configuration and log the very first step on startup phase.
|
||||
|
||||
```bash
|
||||
warn --- experiments are enabled, it is recommended do not use experiments in production comment out this section to disable it
|
||||
info --- support for experiment [token] is disabled
|
||||
info --- support for experiment [search] is disabled
|
||||
(node:50831) Warning: config.logs is deprecated, rename configuration to "config.log"
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
info --- http address http://localhost:4873/
|
||||
info --- version: 6.0.0-6-next.11
|
||||
info --- server started
|
||||
```
|
||||
@@ -38,15 +38,18 @@
|
||||
"@verdaccio/e2e-cli": "1.0.0",
|
||||
"@verdaccio/e2e-ui": "1.0.0",
|
||||
"@verdaccio/cli-standalone": "6.0.0-alpha.3",
|
||||
"@verdaccio/cli-ui": "6.0.0-alpha.3",
|
||||
"@verdaccio/tarball": "11.0.0-alpha.3",
|
||||
"@verdaccio/url": "11.0.0-alpha.3"
|
||||
"@verdaccio/url": "11.0.0-alpha.3",
|
||||
"@verdaccio/fastify-migration": "6.0.0-6-next.9"
|
||||
},
|
||||
"changesets": [
|
||||
"afraid-mice-obey",
|
||||
"big-lobsters-sin",
|
||||
"few-cooks-destroy",
|
||||
"fifty-jars-rest",
|
||||
"gentle-parrots-lay",
|
||||
"gentle-trains-switch",
|
||||
"healthy-bikes-behave",
|
||||
"healthy-poets-compare",
|
||||
"hip-hounds-destroy",
|
||||
"late-adults-love",
|
||||
@@ -59,11 +62,13 @@
|
||||
"plenty-spiders-melt",
|
||||
"plenty-tables-refuse",
|
||||
"pretty-hounds-tap",
|
||||
"red-chefs-float",
|
||||
"shiny-chefs-heal",
|
||||
"smart-apricots-kneel",
|
||||
"spicy-frogs-press",
|
||||
"tender-bags-call",
|
||||
"three-pots-sit",
|
||||
"two-dolls-check"
|
||||
"two-dolls-check",
|
||||
"wild-jokes-beam"
|
||||
]
|
||||
}
|
||||
|
||||
12
.changeset/red-chefs-float.md
Normal file
12
.changeset/red-chefs-float.md
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
'@verdaccio/store': patch
|
||||
'@verdaccio/web': patch
|
||||
---
|
||||
|
||||
Fix the search by exact name of the package
|
||||
|
||||
Full package name queries was not finding anithing. It was happening
|
||||
becouse of stemmer of [lunr.js](https://lunrjs.com/).
|
||||
|
||||
To fix this, the stemmer of [lunr.js](https://lunrjs.com/) was removed from search pipeline.
|
||||
|
||||
32
.changeset/wild-jokes-beam.md
Normal file
32
.changeset/wild-jokes-beam.md
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
'@verdaccio/types': minor
|
||||
'@verdaccio/ui-theme': minor
|
||||
'@verdaccio/web': minor
|
||||
---
|
||||
|
||||
web: allow ui hide package managers on sidebar
|
||||
|
||||
If there is a package manager of preference over others, you can define the package managers to be displayed on the detail page and sidebar, just define in the `config.yaml` and web section the list of package managers to be displayed.
|
||||
|
||||
```
|
||||
web:
|
||||
title: Verdaccio
|
||||
sort_packages: asc
|
||||
primary_color: #cccccc
|
||||
pkgManagers:
|
||||
- pnpm
|
||||
- yarn
|
||||
# - npm
|
||||
```
|
||||
|
||||
To disable all package managers, just define empty:
|
||||
|
||||
```
|
||||
web:
|
||||
title: Verdaccio
|
||||
sort_packages: asc
|
||||
primary_color: #cccccc
|
||||
pkgManagers:
|
||||
```
|
||||
|
||||
and the section would be hidden.
|
||||
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@@ -2,7 +2,7 @@
|
||||
{
|
||||
"files.exclude": {
|
||||
"**/.nyc_output": true,
|
||||
"**/build": false,
|
||||
"**/build": true,
|
||||
"**/coverage": true,
|
||||
".idea": true,
|
||||
"storage_default_storage": true,
|
||||
|
||||
@@ -268,7 +268,7 @@ All commits message are going to be validated when they are created using husky
|
||||
|
||||
We use [changesets](https://github.com/atlassian/changesets) in order to generate a detailed Changelog as possible.
|
||||
|
||||
Add a changeset with your Pull Request is essential if you want your contribution get merged. To create a changeset please run:
|
||||
Add a changeset with your Pull Request is essential if you want your contribution get merged (unless is a change that does not affect library functionality, eg: typo, docs, readme, add additional test or linting code). To create a changeset please run:
|
||||
|
||||
```
|
||||
pnpm changeset
|
||||
|
||||
@@ -32,7 +32,7 @@ Google Cloud Storage** or create your own plugin.
|
||||
Install with npm:
|
||||
|
||||
```bash
|
||||
npm install --global verdaccio@6-next --https://registry.verdaccio.org/
|
||||
npm install --global verdaccio@6-next --registry https://registry.verdaccio.org/
|
||||
```
|
||||
|
||||
> Published on a temporary registry while setup is ready to publish on npmjs
|
||||
|
||||
12
SECURITY.md
12
SECURITY.md
@@ -4,11 +4,13 @@
|
||||
|
||||
The following table describes the versions of this project that are currently supported with security updates:
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 2.x | :x: |
|
||||
| 3.x | :x: |
|
||||
| 4.x | :white_check_mark: |
|
||||
| Version | Supported |
|
||||
| --------- | ---------------------------------------- |
|
||||
| 2.x | :x: |
|
||||
| 3.x | :x: |
|
||||
| 4.x | :white_check_mark: (until 1st July 2021) |
|
||||
| 5.x | :white_check_mark: |
|
||||
| 6.x alpha | :x: |
|
||||
|
||||
## Responsible disclosure security policy
|
||||
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
> Before run examples, build the local image by running `pnpm docker`.
|
||||
|
||||
- [Docker + Nginx + Verdaccio](v5/reverse_proxy/nginx/README.md)
|
||||
- [Docker + Nginx + Verdaccio](reverse_proxy/nginx/README.md)
|
||||
|
||||
76
docs/migration-v5-to-v6.md
Normal file
76
docs/migration-v5-to-v6.md
Normal file
@@ -0,0 +1,76 @@
|
||||
# Migration guide from Verdaccio 5 to Verdaccio 6
|
||||
|
||||
Notes regarding breaking changes for next major release.
|
||||
|
||||
> This list might growth over the development.
|
||||
|
||||
## Breaking changes
|
||||
|
||||
### New node-api interface [#2165](https://github.com/verdaccio/verdaccio/pull/2165)
|
||||
|
||||
If you are using the node-api, the new structure is Promise based and less arguments.
|
||||
|
||||
```js
|
||||
import { runServer } from '@verdaccio/node-api';
|
||||
// or
|
||||
import { runServer } from 'verdaccio';
|
||||
const app = await runServer(); // default configuration
|
||||
const app = await runServer('./config/config.yaml');
|
||||
const app = await runServer({ configuration });
|
||||
app.listen(4000, (event) => {
|
||||
// do something
|
||||
});
|
||||
```
|
||||
|
||||
### allow other password hashing algorithms [#1917](https://github.com/verdaccio/verdaccio/pull/1917)
|
||||
|
||||
The current implementation of the `htpasswd` module supports multiple hash formats on verify, but only `crypt` on sign in.
|
||||
`crypt` is an insecure old format, so to improve the security of the new `verdaccio` release we introduce the support of multiple hash algorithms on sign in step.
|
||||
|
||||
#### New hashing algorithms
|
||||
|
||||
The new possible hash algorithms to use are `bcrypt`, `md5`, `sha1`. `bcrypt` is chosen as a default, because of its customizable complexity and overall reliability. You can read more about them [here](https://httpd.apache.org/docs/2.4/misc/password_encryptions.html).
|
||||
|
||||
Two new properties are added to `auth` section in the configuration file:
|
||||
|
||||
- `algorithm` to choose the way you want to hash passwords.
|
||||
- `rounds` is used to determine `bcrypt` complexity. So one can improve security according to increasing computational power.
|
||||
|
||||
Example of the new `auth` config file section:
|
||||
|
||||
```yaml
|
||||
auth:
|
||||
htpasswd:
|
||||
file: ./htpasswd
|
||||
max_users: 1000
|
||||
# Hash algorithm, possible options are: "bcrypt", "md5", "sha1", "crypt".
|
||||
algorithm: bcrypt
|
||||
# Rounds number for "bcrypt", will be ignored for other algorithms.
|
||||
rounds: 10
|
||||
```
|
||||
|
||||
### Refactor config module, experiments renamed to flags [#1996](https://github.com/verdaccio/verdaccio/pull/1996)
|
||||
|
||||
- The `experiments` configuration is renamed to `flags`. The functionality is exactly the same.
|
||||
|
||||
```js
|
||||
flags: token: false;
|
||||
search: false;
|
||||
```
|
||||
|
||||
- The `self_path` property from the config file is being removed in favor of `config_file` full path.
|
||||
- Refactor `config` module, better types and utilities
|
||||
|
||||
### legacy token signature by removing crypto.createDecipher is deprecated [#1953](https://github.com/verdaccio/verdaccio/pull/1953)
|
||||
|
||||
- Replace signature handler for legacy tokens by removing deprecated crypto.createDecipher by createCipheriv
|
||||
- **The new signature invalidates all previous tokens generated by Verdaccio 5 or previous versions**.
|
||||
- The secret key must have 32 characters long
|
||||
> Remediation, update `.verdaccio-db.json` secret field with a secret key with 32 characters.
|
||||
|
||||
#### New environment variables
|
||||
|
||||
Introduce environment variables for legacy tokens.
|
||||
|
||||
- `VERDACCIO_LEGACY_ALGORITHM`: Allows to define the specific algorithm for the token signature which by default is `aes-256-ctr`
|
||||
- `VERDACCIO_LEGACY_ENCRYPTION_KEY`: By default, the token stores in the database, but using this variable allows to get it from memory
|
||||
@@ -1,5 +1,23 @@
|
||||
# @verdaccio/api
|
||||
|
||||
## 6.0.0-6-next.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5ddfa526]
|
||||
- @verdaccio/store@6.0.0-6-next.9
|
||||
|
||||
## 6.0.0-6-next.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b217fd3]
|
||||
- @verdaccio/config@6.0.0-6-next.6
|
||||
- @verdaccio/auth@6.0.0-6-next.8
|
||||
- @verdaccio/hooks@6.0.0-6-next.4
|
||||
- @verdaccio/store@6.0.0-6-next.8
|
||||
- @verdaccio/middleware@6.0.0-6-next.8
|
||||
|
||||
## 6.0.0-6-next.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/api",
|
||||
"version": "6.0.0-6-next.9",
|
||||
"version": "6.0.0-6-next.11",
|
||||
"description": "loaders logic",
|
||||
"main": "./build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
@@ -39,13 +39,13 @@
|
||||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@verdaccio/auth": "workspace:6.0.0-6-next.7",
|
||||
"@verdaccio/auth": "workspace:6.0.0-6-next.8",
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/hooks": "workspace:6.0.0-6-next.4",
|
||||
"@verdaccio/logger": "workspace:6.0.0-6-next.4",
|
||||
"@verdaccio/middleware": "workspace:6.0.0-6-next.7",
|
||||
"@verdaccio/store": "workspace:6.0.0-6-next.7",
|
||||
"@verdaccio/middleware": "workspace:6.0.0-6-next.8",
|
||||
"@verdaccio/store": "workspace:6.0.0-6-next.9",
|
||||
"@verdaccio/tarball": "workspace:11.0.0-6-next.5",
|
||||
"@verdaccio/utils": "workspace:6.0.0-6-next.4",
|
||||
"cookies": "0.8.0",
|
||||
@@ -56,8 +56,8 @@
|
||||
"semver": "7.3.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/server": "workspace:6.0.0-6-next.10",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4",
|
||||
"@verdaccio/server": "workspace:6.0.0-6-next.15",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7",
|
||||
"body-parser": "1.19.0",
|
||||
"lodash": "^4.17.20",
|
||||
"supertest": "next"
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @verdaccio/auth
|
||||
|
||||
## 6.0.0-6-next.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b217fd3]
|
||||
- @verdaccio/config@6.0.0-6-next.6
|
||||
- @verdaccio/loaders@6.0.0-6-next.4
|
||||
|
||||
## 6.0.0-6-next.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/auth",
|
||||
"version": "6.0.0-6-next.7",
|
||||
"version": "6.0.0-6-next.8",
|
||||
"description": "logger",
|
||||
"main": "./build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
@@ -40,7 +40,7 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/loaders": "workspace:6.0.0-6-next.4",
|
||||
"@verdaccio/logger": "workspace:6.0.0-6-next.4",
|
||||
"@verdaccio/utils": "workspace:6.0.0-6-next.4",
|
||||
@@ -51,8 +51,8 @@
|
||||
"lodash": "4.17.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/mock": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/mock": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
|
||||
@@ -1,5 +1,59 @@
|
||||
# @verdaccio/cli
|
||||
|
||||
## 6.0.0-6-next.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/node-api@6.0.0-6-next.16
|
||||
|
||||
## 6.0.0-6-next.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/fastify-migration@6.0.0-6-next.9
|
||||
- @verdaccio/logger@6.0.0-6-next.4
|
||||
- @verdaccio/node-api@6.0.0-6-next.15
|
||||
|
||||
## 6.0.0-6-next.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/fastify-migration@6.0.0-6-next.9
|
||||
- @verdaccio/logger@6.0.0-6-next.4
|
||||
- @verdaccio/node-api@6.0.0-6-next.14
|
||||
|
||||
## 6.0.0-6-next.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b217fd3]
|
||||
- @verdaccio/config@6.0.0-6-next.6
|
||||
- @verdaccio/node-api@6.0.0-6-next.13
|
||||
|
||||
## 6.0.0-6-next.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 19d272d1: fix: restore logger on init
|
||||
|
||||
Enable logger after parse configuration and log the very first step on startup phase.
|
||||
|
||||
```bash
|
||||
warn --- experiments are enabled, it is recommended do not use experiments in production comment out this section to disable it
|
||||
info --- support for experiment [token] is disabled
|
||||
info --- support for experiment [search] is disabled
|
||||
(node:50831) Warning: config.logs is deprecated, rename configuration to "config.log"
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
info --- http address http://localhost:4873/
|
||||
info --- version: 6.0.0-6-next.11
|
||||
info --- server started
|
||||
```
|
||||
|
||||
- Updated dependencies [19d272d1]
|
||||
- @verdaccio/node-api@6.0.0-6-next.12
|
||||
- @verdaccio/fastify-migration@6.0.0-6-next.9
|
||||
- @verdaccio/logger@6.0.0-6-next.4
|
||||
|
||||
## 6.0.0-6-next.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/cli",
|
||||
"version": "6.0.0-6-next.11",
|
||||
"version": "6.0.0-6-next.16",
|
||||
"author": {
|
||||
"name": "Juan Picado",
|
||||
"email": "juanpicado19@gmail.com"
|
||||
@@ -26,7 +26,7 @@
|
||||
"verdaccio"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=10",
|
||||
"node": ">=12",
|
||||
"npm": ">=6"
|
||||
},
|
||||
"description": "verdaccio CLI",
|
||||
@@ -43,9 +43,10 @@
|
||||
"build": "pnpm run build:js && pnpm run build:types"
|
||||
},
|
||||
"dependencies": {
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/cli-ui": "workspace:6.0.0-alpha.3",
|
||||
"@verdaccio/node-api": "workspace:6.0.0-6-next.11",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/logger": "workspace:6.0.0-6-next.4",
|
||||
"@verdaccio/node-api": "workspace:6.0.0-6-next.16",
|
||||
"@verdaccio/fastify-migration": "workspace:6.0.0-6-next.9",
|
||||
"commander": "6.2.0",
|
||||
"clipanion": "3.0.0-rc.11",
|
||||
"envinfo": "7.4.0",
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import { displayError } from '@verdaccio/cli-ui';
|
||||
import { Cli } from 'clipanion';
|
||||
|
||||
import { InfoCommand } from './commands/info';
|
||||
import { InitCommand } from './commands/init';
|
||||
import { VersionCommand } from './commands/version';
|
||||
import { NewServer } from './commands/newServer';
|
||||
import { isVersionValid, MIN_NODE_VERSION } from './utils';
|
||||
|
||||
if (process.getuid && process.getuid() === 0) {
|
||||
@@ -27,10 +28,11 @@ const cli = new Cli({
|
||||
cli.register(InfoCommand);
|
||||
cli.register(InitCommand);
|
||||
cli.register(VersionCommand);
|
||||
cli.register(NewServer);
|
||||
cli.runExit(args, Cli.defaultContext);
|
||||
|
||||
process.on('uncaughtException', function (err) {
|
||||
displayError(
|
||||
console.error(
|
||||
// eslint-disable-next-line max-len
|
||||
`uncaught exception, please report (https://github.com/verdaccio/verdaccio/issues) this: \n${err.stack}`
|
||||
);
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { Command, Option } from 'clipanion';
|
||||
import { findConfigFile, parseConfigFile } from '@verdaccio/config';
|
||||
import { setup, logger } from '@verdaccio/logger';
|
||||
import { initServer } from '@verdaccio/node-api';
|
||||
import { ConfigRuntime } from '@verdaccio/types';
|
||||
|
||||
export const DEFAULT_PROCESS_NAME: string = 'verdaccio';
|
||||
|
||||
@@ -41,10 +43,23 @@ export class InitCommand extends Command {
|
||||
description: 'use this configuration file (default: ./config.yaml)',
|
||||
});
|
||||
|
||||
private initLogger(logConfig: ConfigRuntime) {
|
||||
try {
|
||||
if (logConfig.logs) {
|
||||
process.emitWarning('config.logs is deprecated, rename configuration to "config.log"');
|
||||
}
|
||||
// FUTURE: remove fallback when is ready
|
||||
setup(logConfig.log || logConfig.logs);
|
||||
} catch {
|
||||
throw new Error('error on init logger');
|
||||
}
|
||||
}
|
||||
|
||||
public async execute() {
|
||||
try {
|
||||
const configPathLocation = findConfigFile(this.config as string);
|
||||
const configParsed = parseConfigFile(configPathLocation);
|
||||
this.initLogger(configParsed);
|
||||
const { web } = configParsed;
|
||||
|
||||
process.title = web?.title || DEFAULT_PROCESS_NAME;
|
||||
@@ -52,6 +67,7 @@ export class InitCommand extends Command {
|
||||
const { version, name } = require('../../package.json');
|
||||
|
||||
await initServer(configParsed, this.port as string, version, name);
|
||||
logger.info('server started');
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
|
||||
38
packages/cli/src/commands/newServer.ts
Normal file
38
packages/cli/src/commands/newServer.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { Command, Option } from 'clipanion';
|
||||
import { findConfigFile, parseConfigFile } from '@verdaccio/config';
|
||||
import server from '@verdaccio/fastify-migration';
|
||||
|
||||
export const DEFAULT_PROCESS_NAME: string = 'verdaccio';
|
||||
|
||||
/**
|
||||
* This command is intended to run the server with Fastify
|
||||
* as a migration step.
|
||||
*/
|
||||
export class NewServer extends Command {
|
||||
public static paths = [['new']];
|
||||
|
||||
private port = Option.String('-l,-p,--listen,--port', {
|
||||
description: 'host:port number to listen on (default: localhost:4873)',
|
||||
});
|
||||
|
||||
private config = Option.String('-c,--config', {
|
||||
description: 'use this configuration file (default: ./config.yaml)',
|
||||
});
|
||||
|
||||
public async execute() {
|
||||
try {
|
||||
const configPathLocation = findConfigFile(this.config as string);
|
||||
const configParsed = parseConfigFile(configPathLocation);
|
||||
const { web } = configParsed;
|
||||
|
||||
process.title = web?.title || DEFAULT_PROCESS_NAME;
|
||||
// const { version, name } = require('../../package.json');
|
||||
const ser = await server();
|
||||
await ser.listen(4000);
|
||||
console.log('fastify running on port 4000');
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,8 +13,14 @@
|
||||
{
|
||||
"path": "../core/cli-ui"
|
||||
},
|
||||
{
|
||||
"path": "../core/server"
|
||||
},
|
||||
{
|
||||
"path": "../node-api"
|
||||
},
|
||||
{
|
||||
"path": "../logger"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# @verdaccio/config
|
||||
|
||||
## 6.0.0-6-next.6
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 1b217fd3: Some verdaccio modules depend on 'mkdirp' library which provides recursive directory creation functionality.
|
||||
NodeJS can do this out of the box since v.10.12. The last commit in 'mkdirp' was made in early 2016, and it's mid 2021 now.
|
||||
Time to stick with a built-in library solution!
|
||||
|
||||
- All 'mkdirp' calls are replaced with appropriate 'fs' calls.
|
||||
|
||||
## 6.0.0-6-next.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/config",
|
||||
"version": "6.0.0-6-next.5",
|
||||
"version": "6.0.0-6-next.6",
|
||||
"description": "logger",
|
||||
"main": "./build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
@@ -45,7 +45,6 @@
|
||||
"js-yaml": "3.14.0",
|
||||
"lodash": "^4.17.20",
|
||||
"minimatch": "3.0.4",
|
||||
"mkdirp": "0.5.5",
|
||||
"yup": "^0.29.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -2,7 +2,6 @@ import fs from 'fs';
|
||||
import path from 'path';
|
||||
import Path from 'path';
|
||||
import _ from 'lodash';
|
||||
import mkdirp from 'mkdirp';
|
||||
import buildDebug from 'debug';
|
||||
|
||||
import { CHARACTER_ENCODING } from '@verdaccio/commons-api';
|
||||
@@ -67,7 +66,7 @@ export function readDefaultConfig(): Buffer {
|
||||
}
|
||||
|
||||
function createConfigFolder(configLocation): void {
|
||||
mkdirp.sync(Path.dirname(configLocation.path));
|
||||
fs.mkdirSync(Path.dirname(configLocation.path), { recursive: true });
|
||||
debug(`Creating default config file in %o`, configLocation?.path);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"extends": "../../../.babelrc",
|
||||
"presets": [
|
||||
"@babel/preset-react"
|
||||
]
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"rules": {
|
||||
"no-console": 0
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
export * from './messages';
|
||||
@@ -1,25 +0,0 @@
|
||||
import chalk from 'chalk';
|
||||
import terminalLink from 'terminal-link';
|
||||
|
||||
export const PRIMARY_COLOR = `#24394e`;
|
||||
|
||||
export function displayMessage(message: string) {
|
||||
console.log(chalk.hex(PRIMARY_COLOR).bold(message));
|
||||
}
|
||||
|
||||
export function displayWarning(message: string) {
|
||||
console.log(chalk.yellow.bold(message));
|
||||
}
|
||||
|
||||
export function displayError(message: string) {
|
||||
console.log(chalk.red.bold(message));
|
||||
}
|
||||
|
||||
export function displayLink(url: string) {
|
||||
if (terminalLink.isSupported) {
|
||||
const link = terminalLink(url, url);
|
||||
return chalk.blue.underline(link);
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
describe('cli ui', () => {
|
||||
test.todo('add required test for this module');
|
||||
});
|
||||
@@ -40,7 +40,7 @@
|
||||
"lockfile": "1.0.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf ./build",
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/bcryptjs": "^2.4.2",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7",
|
||||
"mockdate": "^3.0.2"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# Change Log
|
||||
|
||||
## 11.0.0-6-next.6
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 1b217fd3: Some verdaccio modules depend on 'mkdirp' library which provides recursive directory creation functionality.
|
||||
NodeJS can do this out of the box since v.10.12. The last commit in 'mkdirp' was made in early 2016, and it's mid 2021 now.
|
||||
Time to stick with a built-in library solution!
|
||||
|
||||
- All 'mkdirp' calls are replaced with appropriate 'fs' calls.
|
||||
|
||||
## 11.0.0-6-next.5
|
||||
|
||||
### Major Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/local-storage",
|
||||
"version": "11.0.0-6-next.5",
|
||||
"version": "11.0.0-6-next.6",
|
||||
"description": "Local storage implementation",
|
||||
"keywords": [
|
||||
"private",
|
||||
@@ -43,12 +43,11 @@
|
||||
"async": "^3.2.0",
|
||||
"debug": "^4.1.1",
|
||||
"lodash": "^4.17.20",
|
||||
"lowdb": "1.0.0",
|
||||
"mkdirp": "^0.5.5"
|
||||
"lowdb": "1.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/minimatch": "^3.0.3",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7",
|
||||
"minimatch": "^3.0.4",
|
||||
"rmdir-sync": "^1.0.1"
|
||||
},
|
||||
|
||||
@@ -4,7 +4,6 @@ import buildDebug from 'debug';
|
||||
|
||||
import _ from 'lodash';
|
||||
import async from 'async';
|
||||
import mkdirp from 'mkdirp';
|
||||
import {
|
||||
Callback,
|
||||
Config,
|
||||
@@ -276,10 +275,9 @@ class LocalDatabase extends TokenActions implements IPluginStorage<{}> {
|
||||
}
|
||||
// Uses sync to prevent ugly race condition
|
||||
try {
|
||||
// https://www.npmjs.com/package/mkdirp#mkdirpsyncdir-opts
|
||||
const folderName = Path.dirname(this.path);
|
||||
debug('creating folder %o', folderName);
|
||||
mkdirp.sync(folderName);
|
||||
fs.mkdirSync(folderName, { recursive: true });
|
||||
debug('sync folder %o created succeed', folderName);
|
||||
} catch (err) {
|
||||
debug('sync create folder has failed with error: %o', err);
|
||||
|
||||
@@ -5,7 +5,6 @@ import path from 'path';
|
||||
import buildDebug from 'debug';
|
||||
|
||||
import _ from 'lodash';
|
||||
import mkdirp from 'mkdirp';
|
||||
import { UploadTarball, ReadTarball } from '@verdaccio/streams';
|
||||
import { unlockFile, readFile } from '@verdaccio/file-locking';
|
||||
import { Callback, Logger, Package, ILocalPackageManager, IUploadTarball } from '@verdaccio/types';
|
||||
@@ -353,7 +352,7 @@ export default class LocalFS implements ILocalFSPackageManager {
|
||||
|
||||
createTempFile((err) => {
|
||||
if (err && err.code === noSuchFile) {
|
||||
mkdirp(path.dirname(dest), function (err) {
|
||||
fs.mkdir(path.dirname(dest), { recursive: true }, function (err) {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
|
||||
import mkdirp from 'mkdirp';
|
||||
import rm from 'rmdir-sync';
|
||||
import { Logger, ILocalPackageManager, Package } from '@verdaccio/types';
|
||||
|
||||
@@ -113,7 +112,7 @@ describe('Local FS test', () => {
|
||||
|
||||
describe('removePackage() group', () => {
|
||||
beforeEach(() => {
|
||||
mkdirp.sync(path.join(localTempStorage, '_toDelete'));
|
||||
fs.mkdirSync(path.join(localTempStorage, '_toDelete'), { recursive: true });
|
||||
});
|
||||
|
||||
test('removePackage() success', (done) => {
|
||||
@@ -183,7 +182,7 @@ describe('Local FS test', () => {
|
||||
beforeEach(() => {
|
||||
const writeTarballFolder: string = path.join(localTempStorage, '_writeTarball');
|
||||
rm(writeTarballFolder);
|
||||
mkdirp.sync(writeTarballFolder);
|
||||
fs.mkdirSync(writeTarballFolder, { recursive: true });
|
||||
});
|
||||
|
||||
test('writeTarball() success', (done) => {
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
"marked": "1.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf ./build",
|
||||
|
||||
3
packages/core/server/.babelrc
Normal file
3
packages/core/server/.babelrc
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": "../../../.babelrc"
|
||||
}
|
||||
6
packages/core/server/.eslintignore
Normal file
6
packages/core/server/.eslintignore
Normal file
@@ -0,0 +1,6 @@
|
||||
node_modules
|
||||
coverage/
|
||||
lib/
|
||||
.nyc_output
|
||||
tests-report/
|
||||
build/
|
||||
5
packages/core/server/.eslintrc.json
Normal file
5
packages/core/server/.eslintrc.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"rules": {
|
||||
"@typescript-eslint/no-use-before-define": "off"
|
||||
}
|
||||
}
|
||||
1
packages/core/server/.gitignore
vendored
Normal file
1
packages/core/server/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
lib/
|
||||
21
packages/core/server/LICENSE
Normal file
21
packages/core/server/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019 Verdaccio
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
9
packages/core/server/README.md
Normal file
9
packages/core/server/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# Server Fastify (migration)
|
||||
|
||||
A package intended to start a migration from Express to fastify. (WIP).
|
||||
|
||||
Run from root folder
|
||||
|
||||
```js
|
||||
pnpm debug -- new
|
||||
```
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@verdaccio/cli-ui",
|
||||
"version": "6.0.0-alpha.3",
|
||||
"description": "cli ui components",
|
||||
"name": "@verdaccio/fastify-migration",
|
||||
"version": "6.0.0-6-next.9",
|
||||
"description": "Fastify server migration package",
|
||||
"keywords": [
|
||||
"private",
|
||||
"package",
|
||||
@@ -13,13 +13,19 @@
|
||||
"server",
|
||||
"verdaccio"
|
||||
],
|
||||
"main": "./build/index.js",
|
||||
"types": "./build/index.d.ts",
|
||||
"author": "Juan Picado <juanpicado19@gmail.com>",
|
||||
"license": "MIT",
|
||||
"homepage": "https://verdaccio.org",
|
||||
"engines": {
|
||||
"node": ">=12",
|
||||
"npm": ">=6"
|
||||
},
|
||||
"repository": {
|
||||
"type": "https",
|
||||
"url": "https://github.com/verdaccio/verdaccio",
|
||||
"directory": "packages/core/cli-ui"
|
||||
"directory": "packages/core/streams"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/verdaccio/verdaccio/issues"
|
||||
@@ -27,22 +33,15 @@
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"main": "build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
"files": [
|
||||
"build"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=10",
|
||||
"npm": ">=6"
|
||||
},
|
||||
"dependencies": {
|
||||
"chalk": "^4.1.0",
|
||||
"terminal-link": "^2.1.1"
|
||||
"fastify": "3.14.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf ./build",
|
||||
"test": "cross-env NODE_ENV=test BABEL_ENV=test jest",
|
||||
"type-check": "tsc --noEmit -p tsconfig.build.json",
|
||||
"build:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
|
||||
"build:js": "babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps",
|
||||
"watch": "pnpm build:js -- --watch",
|
||||
1
packages/core/server/src/index.ts
Normal file
1
packages/core/server/src/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { default } from './server';
|
||||
13
packages/core/server/src/server.ts
Normal file
13
packages/core/server/src/server.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import fastify from 'fastify';
|
||||
|
||||
async function startServer() {
|
||||
const app = fastify();
|
||||
|
||||
app.get('/', async (request, reply) => {
|
||||
return { hello: 'world' };
|
||||
});
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
export default startServer;
|
||||
@@ -2,10 +2,8 @@
|
||||
"extends": "../../../tsconfig.reference.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": "./src",
|
||||
"outDir": "./build",
|
||||
"composite": true,
|
||||
"declaration": true
|
||||
"outDir": "./build"
|
||||
},
|
||||
"include": ["src/**/*.ts"],
|
||||
"include": ["src/**/*"],
|
||||
"exclude": ["src/**/*.test.ts"]
|
||||
}
|
||||
@@ -34,7 +34,7 @@
|
||||
"access": "public"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf ./build",
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
"@verdaccio/utils": "workspace:6.0.0-6-next.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7",
|
||||
"express": "^4.17.1",
|
||||
"node-mocks-http": "^1.10.1"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,69 @@
|
||||
# Change Log
|
||||
|
||||
## 11.0.0-6-next.7
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 0da7031e: allow disable login on ui and endpoints
|
||||
|
||||
To be able disable the login, set `login: false`, anything else would enable login. This flag will disable access via UI and web endpoints.
|
||||
|
||||
```yml
|
||||
web:
|
||||
title: verdaccio
|
||||
login: false
|
||||
```
|
||||
|
||||
## 11.0.0-6-next.6
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- aecbd226: web: allow ui hide package managers on sidebar
|
||||
|
||||
If there is a package manager of preference over others, you can define the package managers to be displayed on the detail page and sidebar, just define in the `config.yaml` and web section the list of package managers to be displayed.
|
||||
|
||||
```
|
||||
web:
|
||||
title: Verdaccio
|
||||
sort_packages: asc
|
||||
primary_color: #cccccc
|
||||
pkgManagers:
|
||||
- pnpm
|
||||
- yarn
|
||||
# - npm
|
||||
```
|
||||
|
||||
To disable all package managers, just define empty:
|
||||
|
||||
```
|
||||
web:
|
||||
title: Verdaccio
|
||||
sort_packages: asc
|
||||
primary_color: #cccccc
|
||||
pkgManagers:
|
||||
```
|
||||
|
||||
and the section would be hidden.
|
||||
|
||||
## 11.0.0-6-next.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 19d272d1: fix: restore logger on init
|
||||
|
||||
Enable logger after parse configuration and log the very first step on startup phase.
|
||||
|
||||
```bash
|
||||
warn --- experiments are enabled, it is recommended do not use experiments in production comment out this section to disable it
|
||||
info --- support for experiment [token] is disabled
|
||||
info --- support for experiment [search] is disabled
|
||||
(node:50831) Warning: config.logs is deprecated, rename configuration to "config.log"
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
info --- http address http://localhost:4873/
|
||||
info --- version: 6.0.0-6-next.11
|
||||
info --- server started
|
||||
```
|
||||
|
||||
## 11.0.0-6-next.4
|
||||
|
||||
### Major Changes
|
||||
|
||||
64
packages/core/types/index.d.ts
vendored
64
packages/core/types/index.d.ts
vendored
@@ -15,6 +15,51 @@ declare module '@verdaccio/types' {
|
||||
url?: string;
|
||||
}
|
||||
|
||||
type PackageManagers = 'pnpm' | 'yarn' | 'npm';
|
||||
|
||||
// FUTURE: WebConf and TemplateUIOptions should be merged .
|
||||
type CommonWebConf = {
|
||||
title?: string;
|
||||
logo?: string;
|
||||
favicon?: string;
|
||||
gravatar?: boolean;
|
||||
sort_packages?: string;
|
||||
darkMode?: boolean;
|
||||
url_prefix?: string;
|
||||
language?: string;
|
||||
login?: boolean;
|
||||
scope?: string;
|
||||
pkgManagers?: PackageManagers[];
|
||||
};
|
||||
|
||||
/**
|
||||
* Options are passed to the index.html
|
||||
*/
|
||||
export type TemplateUIOptions = {
|
||||
uri?: string;
|
||||
darkMode?: boolean;
|
||||
protocol?: string;
|
||||
host?: string;
|
||||
base: string;
|
||||
primaryColor?: string;
|
||||
version?: string;
|
||||
logoURI?: string;
|
||||
} & CommonWebConf;
|
||||
|
||||
/**
|
||||
* Options on config.yaml for web
|
||||
*/
|
||||
type WebConf = {
|
||||
// FIXME: rename to primaryColor and move it to CommonWebConf
|
||||
primary_color?: string;
|
||||
enable?: boolean;
|
||||
scriptsHead?: string[];
|
||||
scriptsBodyAfter?: string[];
|
||||
metaScripts?: string[];
|
||||
bodyBefore?: string[];
|
||||
bodyAfter?: string[];
|
||||
} & CommonWebConf;
|
||||
|
||||
interface Dist {
|
||||
integrity?: string;
|
||||
shasum: string;
|
||||
@@ -276,23 +321,6 @@ declare module '@verdaccio/types' {
|
||||
interface ListenAddress {
|
||||
[key: string]: string;
|
||||
}
|
||||
|
||||
interface WebConf {
|
||||
enable?: boolean;
|
||||
title?: string;
|
||||
logo?: string;
|
||||
favicon?: string;
|
||||
gravatar?: boolean;
|
||||
sort_packages?: string;
|
||||
scriptsHead?: string[];
|
||||
scriptsBodyAfter?: string[];
|
||||
metaScripts?: string[];
|
||||
bodyBefore?: string[];
|
||||
bodyAfter?: string[];
|
||||
darkMode?: boolean;
|
||||
primary_color?: string;
|
||||
}
|
||||
|
||||
interface HttpsConfKeyCert {
|
||||
key: string;
|
||||
cert: string;
|
||||
@@ -371,7 +399,9 @@ declare module '@verdaccio/types' {
|
||||
storage?: string | void;
|
||||
packages: PackageList;
|
||||
uplinks: UpLinksConfList;
|
||||
// @deprecated in favor of log
|
||||
logs?: LoggerConf[];
|
||||
log?: LoggerConf[];
|
||||
web?: WebConf;
|
||||
auth?: AuthConf;
|
||||
security: Security;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/types",
|
||||
"version": "11.0.0-6-next.4",
|
||||
"version": "11.0.0-6-next.7",
|
||||
"description": "verdaccio types definitions",
|
||||
"keywords": [
|
||||
"private",
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"node-mocks-http": "^1.10.1",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf ./build",
|
||||
|
||||
@@ -38,10 +38,10 @@
|
||||
"request": "2.87.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/auth": "workspace:6.0.0-6-next.7",
|
||||
"@verdaccio/auth": "workspace:6.0.0-6-next.8",
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7",
|
||||
"nock": "^13.0.4"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/mock": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/mock": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"homepage": "https://verdaccio.org",
|
||||
"keywords": [
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
"build": "pnpm run build:js && pnpm run build:types"
|
||||
},
|
||||
"dependencies": {
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3",
|
||||
"dayjs": "1.8.36",
|
||||
"fast-safe-stringify": "2.0.7",
|
||||
"kleur": "3.0.3",
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/pino": "^6.3.3",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @verdaccio/middleware
|
||||
|
||||
## 6.0.0-6-next.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/auth@6.0.0-6-next.8
|
||||
|
||||
## 6.0.0-6-next.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/middleware",
|
||||
"version": "6.0.0-6-next.7",
|
||||
"version": "6.0.0-6-next.8",
|
||||
"description": "loaders logic",
|
||||
"main": "./build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
@@ -39,7 +39,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": "^4.3.1",
|
||||
"@verdaccio/auth": "workspace:6.0.0-6-next.7",
|
||||
"@verdaccio/auth": "workspace:6.0.0-6-next.8",
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3",
|
||||
"@verdaccio/logger": "workspace:6.0.0-6-next.4",
|
||||
"@verdaccio/utils": "workspace:6.0.0-6-next.4",
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# @verdaccio/mock
|
||||
|
||||
## 6.0.0-6-next.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b217fd3]
|
||||
- @verdaccio/config@6.0.0-6-next.6
|
||||
|
||||
## 6.0.0-6-next.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/mock",
|
||||
"version": "6.0.0-6-next.5",
|
||||
"version": "6.0.0-6-next.6",
|
||||
"author": {
|
||||
"name": "Juan Picado",
|
||||
"email": "juanpicado19@gmail.com"
|
||||
@@ -40,7 +40,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/utils": "workspace:6.0.0-6-next.4",
|
||||
"debug": "^4.2.0",
|
||||
"fs-extra": "^8.1.0",
|
||||
@@ -49,7 +49,7 @@
|
||||
"supertest": "^4.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
|
||||
@@ -1,5 +1,56 @@
|
||||
# @verdaccio/node-api
|
||||
|
||||
## 6.0.0-6-next.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/server@6.0.0-6-next.15
|
||||
|
||||
## 6.0.0-6-next.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/logger@6.0.0-6-next.4
|
||||
- @verdaccio/server@6.0.0-6-next.14
|
||||
|
||||
## 6.0.0-6-next.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/logger@6.0.0-6-next.4
|
||||
- @verdaccio/server@6.0.0-6-next.13
|
||||
|
||||
## 6.0.0-6-next.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b217fd3]
|
||||
- @verdaccio/config@6.0.0-6-next.6
|
||||
- @verdaccio/server@6.0.0-6-next.12
|
||||
|
||||
## 6.0.0-6-next.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 19d272d1: fix: restore logger on init
|
||||
|
||||
Enable logger after parse configuration and log the very first step on startup phase.
|
||||
|
||||
```bash
|
||||
warn --- experiments are enabled, it is recommended do not use experiments in production comment out this section to disable it
|
||||
info --- support for experiment [token] is disabled
|
||||
info --- support for experiment [search] is disabled
|
||||
(node:50831) Warning: config.logs is deprecated, rename configuration to "config.log"
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
info --- http address http://localhost:4873/
|
||||
info --- version: 6.0.0-6-next.11
|
||||
info --- server started
|
||||
```
|
||||
|
||||
- Updated dependencies [19d272d1]
|
||||
- @verdaccio/server@6.0.0-6-next.11
|
||||
- @verdaccio/logger@6.0.0-6-next.4
|
||||
|
||||
## 6.0.0-6-next.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/node-api",
|
||||
"version": "6.0.0-6-next.11",
|
||||
"version": "6.0.0-6-next.16",
|
||||
"description": "node API",
|
||||
"main": "build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
@@ -40,17 +40,16 @@
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/cli-ui": "workspace:6.0.0-alpha.3",
|
||||
"@verdaccio/server": "workspace:6.0.0-6-next.10",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/server": "workspace:6.0.0-6-next.15",
|
||||
"@verdaccio/logger": "workspace:6.0.0-6-next.4",
|
||||
"core-js": "^3.6.5",
|
||||
"debug": "^4.2.0",
|
||||
"lodash": "^4.17.20"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/mock": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4",
|
||||
"@verdaccio/mock": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7",
|
||||
"jest-mock-process": "^1.4.0",
|
||||
"selfsigned": "1.10.7",
|
||||
"supertest": "^6.1.3"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { displayWarning, displayMessage } from '@verdaccio/cli-ui';
|
||||
import { logger } from '@verdaccio/logger';
|
||||
|
||||
export function displayExperimentsInfoBox(flags) {
|
||||
if (!flags) {
|
||||
@@ -7,14 +7,16 @@ export function displayExperimentsInfoBox(flags) {
|
||||
|
||||
const experimentList = Object.keys(flags);
|
||||
if (experimentList.length >= 1) {
|
||||
displayWarning(
|
||||
'⚠️ experiments are enabled, we recommend do not use experiments in production, ' +
|
||||
'comment out this section to disable it'
|
||||
logger.warn(
|
||||
// eslint-disable-next-line max-len
|
||||
`experiments are enabled, it is recommended do not use experiments in production comment out this section to disable it`
|
||||
);
|
||||
experimentList.forEach((experiment) => {
|
||||
displayMessage(
|
||||
` - support for ${experiment} ${flags[experiment] ? 'is enabled' : ' is disabled'}
|
||||
`
|
||||
// eslint-disable-next-line max-len
|
||||
logger.info(
|
||||
`support for experiment [${experiment}] ${
|
||||
flags[experiment] ? 'is enabled' : ' is disabled'
|
||||
}`
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import url from 'url';
|
||||
import { findConfigFile, parseConfigFile } from '@verdaccio/config';
|
||||
import { API_ERROR } from '@verdaccio/commons-api';
|
||||
import { ConfigRuntime, HttpsConfKeyCert, HttpsConfPfx } from '@verdaccio/types';
|
||||
import { setup } from '@verdaccio/logger';
|
||||
import { setup, logger } from '@verdaccio/logger';
|
||||
import server from '@verdaccio/server';
|
||||
import { getListListenAddresses } from './cli-utils';
|
||||
import { displayExperimentsInfoBox } from './experiments';
|
||||
@@ -132,8 +132,8 @@ export async function initServer(
|
||||
pathname: '/',
|
||||
})
|
||||
}`;
|
||||
console.log(`http address ${addressServer}`);
|
||||
console.log(`${pkgName} / ${version}`);
|
||||
logger.info(`http address ${addressServer}`);
|
||||
logger.info(`version: ${version}`);
|
||||
resolve();
|
||||
})
|
||||
.on('error', function (err): void {
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/activedirectory2": "^1.2.1",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf ./build",
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"node-fetch": "^2.6.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7",
|
||||
"body-parser": "^1.19.0",
|
||||
"nock": "^12.0.3",
|
||||
"supertest": "^4.0.2"
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf ./build",
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"aws-sdk": "^2.607.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7",
|
||||
"recursive-readdir": "2.2.2"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"@verdaccio/streams": "workspace:11.0.0-alpha.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4",
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7",
|
||||
"memory-fs": "0.5.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"memfs": "3.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf ./build",
|
||||
|
||||
@@ -1,5 +1,50 @@
|
||||
# @verdaccio/ui-theme
|
||||
|
||||
## 6.0.0-6-next.8
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 0da7031e: allow disable login on ui and endpoints
|
||||
|
||||
To be able disable the login, set `login: false`, anything else would enable login. This flag will disable access via UI and web endpoints.
|
||||
|
||||
```yml
|
||||
web:
|
||||
title: verdaccio
|
||||
login: false
|
||||
```
|
||||
|
||||
## 6.0.0-6-next.7
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- aecbd226: web: allow ui hide package managers on sidebar
|
||||
|
||||
If there is a package manager of preference over others, you can define the package managers to be displayed on the detail page and sidebar, just define in the `config.yaml` and web section the list of package managers to be displayed.
|
||||
|
||||
```
|
||||
web:
|
||||
title: Verdaccio
|
||||
sort_packages: asc
|
||||
primary_color: #cccccc
|
||||
pkgManagers:
|
||||
- pnpm
|
||||
- yarn
|
||||
# - npm
|
||||
```
|
||||
|
||||
To disable all package managers, just define empty:
|
||||
|
||||
```
|
||||
web:
|
||||
title: Verdaccio
|
||||
sort_packages: asc
|
||||
primary_color: #cccccc
|
||||
pkgManagers:
|
||||
```
|
||||
|
||||
and the section would be hidden.
|
||||
|
||||
## 6.0.0-6-next.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -15,6 +15,7 @@ global.__VERDACCIO_BASENAME_UI_OPTIONS = {
|
||||
darkMode: false,
|
||||
language: 'en-US',
|
||||
uri: 'http://localhost:4873',
|
||||
pkgManagers: ['pnpm', 'yarn', 'npm'],
|
||||
title: 'Verdaccio Dev UI',
|
||||
scope: '',
|
||||
version: 'v1.0.0',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/ui-theme",
|
||||
"version": "6.0.0-6-next.6",
|
||||
"version": "6.0.0-6-next.8",
|
||||
"description": "Verdaccio User Interface",
|
||||
"author": {
|
||||
"name": "Verdaccio Core Team",
|
||||
@@ -29,7 +29,7 @@
|
||||
"@testing-library/dom": "^7.29.0",
|
||||
"@testing-library/jest-dom": "^5.11.6",
|
||||
"@testing-library/react": "10.4.9",
|
||||
"@verdaccio/node-api": "workspace:6.0.0-6-next.11",
|
||||
"@verdaccio/node-api": "workspace:6.0.0-6-next.16",
|
||||
"autosuggest-highlight": "3.1.1",
|
||||
"babel-loader": "^8.2.2",
|
||||
"babel-plugin-dynamic-import-node": "^2.3.3",
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
render,
|
||||
fireEvent,
|
||||
waitFor,
|
||||
screen,
|
||||
waitForElementToBeRemoved,
|
||||
} from 'verdaccio-ui/utils/test-react-testing-library';
|
||||
|
||||
@@ -23,7 +24,7 @@ const props = {
|
||||
/* eslint-disable react/jsx-no-bind*/
|
||||
describe('<Header /> component with logged in state', () => {
|
||||
test('should load the component in logged out state', () => {
|
||||
const { container, queryByTestId, getByText } = render(
|
||||
render(
|
||||
<Router>
|
||||
<AppContextProvider>
|
||||
<Header />
|
||||
@@ -31,13 +32,13 @@ describe('<Header /> component with logged in state', () => {
|
||||
</Router>
|
||||
);
|
||||
|
||||
expect(container.firstChild).toMatchSnapshot();
|
||||
expect(queryByTestId('header--menu-accountcircle')).toBeNull();
|
||||
expect(getByText('Login')).toBeTruthy();
|
||||
expect(screen.queryByTestId('header--menu-accountcircle')).toBeNull();
|
||||
expect(screen.getByText('Login')).toBeTruthy();
|
||||
expect(screen.queryByTestId('header--button-login')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test('should load the component in logged in state', () => {
|
||||
const { container, getByTestId, queryByText } = render(
|
||||
const { getByTestId, queryByText } = render(
|
||||
<Router>
|
||||
<AppContextProvider user={props.user}>
|
||||
<Header />
|
||||
@@ -45,7 +46,6 @@ describe('<Header /> component with logged in state', () => {
|
||||
</Router>
|
||||
);
|
||||
|
||||
expect(container.firstChild).toMatchSnapshot();
|
||||
expect(getByTestId('header--menu-accountcircle')).toBeTruthy();
|
||||
expect(queryByText('Login')).toBeNull();
|
||||
});
|
||||
@@ -137,5 +137,22 @@ describe('<Header /> component with logged in state', () => {
|
||||
expect(hasRegistrationInfoModalBeenRemoved).not.toBeDefined();
|
||||
});
|
||||
|
||||
test('should hide login if is disabled', () => {
|
||||
// @ts-expect-error
|
||||
window.__VERDACCIO_BASENAME_UI_OPTIONS = {
|
||||
base: 'foo',
|
||||
login: false,
|
||||
};
|
||||
render(
|
||||
<Router>
|
||||
<AppContextProvider user={props.user}>
|
||||
<Header />
|
||||
</AppContextProvider>
|
||||
</Router>
|
||||
);
|
||||
|
||||
expect(screen.queryByTestId('header--button-login')).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
test.todo('autocompletion should display suggestions according to the type value');
|
||||
});
|
||||
|
||||
@@ -49,6 +49,7 @@ const Header: React.FC<Props> = ({ withoutSearch }) => {
|
||||
<InnerNavBar>
|
||||
<HeaderLeft />
|
||||
<HeaderRight
|
||||
hasLogin={configOptions?.login}
|
||||
onLogout={handleLogout}
|
||||
onOpenRegistryInfoDialog={() => setOpenInfoDialog(true)}
|
||||
onToggleLogin={() => setShowLoginModal(!showLoginModal)}
|
||||
|
||||
@@ -12,6 +12,7 @@ import { RightSide } from './styles';
|
||||
interface Props {
|
||||
withoutSearch?: boolean;
|
||||
username?: string | null;
|
||||
hasLogin?: boolean;
|
||||
onToggleLogin: () => void;
|
||||
onOpenRegistryInfoDialog: () => void;
|
||||
onToggleMobileNav: () => void;
|
||||
@@ -22,6 +23,7 @@ const HeaderRight: React.FC<Props> = ({
|
||||
withoutSearch = false,
|
||||
username,
|
||||
onToggleLogin,
|
||||
hasLogin,
|
||||
onLogout,
|
||||
onToggleMobileNav,
|
||||
onOpenRegistryInfoDialog,
|
||||
@@ -29,6 +31,7 @@ const HeaderRight: React.FC<Props> = ({
|
||||
const themeContext = useContext(ThemeContext);
|
||||
const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
|
||||
const [isMenuOpen, setIsMenuOpen] = useState<boolean>(false);
|
||||
const hideLoginSection = hasLogin === false;
|
||||
|
||||
const { t } = useTranslation();
|
||||
|
||||
@@ -90,19 +93,23 @@ const HeaderRight: React.FC<Props> = ({
|
||||
tooltipIconType={themeContext.isDarkMode ? 'dark-mode' : 'light-mode'}
|
||||
/>
|
||||
|
||||
{username ? (
|
||||
<HeaderMenu
|
||||
anchorEl={anchorEl}
|
||||
isMenuOpen={isMenuOpen}
|
||||
onLoggedInMenu={handleLoggedInMenu}
|
||||
onLoggedInMenuClose={handleLoggedInMenuClose}
|
||||
onLogout={onLogout}
|
||||
username={username}
|
||||
/>
|
||||
) : (
|
||||
<Button color="inherit" data-testid="header--button-login" onClick={handleToggleLogin}>
|
||||
{t('button.login')}
|
||||
</Button>
|
||||
{!hideLoginSection && (
|
||||
<>
|
||||
{username ? (
|
||||
<HeaderMenu
|
||||
anchorEl={anchorEl}
|
||||
isMenuOpen={isMenuOpen}
|
||||
onLoggedInMenu={handleLoggedInMenu}
|
||||
onLoggedInMenuClose={handleLoggedInMenuClose}
|
||||
onLogout={onLogout}
|
||||
username={username}
|
||||
/>
|
||||
) : (
|
||||
<Button color="inherit" data-testid="header--button-login" onClick={handleToggleLogin}>
|
||||
{t('button.login')}
|
||||
</Button>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</RightSide>
|
||||
);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -34,7 +34,7 @@ const ActionBar: React.FC = () => {
|
||||
}
|
||||
|
||||
return (
|
||||
<Box alignItems="center" display="flex" marginBottom="8px">
|
||||
<Box alignItems="center" display="flex" marginBottom="14px">
|
||||
{actions.map((action) => (
|
||||
<ActionBarAction key={action.link} {...action} />
|
||||
))}
|
||||
|
||||
@@ -16,4 +16,7 @@ const Wrapper = styled('div')<{ theme?: Theme }>(({ theme }) => ({
|
||||
background: theme?.palette.white,
|
||||
color: theme?.palette.black,
|
||||
padding: theme?.spacing(2, 3),
|
||||
ul: {
|
||||
listStyle: 'disc',
|
||||
},
|
||||
}));
|
||||
|
||||
@@ -9,6 +9,10 @@ Object {
|
||||
padding: 16px 24px;
|
||||
}
|
||||
|
||||
.emotion-0 ul {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
<body>
|
||||
<div>
|
||||
<div
|
||||
@@ -24,6 +28,10 @@ Object {
|
||||
padding: 16px 24px;
|
||||
}
|
||||
|
||||
.emotion-0 ul {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
<div>
|
||||
<div
|
||||
class="markdown-body emotion-0 emotion-1"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React from 'react';
|
||||
|
||||
import { render } from 'verdaccio-ui/utils/test-react-testing-library';
|
||||
import { render, screen } from 'verdaccio-ui/utils/test-react-testing-library';
|
||||
|
||||
import { DetailContext } from '../../context';
|
||||
import { DetailContextProps } from '../../version-config';
|
||||
@@ -22,11 +22,14 @@ const ComponentToBeRendered: React.FC = () => (
|
||||
/* eslint-disable react/jsx-no-bind*/
|
||||
describe('<Install />', () => {
|
||||
test('renders correctly', () => {
|
||||
const { container } = render(<ComponentToBeRendered />);
|
||||
expect(container.firstChild).toMatchSnapshot();
|
||||
render(<ComponentToBeRendered />);
|
||||
expect(screen.getByText('pnpm install foo')).toBeInTheDocument();
|
||||
expect(screen.getByText('yarn add foo')).toBeInTheDocument();
|
||||
expect(screen.getByText('npm install foo')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test('should have 3 children', () => {
|
||||
window.__VERDACCIO_BASENAME_UI_OPTIONS.pkgManagers = ['yarn', 'pnpm', 'npm'];
|
||||
const { getByTestId } = render(<ComponentToBeRendered />);
|
||||
const installListItems = getByTestId('installList');
|
||||
// installitems + subHeader = 4
|
||||
@@ -34,13 +37,17 @@ describe('<Install />', () => {
|
||||
});
|
||||
|
||||
test('should have the element NPM', () => {
|
||||
window.__VERDACCIO_BASENAME_UI_OPTIONS.pkgManagers = ['npm'];
|
||||
const { getByTestId, queryByText } = render(<ComponentToBeRendered />);
|
||||
expect(getByTestId('installListItem-npm')).toBeTruthy();
|
||||
expect(queryByText(`npm install ${detailContextValue.packageName}`)).toBeTruthy();
|
||||
expect(queryByText('Install using npm')).toBeTruthy();
|
||||
expect(screen.queryByText('pnpm install foo')).not.toBeInTheDocument();
|
||||
expect(screen.queryByText('yarn add foo')).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
test('should have the element YARN', () => {
|
||||
window.__VERDACCIO_BASENAME_UI_OPTIONS.pkgManagers = ['yarn'];
|
||||
const { getByTestId, queryByText } = render(<ComponentToBeRendered />);
|
||||
expect(getByTestId('installListItem-yarn')).toBeTruthy();
|
||||
expect(queryByText(`yarn add ${detailContextValue.packageName}`)).toBeTruthy();
|
||||
@@ -48,6 +55,7 @@ describe('<Install />', () => {
|
||||
});
|
||||
|
||||
test('should have the element PNPM', () => {
|
||||
window.__VERDACCIO_BASENAME_UI_OPTIONS.pkgManagers = ['pnpm'];
|
||||
const { getByTestId, queryByText } = render(<ComponentToBeRendered />);
|
||||
expect(getByTestId('installListItem-pnpm')).toBeTruthy();
|
||||
expect(queryByText(`pnpm install ${detailContextValue.packageName}`)).toBeTruthy();
|
||||
|
||||
@@ -5,18 +5,20 @@ import { useTranslation } from 'react-i18next';
|
||||
import List from 'verdaccio-ui/components/List';
|
||||
import Text from 'verdaccio-ui/components/Text';
|
||||
import { Theme } from 'verdaccio-ui/design-tokens/theme';
|
||||
import { useConfig } from 'verdaccio-ui/providers/config';
|
||||
|
||||
import { DetailContext } from '../..';
|
||||
|
||||
import InstallListItem, { DependencyManager } from './InstallListItem';
|
||||
|
||||
const StyledText = styled(Text)<{ theme?: Theme }>((props) => ({
|
||||
fontWeight: props.theme && props.theme.fontWeight.bold,
|
||||
fontWeight: props.theme?.fontWeight.bold,
|
||||
textTransform: 'capitalize',
|
||||
}));
|
||||
|
||||
const Install: React.FC = () => {
|
||||
const { t } = useTranslation();
|
||||
const { configOptions } = useConfig();
|
||||
const detailContext = useContext(DetailContext);
|
||||
|
||||
const { packageMeta, packageName } = detailContext;
|
||||
@@ -25,15 +27,26 @@ const Install: React.FC = () => {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
const hasNpm = configOptions?.pkgManagers?.includes('npm');
|
||||
const hasYarn = configOptions?.pkgManagers?.includes('yarn');
|
||||
const hasPnpm = configOptions?.pkgManagers?.includes('pnpm') ?? true;
|
||||
const hasPkgManagers = hasNpm | hasPnpm | hasYarn;
|
||||
|
||||
return hasPkgManagers ? (
|
||||
<List
|
||||
data-testid={'installList'}
|
||||
subheader={<StyledText variant={'subtitle1'}>{t('sidebar.installation.title')}</StyledText>}>
|
||||
<InstallListItem dependencyManager={DependencyManager.NPM} packageName={packageName} />
|
||||
<InstallListItem dependencyManager={DependencyManager.YARN} packageName={packageName} />
|
||||
<InstallListItem dependencyManager={DependencyManager.PNPM} packageName={packageName} />
|
||||
{hasNpm && (
|
||||
<InstallListItem dependencyManager={DependencyManager.NPM} packageName={packageName} />
|
||||
)}
|
||||
{hasYarn && (
|
||||
<InstallListItem dependencyManager={DependencyManager.YARN} packageName={packageName} />
|
||||
)}
|
||||
{hasPnpm && (
|
||||
<InstallListItem dependencyManager={DependencyManager.PNPM} packageName={packageName} />
|
||||
)}
|
||||
</List>
|
||||
);
|
||||
) : null;
|
||||
};
|
||||
|
||||
export default Install;
|
||||
|
||||
@@ -1,266 +0,0 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`<Install /> renders correctly 1`] = `
|
||||
.emotion-0 {
|
||||
font-weight: 700;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
.emotion-2 {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.emotion-2:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.emotion-4 {
|
||||
border-radius: 0px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.emotion-4 img {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.emotion-6 {
|
||||
padding: 0 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.emotion-8 {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-align-items: center;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
-webkit-box-pack: justify;
|
||||
-webkit-justify-content: space-between;
|
||||
-ms-flex-pack: justify;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.emotion-10 {
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
height: 21px;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
<ul
|
||||
class="MuiList-root MuiList-padding MuiList-subheader"
|
||||
data-testid="installList"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root emotion-0 emotion-1 MuiTypography-subtitle1"
|
||||
>
|
||||
Installation
|
||||
</span>
|
||||
<div
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root emotion-2 emotion-3 MuiListItem-gutters MuiListItem-button"
|
||||
data-testid="installListItem-npm"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="MuiAvatar-root MuiAvatar-circle emotion-4 emotion-5"
|
||||
>
|
||||
<img
|
||||
alt="npm"
|
||||
class="MuiAvatar-img"
|
||||
src="[object Object]"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="MuiListItemText-root emotion-6 emotion-7 MuiListItemText-multiline"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
<div
|
||||
class="emotion-8 emotion-9"
|
||||
>
|
||||
<span
|
||||
class="emotion-10 emotion-11"
|
||||
>
|
||||
npm install foo
|
||||
</span>
|
||||
<button
|
||||
class="MuiButtonBase-root MuiIconButton-root"
|
||||
data-testid="copy-icon"
|
||||
tabindex="0"
|
||||
title="Copy to clipboard"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
class="MuiIconButton-label"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class="MuiSvgIcon-root"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
</span>
|
||||
<p
|
||||
class="MuiTypography-root MuiListItemText-secondary MuiTypography-body2 MuiTypography-colorTextSecondary MuiTypography-displayBlock"
|
||||
>
|
||||
Install using npm
|
||||
</p>
|
||||
</div>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root emotion-2 emotion-3 MuiListItem-gutters MuiListItem-button"
|
||||
data-testid="installListItem-yarn"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="MuiAvatar-root MuiAvatar-circle emotion-4 emotion-5"
|
||||
>
|
||||
<img
|
||||
alt="yarn"
|
||||
class="MuiAvatar-img"
|
||||
src="[object Object]"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="MuiListItemText-root emotion-6 emotion-7 MuiListItemText-multiline"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
<div
|
||||
class="emotion-8 emotion-9"
|
||||
>
|
||||
<span
|
||||
class="emotion-10 emotion-11"
|
||||
>
|
||||
yarn add foo
|
||||
</span>
|
||||
<button
|
||||
class="MuiButtonBase-root MuiIconButton-root"
|
||||
data-testid="copy-icon"
|
||||
tabindex="0"
|
||||
title="Copy to clipboard"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
class="MuiIconButton-label"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class="MuiSvgIcon-root"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
</span>
|
||||
<p
|
||||
class="MuiTypography-root MuiListItemText-secondary MuiTypography-body2 MuiTypography-colorTextSecondary MuiTypography-displayBlock"
|
||||
>
|
||||
Install using yarn
|
||||
</p>
|
||||
</div>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root emotion-2 emotion-3 MuiListItem-gutters MuiListItem-button"
|
||||
data-testid="installListItem-pnpm"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="MuiAvatar-root MuiAvatar-circle emotion-4 emotion-5"
|
||||
>
|
||||
<img
|
||||
alt="pnpm"
|
||||
class="MuiAvatar-img"
|
||||
src="[object Object]"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="MuiListItemText-root emotion-6 emotion-7 MuiListItemText-multiline"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
<div
|
||||
class="emotion-8 emotion-9"
|
||||
>
|
||||
<span
|
||||
class="emotion-10 emotion-11"
|
||||
>
|
||||
pnpm install foo
|
||||
</span>
|
||||
<button
|
||||
class="MuiButtonBase-root MuiIconButton-root"
|
||||
data-testid="copy-icon"
|
||||
tabindex="0"
|
||||
title="Copy to clipboard"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
class="MuiIconButton-label"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class="MuiSvgIcon-root"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
</span>
|
||||
<p
|
||||
class="MuiTypography-root MuiListItemText-secondary MuiTypography-body2 MuiTypography-colorTextSecondary MuiTypography-displayBlock"
|
||||
>
|
||||
Install using pnpm
|
||||
</p>
|
||||
</div>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</div>
|
||||
</ul>
|
||||
`;
|
||||
@@ -1,26 +1,12 @@
|
||||
import { TemplateUIOptions } from '@verdaccio/types';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
import isNil from 'lodash/isNil';
|
||||
import React, { createContext, FunctionComponent, useContext, useMemo, useState } from 'react';
|
||||
|
||||
import { PRIMARY_COLOR } from 'verdaccio-ui/utils/colors';
|
||||
|
||||
export type VerdaccioOptions = {
|
||||
url_prefix: string;
|
||||
base: string;
|
||||
scope: string;
|
||||
title: string;
|
||||
primaryColor: string;
|
||||
darkMode: boolean;
|
||||
uri?: string;
|
||||
language?: string;
|
||||
version?: string;
|
||||
protocol?: string;
|
||||
host?: string;
|
||||
logo?: string;
|
||||
};
|
||||
|
||||
type ConfigProviderProps = {
|
||||
configOptions: VerdaccioOptions;
|
||||
configOptions: TemplateUIOptions;
|
||||
setConfigOptions: Function;
|
||||
};
|
||||
|
||||
@@ -28,8 +14,10 @@ const defaultValues: ConfigProviderProps = {
|
||||
configOptions: {
|
||||
primaryColor: PRIMARY_COLOR,
|
||||
darkMode: false,
|
||||
pkgManagers: ['yarn', 'pnpm', 'npm'],
|
||||
scope: '',
|
||||
base: '',
|
||||
login: true,
|
||||
url_prefix: '',
|
||||
title: 'Verdaccio',
|
||||
},
|
||||
@@ -59,7 +47,6 @@ const AppConfigurationProvider: FunctionComponent = ({ children }) => {
|
||||
[configOptions]
|
||||
);
|
||||
|
||||
// @ts-ignore
|
||||
return (
|
||||
<AppConfigurationContext.Provider value={value}>{children}</AppConfigurationContext.Provider>
|
||||
);
|
||||
|
||||
@@ -2,6 +2,10 @@ web:
|
||||
title: Verdaccio Local Dev
|
||||
sort_packages: asc
|
||||
primary_color: #CCC
|
||||
login: true
|
||||
pkgManagers:
|
||||
- npm
|
||||
- yarn
|
||||
|
||||
plugins: ../
|
||||
|
||||
|
||||
@@ -8,10 +8,11 @@ import config from './webpack.dev.config.babel';
|
||||
|
||||
const compiler = webpack(config);
|
||||
const spinner = ora('Compiler is running...').start();
|
||||
const port = 4873;
|
||||
compiler.hooks.done.tap('Verdaccio Dev Server', () => {
|
||||
if (!global.rebuild) {
|
||||
spinner.stop();
|
||||
console.log('Dev Server Listening at http://localhost:4873/');
|
||||
console.log(`Dev Server Listening at http://localhost:${port}/`);
|
||||
global.rebuild = true;
|
||||
}
|
||||
});
|
||||
@@ -40,7 +41,7 @@ new WebpackDevServer(compiler, {
|
||||
target: 'http://localhost:8000',
|
||||
},
|
||||
],
|
||||
}).listen(4873, 'localhost', function (err) {
|
||||
}).listen(port, 'localhost', function (err) {
|
||||
if (err) {
|
||||
return console.log(err);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import fs from 'fs';
|
||||
|
||||
import FriendlyErrorsPlugin from 'friendly-errors-webpack-plugin';
|
||||
import HTMLWebpackPlugin from 'html-webpack-plugin';
|
||||
import yalm from 'js-yaml';
|
||||
import StyleLintPlugin from 'stylelint-webpack-plugin';
|
||||
import webpack from 'webpack';
|
||||
|
||||
@@ -8,6 +11,7 @@ import env from '../config/env';
|
||||
import getPackageJson from './getPackageJson';
|
||||
import baseConfig from './webpack.config';
|
||||
|
||||
const configJsonFormat = yalm.safeLoad(fs.readFileSync('./tools/_verdaccio.config.yaml', 'utf8'));
|
||||
export default {
|
||||
...baseConfig,
|
||||
mode: 'development',
|
||||
@@ -35,8 +39,7 @@ export default {
|
||||
}),
|
||||
new HTMLWebpackPlugin({
|
||||
__UI_OPTIONS: JSON.stringify({
|
||||
title: 'Verdaccio Dev UI',
|
||||
scope: '',
|
||||
...configJsonFormat.web,
|
||||
filename: 'index.html',
|
||||
verdaccioURL: '//localhost:4873',
|
||||
base: new URL('/', 'http://localhost:4873'),
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
// FIXME: this should comes from @verdaccio/types
|
||||
|
||||
type PackageManagers = 'pnpm' | 'yarn' | 'npm';
|
||||
export interface VerdaccioOptions {
|
||||
// @deprecated
|
||||
url_prefix: string;
|
||||
// @deprecated
|
||||
base: string;
|
||||
basePath: string;
|
||||
basename: string;
|
||||
scope: string;
|
||||
title: string;
|
||||
primaryColor: string;
|
||||
darkMode: boolean;
|
||||
uri?: string;
|
||||
login?: boolean;
|
||||
language?: string;
|
||||
darkMode?: boolean;
|
||||
version?: string;
|
||||
protocol?: string;
|
||||
host?: string;
|
||||
logo?: string;
|
||||
pkgManagers?: PackageManagers[];
|
||||
}
|
||||
|
||||
declare global {
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @verdaccio/proxy
|
||||
|
||||
## 6.0.0-6-next.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b217fd3]
|
||||
- @verdaccio/config@6.0.0-6-next.6
|
||||
- @verdaccio/local-storage@11.0.0-6-next.6
|
||||
|
||||
## 6.0.0-6-next.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/proxy",
|
||||
"version": "6.0.0-6-next.7",
|
||||
"version": "6.0.0-6-next.8",
|
||||
"description": "verdaccio proxy fetcher",
|
||||
"main": "./build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
@@ -40,8 +40,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/local-storage": "workspace:11.0.0-6-next.5",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/local-storage": "workspace:11.0.0-6-next.6",
|
||||
"@verdaccio/logger": "workspace:6.0.0-6-next.4",
|
||||
"@verdaccio/streams": "workspace:11.0.0-alpha.3",
|
||||
"@verdaccio/utils": "workspace:6.0.0-6-next.4",
|
||||
@@ -50,7 +50,7 @@
|
||||
"request": "2.87.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.4"
|
||||
"@verdaccio/types": "workspace:11.0.0-6-next.7"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
|
||||
@@ -1,5 +1,80 @@
|
||||
# @verdaccio/server
|
||||
|
||||
## 6.0.0-6-next.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [5ddfa526]
|
||||
- @verdaccio/store@6.0.0-6-next.9
|
||||
- @verdaccio/web@6.0.0-6-next.14
|
||||
- @verdaccio/api@6.0.0-6-next.11
|
||||
|
||||
## 6.0.0-6-next.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [0da7031e]
|
||||
- @verdaccio/web@6.0.0-6-next.13
|
||||
- @verdaccio/api@6.0.0-6-next.10
|
||||
- @verdaccio/auth@6.0.0-6-next.8
|
||||
- @verdaccio/loaders@6.0.0-6-next.4
|
||||
- @verdaccio/logger@6.0.0-6-next.4
|
||||
- verdaccio-audit@11.0.0-alpha.4
|
||||
- @verdaccio/store@6.0.0-6-next.8
|
||||
|
||||
## 6.0.0-6-next.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [aecbd226]
|
||||
- @verdaccio/web@6.0.0-6-next.12
|
||||
- @verdaccio/api@6.0.0-6-next.10
|
||||
- @verdaccio/auth@6.0.0-6-next.8
|
||||
- @verdaccio/loaders@6.0.0-6-next.4
|
||||
- @verdaccio/logger@6.0.0-6-next.4
|
||||
- verdaccio-audit@11.0.0-alpha.4
|
||||
- @verdaccio/store@6.0.0-6-next.8
|
||||
|
||||
## 6.0.0-6-next.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b217fd3]
|
||||
- @verdaccio/config@6.0.0-6-next.6
|
||||
- @verdaccio/api@6.0.0-6-next.10
|
||||
- @verdaccio/auth@6.0.0-6-next.8
|
||||
- @verdaccio/loaders@6.0.0-6-next.4
|
||||
- @verdaccio/store@6.0.0-6-next.8
|
||||
- @verdaccio/web@6.0.0-6-next.11
|
||||
- @verdaccio/middleware@6.0.0-6-next.8
|
||||
|
||||
## 6.0.0-6-next.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 19d272d1: fix: restore logger on init
|
||||
|
||||
Enable logger after parse configuration and log the very first step on startup phase.
|
||||
|
||||
```bash
|
||||
warn --- experiments are enabled, it is recommended do not use experiments in production comment out this section to disable it
|
||||
info --- support for experiment [token] is disabled
|
||||
info --- support for experiment [search] is disabled
|
||||
(node:50831) Warning: config.logs is deprecated, rename configuration to "config.log"
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
info --- http address http://localhost:4873/
|
||||
info --- version: 6.0.0-6-next.11
|
||||
info --- server started
|
||||
```
|
||||
|
||||
- @verdaccio/api@6.0.0-6-next.9
|
||||
- @verdaccio/auth@6.0.0-6-next.7
|
||||
- @verdaccio/loaders@6.0.0-6-next.4
|
||||
- @verdaccio/logger@6.0.0-6-next.4
|
||||
- verdaccio-audit@11.0.0-alpha.4
|
||||
- @verdaccio/store@6.0.0-6-next.7
|
||||
- @verdaccio/web@6.0.0-6-next.10
|
||||
|
||||
## 6.0.0-6-next.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/server",
|
||||
"version": "6.0.0-6-next.10",
|
||||
"version": "6.0.0-6-next.15",
|
||||
"description": "server logic",
|
||||
"main": "./build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
@@ -30,16 +30,16 @@
|
||||
"npm": ">=6"
|
||||
},
|
||||
"dependencies": {
|
||||
"@verdaccio/api": "workspace:6.0.0-6-next.9",
|
||||
"@verdaccio/auth": "workspace:6.0.0-6-next.7",
|
||||
"@verdaccio/api": "workspace:6.0.0-6-next.11",
|
||||
"@verdaccio/auth": "workspace:6.0.0-6-next.8",
|
||||
"@verdaccio/commons-api": "workspace:11.0.0-alpha.3",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/config": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/loaders": "workspace:6.0.0-6-next.4",
|
||||
"@verdaccio/logger": "workspace:6.0.0-6-next.4",
|
||||
"@verdaccio/middleware": "workspace:6.0.0-6-next.7",
|
||||
"@verdaccio/store": "workspace:6.0.0-6-next.7",
|
||||
"@verdaccio/middleware": "workspace:6.0.0-6-next.8",
|
||||
"@verdaccio/store": "workspace:6.0.0-6-next.9",
|
||||
"@verdaccio/utils": "workspace:6.0.0-6-next.4",
|
||||
"@verdaccio/web": "workspace:6.0.0-6-next.10",
|
||||
"@verdaccio/web": "workspace:6.0.0-6-next.14",
|
||||
"verdaccio-audit": "workspace:11.0.0-alpha.4",
|
||||
"compression": "1.7.4",
|
||||
"cors": "2.8.5",
|
||||
@@ -48,8 +48,8 @@
|
||||
"lodash": "4.17.15"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/mock": "workspace:6.0.0-6-next.5",
|
||||
"@verdaccio/proxy": "workspace:6.0.0-6-next.7",
|
||||
"@verdaccio/mock": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/proxy": "workspace:6.0.0-6-next.8",
|
||||
"http-errors": "1.7.3",
|
||||
"request": "2.87.0"
|
||||
},
|
||||
|
||||
@@ -18,7 +18,7 @@ import { ConfigRuntime } from '@verdaccio/types';
|
||||
|
||||
import { IAuth, IBasicAuth } from '@verdaccio/auth';
|
||||
import { IStorageHandler } from '@verdaccio/store';
|
||||
import { setup, logger } from '@verdaccio/logger';
|
||||
import { logger } from '@verdaccio/logger';
|
||||
import { log, final, errorReportingMiddleware } from '@verdaccio/middleware';
|
||||
import AuditMiddleware from 'verdaccio-audit';
|
||||
|
||||
@@ -143,7 +143,6 @@ const defineAPI = function (config: IConfig, storage: IStorageHandler): any {
|
||||
};
|
||||
|
||||
export default (async function (configHash: ConfigRuntime): Promise<any> {
|
||||
setup(configHash.logs);
|
||||
const config: IConfig = new AppConfig(_.cloneDeep(configHash));
|
||||
// register middleware plugins
|
||||
const plugin_params = {
|
||||
|
||||
@@ -123,6 +123,16 @@ describe('endpoint web unit test', () => {
|
||||
});
|
||||
|
||||
describe('Search', () => {
|
||||
test('should find @scope/pk1-test', (done) => {
|
||||
request(app)
|
||||
.get('/-/verdaccio/search/@scope%2fpk1-test')
|
||||
.expect(HTTP_STATUS.OK)
|
||||
.end(function (err, res) {
|
||||
expect(res.body).toHaveLength(1);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
test('should not find forbidden-place', (done) => {
|
||||
request(app)
|
||||
.get('/-/verdaccio/search/forbidden-place')
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
"homepage": "https://verdaccio.org",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@verdaccio/cli": "workspace:6.0.0-6-next.11",
|
||||
"@verdaccio/ui-theme": "workspace:6.0.0-6-next.6",
|
||||
"@verdaccio/cli": "workspace:6.0.0-6-next.16",
|
||||
"@verdaccio/ui-theme": "workspace:6.0.0-6-next.8",
|
||||
"fs-extra": "9.0.1",
|
||||
"webpack": "^5.11.1",
|
||||
"webpack-cli": "^4.3.1",
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
# @verdaccio/store
|
||||
|
||||
## 6.0.0-6-next.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 5ddfa526: Fix the search by exact name of the package
|
||||
|
||||
Full package name queries was not finding anithing. It was happening
|
||||
becouse of stemmer of [lunr.js](https://lunrjs.com/).
|
||||
|
||||
To fix this, the stemmer of [lunr.js](https://lunrjs.com/) was removed from search pipeline.
|
||||
|
||||
## 6.0.0-6-next.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b217fd3]
|
||||
- @verdaccio/config@6.0.0-6-next.6
|
||||
- @verdaccio/local-storage@11.0.0-6-next.6
|
||||
- @verdaccio/loaders@6.0.0-6-next.4
|
||||
- @verdaccio/proxy@6.0.0-6-next.8
|
||||
|
||||
## 6.0.0-6-next.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user