0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2024-12-16 21:56:25 -05:00

chore: revert changes (#4745)

* chore: revert "Fix sidebar test"

This reverts commit 096d634917.

Sorry, this push should have gone to my fork only.

* chore: revert "Merge branch 'apm' into pr/mbtools/2"

This reverts commit 87fa9270a5, reversing
changes made to dc2cd48a78.

Sorry, this push should have gone to my fork only.
This commit is contained in:
Marc Bernard 2024-07-30 17:15:34 -04:00 committed by GitHub
parent 096d634917
commit 3c6e6b9af7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
40 changed files with 81 additions and 534 deletions

View file

@ -8,22 +8,22 @@
.* .*
# you can add exceptions like in .gitignore to maintain a whitelist: # you can add exceptions like in .gitignore to maintain a whitelist:
# e.g. # e.g.
!babel.config.js !.babelrc
!eslintrc.js !.eslintrc
!.prettierrc !.prettierrc.json
!.prettierignore
!.eslintignore !.eslintignore
!.stylelintrc !.stylelintrc
!.jest.config.js
!.jestEnvironment.js
!.yarnrc.yml
!.yarn/releases/yarn-*.cjs
!.yarn/plugins/*
!.pnp.js
# just in case, yarn 2 pnp is enabled # do not copy over node_modules we will run `pnpm install` anyway
node_modules node_modules
.husky/ website
.git/ jest
docs
contrib
docker-examples
website
systemd
# output from test runs and similar things # output from test runs and similar things
*.log *.log
@ -33,21 +33,7 @@ coverage/
# IDE config files # IDE config files
jsconfig.json jsconfig.json
*.iml *.iml
# let's not get too recursive ;) # let's not get too recursive ;)
Dockerfile* Dockerfile*
docker-compose*.yaml docker-compose*.yaml
.github/
.husky/
*.log
coverage/
.vscode/
*.md
contrib/
docs/
docker-examples/
systemd/
assets/
jest*.js
test/
wiki/
debug/

View file

@ -1,56 +0,0 @@
name: Docker publish apm to docker.io
on:
push:
paths:
- '.github/workflows/docker-apm.yml'
- 'src/**'
- 'conf/**'
- 'types/**'
- 'docker-bin/**'
- 'bin/**'
- 'package.json'
- 'yarn.lock'
- '.yarn/**'
- '.yarnrc.yaml'
- '.pnp.js'
- '.dockerignore'
- 'docker-compose.yml'
- 'Dockerfile'
branches:
- 'apm'
permissions:
contents: read # to fetch code (actions/checkout)
jobs:
docker:
runs-on: ubuntu-latest
if: github.repository == 'mbtools/verdaccio'
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
with:
driver-opts: network=host
- uses: docker/login-action@v3
name: Login Docker Hub
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Prepare docker image tags
id: docker_meta
uses: docker/metadata-action@v5
with:
images: abappm/registry
tags: |
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'apm') }}
- name: Build & Push
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}

View file

@ -1,5 +1,5 @@
{ {
"endOfLine": "auto", "endOfLine": "lf",
"useTabs": false, "useTabs": false,
"printWidth": 100, "printWidth": 100,
"tabWidth": 2, "tabWidth": 2,

View file

@ -1,14 +1,10 @@
// Place your settings in this file to overwrite default and user settings. // Place your settings in this file to overwrite default and user settings.
{ {
"files.exclude": { "files.exclude": {
"**/node_modules/**/node_modules": true,
"**/build": false, "**/build": false,
"**/coverage": true, "**/coverage": true,
".idea": true, ".idea": true,
}, },
"editor.defaultFormatter": "esbenp.prettier-vscode", "editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": false, "editor.formatOnSave": true
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
} }

View file

