Compare commits

..

13 Commits

Author SHA1 Message Date
Juan Picado
d73ad92fa1 chore: update versions (6-next) (#3551)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2023-01-03 00:01:34 +01:00
renovate[bot]
b4baa10ac0 chore(deps): update actions/cache digest to 4723a57 (#3549)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-02 23:09:54 +01:00
Juan Picado
f58f886c48 Update ui-components.yml 2023-01-02 23:05:09 +01:00
Juan Picado
9997879743 feats: components UI for custom user interfaces (#3548) 2023-01-02 20:13:45 +01:00
verdacciobot
86d813840d chore: updated static data 2023-01-02 00:14:22 +00:00
verdacciobot
c856597e2c chore: updated static data 2022-12-29 00:13:26 +00:00
renovate[bot]
9b761945df fix(deps): update all core dependencies (#3542)
* fix(deps): update all core dependencies

* update deps

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Juan Picado <juanpicado19@gmail.com>
2022-12-26 09:43:07 +01:00
renovate[bot]
c353839683 fix(deps): update all linting dependencies (#3543)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-26 08:53:40 +01:00
renovate[bot]
d0829623aa chore(deps): update actions/cache digest to c1a5de8 (#3541)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-26 08:16:23 +01:00
verdacciobot
d08ffb6e34 chore: updated static data 2022-12-26 00:14:06 +00:00
Juan Picado
294018443e Update pre.json 2022-12-25 22:48:13 +01:00
Juan Picado
2b8c2aee07 chore: fix changeset 2022-12-25 20:44:09 +01:00
Juan Picado
176dee9757 chore: ignore docs folder 2022-12-25 18:52:47 +01:00
484 changed files with 127940 additions and 11460 deletions

View File

@@ -0,0 +1,27 @@
---
'@verdaccio/types': major
'@verdaccio/ui-theme': major
'@verdaccio/ui-components': major
---
feat(web): components for custom user interfaces
Provides a package that includes all components from the user interface, instead being embedded at the `@verdaccio/ui-theme` package.
```
npm i -D @verdaccio/ui-components
```
The package contains
- Components
- Providers
- Redux Storage
- Layouts (precomposed layouts ready to use)
- Custom Material Theme
The `@verdaccio/ui-theme` will consume this package and will use only those are need it.
> Prerequisites are using Redux, Material-UI and Translations with `i18next`.
Users could have their own Material UI theme and build custom layouts, adding new features without the need to modify the default project.

View File

@@ -33,8 +33,9 @@
"@verdaccio/cli-standalone": "6.0.0-alpha.3",
"@verdaccio/tarball": "11.0.0-alpha.3",
"@verdaccio/url": "11.0.0-alpha.3",
"@verdaccio/ui-components": "2.0.0-alpha.0",
"@verdaccio/server-fastify": "6.0.0-6-next.9",
"@verdaccio/eslint-config": "1.0.0",
"@verdaccio/eslint-config": "2.0.0-alpha.0",
"@verdaccio/core": "6.0.0-next.0",
"@verdaccio/test-helper": "1.0.0",
"docusaurus-plugin-contributors": "1.0.0",
@@ -105,6 +106,7 @@
"neat-toes-report",
"neat-toys-float",
"olive-candles-speak",
"orange-cows-pull",
"orange-flowers-cover",
"perfect-candles-clap",
"perfect-emus-clean",

View File

@@ -14,3 +14,7 @@ test/functional/store/*
docker-examples/**/lib/**/*.js
test/cli/e2e-yarn4/bin/yarn-4.0.0-rc.14.cjs
yarn.js
# storybook
packages/ui-components/storybook-static
dist.js
bundle.js

View File

@@ -32,7 +32,7 @@ jobs:
- name: Install
run: pnpm recursive install --frozen-lockfile --registry http://localhost:4873
- name: Cache .pnpm-store
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
@@ -50,7 +50,7 @@ jobs:
node-version-file: '.nvmrc'
- name: Install pnpm
run: npm i pnpm@6.32.15 -g
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
@@ -70,7 +70,7 @@ jobs:
node-version-file: '.nvmrc'
- name: Install pnpm
run: npm i pnpm@6.32.15 -g
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
@@ -95,7 +95,7 @@ jobs:
node-version: ${{ matrix.node_version }}
- name: Install pnpm
run: npm i pnpm@6.32.15 -g
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
@@ -116,7 +116,7 @@ jobs:
node-version-file: '.nvmrc'
- name: Install pnpm
run: npm i pnpm@6.32.15 -g
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}

View File

@@ -43,7 +43,7 @@ jobs:
- name: Install
run: pnpm recursive install --frozen-lockfile --registry http://localhost:4873
- name: Cache .pnpm-store
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
@@ -63,7 +63,7 @@ jobs:
run: |
corepack enable
corepack prepare --activate pnpm@6.32.15
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
@@ -85,7 +85,7 @@ jobs:
run: |
corepack enable
corepack prepare --activate pnpm@6.32.15
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
@@ -112,7 +112,7 @@ jobs:
run: |
corepack enable
corepack prepare --activate pnpm@6.32.15
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}
@@ -136,7 +136,7 @@ jobs:
run: |
corepack enable
corepack prepare --activate pnpm@6.32.15
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}

View File

@@ -29,7 +29,7 @@ jobs:
- name: Install
run: pnpm recursive install --frozen-lockfile --reporter=silence --ignore-scripts --registry http://localhost:4873
- name: Cache .pnpm-store
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
@@ -46,7 +46,7 @@ jobs:
node-version-file: '.nvmrc'
- name: Install pnpm
run: npm i pnpm@6.32.15 -g
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
@@ -55,7 +55,7 @@ jobs:
- name: build
run: pnpm build
- name: Cache packages
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
id: cache-packages
with:
path: ./packages/
@@ -85,13 +85,13 @@ jobs:
node-version-file: '.nvmrc'
- name: Install pnpm
run: npm i pnpm@6.32.15 -g
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}
- name: Install
run: pnpm recursive install --offline --frozen-lockfile --reporter=silence --ignore-scripts --registry http://localhost:4873
- uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
- uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: ./packages/
key: pkg-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.run_id }}-${{ github.sha }}

75
.github/workflows/ui-components.yml vendored Normal file
View File

@@ -0,0 +1,75 @@
name: UI Components
on:
workflow_dispatch:
pull_request:
paths:
- .github/workflows/ui-components.yml
- 'packages/ui-components/**'
- 'package.json'
- 'pnpm-workspace.yaml'
- 'pnpm-lock.yaml'
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
deploy:
permissions:
contents: read # to fetch code (actions/checkout)
deployments: write
pull-requests: write # to comment on pull-requests
runs-on: ubuntu-latest
env:
NODE_OPTIONS: --max_old_space_size=4096
steps:
- uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # tag=v3
- name: Use Node
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # tag=v3
with:
node-version-file: '.nvmrc'
- name: Cache pnpm modules
uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
env:
cache-name: cache-pnpm-modules
with:
path: ~/.pnpm-store
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.node-version }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.node-version }}-
- name: Install pnpm
run: |
corepack enable
corepack prepare --activate pnpm@6.32.15
- name: Install
run: pnpm recursive install --frozen-lockfile
- name: Build storybook
run: pnpm ui:storybook:build
- 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@1a53f098745bf78555d11b436f5ee3af87e6b566
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: verdaccio/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'

View File

@@ -31,7 +31,7 @@ jobs:
node-version: 16
- name: Cache pnpm modules
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
env:
cache-name: cache-pnpm-modules
with:
@@ -51,7 +51,7 @@ jobs:
- name: Build Translations percentage
run: pnpm build --filter "@verdaccio/crowdin-translations"
- name: Cache Docusaurus Build
uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # tag=v3
uses: actions/cache@4723a57e26efda3a62cbde1812113b730952852d # v3
with:
path: website/node_modules/.cache/webpack
key: cache/webpack-${{github.ref}}-${{ hashFiles('**/pnpm-lock.yaml') }}

10
.gitignore vendored
View File

@@ -41,13 +41,6 @@ packages/plugins/ui-theme/static
# CI Pnpm cache
.pnpm-store/
# benchmark
api-results.json
hyper-results.json
hyper-results*.json
api-results*.json
.clinic/
#docs
website/docs/api/**/*.md
website/docs/api/**/*.yml
@@ -57,3 +50,6 @@ packages/**/docs
# cypress
e2e/ui/cypress/videos/**/*
e2e/ui/cypress/screenshots/**/*
# storybook
packages/ui-components/storybook-static

View File

