Compare commits
71 Commits
@verdaccio
...
@verdaccio
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
14032d160b | ||
|
|
b6d565209f | ||
|
|
4b4a37c07b | ||
|
|
24bec8ded0 | ||
|
|
b0946b2a3b | ||
|
|
3293c9a281 | ||
|
|
6a83040351 | ||
|
|
253cc1348f | ||
|
|
1367f02897 | ||
|
|
dc8be6df8b | ||
|
|
6cf165b405 | ||
|
|
da50542de1 | ||
|
|
1bae121dc2 | ||
|
|
4ac3aead4f | ||
|
|
86283342f9 | ||
|
|
40c004c234 | ||
|
|
e8b016aca5 | ||
|
|
42f226e6b3 | ||
|
|
2520a74ac3 | ||
|
|
dbade09407 | ||
|
|
4dc62a8365 | ||
|
|
eb9bbb4313 | ||
|
|
d411c20570 | ||
|
|
86a99684a3 | ||
|
|
2bf41a480e | ||
|
|
824b43fb43 | ||
|
|
c1385d7655 | ||
|
|
f967a69ad3 | ||
|
|
d5d96f0868 | ||
|
|
386f19753f | ||
|
|
a0e4fc9fa0 | ||
|
|
c9e7c141e8 | ||
|
|
17cf072329 | ||
|
|
1456bdd4a7 | ||
|
|
ffb6de3777 | ||
|
|
e32e737018 | ||
|
|
a0b65a82d0 | ||
|
|
717fe79fe0 | ||
|
|
1ae8f23110 | ||
|
|
3d9847736a | ||
|
|
31a927a236 | ||
|
|
af3f7c4797 | ||
|
|
542f9d3760 | ||
|
|
c20adc8ae5 | ||
|
|
93c49bd36d | ||
|
|
41eb167943 | ||
|
|
ba53d1edc8 | ||
|
|
a99a4bb1b3 | ||
|
|
ff1bd1ab7d | ||
|
|
9db15542dc | ||
|
|
9e3085d107 | ||
|
|
51b0f2f4da | ||
|
|
755b49bceb | ||
|
|
db4b669cfb | ||
|
|
3f93858452 | ||
|
|
6fbbc40aa0 | ||
|
|
4aa4aceafa | ||
|
|
487976bd53 | ||
|
|
f7930684f4 | ||
|
|
a8e906f935 | ||
|
|
70095c994d | ||
|
|
2aa94c3390 | ||
|
|
a542aafda2 | ||
|
|
56713db9a3 | ||
|
|
cce258e4d4 | ||
|
|
87c16127b4 | ||
|
|
bed68b2ceb | ||
|
|
5328b6cb05 | ||
|
|
16954c3b85 | ||
|
|
1e63e05dc0 | ||
|
|
8ecf7adf29 |
6
.changeset/eighty-lobsters-study.md
Normal file
6
.changeset/eighty-lobsters-study.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@verdaccio/ui-theme': patch
|
||||
'@verdaccio/ui-components': patch
|
||||
---
|
||||
|
||||
feat: versions filter by semver range
|
||||
6
.changeset/good-cups-train.md
Normal file
6
.changeset/good-cups-train.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@verdaccio/search': patch
|
||||
'@verdaccio/search-indexer': patch
|
||||
---
|
||||
|
||||
refactor: search package
|
||||
6
.changeset/itchy-mangos-wink.md
Normal file
6
.changeset/itchy-mangos-wink.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@verdaccio/middleware': patch
|
||||
'@verdaccio/url': patch
|
||||
---
|
||||
|
||||
Improved TS types for renderHTML() and related functions (by @tobbe in #4605)
|
||||
5
.changeset/long-moles-attend.md
Normal file
5
.changeset/long-moles-attend.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@verdaccio/search-indexer': patch
|
||||
---
|
||||
|
||||
fix: remove node engine restriction
|
||||
5
.changeset/pink-balloons-leave.md
Normal file
5
.changeset/pink-balloons-leave.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@verdaccio/local-storage': patch
|
||||
---
|
||||
|
||||
chore: reduce log to info if database is not found
|
||||
@@ -39,7 +39,7 @@
|
||||
"verdaccio-memory": "11.0.0",
|
||||
"@verdaccio/ui-theme": "6.0.0",
|
||||
"@verdaccio/proxy": "6.0.0",
|
||||
"@verdaccio/search": "6.0.0",
|
||||
"@verdaccio/search-indexer": "6.0.0",
|
||||
"@verdaccio/server": "6.0.0",
|
||||
"@verdaccio/server-fastify": "6.0.0",
|
||||
"@verdaccio/signature": "6.0.0",
|
||||
@@ -55,26 +55,40 @@
|
||||
"verdaccio": "6.0.0",
|
||||
"@verdaccio/web": "6.0.0",
|
||||
"@verdaccio/website": "5.20.2",
|
||||
"@verdaccio/local-publish": "0.0.1"
|
||||
"@verdaccio/local-publish": "0.0.1",
|
||||
"@verdaccio/search": "7.0.0-next.0",
|
||||
"@verdaccio/e2e-cli-pnpm9": "1.0.1"
|
||||
},
|
||||
"changesets": [
|
||||
"angry-trees-tie",
|
||||
"breezy-mayflies-pull",
|
||||
"chilled-carrots-guess",
|
||||
"eight-squids-judge",
|
||||
"eighty-lobsters-study",
|
||||
"good-cups-train",
|
||||
"itchy-mangos-wink",
|
||||
"long-jars-collect",
|
||||
"long-moles-attend",
|
||||
"old-turkeys-heal",
|
||||
"olive-bananas-wink",
|
||||
"perfect-chairs-act",
|
||||
"pink-apples-nail",
|
||||
"pink-balloons-leave",
|
||||
"quick-buses-scream",
|
||||
"real-socks-vanish",
|
||||
"sharp-wolves-carry",
|
||||
"shiny-worms-retire",
|
||||
"shy-carrots-compare",
|
||||
"shy-garlics-cry",
|
||||
"silent-shirts-knock",
|
||||
"slow-wasps-glow",
|
||||
"spicy-birds-flow",
|
||||
"strange-points-repair",
|
||||
"thirty-toes-swim",
|
||||
"unlucky-cycles-sparkle",
|
||||
"weak-fans-explain",
|
||||
"wicked-kiwis-check",
|
||||
"wicked-worms-wash",
|
||||
"wild-otters-talk",
|
||||
"young-donuts-own"
|
||||
]
|
||||
|
||||
5
.changeset/quick-buses-scream.md
Normal file
5
.changeset/quick-buses-scream.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@verdaccio/store': patch
|
||||
---
|
||||
|
||||
fix: avoid warning "time for version x already exists"
|
||||
5
.changeset/sharp-wolves-carry.md
Normal file
5
.changeset/sharp-wolves-carry.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@verdaccio/signature': minor
|
||||
---
|
||||
|
||||
support for createCipher backward compatible
|
||||
5
.changeset/silent-shirts-knock.md
Normal file
5
.changeset/silent-shirts-knock.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@verdaccio/config': patch
|
||||
---
|
||||
|
||||
fix config builder erroring when passed partial config
|
||||
5
.changeset/slow-wasps-glow.md
Normal file
5
.changeset/slow-wasps-glow.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@verdaccio/logger-prettify': patch
|
||||
---
|
||||
|
||||
Avoid displaying "prettify pipeline error" if there is no error
|
||||
5
.changeset/unlucky-cycles-sparkle.md
Normal file
5
.changeset/unlucky-cycles-sparkle.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@verdaccio/local-storage': patch
|
||||
---
|
||||
|
||||
fix: error when writing tarball (missing folder)
|
||||
5
.changeset/wicked-kiwis-check.md
Normal file
5
.changeset/wicked-kiwis-check.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@verdaccio/auth': patch
|
||||
---
|
||||
|
||||
fix: adduser error message grammar (@tobbe in #4586)
|
||||
6
.changeset/wicked-worms-wash.md
Normal file
6
.changeset/wicked-worms-wash.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
'@verdaccio/store': patch
|
||||
'@verdaccio/tarball': patch
|
||||
---
|
||||
|
||||
feat: add tarball details for published packages
|
||||
4
.github/workflows/ci-windows.yml
vendored
4
.github/workflows/ci-windows.yml
vendored
@@ -29,10 +29,6 @@ jobs:
|
||||
run: |
|
||||
mkdir ~/.pnpm-store
|
||||
pnpm config set store-dir ~/.pnpm-store
|
||||
- name: set store
|
||||
run: |
|
||||
mkdir ~/.pnpm-store
|
||||
pnpm config set store-dir ~/.pnpm-store
|
||||
- name: Install
|
||||
run: pnpm install --registry http://localhost:4873
|
||||
- name: Cache .pnpm-store
|
||||
|
||||
5
.github/workflows/ci.yml
vendored
5
.github/workflows/ci.yml
vendored
@@ -14,6 +14,9 @@ on:
|
||||
- 'pnpm-workspace.yaml'
|
||||
permissions:
|
||||
contents: read
|
||||
concurrency:
|
||||
group: ci-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
prepare:
|
||||
@@ -135,7 +138,7 @@ jobs:
|
||||
needs: [test]
|
||||
runs-on: ubuntu-latest
|
||||
name: synchronize translations
|
||||
if: (github.event_name == 'push' && github.ref == 'refs/heads/master') || github.event_name == 'workflow_dispatch'
|
||||
if: (github.event_name == 'push' && github.ref == 'refs/heads/master' && github.repository == 'verdaccio/verdaccio') || github.event_name == 'workflow_dispatch'
|
||||
steps:
|
||||
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
|
||||
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v3
|
||||
|
||||
6
.github/workflows/codeql-analysis.yml
vendored
6
.github/workflows/codeql-analysis.yml
vendored
@@ -34,7 +34,7 @@ jobs:
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@47b3d888fe66b639e431abf22ebca059152f1eea # v2
|
||||
uses: github/codeql-action/init@c7f9125735019aa87cfc361530512d50ea439c71 # v2
|
||||
|
||||
# Override language selection by uncommenting this and choosing your languages
|
||||
# with:
|
||||
@@ -42,7 +42,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@47b3d888fe66b639e431abf22ebca059152f1eea # v2
|
||||
uses: github/codeql-action/autobuild@c7f9125735019aa87cfc361530512d50ea439c71 # v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -56,4 +56,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@47b3d888fe66b639e431abf22ebca059152f1eea # v2
|
||||
uses: github/codeql-action/analyze@c7f9125735019aa87cfc361530512d50ea439c71 # v2
|
||||
|
||||
1
.github/workflows/docker-publish.yml
vendored
1
.github/workflows/docker-publish.yml
vendored
@@ -22,6 +22,7 @@ permissions:
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'verdaccio/verdaccio'
|
||||
steps:
|
||||
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
|
||||
- uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # tag=v1
|
||||
|
||||
89
.github/workflows/e2e-ci.yml
vendored
89
.github/workflows/e2e-ci.yml
vendored
@@ -126,51 +126,50 @@ jobs:
|
||||
run: pnpm --filter @verdaccio/test-cli-commons build
|
||||
- name: Test CLI
|
||||
run: NODE_ENV=production pnpm test --filter ...@verdaccio/e2e-cli-${{matrix.pkg}}
|
||||
# TODO: fix pnpm setup
|
||||
# e2e-cli-pnpm:
|
||||
# needs: [prepare, build]
|
||||
# strategy:
|
||||
# fail-fast: true
|
||||
# matrix:
|
||||
# pkg:
|
||||
# [
|
||||
# pnpm6,
|
||||
# pnpm7,
|
||||
# pnpm8
|
||||
# ]
|
||||
# node: [20, 21]
|
||||
# name: ${{ matrix.pkg }}/ ubuntu-latest / ${{ matrix.node }}
|
||||
# runs-on: ubuntu-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
|
||||
# - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v3
|
||||
# with:
|
||||
# node-version: ${{ matrix.node }}
|
||||
# - name: Install pnpm
|
||||
# run: |
|
||||
# corepack enable
|
||||
# corepack prepare
|
||||
# - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
|
||||
# with:
|
||||
# path: ~/.pnpm-store
|
||||
# key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
|
||||
# - name: set store
|
||||
# run: |
|
||||
# pnpm config set store-dir ~/.pnpm-store
|
||||
# - name: Install
|
||||
# run: pnpm install --loglevel debug --ignore-scripts --registry http://localhost:4873
|
||||
# - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3
|
||||
# with:
|
||||
# path: ./packages/
|
||||
# key: pkg-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
|
||||
# # - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
|
||||
# # with:
|
||||
# # path: ./e2e/
|
||||
# # key: test-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
|
||||
# - name: build e2e
|
||||
# run: pnpm --filter @verdaccio/test-cli-commons build
|
||||
# - name: Test CLI
|
||||
# run: NODE_ENV=production pnpm test --filter ...@verdaccio/e2e-cli-${{matrix.pkg}}
|
||||
|
||||
e2e-cli-pnpm:
|
||||
needs: [prepare, build]
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
pkg:
|
||||
[
|
||||
pnpm8,
|
||||
pnpm9,
|
||||
]
|
||||
node: [20, 21]
|
||||
name: ${{ matrix.pkg }}/ ubuntu-latest / ${{ matrix.node }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
|
||||
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v3
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
- name: Install pnpm
|
||||
run: |
|
||||
corepack enable
|
||||
corepack prepare
|
||||
- uses: actions/cache@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3
|
||||
with:
|
||||
path: ~/.pnpm-store
|
||||
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
|
||||
- name: set store
|
||||
run: |
|
||||
pnpm config set store-dir ~/.pnpm-store
|
||||
- name: Install
|
||||
run: pnpm install --loglevel debug --ignore-scripts --registry http://localhost:4873
|
||||
- uses: actions/cache@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3
|
||||
with:
|
||||
path: ./packages/
|
||||
key: pkg-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
|
||||
# - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
|
||||
# with:
|
||||
# path: ./e2e/
|
||||
# key: test-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
|
||||
- name: build e2e
|
||||
run: pnpm --filter @verdaccio/test-cli-commons build
|
||||
- name: Test CLI
|
||||
run: NODE_ENV=production pnpm test --filter ...@verdaccio/e2e-cli-${{matrix.pkg}}
|
||||
e2e-cli-yarn:
|
||||
needs: [prepare, build]
|
||||
strategy:
|
||||
|
||||
2
.github/workflows/e2e-ui.yml
vendored
2
.github/workflows/e2e-ui.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
||||
run: pnpm build
|
||||
- name: Test UI
|
||||
run: pnpm test:e2e:ui
|
||||
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3
|
||||
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v3
|
||||
with:
|
||||
name: videos
|
||||
path: /home/runner/work/verdaccio/verdaccio/e2e/ui/cypress/videos
|
||||
|
||||
3
.github/workflows/static-data.yml
vendored
3
.github/workflows/static-data.yml
vendored
@@ -18,6 +18,7 @@ jobs:
|
||||
prepare:
|
||||
name: Run script
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'verdaccio/verdaccio'
|
||||
steps:
|
||||
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
|
||||
with:
|
||||
@@ -45,7 +46,7 @@ jobs:
|
||||
- name: format
|
||||
run: pnpm format
|
||||
- name: Commit & Push changes
|
||||
uses: actions-js/push@156f2b10c3aa000c44dbe75ea7018f32ae999772 # tag=v1.4
|
||||
uses: actions-js/push@5a7cbd780d82c0c937b5977586e641b2fd94acc5 # tag=v1.5
|
||||
with:
|
||||
github_token: ${{ secrets.TOKEN_VERDACCIOBOT_GITHUB }}
|
||||
message: "chore: updated static data"
|
||||
|
||||
31
.github/workflows/ui-components.yml
vendored
31
.github/workflows/ui-components.yml
vendored
@@ -1,7 +1,9 @@
|
||||
name: UI Components
|
||||
|
||||
on:
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
@@ -17,6 +19,7 @@ jobs:
|
||||
pull-requests: write # to comment on pull-requests
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'verdaccio/verdaccio'
|
||||
env:
|
||||
NODE_OPTIONS: --max_old_space_size=4096
|
||||
steps:
|
||||
@@ -48,24 +51,8 @@ jobs:
|
||||
- name: Copy public content
|
||||
# the msw.js worker is need it at the storybook-static folder in production
|
||||
run: cp -R packages/ui-components/public/* packages/ui-components/storybook-static
|
||||
- name: 🔥 Deploy Production UI Netlify
|
||||
if: (github.event_name == 'push' && github.ref == 'refs/heads/master') || github.event_name == 'workflow_dispatch'
|
||||
uses: verdaccio/action-netlify-deploy@1c086d59169edeec9254672c7de17d2ceac3928f # v2.0.0
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
||||
netlify-site-id: ${{ secrets.NETLIFY_UI_SITE_ID }}
|
||||
build-dir: './packages/ui-components/storybook-static'
|
||||
- name: 🤖 Deploy Preview UI Components Netlify
|
||||
if: github.repository == 'verdaccio/verdaccio'
|
||||
uses: semoal/action-netlify-deploy@1a53f098745bf78555d11b436f5ee3af87e6b566
|
||||
id: netlify_preview_ui
|
||||
with:
|
||||
draft: true
|
||||
comment-on-pull-request: true
|
||||
github-deployment-is-production: false
|
||||
github-deployment-is-transient: true
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
||||
netlify-site-id: ${{ secrets.NETLIFY_UI_SITE_ID }}
|
||||
build-dir: './packages/ui-components/storybook-static'
|
||||
- name: Deploy to Netlify
|
||||
env:
|
||||
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_UI_SITE_ID }}
|
||||
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
|
||||
run: pnpm --filter ...@verdaccio/ui-components netlify:ui:deploy
|
||||
|
||||
1
.github/workflows/website.yml
vendored
1
.github/workflows/website.yml
vendored
@@ -16,6 +16,7 @@ jobs:
|
||||
pull-requests: write # to comment on pull-requests
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'verdaccio/verdaccio'
|
||||
name: setup verdaccio
|
||||
services:
|
||||
verdaccio:
|
||||
|
||||
30
README.md
30
README.md
@@ -43,7 +43,7 @@ Google Cloud Storage** or create your own plugin.
|
||||
Install with npm:
|
||||
|
||||
```bash
|
||||
npm install --location=global verdaccio@next
|
||||
npm install -g verdaccio@next
|
||||
```
|
||||
|
||||
With `yarn`
|
||||
@@ -79,12 +79,34 @@ Furthermore, you can read the [**Debugging Guidelines**](https://github.com/verd
|
||||
You can develop your own [plugins](https://verdaccio.org/docs/plugins) with the [verdaccio generator](https://github.com/verdaccio/generator-verdaccio-plugin). Installing [Yeoman](https://yeoman.io/) is required.
|
||||
|
||||
```
|
||||
npm install --location=global yo
|
||||
npm install --location=global generator-verdaccio-plugin
|
||||
npm install -g yo
|
||||
npm install -g generator-verdaccio-plugin
|
||||
```
|
||||
|
||||
Learn more [here](https://verdaccio.org/docs/dev-plugins) how to develop plugins. Share your plugins with the community.
|
||||
|
||||
## Integration Tests
|
||||
|
||||
In our compatibility testing project, we're dedicated to ensuring that your favorite commands work seamlessly across different versions of npm, pnpm, and Yarn. From publishing packages to managing dependencies.
|
||||
Our goal is to give you the confidence to use your preferred package manager without any issues. So dive in, check out our matrix, and see how your commands fare across the board!
|
||||
|
||||
[Learn or contribute here](https://github.com/verdaccio/verdaccio/tree/master/e2e/cli)
|
||||
|
||||
### Commands
|
||||
|
||||
| cmd | npm6 | npm7 | npm8 | npm9 | npm10 | pnpm8 | pnpm9 (beta) | yarn1 | yarn2 | yarn3 | yarn4 |
|
||||
| --------- | ---- | ---- | ---- | ---- | ----- | ----- | ------------ | ----- | ----- | ----- | ----- |
|
||||
| publish | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| info | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| audit | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
|
||||
| install | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| deprecate | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| ping | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| search | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| star | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| stars | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| dist-tag | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
||||
|
||||
## Donations
|
||||
|
||||
Verdaccio is run by **volunteers**; nobody is working full-time on it. If you find this project to be useful and would like to support its development, consider doing a long support donation - **and your logo will be on this section of the readme.**
|
||||
@@ -123,7 +145,7 @@ Furthermore, here few examples how to start:
|
||||
|
||||
## Watch our Videos
|
||||
|
||||
**Node Congress 2022, February 2022, Online Free**
|
||||
**Node 2022, February 2022, Online Free**
|
||||
|
||||
<div>
|
||||
<a href="https://portal.gitnation.org/contents/five-ways-of-taking-advantage-of-verdaccio-your-private-and-proxy-nodejs-registry">
|
||||
|
||||
@@ -34,7 +34,7 @@ Note that time-frame and processes are subject to each program’s own policy.
|
||||
|
||||
- Report the security issue to the project maintainers directly at verdaccio@pm.me. If the report contains highly sensitive information, please be advised to encrypt your findings using our [PGP key](https://cdn.verdaccio.dev/gpg/publickey.verdaccio@pm.me.asc) which is also available in this document.
|
||||
|
||||
Your efforts to responsibly disclose your findings are sincerely appreciated and will be taken into account to acknowledge your contributions.
|
||||
Your efforts to responsibly disclose your findings are sincerely appreciated. There isn't a security bounty program available, but any security contributions will be duly acknowledged to recognize your valuable input.
|
||||
|
||||
## PGP key
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ packages:
|
||||
# and three keywords: "$all", "$anonymous", "$authenticated"
|
||||
access: $all
|
||||
|
||||
# allow all known users to publish/publish packages
|
||||
# allow all known users to publish/unpublish packages
|
||||
# (anyone can register by default, remember?)
|
||||
publish: $authenticated
|
||||
unpublish: $authenticated
|
||||
|
||||
@@ -90,7 +90,7 @@ packages:
|
||||
# and three keywords: "$all", "$anonymous", "$authenticated"
|
||||
access: $all
|
||||
|
||||
# allow all known users to publish/publish packages
|
||||
# allow all known users to publish/unpublish packages
|
||||
# (anyone can register by default, remember?)
|
||||
publish: $authenticated
|
||||
unpublish: $authenticated
|
||||
|
||||
@@ -88,7 +88,7 @@ packages:
|
||||
# and three keywords: "$all", "$anonymous", "$authenticated"
|
||||
access: $all
|
||||
|
||||
# allow all known users to publish/publish packages
|
||||
# allow all known users to publish/unpublish packages
|
||||
# (anyone can register by default, remember?)
|
||||
publish: $authenticated
|
||||
unpublish: $authenticated
|
||||
|
||||
@@ -90,7 +90,7 @@ packages:
|
||||
# and three keywords: "$all", "$anonymous", "$authenticated"
|
||||
access: $all
|
||||
|
||||
# allow all known users to publish/publish packages
|
||||
# allow all known users to publish/unpublish packages
|
||||
# (anyone can register by default, remember?)
|
||||
publish: $authenticated
|
||||
unpublish: $authenticated
|
||||
|
||||
@@ -7,18 +7,18 @@
|
||||
|
||||
### Commands Tested
|
||||
|
||||
| cmd | npm6 | npm7 | npm8 | npm9 | npm10 | pnpm6 | pnpm7 | yarn1 | yarn2 | yarn3 | yarn4 |
|
||||
| --------- | ---- | ---- | ---- | ---- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
|
||||
| publish | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| info | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| audit | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
|
||||
| install | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| deprecate | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| ping | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| search | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| star | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| stars | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| dist-tag | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
||||
| cmd | npm6 | npm7 | npm8 | npm9 | npm10 | pnpm8 | pnpm9 (beta) | yarn1 | yarn2 | yarn3 | yarn4 |
|
||||
| --------- | ---- | ---- | ---- | ---- | ----- | ----- | ------------ | ----- | ----- | ----- | ----- |
|
||||
| publish | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| info | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| audit | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
|
||||
| install | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| deprecate | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| ping | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| search | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| star | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| stars | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ⛔ | ⛔ | ⛔ | ⛔ |
|
||||
| dist-tag | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
||||
|
||||
> notes:
|
||||
>
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
"main": "./build/index.js",
|
||||
"types": "./build/index.d.ts",
|
||||
"devDependencies": {
|
||||
"@verdaccio/config": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/config": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/types": "workspace:12.0.0-next.2",
|
||||
"debug": "4.3.4",
|
||||
"fs-extra": "11.2.0",
|
||||
@@ -14,7 +14,7 @@
|
||||
"got": "11.8.6",
|
||||
"js-yaml": "4.1.0",
|
||||
"lodash": "4.17.21",
|
||||
"verdaccio": "workspace:7.0.0-next-7.11"
|
||||
"verdaccio": "workspace:7.0.0-next-7.14"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0",
|
||||
"npm": "10.4.0"
|
||||
"npm": "10.5.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0",
|
||||
"npm": "9.9.2"
|
||||
"npm": "9.9.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0",
|
||||
"npm": "9.9.2"
|
||||
"npm": "9.9.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0",
|
||||
"npm": "9.9.2"
|
||||
"npm": "9.9.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0",
|
||||
"npm": "9.9.2"
|
||||
"npm": "9.9.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
# @verdaccio/e2e-cli-pnpm6
|
||||
|
||||
## 1.0.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 351aeeaa8: fix(deps): @verdaccio/utils should be a prod dep of local-storage
|
||||
- Updated dependencies [351aeeaa8]
|
||||
- Updated dependencies [d167f92e1]
|
||||
- Updated dependencies [c383eb68c]
|
||||
- @verdaccio/test-cli-commons@1.1.0
|
||||
|
||||
## 1.0.1-6-next.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [c383eb68]
|
||||
- @verdaccio/test-cli-commons@1.1.0-6-next.7
|
||||
|
||||
## 1.0.1-6-next.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d167f92e]
|
||||
- @verdaccio/test-cli-commons@1.1.0-6-next.6
|
||||
|
||||
## 1.0.1-6-next.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.5
|
||||
|
||||
## 1.0.1-6-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.4
|
||||
|
||||
## 1.0.1-6-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 351aeeaa: fix(deps): @verdaccio/utils should be a prod dep of local-storage
|
||||
- Updated dependencies [351aeeaa]
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.3
|
||||
|
||||
## 1.0.1-6-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.2
|
||||
|
||||
## 1.0.1-6-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.1
|
||||
|
||||
## 1.0.1-6-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.0
|
||||
@@ -1,45 +0,0 @@
|
||||
import { addRegistry, initialSetup, prepareGenericEmptyProject } from '@verdaccio/test-cli-commons';
|
||||
|
||||
import { pnpm } from './utils';
|
||||
|
||||
describe('audit a package', () => {
|
||||
jest.setTimeout(10000);
|
||||
let registry;
|
||||
|
||||
beforeAll(async () => {
|
||||
const setup = await initialSetup();
|
||||
registry = setup.registry;
|
||||
await registry.init();
|
||||
});
|
||||
|
||||
test.each([['verdaccio-memory', '@verdaccio/cli']])(
|
||||
'should audit a package %s',
|
||||
async (pkgName) => {
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0-patch',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl(),
|
||||
{ jquery: '3.6.1' }
|
||||
);
|
||||
// install is required to create package lock file
|
||||
await pnpm({ cwd: tempFolder }, 'install', ...addRegistry(registry.getRegistryUrl()));
|
||||
const resp = await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'audit',
|
||||
'--json',
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
const parsedBody = JSON.parse(resp.stdout as string);
|
||||
expect(parsedBody.metadata).toBeDefined();
|
||||
expect(parsedBody.actions).toBeDefined();
|
||||
expect(parsedBody.advisories).toBeDefined();
|
||||
expect(parsedBody.muted).toBeDefined();
|
||||
}
|
||||
);
|
||||
|
||||
afterAll(async () => {
|
||||
registry.stop();
|
||||
});
|
||||
});
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"private": true,
|
||||
"name": "@verdaccio/e2e-cli-pnpm6",
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0",
|
||||
"pnpm": "^6.35.1"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
import { SpawnOptions } from 'child_process';
|
||||
import { join } from 'path';
|
||||
|
||||
import { exec } from '@verdaccio/test-cli-commons';
|
||||
|
||||
function getCommand() {
|
||||
return join(__dirname, './node_modules/.bin/pnpm');
|
||||
}
|
||||
|
||||
function pnpm(options: SpawnOptions, ...args: string[]) {
|
||||
return exec(options, getCommand(), args);
|
||||
}
|
||||
|
||||
export { pnpm };
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"extends": "../../../.babelrc"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"rules": {
|
||||
"no-console": 0,
|
||||
"@typescript-eslint/no-var-requires": 0,
|
||||
"@typescript-eslint/explicit-member-accessibility": 0
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
# @verdaccio/e2e-cli-pnpm7
|
||||
|
||||
## 1.0.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 351aeeaa8: fix(deps): @verdaccio/utils should be a prod dep of local-storage
|
||||
- Updated dependencies [351aeeaa8]
|
||||
- Updated dependencies [d167f92e1]
|
||||
- Updated dependencies [c383eb68c]
|
||||
- @verdaccio/test-cli-commons@1.1.0
|
||||
|
||||
## 1.0.1-6-next.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [c383eb68]
|
||||
- @verdaccio/test-cli-commons@1.1.0-6-next.7
|
||||
|
||||
## 1.0.1-6-next.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [d167f92e]
|
||||
- @verdaccio/test-cli-commons@1.1.0-6-next.6
|
||||
|
||||
## 1.0.1-6-next.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.5
|
||||
|
||||
## 1.0.1-6-next.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.4
|
||||
|
||||
## 1.0.1-6-next.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 351aeeaa: fix(deps): @verdaccio/utils should be a prod dep of local-storage
|
||||
- Updated dependencies [351aeeaa]
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.3
|
||||
|
||||
## 1.0.1-6-next.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.2
|
||||
|
||||
## 1.0.1-6-next.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.1
|
||||
|
||||
## 1.0.1-6-next.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/test-cli-commons@1.0.1-6-next.0
|
||||
@@ -1,115 +0,0 @@
|
||||
import {
|
||||
addRegistry,
|
||||
initialSetup,
|
||||
pnpmUtils,
|
||||
prepareGenericEmptyProject,
|
||||
} from '@verdaccio/test-cli-commons';
|
||||
|
||||
import { pnpm } from './utils';
|
||||
|
||||
describe('deprecate a package', () => {
|
||||
jest.setTimeout(20000);
|
||||
let registry;
|
||||
|
||||
async function deprecate(tempFolder, packageVersion, registry, message) {
|
||||
await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'deprecate',
|
||||
packageVersion,
|
||||
message,
|
||||
'--json',
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
}
|
||||
|
||||
beforeAll(async () => {
|
||||
const setup = await initialSetup();
|
||||
registry = setup.registry;
|
||||
await registry.init();
|
||||
});
|
||||
|
||||
test.each([['@verdaccio/deprecated-1']])(
|
||||
'should deprecate a single package %s',
|
||||
async (pkgName) => {
|
||||
const message = 'some message';
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl()
|
||||
);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
// deprecate one version
|
||||
await deprecate(tempFolder, `${pkgName}@1.0.0`, registry, message);
|
||||
// verify is deprecated
|
||||
const infoBody = await pnpmUtils.getInfoVersions(pnpm, `${pkgName}`, registry);
|
||||
expect(infoBody.name).toEqual(pkgName);
|
||||
expect(infoBody.deprecated).toEqual(message);
|
||||
}
|
||||
);
|
||||
|
||||
test.each([['@verdaccio/deprecated-2']])('should un-deprecate a package %s', async (pkgName) => {
|
||||
const message = 'some message';
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl()
|
||||
);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
// deprecate one version
|
||||
await deprecate(tempFolder, `${pkgName}@1.0.0`, registry, message);
|
||||
// verify is deprecated
|
||||
const infoBody = await pnpmUtils.getInfoVersions(pnpm, `${pkgName}`, registry);
|
||||
expect(infoBody.deprecated).toEqual(message);
|
||||
// empty string is same as undeprecate
|
||||
await deprecate(tempFolder, `${pkgName}@1.0.0`, registry, '');
|
||||
const infoBody2 = await pnpmUtils.getInfoVersions(pnpm, `${pkgName}`, registry);
|
||||
expect(infoBody2.deprecated).toBeUndefined();
|
||||
});
|
||||
|
||||
test.each([['@verdaccio/deprecated-3']])(
|
||||
'should deprecate a multiple packages %s',
|
||||
async (pkgName) => {
|
||||
const message = 'some message';
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl()
|
||||
);
|
||||
// publish 1.0.0
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
// publish 1.1.0
|
||||
await pnpmUtils.bumbUp(pnpm, tempFolder, registry);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
// publish 1.2.0
|
||||
await pnpmUtils.bumbUp(pnpm, tempFolder, registry);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
// publish 1.3.0
|
||||
await pnpmUtils.bumbUp(pnpm, tempFolder, registry);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
// // deprecate all version
|
||||
await deprecate(tempFolder, pkgName, registry, message);
|
||||
// verify is deprecated
|
||||
for (let v of ['1.0.0', '1.1.0', '1.2.0', '1.3.0']) {
|
||||
const infoResp = await pnpmUtils.getInfoVersions(pnpm, `${pkgName}@${v}`, registry);
|
||||
expect(infoResp.deprecated).toEqual(message);
|
||||
}
|
||||
// publish normal version
|
||||
// publish 1.4.0
|
||||
await pnpmUtils.bumbUp(pnpm, tempFolder, registry);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
const infoResp = await pnpmUtils.getInfoVersions(pnpm, `${pkgName}@1.4.0`, registry);
|
||||
// must be not deprecated
|
||||
expect(infoResp.deprecated).toBeUndefined();
|
||||
}
|
||||
);
|
||||
|
||||
afterAll(async () => {
|
||||
registry.stop();
|
||||
});
|
||||
});
|
||||
@@ -1,91 +0,0 @@
|
||||
import {
|
||||
addRegistry,
|
||||
initialSetup,
|
||||
pnpmUtils,
|
||||
prepareGenericEmptyProject,
|
||||
} from '@verdaccio/test-cli-commons';
|
||||
|
||||
import { pnpm } from './utils';
|
||||
|
||||
describe('publish a package', () => {
|
||||
jest.setTimeout(20000);
|
||||
let registry;
|
||||
|
||||
beforeAll(async () => {
|
||||
const setup = await initialSetup();
|
||||
registry = setup.registry;
|
||||
await registry.init();
|
||||
});
|
||||
|
||||
test.each([['@foo/foo', 'foo']])('should list dist-tags for %s', async (pkgName) => {
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl()
|
||||
);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
await pnpmUtils.bumbUp(pnpm, tempFolder, registry);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry, ['--tag', 'beta']);
|
||||
const resp2 = await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'dist-tag',
|
||||
'ls',
|
||||
'--json',
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
expect(resp2.stdout).toEqual('beta: 1.1.0latest: 1.0.0');
|
||||
});
|
||||
|
||||
test.each([['@verdaccio/bar']])('should remove tag with dist-tags for %s', async (pkgName) => {
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl()
|
||||
);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
await pnpmUtils.bumbUp(pnpm, tempFolder, registry);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry, ['--tag', 'beta']);
|
||||
const resp2 = await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'dist-tag',
|
||||
'rm',
|
||||
`${pkgName}@1.1.0`,
|
||||
'beta',
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
expect(resp2.stdout).toEqual('-beta: @verdaccio/bar@1.1.0');
|
||||
});
|
||||
|
||||
test.each([['@verdaccio/five']])(
|
||||
'should add tag to package and version with dist-tags for %s',
|
||||
async (pkgName) => {
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl()
|
||||
);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
await pnpmUtils.bumbUp(pnpm, tempFolder, registry);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
const resp2 = await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'dist-tag',
|
||||
'add',
|
||||
`${pkgName}@1.1.0`,
|
||||
'alfa',
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
expect(resp2.stdout).toEqual(`+alfa: ${pkgName}@1.1.0`);
|
||||
}
|
||||
);
|
||||
|
||||
afterAll(async () => {
|
||||
registry.stop();
|
||||
});
|
||||
});
|
||||
@@ -1,31 +0,0 @@
|
||||
import { addRegistry, initialSetup } from '@verdaccio/test-cli-commons';
|
||||
|
||||
import { pnpm } from './utils';
|
||||
|
||||
describe('install a package', () => {
|
||||
jest.setTimeout(10000);
|
||||
let registry;
|
||||
|
||||
beforeAll(async () => {
|
||||
const setup = await initialSetup();
|
||||
registry = setup.registry;
|
||||
await registry.init();
|
||||
});
|
||||
|
||||
test('should run pnpm info json body', async () => {
|
||||
const resp = await pnpm(
|
||||
{},
|
||||
'info',
|
||||
'verdaccio',
|
||||
'--json',
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
const parsedBody = JSON.parse(resp.stdout as string);
|
||||
expect(parsedBody.name).toEqual('verdaccio');
|
||||
expect(parsedBody.dependencies).toBeDefined();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
registry.stop();
|
||||
});
|
||||
});
|
||||
@@ -1,36 +0,0 @@
|
||||
import { addRegistry, initialSetup, prepareGenericEmptyProject } from '@verdaccio/test-cli-commons';
|
||||
|
||||
import { pnpm } from './utils';
|
||||
|
||||
describe('install a project packages', () => {
|
||||
jest.setTimeout(80000);
|
||||
let registry;
|
||||
|
||||
beforeAll(async () => {
|
||||
const setup = await initialSetup();
|
||||
registry = setup.registry;
|
||||
await registry.init();
|
||||
});
|
||||
|
||||
test('should run npm install json body', async () => {
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
'something',
|
||||
'1.0.0-patch',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl(),
|
||||
{ react: '18.2.0' }
|
||||
);
|
||||
const resp = await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'install',
|
||||
'--reporter=default',
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
expect(resp.stdout).toMatch(/react/);
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
registry.stop();
|
||||
});
|
||||
});
|
||||
@@ -1,3 +0,0 @@
|
||||
const config = require('../jest.config');
|
||||
|
||||
module.exports = { ...config };
|
||||
@@ -1,24 +0,0 @@
|
||||
import { addRegistry, initialSetup } from '@verdaccio/test-cli-commons';
|
||||
|
||||
import { pnpm } from './utils';
|
||||
|
||||
describe('ping registry', () => {
|
||||
jest.setTimeout(10000);
|
||||
let registry;
|
||||
|
||||
beforeAll(async () => {
|
||||
const setup = await initialSetup();
|
||||
registry = setup.registry;
|
||||
await registry.init();
|
||||
});
|
||||
|
||||
test('should ping registry', async () => {
|
||||
const resp = await pnpm({}, 'ping', '--json', ...addRegistry(registry.getRegistryUrl()));
|
||||
const parsedBody = JSON.parse(resp.stdout as string);
|
||||
expect(parsedBody.registry).toEqual(registry.getRegistryUrl() + '/');
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
registry.stop();
|
||||
});
|
||||
});
|
||||
@@ -1,41 +0,0 @@
|
||||
import { addRegistry, initialSetup, prepareGenericEmptyProject } from '@verdaccio/test-cli-commons';
|
||||
|
||||
import { pnpm } from './utils';
|
||||
|
||||
describe('install a package', () => {
|
||||
jest.setTimeout(10000);
|
||||
let registry;
|
||||
|
||||
beforeAll(async () => {
|
||||
const setup = await initialSetup();
|
||||
registry = setup.registry;
|
||||
await registry.init();
|
||||
});
|
||||
|
||||
test.each([['verdaccio-memory', 'verdaccio', '@verdaccio/foo', '@verdaccio/some-foo']])(
|
||||
'should publish a package %s',
|
||||
async (pkgName) => {
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0-patch',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl()
|
||||
);
|
||||
const resp = await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'publish',
|
||||
'--json',
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
const parsedBody = JSON.parse(resp.stdout as string);
|
||||
expect(parsedBody.name).toEqual(pkgName);
|
||||
expect(parsedBody.files).toBeDefined();
|
||||
expect(parsedBody.files).toBeDefined();
|
||||
}
|
||||
);
|
||||
|
||||
afterAll(async () => {
|
||||
registry.stop();
|
||||
});
|
||||
});
|
||||
@@ -1,33 +0,0 @@
|
||||
import { addRegistry, initialSetup } from '@verdaccio/test-cli-commons';
|
||||
|
||||
import { pnpm } from './utils';
|
||||
|
||||
describe('search a package', () => {
|
||||
jest.setTimeout(10000);
|
||||
let registry;
|
||||
|
||||
beforeAll(async () => {
|
||||
const setup = await initialSetup();
|
||||
registry = setup.registry;
|
||||
await registry.init();
|
||||
});
|
||||
|
||||
test('should search a package', async () => {
|
||||
const resp = await pnpm(
|
||||
{},
|
||||
'search',
|
||||
'@verdaccio/cli',
|
||||
'--json',
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
const parsedBody = JSON.parse(resp.stdout as string);
|
||||
const pkgFind = parsedBody.find((item) => {
|
||||
return item.name === '@verdaccio/cli';
|
||||
});
|
||||
expect(pkgFind.name).toEqual('@verdaccio/cli');
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
registry.stop();
|
||||
});
|
||||
});
|
||||
@@ -1,89 +0,0 @@
|
||||
import {
|
||||
addRegistry,
|
||||
initialSetup,
|
||||
pnpmUtils,
|
||||
prepareGenericEmptyProject,
|
||||
} from '@verdaccio/test-cli-commons';
|
||||
|
||||
import { pnpm } from './utils';
|
||||
|
||||
describe('star a package', () => {
|
||||
jest.setTimeout(20000);
|
||||
let registry;
|
||||
|
||||
beforeAll(async () => {
|
||||
const setup = await initialSetup();
|
||||
registry = setup.registry;
|
||||
await registry.init();
|
||||
});
|
||||
|
||||
test.each([['@verdaccio/foo']])('should star a package %s', async (pkgName) => {
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0-patch',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl()
|
||||
);
|
||||
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
const resp = await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'star',
|
||||
pkgName,
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
expect(resp.stdout).toEqual(`★ ${pkgName}`);
|
||||
});
|
||||
|
||||
test.each([['@verdaccio/bar']])('should unstar a package %s', async (pkgName) => {
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0-patch',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl()
|
||||
);
|
||||
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
const resp = await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'star',
|
||||
pkgName,
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
expect(resp.stdout).toEqual(`★ ${pkgName}`);
|
||||
|
||||
const resp1 = await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'unstar',
|
||||
pkgName,
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
expect(resp1.stdout).toEqual(`☆ ${pkgName}`);
|
||||
});
|
||||
|
||||
test('should list stars of a user %s', async () => {
|
||||
const pkgName = '@verdaccio/stars';
|
||||
const { tempFolder } = await prepareGenericEmptyProject(
|
||||
pkgName,
|
||||
'1.0.0-patch',
|
||||
registry.port,
|
||||
registry.getToken(),
|
||||
registry.getRegistryUrl()
|
||||
);
|
||||
await pnpmUtils.publish(pnpm, tempFolder, pkgName, registry);
|
||||
await pnpm({ cwd: tempFolder }, 'star', pkgName, ...addRegistry(registry.getRegistryUrl()));
|
||||
const resp = await pnpm(
|
||||
{ cwd: tempFolder },
|
||||
'stars',
|
||||
...addRegistry(registry.getRegistryUrl())
|
||||
);
|
||||
// side effects: this result is affected the the package published in the previous step
|
||||
expect(resp.stdout).toEqual(`@verdaccio/foo@verdaccio/stars`);
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
registry.stop();
|
||||
});
|
||||
});
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"extends": "../../../tsconfig.reference.json",
|
||||
"references": [
|
||||
{
|
||||
"path": "../cli-commons"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0",
|
||||
"pnpm": "^8.0.0-alpha.0"
|
||||
"pnpm": "8.15.5"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"private": true,
|
||||
"name": "@verdaccio/e2e-cli-pnpm7",
|
||||
"name": "@verdaccio/e2e-cli-pnpm9",
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0",
|
||||
"pnpm": "^7.27.1"
|
||||
"pnpm": "9.0.0-alpha.10"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0",
|
||||
"yarn": "1.22.21"
|
||||
"yarn": "1.22.22"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0",
|
||||
"@yarnpkg/cli-dist": "3.8.0"
|
||||
"@yarnpkg/cli-dist": "3.8.1"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "jest"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"name": "@verdaccio/e2e-cli-yarn4",
|
||||
"version": "1.0.1",
|
||||
"dependencies": {
|
||||
"@yarnpkg/cli-dist": "4.1.0",
|
||||
"@yarnpkg/cli-dist": "4.1.1",
|
||||
"@verdaccio/test-cli-commons": "workspace:1.1.0"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
"name": "@verdaccio/e2e-ui",
|
||||
"version": "2.0.0",
|
||||
"devDependencies": {
|
||||
"verdaccio": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/config": "workspace:7.0.0-next-7.11",
|
||||
"verdaccio": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/config": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/test-helper": "workspace:3.0.0-next-7.2",
|
||||
"debug": "4.3.4",
|
||||
"cypress": "^13.6.0",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[[headers]]
|
||||
for = "/*"
|
||||
[headers.values]
|
||||
X-Frame-Options = "DENY"
|
||||
X-Frame-Options = "SAMEORIGIN"
|
||||
X-XSS-Protection = "1; mode=block"
|
||||
X-Content-Type-Options = "nosniff"
|
||||
Referrer-Policy = "no-referrer"
|
||||
|
||||
@@ -1,5 +1,46 @@
|
||||
# @verdaccio/api
|
||||
|
||||
## 7.0.0-next-7.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [b0946b2]
|
||||
- Updated dependencies [f967a69]
|
||||
- Updated dependencies [4dc62a8]
|
||||
- Updated dependencies [253cc13]
|
||||
- @verdaccio/middleware@7.0.0-next-7.14
|
||||
- @verdaccio/store@7.0.0-next-7.14
|
||||
- @verdaccio/auth@7.0.0-next-7.14
|
||||
- @verdaccio/core@7.0.0-next-7.14
|
||||
- @verdaccio/config@7.0.0-next-7.14
|
||||
- @verdaccio/utils@7.0.0-next-7.14
|
||||
- @verdaccio/logger@7.0.0-next-7.14
|
||||
|
||||
## 7.0.0-next-7.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a99a4bb]
|
||||
- @verdaccio/config@7.0.0-next-7.13
|
||||
- @verdaccio/auth@7.0.0-next-7.13
|
||||
- @verdaccio/middleware@7.0.0-next-7.13
|
||||
- @verdaccio/store@7.0.0-next-7.13
|
||||
- @verdaccio/logger@7.0.0-next-7.13
|
||||
- @verdaccio/core@7.0.0-next-7.13
|
||||
- @verdaccio/utils@7.0.0-next-7.13
|
||||
|
||||
## 7.0.0-next-7.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/store@7.0.0-next-7.12
|
||||
- @verdaccio/core@7.0.0-next-7.12
|
||||
- @verdaccio/config@7.0.0-next-7.12
|
||||
- @verdaccio/auth@7.0.0-next-7.12
|
||||
- @verdaccio/middleware@7.0.0-next-7.12
|
||||
- @verdaccio/utils@7.0.0-next-7.12
|
||||
- @verdaccio/logger@7.0.0-next-7.12
|
||||
|
||||
## 7.0.0-next-7.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/api",
|
||||
"version": "7.0.0-next-7.11",
|
||||
"version": "7.0.0-next-7.14",
|
||||
"description": "loaders logic",
|
||||
"main": "./build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
@@ -38,18 +38,18 @@
|
||||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@verdaccio/auth": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/config": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/logger": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/middleware": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/store": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/utils": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/auth": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/config": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/logger": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/middleware": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/store": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/utils": "workspace:7.0.0-next-7.14",
|
||||
"abortcontroller-polyfill": "1.7.5",
|
||||
"body-parser": "1.20.2",
|
||||
"cookies": "0.9.0",
|
||||
"debug": "4.3.4",
|
||||
"express": "4.18.2",
|
||||
"express": "4.18.3",
|
||||
"lodash": "4.17.21",
|
||||
"mime": "2.6.0",
|
||||
"semver": "7.6.0"
|
||||
|
||||
@@ -67,7 +67,7 @@ export default function (route: Router, auth: Auth, storage: Storage): void {
|
||||
const { package: pkgName, filename } = req.params;
|
||||
const abort = new AbortController();
|
||||
try {
|
||||
const stream = (await storage.getTarballNext(pkgName, filename, {
|
||||
const stream = (await storage.getTarball(pkgName, filename, {
|
||||
signal: abort.signal,
|
||||
// TODO: review why this param
|
||||
// enableRemote: true,
|
||||
|
||||
@@ -50,12 +50,13 @@ export default function (route, auth: Auth, storage: Storage): void {
|
||||
from = parseInt(from, 10) || 0;
|
||||
|
||||
try {
|
||||
debug('storage search initiated');
|
||||
data = await storage.search({
|
||||
query,
|
||||
url,
|
||||
abort,
|
||||
});
|
||||
debug('stream finish');
|
||||
debug('storage items tota: %o', data.length);
|
||||
const checkAccessPromises: searchUtils.SearchItemPkg[] = await Promise.all(
|
||||
data.map((pkgItem) => {
|
||||
return checkAccess(pkgItem, auth, req.remote_user);
|
||||
|
||||
@@ -1,5 +1,44 @@
|
||||
# @verdaccio/auth
|
||||
|
||||
## 7.0.0-next-7.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 4dc62a8: fix: adduser error message grammar (@tobbe in #4586)
|
||||
- Updated dependencies [b6d5652]
|
||||
- @verdaccio/signature@7.0.0-next-7.4
|
||||
- @verdaccio/core@7.0.0-next-7.14
|
||||
- @verdaccio/config@7.0.0-next-7.14
|
||||
- @verdaccio/loaders@7.0.0-next-7.14
|
||||
- verdaccio-htpasswd@12.0.0-next-7.14
|
||||
- @verdaccio/utils@7.0.0-next-7.14
|
||||
- @verdaccio/logger@7.0.0-next-7.14
|
||||
|
||||
## 7.0.0-next-7.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a99a4bb]
|
||||
- @verdaccio/config@7.0.0-next-7.13
|
||||
- @verdaccio/loaders@7.0.0-next-7.13
|
||||
- verdaccio-htpasswd@12.0.0-next-7.13
|
||||
- @verdaccio/signature@7.0.0-next.3
|
||||
- @verdaccio/logger@7.0.0-next-7.13
|
||||
- @verdaccio/core@7.0.0-next-7.13
|
||||
- @verdaccio/utils@7.0.0-next-7.13
|
||||
|
||||
## 7.0.0-next-7.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/core@7.0.0-next-7.12
|
||||
- @verdaccio/config@7.0.0-next-7.12
|
||||
- @verdaccio/loaders@7.0.0-next-7.12
|
||||
- verdaccio-htpasswd@12.0.0-next-7.12
|
||||
- @verdaccio/utils@7.0.0-next-7.12
|
||||
- @verdaccio/signature@7.0.0-next.3
|
||||
- @verdaccio/logger@7.0.0-next-7.12
|
||||
|
||||
## 7.0.0-next-7.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/auth",
|
||||
"version": "7.0.0-next-7.11",
|
||||
"version": "7.0.0-next-7.14",
|
||||
"description": "logger",
|
||||
"main": "./build/index.js",
|
||||
"types": "./build/index.d.ts",
|
||||
@@ -38,20 +38,20 @@
|
||||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/config": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/loaders": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/logger": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/signature": "workspace:7.0.0-next.3",
|
||||
"@verdaccio/utils": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/config": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/loaders": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/logger": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/signature": "workspace:7.0.0-next-7.4",
|
||||
"@verdaccio/utils": "workspace:7.0.0-next-7.14",
|
||||
"debug": "4.3.4",
|
||||
"lodash": "4.17.21",
|
||||
"verdaccio-htpasswd": "workspace:12.0.0-next-7.11"
|
||||
"verdaccio-htpasswd": "workspace:12.0.0-next-7.14"
|
||||
},
|
||||
"devDependencies": {
|
||||
"express": "4.18.2",
|
||||
"express": "4.18.3",
|
||||
"supertest": "6.3.4",
|
||||
"@verdaccio/middleware": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/middleware": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/types": "workspace:12.0.0-next.2"
|
||||
},
|
||||
"funding": {
|
||||
|
||||
@@ -239,7 +239,7 @@ class Auth implements IAuthMiddleware, TokenEncryption, pluginUtils.IBasicAuth {
|
||||
password,
|
||||
function (err: VerdaccioError | null, ok?: boolean | string): void {
|
||||
if (err) {
|
||||
debug('the user %o could not being added. Error: %o', user, err?.message);
|
||||
debug('the user %o could not be added. Error: %o', user, err?.message);
|
||||
return cb(err);
|
||||
}
|
||||
if (ok) {
|
||||
|
||||
@@ -558,9 +558,10 @@ describe('AuthTest', () => {
|
||||
const getServer = async function (auth) {
|
||||
const app = express();
|
||||
app.use(express.json({ strict: false, limit: '10mb' }));
|
||||
|
||||
app.use(auth.apiJWTmiddleware());
|
||||
// @ts-expect-error
|
||||
app.use(errorReportingMiddleware(logger));
|
||||
app.use(auth.apiJWTmiddleware());
|
||||
app.get('/*', (req, res, next) => {
|
||||
if ((req as $RequestExtend).remote_user.error) {
|
||||
next(new Error((req as $RequestExtend).remote_user.error));
|
||||
@@ -575,6 +576,7 @@ describe('AuthTest', () => {
|
||||
app.use(final);
|
||||
return app;
|
||||
};
|
||||
|
||||
describe('legacy signature', () => {
|
||||
describe('error cases', () => {
|
||||
test('should handle invalid auth token', async () => {
|
||||
|
||||
@@ -1,5 +1,33 @@
|
||||
# @verdaccio/cli
|
||||
|
||||
## 7.0.0-next-7.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/node-api@7.0.0-next-7.14
|
||||
- @verdaccio/core@7.0.0-next-7.14
|
||||
- @verdaccio/config@7.0.0-next-7.14
|
||||
- @verdaccio/logger@7.0.0-next-7.14
|
||||
|
||||
## 7.0.0-next-7.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [a99a4bb]
|
||||
- @verdaccio/config@7.0.0-next-7.13
|
||||
- @verdaccio/node-api@7.0.0-next-7.13
|
||||
- @verdaccio/logger@7.0.0-next-7.13
|
||||
- @verdaccio/core@7.0.0-next-7.13
|
||||
|
||||
## 7.0.0-next-7.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/node-api@7.0.0-next-7.12
|
||||
- @verdaccio/core@7.0.0-next-7.12
|
||||
- @verdaccio/config@7.0.0-next-7.12
|
||||
- @verdaccio/logger@7.0.0-next-7.12
|
||||
|
||||
## 7.0.0-next-7.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/cli",
|
||||
"version": "7.0.0-next-7.11",
|
||||
"version": "7.0.0-next-7.14",
|
||||
"author": {
|
||||
"name": "Juan Picado",
|
||||
"email": "juanpicado19@gmail.com"
|
||||
@@ -43,10 +43,10 @@
|
||||
"start": "ts-node src/index.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/config": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/logger": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/node-api": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/config": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/logger": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/node-api": "workspace:7.0.0-next-7.14",
|
||||
"clipanion": "3.2.1",
|
||||
"envinfo": "7.11.0",
|
||||
"kleur": "4.1.5",
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
# @verdaccio/config
|
||||
|
||||
## 7.0.0-next-7.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/core@7.0.0-next-7.14
|
||||
- @verdaccio/utils@7.0.0-next-7.14
|
||||
|
||||
## 7.0.0-next-7.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- a99a4bb: fix config builder erroring when passed partial config
|
||||
- @verdaccio/core@7.0.0-next-7.13
|
||||
- @verdaccio/utils@7.0.0-next-7.13
|
||||
|
||||
## 7.0.0-next-7.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/core@7.0.0-next-7.12
|
||||
- @verdaccio/utils@7.0.0-next-7.12
|
||||
|
||||
## 7.0.0-next-7.11
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,5 +1,74 @@
|
||||
# @verdaccio/config
|
||||
|
||||
## Overview
|
||||
|
||||
The `@verdaccio/config` package provides a powerful configuration builder constructor for programmatically creating configuration objects for Verdaccio, a lightweight private npm proxy registry. With this package, users can easily manage various configuration aspects such as package access, uplinks, security settings, authentication, logging, and storage options.
|
||||
|
||||
## Installation
|
||||
|
||||
You can install via npm:
|
||||
|
||||
```bash
|
||||
npm install @verdaccio/config
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
To start using `@verdaccio/config`, import the `ConfigBuilder` class and begin constructing your configuration object:
|
||||
|
||||
## `ConfigBuilder` constructor
|
||||
|
||||
The `ConfigBuilder` class is a helper configuration builder constructor used to programmatically create configuration objects for testing or other purposes.
|
||||
|
||||
```typescript
|
||||
|
||||
import { ConfigBuilder } from '@verdaccio/config';
|
||||
|
||||
// Create a new configuration builder instance
|
||||
const config = ConfigBuilder.build({ security: { api: { legacy: false } } });
|
||||
|
||||
// Add package access configuration
|
||||
configBuilder.addPackageAccess('@scope/*', { access: 'read', publish: 'write' });
|
||||
|
||||
// Add an uplink configuration
|
||||
configBuilder.addUplink('npmjs', { url: 'https://registry.npmjs.org/' });
|
||||
|
||||
// Add security configuration
|
||||
configBuilder.addSecurity({ allow_offline: true });
|
||||
|
||||
// Get the configuration object
|
||||
const config = configBuilder.getConfig();
|
||||
|
||||
// Get the configuration yaml text
|
||||
const config = configBuilder.getAsYaml();
|
||||
```
|
||||
|
||||
### Methods
|
||||
|
||||
- `addPackageAccess(pattern: string, pkgAccess: PackageAccessYaml)`: Adds package access configuration.
|
||||
- `addUplink(id: string, uplink: UpLinkConf)`: Adds an uplink configuration.
|
||||
- `addSecurity(security: Partial<Security>)`: Adds security configuration.
|
||||
- `addAuth(auth: Partial<AuthConf>)`: Adds authentication configuration.
|
||||
- `addLogger(log: LoggerConfItem)`: Adds logger configuration.
|
||||
- `addStorage(storage: string | object)`: Adds storage configuration.
|
||||
- `getConfig(): ConfigYaml`: Retrieves the configuration object.
|
||||
- `getAsYaml(): string`: Retrieves the configuration object as YAML format.
|
||||
|
||||
## `getDefaultConfig`
|
||||
|
||||
This method is available in the package's index and retrieves the default configuration object.
|
||||
|
||||
```typescript
|
||||
import { getDefaultConfig } from '@verdaccio/config';
|
||||
|
||||
const defaultConfig = getDefaultConfig();
|
||||
```
|
||||
|
||||
## Other Methods
|
||||
|
||||
- `fromJStoYAML(config: ConfigYaml): string`: Converts a JavaScript configuration object to YAML format.
|
||||
- `parseConfigFile(filePath: string): ConfigYaml`: Parses a configuration file from the specified path and returns the configuration object.
|
||||
|
||||
### License
|
||||
|
||||
Verdaccio is [MIT licensed](https://github.com/verdaccio/verdaccio/blob/master/LICENSE)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/config",
|
||||
"version": "7.0.0-next-7.11",
|
||||
"version": "7.0.0-next-7.14",
|
||||
"description": "logger",
|
||||
"main": "./build/index.js",
|
||||
"types": "build/index.d.ts",
|
||||
@@ -38,8 +38,8 @@
|
||||
"build": "pnpm run build:js && pnpm run build:types"
|
||||
},
|
||||
"dependencies": {
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/utils": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/utils": "workspace:7.0.0-next-7.14",
|
||||
"debug": "4.3.4",
|
||||
"js-yaml": "4.1.0",
|
||||
"lodash": "4.17.21",
|
||||
|
||||
@@ -19,8 +19,7 @@ export default class ConfigBuilder {
|
||||
private config: ConfigYaml;
|
||||
|
||||
public constructor(config?: Partial<ConfigYaml>) {
|
||||
// @ts-ignore
|
||||
this.config = config ?? { uplinks: {}, packages: {}, security: {} };
|
||||
this.config = merge(config, { uplinks: {}, packages: {}, security: {} });
|
||||
}
|
||||
|
||||
public static build(config?: Partial<ConfigYaml>): ConfigBuilder {
|
||||
|
||||
@@ -82,7 +82,7 @@ packages:
|
||||
# and three keywords: "$all", "$anonymous", "$authenticated"
|
||||
access: $all
|
||||
|
||||
# allow all known users to publish/publish packages
|
||||
# allow all known users to publish/unpublish packages
|
||||
# (anyone can register by default, remember?)
|
||||
publish: $authenticated
|
||||
unpublish: $authenticated
|
||||
|
||||
@@ -86,7 +86,7 @@ packages:
|
||||
# and three keywords: "$all", "$anonymous", "$authenticated"
|
||||
access: $all
|
||||
|
||||
# Allow all known users to publish/publish packages
|
||||
# Allow all known users to publish/unpublish packages
|
||||
# (anyone can register by default, remember?)
|
||||
publish: $authenticated
|
||||
unpublish: $authenticated
|
||||
|
||||
@@ -67,5 +67,58 @@ describe('Config builder', () => {
|
||||
.addStorage('/tmp/verdaccio')
|
||||
.addSecurity({ api: { legacy: true } });
|
||||
expect(config.getAsYaml()).toMatchSnapshot();
|
||||
|
||||
expect(config.getConfig()).toEqual({
|
||||
uplinks: {
|
||||
upstream: {
|
||||
url: 'https://registry.verdaccio.org',
|
||||
},
|
||||
upstream2: {
|
||||
url: 'https://registry.verdaccio.org',
|
||||
},
|
||||
},
|
||||
packages: {
|
||||
'upstream/*': {
|
||||
access: 'public',
|
||||
publish: 'foo, bar',
|
||||
unpublish: 'foo, bar',
|
||||
proxy: 'some',
|
||||
},
|
||||
},
|
||||
security: {
|
||||
api: {
|
||||
legacy: true,
|
||||
},
|
||||
},
|
||||
log: {
|
||||
level: 'info',
|
||||
type: 'stdout',
|
||||
format: 'json',
|
||||
},
|
||||
storage: '/tmp/verdaccio',
|
||||
});
|
||||
});
|
||||
|
||||
test('should merge configurations', () => {
|
||||
// @ts-expect-error
|
||||
const config = ConfigBuilder.build({ security: { api: { legacy: false } } });
|
||||
config.addSecurity({ web: { verify: {}, sign: { algorithm: 'ES256' } } });
|
||||
config.addStorage('/tmp/verdaccio');
|
||||
expect(config.getConfig()).toEqual({
|
||||
security: {
|
||||
api: {
|
||||
legacy: false,
|
||||
},
|
||||
web: {
|
||||
verify: {},
|
||||
sign: {
|
||||
algorithm: 'ES256',
|
||||
},
|
||||
},
|
||||
},
|
||||
uplinks: {},
|
||||
packages: {},
|
||||
storage: '/tmp/verdaccio',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @verdaccio/core
|
||||
|
||||
## 7.0.0-next-7.14
|
||||
|
||||
## 7.0.0-next-7.13
|
||||
|
||||
## 7.0.0-next-7.12
|
||||
|
||||
## 7.0.0-next-7.11
|
||||
|
||||
## 7.0.0-next-7.10
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/core",
|
||||
"version": "7.0.0-next-7.11",
|
||||
"version": "7.0.0-next-7.14",
|
||||
"description": "core utilities",
|
||||
"keywords": [
|
||||
"private",
|
||||
|
||||
@@ -1,5 +1,31 @@
|
||||
# Change Log
|
||||
|
||||
## 12.0.0-next-7.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 253cc13: feat: add tarball details for published packages
|
||||
- Updated dependencies [b0946b2]
|
||||
- @verdaccio/url@12.0.0-next-7.14
|
||||
- @verdaccio/core@7.0.0-next-7.14
|
||||
- @verdaccio/utils@7.0.0-next-7.14
|
||||
|
||||
## 12.0.0-next-7.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/core@7.0.0-next-7.13
|
||||
- @verdaccio/url@12.0.0-next-7.13
|
||||
- @verdaccio/utils@7.0.0-next-7.13
|
||||
|
||||
## 12.0.0-next-7.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/core@7.0.0-next-7.12
|
||||
- @verdaccio/url@12.0.0-next-7.12
|
||||
- @verdaccio/utils@7.0.0-next-7.12
|
||||
|
||||
## 12.0.0-next-7.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@verdaccio/tarball",
|
||||
"version": "12.0.0-next-7.11",
|
||||
"version": "12.0.0-next-7.14",
|
||||
"description": "tarball utilities resolver",
|
||||
"keywords": [
|
||||
"private",
|
||||
@@ -24,7 +24,7 @@
|
||||
"repository": {
|
||||
"type": "https",
|
||||
"url": "https://github.com/verdaccio/verdaccio",
|
||||
"directory": "packages/core/url-resolver"
|
||||
"directory": "packages/core/tarball"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/verdaccio/verdaccio/issues"
|
||||
@@ -33,11 +33,13 @@
|
||||
"access": "public"
|
||||
},
|
||||
"dependencies": {
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.14",
|
||||
"@verdaccio/url": "workspace:12.0.0-next-7.14",
|
||||
"@verdaccio/utils": "workspace:7.0.0-next-7.14",
|
||||
"debug": "4.3.4",
|
||||
"@verdaccio/core": "workspace:7.0.0-next-7.11",
|
||||
"@verdaccio/url": "workspace:12.0.0-next-7.11",
|
||||
"@verdaccio/utils": "workspace:7.0.0-next-7.11",
|
||||
"lodash": "4.17.21"
|
||||
"gunzip-maybe": "^1.4.2",
|
||||
"lodash": "4.17.21",
|
||||
"tar-stream": "^3.1.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@verdaccio/types": "workspace:12.0.0-next.2",
|
||||
|
||||
34
packages/core/tarball/src/getTarballDetails.ts
Normal file
34
packages/core/tarball/src/getTarballDetails.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import gunzipMaybe from 'gunzip-maybe';
|
||||
import { Readable } from 'stream';
|
||||
import * as tarStream from 'tar-stream';
|
||||
|
||||
export type TarballDetails = {
|
||||
fileCount: number;
|
||||
unpackedSize: number; // in bytes
|
||||
};
|
||||
|
||||
export async function getTarballDetails(readable: Readable): Promise<TarballDetails> {
|
||||
let fileCount = 0;
|
||||
let unpackedSize = 0;
|
||||
|
||||
const unpack = tarStream.extract();
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
readable
|
||||
.pipe(gunzipMaybe())
|
||||
.pipe(unpack)
|
||||
.on('entry', (header, stream, next) => {
|
||||
fileCount++;
|
||||
unpackedSize += Number(header.size);
|
||||
stream.resume(); // important to ensure that "entry" events keep firing
|
||||
next();
|
||||
})
|
||||
.on('finish', () => {
|
||||
resolve({
|
||||
fileCount,
|
||||
unpackedSize,
|
||||
});
|
||||
})
|
||||
.on('error', reject);
|
||||
});
|
||||
}
|
||||
@@ -5,5 +5,6 @@ export {
|
||||
convertDistVersionToLocalTarballsUrl,
|
||||
} from './convertDistRemoteToLocalTarballUrls';
|
||||
export { extractTarballFromUrl, getLocalRegistryTarballUri } from './getLocalRegistryTarballUri';
|
||||
export { TarballDetails, getTarballDetails } from './getTarballDetails';
|
||||
|
||||
export { RequestOptions };
|
||||
|
||||
BIN
packages/core/tarball/tests/assets/tarball.tar
Normal file
BIN
packages/core/tarball/tests/assets/tarball.tar
Normal file
Binary file not shown.
BIN
packages/core/tarball/tests/assets/tarball.tgz
Normal file
BIN
packages/core/tarball/tests/assets/tarball.tgz
Normal file
Binary file not shown.
37
packages/core/tarball/tests/getTarballDetails.spec.ts
Normal file
37
packages/core/tarball/tests/getTarballDetails.spec.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { Readable } from 'stream';
|
||||
|
||||
import { getTarballDetails } from '../src/getTarballDetails.ts';
|
||||
|
||||
const getFilePath = (filename: string): string => {
|
||||
return path.resolve(__dirname, `assets/${filename}`);
|
||||
};
|
||||
|
||||
const getFileBuffer = async (filename: string): Promise<Buffer> => {
|
||||
return fs.promises.readFile(getFilePath(filename));
|
||||
};
|
||||
|
||||
describe('getTarballDetails', () => {
|
||||
test('should return stats of tarball (gzipped)', async () => {
|
||||
const buffer = await getFileBuffer('tarball.tgz');
|
||||
const readable = Readable.from(buffer);
|
||||
const details = await getTarballDetails(readable);
|
||||
expect(details.fileCount).toBe(2);
|
||||
expect(details.unpackedSize).toBe(1280);
|
||||
});
|
||||
|
||||
test('should return stats of tarball (uncompressed)', async () => {
|
||||
const buffer = await getFileBuffer('tarball.tar');
|
||||
const readable = Readable.from(buffer);
|
||||
const details = await getTarballDetails(readable);
|
||||
expect(details.fileCount).toBe(2);
|
||||
expect(details.unpackedSize).toBe(1280);
|
||||
});
|
||||
|
||||
test('should throw an error if the buffer is corrupt', async () => {
|
||||
const corruptBuffer = Buffer.from('this is not a tarball');
|
||||
const readable = Readable.from(corruptBuffer);
|
||||
await expect(getTarballDetails(readable)).rejects.toThrow();
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,24 @@
|
||||
# Change Log
|
||||
|
||||
## 12.0.0-next-7.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- b0946b2: Improved TS types for renderHTML() and related functions (by @tobbe in #4605)
|
||||
- @verdaccio/core@7.0.0-next-7.14
|
||||
|
||||
## 12.0.0-next-7.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/core@7.0.0-next-7.13
|
||||
|
||||
## 12.0.0-next-7.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @verdaccio/core@7.0.0-next-7.12
|
||||
|
||||
## 12.0.0-next-7.11
|
||||
|
||||
### 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