@ -1,13 +1,9 @@
FROM --platform=${BUILDPLATFORM:-linux/amd64} node:20.15.1-alpine AS builder FROM --platform=${BUILDPLATFORM:-linux/amd64} node:21-alpine AS builder
ENV NODE_ENV=production \ ENV NODE_ENV=development \
VERDACCIO_BUILD_REGISTRY=https://registry.npmjs.org \ VERDACCIO_BUILD_REGISTRY=https://registry.npmjs.org
HUSKY_SKIP_INSTALL=1 \
CI=true \
HUSKY_DEBUG=1
RUN apk add --force-overwrite && \ RUN apk --no-cache add openssl ca-certificates wget && \
apk --no-cache add openssl ca-certificates wget && \
apk --no-cache add g++ gcc libgcc libstdc++ linux-headers make python3 && \ apk --no-cache add g++ gcc libgcc libstdc++ linux-headers make python3 && \
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \ wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget -q https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-2.35-r0.apk && \ wget -q https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-2.35-r0.apk && \
@ -15,24 +11,17 @@ RUN apk add --force-overwrite && \
WORKDIR /opt/verdaccio-build WORKDIR /opt/verdaccio-build
COPY . . COPY . .
RUN npm -g i pnpm@8.9.0 && \
pnpm config set registry $VERDACCIO_BUILD_REGISTRY && \
pnpm install --frozen-lockfile --ignore-scripts && \
rm -Rf test && \
pnpm run build
# FIXME: need to remove devDependencies from the build
# NODE_ENV=production pnpm install --frozen-lockfile --ignore-scripts
# RUN pnpm install --prod --ignore-scripts
## build the project and create a tarball of the project for later FROM node:21-alpine
## global installation LABEL maintainer="https://github.com/verdaccio/verdaccio"
RUN yarn config set npmRegistryServer $VERDACCIO_BUILD_REGISTRY && \
yarn config set enableProgressBars true && \
yarn config set enableScripts false && \
yarn install --immutable && \
yarn build
## pack the project
RUN yarn pack --dry-run \
&& yarn pack --out verdaccio.tgz \
&& mkdir -p /opt/tarball \
&& mv /opt/verdaccio-build/verdaccio.tgz /opt/tarball
## clean up and reduce bundle size
RUN rm -Rf /opt/verdaccio-build
FROM node:20.15.1-alpine
LABEL maintainer="https://github.com/abapPM/abapPM"
ENV VERDACCIO_APPDIR=/opt/verdaccio \ ENV VERDACCIO_APPDIR=/opt/verdaccio \
VERDACCIO_USER_NAME=verdaccio \ VERDACCIO_USER_NAME=verdaccio \
@ -44,33 +33,17 @@ ENV PATH=$VERDACCIO_APPDIR/docker-bin:$PATH \
WORKDIR $VERDACCIO_APPDIR WORKDIR $VERDACCIO_APPDIR
# https://github.com/Yelp/dumb-init
RUN apk --no-cache add openssl dumb-init RUN apk --no-cache add openssl dumb-init
RUN mkdir -p /verdaccio/storage /verdaccio/plugins /verdaccio/conf RUN mkdir -p /verdaccio/storage /verdaccio/plugins /verdaccio/conf
COPY --from=builder /opt/tarball . COPY --from=builder /opt/verdaccio-build .
USER root RUN ls packages/config/src/conf
# install verdaccio as a global package so is fully handled by npm ADD packages/config/src/conf/docker.yaml /verdaccio/conf/config.yaml
# ensure none dependency is being missing and is prod by default
RUN npm install -g $VERDACCIO_APPDIR/verdaccio.tgz \
## clean up cache
&& npm cache clean --force \
&& rm -Rf .npm/ \
&& rm $VERDACCIO_APPDIR/verdaccio.tgz \
# yarn is not need it after this step
# Also remove the symlinks added in the [`node:alpine` Docker image](https://github.com/nodejs/docker-node/blob/02a64a08a98a472c6141cd583d2e9fc47bcd9bfd/18/alpine3.16/Dockerfile#L91-L92).
&& rm -Rf /opt/yarn-v1.22.19/ /usr/local/bin/yarn /usr/local/bin/yarnpkg
# apm assets and config
ADD abappm /verdaccio/abappm
ADD config.yaml /verdaccio/conf/config.yaml
ADD docker-bin $VERDACCIO_APPDIR/docker-bin
RUN adduser -u $VERDACCIO_USER_UID -S -D -h $VERDACCIO_APPDIR -g "$VERDACCIO_USER_NAME user" -s /sbin/nologin $VERDACCIO_USER_NAME && \ RUN adduser -u $VERDACCIO_USER_UID -S -D -h $VERDACCIO_APPDIR -g "$VERDACCIO_USER_NAME user" -s /sbin/nologin $VERDACCIO_USER_NAME && \
chmod -R +x /usr/local/lib/node_modules/verdaccio/bin/verdaccio $VERDACCIO_APPDIR/docker-bin && \ chmod -R +x $VERDACCIO_APPDIR/packages/verdaccio/bin $VERDACCIO_APPDIR/docker-bin && \
chown -R $VERDACCIO_USER_UID:root /verdaccio/storage && \ chown -R $VERDACCIO_USER_UID:root /verdaccio/storage && \
chmod -R g=u /verdaccio/storage /etc/passwd chmod -R g=u /verdaccio/storage /etc/passwd
@ -82,4 +55,4 @@ VOLUME /verdaccio/storage
ENTRYPOINT ["uid_entrypoint"] ENTRYPOINT ["uid_entrypoint"]
CMD verdaccio --config /verdaccio/conf/config.yaml --listen $VERDACCIO_PROTOCOL://0.0.0.0:$VERDACCIO_PORT CMD $VERDACCIO_APPDIR/packages/verdaccio/bin/verdaccio --config /verdaccio/conf/config.yaml --listen $VERDACCIO_PROTOCOL://0.0.0.0:$VERDACCIO_PORT