@@ -35,3 +35,5 @@ packages/plugins/ui-theme/static/
.verdaccio-db.json
test/cli/e2e-yarn4/bin/yarn-4.0.0-rc.14.cjs
yarn.js
website/docs/api/*
packages/ui-components/storybook-static/*

View File

@@ -5,14 +5,14 @@
"main": "./build/index.js",
"types": "./build/index.d.ts",
"devDependencies": {
"verdaccio": "workspace:6.0.0-6-next.52",
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/types": "workspace:11.0.0-6-next.17",
"yaml": "2.1.3",
"verdaccio": "workspace:6.0.0-6-next.53",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/types": "workspace:11.0.0-6-next.18",
"yaml": "2.2.0",
"debug": "4.3.4",
"fs-extra": "10.1.0",
"got": "11.8.5",
"got": "11.8.6",
"lodash": "4.17.21"
},
"scripts": {

View File

@@ -4,7 +4,7 @@
"version": "1.0.1-6-next.5",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.1-6-next.5",
"npm": "6.14.17"
"npm": "6.14.18"
},
"scripts": {
"test": "jest"

View File

@@ -4,7 +4,7 @@
"version": "1.0.1-6-next.5",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.1-6-next.5",
"npm": "9.1.2"
"npm": "9.2.0"
},
"scripts": {
"test": "jest"

View File

@@ -4,7 +4,7 @@
"version": "1.0.1-6-next.5",
"dependencies": {
"@verdaccio/test-cli-commons": "workspace:1.0.1-6-next.5",
"@yarnpkg/cli-dist": "3.3.0"
"@yarnpkg/cli-dist": "3.3.1"
},
"scripts": {
"test": "jest"

View File

@@ -3,12 +3,12 @@
"name": "@verdaccio/e2e-ui",
"version": "2.0.0-6-next.3",
"devDependencies": {
"verdaccio": "workspace:6.0.0-6-next.52",
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"verdaccio": "workspace:6.0.0-6-next.53",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/test-helper": "workspace:2.0.0-6-next.6",
"debug": "4.3.4",
"cypress": "11.1.0"
"cypress": "11.2.0"
},
"scripts": {
"cypress:open": "cypress open",

View File

@@ -15,51 +15,51 @@
"url": "https://opencollective.com/verdaccio"
},
"devDependencies": {
"@babel/cli": "7.19.3",
"@babel/core": "7.20.2",
"@babel/node": "7.20.2",
"@babel/cli": "7.20.7",
"@babel/core": "7.20.7",
"@babel/node": "7.20.7",
"@babel/plugin-proposal-class-properties": "7.18.6",
"@babel/plugin-proposal-decorators": "7.20.2",
"@babel/plugin-proposal-decorators": "7.20.7",
"@babel/plugin-proposal-export-namespace-from": "7.18.9",
"@babel/plugin-proposal-function-sent": "7.18.6",
"@babel/plugin-proposal-json-strings": "7.18.6",
"@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
"@babel/plugin-proposal-numeric-separator": "7.18.6",
"@babel/plugin-proposal-object-rest-spread": "7.20.2",
"@babel/plugin-proposal-optional-chaining": "7.18.9",
"@babel/plugin-proposal-object-rest-spread": "7.20.7",
"@babel/plugin-proposal-optional-chaining": "7.20.7",
"@babel/plugin-proposal-throw-expressions": "7.18.6",
"@babel/plugin-syntax-dynamic-import": "7.8.3",
"@babel/plugin-syntax-import-meta": "7.10.4",
"@babel/plugin-transform-async-to-generator": "7.18.6",
"@babel/plugin-transform-classes": "7.20.2",
"@babel/plugin-transform-async-to-generator": "7.20.7",
"@babel/plugin-transform-classes": "7.20.7",
"@babel/plugin-transform-runtime": "7.19.6",
"@babel/preset-env": "7.20.2",
"@babel/preset-react": "7.18.6",
"@babel/preset-typescript": "7.18.6",
"@babel/register": "7.18.9",
"@babel/runtime": "7.20.1",
"@babel/runtime": "7.20.7",
"@dianmora/contributors": "5.0.0",
"@changesets/changelog-github": "0.4.7",
"@changesets/changelog-github": "0.4.8",
"@changesets/cli": "2.24.4",
"@changesets/get-dependents-graph": "1.3.4",
"@changesets/get-dependents-graph": "1.3.5",
"@crowdin/cli": "3.9.1",
"@emotion/react": "11.10.5",
"@emotion/styled": "11.10.5",
"@mui/material": "5.11.1",
"@testing-library/dom": "8.19.1",
"@testing-library/jest-dom": "5.16.5",
"@testing-library/react": "12.1.4",
"react": "18.2.0",
"react-dom": "18.2.0",
"@mui/icons-material": "5.11.0",
"@mui/styles": "5.11.1",
"@mui/system": "5.11.1",
"@trivago/prettier-plugin-sort-imports": "3.4.0",
"@types/async": "3.2.15",
"@types/express": "4.17.14",
"@types/async": "3.2.16",
"@types/express": "4.17.15",
"@types/http-errors": "1.8.2",
"@types/jest": "27.5.2",
"@types/lodash": "4.14.189",
"@types/lodash": "4.14.191",
"@types/mime": "2.0.3",
"@types/minimatch": "3.0.5",
"@types/node": "16.18.3",
"@types/redux": "3.6.0",
"@types/node": "16.18.10",
"@types/jsonwebtoken": "8.5.9",
"@types/request": "2.48.8",
"@types/semver": "7.3.13",
@@ -69,12 +69,12 @@
"@types/validator": "13.7.10",
"@types/webpack": "5.28.0",
"@types/webpack-env": "1.18.0",
"@types/react": "18.0.25",
"@types/react": "18.0.26",
"@types/react-dom": "18.0.9",
"@types/react-router-dom": "5.3.3",
"@types/react-virtualized": "9.21.21",
"@typescript-eslint/eslint-plugin": "5.41.0",
"@typescript-eslint/parser": "5.41.0",
"@typescript-eslint/eslint-plugin": "5.47.0",
"@typescript-eslint/parser": "5.47.0",
"@verdaccio/crowdin-translations": "workspace:*",
"@verdaccio/eslint-config": "workspace:*",
"@verdaccio/types": "workspace:*",
@@ -85,12 +85,12 @@
"babel-plugin-dynamic-import-node": "2.3.3",
"babel-plugin-emotion": "10.2.2",
"concurrently": "6.5.1",
"core-js": "3.26.1",
"core-js": "3.27.0",
"cross-env": "7.0.3",
"debug": "4.3.4",
"detect-secrets": "1.0.6",
"jest-diff": "29.3.1",
"eslint": "8.26.0",
"eslint": "8.30.0",
"fs-extra": "10.1.0",
"husky": "7.0.4",
"in-publish": "2.0.1",
@@ -101,16 +101,16 @@
"jest-junit": "12.3.0",
"kleur": "3.0.3",
"lint-staged": "11.2.6",
"got": "11.8.5",
"got": "11.8.6",
"nock": "13.2.9",
"nodemon": "2.0.20",
"npm-run-all": "4.1.5",
"prettier": "2.7.1",
"prettier": "2.8.1",
"rimraf": "3.0.2",
"selfsigned": "1.10.14",
"supertest": "6.3.1",
"supertest": "6.3.3",
"ts-node": "10.9.1",
"typescript": "4.9.3",
"typescript": "4.9.4",
"update-ts-references": "2.4.1",
"verdaccio-audit": "workspace:*",
"verdaccio-auth-memory": "workspace:*",
@@ -149,6 +149,8 @@
"ci:publish": "changeset publish",
"ts:ref": "update-ts-references --discardComments",
"website": "pnpm build --filter ...@verdaccio/website",
"ui:storybook:build": "pnpm build-storybook --filter ...@verdaccio/ui-components",
"ui:storybook": "pnpm storybook --filter ...@verdaccio/ui-components",
"translations": "local-crowdin-api translations",
"crowdin:upload": "crowdin upload sources --auto-update --config ./crowdin.yaml",
"crowdin:download": "crowdin download --verbose --config ./crowdin.yaml",

View File

@@ -1,5 +1,17 @@
# @verdaccio/api
## 6.0.0-6-next.36
### Patch Changes
- @verdaccio/auth@6.0.0-6-next.32
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/logger@6.0.0-6-next.21
- @verdaccio/store@6.0.0-6-next.33
- @verdaccio/config@6.0.0-6-next.53
- @verdaccio/middleware@6.0.0-6-next.32
- @verdaccio/utils@6.0.0-6-next.21
## 6.0.0-6-next.35
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/api",
"version": "6.0.0-6-next.35",
"version": "6.0.0-6-next.36",
"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.31",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/logger": "workspace:6.0.0-6-next.20",
"@verdaccio/middleware": "workspace:6.0.0-6-next.31",
"@verdaccio/store": "workspace:6.0.0-6-next.32",
"@verdaccio/utils": "workspace:6.0.0-6-next.20",
"@verdaccio/auth": "workspace:6.0.0-6-next.32",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/logger": "workspace:6.0.0-6-next.21",
"@verdaccio/middleware": "workspace:6.0.0-6-next.32",
"@verdaccio/store": "workspace:6.0.0-6-next.33",
"@verdaccio/utils": "workspace:6.0.0-6-next.21",
"abortcontroller-polyfill": "1.7.5",
"cookies": "0.8.0",
"debug": "4.3.4",
@@ -56,11 +56,11 @@
"semver": "7.3.8"
},
"devDependencies": {
"@types/node": "16.18.3",
"@verdaccio/server": "workspace:6.0.0-6-next.41",
"@verdaccio/types": "workspace:11.0.0-6-next.17",
"@types/node": "16.18.10",
"@verdaccio/server": "workspace:6.0.0-6-next.42",
"@verdaccio/types": "workspace:11.0.0-6-next.18",
"@verdaccio/test-helper": "workspace:2.0.0-6-next.6",
"supertest": "6.3.1",
"supertest": "6.3.3",
"nock": "13.2.9",
"mockdate": "3.0.5"
},

View File

@@ -1,5 +1,16 @@
# @verdaccio/auth
## 6.0.0-6-next.32
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/loaders@6.0.0-6-next.22
- @verdaccio/logger@6.0.0-6-next.21
- verdaccio-htpasswd@11.0.0-6-next.23
- @verdaccio/config@6.0.0-6-next.53
- @verdaccio/utils@6.0.0-6-next.21
## 6.0.0-6-next.31
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/auth",
"version": "6.0.0-6-next.31",
"version": "6.0.0-6-next.32",
"description": "logger",
"main": "./build/index.js",
"types": "./build/index.d.ts",
@@ -39,19 +39,19 @@
},
"license": "MIT",
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/loaders": "workspace:6.0.0-6-next.21",
"@verdaccio/logger": "workspace:6.0.0-6-next.20",
"@verdaccio/utils": "workspace:6.0.0-6-next.20",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/loaders": "workspace:6.0.0-6-next.22",
"@verdaccio/logger": "workspace:6.0.0-6-next.21",
"@verdaccio/utils": "workspace:6.0.0-6-next.21",
"debug": "4.3.4",
"express": "4.18.2",
"jsonwebtoken": "8.5.1",
"jsonwebtoken": "9.0.0",
"lodash": "4.17.21",
"verdaccio-htpasswd": "workspace:11.0.0-6-next.22"
"verdaccio-htpasswd": "workspace:11.0.0-6-next.23"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.17"
"@verdaccio/types": "workspace:11.0.0-6-next.18"
},
"funding": {
"type": "opencollective",

View File

@@ -1,5 +1,14 @@
# @verdaccio/cli
## 6.0.0-6-next.53
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/logger@6.0.0-6-next.21
- @verdaccio/node-api@6.0.0-6-next.53
- @verdaccio/config@6.0.0-6-next.53
## 6.0.0-6-next.52
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/cli",
"version": "6.0.0-6-next.52",
"version": "6.0.0-6-next.53",
"author": {
"name": "Juan Picado",
"email": "juanpicado19@gmail.com"
@@ -44,10 +44,10 @@
"start": "ts-node src/index.ts"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/logger": "workspace:6.0.0-6-next.20",
"@verdaccio/node-api": "workspace:6.0.0-6-next.52",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/logger": "workspace:6.0.0-6-next.21",
"@verdaccio/node-api": "workspace:6.0.0-6-next.53",
"clipanion": "3.1.0",
"envinfo": "7.8.1",
"kleur": "3.0.3",

View File

@@ -1,5 +1,12 @@
# @verdaccio/config
## 6.0.0-6-next.53
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/utils@6.0.0-6-next.21
## 6.0.0-6-next.52
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/config",
"version": "6.0.0-6-next.52",
"version": "6.0.0-6-next.53",
"description": "logger",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -39,10 +39,10 @@
"build": "pnpm run build:js && pnpm run build:types"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/utils": "workspace:6.0.0-6-next.20",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/utils": "workspace:6.0.0-6-next.21",
"debug": "4.3.4",
"yaml": "2.1.3",
"yaml": "2.2.0",
"lodash": "4.17.21",
"minimatch": "3.1.2",
"yup": "0.32.11"

View File

@@ -1,5 +1,7 @@
# @verdaccio/core
## 6.0.0-6-next.53
## 6.0.0-6-next.52
## 6.0.0-6-next.51

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/core",
"version": "6.0.0-6-next.52",
"version": "6.0.0-6-next.53",
"description": "core utilities",
"keywords": [
"private",
@@ -39,13 +39,13 @@
"semver": "7.3.8",
"ajv": "8.11.2",
"process-warning": "1.0.0",
"core-js": "3.26.1"
"core-js": "3.27.0"
},
"devDependencies": {
"lodash": "4.17.21",
"typedoc": "0.23.21",
"typedoc": "0.23.23",
"typedoc-plugin-missing-exports": "latest",
"@verdaccio/types": "workspace:11.0.0-6-next.17"
"@verdaccio/types": "workspace:11.0.0-6-next.18"
},
"scripts": {
"clean": "rimraf ./build",

View File

@@ -40,7 +40,7 @@
"lockfile": "1.0.4"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.17"
"@verdaccio/types": "workspace:11.0.0-6-next.18"
},
"scripts": {
"clean": "rimraf ./build",

View File

@@ -1,5 +1,13 @@
# Change Log
## 11.0.0-6-next.22
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/url@11.0.0-6-next.19
- @verdaccio/utils@6.0.0-6-next.21
## 11.0.0-6-next.21
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/tarball",
"version": "11.0.0-6-next.21",
"version": "11.0.0-6-next.22",
"description": "tarball utilities resolver",
"keywords": [
"private",
@@ -35,13 +35,13 @@
},
"dependencies": {
"debug": "4.3.4",
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/url": "workspace:11.0.0-6-next.18",
"@verdaccio/utils": "workspace:6.0.0-6-next.20",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/url": "workspace:11.0.0-6-next.19",
"@verdaccio/utils": "workspace:6.0.0-6-next.21",
"lodash": "4.17.21"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.17",
"@verdaccio/types": "workspace:11.0.0-6-next.18",
"node-mocks-http": "1.12.1"
},
"scripts": {

View File

@@ -1,5 +1,31 @@
# Change Log
## 11.0.0-6-next.18
### Major Changes
- 99978797: feat(web): components for custom user interfaces
Provides a package that includes all components from the user interface, instead being embedded at the `@verdaccio/ui-theme` package.
```
npm i -D @verdaccio/ui-components
```
The package contains
- Components
- Providers
- Redux Storage
- Layouts (precomposed layouts ready to use)
- Custom Material Theme
The `@verdaccio/ui-theme` will consume this package and will use only those are need it.
> Prerequisites are using Redux, Material-UI and Translations with `i18next`.
Users could have their own Material UI theme and build custom layouts, adding new features without the need to modify the default project.
## 11.0.0-6-next.17
### Major Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/types",
"version": "11.0.0-6-next.17",
"version": "11.0.0-6-next.18",
"description": "verdaccio types definitions",
"keywords": [
"private",
@@ -41,8 +41,8 @@
"build": "tsc --emitDeclarationOnly -p tsconfig.build.json"
},
"devDependencies": {
"@types/node": "16.18.3",
"typedoc": "0.23.21"
"@types/node": "16.18.10",
"typedoc": "0.23.23"
},
"typedoc": {
"entryPoint": "./src/types.ts",

View File

@@ -126,7 +126,7 @@ export type TemplateUIOptions = {
showDownloadTarball?: boolean;
showRaw?: boolean;
base: string;
primaryColor?: string;
primaryColor: string;
version?: string;
logoURI?: string;
flags: FlagsConfig;

View File

@@ -1,5 +1,11 @@
# Change Log
## 11.0.0-6-next.19
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
## 11.0.0-6-next.18
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/url",
"version": "11.0.0-6-next.18",
"version": "11.0.0-6-next.19",
"description": "url utilities resolver",
"keywords": [
"private",
@@ -34,13 +34,13 @@
"access": "public"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"debug": "4.3.4",
"lodash": "4.17.21",
"validator": "13.7.0"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.17",
"@verdaccio/types": "workspace:11.0.0-6-next.18",
"node-mocks-http": "1.12.1"
},
"scripts": {

View File

@@ -1,5 +1,12 @@
# @verdaccio/hooks
## 6.0.0-6-next.23
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/logger@6.0.0-6-next.21
## 6.0.0-6-next.22
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/hooks",
"version": "6.0.0-6-next.22",
"version": "6.0.0-6-next.23",
"description": "loaders logic",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -30,18 +30,18 @@
"npm": ">=6"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/logger": "workspace:6.0.0-6-next.20",
"core-js": "3.26.1",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/logger": "workspace:6.0.0-6-next.21",
"core-js": "3.27.0",
"debug": "4.3.4",
"handlebars": "4.7.7",
"undici": "4.16.0"
},
"devDependencies": {
"@types/node": "16.18.3",
"@verdaccio/auth": "workspace:6.0.0-6-next.31",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/types": "workspace:11.0.0-6-next.17"
"@types/node": "16.18.10",
"@verdaccio/auth": "workspace:6.0.0-6-next.32",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/types": "workspace:11.0.0-6-next.18"
},
"scripts": {
"clean": "rimraf ./build",

View File

@@ -1,5 +1,11 @@
# @verdaccio/loaders
## 6.0.0-6-next.22
### Patch Changes
- @verdaccio/logger@6.0.0-6-next.21
## 6.0.0-6-next.21
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/loaders",
"version": "6.0.0-6-next.21",
"version": "6.0.0-6-next.22",
"description": "loaders logic",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -13,14 +13,14 @@
"url": "https://github.com/verdaccio/verdaccio"
},
"dependencies": {
"@verdaccio/logger": "workspace:6.0.0-6-next.20",
"@verdaccio/logger": "workspace:6.0.0-6-next.21",
"debug": "4.3.4",
"lodash": "4.17.21"
},
"devDependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/types": "workspace:11.0.0-6-next.17",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/types": "workspace:11.0.0-6-next.18",
"@verdaccio-scope/verdaccio-auth-foo": "0.0.2",
"verdaccio-auth-memory": "workspace:*",
"customprefix-auth": "1.0.0-6-next.0"

View File

@@ -39,14 +39,14 @@
"build": "pnpm run build:js && pnpm run build:types"
},
"dependencies": {
"dayjs": "1.11.6",
"dayjs": "1.11.7",
"pino-abstract-transport": "1.0.0",
"colorette": "2.0.19",
"lodash": "4.17.21",
"sonic-boom": "3.2.0"
"sonic-boom": "3.2.1"
},
"devDependencies": {
"pino": "8.7.0"
"pino": "8.8.0"
},
"funding": {
"type": "opencollective",

View File

@@ -1,5 +1,11 @@
# @verdaccio/logger
## 6.0.0-6-next.21
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
## 6.0.0-6-next.20
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/logger",
"version": "6.0.0-6-next.20",
"version": "6.0.0-6-next.21",
"description": "logger",
"main": "./build/index.js",
"types": "./build/index.d.ts",
@@ -39,14 +39,14 @@
"build": "pnpm run build:js && pnpm run build:types"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/logger-prettify": "workspace:6.0.0-6-next.7",
"debug": "4.3.4",
"colorette": "2.0.19",
"pino": "8.7.0"
"pino": "8.8.0"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.17"
"@verdaccio/types": "workspace:11.0.0-6-next.18"
},
"funding": {
"type": "opencollective",

View File

@@ -1,5 +1,14 @@
# @verdaccio/middleware
## 6.0.0-6-next.32
### Patch Changes
- @verdaccio/auth@6.0.0-6-next.32
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/logger@6.0.0-6-next.21
- @verdaccio/utils@6.0.0-6-next.21
## 6.0.0-6-next.31
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/middleware",
"version": "6.0.0-6-next.31",
"version": "6.0.0-6-next.32",
"description": "loaders logic",
"main": "./build/index.js",
"types": "build/index.d.ts",
@@ -40,10 +40,10 @@
"dependencies": {
"debug": "4.3.4",
"body-parser": "1.20.1",
"@verdaccio/auth": "workspace:6.0.0-6-next.31",
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/logger": "workspace:6.0.0-6-next.20",
"@verdaccio/utils": "workspace:6.0.0-6-next.20",
"@verdaccio/auth": "workspace:6.0.0-6-next.32",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/logger": "workspace:6.0.0-6-next.21",
"@verdaccio/utils": "workspace:6.0.0-6-next.21",
"lodash": "4.17.21"
},
"funding": {

View File

@@ -1,5 +1,15 @@
# @verdaccio/node-api
## 6.0.0-6-next.53
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/logger@6.0.0-6-next.21
- @verdaccio/server-fastify@6.0.0-6-next.34
- @verdaccio/config@6.0.0-6-next.53
- @verdaccio/server@6.0.0-6-next.42
## 6.0.0-6-next.52
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/node-api",
"version": "6.0.0-6-next.52",
"version": "6.0.0-6-next.53",
"description": "node API",
"main": "build/index.js",
"types": "build/index.d.ts",
@@ -39,21 +39,21 @@
},
"license": "MIT",
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/logger": "workspace:6.0.0-6-next.20",
"@verdaccio/server": "workspace:6.0.0-6-next.41",
"@verdaccio/server-fastify": "workspace:6.0.0-6-next.33",
"core-js": "3.26.1",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/logger": "workspace:6.0.0-6-next.21",
"@verdaccio/server": "workspace:6.0.0-6-next.42",
"@verdaccio/server-fastify": "workspace:6.0.0-6-next.34",
"core-js": "3.27.0",
"debug": "4.3.4",
"lodash": "4.17.21"
},
"devDependencies": {
"@types/node": "16.18.3",
"@verdaccio/types": "workspace:11.0.0-6-next.17",
"@types/node": "16.18.10",
"@verdaccio/types": "workspace:11.0.0-6-next.18",
"jest-mock-process": "1.5.1",
"selfsigned": "1.10.14",
"supertest": "6.3.1"
"supertest": "6.3.3"
},
"publishConfig": {
"access": "public"

View File

@@ -1,5 +1,13 @@
# Change Log
## 11.0.0-6-next.16
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/logger@6.0.0-6-next.21
- @verdaccio/config@6.0.0-6-next.53
## 11.0.0-6-next.15
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "verdaccio-audit",
"version": "11.0.0-6-next.15",
"version": "11.0.0-6-next.16",
"description": "Verdaccio Middleware plugin to bypass npmjs audit",
"keywords": [
"private",
@@ -31,19 +31,19 @@
"npm": ">=6"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/logger": "workspace:6.0.0-6-next.20",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/logger": "workspace:6.0.0-6-next.21",
"express": "4.18.2",
"body-parser": "1.20.1",
"https-proxy-agent": "5.0.1",
"node-fetch": "cjs"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.17",
"@verdaccio/auth": "workspace:6.0.0-6-next.31",
"@verdaccio/types": "workspace:11.0.0-6-next.18",
"@verdaccio/auth": "workspace:6.0.0-6-next.32",
"nock": "13.2.9",
"supertest": "6.3.1"
"supertest": "6.3.3"
},
"scripts": {
"clean": "rimraf ./build",

View File

@@ -1,5 +1,11 @@
# Change Log
## 11.0.0-6-next.18
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
## 11.0.0-6-next.17
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "verdaccio-auth-memory",
"version": "11.0.0-6-next.17",
"version": "11.0.0-6-next.18",
"description": "Auth plugin for Verdaccio that keeps users in memory",
"keywords": [
"private",
@@ -32,11 +32,11 @@
},
"dependencies": {
"debug": "4.3.4",
"@verdaccio/core": "workspace:6.0.0-6-next.52"
"@verdaccio/core": "workspace:6.0.0-6-next.53"
},
"devDependencies": {
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/types": "workspace:11.0.0-6-next.17"
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/types": "workspace:11.0.0-6-next.18"
},
"scripts": {
"clean": "rimraf ./build",

View File

@@ -1,5 +1,12 @@
# Change Log
## 11.0.0-6-next.23
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/file-locking@11.0.0-6-next.6
## 11.0.0-6-next.22
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "verdaccio-htpasswd",
"version": "11.0.0-6-next.22",
"version": "11.0.0-6-next.23",
"description": "htpasswd auth plugin for Verdaccio",
"keywords": [
"private",
@@ -34,20 +34,20 @@
"npm": ">=6"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/file-locking": "workspace:11.0.0-6-next.6",
"apache-md5": "1.1.8",
"bcryptjs": "2.4.3",
"core-js": "3.26.1",
"core-js": "3.27.0",
"http-errors": "1.8.1",
"debug": "4.3.4",
"unix-crypt-td-js": "1.1.4"
},
"devDependencies": {
"@types/bcryptjs": "2.4.2",
"@verdaccio/types": "workspace:11.0.0-6-next.17",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/logger": "workspace:6.0.0-6-next.20",
"@verdaccio/types": "workspace:11.0.0-6-next.18",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/logger": "workspace:6.0.0-6-next.21",
"mockdate": "3.0.5"
},
"scripts": {

View File

@@ -1,5 +1,13 @@
# Change Log
## 11.0.0-6-next.23
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
- @verdaccio/file-locking@11.0.0-6-next.6
- @verdaccio/utils@6.0.0-6-next.21
## 11.0.0-6-next.22
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/local-storage",
"version": "11.0.0-6-next.22",
"version": "11.0.0-6-next.23",
"description": "Local storage implementation",
"keywords": [
"private",
@@ -37,10 +37,10 @@
"npm": ">=7"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"@verdaccio/file-locking": "workspace:11.0.0-6-next.6",
"@verdaccio/utils": "workspace:6.0.0-6-next.20",
"core-js": "3.26.1",
"@verdaccio/utils": "workspace:6.0.0-6-next.21",
"core-js": "3.27.0",
"debug": "4.3.4",
"globby": "11.1.0",
"lockfile": "1.0.4",
@@ -51,9 +51,9 @@
},
"devDependencies": {
"@types/minimatch": "3.0.5",
"@verdaccio/types": "workspace:11.0.0-6-next.17",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/logger": "workspace:6.0.0-6-next.20",
"@verdaccio/types": "workspace:11.0.0-6-next.18",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/logger": "workspace:6.0.0-6-next.21",
"@verdaccio/test-helper": "workspace:2.0.0-6-next.6",
"minimatch": "3.1.2"
},

View File

@@ -1,5 +1,11 @@
# Change Log
## 11.0.0-6-next.20
### Patch Changes
- @verdaccio/core@6.0.0-6-next.53
## 11.0.0-6-next.19
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "verdaccio-memory",
"version": "11.0.0-6-next.19",
"version": "11.0.0-6-next.20",
"description": "Storage implementation in memory",
"keywords": [
"private",
@@ -31,15 +31,15 @@
"npm": ">=6"
},
"dependencies": {
"@verdaccio/core": "workspace:6.0.0-6-next.52",
"@verdaccio/core": "workspace:6.0.0-6-next.53",
"memory-fs": "0.5.0",
"debug": "4.3.4",
"memfs": "3.4.12"
},
"devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.17",
"@verdaccio/config": "workspace:6.0.0-6-next.52",
"@verdaccio/logger": "workspace:6.0.0-6-next.20"
"@verdaccio/types": "workspace:11.0.0-6-next.18",
"@verdaccio/config": "workspace:6.0.0-6-next.53",
"@verdaccio/logger": "workspace:6.0.0-6-next.21"
},
"scripts": {
"clean": "rimraf ./build",

View File

@@ -1,5 +1,31 @@
# @verdaccio/ui-theme
## 6.0.0-6-next.53
### Major Changes
- 99978797: feat(web): components for custom user interfaces
Provides a package that includes all components from the user interface, instead being embedded at the `@verdaccio/ui-theme` package.
```
npm i -D @verdaccio/ui-components
```
The package contains
- Components
- Providers
- Redux Storage
- Layouts (precomposed layouts ready to use)
- Custom Material Theme
The `@verdaccio/ui-theme` will consume this package and will use only those are need it.
> Prerequisites are using Redux, Material-UI and Translations with `i18next`.
Users could have their own Material UI theme and build custom layouts, adding new features without the need to modify the default project.
## 6.0.0-6-next.52
### Patch Changes

View File

@@ -35,8 +35,6 @@ module.exports = Object.assign({}, config, {
// note: this section has to be on sync with webpack configuration
'verdaccio-ui/components/(.*)': '<rootDir>/src/components/$1',
'verdaccio-ui/utils/(.*)': '<rootDir>/src/utils/$1',
'verdaccio-ui/providers/(.*)': '<rootDir>/src/providers/$1',
'verdaccio-ui/design-tokens/(.*)': '<rootDir>/src/design-tokens/$1',
'react-markdown': '<rootDir>/src/__mocks__/react-markdown.tsx',
'remark-*': '<rootDir>/src/__mocks__/remark-plugin.ts',
},

View File

@@ -1,6 +1,6 @@
{
"name": "@verdaccio/ui-theme",
"version": "6.0.0-6-next.52",
"version": "6.0.0-6-next.53",
"description": "Verdaccio User Interface",
"author": {
"name": "Verdaccio Contributors",
@@ -12,38 +12,30 @@
},
"homepage": "https://verdaccio.org",
"main": "index.js",
"peerDependencies": {
"devDependencies": {
"@emotion/react": "11.10.5",
"@emotion/styled": "11.10.5",
"@mui/material": "5.11.1",
"react": "18.2.0",
"react-dom": "18.2.0",
"@mui/icons-material": "5.11.0",
"@mui/styles": "5.11.1"
},
"devDependencies": {
"@mui/styles": "5.11.1",
"@mui/material": "5.11.1",
"@emotion/babel-plugin": "11.10.5",
"@emotion/css": "11.10.5",
"@emotion/jest": "11.10.5",
"@rematch/core": "2.2.0",
"@rematch/loading": "2.1.2",
"@rematch/persist": "2.1.2",
"@testing-library/dom": "8.19.0",
"@testing-library/dom": "8.19.1",
"@testing-library/jest-dom": "5.16.5",
"@testing-library/react": "13.4.0",
"@types/react": "18.0.25",
"@types/react-dom": "18.0.9",
"@types/react-router-dom": "5.3.3",
"@types/react-virtualized": "9.21.21",
"@types/redux": "3.6.0",
"@verdaccio/node-api": "workspace:6.0.0-6-next.52",
"@verdaccio/ui-components": "workspace:1.0.0",
"@verdaccio/node-api": "workspace:6.0.0-6-next.53",
"@verdaccio/ui-components": "workspace:2.0.0-6-next.1",
"@verdaccio/types": "workspace:*",
"normalize.css": "8.0.1",
"babel-loader": "8.3.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"country-flag-icons": "1.5.5",
"css-loader": "6.7.2",
"dayjs": "1.11.6",
"css-loader": "6.7.3",
"dayjs": "1.11.7",
"friendly-errors-webpack-plugin": "1.7.0",
"harmony-reflect": "1.6.2",
"history": "4.10.1",
@@ -54,25 +46,24 @@
"js-yaml": "3.14.1",
"localstorage-memory": "1.0.3",
"lodash": "4.17.21",
"mini-css-extract-plugin": "2.7.0",
"msw": "0.49.0",
"mini-css-extract-plugin": "2.7.2",
"msw": "0.49.2",
"mutationobserver-shim": "0.3.7",
"node-mocks-http": "1.12.1",
"normalize.css": "8.0.1",
"optimize-css-assets-webpack-plugin": "6.0.1",
"ora": "5.4.1",
"dompurify": "2.4.1",
"highlight.js": "11.6.0",
"highlight.js": "11.7.0",
"github-markdown-css": "4.0.0",
"marked": "4.2.3",
"marked": "4.2.5",
"raw-loader": "4.0.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-hook-form": "7.39.5",
"react-hook-form": "7.41.1",
"react-hot-loader": "4.13.1",
"react-i18next": "12.0.0",
"react-i18next": "12.1.1",
"react-json-view": "1.21.3",
"react-markdown": "8.0.3",
"react-markdown": "8.0.4",
"react-redux": "7.2.9",
"react-router": "5.3.4",
"react-router-dom": "5.3.4",
@@ -82,12 +73,12 @@
"remark-gfm": "3.0.1",
"rimraf": "3.0.2",
"style-loader": "3.3.1",
"stylelint": "14.14.0",
"stylelint": "14.16.0",
"stylelint-config-recommended": "7.0.0",
"stylelint-config-styled-components": "0.1.1",
"stylelint-processor-styled-components": "1.10.0",
"stylelint-webpack-plugin": "3.3.0",
"supertest": "6.3.1",
"supertest": "6.3.3",
"terser-webpack-plugin": "5.3.6",
"url-loader": "4.1.1",
"validator": "13.7.0",

View File

@@ -1,30 +1,9 @@
import React from 'react';
import { renderWithStore, screen } from 'verdaccio-ui/utils/test-react-testing-library';
import { store } from '../store';
import App from './App';
import { store } from '@verdaccio/ui-components';
jest.mock('verdaccio-ui/utils/storage', () => {
class LocalStorageMock {
private store: Record<string, string>;
public constructor() {
this.store = {};
}
public clear(): void {
this.store = {};
}
public getItem(key: string): unknown {
return this.store[key] || null;
}
public setItem(key: string, value: string): void {
this.store[key] = value.toString();
}
public removeItem(key: string): void {
delete this.store[key];
}
}
return new LocalStorageMock();
});
import App from './App';
// force the windows to expand to display items
// https://github.com/bvaughn/react-virtualized/issues/493#issuecomment-640084107
@@ -40,6 +19,7 @@ describe('<App />', () => {
});
test('should not display the Header component', () => {
// @ts-ignore
window.__VERDACCIO_BASENAME_UI_OPTIONS = {
showFooter: false,
};

View File

@@ -1,18 +1,33 @@
/* eslint-disable react/jsx-pascal-case */
/* eslint-disable react/jsx-max-depth */
import styled from '@emotion/styled';
import Box from '@mui/material/Box';
import FlagsIcon from 'country-flag-icons/react/3x2';
import React, { StrictMode, Suspense, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import ReactMarkdown from 'react-markdown';
import { Router } from 'react-router-dom';
import Loading from 'verdaccio-ui/components/Loading';
import StyleBaseline from 'verdaccio-ui/design-tokens/StyleBaseline';
import loadDayJSLocale from 'verdaccio-ui/design-tokens/load-dayjs-locale';
import { Theme } from 'verdaccio-ui/design-tokens/theme';
import { useConfig } from 'verdaccio-ui/providers/config';
import remarkGfm from 'remark-gfm';
import '../i18n/config';
import {
Footer,
Header,
HeaderInfoDialog,
Loading,
Theme,
TranslatorProvider,
useConfig,
} from '@verdaccio/ui-components';
import Contributors from '../components/Contributors';
import Support from '../components/Support';
import about from '../components/about.md';
import license from '../components/license.md';
import i18n from '../i18n/config';
import { listLanguages } from '../i18n/enabledLanguages';
import loadDayJSLocale from '../i18n/load-dayjs-locale';
import AppRoute, { history } from './AppRoute';
import Footer from './Footer';
import Header from './Header';
const StyledBox = styled(Box)<{ theme?: Theme }>(({ theme }) => ({
backgroundColor: theme?.palette.background.default,
@@ -27,6 +42,45 @@ const StyledBoxContent = styled(Box)<{ theme?: Theme }>(({ theme }) => ({
},
}));
const Flags = styled('span')<{ theme?: Theme }>(() => ({
width: '25px',
}));
function CustomInfoDialog({ onCloseDialog, title, isOpen }) {
const { t } = useTranslation();
return (
<HeaderInfoDialog
dialogTitle={title}
isOpen={isOpen}
onCloseDialog={onCloseDialog}
tabPanels={[
{
element: (
<>
<ReactMarkdown remarkPlugins={[remarkGfm]}>{about}</ReactMarkdown>
<Contributors />
</>
),
},
{ element: <ReactMarkdown remarkPlugins={[remarkGfm]}>{license}</ReactMarkdown> },
{ element: <Support /> },
]}
tabs={[
{ label: t('about') },
{ label: t('dialog.license') },
{
label: '',
icon: (
<Flags>
<FlagsIcon.UA />
</Flags>
),
},
]}
/>
);
}
const App: React.FC = () => {
const { configOptions } = useConfig();
@@ -35,20 +89,23 @@ const App: React.FC = () => {
}, []);
return (
<StrictMode>
<Suspense fallback={<Loading />}>
<StyleBaseline />
<StyledBox display="flex" flexDirection="column" height="100%">
<>
<TranslatorProvider
i18n={i18n}
listLanguages={listLanguages}
loadDayJSLocale={loadDayJSLocale}
>
<Suspense fallback={<Loading />}>
<StyledBox display="flex" flexDirection="column" height="100%">
<Router history={history}>
<Header />
<Header HeaderInfoDialog={CustomInfoDialog} />
<StyledBoxContent flexGrow={1}>
<AppRoute />
</StyledBoxContent>
</Router>
{configOptions.showFooter && <Footer />}
</>
</StyledBox>
</Suspense>
</StyledBox>
</Suspense>
</TranslatorProvider>
</StrictMode>
);
};

View File

@@ -2,26 +2,13 @@ import { createBrowserHistory } from 'history';
import React from 'react';
import { Route as ReactRouterDomRoute, Router, Switch } from 'react-router-dom';
import loadable from './utils/loadable';
import { NotFound, Route, VersionProvider, loadable } from '@verdaccio/ui-components';
const NotFound = loadable(
() => import(/* webpackChunkName: "NotFound" */ 'verdaccio-ui/components/NotFound')
);
const VersionContextProvider = loadable(
() => import(/* webpackChunkName: "Provider" */ '../pages/Version/VersionContextProvider')
);
const VersionPage = loadable(() => import(/* webpackChunkName: "Version" */ '../pages/Version'));
const HomePage = loadable(() => import(/* webpackChunkName: "Home" */ '../pages/home'));
enum Route {
ROOT = '/',
SCOPE_PACKAGE = '/-/web/detail/@:scope/:package',
SCOPE_PACKAGE_VERSION = '/-/web/detail/@:scope/:package/v/:version',
PACKAGE = '/-/web/detail/:package',
PACKAGE_VERSION = '/-/web/detail/:package/v/:version',
}
const Front = loadable(() => import(/* webpackChunkName: "Home" */ '../pages/Front'));
export const history = createBrowserHistory({
// @ts-ignore
basename: window?.__VERDACCIO_BASENAME_UI_OPTIONS?.url_prefix,
});
@@ -30,27 +17,27 @@ const AppRoute: React.FC = () => {
<Router history={history}>
<Switch>
<ReactRouterDomRoute exact={true} path={Route.ROOT}>
<HomePage />
<Front />
</ReactRouterDomRoute>
<ReactRouterDomRoute exact={true} path={Route.PACKAGE}>
<VersionContextProvider>
<VersionProvider>
<VersionPage />
</VersionContextProvider>
</VersionProvider>
</ReactRouterDomRoute>
<ReactRouterDomRoute exact={true} path={Route.PACKAGE_VERSION}>
<VersionContextProvider>
<VersionProvider>
<VersionPage />
</VersionContextProvider>
</VersionProvider>
</ReactRouterDomRoute>
<ReactRouterDomRoute exact={true} path={Route.SCOPE_PACKAGE_VERSION}>
<VersionContextProvider>
<VersionProvider>
<VersionPage />
</VersionContextProvider>
</VersionProvider>
</ReactRouterDomRoute>
<ReactRouterDomRoute exact={true} path={Route.SCOPE_PACKAGE}>
<VersionContextProvider>
<VersionProvider>
<VersionPage />
</VersionContextProvider>
</VersionProvider>
</ReactRouterDomRoute>
<ReactRouterDomRoute>
<NotFound />

View File

@@ -1,96 +0,0 @@
/* eslint-disable react/jsx-pascal-case */
/* eslint-disable verdaccio/jsx-spread */
import styled from '@emotion/styled';
import { Theme } from '@mui/material';
import Box from '@mui/material/Box';
import Tab from '@mui/material/Tab';
import Tabs from '@mui/material/Tabs';
import FlagsIcon from 'country-flag-icons/react/3x2';
import React from 'react';
import { useTranslation } from 'react-i18next';
import ReactMarkdown from 'react-markdown';
import remarkGfm from 'remark-gfm';
import Contributors from './Contributors';
import RegistryInfoDialog from './RegistryInfoDialog';
import { Support } from './Support';
import about from './about.md';
import license from './license.md';
interface Props {
isOpen: boolean;
onCloseDialog: () => void;
}
function a11yProps(index) {
return {
id: `simple-tab-${index}`,
'aria-controls': `simple-tabpanel-${index}`,
};
}
function TabPanel(props) {
const { children, value, index, ...other } = props;
return (
<div
aria-labelledby={`simple-tab-${index}`}
hidden={value !== index}
id={`simple-tabpanel-${index}`}
role="tabpanel"
{...other}
>
{value === index && <Box sx={{ paddingTop: 3 }}>{children}</Box>}
</div>
);
}
const Flags = styled('span')<{ theme?: Theme }>(() => ({
width: '25px',
}));
const HeaderInfoDialog: React.FC<Props> = ({ onCloseDialog, isOpen }) => {
const [value, setValue] = React.useState(0);
const handleChange = (_event, newValue) => {
setValue(newValue);
};
const { t } = useTranslation();
return (
<RegistryInfoDialog
onClose={onCloseDialog}
open={isOpen}
title={t('dialog.registry-info.title')}
>
<Box sx={{ width: '100%' }}>
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
<Tabs aria-label="basic tabs example" onChange={handleChange} value={value}>
<Tab label={t('about')} {...a11yProps(0)} />
<Tab label={t('dialog.license')} {...a11yProps(1)} />
<Tab
{...a11yProps(2)}
icon={
<Flags>
<FlagsIcon.UA />
</Flags>
}
/>
</Tabs>
</Box>
<TabPanel index={0} value={value}>
<ReactMarkdown remarkPlugins={[remarkGfm]}>{about}</ReactMarkdown>
<Contributors />
</TabPanel>
<TabPanel index={1} value={value}>
<ReactMarkdown remarkPlugins={[remarkGfm]}>{license}</ReactMarkdown>
</TabPanel>
<TabPanel index={2} value={value}>
<Support />
</TabPanel>
</Box>
</RegistryInfoDialog>
);
};
export default HeaderInfoDialog;

View File

@@ -1,3 +0,0 @@
import { Support } from './Support';
export { Support };

View File

@@ -1,125 +0,0 @@
import React from 'react';
import {
cleanup,
fireEvent,
renderWithStore,
screen,
} from 'verdaccio-ui/utils/test-react-testing-library';
import { DetailContext, DetailContextProps } from '../../pages/Version';
import { store } from '../../store/store';
import ActionBar, { Props } from './ActionBar';
const detailContextValue: DetailContextProps = {
packageName: 'foo',
readMe: 'test',
enableLoading: () => {},
isLoading: false,
hasNotBeenFound: false,
packageMeta: {
_uplinks: {},
latest: {
name: 'verdaccio-ui/local-storage',
version: '8.0.1-next.1',
dist: {
fileCount: 0,
unpackedSize: 0,
tarball: 'http://localhost:8080/bootstrap/-/bootstrap-4.3.1.tgz',
},
homepage: 'https://verdaccio.org',
bugs: {
url: 'https://github.com/verdaccio/monorepo/issues',
},
},
},
};
const ComponentToBeRendered: React.FC<{ contextValue: DetailContextProps; props?: Props }> = ({
contextValue,
props,
}) => (
<DetailContext.Provider value={contextValue}>
<ActionBar {...props} />
</DetailContext.Provider>
);
describe('<ActionBar /> component', () => {
afterEach(() => {
cleanup();
});
test('should render the component in default state', () => {
const { container } = renderWithStore(
<ComponentToBeRendered contextValue={detailContextValue} />,
store
);
expect(container.firstChild).toMatchSnapshot();
});
test('when there is no action bar data', () => {
const packageMeta = {
...detailContextValue.packageMeta,
latest: {
...detailContextValue.packageMeta.latest,
homepage: undefined,
bugs: undefined,
dist: {
...detailContextValue.packageMeta.latest.dist,
tarball: undefined,
},
},
};
const { container } = renderWithStore(
<ComponentToBeRendered contextValue={{ ...detailContextValue, packageMeta }} />,
store
);
expect(container.firstChild).toMatchSnapshot();
});
test('when there is a button to download a tarball', () => {
renderWithStore(<ComponentToBeRendered contextValue={{ ...detailContextValue }} />, store);
expect(screen.getByLabelText('Download tarball')).toBeTruthy();
});
test('when there is a button to raw manifest', () => {
renderWithStore(
<ComponentToBeRendered contextValue={{ ...detailContextValue }} props={{ showRaw: true }} />,
store
);
expect(screen.getByLabelText('Raw Manifest')).toBeTruthy();
});
test('when click button to raw manifest open a dialog with viewver', () => {
renderWithStore(
<ComponentToBeRendered contextValue={{ ...detailContextValue }} props={{ showRaw: true }} />,
store
);
fireEvent.click(screen.getByLabelText('Raw Manifest'));
expect(screen.getByTestId('raw-viewver-dialog')).toBeInTheDocument();
});
test('should not display download tarball button', () => {
renderWithStore(
<ComponentToBeRendered
contextValue={{ ...detailContextValue }}
props={{ showDownloadTarball: false }}
/>,
store
);
expect(screen.queryByLabelText('Download tarball')).toBeFalsy();
});
test('should not display show raw button', () => {
renderWithStore(
<ComponentToBeRendered contextValue={{ ...detailContextValue }} props={{ showRaw: false }} />,
store
);
expect(screen.queryByLabelText('Raw Manifest')).toBeFalsy();
});
test('when there is a button to open an issue', () => {
renderWithStore(<ComponentToBeRendered contextValue={{ ...detailContextValue }} />, store);
expect(screen.getByLabelText('Open an issue')).toBeTruthy();
});
});

View File

@@ -1,3 +0,0 @@
import { default as MaterialUIAppBar } from '@mui/material/AppBar';
export default MaterialUIAppBar;

View File

@@ -0,0 +1 @@
export { default } from './Contributors';

View File

@@ -1,16 +0,0 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { CopyClipboard as CopyClipboardOriginal } from '@verdaccio/ui-components';
interface Props {
text: string;
children?: React.ReactNode;
}
function CopyToClipBoard(props: Props) {
const { t } = useTranslation();
return <CopyClipboardOriginal title={t('copy-to-clipboard')} dataTestId="copy-icon" {...props} />;
}
export default CopyToClipBoard;

View File

@@ -1,3 +0,0 @@
import { default as MaterialUIFormHelperText } from '@mui/material/FormHelperText';
export default MaterialUIFormHelperText;

View File

@@ -1,3 +0,0 @@
import { default as MaterialUIInput } from '@mui/material/Input';
export default MaterialUIInput;

View File

@@ -1,40 +0,0 @@
import React, { MouseEvent } from 'react';
import { Link as RouterLink } from 'react-router-dom';
import Text, { TextProps } from './Text';
interface Props extends Pick<TextProps, 'variant'> {
external?: boolean;
className?: string;
to: string;
children?: React.ReactNode;
onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
}
type LinkRef = HTMLAnchorElement;
/* eslint-disable verdaccio/jsx-spread */
const Link = React.forwardRef<LinkRef, Props>(function Link(
{ external, to, children, variant, className, ...props },
ref
) {
const LinkTextContent = <Text variant={variant}>{children}</Text>;
return external ? (
<a
className={className}
href={to}
ref={ref}
rel="noopener noreferrer"
target="_blank"
{...props}
>
{LinkTextContent}
</a>
) : (
<RouterLink className={className} innerRef={ref} to={to} {...props}>
{LinkTextContent}
</RouterLink>
);
});
export default Link;

View File

@@ -1,39 +0,0 @@
import styled from '@emotion/styled';
import List from '@mui/material/List';
import { PRIMARY_COLOR } from 'verdaccio-ui/utils/colors';
import { default as MuiCard } from '../Card';
import { default as Typography } from '../Heading';
export const Wrapper = styled('div')({
display: 'flex',
alignItems: 'center',
flexDirection: 'column',
justifyContent: 'center',
flex: 1,
padding: '16px',
});
export const Inner = styled('div')({
maxWidth: '650px',
display: 'flex',
flexDirection: 'column',
});
export const EmptyPackage = styled('img')({
width: '150px',
margin: '0 auto',
});
export const Heading = styled(Typography)({
color: PRIMARY_COLOR,
});
export const StyledList = styled(List)({
padding: 0,
color: PRIMARY_COLOR,
});
export const Card = styled(MuiCard)({
marginTop: '24px',
});

View File

@@ -1,3 +0,0 @@
import { default as MaterialUIPaper } from '@mui/material/Paper';
export default MaterialUIPaper;

View File

@@ -78,4 +78,4 @@ const Support = () => {
);
};
export { Support };
export default Support;

View File

@@ -0,0 +1 @@
export { default } from './Support';

View File

@@ -1,6 +0,0 @@
import styled from '@emotion/styled';
import Chip from '@mui/material/Chip';
export const Tag = styled(Chip)({
margin: '5px',
});

View File

@@ -1 +0,0 @@
export { default } from './Text';

View File

@@ -1,3 +0,0 @@
import { default as MaterialUIToolbar } from '@mui/material/Toolbar';
export default MaterialUIToolbar;

View File

@@ -1,13 +0,0 @@
import { createContext } from 'react';
import { Language } from 'src/i18n/enabledLanguages';
interface Props {
isDarkMode: boolean;
setIsDarkMode: (isDarkMode: boolean) => void;
language: Language;
setLanguage: (language: Language) => void;
}
const ThemeContext = createContext<undefined | Props>(undefined);
export default ThemeContext;

View File

@@ -1,55 +0,0 @@
import { StyledEngineProvider, Theme, ThemeProvider } from '@mui/material/styles';
import i18next from 'i18next';
import React, { useCallback, useEffect } from 'react';
import { useConfig } from 'verdaccio-ui/providers/config';
import useLocalStorage from '../hooks/useLocalStorage';
import ThemeContext from './ThemeContext';
import loadDayJSLocale from './load-dayjs-locale';
import { ThemeMode, getTheme } from './theme';
declare module '@mui/styles/defaultTheme' {
// eslint-disable-next-line @typescript-eslint/no-empty-interface
interface DefaultTheme extends Theme {}
}
function getDarkModeDefault(darkModeConfig) {
const prefersDarkMode = window.matchMedia?.('(prefers-color-scheme:dark)').matches;
if (typeof darkModeConfig === 'boolean') {
return darkModeConfig;
} else {
return prefersDarkMode;
}
}
const ThemeProviderWrapper: React.FC<{ children: any }> = ({ children }) => {
const currentLanguage = i18next.languages?.[0];
const { configOptions } = useConfig();
const isDarkModeDefault = getDarkModeDefault(configOptions.darkMode);
const isSwitchThemeEnabled = configOptions.showThemeSwitch;
const [isDarkModeStorage, setIsDarkMode] = useLocalStorage('darkMode', isDarkModeDefault);
const [language, setLanguage] = useLocalStorage('language', currentLanguage);
const isDarkMode = isSwitchThemeEnabled === true ? isDarkModeStorage : isDarkModeDefault;
const themeMode: ThemeMode = isDarkMode ? 'dark' : 'light';
const changeLanguage = useCallback(async () => {
await i18next.changeLanguage(language);
}, [language]);
const currentTheme = getTheme(themeMode, configOptions?.primaryColor);
useEffect(() => {
changeLanguage();
loadDayJSLocale();
}, [language, changeLanguage]);
return (
<ThemeContext.Provider value={{ isDarkMode, setIsDarkMode, language, setLanguage }}>
<StyledEngineProvider injectFirst={true}>
<ThemeProvider theme={currentTheme}>{children}</ThemeProvider>
</StyledEngineProvider>
</ThemeContext.Provider>
);
};
export default ThemeProviderWrapper;

View File

@@ -1,7 +0,0 @@
import { useTheme as muiUseTheme } from '@mui/styles';
import { Theme } from './theme';
const useTheme = () => muiUseTheme<Theme>();
export default useTheme;

View File

@@ -28,6 +28,10 @@ i18n
fallbackLng: DEFAULT_LANGUAGE,
whitelist: [...listLanguagesAsString],
load: 'currentOnly',
react: {
wait: true,
useSuspense: false,
},
resources: languages,
debug: false,
interpolation: {

View File

@@ -2,24 +2,27 @@ import React from 'react';
import { createRoot } from 'react-dom/client';
import { hot } from 'react-hot-loader/root';
import { Provider } from 'react-redux';
import AppConfigurationContext from 'verdaccio-ui/providers/config';
import {
AppConfigurationProvider,
StyleBaseline,
ThemeProvider,
store,
} from '@verdaccio/ui-components';
import App from './App';
import StyleBaseline from './design-tokens/StyleBaseline';
import ThemeProvider from './design-tokens/ThemeProvider';
import { store } from './store';
const container = document.getElementById('root');
const root = createRoot(container as HTMLElement);
const AppContainer = () => (
<Provider store={store}>
<AppConfigurationContext>
<AppConfigurationProvider>
<ThemeProvider>
<StyleBaseline />
<App />
</ThemeProvider>
</AppConfigurationContext>
</AppConfigurationProvider>
</Provider>
);

View File

@@ -0,0 +1,3 @@
import { Home } from '@verdaccio/ui-components';
export default Home;

View File

@@ -1,32 +0,0 @@
import React from 'react';
import { cleanup, render, screen } from 'verdaccio-ui/utils/test-react-testing-library';
import { DetailContextProvider } from '../../context';
import Deprecated from './Deprecated';
describe('test Deprecated', () => {
afterEach(() => {
cleanup();
});
const packageMeta = {
latest: {
packageName: 'foo',
version: '1.0.0',
deprecated: 'duuuude, this is deprecated',
maintainers: [],
contributors: [],
},
};
test('should render the deprecated message', () => {
render(
// @ts-ignore
<DetailContextProvider value={{ packageMeta }}>
<Deprecated message={packageMeta.latest.deprecated} />
</DetailContextProvider>
);
expect(screen.getByText('duuuude, this is deprecated')).toBeInTheDocument();
});
});

View File

@@ -1,40 +0,0 @@
import React from 'react';
import loadable from '../../../App/utils/loadable';
import DetailContainerContentReadme from './DetailContainerContentReadme';
export enum TabPosition {
README = 'readme',
DEPENDENCIES = 'dependencies',
VERSIONS = 'versions',
UPLINKS = 'uplinks',
}
const Versions = loadable(() => import(/* webpackChunkName: "Versions" */ './Versions'));
const UpLinks = loadable(() => import(/* webpackChunkName: "UpLinks" */ './UpLinks'));
const Dependencies = loadable(
() => import(/* webpackChunkName: "Dependencies" */ './Dependencies')
);
interface Props {
tabPosition: TabPosition;
readDescription?: string;
}
const DetailContainerContent: React.FC<Props> = ({ tabPosition, readDescription }) => {
switch (tabPosition) {
case TabPosition.README:
return <DetailContainerContentReadme description={readDescription} />;
case TabPosition.UPLINKS:
return <UpLinks />;
case TabPosition.VERSIONS:
return <Versions />;
case TabPosition.DEPENDENCIES:
return <Dependencies />;
default:
return null;
}
};
export default DetailContainerContent;

View File

@@ -1,58 +0,0 @@
import React from 'react';
import { MemoryRouter } from 'react-router-dom';
import { cleanup, render } from 'verdaccio-ui/utils/test-react-testing-library';
import translationEN from '../../../../i18n/crowdin/ui.json';
import { DetailContext } from '../../context';
import { DetailContextProps } from '../../version-config';
import Versions from './Versions';
import data from './__partials__/data.json';
const detailContextValue: Partial<DetailContextProps> = {
packageName: 'foo',
packageMeta: data,
};
const ComponentToBeRendered: React.FC<{ contextValue: Partial<DetailContextProps> }> = ({
contextValue,
}) => (
<MemoryRouter>
<DetailContext.Provider value={contextValue}>
<Versions />
</DetailContext.Provider>
</MemoryRouter>
);
describe('<Version /> component', () => {
afterEach(() => {
cleanup();
});
// FIXME: this test is not deterministic (writes `N days ago` in the snapshot, where N is random number)
test.skip('should render the component in default state', () => {
const wrapper = render(<ComponentToBeRendered contextValue={detailContextValue} />);
expect(wrapper).toMatchSnapshot();
});
test('should render versions', () => {
const { getByText } = render(<ComponentToBeRendered contextValue={detailContextValue} />);
expect(getByText(translationEN.versions['version-history'])).toBeTruthy();
expect(getByText(translationEN.versions['current-tags'])).toBeTruthy();
// pick some versions
expect(getByText('2.3.0')).toBeTruthy();
expect(getByText('canary')).toBeTruthy();
});
test('should not render versions', () => {
const { queryByText } = render(
<ComponentToBeRendered contextValue={{ packageName: detailContextValue.packageName }} />
);
expect(queryByText(translationEN.versions['version-history'])).toBeFalsy();
expect(queryByText(translationEN.versions['current-tags'])).toBeFalsy();
});
test.todo('should click on version link');
});

View File

@@ -1,39 +0,0 @@
import React, { useContext } from 'react';
import { useTranslation } from 'react-i18next';
import { DetailContext } from '../../context';
import VersionsHistoryList from './VersionsHistoryList';
import VersionsTagList from './VersionsTagList';
import { StyledText } from './styles';
const Versions: React.FC = () => {
const detailContext = useContext(DetailContext);
const { t } = useTranslation();
const { packageMeta, packageName } = detailContext;
if (!packageMeta) {
return null;
}
const { versions = {}, time = {}, ['dist-tags']: distTags = {} } = packageMeta;
return (
<>
{distTags && Object.keys(distTags).length > 0 && packageName && (
<>
<StyledText variant="subtitle1">{t('versions.current-tags')}</StyledText>
<VersionsTagList packageName={packageName} tags={distTags} time={time} />
</>
)}
{versions && Object.keys(versions).length > 0 && packageName && (
<>
<StyledText variant="subtitle1">{t('versions.version-history')}</StyledText>
<VersionsHistoryList packageName={packageName} time={time} versions={versions} />
</>
)}
</>
);
};
export default Versions;

View File

@@ -1 +0,0 @@
export { default } from './DetailContainer';

View File

@@ -1,98 +0,0 @@
import _ from 'lodash';
import React from 'react';
import { renderWithStore, screen, waitFor } from 'verdaccio-ui/utils/test-react-testing-library';
import { store } from '../../../store';
import { DetailContext } from '../context';
import { DetailContextProps } from '../version-config';
import DetailSidebar from './DetailSidebar';
const ComponentToBeRendered: React.FC<{ contextValue: DetailContextProps }> = ({
contextValue,
}) => (
<DetailContext.Provider value={contextValue}>
<DetailSidebar />
</DetailContext.Provider>
);
// https://stackoverflow.com/a/54010619/308341
jest.mock('react', () => {
const React = jest.requireActual('react');
React.Suspense = ({ children }) => children;
return React;
});
const detailContextValue: DetailContextProps = {
packageName: 'foo',
readMe: 'test',
enableLoading: () => {},
isLoading: false,
hasNotBeenFound: false,
packageMeta: {
_uplinks: {},
latest: {
name: 'verdaccio-ui/local-storage',
version: '8.0.1-next.1',
dist: {
fileCount: 0,
unpackedSize: 0,
tarball: 'http://localhost:8080/bootstrap/-/bootstrap-4.3.1.tgz',
},
homepage: 'https://verdaccio.org',
bugs: {
url: 'https://github.com/verdaccio/monorepo/issues',
},
},
},
};
describe('DetailSidebar', () => {
test('should render commonjs module icon', async () => {
const { getByAltText } = renderWithStore(
<ComponentToBeRendered
contextValue={_.merge(detailContextValue, {
packageMeta: {
latest: {
type: 'commonjs',
},
},
})}
/>,
store
);
await waitFor(() => expect(getByAltText('commonjs')).toBeInTheDocument());
});
test('should render ts module icon', () => {
renderWithStore(
<ComponentToBeRendered
contextValue={_.merge(detailContextValue, {
packageMeta: {
latest: {
types: './src/index.d.ts',
},
},
})}
/>,
store
);
expect(screen.getByAltText('typescript')).toBeInTheDocument();
});
test('should render es6 module icon', () => {
renderWithStore(
<ComponentToBeRendered
contextValue={_.merge(detailContextValue, {
packageMeta: {
latest: {
type: 'module',
},
},
})}
/>,
store
);
expect(screen.getByAltText('es6 modules')).toBeInTheDocument();
});
});

View File

@@ -1,73 +0,0 @@
import styled from '@emotion/styled';
import React, { useContext } from 'react';
import { PackageMetaInterface } from 'types/packageMeta';
import ActionBar from 'verdaccio-ui/components/ActionBar';
import Author from 'verdaccio-ui/components/Author';
import Paper from 'verdaccio-ui/components/Paper';
import { Theme } from 'verdaccio-ui/design-tokens/theme';
import { useConfig } from 'verdaccio-ui/providers/config';
import { DetailContext } from '..';
import loadable from '../../../App/utils/loadable';
import DetailSidebarFundButton from './DetailSidebarFundButton';
import DetailSidebarTitle from './DetailSidebarTitle';
import Developers from './Developers';
import { DeveloperType } from './Developers/DevelopersTitle';
const Engines = loadable(() => import(/* webpackChunkName: "Engines" */ './Engines'));
const Dist = loadable(() => import(/* webpackChunkName: "Dist" */ './Dist'));
const Install = loadable(() => import(/* webpackChunkName: "Install" */ './Install'));
const Repository = loadable(() => import(/* webpackChunkName: "Repository" */ './Repository'));
const getModuleType = (manifest: PackageMetaInterface) => {
if (manifest.latest.main) {
return 'commonjs';
} else if (manifest.latest.type) {
return manifest.latest.type;
}
return;
};
const DetailSidebar: React.FC = () => {
const detailContext = useContext(DetailContext);
const { packageMeta, packageName, packageVersion } = detailContext;
const { configOptions } = useConfig();
const version = packageVersion || packageMeta?.latest.version || '';
const time = packageMeta?.time ? packageMeta.time[version] : '';
if (!packageMeta || !packageName) {
return null;
}
return (
<StyledPaper className={'sidebar-info'}>
<DetailSidebarTitle
description={packageMeta.latest?.description}
hasTypes={typeof packageMeta.latest.types === 'string'}
isLatest={typeof packageVersion === 'undefined'}
moduleType={getModuleType(packageMeta)}
packageName={packageName}
time={time}
version={version}
/>
<ActionBar
showDownloadTarball={configOptions.showDownloadTarball}
showRaw={configOptions.showRaw}
/>
<Install />
<DetailSidebarFundButton />
<Repository />
<Engines />
<Dist />
<Author />
<Developers type={DeveloperType.MAINTAINERS} />
<Developers type={DeveloperType.CONTRIBUTORS} />
</StyledPaper>
);
};
export default DetailSidebar;
const StyledPaper = styled(Paper)<{ theme?: Theme }>(({ theme }) => ({
padding: theme?.spacing(3, 2),
}));

View File

@@ -1,109 +0,0 @@
import _ from 'lodash';
import React from 'react';
import { render } from 'verdaccio-ui/utils/test-react-testing-library';
import { DetailContext } from '../context';
import { DetailContextProps } from '../version-config';
import DetailSidebarFundButton from './DetailSidebarFundButton';
const ComponentToBeRendered: React.FC<{ contextValue: DetailContextProps }> = ({
contextValue,
}) => (
<DetailContext.Provider value={contextValue}>
<DetailSidebarFundButton />
</DetailContext.Provider>
);
const detailContextValue: DetailContextProps = {
packageName: 'foo',
readMe: 'test',
enableLoading: () => {},
isLoading: false,
hasNotBeenFound: false,
packageMeta: {
_uplinks: {},
latest: {
name: 'verdaccio-ui/local-storage',
version: '8.0.1-next.1',
dist: {
fileCount: 0,
unpackedSize: 0,
tarball: 'http://localhost:8080/bootstrap/-/bootstrap-4.3.1.tgz',
},
homepage: 'https://verdaccio.org',
bugs: {
url: 'https://github.com/verdaccio/monorepo/issues',
},
},
},
};
describe('test DetailSidebarFundButton', () => {
test('should not display the button if fund is missing', () => {
const wrapper = render(<ComponentToBeRendered contextValue={detailContextValue} />);
expect(wrapper.queryByText('Fund')).toBeNull();
});
test('should not display the button if url is missing', () => {
const value = _.merge(detailContextValue, {
packageMeta: {
latest: {
funding: {},
},
},
});
const wrapper = render(<ComponentToBeRendered contextValue={value} />);
expect(wrapper.queryByText('Fund')).toBeNull();
});
test('should not display the button if url is not a string', () => {
const value = _.merge(detailContextValue, {
packageMeta: {
latest: {
funding: {
url: null,
},
},
},
});
const wrapper = render(<ComponentToBeRendered contextValue={value} />);
expect(wrapper.queryByText('Fund')).toBeNull();
});
test('should not display the button if url is not an url', () => {
const value = _.merge(detailContextValue, {
packageMeta: {
latest: {
funding: {
url: 'somethign different as url',
},
},
},
});
const wrapper = render(<ComponentToBeRendered contextValue={value} />);
expect(wrapper.queryByText('Fund')).toBeNull();
});
test('should display the button if url is a valid url', () => {
const value = _.merge(detailContextValue, {
packageMeta: {
latest: {
funding: {
url: 'https://opencollective.com/verdaccio',
},
},
},
});
const wrapper = render(<ComponentToBeRendered contextValue={value} />);
expect(wrapper.getByText('Fund')).toBeTruthy();
});
});

View File

@@ -1 +0,0 @@
export { default } from './Developers';

View File

@@ -1,58 +0,0 @@
import Avatar from '@mui/material/Avatar';
import Grid from '@mui/material/Grid';
import List from '@mui/material/List';
import ListItemText from '@mui/material/ListItemText';
import React, { useContext } from 'react';
import { useTranslation } from 'react-i18next';
import { DetailContext } from '../../context';
import npm from '../Install/img/npm.svg';
import node from './img/node.png';
import { EngineListItem, StyledText } from './styles';
const Engine: React.FC = () => {
const { packageMeta } = useContext(DetailContext);
const { t } = useTranslation();
const engines = packageMeta?.latest?.engines;
if (!engines || (!engines.node && !engines.npm)) {
return null;
}
return (
<Grid container={true}>
{engines.node && (
<Grid item={true} xs={6}>
<List
subheader={
<StyledText variant={'subtitle1'}>{t('sidebar.engines.node-js')}</StyledText>
}
>
<EngineListItem button={true}>
<Avatar src={node} />
<ListItemText primary={engines.node} />
</EngineListItem>
</List>
</Grid>
)}
{engines.npm && (
<Grid item={true} xs={6}>
<List
subheader={
<StyledText variant={'subtitle1'}>{t('sidebar.engines.npm-version')}</StyledText>
}
>
<EngineListItem button={true}>
<Avatar src={npm} />
<ListItemText primary={engines.npm} />
</EngineListItem>
</List>
</Grid>
)}
</Grid>
);
};
export default Engine;

Some files were not shown because too many files have changed in this diff Show More