feat: Ajouter champ cachets pour metteurs en scène

- Ajout d'un champ 'Nombre de représentations' pour les metteurs en scène dans les formulaires de contrat (création et édition)
- Les metteurs en scène peuvent maintenant avoir à la fois des heures de travail ET des cachets de représentation
- Mise à jour de la logique de sauvegarde pour préserver les représentations des metteurs en scène même en mode heures
- Les données sont correctement envoyées à PDFMonkey via le champ cachets.representations
- Interface utilisateur ajoutée dans NouveauCDDUForm et ContractEditor
This commit is contained in:
odentas 2025-11-05 11:02:32 +01:00
parent 5b6d9bf9c7
commit b97a079822
3 changed files with 89 additions and 26 deletions

View file

@ -353,6 +353,7 @@ export function NouveauCDDUForm({
const [joursTravail, setJoursTravail] = useState("");
const [nbRep, setNbRep] = useState<number | "">("");
const [nbServ, setNbServ] = useState<number | "">("");
const [nbRepMetteur, setNbRepMetteur] = useState<number | "">(""); // Cachets pour metteur en scène
const [durationServices, setDurationServices] = useState<"3" | "4">("4"); // Durée des services (3 ou 4 heures)
const [datesRep, setDatesRep] = useState("");
const [datesRepDisplay, setDatesRepDisplay] = useState("");
@ -1528,14 +1529,14 @@ useEffect(() => {
profession_code: !isRegimeRG ? (professionPick?.code || undefined) : undefined,
date_debut: dateDebut,
date_fin: (isRegimeRG && typeContratRG === "CDI") ? undefined : (dateFin || undefined),
nb_representations: !isRegimeRG ? nbRep : undefined,
nb_representations: !isRegimeRG ? (useHeuresMode && professionPick?.code === "MET040" ? nbRepMetteur : nbRep) : undefined,
nb_services_repetition: !isRegimeRG ? nbServ : undefined,
dates_representations: !isRegimeRG ? (datesRep || undefined) : undefined,
dates_repetitions: !isRegimeRG ? (datesServ || undefined) : undefined,
heures_travail: !isRegimeRG && useHeuresMode ? heuresTotal : (!isRegimeRG && typeof nbServ === "number" && nbServ > 0 ? nbServ * parseInt(durationServices) : undefined),
minutes_travail: !isRegimeRG && useHeuresMode ? minutesTotal : undefined,
jours_travail: !isRegimeRG && useHeuresMode ? (joursTravail || undefined) : undefined,
jours_travail_non_artiste: !isRegimeRG && useHeuresMode && categoriePro === "Technicien" ? (joursTravail || undefined) : undefined,
jours_travail_non_artiste: !isRegimeRG && useHeuresMode && (categoriePro === "Technicien" || professionPick?.code === "MET040") ? (joursTravail || undefined) : undefined,
type_salaire: typeSalaire,
montant: salaryMode === "par_date" ? undefined : (typeSalaire !== "Minimum conventionnel" ? (montantSalaire === "" ? undefined : montantSalaire) : undefined),
salaires_par_date: !isRegimeRG && salaryMode === "par_date" ? convertSalariesByDateToJSON() : undefined,
@ -2294,6 +2295,26 @@ useEffect(() => {
</div>
</FieldRow>
{/* Section cachets pour metteur en scène */}
{professionPick?.code === "MET040" && (
<FieldRow>
<div>
<Label>Nombre de représentations (cachets)</Label>
<input
type="number"
min={0}
value={nbRepMetteur}
onChange={(e) => setNbRepMetteur(e.target.value === "" ? "" : Number(e.target.value))}
placeholder="ex : 2"
className="w-full px-3 py-2 rounded-lg border bg-white text-sm"
/>
<p className="text-[11px] text-slate-500 mt-1">
Nombre de cachets de représentation pour le metteur en scène.
</p>
</div>
</FieldRow>
)}
{/* Calendrier pour jours de travail */}
<DatePickerCalendar
isOpen={joursTravailOpen}

View file

@ -1071,7 +1071,8 @@ export default function ContractEditor({
analytique: analytique || null,
date_signature: dateSignature || null,
// Conditional fields based on category
nb_representations: useHeuresMode ? null : nbRepresentations || null,
// Pour les metteurs en scène, garder nb_representations même en mode heures
nb_representations: (useHeuresMode && professionPick?.code !== "MET040") ? null : nbRepresentations || null,
nb_services_repetition: useHeuresMode ? null : nbServicesRepetition || null,
dates_representations: useHeuresMode ? null : datesRepresentations || null,
dates_repetitions: useHeuresMode ? null : datesRepetitions || null,
@ -1079,7 +1080,8 @@ export default function ContractEditor({
minutes_total: useHeuresMode ? minutesTotal : null,
precisions_salaire: precisionsSalaire || null, // Nouveau champ pour précisions salaire
// Map to database fields
cachets_representations: useHeuresMode ? null : nbRepresentations || null,
// Pour les metteurs en scène, garder nb_representations même en mode heures
cachets_representations: (useHeuresMode && professionPick?.code !== "MET040") ? null : nbRepresentations || null,
services_repetitions: useHeuresMode ? null : nbServicesRepetition || null,
nombre_d_heures: useHeuresMode ? heuresTotal || null : nombreHeuresTotal || null,
nombre_d_heures_par_jour: nombreHeuresParJour || null,
@ -2514,6 +2516,23 @@ export default function ContractEditor({
/>
</div>
</div>
{/* Champ cachets pour metteur en scène */}
{professionPick?.code === "MET040" && (
<div className="mt-4">
<label className="text-xs text-muted-foreground">Nombre de représentations (cachets)</label>
<Input
type="number"
min={0}
value={nbRepresentations}
onChange={(e) => setNbRepresentations(e.target.value === "" ? "" : Number(e.target.value))}
placeholder="ex : 2"
/>
<p className="text-[10px] text-muted-foreground mt-1">
Nombre de cachets de représentation pour le metteur en scène.
</p>
</div>
)}
</>
)}
</div>

67
package-lock.json generated
View file

@ -2338,6 +2338,7 @@
"integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
"license": "BSD-3-Clause",
"optional": true,
"peer": true,
"dependencies": {
"detect-libc": "^2.0.0",
"https-proxy-agent": "^5.0.0",
@ -4417,7 +4418,6 @@
"resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.75.1.tgz",
"integrity": "sha512-GEPVBvjQimcMd9z5K1eTKTixTRb6oVbudoLQ9JKqTUJnR6GQdBU4OifFZean1AnHfsQwtri1fop2OWwsMv019w==",
"license": "MIT",
"peer": true,
"dependencies": {
"@supabase/auth-js": "2.75.1",
"@supabase/functions-js": "2.75.1",
@ -4567,7 +4567,6 @@
"integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==",
"devOptional": true,
"license": "MIT",
"peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
@ -4641,7 +4640,6 @@
"integrity": "sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.46.1",
"@typescript-eslint/types": "8.46.1",
@ -5178,7 +5176,8 @@
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"license": "ISC",
"optional": true
"optional": true,
"peer": true
},
"node_modules/abs-svg-path": {
"version": "0.1.1",
@ -5192,7 +5191,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@ -5216,6 +5214,7 @@
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"debug": "4"
},
@ -5290,7 +5289,8 @@
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz",
"integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==",
"license": "ISC",
"optional": true
"optional": true,
"peer": true
},
"node_modules/are-we-there-yet": {
"version": "2.0.0",
@ -5299,6 +5299,7 @@
"deprecated": "This package is no longer supported.",
"license": "ISC",
"optional": true,
"peer": true,
"dependencies": {
"delegates": "^1.0.0",
"readable-stream": "^3.6.0"
@ -5795,7 +5796,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.8.9",
"caniuse-lite": "^1.0.30001746",
@ -6140,6 +6140,7 @@
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
"license": "ISC",
"optional": true,
"peer": true,
"bin": {
"color-support": "bin.js"
}
@ -6178,7 +6179,8 @@
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
"license": "ISC",
"optional": true
"optional": true,
"peer": true
},
"node_modules/cookie": {
"version": "1.0.2",
@ -6393,7 +6395,8 @@
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
"license": "MIT",
"optional": true
"optional": true,
"peer": true
},
"node_modules/dequal": {
"version": "2.0.3",
@ -6733,7 +6736,6 @@
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
@ -6903,7 +6905,6 @@
"integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@rtsao/scc": "^1.1.0",
"array-includes": "^3.1.9",
@ -7486,6 +7487,7 @@
"integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
"license": "ISC",
"optional": true,
"peer": true,
"dependencies": {
"minipass": "^3.0.0"
},
@ -7499,6 +7501,7 @@
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"optional": true,
"peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
@ -7575,6 +7578,7 @@
"deprecated": "This package is no longer supported.",
"license": "ISC",
"optional": true,
"peer": true,
"dependencies": {
"aproba": "^1.0.3 || ^2.0.0",
"color-support": "^1.1.2",
@ -7595,7 +7599,8 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"license": "ISC",
"optional": true
"optional": true,
"peer": true
},
"node_modules/generator-function": {
"version": "2.0.1",
@ -7915,7 +7920,8 @@
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
"license": "ISC",
"optional": true
"optional": true,
"peer": true
},
"node_modules/hasown": {
"version": "2.0.2",
@ -7963,6 +7969,7 @@
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"agent-base": "6",
"debug": "4"
@ -8578,7 +8585,6 @@
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"jiti": "bin/jiti.js"
}
@ -8942,6 +8948,7 @@
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"semver": "^6.0.0"
},
@ -8958,6 +8965,7 @@
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"license": "ISC",
"optional": true,
"peer": true,
"bin": {
"semver": "bin/semver.js"
}
@ -9087,6 +9095,7 @@
"integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"minipass": "^3.0.0",
"yallist": "^4.0.0"
@ -9101,6 +9110,7 @@
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"optional": true,
"peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
@ -9114,6 +9124,7 @@
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"license": "MIT",
"optional": true,
"peer": true,
"bin": {
"mkdirp": "bin/cmd.js"
},
@ -9168,7 +9179,8 @@
"resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz",
"integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==",
"license": "MIT",
"optional": true
"optional": true,
"peer": true
},
"node_modules/nanoid": {
"version": "3.3.11",
@ -9302,6 +9314,7 @@
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"whatwg-url": "^5.0.0"
},
@ -9330,6 +9343,7 @@
"integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
"license": "ISC",
"optional": true,
"peer": true,
"dependencies": {
"abbrev": "1"
},
@ -9376,6 +9390,7 @@
"deprecated": "This package is no longer supported.",
"license": "ISC",
"optional": true,
"peer": true,
"dependencies": {
"are-we-there-yet": "^2.0.0",
"console-control-strings": "^1.1.0",
@ -9704,6 +9719,7 @@
"integrity": "sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==",
"license": "MIT",
"optional": true,
"peer": true,
"engines": {
"node": ">=8"
}
@ -9812,6 +9828,7 @@
"resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.11.174.tgz",
"integrity": "sha512-TdTZPf1trZ8/UFu5Cx/GXB7GZM30LT+wWUNfsi6Bq8ePLnb+woNKtDymI2mxZYBpMbonNFqKmiz684DIfnd8dA==",
"license": "Apache-2.0",
"peer": true,
"engines": {
"node": ">=18"
},
@ -9827,6 +9844,7 @@
"hasInstallScript": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"@mapbox/node-pre-gyp": "^1.0.0",
"nan": "^2.17.0",
@ -9842,6 +9860,7 @@
"integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"mimic-response": "^2.0.0"
},
@ -9855,6 +9874,7 @@
"integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
"license": "MIT",
"optional": true,
"peer": true,
"engines": {
"node": ">=8"
},
@ -9868,6 +9888,7 @@
"integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"decompress-response": "^4.2.0",
"once": "^1.3.1",
@ -9958,7 +9979,6 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@ -10267,7 +10287,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@ -10280,7 +10299,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
@ -10437,6 +10455,7 @@
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@ -10989,7 +11008,8 @@
}
],
"license": "MIT",
"optional": true
"optional": true,
"peer": true
},
"node_modules/simple-swizzle": {
"version": "0.2.4",
@ -11513,6 +11533,7 @@
"integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
"license": "ISC",
"optional": true,
"peer": true,
"dependencies": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
@ -11531,6 +11552,7 @@
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
"license": "ISC",
"optional": true,
"peer": true,
"engines": {
"node": ">=10"
}
@ -11541,6 +11563,7 @@
"integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
"license": "ISC",
"optional": true,
"peer": true,
"engines": {
"node": ">=8"
}
@ -11637,7 +11660,6 @@
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@ -11813,7 +11835,6 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@ -12238,6 +12259,7 @@
"integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
"license": "ISC",
"optional": true,
"peer": true,
"dependencies": {
"string-width": "^1.0.2 || 2 || 3 || 4"
}
@ -12353,7 +12375,8 @@
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC",
"optional": true
"optional": true,
"peer": true
},
"node_modules/yargs": {
"version": "15.4.1",