View file

@ -1,3 +0,0 @@
# abapPM
Assets for Verdaccio

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View file

@ -1,11 +0,0 @@
#!/bin/bash
if pgrep -f "/usr/bin/dumb-init" > /dev/null; then
if pgrep -f "apm" > /dev/null; then
exit 0
else
exit 1
fi
else
exit 1
fi

View file

@ -1,214 +0,0 @@
#
# This is the default configuration file. It allows all users to do anything,
# please read carefully the documentation and best practices to
# improve security.
#
# Do not configure host and port under `listen` in this file
# as it will be ignored when using docker.
# see https://verdaccio.org/docs/en/docker#docker-and-custom-port-configuration
#
# Look here for more config file examples:
# https://github.com/verdaccio/verdaccio/tree/5.x/conf
#
# Read about the best practices
# https://verdaccio.org/docs/best
# path to a directory with all packages
storage: /verdaccio/storage/data
# path to a directory with plugins to include
plugins: /verdaccio/plugins
# https://verdaccio.org/docs/webui
web:
enable: true
title: apm - A Package Manager for ABAP
logo: /verdaccio/abappm/apm_banner.png
logoDark: /verdaccio/abappm/apm_banner_gray.png
favicon: /verdaccio/abappm/apm.ico
primaryColor: '#c0c0c0'
darkMode: true
gravatar: true
# by default packages are ordercer ascendant (asc|desc)
# sort_packages: asc
# convert your UI to the dark side
# darkMode: true
# html_cache: true
# by default all features are displayed
# login: true
pkgManagers:
- apm
showInfo: false
showUplinks: false
showSettings: false
# In combination with darkMode you can force specific theme
# showThemeSwitch: true
# showFooter: true
# showSearch: false
# showRaw: true
# showDownloadTarball: true
# HTML tags injected after manifest <scripts/>
# scriptsBodyAfter:
# - '<script type="text/javascript" src="https://my.company.com/customJS.min.js"></script>'
# HTML tags injected before ends </head>
metaScripts:
- '<meta name="robots" content="noindex" />'
- '<meta name="description" content="apm - A Package Manager 📦, a Website 🌐, and a Registry 📑 for ABAP" />'
# - '<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>'
# - '<script type="text/javascript" src="https://browser.sentry-cdn.com/5.15.5/bundle.min.js"></script>'
# HTML tags injected first child at <body/>
scriptsbodyBefore:
# - '<div id="beta" style="color:white;background-color:blue;margin:auto;text-align:center;font-size:12px;"><strong>***PLAYGROUND***</strong> Packages will be deleted every Sunday night! <strong>***PLAYGROUND***</strong></div>'
# Public path for template manifest scripts (only manifest)
# publicPath: https://playground.abappm.com/
auth:
htpasswd:
file: /verdaccio/storage/htpasswd
# Maximum amount of users allowed to register, defaults to "+inf".
# You can set this to -1 to disable registration.
max_users: 10
algorithm: bcrypt
# https://verdaccio.org/docs/configuration#uplinks
# a list of other known repositories we can talk to
uplinks:
# Learn how to protect your packages
# https://verdaccio.org/docs/protect-your-dependencies/
# https://verdaccio.org/docs/configuration#packages
packages:
'@*/*':
# scoped packages
access: $all
publish: $authenticated
unpublish: $authenticated
'**':
# global packages
access: $all
publish: $authenticated
unpublish: $authenticated
# To improve your security configuration and avoid dependency confusion
# consider removing the proxy property for private packages
# https://verdaccio.org/docs/best#remove-proxy-to-increase-security-at-private-packages
# https://verdaccio.org/docs/configuration#server
# You can specify HTTP/1.1 server keep alive timeout in seconds for incoming connections.
# A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout.
# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough.
server:
keepAliveTimeout: 60
# https://verdaccio.org/docs/configuration#offline-publish
publish:
check_owner: true
# allow_offline: false
# https://verdaccio.org/docs/configuration#url-prefix
# url_prefix: /verdaccio/
# VERDACCIO_PUBLIC_URL='https://somedomain.org';
# url_prefix: '/my_prefix'
# // url -> https://somedomain.org/my_prefix/
# VERDACCIO_PUBLIC_URL='https://somedomain.org';
# url_prefix: '/'
# // url -> https://somedomain.org/
# VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix';
# url_prefix: '/second_prefix'
# // url -> https://somedomain.org/second_prefix/'
url_prefix: '/'
# https://verdaccio.org/docs/configuration#security
security:
api:
legacy: false
jwt:
sign:
expiresIn: 29d
# verify:
# someProp: [value]
web:
sign:
expiresIn: 1h # 1 hour by default
# verify:
# someProp: [value]
# https://verdaccio.org/docs/configuration#user-rate-limit
# userRateLimit:
# windowMs: 50000
# max: 1000
# https://verdaccio.org/docs/configuration#max-body-size
max_body_size: 1mb
# https://verdaccio.org/docs/configuration#listen-port
# listen:
# - localhost:4873 # default value
# - http://localhost:4873 # same thing
# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
# - https://example.org:4873 # if you want to use https
# - "[::1]:4873" # ipv6
# - unix:/tmp/verdaccio.sock # unix socket
# The HTTPS configuration is useful if you do not consider use a HTTP Proxy
# https://verdaccio.org/docs/configuration#https
# https:
# key: ./path/verdaccio-key.pem
# cert: ./path/verdaccio-cert.pem
# ca: ./path/verdaccio-csr.pem
# https://verdaccio.org/docs/configuration#proxy
# http_proxy: http://something.local/
# https_proxy: https://something.local/
# https://verdaccio.org/docs/configuration#notifications
# notify:
# method: POST
# headers: [{ "Content-Type": "application/json" }]
# endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
# content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
# https://verdaccio.org/docs/logger
# log settings
log: { type: stdout, format: pretty, level: http }
# { type: file, path: /verdaccio/storage/verdaccio.log, level: info }
# experiments:
# # support for npm token command
# token: false
# # enable tarball URL redirect for hosting tarball with a different server, the tarball_url_redirect can be a template string
# tarball_url_redirect: 'https://mycdn.com/verdaccio/${packageName}/${filename}'
# # the tarball_url_redirect can be a function, takes packageName and filename and returns the url, when working with a js configuration file
# tarball_url_redirect(packageName, filename) {
# const signedUrl = // generate a signed url
# return signedUrl;
# }
# translate your registry, api i18n not available yet
# i18n:
# list of the available translations https://github.com/verdaccio/verdaccio/blob/master/packages/plugins/ui-theme/src/i18n/ABOUT_TRANSLATIONS.md
# web: en-US
middlewares:
audit:
enabled: true
# install-counts:
# enabled: true
# redis:
# host: red-ckfit036fquc73egihn0
# port: 6379
# Using Redis as storage
# https://github.com/openupm/verdaccio-redis-storage
#store:
# storage-proxy:
# database_backend: redis-storage
# search_backend: redis-storage
# packument_backend: redis-storage
# tarball_backend: '@verdaccio/local-storage'
# backends:
# '@verdaccio/local-storage': {}
# redis-storage:
# host: red-ckfit036fquc73egihn0
# port: 6379

