Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
12050cdda9 | |||
01e77a97f3 | |||
10824b5d9b |
@ -2,9 +2,17 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
||||||
|
|
||||||
|
#### [1.10.3](https://git.odit.services/lfk/frontend/compare/1.10.2...1.10.3)
|
||||||
|
|
||||||
|
- feat(pdf): Send selfservicelink for generation [`01e77a9`](https://git.odit.services/lfk/frontend/commit/01e77a97f3f28700e0249d35afd9641b56d9c55d)
|
||||||
|
- chore(deps): Bump @odit/lfk-client-js [`10824b5`](https://git.odit.services/lfk/frontend/commit/10824b5d9b207e14a37fa23e90d54337d76e60a9)
|
||||||
|
|
||||||
#### [1.10.2](https://git.odit.services/lfk/frontend/compare/1.10.1...1.10.2)
|
#### [1.10.2](https://git.odit.services/lfk/frontend/compare/1.10.1...1.10.2)
|
||||||
|
|
||||||
|
> 11 April 2025
|
||||||
|
|
||||||
- refactor(runners): filter table for created_via [`785b9e0`](https://git.odit.services/lfk/frontend/commit/785b9e0b60a9961f99d0c519d6bb12dc735ac605)
|
- refactor(runners): filter table for created_via [`785b9e0`](https://git.odit.services/lfk/frontend/commit/785b9e0b60a9961f99d0c519d6bb12dc735ac605)
|
||||||
|
- chore(release): 1.10.2 [`d9870e0`](https://git.odit.services/lfk/frontend/commit/d9870e03bc3175ee9b299174a19f257d6046a718)
|
||||||
|
|
||||||
#### [1.10.1](https://git.odit.services/lfk/frontend/compare/1.10.0...1.10.1)
|
#### [1.10.1](https://git.odit.services/lfk/frontend/compare/1.10.0...1.10.1)
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
<span style="display: none; visibility: hidden" id="buildinfo"
|
<span style="display: none; visibility: hidden" id="buildinfo"
|
||||||
>RELEASE_INFO-1.10.2-RELEASE_INFO</span
|
>RELEASE_INFO-1.10.3-RELEASE_INFO</span
|
||||||
>
|
>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
<script src="/env.js"></script>
|
<script src="/env.js"></script>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@odit/lfk-frontend",
|
"name": "@odit/lfk-frontend",
|
||||||
"version": "1.10.2",
|
"version": "1.10.3",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"i18n-order": "node order.js",
|
"i18n-order": "node order.js",
|
||||||
@ -43,7 +43,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fontsource/athiti": "^5.2.5",
|
"@fontsource/athiti": "^5.2.5",
|
||||||
"@odit/lfk-client-js": "1.2.3",
|
"@odit/lfk-client-js": "1.2.4",
|
||||||
"@paralleldrive/cuid2": "2.2.2",
|
"@paralleldrive/cuid2": "2.2.2",
|
||||||
"@tanstack/svelte-table": "8.9.1",
|
"@tanstack/svelte-table": "8.9.1",
|
||||||
"bwip-js": "3.4.0",
|
"bwip-js": "3.4.0",
|
||||||
|
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
@ -12,8 +12,8 @@ importers:
|
|||||||
specifier: ^5.2.5
|
specifier: ^5.2.5
|
||||||
version: 5.2.5
|
version: 5.2.5
|
||||||
'@odit/lfk-client-js':
|
'@odit/lfk-client-js':
|
||||||
specifier: 1.2.3
|
specifier: 1.2.4
|
||||||
version: 1.2.3
|
version: 1.2.4
|
||||||
'@paralleldrive/cuid2':
|
'@paralleldrive/cuid2':
|
||||||
specifier: 2.2.2
|
specifier: 2.2.2
|
||||||
version: 2.2.2
|
version: 2.2.2
|
||||||
@ -355,8 +355,8 @@ packages:
|
|||||||
'@octokit/types@13.6.1':
|
'@octokit/types@13.6.1':
|
||||||
resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==}
|
resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==}
|
||||||
|
|
||||||
'@odit/lfk-client-js@1.2.3':
|
'@odit/lfk-client-js@1.2.4':
|
||||||
resolution: {integrity: sha512-QXJUVfH57iwykKNHQQC4z18/f7rnpCNCjvxijrOmuBMLsBNuYSzvrrqXyno4ce1rr5f0PD4IYtKmhcgJsk49wQ==}
|
resolution: {integrity: sha512-eJRsjtpMm/VsQ1v2I+inMWCZmzL+WoOvsA+hj8IGsyCVn0td+z/HAwQ0SuXXNZpLPL3qSlENHXjFNrgztExEgA==}
|
||||||
|
|
||||||
'@odit/license-exporter@0.2.0':
|
'@odit/license-exporter@0.2.0':
|
||||||
resolution: {integrity: sha512-RRyfQzDLoyLQlGSd8ThJQ3h0fiCe4tkmm935AUvSVQWP+p88FcnI4iaktKBJJVBnIpDhkv/7sDSA5dFc/QMM5w==}
|
resolution: {integrity: sha512-RRyfQzDLoyLQlGSd8ThJQ3h0fiCe4tkmm935AUvSVQWP+p88FcnI4iaktKBJJVBnIpDhkv/7sDSA5dFc/QMM5w==}
|
||||||
@ -2176,7 +2176,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@octokit/openapi-types': 22.2.0
|
'@octokit/openapi-types': 22.2.0
|
||||||
|
|
||||||
'@odit/lfk-client-js@1.2.3': {}
|
'@odit/lfk-client-js@1.2.4': {}
|
||||||
|
|
||||||
'@odit/license-exporter@0.2.0':
|
'@odit/license-exporter@0.2.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -100,6 +100,7 @@ class DocumentServer {
|
|||||||
first_name: runners[i].firstname,
|
first_name: runners[i].firstname,
|
||||||
middle_name: runners[i].middlename,
|
middle_name: runners[i].middlename,
|
||||||
last_name: runners[i].lastname,
|
last_name: runners[i].lastname,
|
||||||
|
self_service_link: runners[i].selfserviceLink,
|
||||||
group: {
|
group: {
|
||||||
id: runners[i].group.id,
|
id: runners[i].group.id,
|
||||||
name: runners[i].group.name,
|
name: runners[i].group.name,
|
||||||
|
@ -1,175 +1,180 @@
|
|||||||
<script>
|
<script>
|
||||||
import { _ } from "svelte-i18n";
|
import { _ } from "svelte-i18n";
|
||||||
import {
|
import {
|
||||||
DonationService,
|
DonationService,
|
||||||
RunnerTeamService,
|
RunnerTeamService,
|
||||||
RunnerOrganizationService,
|
RunnerOrganizationService,
|
||||||
} from "@odit/lfk-client-js";
|
RunnerService
|
||||||
import { init } from "@paralleldrive/cuid2";
|
} from "@odit/lfk-client-js";
|
||||||
import toast from "svelte-french-toast";
|
import { init } from "@paralleldrive/cuid2";
|
||||||
import DocumentServer from "./DocumentServer";
|
import toast from "svelte-french-toast";
|
||||||
const createId = init({ length: 10, fingerprint: "lfk-frontend" });
|
import DocumentServer from "./DocumentServer";
|
||||||
const documentServer = new DocumentServer(
|
const createId = init({ length: 10, fingerprint: "lfk-frontend" });
|
||||||
config.baseurl_documentserver,
|
const documentServer = new DocumentServer(
|
||||||
config.documentserver_key
|
config.baseurl_documentserver,
|
||||||
);
|
config.documentserver_key
|
||||||
|
);
|
||||||
|
|
||||||
export let certificates_show = false;
|
export let certificates_show = false;
|
||||||
export let generate_runners = [];
|
export let generate_runners = [];
|
||||||
export let generate_orgs = [];
|
export let generate_orgs = [];
|
||||||
export let generate_teams = [];
|
export let generate_teams = [];
|
||||||
|
|
||||||
function generateCertificates(locale) {
|
function generateCertificates(locale) {
|
||||||
if (generate_orgs.length > 0) {
|
if (generate_orgs.length > 0) {
|
||||||
generateOrgCertificates(locale);
|
generateOrgCertificates(locale);
|
||||||
} else if (generate_teams.length > 0) {
|
} else if (generate_teams.length > 0) {
|
||||||
generateTeamCertificates(locale);
|
generateTeamCertificates(locale);
|
||||||
} else {
|
} else {
|
||||||
generateRunnerCertificates(locale);
|
generateRunnerCertificates(locale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function download(blob, fileName) {
|
function download(blob, fileName) {
|
||||||
const url = window.URL.createObjectURL(blob);
|
const url = window.URL.createObjectURL(blob);
|
||||||
let a = document.createElement("a");
|
let a = document.createElement("a");
|
||||||
a.href = url;
|
a.href = url;
|
||||||
a.download = fileName;
|
a.download = fileName;
|
||||||
document.body.appendChild(a);
|
document.body.appendChild(a);
|
||||||
a.click();
|
a.click();
|
||||||
a.remove();
|
a.remove();
|
||||||
toast.dismiss();
|
toast.dismiss();
|
||||||
toast.success($_("pdf-successfully-generated"));
|
toast.success($_("pdf-successfully-generated"));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function generateRunnerCertificates(locale) {
|
async function generateRunnerCertificates(locale) {
|
||||||
toast.loading($_("generating-pdf"));
|
toast.loading($_("generating-pdf"));
|
||||||
const current_donations =
|
const current_donations =
|
||||||
(await DonationService.donationControllerGetAll()) || [];
|
(await DonationService.donationControllerGetAll()) || [];
|
||||||
let certificateRunners = [];
|
let certificateRunners = [];
|
||||||
for (let runner of generate_runners) {
|
for (let runner of generate_runners) {
|
||||||
runner.distanceDonations =
|
const linkRunner = await RunnerService.runnerControllerGetOne(runner.id)
|
||||||
current_donations.filter((d) => d.runner?.id == runner.id) || [];
|
linkRunner.distanceDonations =
|
||||||
certificateRunners.push(runner);
|
current_donations.filter((d) => d.runner?.id == runner.id) || [];
|
||||||
}
|
certificateRunners.push(linkRunner);
|
||||||
documentServer
|
}
|
||||||
.generateCertificates(certificateRunners, locale)
|
documentServer
|
||||||
.then((blob) => {
|
.generateCertificates(certificateRunners, locale)
|
||||||
let fileName = `${$_("certificates")}-${locale}.pdf`;
|
.then((blob) => {
|
||||||
if (generate_runners.length == 1) {
|
let fileName = `${$_("certificates")}-${locale}.pdf`;
|
||||||
fileName = `${$_("certificates")}_${
|
if (generate_runners.length == 1) {
|
||||||
generate_runners[0].firstname
|
fileName = `${$_("certificates")}_${
|
||||||
}_${generate_runners[0].lastname}-${locale}-${createId()}.pdf`;
|
generate_runners[0].firstname
|
||||||
}
|
}_${generate_runners[0].lastname}-${locale}-${createId()}.pdf`;
|
||||||
download(blob, fileName);
|
}
|
||||||
})
|
download(blob, fileName);
|
||||||
.catch((err) => {});
|
})
|
||||||
}
|
.catch((err) => {});
|
||||||
|
}
|
||||||
|
|
||||||
async function generateTeamCertificates(locale) {
|
async function generateTeamCertificates(locale) {
|
||||||
toast.loading($_("generating-pdfs"));
|
toast.loading($_("generating-pdfs"));
|
||||||
let count = 0;
|
let count = 0;
|
||||||
const current_donations =
|
const current_donations =
|
||||||
(await DonationService.donationControllerGetAll()) || [];
|
(await DonationService.donationControllerGetAll()) || [];
|
||||||
for (const t of generate_teams) {
|
for (const t of generate_teams) {
|
||||||
const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
||||||
t.id
|
t.id,
|
||||||
);
|
true
|
||||||
let certificateRunners = [];
|
);
|
||||||
for (let runner of runners) {
|
let certificateRunners = [];
|
||||||
runner.distanceDonations =
|
for (let runner of runners) {
|
||||||
current_donations.filter((d) => d.runner?.id == runner.id) || [];
|
runner.distanceDonations =
|
||||||
certificateRunners.push(runner);
|
current_donations.filter((d) => d.runner?.id == runner.id) || [];
|
||||||
}
|
certificateRunners.push(runner);
|
||||||
documentServer
|
}
|
||||||
.generateCertificates(certificateRunners, locale)
|
documentServer
|
||||||
.then((blob) => {
|
.generateCertificates(certificateRunners, locale)
|
||||||
count++;
|
.then((blob) => {
|
||||||
download(
|
count++;
|
||||||
blob,
|
download(
|
||||||
`${$_("certificates")}_${t.name}-${locale}-${createId()}.pdf`
|
blob,
|
||||||
);
|
`${$_("certificates")}_${t.name}-${locale}-${createId()}.pdf`
|
||||||
})
|
);
|
||||||
.catch((err) => {});
|
})
|
||||||
}
|
.catch((err) => {});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function generateOrgCertificates(locale) {
|
async function generateOrgCertificates(locale) {
|
||||||
toast.loading($_("generating-pdfs"));
|
toast.loading($_("generating-pdfs"));
|
||||||
const current_donations =
|
const current_donations =
|
||||||
(await DonationService.donationControllerGetAll()) || [];
|
(await DonationService.donationControllerGetAll()) || [];
|
||||||
let count = 0;
|
let count = 0;
|
||||||
let count_orgs = 0;
|
let count_orgs = 0;
|
||||||
for (const o of generate_orgs) {
|
for (const o of generate_orgs) {
|
||||||
count_orgs++;
|
count_orgs++;
|
||||||
let count = 0;
|
let count = 0;
|
||||||
let runners =
|
let runners =
|
||||||
await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
|
await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
|
||||||
o.id,
|
o.id,
|
||||||
true
|
true,
|
||||||
);
|
true
|
||||||
let certificateRunners = [];
|
);
|
||||||
for (let runner of runners) {
|
let certificateRunners = [];
|
||||||
runner.distanceDonations =
|
for (let runner of runners) {
|
||||||
current_donations.filter((d) => d.runner?.id == runner.id) || [];
|
runner.distanceDonations =
|
||||||
certificateRunners.push(runner);
|
current_donations.filter((d) => d.runner?.id == runner.id) || [];
|
||||||
}
|
certificateRunners.push(runner);
|
||||||
await documentServer
|
}
|
||||||
.generateCertificates(certificateRunners, locale)
|
await documentServer
|
||||||
.then((blob) => {
|
.generateCertificates(certificateRunners, locale)
|
||||||
download(
|
.then((blob) => {
|
||||||
blob,
|
download(
|
||||||
`${$_("certificates")}_${o.name}-${locale}-${createId()}.pdf`
|
blob,
|
||||||
);
|
`${$_("certificates")}_${o.name}-${locale}-${createId()}.pdf`
|
||||||
})
|
);
|
||||||
.catch((err) => {});
|
})
|
||||||
for (const t of o.teams) {
|
.catch((err) => {});
|
||||||
count++;
|
for (const t of o.teams) {
|
||||||
let runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
count++;
|
||||||
t.id
|
let runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
||||||
);
|
t.id,
|
||||||
let certificateRunners = [];
|
true
|
||||||
for (let runner of runners) {
|
);
|
||||||
runner.distanceDonations =
|
let certificateRunners = [];
|
||||||
current_donations.filter((d) => d.runner?.id == runner.id) || [];
|
for (let runner of runners) {
|
||||||
certificateRunners.push(runner);
|
runner.distanceDonations =
|
||||||
}
|
current_donations.filter((d) => d.runner?.id == runner.id) || [];
|
||||||
await documentServer
|
certificateRunners.push(runner);
|
||||||
.generateCertificates(certificateRunners, locale)
|
}
|
||||||
.then((blob) => {
|
await documentServer
|
||||||
download(
|
.generateCertificates(certificateRunners, locale)
|
||||||
blob,
|
.then((blob) => {
|
||||||
`${$_("certificates")}_${o.name}_${
|
download(
|
||||||
t.name
|
blob,
|
||||||
}-${locale}-${createId()}.pdf`
|
`${$_("certificates")}_${o.name}_${
|
||||||
);
|
t.name
|
||||||
if (
|
}-${locale}-${createId()}.pdf`
|
||||||
count === o.teams.length &&
|
);
|
||||||
count_orgs === generate_orgs.length
|
if (
|
||||||
) {
|
count === o.teams.length &&
|
||||||
toast.dismiss();
|
count_orgs === generate_orgs.length
|
||||||
toast.success($_("pdfs-successfully-generated"));
|
) {
|
||||||
}
|
toast.dismiss();
|
||||||
})
|
toast.success($_("pdfs-successfully-generated"));
|
||||||
.catch((err) => {});
|
}
|
||||||
}
|
})
|
||||||
}
|
.catch((err) => {});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if certificates_show}
|
{#if certificates_show}
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
generateCertificates("de");
|
generateCertificates("de");
|
||||||
}}
|
}}
|
||||||
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:w-auto sm:text-sm mb-1 lg:mb-0"
|
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:w-auto sm:text-sm mb-1 lg:mb-0"
|
||||||
>
|
>
|
||||||
{$_("generate-runner-certificates")}: DE
|
{$_("generate-runner-certificates")}: DE
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
generateCertificates("en");
|
generateCertificates("en");
|
||||||
}}
|
}}
|
||||||
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:w-auto sm:text-sm mb-1 lg:mb-0"
|
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:w-auto sm:text-sm mb-1 lg:mb-0"
|
||||||
>
|
>
|
||||||
{$_("generate-runner-certificates")}: EN
|
{$_("generate-runner-certificates")}: EN
|
||||||
</button>
|
</button>
|
||||||
{/if}
|
{/if}
|
||||||
|
18
yarn.lock
18
yarn.lock
@ -491,10 +491,10 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@odit/lfk-client-js@npm:1.1.3":
|
"@odit/lfk-client-js@npm:1.2.4":
|
||||||
version: 1.1.3
|
version: 1.2.4
|
||||||
resolution: "@odit/lfk-client-js@npm:1.1.3"
|
resolution: "@odit/lfk-client-js@npm:1.2.4"
|
||||||
checksum: 10c0/c5108400dc40b6eb5d4c467238c178779454bf46301559034fbfd2d7666e863af5d5df8208b501ec6dad1b97994e2005d879f2d5b5f3e0439f01f34ecd97f895
|
checksum: 10c0/503b3eec7fe66f8d42b137660fd5a7cda2f067c6c79fbe3c15613fb7a06284adb3e186a645f8e48c6de015fb2c8c0a42074551201fd0244215e8ba444dfe17e2
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@ -503,7 +503,7 @@ __metadata:
|
|||||||
resolution: "@odit/lfk-frontend@workspace:."
|
resolution: "@odit/lfk-frontend@workspace:."
|
||||||
dependencies:
|
dependencies:
|
||||||
"@fontsource/athiti": "npm:^5.2.5"
|
"@fontsource/athiti": "npm:^5.2.5"
|
||||||
"@odit/lfk-client-js": "npm:1.1.3"
|
"@odit/lfk-client-js": "npm:1.2.4"
|
||||||
"@odit/license-exporter": "npm:0.2.0"
|
"@odit/license-exporter": "npm:0.2.0"
|
||||||
"@paralleldrive/cuid2": "npm:2.2.2"
|
"@paralleldrive/cuid2": "npm:2.2.2"
|
||||||
"@sveltejs/vite-plugin-svelte": "npm:2.1.1"
|
"@sveltejs/vite-plugin-svelte": "npm:2.1.1"
|
||||||
@ -513,6 +513,7 @@ __metadata:
|
|||||||
bwip-js: "npm:3.4.0"
|
bwip-js: "npm:3.4.0"
|
||||||
check-password-strength: "npm:2.0.10"
|
check-password-strength: "npm:2.0.10"
|
||||||
csvtojson: "npm:2.0.10"
|
csvtojson: "npm:2.0.10"
|
||||||
|
html5-qrcode: "npm:^2.3.8"
|
||||||
localforage: "npm:1.10.0"
|
localforage: "npm:1.10.0"
|
||||||
marked: "npm:4.3.0"
|
marked: "npm:4.3.0"
|
||||||
postcss: "npm:8.5.3"
|
postcss: "npm:8.5.3"
|
||||||
@ -2032,6 +2033,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"html5-qrcode@npm:^2.3.8":
|
||||||
|
version: 2.3.8
|
||||||
|
resolution: "html5-qrcode@npm:2.3.8"
|
||||||
|
checksum: 10c0/3d7d0b3687e41a6fc0a06345f67e89ad3c7c00a3d0d8846d6fd31985e1ed2ac1c310e625f0b650dbc689f6b83469e3378417e7431ae5a9194178f1172bf6a93a
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"http-cache-semantics@npm:^4.1.1":
|
"http-cache-semantics@npm:^4.1.1":
|
||||||
version: 4.1.1
|
version: 4.1.1
|
||||||
resolution: "http-cache-semantics@npm:4.1.1"
|
resolution: "http-cache-semantics@npm:4.1.1"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user