mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2026-08-06 19:11:53 +00:00
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@@ -11,6 +11,6 @@ jobs:
|
|||||||
ci:
|
ci:
|
||||||
uses: shlinkio/github-actions/.github/workflows/web-app-ci.yml@main
|
uses: shlinkio/github-actions/.github/workflows/web-app-ci.yml@main
|
||||||
with:
|
with:
|
||||||
node-version: 22.x
|
node-version: 24.x
|
||||||
publish-coverage: true
|
publish-coverage: true
|
||||||
install-playwright: true
|
install-playwright: true
|
||||||
|
|||||||
6
.github/workflows/deploy-preview.yml
vendored
6
.github/workflows/deploy-preview.yml
vendored
@@ -9,14 +9,14 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
||||||
ref: ${{ github.event.pull_request.head.ref }}
|
ref: ${{ github.event.pull_request.head.ref }}
|
||||||
- name: Use node.js
|
- name: Use node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 22.10
|
node-version: 24.14
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
npm ci && \
|
npm ci && \
|
||||||
|
|||||||
6
.github/workflows/publish-release.yml
vendored
6
.github/workflows/publish-release.yml
vendored
@@ -10,11 +10,11 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v6
|
||||||
- name: Use node.js
|
- name: Use node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 22.10
|
node-version: 24.14
|
||||||
- name: Generate release assets
|
- name: Generate release assets
|
||||||
run: npm ci && VERSION=${GITHUB_REF#refs/tags/v} npm run build:dist
|
run: npm ci && VERSION=${GITHUB_REF#refs/tags/v} npm run build:dist
|
||||||
- name: Publish release with assets
|
- name: Publish release with assets
|
||||||
|
|||||||
17
CHANGELOG.md
17
CHANGELOG.md
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org).
|
||||||
|
|
||||||
|
## [4.7.1] - 2026-05-15
|
||||||
|
### Added
|
||||||
|
* *Nothing*
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
* Update dependencies
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
* *Nothing*
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
* *Nothing*
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
* [#1876](https://github.com/shlinkio/shlink-web-client/issues/1876) Upgrade docker image to nginx 1.30.1 to address [CVE-2026-42945](https://www.cve.org/CVERecord?id=CVE-2026-42945).
|
||||||
|
|
||||||
|
|
||||||
## [4.7.0] - 2026-02-04
|
## [4.7.0] - 2026-02-04
|
||||||
### Added
|
### Added
|
||||||
* [shlink-web-component] Add support for Shlink 5.0.0, by supporting date-based redirect conditions.
|
* [shlink-web-component] Add support for Shlink 5.0.0, by supporting date-based redirect conditions.
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
FROM node:25.5-alpine AS node
|
FROM node:26.1-alpine AS node
|
||||||
COPY . /shlink-web-client
|
COPY . /shlink-web-client
|
||||||
ARG VERSION="latest"
|
ARG VERSION="latest"
|
||||||
ENV VERSION=${VERSION}
|
ENV VERSION=${VERSION}
|
||||||
RUN cd /shlink-web-client && npm ci && node --run build
|
RUN cd /shlink-web-client && npm ci && node --run build
|
||||||
|
|
||||||
FROM nginxinc/nginx-unprivileged:1.29-alpine
|
FROM nginxinc/nginx-unprivileged:1.30.1-alpine
|
||||||
ARG UID=101
|
ARG UID=101
|
||||||
LABEL maintainer="Alejandro Celaya <alejandro@alejandrocelaya.com>"
|
LABEL maintainer="Alejandro Celaya <alejandro@alejandrocelaya.com>"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
FROM mcr.microsoft.com/playwright:v1.58.1-noble
|
FROM mcr.microsoft.com/playwright:v1.59.1-noble
|
||||||
|
|
||||||
ENV NODE_VERSION 22.14
|
ENV NODE_VERSION 24.14
|
||||||
ENV TINI_VERSION v0.19.0
|
ENV TINI_VERSION v0.19.0
|
||||||
|
|
||||||
# Install Node.js
|
# Install Node.js
|
||||||
|
|||||||
6319
package-lock.json
generated
6319
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
40
package.json
40
package.json
@@ -20,29 +20,29 @@
|
|||||||
"test:verbose": "node --run test -- --verbose"
|
"test:verbose": "node --run test -- --verbose"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-free": "^7.1.0",
|
"@fortawesome/fontawesome-free": "^7.2.0",
|
||||||
"@fortawesome/fontawesome-svg-core": "^7.1.0",
|
"@fortawesome/fontawesome-svg-core": "^7.2.0",
|
||||||
"@fortawesome/free-brands-svg-icons": "^7.1.0",
|
"@fortawesome/free-brands-svg-icons": "^7.2.0",
|
||||||
"@fortawesome/free-regular-svg-icons": "^7.1.0",
|
"@fortawesome/free-regular-svg-icons": "^7.2.0",
|
||||||
"@fortawesome/free-solid-svg-icons": "^7.1.0",
|
"@fortawesome/free-solid-svg-icons": "^7.2.0",
|
||||||
"@fortawesome/react-fontawesome": "^3.1.1",
|
"@fortawesome/react-fontawesome": "^3.3.1",
|
||||||
"@json2csv/plainjs": "^7.0.6",
|
"@json2csv/plainjs": "^7.0.6",
|
||||||
"@reduxjs/toolkit": "^2.11.2",
|
"@reduxjs/toolkit": "^2.11.2",
|
||||||
"@shlinkio/data-manipulation": "^1.0.4",
|
"@shlinkio/data-manipulation": "^1.0.4",
|
||||||
"@shlinkio/shlink-frontend-kit": "^1.4.0",
|
"@shlinkio/shlink-frontend-kit": "^1.4.0",
|
||||||
"@shlinkio/shlink-js-sdk": "^3.1.0",
|
"@shlinkio/shlink-js-sdk": "^3.1.0",
|
||||||
"@shlinkio/shlink-web-component": "^0.18.0",
|
"@shlinkio/shlink-web-component": "^0.18.0",
|
||||||
"@vitest/browser-playwright": "^4.0.18",
|
"@vitest/browser-playwright": "^4.1.5",
|
||||||
"bottlejs": "^2.0.1",
|
"bottlejs": "^2.0.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"compare-versions": "^6.1.1",
|
"compare-versions": "^6.1.1",
|
||||||
"csvtojson": "^2.0.14",
|
"csvtojson": "^2.0.14",
|
||||||
"date-fns": "^4.1.0",
|
"date-fns": "^4.1.0",
|
||||||
"react": "^19.2.4",
|
"react": "^19.2.6",
|
||||||
"react-dom": "^19.2.4",
|
"react-dom": "^19.2.6",
|
||||||
"react-external-link": "^2.6.1",
|
"react-external-link": "^2.6.1",
|
||||||
"react-redux": "^9.2.0",
|
"react-redux": "^9.2.0",
|
||||||
"react-router": "^7.13.0",
|
"react-router": "^7.15.0",
|
||||||
"redux-localstorage-simple": "^2.5.1",
|
"redux-localstorage-simple": "^2.5.1",
|
||||||
"workbox-core": "^7.4.0",
|
"workbox-core": "^7.4.0",
|
||||||
"workbox-expiration": "^7.4.0",
|
"workbox-expiration": "^7.4.0",
|
||||||
@@ -53,19 +53,19 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@shlinkio/eslint-config-js-coding-standard": "~3.7.0",
|
"@shlinkio/eslint-config-js-coding-standard": "~3.7.0",
|
||||||
"@stylistic/eslint-plugin": "^5.7.1",
|
"@stylistic/eslint-plugin": "^5.7.1",
|
||||||
"@tailwindcss/vite": "^4.1.18",
|
"@tailwindcss/vite": "^4.3.0",
|
||||||
"@testing-library/jest-dom": "^6.9.1",
|
"@testing-library/jest-dom": "^6.9.1",
|
||||||
"@testing-library/react": "^16.3.2",
|
"@testing-library/react": "^16.3.2",
|
||||||
"@testing-library/user-event": "^14.6.1",
|
"@testing-library/user-event": "^14.6.1",
|
||||||
"@total-typescript/shoehorn": "^0.1.2",
|
"@total-typescript/shoehorn": "^0.1.2",
|
||||||
"@types/node": "^25.1.0",
|
"@types/node": "^25.6.2",
|
||||||
"@types/react": "^19.2.10",
|
"@types/react": "^19.2.14",
|
||||||
"@types/react-dom": "^19.2.3",
|
"@types/react-dom": "^19.2.3",
|
||||||
"@vitejs/plugin-react": "^5.1.2",
|
"@vitejs/plugin-react": "^6.0.1",
|
||||||
"@vitest/browser": "^4.0.3",
|
"@vitest/browser": "^4.0.3",
|
||||||
"@vitest/coverage-v8": "^4.0.18",
|
"@vitest/coverage-v8": "^4.1.2",
|
||||||
"adm-zip": "^0.5.16",
|
"adm-zip": "^0.5.17",
|
||||||
"axe-core": "^4.11.1",
|
"axe-core": "^4.11.4",
|
||||||
"chalk": "^5.6.2",
|
"chalk": "^5.6.2",
|
||||||
"eslint": "^9.39.2",
|
"eslint": "^9.39.2",
|
||||||
"eslint-plugin-import": "^2.32.0",
|
"eslint-plugin-import": "^2.32.0",
|
||||||
@@ -75,12 +75,12 @@
|
|||||||
"eslint-plugin-react-hooks": "^7.0.1",
|
"eslint-plugin-react-hooks": "^7.0.1",
|
||||||
"eslint-plugin-simple-import-sort": "^12.1.1",
|
"eslint-plugin-simple-import-sort": "^12.1.1",
|
||||||
"history": "^5.3.0",
|
"history": "^5.3.0",
|
||||||
"playwright": "^1.58.1",
|
"playwright": "^1.59.1",
|
||||||
"tailwindcss": "^4.1.3",
|
"tailwindcss": "^4.1.3",
|
||||||
"typescript": "^5.9.3",
|
"typescript": "^5.9.3",
|
||||||
"typescript-eslint": "^8.54.0",
|
"typescript-eslint": "^8.54.0",
|
||||||
"vite": "^7.3.1",
|
"vite": "^8.0.11",
|
||||||
"vite-plugin-pwa": "^1.2.0",
|
"vite-plugin-pwa": "^1.3.0",
|
||||||
"vitest": "^4.0.3"
|
"vitest": "^4.0.3"
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ describe('<MainHeader />', () => {
|
|||||||
history.push(pathname);
|
history.push(pathname);
|
||||||
|
|
||||||
return renderWithStore(
|
return renderWithStore(
|
||||||
<Router location={history.location} navigator={history} unstable_useTransitions={false}>
|
<Router location={history.location} navigator={history}>
|
||||||
<MainHeader />
|
<MainHeader />
|
||||||
</Router>,
|
</Router>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ describe('<CreateServer />', () => {
|
|||||||
return {
|
return {
|
||||||
history,
|
history,
|
||||||
...renderWithStore(
|
...renderWithStore(
|
||||||
<Router location={history.location} navigator={history} unstable_useTransitions={false}>
|
<Router location={history.location} navigator={history}>
|
||||||
<CreateServer useTimeoutToggle={useTimeoutToggle} />
|
<CreateServer useTimeoutToggle={useTimeoutToggle} />
|
||||||
</Router>,
|
</Router>,
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ describe('<DeleteServerButton />', () => {
|
|||||||
const setUp = (children: ReactNode = 'Remove this server') => {
|
const setUp = (children: ReactNode = 'Remove this server') => {
|
||||||
const history = createMemoryHistory({ initialEntries: ['/foo'] });
|
const history = createMemoryHistory({ initialEntries: ['/foo'] });
|
||||||
const result = renderWithStore(
|
const result = renderWithStore(
|
||||||
<Router location={history.location} navigator={history} unstable_useTransitions={false}>
|
<Router location={history.location} navigator={history}>
|
||||||
<DeleteServerButton server={fromPartial({})}>{children}</DeleteServerButton>
|
<DeleteServerButton server={fromPartial({})}>{children}</DeleteServerButton>
|
||||||
</Router>,
|
</Router>,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ describe('<EditServer />', () => {
|
|||||||
return {
|
return {
|
||||||
history,
|
history,
|
||||||
...renderWithStore(
|
...renderWithStore(
|
||||||
<Router location={history.location} navigator={history} unstable_useTransitions={false}>
|
<Router location={history.location} navigator={history}>
|
||||||
<EditServer />
|
<EditServer />
|
||||||
</Router>,
|
</Router>,
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user