View file

@ -1,7 +1,5 @@
module.exports = { module.exports = {
moduleFileExtensions: ['ts', 'js'], moduleFileExtensions: ['ts', 'js'],
maxWorkers: 3,
testTimeout: 20000,
transform: { transform: {
'^.+\\.(js|ts)$': 'babel-jest', '^.+\\.(js|ts)$': 'babel-jest',
}, },

View file

@ -77,7 +77,7 @@ export type FlagsConfig = {
changePassword?: boolean; changePassword?: boolean;
}; };
export type PackageManagers = 'pnpm' | 'yarn' | 'npm' | 'apm'; export type PackageManagers = 'pnpm' | 'yarn' | 'npm';
// FUTURE: WebConf and TemplateUIOptions should be merged . // FUTURE: WebConf and TemplateUIOptions should be merged .
export type CommonWebConf = { export type CommonWebConf = {

View file

@ -39,7 +39,6 @@
"friendly-errors-webpack-plugin": "1.7.0", "friendly-errors-webpack-plugin": "1.7.0",
"harmony-reflect": "1.6.2", "harmony-reflect": "1.6.2",
"highlight.js": "11.10.0", "highlight.js": "11.10.0",
"highlightjs-sap-abap": "0.3.0",
"history": "4.10.1", "history": "4.10.1",
"html-webpack-plugin": "5.6.0", "html-webpack-plugin": "5.6.0",
"i18next": "20.6.1", "i18next": "20.6.1",

View file

@ -132,11 +132,9 @@
"title": "Contributors" "title": "Contributors"
}, },
"engines": { "engines": {
"apm-version": "apm Version",
"npm-version": "Npm Version", "npm-version": "Npm Version",
"pnpm-version": "Pnpm Version", "pnpm-version": "Pnpm Version",
"yarn-version": "Yarn Version", "yarn-version": "Yarn Version",
"abap": "ABAP Release",
"node-js": "Node.js" "node-js": "Node.js"
} }
}, },

View file

@ -9,7 +9,6 @@
"types": "build/index.d.ts", "types": "build/index.d.ts",
"scripts": { "scripts": {
"test": "cross-env TZ=UTC jest --config jest/jest.config.js", "test": "cross-env TZ=UTC jest --config jest/jest.config.js",
"test:snap": "cross-env TZ=UTC jest --config jest/jest.config.js --updateSnapshot",
"test:html": "cross-env TZ=UTC jest --config jest/jest.config.js --coverage-reporters=html", "test:html": "cross-env TZ=UTC jest --config jest/jest.config.js --coverage-reporters=html",
"clean": "rimraf ./build", "clean": "rimraf ./build",
"type-check": "tsc --noEmit -p tsconfig.build.json", "type-check": "tsc --noEmit -p tsconfig.build.json",
@ -37,7 +36,6 @@
"dayjs": "1.11.10", "dayjs": "1.11.10",
"dompurify": "3.1.6", "dompurify": "3.1.6",
"highlight.js": "11.10.0", "highlight.js": "11.10.0",
"highlightjs-sap-abap": "0.3.0",
"history": "4.10.1", "history": "4.10.1",
"i18next": "20.6.1", "i18next": "20.6.1",
"js-base64": "3.7.6", "js-base64": "3.7.6",

View file

@ -20,7 +20,7 @@ export const Fab = styled(FabMUI)<{ theme?: Theme }>(({ theme }) => ({
'&:hover': { '&:hover': {
color: theme?.palette.mode === 'light' ? theme?.palette.primary.main : theme?.palette.cyanBlue, color: theme?.palette.mode === 'light' ? theme?.palette.primary.main : theme?.palette.cyanBlue,
}, },
color: theme?.palette.mode === 'light' ? theme?.palette.black : theme?.palette.white, color: theme?.palette.white,
})); }));
type ActionType = 'VISIT_HOMEPAGE' | 'OPEN_AN_ISSUE' | 'DOWNLOAD_TARBALL' | 'RAW_DATA'; type ActionType = 'VISIT_HOMEPAGE' | 'OPEN_AN_ISSUE' | 'DOWNLOAD_TARBALL' | 'RAW_DATA';

View file

@ -6,7 +6,7 @@ import React, { FC } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { PackageMetaInterface } from '../../types/packageMeta'; import { PackageMetaInterface } from '../../types/packageMeta';
import { ABAP as Abap, Apm, NodeJS, Npm, Pnpm, Yarn } from '../Icons'; import { NodeJS, Npm, Pnpm, Yarn } from '../Icons';
import { EngineListItem, StyledText } from './styles'; import { EngineListItem, StyledText } from './styles';
/** /**
@ -36,14 +36,7 @@ const EngineItem: FC<EngineItemProps> = ({ title, element, engineText }) => (
interface EngineMetadata extends Omit<PackageMetaInterface, 'latest'> { interface EngineMetadata extends Omit<PackageMetaInterface, 'latest'> {
latest: { latest: {
engines?: { engines?: { npm?: string; node?: string; pnpm?: string; yarn?: string };
abap?: string;
apm?: string;
npm?: string;
node?: string;
pnpm?: string;
yarn?: string;
};
}; };
} }
@ -68,22 +61,6 @@ const Engine: React.FC<Props> = ({ packageMeta }) => {
return ( return (
<Grid container={true}> <Grid container={true}>
{engines.abap ? (
<EngineItem
element={<Abap />}
engineText={engines.abap}
title={t('sidebar.engines.abap')}
/>
) : null}
{engines.apm ? (
<EngineItem
element={<Apm />}
engineText={engines.apm}
title={t('sidebar.engines.apm-version')}
/>
) : null}
{engines.node ? ( {engines.node ? (
<EngineItem <EngineItem
element={<NodeJS />} element={<NodeJS />}

View file

@ -6,7 +6,7 @@ import { Theme } from '../../Theme';
export const StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({ export const StyledText = styled(Typography)<{ theme?: Theme }>((props) => ({
fontWeight: props.theme?.fontWeight.bold, fontWeight: props.theme?.fontWeight.bold,
// textTransform: 'capitalize', // apm textTransform: 'capitalize',
})); }));
export const EngineListItem = styled(ListItem)({ export const EngineListItem = styled(ListItem)({

View file

@ -1,7 +0,0 @@
import React from 'react';
const icon = require('./abap.svg');
export function ABAP() {
return <img alt="ABAP" height="20" src={icon} width="20" />;
}

View file

@ -1,7 +0,0 @@
import React from 'react';
const icon = require('./abapmodule.svg');
export function ABAPModule() {
return <img alt="ABAP module" height="15" src={icon} width="58" />;
}

View file

@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="240px" height="240px">
<g>
<path fill="#1976d2" d="M0,12v24h25l23-24H0z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 170 B

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 112 32" width="112" height="32" xmlns="http://www.w3.org/2000/svg">
<rect width="112" height="32" style="fill: rgb(0, 68, 204);"/>
<text style="fill: rgb(255, 255, 255); font-family: Arial, sans-serif; font-size: 28px; font-weight: 700; white-space: pre;" x="6" y="26">module</text>
</svg>

Before

Width:  |  Height:  |  Size: 351 B

View file

@ -3,5 +3,3 @@ export { CommonJS } from './CommonJS';
export { ES6Modules } from './ES6Module'; export { ES6Modules } from './ES6Module';
export { NodeJS } from './NodeJS'; export { NodeJS } from './NodeJS';
export { Git } from './Git'; export { Git } from './Git';
export { ABAP } from './ABAP';
export { ABAPModule } from './ABAPModule';

View file

@ -1,7 +0,0 @@
import React from 'react';
const icon = require('./apm.svg');
export function Apm() {
return <img alt="apm package manager" height="20" src={icon} width="20" />;
}

View file

@ -1,7 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 232 255" width="232" height="255">
<g>
<path id="1b" d="M 0 62 L 116 120 L 116 254 L 0 196 L 0 62 Z" stroke="#808080" stroke-width="2.5" fill="#000000" stroke-miterlimit="1"/>
<path id="1w" d="M 116 120 L 116 254 L 232 196 L 232 62 L 116 120 Z" stroke="#808080" stroke-width="2.5" fill="#FFFFFF" stroke-miterlimit="1"/>
<path id="1g" d="M 0 62 L 116 2 L 232 62 L 116 120 L 0 62 Z" stroke="#808080" stroke-width="2.5" fill="#808080" stroke-miterlimit="1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 551 B

View file

@ -1,4 +1,3 @@
export { Apm } from './Apm';
export { Npm } from './Npm'; export { Npm } from './Npm';
export { Pnpm } from './Pnpm'; export { Pnpm } from './Pnpm';
export { Yarn } from './Yarn'; export { Yarn } from './Yarn';

View file

@ -36,9 +36,8 @@ const Install: React.FC<Props> = ({ packageMeta, packageName, configOptions }) =
const hasNpm = configOptions?.pkgManagers?.includes('npm'); const hasNpm = configOptions?.pkgManagers?.includes('npm');
const hasYarn = configOptions?.pkgManagers?.includes('yarn'); const hasYarn = configOptions?.pkgManagers?.includes('yarn');
const hasPnpm = configOptions?.pkgManagers?.includes('pnpm'); const hasPnpm = configOptions?.pkgManagers?.includes('pnpm') ?? true;
const hasApm = configOptions?.pkgManagers?.includes('apm'); // apm const hasPkgManagers = hasNpm || hasPnpm || hasYarn;
const hasPkgManagers = hasNpm || hasPnpm || hasYarn || hasApm; // apm
return hasPkgManagers ? ( return hasPkgManagers ? (
<> <>
@ -51,13 +50,6 @@ const Install: React.FC<Props> = ({ packageMeta, packageName, configOptions }) =
</Wrapper> </Wrapper>
} }
> >
{hasApm && (
<InstallListItem
dependencyManager={DependencyManager.APM}
packageName={packageName}
packageVersion={packageMeta.latest.version}
/>
)}
{hasNpm && ( {hasNpm && (
<InstallListItem <InstallListItem
dependencyManager={DependencyManager.NPM} dependencyManager={DependencyManager.NPM}

View file

@ -7,7 +7,7 @@ import React from 'react';
import { useSettings } from '../../providers/PersistenceSettingProvider'; import { useSettings } from '../../providers/PersistenceSettingProvider';
import CopyToClipBoard from '../CopyClipboard'; import CopyToClipBoard from '../CopyClipboard';
import { Apm, Npm, Pnpm, Yarn } from '../Icons'; import { Npm, Pnpm, Yarn } from '../Icons';
const InstallItem = styled(ListItem)({ const InstallItem = styled(ListItem)({
padding: 0, padding: 0,
@ -28,7 +28,6 @@ const PackageMangerAvatar = styled(Avatar)({
}); });
export enum DependencyManager { export enum DependencyManager {
APM = 'apm',
NPM = 'npm', NPM = 'npm',
YARN = 'yarn', YARN = 'yarn',
PNPM = 'pnpm', PNPM = 'pnpm',
@ -60,23 +59,6 @@ const InstallListItem: React.FC<Interface> = ({
const isLatest = localSettings[packageName]?.latest ?? false; const isLatest = localSettings[packageName]?.latest ?? false;
const isGlobal = localSettings[packageName]?.global ?? false; const isGlobal = localSettings[packageName]?.global ?? false;
switch (dependencyManager) { switch (dependencyManager) {
case DependencyManager.APM:
return (
<InstallItem data-testid={'installListItem-apm'}>
<PackageMangerAvatar alt="apm" sx={{ bgcolor: theme.palette.white }}>
<Apm />
</PackageMangerAvatar>
<InstallListItemText
primary={
<CopyToClipBoard
dataTestId="installApm"
text={`apm install ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName)}`}
title={`apm install ${getGlobalInstall(isLatest, isGlobal, packageVersion, packageName)}`}
/>
}
/>
</InstallItem>
);
case DependencyManager.NPM: case DependencyManager.NPM:
return ( return (
<InstallItem data-testid={'installListItem-npm'}> <InstallItem data-testid={'installListItem-npm'}>

View file

@ -72,7 +72,7 @@ export const GridRightAligned = styled(Grid)({
export const Wrapper = styled(List)<{ theme?: Theme }>(({ theme }) => ({ export const Wrapper = styled(List)<{ theme?: Theme }>(({ theme }) => ({
'&:hover': { '&:hover': {
backgroundColor: backgroundColor:
theme?.palette.mode === 'light' ? theme?.palette.primary.main : theme?.palette.cyanBlue, theme?.palette?.type == 'dark' ? theme?.palette?.secondary.main : theme?.palette?.greyLight2,
}, },
})); }));

View file

@ -7,10 +7,6 @@ const marked = new Marked(
async: false, async: false,
highlight(code, lang) { highlight(code, lang) {
const hljs = require('highlight.js'); const hljs = require('highlight.js');
// >>> apm
const hlabap = require('highlightjs-sap-abap');
hljs.registerLanguage('abap', hlabap);
// <<< apm
const language = hljs.getLanguage(lang) ? lang : 'plaintext'; const language = hljs.getLanguage(lang) ? lang : 'plaintext';
return hljs.highlight(code, { language }).value; return hljs.highlight(code, { language }).value;
}, },

View file

@ -9,7 +9,6 @@ import Stack from '@mui/material/Stack';
import React from 'react'; import React from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useConfig } from '../../';
import { cleanDescription } from './utils'; import { cleanDescription } from './utils';
type SearchItemProps = { type SearchItemProps = {
@ -75,7 +74,6 @@ const SearchItem: React.FC<SearchItemProps> = ({
...props ...props
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { configOptions } = useConfig();
const handleDelete = () => { const handleDelete = () => {
// no action assigned by default // no action assigned by default
}; };
@ -89,7 +87,6 @@ const SearchItem: React.FC<SearchItemProps> = ({
</NameGroup> </NameGroup>
{version && <Version>{version}</Version>} {version && <Version>{version}</Version>}
</Wrapper> </Wrapper>
{configOptions?.showUplinks && (
<Wrapper> <Wrapper>
<Stack direction="row" spacing={1}> <Stack direction="row" spacing={1}>
{isPrivate && ( {isPrivate && (
@ -121,7 +118,6 @@ const SearchItem: React.FC<SearchItemProps> = ({
)} )}
</Stack> </Stack>
</Wrapper> </Wrapper>
)}
</li> </li>
); );
}; };

View file

@ -14,10 +14,7 @@ export const StyledTextField = styled(TextField)<{ theme?: Theme }>((props) => (
border: 'none', border: 'none',
}, },
':after': { ':after': {
borderColor: borderColor: props.theme?.palette.white,
props.theme?.palette.mode === 'light'
? props.theme?.palette.black
: props.theme?.palette.white,
}, },
':hover:before': { ':hover:before': {
content: 'none', content: 'none',
@ -34,15 +31,11 @@ export const StyledTextField = styled(TextField)<{ theme?: Theme }>((props) => (
}, },
'& .MuiInputBase-input': { '& .MuiInputBase-input': {
[`@media screen and (min-width: ${props.theme?.breakPoints.medium}px)`]: { [`@media screen and (min-width: ${props.theme?.breakPoints.medium}px)`]: {
color: color: props.theme?.palette.white,
props.theme?.palette.mode === 'light'
? props.theme?.palette.black
: props.theme?.palette.white,
}, },
}, },
})); }));
export const StyledInputAdornment = styled(InputAdornment)<{ theme?: Theme }>((props) => ({ export const StyledInputAdornment = styled(InputAdornment)<{ theme?: Theme }>((props) => ({
color: color: props.theme?.palette.white,
props.theme?.palette.mode === 'light' ? props.theme?.palette.black : props.theme?.palette.white,
})); }));

View file

@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next';
import { Theme } from '../../Theme'; import { Theme } from '../../Theme';
import Heading from '../Heading'; import Heading from '../Heading';
import { ABAPModule, CommonJS, TypeScript } from '../Icons'; import { CommonJS, ES6Modules, TypeScript } from '../Icons';
import { formatDate, formatDateDistance } from './utils'; import { formatDate, formatDateDistance } from './utils';
export type ModuleType = 'commonjs' | 'module'; export type ModuleType = 'commonjs' | 'module';
@ -34,7 +34,7 @@ const ModuleJS: React.FC<{ module: ModuleType | void }> = ({ module }) => {
} else if (module === 'module') { } else if (module === 'module') {
return ( return (
<Icon> <Icon>
<ABAPModule /> <ES6Modules />
</Icon> </Icon>
); );
} else { } else {

View file

@ -47,7 +47,7 @@ export const SearchWrapper = styled('div')({
export const NavBar = styled(AppBar)<{ theme?: Theme }>(({ theme }) => ({ export const NavBar = styled(AppBar)<{ theme?: Theme }>(({ theme }) => ({
backgroundColor: backgroundColor:
theme?.palette.mode === 'light' ? theme?.palette.primary.main : theme?.palette.cyanBlue, theme?.palette.mode === 'light' ? theme?.palette.primary.main : theme?.palette.cyanBlue,
color: theme?.palette.mode === 'light' ? theme?.palette.black : theme?.palette.white, color: theme?.palette.white,
minHeight: 60, minHeight: 60,
display: 'flex', display: 'flex',
justifyContent: 'center', justifyContent: 'center',

View file

@ -69,6 +69,6 @@ describe('Sidebar', () => {
}); });
// package name + keyword // package name + keyword
await waitFor(() => expect(screen.getAllByText('got')).toHaveLength(2)); await waitFor(() => expect(screen.getAllByText('got')).toHaveLength(2));
expect(screen.getByAltText('ABAP module')).toBeInTheDocument(); expect(screen.getByAltText('es6 modules')).toBeInTheDocument();
}); });
}); });

View file

@ -1,5 +1,4 @@
import { StyledEngineProvider } from '@mui/material/styles'; import { StyledEngineProvider } from '@mui/material/styles';
import { configure } from '@testing-library/dom';
import { render } from '@testing-library/react'; import { render } from '@testing-library/react';
import React from 'react'; import React from 'react';
import { I18nextProvider } from 'react-i18next'; import { I18nextProvider } from 'react-i18next';
@ -11,8 +10,6 @@ import PersistenceSettingProvider from '../providers/PersistenceSettingProvider'
import { Store } from '../store/store'; import { Store } from '../store/store';
import i18nConfig from './i18n-config'; import i18nConfig from './i18n-config';
configure({ asyncUtilTimeout: 10000 });
const renderWithStore = (ui: React.ReactElement<any>, store: Store) => const renderWithStore = (ui: React.ReactElement<any>, store: Store) =>
render(ui, { render(ui, {
wrapper: ({ children }) => ( wrapper: ({ children }) => (

View file

@ -1247,9 +1247,6 @@ importers:
highlight.js: highlight.js:
specifier: 11.10.0 specifier: 11.10.0
version: 11.10.0 version: 11.10.0
highlightjs-sap-abap:
specifier: 0.3.0
version: 0.3.0
history: history:
specifier: 4.10.1 specifier: 4.10.1
version: 4.10.1 version: 4.10.1
@ -1921,9 +1918,6 @@ importers:
highlight.js: highlight.js:
specifier: 11.10.0 specifier: 11.10.0
version: 11.10.0 version: 11.10.0
highlightjs-sap-abap:
specifier: 0.3.0
version: 0.3.0
history: history:
specifier: 4.10.1 specifier: 4.10.1
version: 4.10.1 version: 4.10.1
@ -19274,9 +19268,6 @@ packages:
resolution: {integrity: sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==} resolution: {integrity: sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==}
engines: {node: '>=12.0.0'} engines: {node: '>=12.0.0'}
/highlightjs-sap-abap@0.3.0:
resolution: {integrity: sha512-nSiUvEOCycjtFA3pHaTowrbAAk5+lciBHyoVkDsd6FTRBtW9sT2dt42o2jAKbXjZVUidtacdk+j0Y2xnd233Mw==, tarball: https://registry.npmjs.org/highlightjs-sap-abap/-/highlightjs-sap-abap-0.3.0.tgz}
/history@4.10.1: /history@4.10.1:
resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==}
dependencies: dependencies: