From 89dc466fdc8f3b7208d9a48725892447ec5263e1 Mon Sep 17 00:00:00 2001 From: TREFOU Felix Date: Thu, 30 Apr 2026 11:01:31 +0200 Subject: [PATCH 01/28] feat: replace testdata with generated mini-project MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the two real-project report files with a self-contained test fixture that exercises all extension features: Source files (testdata/src/): auth/auth.ts — hardcoded secret, weak crypto, var/any/== issues api/router.ts — SQL injection, credential logging, unused vars core/utils.c — strcpy/memcpy overflows, null check, div-by-zero core/parser.h — fixed arrays, raw pointer, global instance Reports (testdata/reports/): eslint-report.json — 12 TypeScript/style issues (minor→major) codeparser-report.json — 12 C/C++ issues (info→blocker, incl. other_locations) semgrep-report.json — 11 cross-language security issues (major→blocker) Config: two custom columns outil — extracted from report filename via regex package — extracted from location.path via fromField/fieldRegex Sidebar: fix applyFilters() to resolve fromField/fieldRegex columns via getSidebarCustomValue(), mirroring the webview.js logic. Co-Authored-By: Claude Sonnet 4.6 --- src/sourcesViewProvider.ts | 21 +- testdata/.vscode/codeclimate-visualiser.json | 18 +- testdata/reports/codeparser-dispatch.json | 95 ------ testdata/reports/codeparser-gesmaj.json | 324 ------------------- testdata/reports/codeparser-report.json | 13 + testdata/reports/eslint-report.json | 12 + testdata/reports/semgrep-report.json | 11 + testdata/src/api/router.ts | 31 ++ testdata/src/auth/auth.ts | 25 ++ testdata/src/core/parser.h | 33 ++ testdata/src/core/utils.c | 34 ++ 11 files changed, 188 insertions(+), 429 deletions(-) delete mode 100644 testdata/reports/codeparser-dispatch.json delete mode 100644 testdata/reports/codeparser-gesmaj.json create mode 100644 testdata/reports/codeparser-report.json create mode 100644 testdata/reports/eslint-report.json create mode 100644 testdata/reports/semgrep-report.json create mode 100644 testdata/src/api/router.ts create mode 100644 testdata/src/auth/auth.ts create mode 100644 testdata/src/core/parser.h create mode 100644 testdata/src/core/utils.c diff --git a/src/sourcesViewProvider.ts b/src/sourcesViewProvider.ts index 9549b48..111e4fe 100644 --- a/src/sourcesViewProvider.ts +++ b/src/sourcesViewProvider.ts @@ -321,6 +321,7 @@ export class SourcesViewProvider implements vscode.WebviewViewProvider { let sortBy = 'severity'; // 'severity' | 'checkname' | 'filename' let sortDir = 'asc'; // 'asc' | 'desc' let filters = { severities: new Set(), checkName: '', fileName: '', custom: {} }; + let customColumnDefs = []; // CustomColumn[] from last update // ── SVG icons ──────────────────────────────────────────────────────── const ICONS = { @@ -364,6 +365,20 @@ export class SourcesViewProvider implements vscode.WebviewViewProvider { return extractLine(raw) || 0; } + // ── Custom column value resolution (mirrors webview.js) ────────────── + function getNestedField(obj, path) { + return path.split('.').reduce((o, k) => (o != null ? o[k] : undefined), obj); + } + function getSidebarCustomValue(issue, colDef) { + if (colDef.fromField && colDef.fieldRegex) { + const fieldVal = String(getNestedField(issue, colDef.fromField) ?? ''); + const match = fieldVal.match(new RegExp(colDef.fieldRegex)); + if (match) return match[(colDef.captureGroup ?? 0) + 1] ?? ''; + return ''; + } + return (issue.customColumns ?? {})[colDef.name] ?? ''; + } + // ── Filter logic ───────────────────────────────────────────────────── function filtersActive() { return filters.severities.size > 0 || filters.checkName !== '' || filters.fileName !== '' || @@ -380,7 +395,8 @@ export class SourcesViewProvider implements vscode.WebviewViewProvider { } for (const [col, val] of Object.entries(filters.custom)) { if (!val) continue; - const colVal = (i.customColumns && i.customColumns[col]) || ''; + const colDef = customColumnDefs.find(c => c.name === col); + const colVal = colDef ? getSidebarCustomValue(i, colDef) : ((i.customColumns && i.customColumns[col]) || ''); if (!colVal.toLowerCase().includes(val.toLowerCase())) return false; } return true; @@ -392,9 +408,10 @@ export class SourcesViewProvider implements vscode.WebviewViewProvider { document.getElementById('btn-filter').title = active ? 'Filters active' : 'Filter'; } function rebuildCustomFilterInputs(customColumns) { + customColumnDefs = customColumns || []; const container = document.getElementById('filter-custom-cols'); container.innerHTML = ''; - const visible = (customColumns || []).filter(c => c.showFilter !== false); + const visible = customColumnDefs.filter(c => c.showFilter !== false); for (const col of visible) { const sep = document.createElement('div'); sep.className = 'dropdown-sep'; const lbl = document.createElement('div'); lbl.className = 'filter-section-lbl'; diff --git a/testdata/.vscode/codeclimate-visualiser.json b/testdata/.vscode/codeclimate-visualiser.json index a83247a..07f00fc 100644 --- a/testdata/.vscode/codeclimate-visualiser.json +++ b/testdata/.vscode/codeclimate-visualiser.json @@ -3,25 +3,27 @@ { "name": "outil", "index": 0, - "showChart": false, - "showQuickFilter": true + "showChart": true, + "showQuickFilter": true, + "showFilter": true }, { - "name": "sous-système", - "index": 2, + "name": "package", + "index": 1, "showChart": true, "showQuickFilter": true, + "showFilter": true, "fromField": "location.path", - "fieldRegex": ".*/sous-systemes/(\\w+)/.*" + "fieldRegex": "src/([^/]+)/.*" } ], "reportPatterns": [ { - "glob": "reports/*-*.json", - "regex": "(\\w+)-(\\w+)\\.json", + "glob": "reports/*.json", + "regex": "(\\w+)-.*\\.json", "values": { "outil": "$0" } } ] -} \ No newline at end of file +} diff --git a/testdata/reports/codeparser-dispatch.json b/testdata/reports/codeparser-dispatch.json deleted file mode 100644 index 1271af8..0000000 --- a/testdata/reports/codeparser-dispatch.json +++ /dev/null @@ -1,95 +0,0 @@ -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'cui16_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"d9d5e501827d2a5c17bfea2f9fbd67ba170c2a8916a63db663331c7c9d53d658","location":{"lines":{"begin":{"column":56,"line":66},"end":{"column":71,"line":66}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/b_bus/include/disb_ext.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap][ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"b0226e5e6306b7bf75789549b0633ffd5606976c5dc339a7e97eba06ffb1018c","location":{"lines":{"begin":{"column":44,"line":82},"end":{"column":50,"line":82}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/b_bus/include/disb_ext.h"},"severity":"major","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"126ebacc7c1ad266c02374bac61e15eceac05775e0dfe0db4411ee634f9d534d","location":{"lines":{"begin":{"column":3,"line":175},"end":{"column":22,"line":175}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_systeme/a_api/source/disy_systeme.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"126ebacc7c1ad266c02374bac61e15eceac05775e0dfe0db4411ee634f9d534d","location":{"lines":{"begin":{"column":3,"line":239},"end":{"column":22,"line":239}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_systeme/a_api/source/disy_systeme.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"126ebacc7c1ad266c02374bac61e15eceac05775e0dfe0db4411ee634f9d534d","location":{"lines":{"begin":{"column":3,"line":289},"end":{"column":22,"line":289}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_systeme/a_api/source/disy_systeme.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"126ebacc7c1ad266c02374bac61e15eceac05775e0dfe0db4411ee634f9d534d","location":{"lines":{"begin":{"column":3,"line":365},"end":{"column":22,"line":365}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_systeme/a_api/source/disy_systeme.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"126ebacc7c1ad266c02374bac61e15eceac05775e0dfe0db4411ee634f9d534d","location":{"lines":{"begin":{"column":3,"line":422},"end":{"column":22,"line":422}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_systeme/a_api/source/disy_systeme.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"126ebacc7c1ad266c02374bac61e15eceac05775e0dfe0db4411ee634f9d534d","location":{"lines":{"begin":{"column":3,"line":469},"end":{"column":22,"line":469}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_systeme/a_api/source/disy_systeme.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"c5f5ecdaf2a297055b55f91cc08ebd8ec9c230a80fd3e44500a1b48db7c5334d","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_systeme/a_api/source/disy_systeme.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_bornes_int\\{.+(,.+){2}\\}' attendu pour l'appel de SNTL_PRECOND_BORNES_INT"},"description":"Absence de commentaire avant un appel","fingerprint":"4c29764f68ce31cbd4b72a7b6c5440f8aa173661da2d6ce7a5a16fd6293c556f","location":{"lines":{"begin":{"column":3,"line":374},"end":{"column":25,"line":374}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"7c01800de325993f507df63203e997ef0c3a68e60bd51892092616c9dfe7ecd3","location":{"lines":{"begin":{"column":7,"line":204},"end":{"column":10,"line":204}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"3cc7d5025353c84522d5e8ecd52edf559bae6ed2209d02391744602e718e9e53","location":{"lines":{"begin":{"column":6,"line":306},"end":{"column":31,"line":306}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"e3169c209ddbe2a878af3ce66debeca624c6824e8c6043677770ac322f17a655","location":{"lines":{"begin":{"column":7,"line":357},"end":{"column":32,"line":357}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"f423eab6f300b399f937420a18a75d715d638c526165d5a6bf5f08c6ba29950f","location":{"lines":{"begin":{"column":6,"line":456},"end":{"column":45,"line":456}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"9faa243de6d6801febe3dbbd5733f05b5650121657739d635a4ba76e22a78092","location":{"lines":{"begin":{"column":7,"line":573},"end":{"column":47,"line":573}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"989e070a2e70b0d5f45bbc45eceb1ca3d2c8cfe17380fd5a1036b04d3737c1fe","location":{"lines":{"begin":{"column":10,"line":617},"end":{"column":42,"line":617}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"e7a60fc800ca5cf8f0b0f082abbf2cbcbe2028d424560dac493f90657f87b7d7","location":{"lines":{"begin":{"column":10,"line":682},"end":{"column":46,"line":682}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"7567fc75b5b4f38f502dd9a4de2707e41991c1f4fc6b1ad9ae182b3c21a5ec3a","location":{"lines":{"begin":{"column":10,"line":746},"end":{"column":45,"line":746}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"149895a025f551f9f707782ad379601be0767d9038b7360a33fd5870d2a3621f","location":{"lines":{"begin":{"column":10,"line":851},"end":{"column":45,"line":851}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"a68cbb8435aa9b639e362f65c1b5606ed19522d6c4771bc0aec2c21fdc964461","location":{"lines":{"begin":{"column":6,"line":1016},"end":{"column":41,"line":1016}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISM_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"2844fa3310f0165fbfb9818cfc85fdede062202a51b9e81662ae3d8fdc8f0af9","location":{"lines":{"begin":{"column":7,"line":121},"end":{"column":47,"line":121}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISM_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"2d56a396a5801f6071c7cb2bc7b5dd4310b2eb625cf7eef54262213800f619ed","location":{"lines":{"begin":{"column":10,"line":124},"end":{"column":42,"line":124}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISM_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"eae5e064f8dbbed946a080eed4f44cd316e46029f3a8beea531f79be0bdbcd49","location":{"lines":{"begin":{"column":10,"line":130},"end":{"column":46,"line":130}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISM_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"b6769361bd64e2089b8401a79a7cb14ca0ac6a89a349ad0be3ae8de4e9e3ca0e","location":{"lines":{"begin":{"column":10,"line":136},"end":{"column":45,"line":136}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISM_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"b631f20f429eb28d3fff53bddbbf285197a63eb94149be8c5ebc4047d9988cf5","location":{"lines":{"begin":{"column":10,"line":143},"end":{"column":45,"line":143}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISM_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"95e721f02bc8a9b087fa49fcb0f82388b5b4878346df5e01944bef6cb2990dc1","location":{"lines":{"begin":{"column":6,"line":153},"end":{"column":45,"line":153}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch/m_main/source/dism_api_ssyst.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'h_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"74c6cd161aa3b959c71ffa81216c2e88be5e0818fa4e3cb48b772d9e42f83279","location":{"lines":{"begin":{"column":42,"line":424},"end":{"column":46,"line":424}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/commun/include/dis_instance_dispatch_ext.h"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"add24b83d49f5a853c5fe7c21baad67b5b0c2ac85cf378433e1f9927ddae5c72","location":{"lines":{"begin":{"column":26,"line":489},"end":{"column":80,"line":489}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"add24b83d49f5a853c5fe7c21baad67b5b0c2ac85cf378433e1f9927ddae5c72","location":{"lines":{"begin":{"column":26,"line":521},"end":{"column":80,"line":521}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"a4a74f5567cf6a083966ac4338e5df1538be58d7cdbe7d693dd5c7f1a03c0e7d","location":{"lines":{"begin":{"column":57,"line":902},"end":{"column":87,"line":903}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"43c295c02cfb36db19caf41bc9b1cce8971ea45a8f5610bd6e6ec7c27650c3be","location":{"lines":{"begin":{"column":13,"line":906},"end":{"column":62,"line":906}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"1d6023793cc06698d4958c3d31b5603e15f049b95ca61fa115ca2599673bc513","location":{"lines":{"begin":{"column":26,"line":489},"end":{"column":80,"line":489}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"1d6023793cc06698d4958c3d31b5603e15f049b95ca61fa115ca2599673bc513","location":{"lines":{"begin":{"column":26,"line":521},"end":{"column":80,"line":521}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"critical","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"f121adb26c7fd2c8a1c325631b4aa4c6f078c74775178ce68adf2e34589f8850","location":{"lines":{"begin":{"column":42,"line":67},"end":{"column":47,"line":67}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"20aa245f4568ea202aeb01cb4875db9d604dab6f8745f349618f86fef43820a3","location":{"lines":{"begin":{"column":56,"line":67},"end":{"column":63,"line":67}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"f121adb26c7fd2c8a1c325631b4aa4c6f078c74775178ce68adf2e34589f8850","location":{"lines":{"begin":{"column":40,"line":68},"end":{"column":45,"line":68}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"fea5a75d02eb618691ca8c13840025b2dbd46a334866f289cf4ef44850ba4f11","location":{"lines":{"begin":{"column":37,"line":73},"end":{"column":40,"line":73}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_[ap]ui16_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"228036ab0a203260283d719c3b188e80c1baad9ce357073bcc30821d35612775","location":{"lines":{"begin":{"column":22,"line":107},"end":{"column":76,"line":107}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_[ap]ui16_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"7a96d3710fa2eabde4c79ae4bf7aa89f2319445fbd4ad9981a87c3a8c5ce835a","location":{"lines":{"begin":{"column":18,"line":110},"end":{"column":73,"line":110}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_h_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"0fc4a2134cd9b14ec2ce2a201fc7ec219e1df092d720b4535471fdb246f5c462","location":{"lines":{"begin":{"column":18,"line":112},"end":{"column":37,"line":112}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_ui_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"c780ab3c0ce305b200d1e6f2c0f82fa5d1071aaebe36216306a5a808ca978649","location":{"lines":{"begin":{"column":18,"line":114},"end":{"column":42,"line":114}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_b_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"fcd4caa1c21ad4fa123135e45dd617b5a35af00554fb70bb88d80c1e5a7fb008","location":{"lines":{"begin":{"column":18,"line":116},"end":{"column":27,"line":116}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_ui8_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"5e3d2669b88d51c04d6e819fc0d85ff8ad169ff58e3845e251335047c392f38f","location":{"lines":{"begin":{"column":18,"line":118},"end":{"column":29,"line":118}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_ui16_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"4d6f223c2f91fa97048b1274327e47d214b27c773426c26e4f823837c05e66d4","location":{"lines":{"begin":{"column":18,"line":120},"end":{"column":30,"line":120}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_f64_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"74f3eb6c4483163f8a749657fc5a44bae932966403d238110ec4eab208f84d59","location":{"lines":{"begin":{"column":18,"line":122},"end":{"column":31,"line":122}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_[ap]ui8_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"a400c519b68bbdd25b833a9e67d86a260294ef13f966a6ee687bc4a607b28dfe","location":{"lines":{"begin":{"column":18,"line":124},"end":{"column":30,"line":124}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"f121adb26c7fd2c8a1c325631b4aa4c6f078c74775178ce68adf2e34589f8850","location":{"lines":{"begin":{"column":42,"line":198},"end":{"column":47,"line":198}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"20aa245f4568ea202aeb01cb4875db9d604dab6f8745f349618f86fef43820a3","location":{"lines":{"begin":{"column":56,"line":198},"end":{"column":63,"line":198}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"f121adb26c7fd2c8a1c325631b4aa4c6f078c74775178ce68adf2e34589f8850","location":{"lines":{"begin":{"column":40,"line":211},"end":{"column":45,"line":211}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"637bc31d3adc9dbdc4186ce623b69f1bcc75b0ce72294d11243c9593b250e477","location":{"lines":{"begin":{"column":7,"line":245},"end":{"column":7,"line":245}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"637bc31d3adc9dbdc4186ce623b69f1bcc75b0ce72294d11243c9593b250e477","location":{"lines":{"begin":{"column":29,"line":311},"end":{"column":29,"line":311}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'ui8_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"637bc31d3adc9dbdc4186ce623b69f1bcc75b0ce72294d11243c9593b250e477","location":{"lines":{"begin":{"column":11,"line":415},"end":{"column":11,"line":415}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"06fe5c4551f177a4df43a73a85e74168f99e80afc37e4a6191f90befea7b729f","location":{"lines":{"begin":{"column":8,"line":640},"end":{"column":13,"line":640}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"c22f3cd9336bc80677e0e52ccd4e19bdabc9930d9daa29db542e07881b4ed99b","location":{"lines":{"begin":{"column":8,"line":641},"end":{"column":13,"line":641}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"fea5a75d02eb618691ca8c13840025b2dbd46a334866f289cf4ef44850ba4f11","location":{"lines":{"begin":{"column":37,"line":837},"end":{"column":40,"line":837}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"4b37b0e954a2fa6737a248e5f9acf00a27af275bd463350f3deccbf59267a1d1","location":{"lines":{"begin":{"column":26,"line":849},"end":{"column":41,"line":849}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"4b835b135b8122bb4237444c4ae4a212cd6f19035b7a8bee566e73ba7c3ad800","location":{"lines":{"begin":{"column":28,"line":1030},"end":{"column":37,"line":1030}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '(r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"cd108107c90352d96e925c033b63f2f56f76cda292506ce993ba93a3c231ab0b","location":{"lines":{"begin":{"column":23,"line":1033},"end":{"column":33,"line":1033}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"zero-init-local-var","content":{"body":""},"description":"Variable de portée globale initialisée à 0","fingerprint":"0cd60d8195bbabed35fcbb56d062cdb2de9d9b0d39c645a6c0749830e23f853f","location":{"lines":{"begin":{"column":46,"line":114},"end":{"column":46,"line":114}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"critical","type":"issue"} -{"categories":["decl"],"check_name":"zero-init-local-var","content":{"body":""},"description":"Variable de portée globale initialisée à 0","fingerprint":"0cd60d8195bbabed35fcbb56d062cdb2de9d9b0d39c645a6c0749830e23f853f","location":{"lines":{"begin":{"column":9,"line":119},"end":{"column":9,"line":119}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"critical","type":"issue"} -{"categories":["decl"],"check_name":"zero-init-local-var","content":{"body":""},"description":"Variable de portée globale initialisée à 0","fingerprint":"0cd60d8195bbabed35fcbb56d062cdb2de9d9b0d39c645a6c0749830e23f853f","location":{"lines":{"begin":{"column":35,"line":120},"end":{"column":35,"line":120}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"critical","type":"issue"} -{"categories":["decl"],"check_name":"zero-init-local-var","content":{"body":""},"description":"Variable de portée globale initialisée à 0","fingerprint":"0cd60d8195bbabed35fcbb56d062cdb2de9d9b0d39c645a6c0749830e23f853f","location":{"lines":{"begin":{"column":35,"line":122},"end":{"column":35,"line":122}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_dispatch_integration_test/m_main/source/dispatch_integration_test.c"},"severity":"critical","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":200},"end":{"column":22,"line":200}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":207},"end":{"column":22,"line":207}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":372},"end":{"column":22,"line":372}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":379},"end":{"column":22,"line":379}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":505},"end":{"column":22,"line":505}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":639},"end":{"column":22,"line":639}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":737},"end":{"column":22,"line":737}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":869},"end":{"column":22,"line":869}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":925},"end":{"column":22,"line":925}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":932},"end":{"column":22,"line":932}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":988},"end":{"column":22,"line":988}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1031},"end":{"column":22,"line":1031}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1094},"end":{"column":22,"line":1094}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1101},"end":{"column":22,"line":1101}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1193},"end":{"column":22,"line":1193}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1232},"end":{"column":22,"line":1232}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1290},"end":{"column":22,"line":1290}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1299},"end":{"column":22,"line":1299}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1396},"end":{"column":22,"line":1396}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1405},"end":{"column":22,"line":1405}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1484},"end":{"column":22,"line":1484}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1493},"end":{"column":22,"line":1493}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"08a52c72df83230b407c45e3f083f854018d8adddf986c0915d7c0631fee0eb3","location":{"lines":{"begin":{"column":3,"line":1569},"end":{"column":22,"line":1569}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"29150efb4eb9f8df2d6a3614a62dc8f23e5254358b90adbec3cd2974e7ac74a9","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"cd8aa6021e92f7257b48159de5a650527094a420ba18ee55e1bafe41f177870c","location":{"lines":{"begin":{"column":11,"line":1556},"end":{"column":18,"line":1556}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/lib_dispatch_service/a_api/source/disa_services.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"8b85d27ff2fba73a17b3f760a508a8febb422085dbcbaf4799a7bb4b439f626d","location":{"lines":{"begin":{"column":7,"line":142},"end":{"column":10,"line":142}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/i_instance/source/disi_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"4df5d121662393337e6c0058eb2681db197356aed9933793f95d106091df37a6","location":{"lines":{"begin":{"column":6,"line":230},"end":{"column":23,"line":230}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/i_instance/source/disi_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"c9b66783410b5173ee36cb40413669f87feaee104f92d8712016a9961d37de72","location":{"lines":{"begin":{"column":7,"line":282},"end":{"column":30,"line":282}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/i_instance/source/disi_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"0dc39f93941cad596bb609a214e4dcb0110afc60e1fd9acfaa792c7de48ee77c","location":{"lines":{"begin":{"column":10,"line":331},"end":{"column":36,"line":331}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/i_instance/source/disi_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"c8084f9efc970145e5578c33354eec20cce780e3614294d1edad2ecf4d5bf834","location":{"lines":{"begin":{"column":10,"line":391},"end":{"column":42,"line":391}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/i_instance/source/disi_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"bcca2acc0cae2bb81213072149e8def67a3a88b02f3cd3b7e86a8c01d2491e3e","location":{"lines":{"begin":{"column":10,"line":430},"end":{"column":36,"line":430}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/i_instance/source/disi_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"be9d83bc0599e5b4b8748f51c5bf691fcfe61c56db1784a3957464de65de531a","location":{"lines":{"begin":{"column":10,"line":476},"end":{"column":33,"line":476}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/i_instance/source/disi_api_ssyst.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"api-prefix","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bDISPATCH_[A-Za-z0-9_]+\\b'"},"description":"Fichier d'API contenant une fonction sans préfixe","fingerprint":"616d185229ab09bfcba134e551ad9beceb83f63b87a26d2315e8d30474249f80","location":{"lines":{"begin":{"column":10,"line":508},"end":{"column":45,"line":508}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/dispatch/proc_instance_dispatch/i_instance/source/disi_api_ssyst.c"},"severity":"minor","type":"issue"} diff --git a/testdata/reports/codeparser-gesmaj.json b/testdata/reports/codeparser-gesmaj.json deleted file mode 100644 index 8235a96..0000000 --- a/testdata/reports/codeparser-gesmaj.json +++ /dev/null @@ -1,324 +0,0 @@ -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"cf7bf31d12141ba88ba7bb8cbcc5b003f851a1c37571cc3818ee929fde0f3df4","location":{"lines":{"begin":{"column":43,"line":29},"end":{"column":54,"line":29}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/include/majc_priv.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bMAJC_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"22148c53f19640556e49fdeaa1b749e8454908ba02c2fff2770cf8c1962cb660","location":{"lines":{"begin":{"column":9,"line":29},"end":{"column":28,"line":29}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/include/majc_priv.h"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"free-null-check","content":{"body":""},"description":"Test de null avant appel à une fonction de libération mémoire","fingerprint":"30fc08c4d095ee3c4c1f42107206da8024dc4e0ce46fafedff1e0ca89d38ca7d","location":{"lines":{"begin":{"column":6,"line":86},"end":{"column":23,"line":86}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_ind.c"},"other_locations":[{"lines":{"begin":{"column":5,"line":90},"end":{"column":22,"line":90}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_ind.c"}],"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"5f93f33e43b7d4b79b3e93656fea87ebc11f9c5fd418892f782af98b252b70f0","location":{"lines":{"begin":{"column":3,"line":53},"end":{"column":26,"line":53}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_ind.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"3c686b975c3d04af4f3d4644fc91010ee27fff82ca7406ebf2f26fd0b5029590","location":{"lines":{"begin":{"column":12,"line":97},"end":{"column":21,"line":97}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/maj_gesmaj_cst.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"6e202dfcac12f0fd1083da7506545ba420600b896cbeddf148ba58d4504fed59","location":{"lines":{"begin":{"column":12,"line":98},"end":{"column":21,"line":98}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/maj_gesmaj_cst.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"24f7f3db8b6d01a20a4277c9fa95f86944d52e8ff2a3474e23cca1aec5e67c0c","location":{"lines":{"begin":{"column":12,"line":99},"end":{"column":25,"line":99}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/maj_gesmaj_cst.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"39b47679f12ff33650e5571ef687dd2288f94849a0f73bbbb42747d3c5c35e58","location":{"lines":{"begin":{"column":12,"line":100},"end":{"column":21,"line":100}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/maj_gesmaj_cst.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'MAJ_b_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"67e7ac152010c586893db224abdc9486a0fb40b088959337bc63a9627b4a8fc9","location":{"lines":{"begin":{"column":18,"line":46},"end":{"column":26,"line":46}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/maj_gesmaj_var.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]i32_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"bedf8d989f303dbf65ba5842a865be017db63de640a9e5e76771eb6f40953184","location":{"lines":{"begin":{"column":46,"line":47},"end":{"column":60,"line":47}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/majc.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"a020c55b144b56c12798e540d941a2abc56a5c633300c03e2f43c2e15f0c3f4a","location":{"lines":{"begin":{"column":52,"line":50},"end":{"column":63,"line":50}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/majc.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bMAJ[A-Z]{1,2}_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"f934886853e96b6f750b742c0a5bf980d57342dc5976552421f289ed7f038868","location":{"lines":{"begin":{"column":7,"line":49},"end":{"column":45,"line":49}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/majb.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bMAJ[A-Z]{1,2}_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"420f7aa0e1ab5ff8d9f7c29bed291070007a3dc93b917818a9ec104a2bdef293","location":{"lines":{"begin":{"column":7,"line":52},"end":{"column":44,"line":52}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/majb.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bMAJ[A-Z]{1,2}_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"0c02af2fcf078d28258fd0dc2f6bf43227326880b4d50d0a9d9952b3a327aa10","location":{"lines":{"begin":{"column":7,"line":56},"end":{"column":34,"line":56}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/majb.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bMAJ[A-Z]{1,2}_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"30f7540108ec001ab9988671bc91d5be6f5ac1a4b6d3daf6be7f1439bbfc8d96","location":{"lines":{"begin":{"column":7,"line":60},"end":{"column":35,"line":60}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/majb.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"653043d8ba774f7e22c3135e040d605def04afa0d1ccdd18b636fb278a77703b","location":{"lines":{"begin":{"column":44,"line":41},"end":{"column":53,"line":41}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/majr.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"f0eac081eb554ce9094ccdad90194fca4e2595444eca8968d57fa861476003c7","location":{"lines":{"begin":{"column":57,"line":47},"end":{"column":64,"line":47}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/majm.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"a76f436f635fdc48ddbe66124acad649b3150106d26d6f4f1e6f164df526983a","location":{"lines":{"begin":{"column":50,"line":54},"end":{"column":57,"line":54}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/majm.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ad818c976eb9ce754df06795d02339cf975d0f61cd7a1f513b4c1ad6bd87cddb","location":{"lines":{"begin":{"column":65,"line":45},"end":{"column":72,"line":45}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/majs.h"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Balise attendue: MASQUE_DOXYGEN_PRIVE"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"df4cccdb36760973160afd0ac3fb2c11c9275d269f07ad83be0157c8deb327f4","location":{"lines":{"begin":{"column":9,"line":1},"end":{"column":31,"line":1}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/source/maj_gesmaj_decla.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"096e4cec109b384ab7d41f1724f476d92fc3016f33d7e5eed8ccb9c45af8a140","location":{"lines":{"begin":{"column":51,"line":36},"end":{"column":62,"line":36}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/maju.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"7f6f3202ddd407b2ffecd96bc0b29feb80a9d6c071f9be44d5af6b2b34287bd5","location":{"lines":{"begin":{"column":51,"line":39},"end":{"column":61,"line":39}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/maju.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"45acf89424f5e3f47df67ebcc7c96e65cc788b0333f9a9f02e2476e8ef1f119a","location":{"lines":{"begin":{"column":50,"line":43},"end":{"column":61,"line":43}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/maju.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]ui32_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"5c944213006be7bb5b72f9e6d4eed3433d4f0616478368f4f67c87f2c4d65a32","location":{"lines":{"begin":{"column":72,"line":47},"end":{"column":87,"line":47}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/commun/include/maju.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bMAJM_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"53fc2e65ee3fdc57ab23fb5b93ca19697abcc611502e8c8a240e0777aea92733","location":{"lines":{"begin":{"column":7,"line":36},"end":{"column":21,"line":36}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/include/majm_priv.h"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"0988db4d503add3b56a5e61347d998a6097e2e21f1911b9020ad12a60c324976","location":{"lines":{"begin":{"column":32,"line":139},"end":{"column":74,"line":139}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"314a81e768a5b6e9d54a7ff0f804ef9cf6579af056ab5faf37b887f3bfc33940","location":{"lines":{"begin":{"column":32,"line":354},"end":{"column":71,"line":354}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"7d84bcc320b23aceb3a68587eca5c663da54fa1d79c0e3ab27e6c447cf29ce12","location":{"lines":{"begin":{"column":32,"line":139},"end":{"column":74,"line":139}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"a8b70d90adc729733aff98a7a915f62628556bcf4046efc47b7dac68473dc5dc","location":{"lines":{"begin":{"column":32,"line":354},"end":{"column":71,"line":354}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"critical","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"eeb26b5d9d615c5b93e761f0f45cf0e019d2838e45db7d73ff3ff53b4116f06a","location":{"lines":{"begin":{"column":3,"line":124},"end":{"column":26,"line":124}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"eeb26b5d9d615c5b93e761f0f45cf0e019d2838e45db7d73ff3ff53b4116f06a","location":{"lines":{"begin":{"column":3,"line":125},"end":{"column":26,"line":125}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"eeb26b5d9d615c5b93e761f0f45cf0e019d2838e45db7d73ff3ff53b4116f06a","location":{"lines":{"begin":{"column":3,"line":203},"end":{"column":26,"line":203}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"eeb26b5d9d615c5b93e761f0f45cf0e019d2838e45db7d73ff3ff53b4116f06a","location":{"lines":{"begin":{"column":5,"line":207},"end":{"column":28,"line":207}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]i32_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"a6c1a87d0c2952b700e11d7bcadeeb41a72161860ac1edd1a3b9e708bffdc343","location":{"lines":{"begin":{"column":46,"line":113},"end":{"column":60,"line":113}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"3b9340a466ae2572d9ef40eaa22453796b89a777b95bc75fae947631fd7a0894","location":{"lines":{"begin":{"column":11,"line":121},"end":{"column":28,"line":121}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap][ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"b0d33080a342c15c89c66d7998576e44c9fff0b52fe5401c069a39e3463cd6c8","location":{"lines":{"begin":{"column":20,"line":193},"end":{"column":59,"line":193}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i32_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"1930e432e2a6adbb9de212870bb551260c716aa5a4d70ea54d0f618f8ff854bc","location":{"lines":{"begin":{"column":20,"line":194},"end":{"column":32,"line":194}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/c_decompresseur/source/majc.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"84556480cf57495ed751e58592390765fc2b13972f1d623377eee8c9a0b50a45","location":{"lines":{"begin":{"column":11,"line":66},"end":{"column":23,"line":66}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_main.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"a43f14cda3b77a1e8c2c55bb95c2f3d815e9443c7e62efdf0ae9d53552884d2f","location":{"lines":{"begin":{"column":30,"line":275},"end":{"column":63,"line":275}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"f78d708095ce17d5175b6a19f9b2d4ba88afe57fdc0f6ca45da5b4f53b1978ef","location":{"lines":{"begin":{"column":30,"line":341},"end":{"column":61,"line":341}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"781f25351b8de3e47a4942856dc354fa5a4bb1a4aec8d2ac303e5e19c1dece03","location":{"lines":{"begin":{"column":32,"line":410},"end":{"column":62,"line":410}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"781f25351b8de3e47a4942856dc354fa5a4bb1a4aec8d2ac303e5e19c1dece03","location":{"lines":{"begin":{"column":32,"line":419},"end":{"column":62,"line":419}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"6457171697ccba62a0bb6cf4adf08ae4e81776a7943190324977d5554b980608","location":{"lines":{"begin":{"column":30,"line":482},"end":{"column":58,"line":482}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"16437d8ae6a1079fcc5d8d287efd3d7a5efa1c8837305d2c1576d0f5c17c054e","location":{"lines":{"begin":{"column":67,"line":70},"end":{"column":72,"line":70}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"9a44d9c90799dd486372686874090d5e26b5825a26c55ebe61d533244aba8721","location":{"lines":{"begin":{"column":73,"line":79},"end":{"column":80,"line":79}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"905221057d0a7988e27f1547dd9a51c64b1159d58f31098c46b8a098fff049b2","location":{"lines":{"begin":{"column":73,"line":80},"end":{"column":81,"line":80}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'ui_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"eb0912a7ecf9d35c9891aca404b2aef12e3a6d2440a18a341044598c3776a54b","location":{"lines":{"begin":{"column":59,"line":83},"end":{"column":76,"line":83}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"9a44d9c90799dd486372686874090d5e26b5825a26c55ebe61d533244aba8721","location":{"lines":{"begin":{"column":72,"line":90},"end":{"column":79,"line":90}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"905221057d0a7988e27f1547dd9a51c64b1159d58f31098c46b8a098fff049b2","location":{"lines":{"begin":{"column":72,"line":91},"end":{"column":80,"line":91}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"9a44d9c90799dd486372686874090d5e26b5825a26c55ebe61d533244aba8721","location":{"lines":{"begin":{"column":69,"line":99},"end":{"column":76,"line":99}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"905221057d0a7988e27f1547dd9a51c64b1159d58f31098c46b8a098fff049b2","location":{"lines":{"begin":{"column":69,"line":100},"end":{"column":77,"line":100}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"9a44d9c90799dd486372686874090d5e26b5825a26c55ebe61d533244aba8721","location":{"lines":{"begin":{"column":68,"line":109},"end":{"column":75,"line":109}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"905221057d0a7988e27f1547dd9a51c64b1159d58f31098c46b8a098fff049b2","location":{"lines":{"begin":{"column":68,"line":110},"end":{"column":76,"line":110}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"16437d8ae6a1079fcc5d8d287efd3d7a5efa1c8837305d2c1576d0f5c17c054e","location":{"lines":{"begin":{"column":67,"line":148},"end":{"column":72,"line":148}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'ui_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"eb0912a7ecf9d35c9891aca404b2aef12e3a6d2440a18a341044598c3776a54b","location":{"lines":{"begin":{"column":59,"line":265},"end":{"column":76,"line":265}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/b_bus/source/majb_dbus_sofcom.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"57bbc391e10e0a7e048e9dae60ac76f189b7bad77b1aaa6f1111b8febada8edf","location":{"lines":{"begin":{"column":55,"line":46},"end":{"column":66,"line":46}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/include/majr_priv.h"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\bMAJR_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"347d72b4168e4f782e3a314441115b18b1c625c760359f405c9945e855c0ab92","location":{"lines":{"begin":{"column":6,"line":52},"end":{"column":26,"line":52}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/include/majr_priv.h"},"severity":"major","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"e51c35e85d94058b82bd757a64fec5a2cf405709964f87f2d5c8d5b111a18979","location":{"lines":{"begin":{"column":3,"line":118},"end":{"column":26,"line":118}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_finaliserMAJ.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"e51c35e85d94058b82bd757a64fec5a2cf405709964f87f2d5c8d5b111a18979","location":{"lines":{"begin":{"column":3,"line":119},"end":{"column":26,"line":119}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_finaliserMAJ.c"},"severity":"minor","type":"issue"} -{"categories":["expr"],"check_name":"file-descriptor-zero-op","content":{"body":""},"description":"Affectation ou comparaison d'un file descriptor à zéro","fingerprint":"0e5511aa66569e2f0f3117b8a5ad31844e52edce243e86492424a58801014f2d","location":{"lines":{"begin":{"column":18,"line":155},"end":{"column":19,"line":155}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_finaliserMAJ.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"b5a77c604671ab4557e54e4711606eeb543ff64eb12787715f9674565d3206bc","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/machineEtat.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"61aa8ee428672476149cbfd9251bbff8072e170a8d4bc7628c30abecd022f18b","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_ControlerContenuArchive.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"b9fb750c074712a389b2029ebcea96a64d39b86b00c9a0a3dcb722e1988dcbb1","location":{"lines":{"begin":{"column":14,"line":5},"end":{"column":17,"line":5}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_ControlerContenuArchive.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"4c4ed5e0f850ae3ee90e57956c48b07badb2e33407c890f76c353f485ba220f1","location":{"lines":{"begin":{"column":26,"line":5},"end":{"column":31,"line":5}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_ControlerContenuArchive.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"4ee11a3ce010b90b13659d4391af7588cba9b79f3076fe595366e417471b55c6","location":{"lines":{"begin":{"column":7,"line":7},"end":{"column":7,"line":7}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_ControlerContenuArchive.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"63daa90ff33c98c1294b156679c5d19688ba4f103f10627885b5845f5bfc567f","location":{"lines":{"begin":{"column":10,"line":7},"end":{"column":12,"line":7}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_ControlerContenuArchive.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'gb_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"98e248381d33a828d158b520c9fa0cb6caecb2b5514b91c2d0f2e31bd05cf376","location":{"lines":{"begin":{"column":12,"line":9},"end":{"column":17,"line":9}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_ControlerContenuArchive.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"6afbd4b879fcd0e7832031ece8a3324cbf2ec31db4e0d4f68e9859f501d0c4e9","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_EspaceLibrePartition.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ccfd5bfb97dad1fba5c55eaf9aa1e5c6a247c7f98d91718a4beafcd728c80591","location":{"lines":{"begin":{"column":14,"line":5},"end":{"column":17,"line":5}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_EspaceLibrePartition.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"23cd8ce37c1aba929bd7e221ed32d480647543c1b7437d825e0b865ed79527a2","location":{"lines":{"begin":{"column":32,"line":5},"end":{"column":37,"line":5}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_EspaceLibrePartition.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"e2ba20b2712b312403ed4735d2f771b1c88668af4b9a6437d64e9f51b71a08e9","location":{"lines":{"begin":{"column":12,"line":9},"end":{"column":12,"line":9}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_EspaceLibrePartition.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"559893dc2d000f5e729127b176a92b5488941bcaeb7bdae619e23c613f9244de","location":{"lines":{"begin":{"column":15,"line":9},"end":{"column":20,"line":9}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_EspaceLibrePartition.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"1151c9fdae756de2a2b8bfa1fc3f7670f56c4373d35dfd15bf7739b342e77061","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_InstallerImages.c"},"severity":"minor","type":"issue"} -{"categories":["call"],"check_name":"free-null-check","content":{"body":""},"description":"Test de null avant appel à une fonction de libération mémoire","fingerprint":"eb069ea32e857f11c8ebfdb451625d0b6436393685b2d9d40277b2ca6dabb007","location":{"lines":{"begin":{"column":6,"line":221},"end":{"column":29,"line":221}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_installerImages.c"},"other_locations":[{"lines":{"begin":{"column":5,"line":228},"end":{"column":26,"line":228}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_installerImages.c"}],"severity":"minor","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"1cbd350db08b0431a5d8e3fa8278e4998bb13bec64ba690311128424bfdea1cf","location":{"lines":{"begin":{"column":35,"line":200},"end":{"column":60,"line":200}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_installerImages.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"cceef2b0f0ab4c55651b5bc980e81d7d27bf933622dd706d0c7e49735021d3ad","location":{"lines":{"begin":{"column":35,"line":200},"end":{"column":60,"line":200}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_installerImages.c"},"severity":"critical","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"8c77ecc05aa1f790efa75fa0dcecb1f0e84f425741a19f60ec505ceadec5d56b","location":{"lines":{"begin":{"column":3,"line":124},"end":{"column":27,"line":124}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_installerImages.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"8c77ecc05aa1f790efa75fa0dcecb1f0e84f425741a19f60ec505ceadec5d56b","location":{"lines":{"begin":{"column":3,"line":125},"end":{"column":27,"line":125}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_installerImages.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"8c77ecc05aa1f790efa75fa0dcecb1f0e84f425741a19f60ec505ceadec5d56b","location":{"lines":{"begin":{"column":3,"line":126},"end":{"column":27,"line":126}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_installerImages.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"8c77ecc05aa1f790efa75fa0dcecb1f0e84f425741a19f60ec505ceadec5d56b","location":{"lines":{"begin":{"column":3,"line":127},"end":{"column":27,"line":127}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_installerImages.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'gb_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"6c430a60e91b68d9a725b254b7943caf6fb4cd0a2176469e339f68d478f6d47b","location":{"lines":{"begin":{"column":12,"line":120},"end":{"column":22,"line":120}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm_installerImages.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"fd4b428678d307d7e364435d2483179584f199d686748ea7d37b3c7ee282e06a","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_PreparationLienSymboliques.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"e9356708e56b435869d59f2efed8038206d0982d9e149daefe78f5ec101de40b","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_PubilierVersionLogicielle.c"},"severity":"minor","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"a644d0ce6900aa2b6f07cafe4e31a143d4ffb10406650558695c729188c6573e","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_calculer_checksum.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'e_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"87b7204472a52895e9a04fcb68e4106e3987f193c9f919c1f6e7a1e2ee01fa5f","location":{"lines":{"begin":{"column":20,"line":12},"end":{"column":30,"line":12}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_calculer_checksum.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"9dcbe1571692e26160445774b2ea80da7f6ea7e139612bcf7b500a1fc426d75f","location":{"lines":{"begin":{"column":7,"line":16},"end":{"column":12,"line":16}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_calculer_checksum.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"c3e8989717beccad27ee524c7619fe030227d1a5fcdd6a15bfc55af4670455c7","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_calculer_signature.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"77b4f69bccf221ef296a0e7b9dea1171eaf7b80f7fcce344ce48aeb0a4ec8dcc","location":{"lines":{"begin":{"column":14,"line":5},"end":{"column":17,"line":5}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_calculer_signature.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"0a2ac405cb5a238b099626303953369f7499bdb05ab938e568100e24ccbd91fb","location":{"lines":{"begin":{"column":26,"line":5},"end":{"column":31,"line":5}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_calculer_signature.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"3f530c573163b6205767f868a48e73591aad034a8f557e8e284110d35cf2bd26","location":{"lines":{"begin":{"column":7,"line":7},"end":{"column":7,"line":7}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_calculer_signature.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"e6f95afe3ada1e433bae115734a05c3926747c67ee0e4fc03271e8f6c5e6e0a4","location":{"lines":{"begin":{"column":10,"line":7},"end":{"column":12,"line":7}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_calculer_signature.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"72a972de7334c8523cd1fa8524619a2cf955e18de4ea1bcb58cc6daedb5e4a87","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_decompresserFichier.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"307c89ef03ccc470b3c20babaa45f6b6fd394194c5f0de4b38223cd4441863b6","location":{"lines":{"begin":{"column":14,"line":6},"end":{"column":17,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_decompresserFichier.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"4b1ad439eef953ae00d034210a1d7f045dcc81047811d703a10bcdbf6f2b78e2","location":{"lines":{"begin":{"column":26,"line":6},"end":{"column":31,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_decompresserFichier.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"cca067a0f6d80b4a2fed3a9d4818539fd21648bfc3eb172c62cd8e3388134910","location":{"lines":{"begin":{"column":20,"line":8},"end":{"column":20,"line":8}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_decompresserFichier.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"549574ff9948ef761e83362c0e0b57ae621fa7094d5c1c7ee26e0755e6926450","location":{"lines":{"begin":{"column":23,"line":8},"end":{"column":25,"line":8}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_decompresserFichier.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"e7e67b4e7ea36ce4cf0537cf2c9796b961a008463025b09d3ed5dcb7d182a041","location":{"lines":{"begin":{"column":20,"line":9},"end":{"column":26,"line":9}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_decompresserFichier.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"07f45a867d6bf11433e22e8def4dbaaa926ae422c5d0bf0e9b1bd9380a0482c2","location":{"lines":{"begin":{"column":20,"line":10},"end":{"column":30,"line":10}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_decompresserFichier.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'e_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"9a4cc0e99008b8285787953148d9b4609a3b678f3a9a62b4371251149b1d7842","location":{"lines":{"begin":{"column":20,"line":11},"end":{"column":25,"line":11}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_decompresserFichier.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"b33fe1a7f348e9fe78b041300415166be1ada47380fb58b414f2e633ab2b62de","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_fabriquer_dossier_RDIFF.c"},"severity":"minor","type":"issue"} -{"categories":["call"],"check_name":"free-null-check","content":{"body":""},"description":"Test de null avant appel à une fonction de libération mémoire","fingerprint":"df92143e27868c54330194959b676855a7ad7100af5e37ec676ce894fdbd2e27","location":{"lines":{"begin":{"column":6,"line":183},"end":{"column":28,"line":183}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_fichier_priv.c"},"other_locations":[{"lines":{"begin":{"column":5,"line":185},"end":{"column":27,"line":185}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_fichier_priv.c"}],"severity":"minor","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"17f23e3d3b0bc302d6bdabbd7588a8ce033ade48d972139f4973267e0e75de82","location":{"lines":{"begin":{"column":27,"line":118},"end":{"column":57,"line":118}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_fichier_priv.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"3249ec8464e4366d13ba6632d46f9dd86d72506d411ee77cc85fd61c3beae61b","location":{"lines":{"begin":{"column":34,"line":329},"end":{"column":76,"line":329}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_fichier_priv.c"},"severity":"major","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"bfd12731a9e108d56e5ab75cccae00d1f9819e89df6d26b3e2260cdf0150d4dc","location":{"lines":{"begin":{"column":3,"line":321},"end":{"column":26,"line":321}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_fichier_priv.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPINT"},"description":"Absence de commentaire avant un appel","fingerprint":"220b2e83f6e7b45d4aca08ab567b2af6659f590c2482c0bf6659847a8cef6818","location":{"lines":{"begin":{"column":7,"line":353},"end":{"column":25,"line":353}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_fichier_priv.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_b_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"d4aa91e74a366a60049aa0b074bf5d9d060c7151c730b3403fd67b7c05fe9449","location":{"lines":{"begin":{"column":18,"line":81},"end":{"column":35,"line":81}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_fichier_priv.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_b_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"4bb6f6a807f33540cb84134e226860db050c5ed94748bc2ec3f10f0e13712dc5","location":{"lines":{"begin":{"column":18,"line":84},"end":{"column":31,"line":84}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_fichier_priv.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_b_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ca1d4e1ca8f260620e0f45a80eb0e9264c99d64155ebea9046b9aa79dd9557f9","location":{"lines":{"begin":{"column":18,"line":87},"end":{"column":36,"line":87}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_fichier_priv.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ef5d25ee3b0158960730fe31c58183bc2dca30f591155fb09c1dfd1b4ca41cc1","location":{"lines":{"begin":{"column":11,"line":153},"end":{"column":28,"line":153}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/d_demarrage/source/majd_fichier_priv.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"4d591cd049e4b9310896d02b521399bcf8c411fff801f525bb65b38f67e8a77b","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_obtenirVersionProduit.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"b06b5cbf6b05ebfcfc7cefb1007d249316f53040a07578f079976fd206b72d1e","location":{"lines":{"begin":{"column":14,"line":6},"end":{"column":17,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_obtenirVersionProduit.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"fa0ffd6d6c1ccef936b2a8cf058c47fac86a0b712692470b7b82dc0676e93a1b","location":{"lines":{"begin":{"column":32,"line":6},"end":{"column":37,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_obtenirVersionProduit.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ac12e345ac129711adfac90babe27d7ec6879d1ededcafcc69769c97d978a971","location":{"lines":{"begin":{"column":9,"line":8},"end":{"column":14,"line":8}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_obtenirVersionProduit.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"b77aeb50c35bf8d31f5b7459eceb791c4b9003cf7608b85b0d6dfcd57df482d5","location":{"lines":{"begin":{"column":9,"line":9},"end":{"column":15,"line":9}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_obtenirVersionProduit.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"9d82319aa7d4e674530beb7c6b65e6f8dfea7186276f02b111a716d4b56204fc","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_listerContenuArchive.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"cbdefa91238f83a30d563a46e9e331bc5d8487ad4eb23f153de355738afeb77c","location":{"lines":{"begin":{"column":14,"line":6},"end":{"column":17,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_listerContenuArchive.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"6ef909ab2c02088e2d77a1012658e4a37bd31ebf9d9bf698abd685e59b370178","location":{"lines":{"begin":{"column":26,"line":6},"end":{"column":31,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_listerContenuArchive.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"17c12a01a5ba82ec3d15ec0a69b30496c328fc204ad174e506fe1dc5ecc08027","location":{"lines":{"begin":{"column":12,"line":8},"end":{"column":12,"line":8}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_listerContenuArchive.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"353f3fb19246adc6082db8f536103136a2b88774d428e1c437d3c1113159a9ac","location":{"lines":{"begin":{"column":15,"line":8},"end":{"column":17,"line":8}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_listerContenuArchive.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"fc52e4ffaecf1b27348a1574921f2905637a222c185ac779663eddd4b74180d0","location":{"lines":{"begin":{"column":20,"line":8},"end":{"column":20,"line":8}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_listerContenuArchive.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"3c6ffad5783cc8b9ce8793c0a9bdf66ef10c73bb0a048e7e8f84cb0ce1c0363b","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_reconstituer_image.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"f66a0df1c157cc3d2986c851f97c2e72f9fdf69e8ba1074df60042eb84aeb759","location":{"lines":{"begin":{"column":14,"line":6},"end":{"column":17,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_reconstituer_image.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"a8e9d3107018842f3c7359f84f050fb39a6e298e8f951f2c5ebba352ab26ff05","location":{"lines":{"begin":{"column":26,"line":6},"end":{"column":31,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_reconstituer_image.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"45561c5383769005c69422a8c722f0983d4c240b6879aa3a6203b25c19e1914b","location":{"lines":{"begin":{"column":9,"line":8},"end":{"column":9,"line":8}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_reconstituer_image.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '(r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"b1ec9c5df9c7b3c50c8f3ad4048de18594355a71e501ca35729c3ffe0f18c22f","location":{"lines":{"begin":{"column":9,"line":9},"end":{"column":11,"line":9}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_reconstituer_image.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"26515a3b4d07cce1a02914a2237ef6eb2e8370601efc9528103d3a5d01198e7a","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_supprimer.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"3a1742d2822a607136db545fd66b81cb84715cc387a38cf8e68f78c43b020c6d","location":{"lines":{"begin":{"column":14,"line":6},"end":{"column":17,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_supprimer.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"237200489e5675a986f14ff0d89f376a6a488bf97fc53364d2a5ccb0f5882e71","location":{"lines":{"begin":{"column":32,"line":6},"end":{"column":37,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_supprimer.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"93422bc3346a7f60dd3ec25fb35bf966941a91ed95efcf4e212e962693a2cdcc","location":{"lines":{"begin":{"column":10,"line":8},"end":{"column":15,"line":8}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_supprimer.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"c66d1721598becb544f081d133cdbb9d24f90b69a6c9c7b05ab233237d57563f","location":{"lines":{"begin":{"column":10,"line":9},"end":{"column":10,"line":9}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_supprimer.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"2930dd986cf88c493f868ec4cc59600b3a8160f942efa98a1a577e8e1ce9baae","location":{"lines":{"begin":{"column":10,"line":11},"end":{"column":16,"line":11}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_supprimer.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"d843c138dc6cc5a2cca15d16185ec9f9188d92354e497105f9c675c826e95978","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_validation_schema.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"e8ad5edf6cfb2962804641305e97d879a8980b4ddc8aea50fb49edbc4bd09d45","location":{"lines":{"begin":{"column":14,"line":4},"end":{"column":17,"line":4}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_validation_schema.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"8910f0006e020fa92bd207f388734b76f68f359ea7d0db6cfbd858ada9f256ae","location":{"lines":{"begin":{"column":32,"line":4},"end":{"column":37,"line":4}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_validation_schema.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'gb_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"59f1ff6453a8f3c4b226cda170b4fa0d464eaf04800b0c9ccc7d482e53357c88","location":{"lines":{"begin":{"column":12,"line":6},"end":{"column":19,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_validation_schema.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"1b8561e46927468a442416715ca0d674611502d9522a4c5e53e0fe476a630001","location":{"lines":{"begin":{"column":12,"line":7},"end":{"column":17,"line":7}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_validation_schema.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"cd667fe8cc949d79238aaac8d99fca6d1135daf165f48660451fc5723656eb15","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierAuthenticiteImage.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"3c5d8266dcfb3df683da945e44c0eed8cb54756802de54f778a75df7bd08e148","location":{"lines":{"begin":{"column":14,"line":5},"end":{"column":17,"line":5}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierAuthenticiteImage.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"49e117854a2e29adac425ff0e207d8efb61f03a7815312d1412caaf9f646bf4b","location":{"lines":{"begin":{"column":32,"line":5},"end":{"column":37,"line":5}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierAuthenticiteImage.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"c7ca5bb945a39b39cf6eb0976eb949b84498b37a59804db7f84eacf2739cb38f","location":{"lines":{"begin":{"column":7,"line":7},"end":{"column":12,"line":7}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierAuthenticiteImage.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"412a4da0859384f7e5b2a47f77981532e7b5bc745adf3c8357a522c160296e69","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierDossier.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"672f4130e80f9e5d0f5e7ac59676e56f3c57e72df23babc959d992b5528518cd","location":{"lines":{"begin":{"column":14,"line":7},"end":{"column":17,"line":7}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierDossier.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"b47f37014ff729fc4e705aca5196c2be20693ca3d12dca50ed8b2c85d692ef4c","location":{"lines":{"begin":{"column":32,"line":7},"end":{"column":37,"line":7}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierDossier.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"03165776a328eec2dcf2abe4e7169689ca4135eb20a443d10939dcece7abf283","location":{"lines":{"begin":{"column":7,"line":9},"end":{"column":12,"line":9}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierDossier.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"52be0f4276a7b24913447acb3ab93dba9db889598d92beb485e0ced50fe8c648","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierSignatureFichierManifest.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ed5af059a1460a0b7c7a53b897fe2958f50186246493befe49f93906e37dd163","location":{"lines":{"begin":{"column":14,"line":4},"end":{"column":17,"line":4}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierSignatureFichierManifest.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap][ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"b1edfb81d4c8bdcd7fd90e27dab5770cb73af5332740f26901d343790014e2e2","location":{"lines":{"begin":{"column":32,"line":4},"end":{"column":37,"line":4}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierSignatureFichierManifest.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'gb_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"17aab5af56d4da6d9546dad6fae338a19e255145216043a36629d99652caf74b","location":{"lines":{"begin":{"column":12,"line":6},"end":{"column":19,"line":6}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierSignatureFichierManifest.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"023d698c17873ab8540136c8b669de435e2da08855550746c5dfb9e553bf3eca","location":{"lines":{"begin":{"column":12,"line":7},"end":{"column":17,"line":7}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifierSignatureFichierManifest.c"},"severity":"major","type":"issue"} -{"categories":["general"],"check_name":"internal-marker","content":{"body":"Le nom de fichier ne correspond pas au nommage '.*_api_ssyst"},"description":"Condition de portée interne ou externe du fichier incorrecte","fingerprint":"39a030f7a8a889c25849f6c508760ef1dc8ba27ea0f9b755e18de34c69b05c86","location":{"lines":{"begin":{"column":0,"line":0},"end":{"column":0,"line":0}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifier_dossier_RDIFF.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'gb_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"9bc63a46c87c9711884fabcbe9038a95170207beb78e65a555ec74443dddef09","location":{"lines":{"begin":{"column":12,"line":8},"end":{"column":14,"line":8}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/tests/maj_test_verifier_dossier_RDIFF.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"698979cd45d3b55d980e2887034fa30de81f1b71115bca77d708bf35393bde31","location":{"lines":{"begin":{"column":17,"line":131},"end":{"column":24,"line":131}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ce09fdf759eb8840c67d39148f7f2f95728b93fe7f50661e9a73ad6c91265e0c","location":{"lines":{"begin":{"column":35,"line":137},"end":{"column":44,"line":137}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"77bdfae0ebaaac7bb839673d4fea6366e0924061d2cff101306ef1dfc308089a","location":{"lines":{"begin":{"column":35,"line":139},"end":{"column":50,"line":139}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"63e3c113451720053f2cf1ecd66e8995c61b2e04bc2b605e3bbcec82230d2492","location":{"lines":{"begin":{"column":72,"line":153},"end":{"column":79,"line":153}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"63e3c113451720053f2cf1ecd66e8995c61b2e04bc2b605e3bbcec82230d2492","location":{"lines":{"begin":{"column":66,"line":157},"end":{"column":73,"line":157}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"63e3c113451720053f2cf1ecd66e8995c61b2e04bc2b605e3bbcec82230d2492","location":{"lines":{"begin":{"column":73,"line":160},"end":{"column":80,"line":160}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"63e3c113451720053f2cf1ecd66e8995c61b2e04bc2b605e3bbcec82230d2492","location":{"lines":{"begin":{"column":65,"line":164},"end":{"column":72,"line":164}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"63e3c113451720053f2cf1ecd66e8995c61b2e04bc2b605e3bbcec82230d2492","location":{"lines":{"begin":{"column":76,"line":169},"end":{"column":83,"line":169}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"63e3c113451720053f2cf1ecd66e8995c61b2e04bc2b605e3bbcec82230d2492","location":{"lines":{"begin":{"column":60,"line":173},"end":{"column":67,"line":173}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"63e3c113451720053f2cf1ecd66e8995c61b2e04bc2b605e3bbcec82230d2492","location":{"lines":{"begin":{"column":70,"line":176},"end":{"column":77,"line":176}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"d0507140a91232f8a4c823541c5f6690b9786ba26d36180ebb4018ae8b5dfc68","location":{"lines":{"begin":{"column":41,"line":207},"end":{"column":62,"line":207}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"143f78a27e58c4a241a78ea26d714ff6bf6bb7c149f4dd4d62d1d9da33ff6829","location":{"lines":{"begin":{"column":41,"line":208},"end":{"column":63,"line":208}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"87ef6bac8812e947641e55f6ca7f0c6f6fe5a75deda08609128c4e6ff60266e6","location":{"lines":{"begin":{"column":41,"line":209},"end":{"column":67,"line":209}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"f34630f4db8869e0359ff3ffc01b5cc2d4b0aec71f8612c68821dd54eb9d9f87","location":{"lines":{"begin":{"column":41,"line":210},"end":{"column":64,"line":210}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"6900b2e5fff0b8f8172734b651f27517cdb8e80541551e3fd76f93cd80824635","location":{"lines":{"begin":{"column":41,"line":211},"end":{"column":67,"line":211}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"d562fa913a25254f9e36aca2e4f533fb6b0e698afc8e8ae43503fbf2aeea65e9","location":{"lines":{"begin":{"column":41,"line":212},"end":{"column":70,"line":212}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"5f1a97b325be4ecba94c59f4b0c88a34c20cf280407d53bf27939b419f4d349c","location":{"lines":{"begin":{"column":41,"line":213},"end":{"column":58,"line":213}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"907f318527daca11cac4e58c3d1786b30e20065a1881286703fcb0b8efc3da3b","location":{"lines":{"begin":{"column":38,"line":216},"end":{"column":70,"line":216}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"439d2df9c7872ccfc57221ff02ee51920a0eb2e48dd789fa5f2d572505630897","location":{"lines":{"begin":{"column":41,"line":252},"end":{"column":56,"line":252}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"d0507140a91232f8a4c823541c5f6690b9786ba26d36180ebb4018ae8b5dfc68","location":{"lines":{"begin":{"column":41,"line":274},"end":{"column":62,"line":274}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"143f78a27e58c4a241a78ea26d714ff6bf6bb7c149f4dd4d62d1d9da33ff6829","location":{"lines":{"begin":{"column":41,"line":284},"end":{"column":63,"line":284}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"87ef6bac8812e947641e55f6ca7f0c6f6fe5a75deda08609128c4e6ff60266e6","location":{"lines":{"begin":{"column":41,"line":295},"end":{"column":67,"line":295}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"f34630f4db8869e0359ff3ffc01b5cc2d4b0aec71f8612c68821dd54eb9d9f87","location":{"lines":{"begin":{"column":41,"line":306},"end":{"column":64,"line":306}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"6900b2e5fff0b8f8172734b651f27517cdb8e80541551e3fd76f93cd80824635","location":{"lines":{"begin":{"column":41,"line":321},"end":{"column":67,"line":321}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"d562fa913a25254f9e36aca2e4f533fb6b0e698afc8e8ae43503fbf2aeea65e9","location":{"lines":{"begin":{"column":41,"line":336},"end":{"column":70,"line":336}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_c[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"5f1a97b325be4ecba94c59f4b0c88a34c20cf280407d53bf27939b419f4d349c","location":{"lines":{"begin":{"column":41,"line":351},"end":{"column":58,"line":351}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_cr_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"4d26cccc84beba75b48d749c4ea13738903399be4aec4b81caa46f69ac8d336a","location":{"lines":{"begin":{"column":33,"line":359},"end":{"column":49,"line":359}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 't_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"85ae181bf77748ed012dfdc50c24a5b130e578c90d17ad1e1698f53dd443e1fc","location":{"lines":{"begin":{"column":23,"line":444},"end":{"column":35,"line":444}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 't_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"85ae181bf77748ed012dfdc50c24a5b130e578c90d17ad1e1698f53dd443e1fc","location":{"lines":{"begin":{"column":23,"line":520},"end":{"column":35,"line":520}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 't_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"85ae181bf77748ed012dfdc50c24a5b130e578c90d17ad1e1698f53dd443e1fc","location":{"lines":{"begin":{"column":23,"line":562},"end":{"column":35,"line":562}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 't_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"85ae181bf77748ed012dfdc50c24a5b130e578c90d17ad1e1698f53dd443e1fc","location":{"lines":{"begin":{"column":23,"line":609},"end":{"column":35,"line":609}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 't_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"85ae181bf77748ed012dfdc50c24a5b130e578c90d17ad1e1698f53dd443e1fc","location":{"lines":{"begin":{"column":23,"line":650},"end":{"column":35,"line":650}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"952ea5cf27eac5eeb09fd41bc7d5e2442c08076ed2eba868ccc89914f67cbe80","location":{"lines":{"begin":{"column":31,"line":668},"end":{"column":49,"line":668}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 't_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"85ae181bf77748ed012dfdc50c24a5b130e578c90d17ad1e1698f53dd443e1fc","location":{"lines":{"begin":{"column":31,"line":682},"end":{"column":43,"line":682}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"952ea5cf27eac5eeb09fd41bc7d5e2442c08076ed2eba868ccc89914f67cbe80","location":{"lines":{"begin":{"column":31,"line":683},"end":{"column":49,"line":683}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"952ea5cf27eac5eeb09fd41bc7d5e2442c08076ed2eba868ccc89914f67cbe80","location":{"lines":{"begin":{"column":31,"line":746},"end":{"column":49,"line":746}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"952ea5cf27eac5eeb09fd41bc7d5e2442c08076ed2eba868ccc89914f67cbe80","location":{"lines":{"begin":{"column":31,"line":763},"end":{"column":49,"line":763}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"bdf5a4d361666e0bbc7d24611edefe938f538f2ef66bde5c5acea85766444d47","location":{"lines":{"begin":{"column":26,"line":126},"end":{"column":33,"line":126}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"c415045f848567c2109258ed41833cb6c270c8f53fc00813bd192d23f1e77f1a","location":{"lines":{"begin":{"column":26,"line":127},"end":{"column":38,"line":127}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"6c5d156472ac39085f46eea2d01b67d770b1577bb3cd272ed4449cb1a30f683f","location":{"lines":{"begin":{"column":12,"line":130},"end":{"column":29,"line":130}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"1a3aa85bd4bfe425b606f5605974154997b643eec29f05df2fb26690fcc685d8","location":{"lines":{"begin":{"column":17,"line":131},"end":{"column":24,"line":131}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"1d350407dc5b194a5c1e040b6f22567b49dd307d07a35a97d6fff66c64246400","location":{"lines":{"begin":{"column":13,"line":132},"end":{"column":32,"line":132}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\b_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"4b8ac7f9e69e234f22a957bbad341986eb64109154383893f813182021c2efbe","location":{"lines":{"begin":{"column":20,"line":151},"end":{"column":36,"line":151}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\b_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"008bc90585cdd7e381904f5091f9578bb7d054a3471ddef107f9277e0e82b49c","location":{"lines":{"begin":{"column":1,"line":155},"end":{"column":30,"line":155}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\b_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"af0af97d460547199333cf8284fe292ccced35dcdcc7796ec8fb036bc8c52380","location":{"lines":{"begin":{"column":20,"line":158},"end":{"column":37,"line":158}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\b_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"a9d1fd549ca57057f527744bc9d02b755c066a7a5d5bc4d0be7548ba2e72544f","location":{"lines":{"begin":{"column":1,"line":162},"end":{"column":29,"line":162}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\b_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"f8d777860361f8f1332f6648e74b8f71d86bc79131d3e87ade61b6dfb6146ac3","location":{"lines":{"begin":{"column":20,"line":167},"end":{"column":40,"line":167}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\b_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"95fffb2eca078c3f572c5d54f83463be4589e5603f34451f309dcb3bd07917e6","location":{"lines":{"begin":{"column":1,"line":171},"end":{"column":24,"line":171}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\b_[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"abf9fa3ce7752d119fe8d0b72c316508e5138da1d31220097431412759804aaf","location":{"lines":{"begin":{"column":20,"line":174},"end":{"column":34,"line":174}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/s_etats/source/majs.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"free-null-check","content":{"body":""},"description":"Test de null avant appel à une fonction de libération mémoire","fingerprint":"9bef43fe99835b41914190c10d66b54b84e2a3d9ab109d8eda461dcfb297e903","location":{"lines":{"begin":{"column":6,"line":172},"end":{"column":38,"line":172}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx_xml_traces.c"},"other_locations":[{"lines":{"begin":{"column":5,"line":174},"end":{"column":37,"line":174}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx_xml_traces.c"}],"severity":"minor","type":"issue"} -{"categories":["expr"],"check_name":"file-descriptor-zero-op","content":{"body":""},"description":"Affectation ou comparaison d'un file descriptor à zéro","fingerprint":"afa0c0810783867a1b72d7dc9f806df989c79d399b4410826cc6ac13b771f788","location":{"lines":{"begin":{"column":28,"line":66},"end":{"column":28,"line":66}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx_xml_traces.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"78dc57d9cf7a46828f8c079f759797ca7fd709d2a1855b4e32ba655ba9109c5f","location":{"lines":{"begin":{"column":14,"line":25},"end":{"column":38,"line":25}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx_xml_traces.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'z_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"0f0af7dd41b34e11bec5d3696ee992a6f13cb00162ad38159b100696a3d291ad","location":{"lines":{"begin":{"column":38,"line":41},"end":{"column":45,"line":41}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx_xml_traces.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"2c0079ccd4eacf6bdd2cec7f46e22c8d3fca7e5278e742eb574183b9d14612c8","location":{"lines":{"begin":{"column":40,"line":345},"end":{"column":49,"line":345}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"d393b75a723c65a56a3e94a9c1df48a2495122c0a4a07defac7f9265d6aaea79","location":{"lines":{"begin":{"column":31,"line":730},"end":{"column":56,"line":730}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"34ef539f1df5ae3bdba497a261cd0888d531fcc30632194d068a523eea6b1f1c","location":{"lines":{"begin":{"column":40,"line":345},"end":{"column":49,"line":345}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"7d13fcd10fc9572f378da510e7c4f1451f3a703d1bd19daf29b0490adc2544f4","location":{"lines":{"begin":{"column":31,"line":730},"end":{"column":56,"line":730}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"alloc-magic-number","content":{"body":""},"description":"Appel d'une allocation mémoire avec un nombre magique","fingerprint":"2983308a6c7736ac29f3e8c8c82d877460e379f7233ea99e72fcd4deda71c7f0","location":{"lines":{"begin":{"column":47,"line":345},"end":{"column":48,"line":345}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"ec231a0f1a898c376ec307946e0cd51f15ed855ceb4ce9267c125f2df27646f5","location":{"lines":{"begin":{"column":31,"line":119},"end":{"column":76,"line":119}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"c2c03192ea92d96c99fd338c56b02577cf88458861d00a6d055256368deef70f","location":{"lines":{"begin":{"column":31,"line":120},"end":{"column":77,"line":120}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"a1fd183b42bb52d0825dc707312e97a7433fa2ec37d23fd7389e30a910847142","location":{"lines":{"begin":{"column":36,"line":183},"end":{"column":85,"line":183}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"39a11da3696e439457ffa55420d6dd86c75bb2ccef1c1212683b6266fb8dd66e","location":{"lines":{"begin":{"column":34,"line":195},"end":{"column":82,"line":195}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"e93e8b1492c1f6d141a56ad101212787eb4a15e792e4da180ae35dbf6785e1a0","location":{"lines":{"begin":{"column":34,"line":196},"end":{"column":75,"line":196}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"39a11da3696e439457ffa55420d6dd86c75bb2ccef1c1212683b6266fb8dd66e","location":{"lines":{"begin":{"column":32,"line":210},"end":{"column":80,"line":210}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"e93e8b1492c1f6d141a56ad101212787eb4a15e792e4da180ae35dbf6785e1a0","location":{"lines":{"begin":{"column":32,"line":211},"end":{"column":73,"line":211}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"55baafcf599b1fe64ebfc6cd74214eb975b0d347e7ffbacf5ea0b06613d239af","location":{"lines":{"begin":{"column":21,"line":297},"end":{"column":71,"line":297}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"7da846f34e39283f50630e104d6ad50339587ee5a4aecc3a11bca9da9d4dcc58","location":{"lines":{"begin":{"column":38,"line":479},"end":{"column":79,"line":479}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"1b54ce3ddf57568c30b14ed40edda908f9f57748661807b8c1ea053a330c6c10","location":{"lines":{"begin":{"column":38,"line":480},"end":{"column":62,"line":480}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"445a609a63543abd5b3e8fa03a00d16d8c0c103bfe4d1a5cad84d5e955e1e9b4","location":{"lines":{"begin":{"column":38,"line":481},"end":{"column":63,"line":481}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"9f9d095e71fcef1c5791c57c6d89b11d3c7b05bd3d552f702dd151102230442e","location":{"lines":{"begin":{"column":40,"line":490},"end":{"column":85,"line":490}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"eb598f94b9eb223b470505e4e36743fd1ec0eb23f2abfc91956ae5e4b99863cc","location":{"lines":{"begin":{"column":32,"line":531},"end":{"column":69,"line":531}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"6205405a633d20a17a8279b658ef3b93400a1bcc4606dc69e0feb2183bb7fe52","location":{"lines":{"begin":{"column":32,"line":532},"end":{"column":72,"line":532}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"1a4cfb16804d5611ee57051be9617fbacfea63daffead5f4e115273691ade318","location":{"lines":{"begin":{"column":38,"line":559},"end":{"column":87,"line":559}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"5bc3db66c613f97444e8a84ff0a93aadf09583e87f1e04fd711bfe38f234ba0e","location":{"lines":{"begin":{"column":40,"line":605},"end":{"column":83,"line":605}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"forbidden-line-return-arg","content":{"body":""},"description":"Chaine de caractère contenant un saut de ligne","fingerprint":"560230c3e0eaf79b7deac5e26a845fa83d55bf8b27b8d1ecd990044789d7f2c1","location":{"lines":{"begin":{"column":17,"line":617},"end":{"column":78,"line":617}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_(r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ce4f0c638b9e04021e783663d1444ced5e3014414f245a5f657d968c9ad9eef0","location":{"lines":{"begin":{"column":18,"line":78},"end":{"column":32,"line":78}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '(r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"c26d636628f51ce805242ffb786b815fa11512d5ed1eabf2790d029be0870964","location":{"lines":{"begin":{"column":49,"line":94},"end":{"column":56,"line":94}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"cd09e8e6cdf6e779e7433ca73a7c4e17c2116b40bb578afc518d241d753f62d0","location":{"lines":{"begin":{"column":12,"line":106},"end":{"column":30,"line":106}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"f3e834af77c5657144072f8792314ce1f9c44451b125dc30e2e9c0a2d57ad42b","location":{"lines":{"begin":{"column":20,"line":148},"end":{"column":35,"line":148}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"0b2b8f39565fdf50b124d7f293bbf42188460f6491aad5a8ac7b9246abcb13c5","location":{"lines":{"begin":{"column":20,"line":149},"end":{"column":39,"line":149}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]ui8_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"92018ceb1b39165e73a122d9526860cbcb58b8f58f57acad1b23876084b1a06e","location":{"lines":{"begin":{"column":18,"line":246},"end":{"column":27,"line":246}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"b599b7c3927e7c94373e711092fbc74bffd7e6a9587d6d05f9eee70a7cab3d11","location":{"lines":{"begin":{"column":20,"line":452},"end":{"column":29,"line":452}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"c6f08edba2f2080c1e5ea445d9cca1f7ec4bacaece6607983c5bf375f48defce","location":{"lines":{"begin":{"column":20,"line":453},"end":{"column":36,"line":453}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"cdb979807adb5c1550d298a951d5d6af35ee6cee89ca4babb9c226240a710436","location":{"lines":{"begin":{"column":20,"line":454},"end":{"column":29,"line":454}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"bf990966f19e8d014534ffc73f8d3abfdc5180fd726a321c77d80ffccf9cfd0f","location":{"lines":{"begin":{"column":20,"line":517},"end":{"column":30,"line":517}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"b599b7c3927e7c94373e711092fbc74bffd7e6a9587d6d05f9eee70a7cab3d11","location":{"lines":{"begin":{"column":20,"line":520},"end":{"column":29,"line":520}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"c3df0362a7ac9e37bcc8a01b9ef3e0d381f02894c3cb98c29295b5495ca4c45c","location":{"lines":{"begin":{"column":44,"line":701},"end":{"column":53,"line":701}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"e0096de9a2840da325220e70229436d651abccca46dc7a9bd0a19ee0096f31b9","location":{"lines":{"begin":{"column":16,"line":703},"end":{"column":32,"line":703}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"df100f7377a1b5c656302285fe1be2a6666a37ff4dbf554c0f0a26bdb722bf80","location":{"lines":{"begin":{"column":16,"line":704},"end":{"column":31,"line":704}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]r_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"cb22f2f9e1c8ee73d3dc0f0c7efa0c617c40ee64dadef493ccf6fd55967b9cfd","location":{"lines":{"begin":{"column":16,"line":705},"end":{"column":38,"line":705}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"44f132e161decfa65028eff4d35e9a37f1851bd8a8ec11048fed435d2952fc1b","location":{"lines":{"begin":{"column":16,"line":709},"end":{"column":27,"line":709}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '(r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"c26d636628f51ce805242ffb786b815fa11512d5ed1eabf2790d029be0870964","location":{"lines":{"begin":{"column":42,"line":842},"end":{"column":49,"line":842}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'e_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ab6faa6b3929adcd71e75d4ffba31da9cabc25d18b49dd59143650e583be477c","location":{"lines":{"begin":{"column":38,"line":844},"end":{"column":53,"line":844}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"zero-init-local-var","content":{"body":""},"description":"Variable de portée globale initialisée à 0","fingerprint":"d9b56ef0da38f3d07f162497309c1e61ee770b156772ed006c7ac8d2386b9d2b","location":{"lines":{"begin":{"column":36,"line":77},"end":{"column":36,"line":77}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/r_delta/source/majr.c"},"severity":"critical","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"8fdd072ca62abc9bbe24b81b60687230f7cc964b1489747c8afd5f541faaf6ab","location":{"lines":{"begin":{"column":3,"line":197},"end":{"column":27,"line":197}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPINT"},"description":"Absence de commentaire avant un appel","fingerprint":"e54732bbd63ea81317cf2f22eb0f0e28ca9154b8b94427e2fd8b6b99f3b086d8","location":{"lines":{"begin":{"column":7,"line":217},"end":{"column":25,"line":217}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"e8fb8cdbd50ba60f77359e555ab1fc7b6d313d9805966a62b5b2115fbbcc4c51","location":{"lines":{"begin":{"column":7,"line":222},"end":{"column":30,"line":222}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"e8fb8cdbd50ba60f77359e555ab1fc7b6d313d9805966a62b5b2115fbbcc4c51","location":{"lines":{"begin":{"column":11,"line":230},"end":{"column":34,"line":230}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPINT"},"description":"Absence de commentaire avant un appel","fingerprint":"e54732bbd63ea81317cf2f22eb0f0e28ca9154b8b94427e2fd8b6b99f3b086d8","location":{"lines":{"begin":{"column":13,"line":242},"end":{"column":31,"line":242}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"e8fb8cdbd50ba60f77359e555ab1fc7b6d313d9805966a62b5b2115fbbcc4c51","location":{"lines":{"begin":{"column":3,"line":281},"end":{"column":26,"line":281}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"8fdd072ca62abc9bbe24b81b60687230f7cc964b1489747c8afd5f541faaf6ab","location":{"lines":{"begin":{"column":3,"line":282},"end":{"column":27,"line":282}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"8fdd072ca62abc9bbe24b81b60687230f7cc964b1489747c8afd5f541faaf6ab","location":{"lines":{"begin":{"column":3,"line":329},"end":{"column":27,"line":329}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"8fdd072ca62abc9bbe24b81b60687230f7cc964b1489747c8afd5f541faaf6ab","location":{"lines":{"begin":{"column":3,"line":330},"end":{"column":27,"line":330}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"23a3f49359a387aace40b1a53ba5899204f74a43882ebfad2aaaa81e1a33f3ca","location":{"lines":{"begin":{"column":47,"line":110},"end":{"column":54,"line":110}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap](r|k|e|u|t|f)_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"1c32ae9c5888ba1e2a2cd4b7ebfd54701d6f6493b2709356073ddef869afe308","location":{"lines":{"begin":{"column":47,"line":111},"end":{"column":53,"line":111}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"2989785fed56602f5c289025594fb16b19d469962172c5a46702396255e74695","location":{"lines":{"begin":{"column":47,"line":112},"end":{"column":58,"line":112}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"1eee675443d7ed64564a27dde9108a117f5e3a3efb680cd382fbb54517796350","location":{"lines":{"begin":{"column":9,"line":115},"end":{"column":18,"line":115}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"c1ff33796ad3a025477901f5d6c154abd49e045931f98b7773ee753df5054c07","location":{"lines":{"begin":{"column":51,"line":140},"end":{"column":62,"line":140}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"513d20c873043f12ff511e1523c6dba65b03acd21323611611f07cdc56ca3091","location":{"lines":{"begin":{"column":51,"line":161},"end":{"column":61,"line":161}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ee016e5d5d77c7234ac0ab5b420e4a9ef3ae00e8500b184858badbdbcbc9ec39","location":{"lines":{"begin":{"column":50,"line":188},"end":{"column":61,"line":188}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'c[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"e32abb0730f330828e383292a1b3230ac2c7a0ee6bb16e4850f070707cc00689","location":{"lines":{"begin":{"column":17,"line":192},"end":{"column":25,"line":192}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]ui32_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"436e59b65f09da81fc3c97ab50a00e78b2436597e6f3d0187b5b0f04681c652d","location":{"lines":{"begin":{"column":72,"line":276},"end":{"column":87,"line":276}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/u_utilitaire/source/maju_utilitaire.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"free-null-check","content":{"body":""},"description":"Test de null avant appel à une fonction de libération mémoire","fingerprint":"c8a1517636a76237895d8e75b2d267f1f5a2054ffd5870e17953727670208384","location":{"lines":{"begin":{"column":6,"line":586},"end":{"column":36,"line":586}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"other_locations":[{"lines":{"begin":{"column":5,"line":588},"end":{"column":35,"line":588}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"}],"severity":"minor","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"b8115919a1a3427cb0555cd8a77c15675f1c88227118784e409f061d5205fde3","location":{"lines":{"begin":{"column":48,"line":369},"end":{"column":87,"line":369}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"703a3914d3ad570251c79a79c6d65480aa653ad672e7f7bd61ec7cd72ca06cbb","location":{"lines":{"begin":{"column":56,"line":831},"end":{"column":54,"line":832}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"48da11ccc08a09b4ec57cc18779a3f2ceae03b9a5817a2595a67eaefd43e3eed","location":{"lines":{"begin":{"column":47,"line":862},"end":{"column":88,"line":862}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"d4d085eeb27c86ec71ae930784124cae1fc7a8e23e054eac8a04786320be0506","location":{"lines":{"begin":{"column":48,"line":369},"end":{"column":87,"line":369}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"ceb99636440c10334ffda997daf8d3a525b5efacee51f2f3f48853409581f3de","location":{"lines":{"begin":{"column":56,"line":831},"end":{"column":54,"line":832}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"92d3306f31a96fb6a315ec08c1442029fa5678c09672cc51b304a6558f144409","location":{"lines":{"begin":{"column":47,"line":862},"end":{"column":88,"line":862}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"critical","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_valid_fd\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_FD"},"description":"Absence de commentaire avant un appel","fingerprint":"6143f014bce5781719a31f7b6ca74795d3df68b88e4d98d1893bf4b443054e22","location":{"lines":{"begin":{"column":3,"line":639},"end":{"column":17,"line":639}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'l_[ap]c_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"556266236839481fb052d090a09334e0d6e19323634213b9e90daee2b90ddf0f","location":{"lines":{"begin":{"column":16,"line":125},"end":{"column":38,"line":125}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ef57eaa674f255e9d20c78f657b423e2d97e0d3f963013fa4c9257db0e6f83fb","location":{"lines":{"begin":{"column":26,"line":144},"end":{"column":33,"line":144}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'pk_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"eb9ab81c84e594db3426cdd5a54d1a0b3e24e834a66a5825b0e929e17750fa74","location":{"lines":{"begin":{"column":57,"line":191},"end":{"column":64,"line":191}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'pk_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"eb9ab81c84e594db3426cdd5a54d1a0b3e24e834a66a5825b0e929e17750fa74","location":{"lines":{"begin":{"column":58,"line":196},"end":{"column":65,"line":196}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'pk_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"eb9ab81c84e594db3426cdd5a54d1a0b3e24e834a66a5825b0e929e17750fa74","location":{"lines":{"begin":{"column":51,"line":201},"end":{"column":58,"line":201}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'pk_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"eb9ab81c84e594db3426cdd5a54d1a0b3e24e834a66a5825b0e929e17750fa74","location":{"lines":{"begin":{"column":76,"line":239},"end":{"column":83,"line":239}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'pk_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"eb9ab81c84e594db3426cdd5a54d1a0b3e24e834a66a5825b0e929e17750fa74","location":{"lines":{"begin":{"column":77,"line":613},"end":{"column":84,"line":613}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"a7a93fd989a0362ee60fd63a58ca8c98435ad2dea1b881ccdec2ccb70f8d582e","location":{"lines":{"begin":{"column":10,"line":748},"end":{"column":27,"line":748}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ef57eaa674f255e9d20c78f657b423e2d97e0d3f963013fa4c9257db0e6f83fb","location":{"lines":{"begin":{"column":50,"line":856},"end":{"column":57,"line":856}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'pk_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"eb9ab81c84e594db3426cdd5a54d1a0b3e24e834a66a5825b0e929e17750fa74","location":{"lines":{"begin":{"column":50,"line":896},"end":{"column":57,"line":896}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'pk_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"eb9ab81c84e594db3426cdd5a54d1a0b3e24e834a66a5825b0e929e17750fa74","location":{"lines":{"begin":{"column":51,"line":921},"end":{"column":58,"line":921}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'pk_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"eb9ab81c84e594db3426cdd5a54d1a0b3e24e834a66a5825b0e929e17750fa74","location":{"lines":{"begin":{"column":44,"line":985},"end":{"column":51,"line":985}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex '[ap]k_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"ef57eaa674f255e9d20c78f657b423e2d97e0d3f963013fa4c9257db0e6f83fb","location":{"lines":{"begin":{"column":31,"line":990},"end":{"column":38,"line":990}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"1d57c84986891a8f79a92133a872aacc4bdb9350209c306710fc39551bdcf9a7","location":{"lines":{"begin":{"column":12,"line":1150},"end":{"column":20,"line":1150}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"typedef-name","content":{"body":"Le nom de type ne respecte pas le regex 'S[A-Z_]+'"},"description":"Le typedef doit être correctement formaté","fingerprint":"81e20621076e0b3bb765acdb2c1e40509862aafa23cff5fb2f7dccb84aefa5ec","location":{"lines":{"begin":{"column":3,"line":139},"end":{"column":37,"line":139}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"critical","type":"issue"} -{"categories":["decl"],"check_name":"typedef-name","content":{"body":"Le nom de type ne respecte pas le regex 'S[A-Z_]+'"},"description":"Le typedef doit être correctement formaté","fingerprint":"db6e98685bc83fdca5c4a107f4aff169792a8a3dd268d248d975b9f018fce646","location":{"lines":{"begin":{"column":3,"line":149},"end":{"column":28,"line":149}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"critical","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"c0a2a2ff62a810abc1596deed1b38d620b23b7e303978e1688c9c81e254cf44d","location":{"lines":{"begin":{"column":26,"line":130},"end":{"column":33,"line":130}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"8cb6efba7c45d70a55238275caa423757bd03dbb7b3bf4ed0bd4350a1279d3db","location":{"lines":{"begin":{"column":26,"line":131},"end":{"column":38,"line":131}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"c2740308482cdb61cf45241498e2110072516657957fb71ab9265cfd68e3c813","location":{"lines":{"begin":{"column":12,"line":134},"end":{"column":29,"line":134}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"9b589897d6caa5f309ca32394e72eb0ab30641851a435c1a2a34f5258f030adc","location":{"lines":{"begin":{"column":11,"line":135},"end":{"column":18,"line":135}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"284e9e3fef4b44ba14a82395b6b91c3ebb7896f92cf222db33e4b72b163a70e5","location":{"lines":{"begin":{"column":14,"line":136},"end":{"column":43,"line":136}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"c0a2a2ff62a810abc1596deed1b38d620b23b7e303978e1688c9c81e254cf44d","location":{"lines":{"begin":{"column":26,"line":144},"end":{"column":33,"line":144}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"8cb6efba7c45d70a55238275caa423757bd03dbb7b3bf4ed0bd4350a1279d3db","location":{"lines":{"begin":{"column":26,"line":145},"end":{"column":38,"line":145}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"e18223ef30c49f9c88e9a757ee17f923f6f41ba9e77fd1ed7cb3d10346c0bc39","location":{"lines":{"begin":{"column":26,"line":146},"end":{"column":34,"line":146}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"50b07154b3d96a7186626ecaa7d6f60c19c8101556bbb3dd6cd7d5b5f7bc3943","location":{"lines":{"begin":{"column":26,"line":147},"end":{"column":36,"line":147}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"a63646e3fb62dd98de5a7f279007b830f9be9594d60e91dc994957f188cef6fe","location":{"lines":{"begin":{"column":19,"line":167},"end":{"column":34,"line":167}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"d4f80bbdb6f61dd5443bc9c8946bf3aae26a0173f04237255bb6c5b862e30553","location":{"lines":{"begin":{"column":23,"line":169},"end":{"column":41,"line":169}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"c17d238cdd32db761a103ae2bc7fd5082231c25daa6271254df3b4112d378863","location":{"lines":{"begin":{"column":18,"line":171},"end":{"column":26,"line":171}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"struct-member-prefix","content":{"body":"Le membre ne respecte pas le regex '\\b([a-z]{3})_'"},"description":"Les membres de structures doivent commencer par un préfixe","fingerprint":"c386be5f54a8ff814444093f73ed2e8ba897b4a3000c1f904e4e94ca9db848a7","location":{"lines":{"begin":{"column":18,"line":173},"end":{"column":33,"line":173}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/m_maj/source/majm.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"free-null-check","content":{"body":""},"description":"Test de null avant appel à une fonction de libération mémoire","fingerprint":"93d7b08cc5c6f856d55bacfea43c2f21f5190c8a413a73fcdef071b3b41ece06","location":{"lines":{"begin":{"column":6,"line":683},"end":{"column":20,"line":683}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"other_locations":[{"lines":{"begin":{"column":5,"line":685},"end":{"column":19,"line":685}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"}],"severity":"minor","type":"issue"} -{"categories":["call"],"check_name":"free-null-check","content":{"body":""},"description":"Test de null avant appel à une fonction de libération mémoire","fingerprint":"24ff545a0f1bdb6b3e7a4bc2e942cd3c406a35b85c8d86051d616fc332c91ab5","location":{"lines":{"begin":{"column":6,"line":687},"end":{"column":28,"line":687}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"other_locations":[{"lines":{"begin":{"column":5,"line":689},"end":{"column":27,"line":689}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"}],"severity":"minor","type":"issue"} -{"categories":["call"],"check_name":"free-null-check","content":{"body":""},"description":"Test de null avant appel à une fonction de libération mémoire","fingerprint":"7cd4229a69da6bdcbb0025bd09b0b3503ca83f09ccbf995726a7d2199d921c30","location":{"lines":{"begin":{"column":6,"line":691},"end":{"column":56,"line":691}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"other_locations":[{"lines":{"begin":{"column":5,"line":693},"end":{"column":55,"line":693}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"}],"severity":"minor","type":"issue"} -{"categories":["call"],"check_name":"check-alloc","content":{"body":"Absence d'appel à prereq_ptr_non_nul après une allocation mémoire"},"description":"Absence de vérification après une allocation mémoire","fingerprint":"b0e048ed5c1e027f7acf3bff90d5b522aa4b80399d63dea2188b87cb64d9603a","location":{"lines":{"begin":{"column":33,"line":563},"end":{"column":66,"line":563}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"forbidden-function","content":{"body":""},"description":"Appel d'une fonction blacklisté","fingerprint":"5d8e22e3f281c7af84581af8b9c55ca9adba79a9b6da54cc36e3e2ee65a7b7ce","location":{"lines":{"begin":{"column":33,"line":563},"end":{"column":66,"line":563}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"critical","type":"issue"} -{"categories":["call"],"check_name":"alloc-magic-number","content":{"body":""},"description":"Appel d'une allocation mémoire avec un nombre magique","fingerprint":"e5a829faeae3a01168871cbf88e35eecea3d8c1be67173454e12130d1e99390e","location":{"lines":{"begin":{"column":61,"line":563},"end":{"column":61,"line":563}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"major","type":"issue"} -{"categories":["call"],"check_name":"alloc-magic-number","content":{"body":""},"description":"Appel d'une allocation mémoire avec un nombre magique","fingerprint":"e5a829faeae3a01168871cbf88e35eecea3d8c1be67173454e12130d1e99390e","location":{"lines":{"begin":{"column":65,"line":563},"end":{"column":65,"line":563}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"major","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"4b3b1ad98628accfd6ba27aded099e37b31d9ca23f36e2195b1094780080acee","location":{"lines":{"begin":{"column":5,"line":157},"end":{"column":28,"line":157}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"4b3b1ad98628accfd6ba27aded099e37b31d9ca23f36e2195b1094780080acee","location":{"lines":{"begin":{"column":5,"line":165},"end":{"column":28,"line":165}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"4b3b1ad98628accfd6ba27aded099e37b31d9ca23f36e2195b1094780080acee","location":{"lines":{"begin":{"column":3,"line":210},"end":{"column":26,"line":210}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"4b3b1ad98628accfd6ba27aded099e37b31d9ca23f36e2195b1094780080acee","location":{"lines":{"begin":{"column":3,"line":211},"end":{"column":26,"line":211}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"f5f65427d1ca903d4ea0f8742fbfc53ae54159ff570b6e17c2a3069958e1f02c","location":{"lines":{"begin":{"column":3,"line":212},"end":{"column":27,"line":212}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"f5f65427d1ca903d4ea0f8742fbfc53ae54159ff570b6e17c2a3069958e1f02c","location":{"lines":{"begin":{"column":3,"line":477},"end":{"column":27,"line":477}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"4b3b1ad98628accfd6ba27aded099e37b31d9ca23f36e2195b1094780080acee","location":{"lines":{"begin":{"column":3,"line":622},"end":{"column":26,"line":622}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"f5f65427d1ca903d4ea0f8742fbfc53ae54159ff570b6e17c2a3069958e1f02c","location":{"lines":{"begin":{"column":3,"line":623},"end":{"column":27,"line":623}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"f5f65427d1ca903d4ea0f8742fbfc53ae54159ff570b6e17c2a3069958e1f02c","location":{"lines":{"begin":{"column":3,"line":624},"end":{"column":27,"line":624}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"4b3b1ad98628accfd6ba27aded099e37b31d9ca23f36e2195b1094780080acee","location":{"lines":{"begin":{"column":3,"line":645},"end":{"column":26,"line":645}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_cmpuint\\{.+,\\s*[<>=!]{1,2},.+\\}' attendu pour l'appel de SNTL_PRECOND_CMPUINT"},"description":"Absence de commentaire avant un appel","fingerprint":"12d282cb4ff56c484b6ccc97aef16345ccdcacfca27d69028a25a95bfb8eb0a8","location":{"lines":{"begin":{"column":3,"line":652},"end":{"column":22,"line":652}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"4b3b1ad98628accfd6ba27aded099e37b31d9ca23f36e2195b1094780080acee","location":{"lines":{"begin":{"column":3,"line":659},"end":{"column":26,"line":659}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_ptr_non_nul\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_PTR_NON_NUL"},"description":"Absence de commentaire avant un appel","fingerprint":"4b3b1ad98628accfd6ba27aded099e37b31d9ca23f36e2195b1094780080acee","location":{"lines":{"begin":{"column":3,"line":741},"end":{"column":26,"line":741}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["comm"],"check_name":"call-tag","content":{"body":"Commentaire '\\/\\/\\/ @pre_str_non_vide\\{.+\\}' attendu pour l'appel de SNTL_PRECOND_STR_NON_VIDE"},"description":"Absence de commentaire avant un appel","fingerprint":"f5f65427d1ca903d4ea0f8742fbfc53ae54159ff570b6e17c2a3069958e1f02c","location":{"lines":{"begin":{"column":3,"line":742},"end":{"column":27,"line":742}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"minor","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"56cb779099f8416d00e0322c6ea0197e193706457ae5d4fb5a3c9382e66ba65a","location":{"lines":{"begin":{"column":9,"line":207},"end":{"column":26,"line":207}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"var-name","content":{"body":"Le nom de variable ne respecte pas le regex 'i_\\w+'"},"description":"Les noms de variables doivent être correctement formatés","fingerprint":"56cb779099f8416d00e0322c6ea0197e193706457ae5d4fb5a3c9382e66ba65a","location":{"lines":{"begin":{"column":24,"line":270},"end":{"column":41,"line":270}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"major","type":"issue"} -{"categories":["decl"],"check_name":"function-name","content":{"body":"Le nom de fonction ne respecte pas le regex '\\b[A-Z]\\w+\\b'"},"description":"Les fonctions doivent être nommées en fonction de leur portée","fingerprint":"c6d3c8302798d7c12dc1abc08745c90e25bf3988d6e07b518c92ee0bc8749c17","location":{"lines":{"begin":{"column":16,"line":75},"end":{"column":33,"line":75}},"path":"/home/ftrefou/repos/project-A1-5.x/sous-systemes/gesmaj/proc_gesmaj/x_manifest/source/majx.c"},"severity":"major","type":"issue"} diff --git a/testdata/reports/codeparser-report.json b/testdata/reports/codeparser-report.json new file mode 100644 index 0000000..b418c04 --- /dev/null +++ b/testdata/reports/codeparser-report.json @@ -0,0 +1,13 @@ +{"type":"issue","check_name":"buffer-overflow","description":"Unsafe use of strcpy(): destination buffer size is not checked.","categories":["Bug Risk","Security"],"severity":"critical","location":{"path":"src/core/utils.c","lines":{"begin":9,"end":9}},"fingerprint":"cp-bo-001","content":{"body":"strcpy() copies bytes until a null terminator is found without verifying the destination buffer size. Use strncpy(), strlcpy(), or snprintf() instead. This is a common source of stack-based buffer overflow vulnerabilities (CWE-120)."}} +{"type":"issue","check_name":"missing-null-check","description":"Return value of malloc() not checked for NULL before use.","categories":["Bug Risk"],"severity":"major","location":{"path":"src/core/utils.c","lines":{"begin":26,"end":27}},"fingerprint":"cp-null-001","content":{"body":"Memory allocation can fail and return NULL, especially under low-memory conditions. Always check the return value before dereferencing the pointer to prevent a null pointer dereference (CWE-476)."}} +{"type":"issue","check_name":"div-by-zero","description":"Potential division by zero: parameter 'b' is not validated before use as divisor.","categories":["Bug Risk"],"severity":"major","location":{"path":"src/core/utils.c","lines":{"begin":14,"end":14}},"fingerprint":"cp-dbz-001","content":{"body":"If 'b' is zero, this expression triggers undefined behaviour on signed integers and a SIGFPE signal on most platforms. Add a guard: if (b == 0) return 0; or assert(b != 0)."}} +{"type":"issue","check_name":"global-variable","description":"Global mutable variable 'global_buffer' declared at file scope.","categories":["Style","Complexity"],"severity":"minor","location":{"path":"src/core/utils.c","lines":{"begin":5,"end":5}},"fingerprint":"cp-global-001","content":{"body":"Global variables introduce hidden state that makes functions hard to test, reason about, and use safely from multiple threads. Encapsulate state in a struct and pass it explicitly as a parameter."}} +{"type":"issue","check_name":"buffer-overflow","description":"memcpy() called with an unchecked caller-supplied size argument.","categories":["Bug Risk","Security"],"severity":"critical","location":{"path":"src/core/utils.c","lines":{"begin":20,"end":20}},"fingerprint":"cp-bo-002","content":{"body":"The 'size' parameter is not validated against the destination buffer capacity (256 bytes). If size > 256, this overwrites adjacent stack memory, enabling stack-smashing attacks. Add: if (size > sizeof(buf)) return;"}} +{"type":"issue","check_name":"use-after-free","description":"'global_buffer' freed in free_resources() but accessible via copy_string() in subsequent calls.","categories":["Bug Risk","Security"],"severity":"blocker","location":{"path":"src/core/utils.c","lines":{"begin":32,"end":33}},"fingerprint":"cp-uaf-001","content":{"body":"After free(global_buffer) the pointer is set to NULL locally, but any external copy of the pointer can still be dereferenced, causing heap use-after-free (CWE-416). This is a common vector for heap exploitation."},"other_locations":[{"path":"src/core/utils.c","lines":{"begin":9,"end":9}}]} +{"type":"issue","check_name":"missing-error-check","description":"Return value of printf() is not checked.","categories":["Bug Risk"],"severity":"info","location":{"path":"src/core/utils.c","lines":{"begin":21,"end":21}},"fingerprint":"cp-ec-001","content":{"body":"In production code, the return value of I/O functions such as printf() should be checked to detect write errors, especially when writing to files or sockets rather than stdout."}} +{"type":"issue","check_name":"global-variable","description":"Global Parser instance 'g_parser' declared in header file.","categories":["Style","Complexity"],"severity":"minor","location":{"path":"src/core/parser.h","lines":{"begin":25,"end":25}},"fingerprint":"cp-global-002","content":{"body":"Declaring a global instance in a header file means every translation unit that includes this header shares the same instance, causing coupling and thread-safety issues. Use an accessor function or pass the context as a parameter."}} +{"type":"issue","check_name":"fixed-array","description":"Fixed-size array 'tokens[MAX_TOKENS]' may overflow for inputs larger than 100 tokens.","categories":["Bug Risk"],"severity":"major","location":{"path":"src/core/parser.h","lines":{"begin":19,"end":19}},"fingerprint":"cp-arr-001","content":{"body":"The MAX_TOKENS constant (100) imposes a hard limit on input size. Inputs exceeding this will cause silent truncation or a write past the end of the array. Consider using a dynamically resizable array with a documented growth strategy."}} +{"type":"issue","check_name":"fixed-size-buffer","description":"Fixed-size 'value[256]' field in Token may silently truncate long token values.","categories":["Bug Risk"],"severity":"minor","location":{"path":"src/core/parser.h","lines":{"begin":12,"end":12}},"fingerprint":"cp-fsb-001","content":{"body":"Token values longer than 255 characters will be silently truncated during a strcpy/strncpy into this field, potentially corrupting token semantics. Use a dynamically allocated string or a length-prefixed representation."}} +{"type":"issue","check_name":"raw-pointer","description":"Raw pointer 'source' member has no ownership semantics.","categories":["Style"],"severity":"minor","location":{"path":"src/core/parser.h","lines":{"begin":21,"end":21}},"fingerprint":"cp-ptr-001","content":{"body":"Raw pointer members make ownership and lifetime ambiguous. Document clearly who allocates and frees this pointer, or use a reference-counted handle and a dedicated destructor function."}} +{"type":"issue","check_name":"magic-number","description":"Magic number 256 used directly in struct definition.","categories":["Style"],"severity":"info","location":{"path":"src/core/parser.h","lines":{"begin":12,"end":12}},"fingerprint":"cp-magic-001","content":{"body":"Replace the literal 256 with a named constant (e.g. MAX_TOKEN_VALUE_LEN) defined alongside MAX_TOKENS so that the constraint is visible and can be changed in one place."}} +{"type":"issue","check_name":"integer-overflow","description":"Potential integer overflow in malloc size computation.","categories":["Bug Risk","Security"],"severity":"major","location":{"path":"src/core/utils.c","lines":{"begin":26,"end":26}},"fingerprint":"cp-io-001","content":{"body":"If 'n' is attacker-controlled and large, the expression n * sizeof(int) can overflow a signed int, resulting in a smaller-than-expected allocation. The subsequent writes to arr[0..n-1] then write past the allocation, causing a heap buffer overflow (CWE-122)."}} diff --git a/testdata/reports/eslint-report.json b/testdata/reports/eslint-report.json new file mode 100644 index 0000000..293a1f5 --- /dev/null +++ b/testdata/reports/eslint-report.json @@ -0,0 +1,12 @@ +{"type":"issue","check_name":"no-var","description":"Unexpected var, use let or const instead.","categories":["Style"],"severity":"minor","location":{"path":"src/auth/auth.ts","lines":{"begin":11,"end":11}},"fingerprint":"eslint-no-var-001","content":{"body":"Variables declared with `var` are function-scoped and hoisted, which can lead to subtle bugs. Use `let` for mutable variables or `const` for immutable bindings."}} +{"type":"issue","check_name":"@typescript-eslint/no-explicit-any","description":"Unexpected any. Specify a different type.","categories":["Style"],"severity":"minor","location":{"path":"src/auth/auth.ts","lines":{"begin":11,"end":11}},"fingerprint":"eslint-no-any-001","content":{"body":"Using the `any` type disables TypeScript's static type checking. Consider using `unknown` with a type guard, or define a proper interface."}} +{"type":"issue","check_name":"eqeqeq","description":"Expected '===' and instead saw '=='.","categories":["Style","Bug Risk"],"severity":"minor","location":{"path":"src/auth/auth.ts","lines":{"begin":15,"end":15}},"fingerprint":"eslint-eqeqeq-001","content":{"body":"The `==` operator performs type coercion before comparison, which can produce unexpected results. Always use `===` for strict equality checks."}} +{"type":"issue","check_name":"@typescript-eslint/no-explicit-any","description":"Unexpected any. Specify a different type.","categories":["Style"],"severity":"minor","location":{"path":"src/auth/auth.ts","lines":{"begin":23,"end":23}},"fingerprint":"eslint-no-any-002","content":{"body":"Define a proper `User` interface with the expected properties instead of using `any` as the parameter type."}} +{"type":"issue","check_name":"@typescript-eslint/explicit-module-boundary-types","description":"Missing return type on function 'generateToken'.","categories":["Style"],"severity":"info","location":{"path":"src/auth/auth.ts","lines":{"begin":18,"end":21}},"fingerprint":"eslint-returntype-001","content":{"body":"Explicitly specifying return types improves code readability and helps TypeScript catch type errors earlier in the compilation pipeline."}} +{"type":"issue","check_name":"complexity","description":"Function 'verifyToken' has a cyclomatic complexity of 3. Maximum allowed is 2.","categories":["Complexity"],"severity":"info","location":{"path":"src/auth/auth.ts","lines":{"begin":10,"end":16}},"fingerprint":"eslint-complexity-001","content":{"body":"High cyclomatic complexity makes code harder to test and maintain. Consider extracting conditional logic into small, well-named helper functions."}} +{"type":"issue","check_name":"no-console","description":"Unexpected console statement.","categories":["Style"],"severity":"info","location":{"path":"src/api/router.ts","lines":{"begin":13,"end":13}},"fingerprint":"eslint-console-001","content":{"body":"console.log statements should not be present in production code. Use a structured logger (e.g. pino, winston) with appropriate log levels instead."}} +{"type":"issue","check_name":"@typescript-eslint/no-floating-promises","description":"Promises must be awaited, end with a call to .catch, or end with a call to .then with a rejection handler.","categories":["Bug Risk"],"severity":"major","location":{"path":"src/api/router.ts","lines":{"begin":5,"end":9}},"fingerprint":"eslint-fp-001","content":{"body":"Unhandled promise rejections can cause silent failures in Express route handlers. Ensure all async operations are properly awaited and errors are caught and forwarded to next()."}} +{"type":"issue","check_name":"@typescript-eslint/no-explicit-any","description":"Unexpected any. Specify a different type.","categories":["Style"],"severity":"minor","location":{"path":"src/api/router.ts","lines":{"begin":27,"end":27}},"fingerprint":"eslint-no-any-003","content":{"body":"Use the built-in `Error` type or define a custom error interface instead of `any` for the error parameter."}} +{"type":"issue","check_name":"@typescript-eslint/no-unused-vars","description":"'formatError' is defined but never used.","categories":["Style"],"severity":"minor","location":{"path":"src/api/router.ts","lines":{"begin":27,"end":29}},"fingerprint":"eslint-unused-001","content":{"body":"Remove unused function declarations to keep the codebase clean, or export the function if it is intended to be used by other modules."}} +{"type":"issue","check_name":"no-restricted-syntax","description":"Template literal containing SQL keyword — use a parameterised query instead.","categories":["Security","Bug Risk"],"severity":"major","location":{"path":"src/api/router.ts","lines":{"begin":7,"end":7}},"fingerprint":"eslint-sql-001","content":{"body":"Interpolating user-controlled values into SQL strings enables SQL injection. Use a parameterised query: db.query('SELECT * FROM users WHERE id = ?', [id])."}} +{"type":"issue","check_name":"no-restricted-syntax","description":"Template literal containing SQL keyword — use a parameterised query instead.","categories":["Security","Bug Risk"],"severity":"major","location":{"path":"src/api/router.ts","lines":{"begin":23,"end":23}},"fingerprint":"eslint-sql-002","content":{"body":"Interpolating user-controlled values into a DELETE statement enables SQL injection. An attacker can delete arbitrary rows or bypass WHERE conditions entirely."}} diff --git a/testdata/reports/semgrep-report.json b/testdata/reports/semgrep-report.json new file mode 100644 index 0000000..8b10291 --- /dev/null +++ b/testdata/reports/semgrep-report.json @@ -0,0 +1,11 @@ +{"type":"issue","check_name":"sql-injection","description":"User-controlled data flows into a SQL query without sanitization.","categories":["Security"],"severity":"blocker","location":{"path":"src/api/router.ts","lines":{"begin":7,"end":7}},"fingerprint":"sg-sqli-001","content":{"body":"req.params.id is interpolated directly into the SQL string. An attacker can set id to e.g. '1 OR 1=1' to bypass WHERE clauses or '1; DROP TABLE users;--' to execute arbitrary statements. Use a parameterised query: db.query('SELECT * FROM users WHERE id = ?', [id])."}} +{"type":"issue","check_name":"sql-injection","description":"User-controlled data flows into a DELETE SQL query without sanitization.","categories":["Security"],"severity":"blocker","location":{"path":"src/api/router.ts","lines":{"begin":23,"end":23}},"fingerprint":"sg-sqli-002","content":{"body":"The DELETE endpoint interpolates req.params.id without any validation or escaping. This allows privilege escalation (delete any row) or destructive injection. Replace with a parameterised statement and add authorisation checks."}} +{"type":"issue","check_name":"hardcoded-secret","description":"Hard-coded cryptographic secret detected in source code.","categories":["Security"],"severity":"critical","location":{"path":"src/auth/auth.ts","lines":{"begin":3,"end":3}},"fingerprint":"sg-secret-001","content":{"body":"The value 'hardcoded-secret-abc123' is committed to version control. Any developer, CI system, or attacker with repository access can extract it and forge tokens. Load secrets from environment variables (process.env.SECRET_KEY) or a secrets manager at runtime."}} +{"type":"issue","check_name":"weak-crypto-hash","description":"MD5 is a cryptographically broken hash algorithm.","categories":["Security"],"severity":"major","location":{"path":"src/auth/auth.ts","lines":{"begin":7,"end":7}},"fingerprint":"sg-crypto-001","content":{"body":"MD5 is vulnerable to collision attacks and, for passwords, can be reversed via rainbow tables in seconds. Use a slow, salted password hashing function: bcrypt (cost ≥ 12), scrypt, or Argon2id."}} +{"type":"issue","check_name":"credential-exposure","description":"Password value passed to console.log — credentials will appear in application logs.","categories":["Security"],"severity":"critical","location":{"path":"src/api/router.ts","lines":{"begin":13,"end":13}},"fingerprint":"sg-cred-001","content":{"body":"Logging the raw password exposes credentials in log files, monitoring dashboards, and crash reports. Log only non-sensitive fields such as username and timestamp, and redact or omit the password entirely."}} +{"type":"issue","check_name":"insecure-token","description":"Authentication token generated without a cryptographic signature.","categories":["Security"],"severity":"major","location":{"path":"src/auth/auth.ts","lines":{"begin":20,"end":20}},"fingerprint":"sg-token-001","content":{"body":"btoa(JSON.stringify(payload)) produces a base64-encoded string that any client can decode and modify without detection. Use a proper JWT library with a signing algorithm (HS256 with a strong secret, or RS256/ES256 with an asymmetric key pair)."}} +{"type":"issue","check_name":"missing-authentication","description":"DELETE endpoint performs a destructive operation without verifying caller identity.","categories":["Security"],"severity":"major","location":{"path":"src/api/router.ts","lines":{"begin":21,"end":25}},"fingerprint":"sg-auth-001","content":{"body":"The /user/:id DELETE route executes a database deletion without checking that the request is authenticated or that the caller is authorised to delete the target resource. Add an authentication middleware and a resource ownership check."}} +{"type":"issue","check_name":"buffer-overflow","description":"strcpy() is a banned API and a known source of stack-based buffer overflows.","categories":["Security","Bug Risk"],"severity":"critical","location":{"path":"src/core/utils.c","lines":{"begin":9,"end":9}},"fingerprint":"sg-bo-001","content":{"body":"strcpy() has been removed from secure coding standards (SEI CERT C STR31-C, CWE-120). Replace with strncpy(dst, src, dst_size - 1) followed by explicit null-termination, or use a safe string library."}} +{"type":"issue","check_name":"buffer-overflow","description":"memcpy() called with an attacker-controlled length — potential stack smash.","categories":["Security","Bug Risk"],"severity":"critical","location":{"path":"src/core/utils.c","lines":{"begin":20,"end":20}},"fingerprint":"sg-bo-002","content":{"body":"The 'size' parameter flows from the caller without bounds checking against buf[256]. Writing beyond the buffer boundary overwrites the return address, enabling stack-smashing exploits (CWE-121). Add: if ((size_t)size > sizeof(buf)) { /* handle error */ return; }"}} +{"type":"issue","check_name":"integer-overflow","description":"Potential integer overflow in malloc() size computation: n * sizeof(int).","categories":["Security","Bug Risk"],"severity":"major","location":{"path":"src/core/utils.c","lines":{"begin":26,"end":26}},"fingerprint":"sg-io-001","content":{"body":"If 'n' is attacker-controlled, the multiplication n * sizeof(int) can overflow a signed int, wrapping to a small positive value. malloc() then allocates a small buffer, and subsequent writes to arr[0..n-1] overflow the heap (CWE-122). Use size_t arithmetic and a checked multiply."}} +{"type":"issue","check_name":"use-after-free","description":"Heap memory freed in free_resources() remains accessible through 'global_buffer'.","categories":["Security","Bug Risk"],"severity":"critical","location":{"path":"src/core/utils.c","lines":{"begin":32,"end":32}},"fingerprint":"sg-uaf-001","content":{"body":"After free(global_buffer), any code path that later dereferences a stale copy of the pointer triggers undefined behaviour. Heap use-after-free is a critical vulnerability (CWE-416) commonly exploited to achieve arbitrary code execution via heap spray or tcache poisoning."}} diff --git a/testdata/src/api/router.ts b/testdata/src/api/router.ts new file mode 100644 index 0000000..c4e37c9 --- /dev/null +++ b/testdata/src/api/router.ts @@ -0,0 +1,31 @@ +import express, { Request, Response } from 'express'; + +const router = express.Router(); + +router.get('/user/:id', async (req: Request, res: Response) => { + const id = req.params.id; + const query = `SELECT * FROM users WHERE id = ${id}`; + res.json({ query }); +}); + +router.post('/login', async (req: Request, res: Response) => { + const { username, password } = req.body; + console.log('Login attempt:', username, password); + if (!username || !password) { + res.status(400).send('Missing credentials'); + return; + } + res.send('ok'); +}); + +router.delete('/user/:id', async (req: Request, res: Response) => { + const id = req.params.id; + const query = `DELETE FROM users WHERE id = ${id}`; + res.json({ deleted: id }); +}); + +function formatError(err: any): string { + return `Error: ${err.message}`; +} + +export default router; diff --git a/testdata/src/auth/auth.ts b/testdata/src/auth/auth.ts new file mode 100644 index 0000000..e442797 --- /dev/null +++ b/testdata/src/auth/auth.ts @@ -0,0 +1,25 @@ +import crypto from 'crypto'; + +const SECRET_KEY = 'hardcoded-secret-abc123'; +const TOKEN_EXPIRY = 3600000; + +export function hashPassword(password: string): string { + return crypto.createHash('md5').update(password).digest('hex'); +} + +export function verifyToken(token: string): boolean { + var decoded: any = JSON.parse(atob(token)); + if (decoded.exp < Date.now()) { + return false; + } + return decoded.valid == true; +} + +export function generateToken(userId: number, role: string): string { + const payload = { userId, role, exp: Date.now() + TOKEN_EXPIRY }; + return btoa(JSON.stringify(payload)); +} + +export function checkAdmin(user: any): boolean { + return user.role === 'admin'; +} diff --git a/testdata/src/core/parser.h b/testdata/src/core/parser.h new file mode 100644 index 0000000..8f078af --- /dev/null +++ b/testdata/src/core/parser.h @@ -0,0 +1,33 @@ +#ifndef PARSER_H +#define PARSER_H + +#include + +#define MAX_TOKENS 100 +#define BUFFER_SIZE 1024 + +typedef struct +{ + char type[32]; + char value[256]; + int line; + int column; +} Token; + +typedef struct +{ + Token tokens[MAX_TOKENS]; + int count; + char *source; + int capacity; +} Parser; + +extern Parser *g_parser; + +void parser_init(Parser *p, const char *src, size_t len); +Token parser_next(Parser *p); +int parser_peek(Parser *p); +void parser_reset(Parser *p); +void parser_free(Parser *p); + +#endif /* PARSER_H */ diff --git a/testdata/src/core/utils.c b/testdata/src/core/utils.c new file mode 100644 index 0000000..540e3b6 --- /dev/null +++ b/testdata/src/core/utils.c @@ -0,0 +1,34 @@ +#include +#include +#include + +char *global_buffer = NULL; + +void copy_string(char *dst, const char *src) +{ + strcpy(dst, src); +} + +int safe_divide(int a, int b) +{ + return a / b; +} + +void process_input(void *data, int size) +{ + char buf[256]; + memcpy(buf, data, size); + printf("%s\n", buf); +} + +int *create_array(int n) +{ + int *arr = malloc(n * sizeof(int)); + return arr; +} + +void free_resources(void) +{ + free(global_buffer); + global_buffer = NULL; +} From c76977fbf7cf482227375e63c7d504a6c0b45bca Mon Sep 17 00:00:00 2001 From: TREFOU Felix Date: Thu, 30 Apr 2026 11:18:11 +0200 Subject: [PATCH 02/28] test: update real-data tests to use new report filenames Co-Authored-By: Claude Sonnet 4.6 --- test/parser.test.ts | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/test/parser.test.ts b/test/parser.test.ts index 1f4dc60..d4b1c9e 100644 --- a/test/parser.test.ts +++ b/test/parser.test.ts @@ -185,27 +185,20 @@ describe('parseCodeClimateFile', () => { }); describe('real test data', () => { - it('parses NDJSON testdata file (codeparser-dispatch.json)', () => { - const content = fs.readFileSync( - path.join(TESTDATA_DIR, 'codeparser-dispatch.json'), - 'utf-8' - ); - const issues = parseCodeClimateFile(content); - assert.ok(issues.length > 0, 'should parse at least one issue'); - for (const issue of issues) { - assert.strictEqual(issue.type, 'issue'); - assert.strictEqual(typeof issue.check_name, 'string'); - assert.ok(issue.location?.path, 'each issue should have a path'); - } - }); - - it('parses NDJSON testdata file (codeparser-gesmaj.json)', () => { - const content = fs.readFileSync( - path.join(TESTDATA_DIR, 'codeparser-gesmaj.json'), - 'utf-8' - ); - const issues = parseCodeClimateFile(content); - assert.ok(issues.length > 0, 'should parse at least one issue'); - }); + for (const filename of ['eslint-report.json', 'codeparser-report.json', 'semgrep-report.json']) { + it(`parses NDJSON testdata file (${filename})`, () => { + const content = fs.readFileSync( + path.join(TESTDATA_DIR, filename), + 'utf-8' + ); + const issues = parseCodeClimateFile(content); + assert.ok(issues.length > 0, 'should parse at least one issue'); + for (const issue of issues) { + assert.strictEqual(issue.type, 'issue'); + assert.strictEqual(typeof issue.check_name, 'string'); + assert.ok(issue.location?.path, 'each issue should have a path'); + } + }); + } }); }); From dfffe201a70982964f916365c3fbb175ec9d8bb3 Mon Sep 17 00:00:00 2001 From: TREFOU Felix Date: Thu, 30 Apr 2026 11:49:09 +0200 Subject: [PATCH 03/28] fix: distinguish 'no patterns' from 'no files matched' in reloadConfig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both cases returned entries.length === 0 and showed the same misleading 'No patterns configured' message even when patterns were set but the glob matched nothing. Now checks getRawPatterns() before running the glob so each case gets its own message: - No patterns → 'No patterns configured. Create …' - Patterns set, nothing matched → 'No files matched the configured patterns. Check your glob patterns…' - Files matched but failed to load → 'Patterns matched files but none could be loaded. Check the Output channel…' Co-Authored-By: Claude Sonnet 4.6 --- src/extension.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 2833904..75b23e3 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -50,11 +50,15 @@ function resolveColumnValues(entry: PatternEntry, filePath: string): Record { - const rawPatterns: (string | PatternEntry)[] = config?.reportPatterns?.length +function getRawPatterns(config: ProjectConfig | null): (string | PatternEntry)[] { + return config?.reportPatterns?.length ? config.reportPatterns : vscode.workspace.getConfiguration('codeclimateVisualiser').get('reportPatterns', []); +} + +/** Resolve configured patterns → resolved file entries with column values. */ +async function findConfiguredFiles(config: ProjectConfig | null): Promise { + const rawPatterns = getRawPatterns(config); const results: ResolvedFile[] = []; for (const raw of rawPatterns) { @@ -177,20 +181,26 @@ export function activate(context: vscode.ExtensionContext): void { decorationProvider.clearDecorations(); const projectConfig = await readProjectConfig(); issueManager.setCustomColumns(projectConfig?.customColumns ?? []); - const entries = await findConfiguredFiles(projectConfig); - if (entries.length === 0) { + if (getRawPatterns(projectConfig).length === 0) { vscode.window.showInformationMessage( 'No patterns configured. Create .vscode/codeclimate-visualiser.json or add ' + '"codeclimateVisualiser.reportPatterns" to .vscode/settings.json.', ); return; } + const entries = await findConfiguredFiles(projectConfig); + if (entries.length === 0) { + vscode.window.showWarningMessage( + 'No files matched the configured patterns. Check your glob patterns and verify the files exist.', + ); + return; + } const loaded = await loadFromEntries(entries); if (loaded > 0) { panel.show(); vscode.window.showInformationMessage(`Reloaded ${loaded} report${loaded !== 1 ? 's' : ''}.`); } else { - vscode.window.showWarningMessage('No files matched the configured patterns.'); + vscode.window.showWarningMessage('Patterns matched files but none could be loaded. Check the Output channel for details.'); } }), ); From 3fd4997479eb7159e3ad4d90a3ae97c503be2b09 Mon Sep 17 00:00:00 2001 From: TREFOU Felix Date: Thu, 30 Apr 2026 14:09:53 +0200 Subject: [PATCH 04/28] fix: distinct error messages for invalid regex, missing file, no glob match; fix schema showQuickFilter; add tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - findConfiguredFiles now returns {entries, errors} with typed PatternError (invalidRegex | fileNotFound | noFilesMatched) - reloadConfig shows a distinct warning/error per pattern failure instead of a single generic message - Added getRawPatterns helper so "no patterns" check runs before glob expansion - Schema: renamed showFilter → showQuickFilter (main webview filter bar), added showFilter (sidebar panel) - 50 tests passing: +5 customColumns tests in issueManager, +7 real-data assertions in parser Co-Authored-By: Claude Sonnet 4.6 --- schemas/codeclimate-visualiser.schema.json | 9 ++- src/extension.ts | 71 +++++++++++++++++----- test/issueManager.test.ts | 44 ++++++++++++++ test/parser.test.ts | 55 +++++++++++++++++ 4 files changed, 163 insertions(+), 16 deletions(-) diff --git a/schemas/codeclimate-visualiser.schema.json b/schemas/codeclimate-visualiser.schema.json index 6a188fc..3c4f2a4 100644 --- a/schemas/codeclimate-visualiser.schema.json +++ b/schemas/codeclimate-visualiser.schema.json @@ -21,10 +21,15 @@ "type": "integer", "description": "Display order alongside built-in columns (Severity=0, Category=1, Check Name=2, Source=3, File=4, Line=5, Description=6). Custom columns with the same index as a built-in appear after it. Any value > 6 places the column last." }, + "showQuickFilter": { + "type": "boolean", + "default": true, + "description": "Show quick-filter badges for this column's unique values in the main webview filter bar." + }, "showFilter": { "type": "boolean", "default": true, - "description": "Show quick-filter badges for this column's unique values in the filter bar." + "description": "Show a text filter input for this column in the sidebar filter panel." }, "showChart": { "type": "boolean", @@ -53,7 +58,7 @@ { "name": "sous-système", "index": 4, - "showFilter": true, + "showQuickFilter": true, "showChart": true, "fromField": "location.path", "fieldRegex": ".*/sous-systemes/(\\w+)/.*" diff --git a/src/extension.ts b/src/extension.ts index 75b23e3..4c6d72f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -56,25 +56,62 @@ function getRawPatterns(config: ProjectConfig | null): (string | PatternEntry)[] : vscode.workspace.getConfiguration('codeclimateVisualiser').get('reportPatterns', []); } -/** Resolve configured patterns → resolved file entries with column values. */ -async function findConfiguredFiles(config: ProjectConfig | null): Promise { +type PatternErrorKind = 'invalidRegex' | 'fileNotFound' | 'noFilesMatched'; + +interface PatternError { + kind: PatternErrorKind; + pattern: string; + detail?: string; +} + +interface FindResult { + entries: ResolvedFile[]; + errors: PatternError[]; +} + +/** Resolve configured patterns → resolved file entries with column values, plus per-pattern errors. */ +async function findConfiguredFiles(config: ProjectConfig | null): Promise { const rawPatterns = getRawPatterns(config); + const entries: ResolvedFile[] = []; + const errors: PatternError[] = []; - const results: ResolvedFile[] = []; for (const raw of rawPatterns) { const entry: PatternEntry = typeof raw === 'string' ? { glob: raw } : raw; + + if (entry.regex) { + try { + new RegExp(entry.regex); + } catch (e) { + const detail = e instanceof Error ? e.message : String(e); + log(`Invalid regex "${entry.regex}" in pattern "${entry.glob}": ${detail}`); + errors.push({ kind: 'invalidRegex', pattern: entry.glob, detail }); + continue; + } + } + let uris: vscode.Uri[]; if (path.isAbsolute(entry.glob)) { + if (!fs.existsSync(entry.glob)) { + log(`File not found: ${entry.glob}`); + errors.push({ kind: 'fileNotFound', pattern: entry.glob }); + continue; + } uris = [vscode.Uri.file(entry.glob)]; } else { uris = await vscode.workspace.findFiles(entry.glob); + if (uris.length === 0) { + log(`Pattern "${entry.glob}" matched no files`); + errors.push({ kind: 'noFilesMatched', pattern: entry.glob }); + continue; + } } + log(`Pattern "${entry.glob}" matched ${uris.length} file(s)`); for (const uri of uris) { - results.push({ uri, columnValues: resolveColumnValues(entry, uri.fsPath) }); + entries.push({ uri, columnValues: resolveColumnValues(entry, uri.fsPath) }); } } - return results; + return { entries, errors }; } export function activate(context: vscode.ExtensionContext): void { @@ -101,7 +138,7 @@ export function activate(context: vscode.ExtensionContext): void { if (!issueManager.isEmpty) return; const projectConfig = await readProjectConfig(); issueManager.setCustomColumns(projectConfig?.customColumns ?? []); - const entries = await findConfiguredFiles(projectConfig); + const { entries } = await findConfiguredFiles(projectConfig); await loadFromEntries(entries); } @@ -188,19 +225,25 @@ export function activate(context: vscode.ExtensionContext): void { ); return; } - const entries = await findConfiguredFiles(projectConfig); - if (entries.length === 0) { - vscode.window.showWarningMessage( - 'No files matched the configured patterns. Check your glob patterns and verify the files exist.', - ); - return; + const { entries, errors } = await findConfiguredFiles(projectConfig); + for (const err of errors) { + if (err.kind === 'invalidRegex') { + vscode.window.showErrorMessage( + `Invalid regex in pattern "${err.pattern}": ${err.detail ?? 'syntax error'}`, + ); + } else if (err.kind === 'fileNotFound') { + vscode.window.showWarningMessage(`File not found: ${err.pattern}`); + } else { + vscode.window.showWarningMessage( + `No files matched pattern "${err.pattern}". Check the glob and verify the files exist.`, + ); + } } + if (entries.length === 0) return; const loaded = await loadFromEntries(entries); if (loaded > 0) { panel.show(); vscode.window.showInformationMessage(`Reloaded ${loaded} report${loaded !== 1 ? 's' : ''}.`); - } else { - vscode.window.showWarningMessage('Patterns matched files but none could be loaded. Check the Output channel for details.'); } }), ); diff --git a/test/issueManager.test.ts b/test/issueManager.test.ts index 7644c6a..dd6de6f 100644 --- a/test/issueManager.test.ts +++ b/test/issueManager.test.ts @@ -181,6 +181,50 @@ describe('IssueManager', () => { }); }); + describe('customColumns', () => { + it('stores custom columns set via setCustomColumns', () => { + const manager = new IssueManager(); + manager.setCustomColumns([{ name: 'tool', index: 3 }]); + assert.deepStrictEqual(manager.getCustomColumns(), [{ name: 'tool', index: 3 }]); + }); + + it('fires onChange when custom columns change', (done) => { + const manager = new IssueManager(); + manager.onChange(() => done()); + manager.setCustomColumns([{ name: 'env', index: 2 }]); + }); + + it('replaces previous custom columns', () => { + const manager = new IssueManager(); + manager.setCustomColumns([{ name: 'a', index: 0 }]); + manager.setCustomColumns([{ name: 'b', index: 1 }, { name: 'c', index: 2 }]); + assert.strictEqual(manager.getCustomColumns().length, 2); + assert.strictEqual(manager.getCustomColumns()[0].name, 'b'); + }); + + it('attaches column values to loaded issues', () => { + const p = writeReport('colvals.json', makeIssues(2)); + const manager = new IssueManager(); + manager.loadFile(makeUri(p), { tool: 'eslint', env: 'ci' }); + + const issues = manager.getAllIssues(); + assert.strictEqual(issues[0].customColumns?.['tool'], 'eslint'); + assert.strictEqual(issues[0].customColumns?.['env'], 'ci'); + }); + + it('column values are independent per file', () => { + const p1 = writeReport('col-a.json', makeIssues(1)); + const p2 = writeReport('col-b.json', makeIssues(1)); + const manager = new IssueManager(); + manager.loadFile(makeUri(p1), { tool: 'eslint' }); + manager.loadFile(makeUri(p2), { tool: 'semgrep' }); + + const issues = manager.getAllIssues(); + const tools = issues.map((i) => i.customColumns?.['tool']).sort(); + assert.deepStrictEqual(tools, ['eslint', 'semgrep']); + }); + }); + describe('getIssuesForRelativePath', () => { it('returns issues matching an exact relative path', () => { const issues = [ diff --git a/test/parser.test.ts b/test/parser.test.ts index d4b1c9e..4406835 100644 --- a/test/parser.test.ts +++ b/test/parser.test.ts @@ -200,5 +200,60 @@ describe('parseCodeClimateFile', () => { } }); } + + it('eslint report contains expected check names', () => { + const content = fs.readFileSync(path.join(TESTDATA_DIR, 'eslint-report.json'), 'utf-8'); + const issues = parseCodeClimateFile(content); + const checkNames = issues.map((i) => i.check_name); + assert.ok(checkNames.includes('no-var'), 'should include no-var'); + assert.ok(checkNames.includes('eqeqeq'), 'should include eqeqeq'); + }); + + it('eslint report severity range includes minor through major', () => { + const content = fs.readFileSync(path.join(TESTDATA_DIR, 'eslint-report.json'), 'utf-8'); + const issues = parseCodeClimateFile(content); + const severities = new Set(issues.map((i) => i.severity)); + assert.ok(severities.has('minor')); + assert.ok(severities.has('major')); + }); + + it('codeparser report includes issues with other_locations', () => { + const content = fs.readFileSync(path.join(TESTDATA_DIR, 'codeparser-report.json'), 'utf-8'); + const issues = parseCodeClimateFile(content); + const withOther = issues.filter((i) => i.other_locations && i.other_locations.length > 0); + assert.ok(withOther.length > 0, 'at least one issue should have other_locations'); + }); + + it('codeparser report references C source files', () => { + const content = fs.readFileSync(path.join(TESTDATA_DIR, 'codeparser-report.json'), 'utf-8'); + const issues = parseCodeClimateFile(content); + const paths = issues.map((i) => i.location.path); + assert.ok(paths.some((p) => p.endsWith('.c') || p.endsWith('.h')), 'should reference .c or .h files'); + }); + + it('semgrep report contains only Security/Bug Risk categories', () => { + const content = fs.readFileSync(path.join(TESTDATA_DIR, 'semgrep-report.json'), 'utf-8'); + const issues = parseCodeClimateFile(content); + const allCategories = issues.flatMap((i) => i.categories ?? []); + const unexpected = allCategories.filter((c) => c !== 'Security' && c !== 'Bug Risk'); + assert.strictEqual(unexpected.length, 0, `unexpected categories: ${unexpected.join(', ')}`); + }); + + it('semgrep report includes blocker severity', () => { + const content = fs.readFileSync(path.join(TESTDATA_DIR, 'semgrep-report.json'), 'utf-8'); + const issues = parseCodeClimateFile(content); + const severities = new Set(issues.map((i) => i.severity)); + assert.ok(severities.has('blocker'), 'semgrep report should have blocker severity'); + }); + + it('all reports have fingerprints', () => { + for (const filename of ['eslint-report.json', 'codeparser-report.json', 'semgrep-report.json']) { + const content = fs.readFileSync(path.join(TESTDATA_DIR, filename), 'utf-8'); + const issues = parseCodeClimateFile(content); + for (const issue of issues) { + assert.ok(issue.fingerprint, `${filename}: issue "${issue.check_name}" missing fingerprint`); + } + } + }); }); }); From e354e67fcd9e543bd563353e548a5a0913144751 Mon Sep 17 00:00:00 2001 From: TREFOU Felix Date: Thu, 30 Apr 2026 19:54:51 +0200 Subject: [PATCH 05/28] =?UTF-8?q?feat:=20dashboard=20redesign=20=E2=80=94?= =?UTF-8?q?=205-tab=20layout,=20severity=20palette,=20SVG=20charts,=20plug?= =?UTF-8?q?in=20icon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the flat single-view webview with a 5-tab dashboard matching the design system from the CodeClimate Dashboard prototype: - Overview: KPI cards (Total / Blocker / Critical) + secondary row (Major / Minor / Info / Files), SVG donut with clickable severity legend, bar charts for Category / Check Names / Top Files / By Source - Issues: severity toggle buttons, qf-chip filter bars per category / check name / custom column, search input, full expandable table - Files: ranked file list with per-severity distribution bar - Treemap: squarified layout with ResizeObserver, click-to-filter - Trends: severity KPIs + source breakdown + check/category bars Design system: CSS custom properties mapped to VS Code vars, new severity palette (#c084fc / #f87171 / #fb923c / #fbbf24 / #71717a), Inter + JetBrains Mono font stack, cards, donut, barchart, sev-toggle, qf-chip components. Additional polish: - Plugin icon redesigned (5 descending bars, currentColor for sidebar) - Colored severity-bar icon in webview header and as tab iconPath - Table sort indicator: full column header in accent color + filled ▲/▼ - BASE_COLS label "Check Name" → "Check" for uniform column headers Co-Authored-By: Claude Sonnet 4.6 --- media/icon.svg | 8 +- media/webview.css | 998 ++++++++++++++++++++------------ media/webview.js | 1318 ++++++++++++++++++++++++++++++------------- src/webviewPanel.ts | 80 ++- 4 files changed, 1636 insertions(+), 768 deletions(-) diff --git a/media/icon.svg b/media/icon.svg index 12e4544..3758ba0 100644 --- a/media/icon.svg +++ b/media/icon.svg @@ -1,5 +1,7 @@ - - - + + + + + diff --git a/media/webview.css b/media/webview.css index 9f2276e..538e540 100644 --- a/media/webview.css +++ b/media/webview.css @@ -1,157 +1,456 @@ -*, -*::before, -*::after { - box-sizing: border-box; - margin: 0; - padding: 0; -} +/* ── Design system variables ─────────────────────────────────────────────────── */ +:root { + --bg: var(--vscode-editor-background, #1a1a1a); + --surface: var(--vscode-editorWidget-background, #252526); + --surface-2: var(--vscode-editorHoverWidget-background, #2d2d2d); + --surface-hover:var(--vscode-list-hoverBackground, #2a2d2e); + --border: var(--vscode-editorWidget-border, rgba(255,255,255,0.08)); + --border-strong:var(--vscode-contrastBorder, rgba(255,255,255,0.14)); + --fg: var(--vscode-foreground, #e2e2e2); + --fg-muted: var(--vscode-descriptionForeground, #888); + --fg-dim: var(--vscode-disabledForeground, #555); + --accent: var(--vscode-focusBorder, #41b040); + --font-mono: var(--vscode-editor-font-family, 'JetBrains Mono', ui-monospace, monospace); + --font-sans: var(--vscode-font-family, 'Inter', -apple-system, sans-serif); + + --sev-blocker: #c084fc; + --sev-critical: #f87171; + --sev-major: #fb923c; + --sev-minor: #fbbf24; + --sev-info: #71717a; + + --sev-blocker-bg: rgba(192,132,252,0.12); + --sev-critical-bg: rgba(248,113,113,0.12); + --sev-major-bg: rgba(251,146,60,0.12); + --sev-minor-bg: rgba(251,191,36,0.12); + --sev-info-bg: rgba(113,113,122,0.14); + + --r-sm: 4px; + --r-md: 8px; + --gap: 16px; + --row-h: 42px; +} + +/* ── Reset ───────────────────────────────────────────────────────────────────── */ +*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; } body { - font-family: var(--vscode-font-family, sans-serif); - /* Enforce a readable minimum; VS Code's variable can be as low as 11px */ + font-family: var(--font-sans); font-size: max(13px, var(--vscode-font-size, 13px)); - color: var(--vscode-foreground, #ccc); - background: var(--vscode-editor-background, #1e1e1e); - padding: 16px; - line-height: 1.4; -} - -h3 { - font-size: 0.9em; - font-weight: 600; - text-align: center; - margin-bottom: 6px; + color: var(--fg); + background: var(--bg); + line-height: 1.5; + -webkit-font-smoothing: antialiased; } -.chip-remove { - background: none; - border: none; - color: inherit; - cursor: pointer; - font-size: 1.1em; - line-height: 1; - padding: 0 0 0 2px; - opacity: 0.6; -} +button { font-family: inherit; color: inherit; background: none; border: none; cursor: pointer; } -.chip-remove:hover { opacity: 1; } +::-webkit-scrollbar { width: 8px; height: 8px; } +::-webkit-scrollbar-track { background: transparent; } +::-webkit-scrollbar-thumb { background: rgba(128,128,128,0.2); border-radius: 4px; } +::-webkit-scrollbar-thumb:hover { background: rgba(128,128,128,0.35); } /* ── Empty state ─────────────────────────────────────────────────────────────── */ - #empty-state { - margin-top: 60px; + margin-top: 80px; text-align: center; opacity: 0.6; - line-height: 2; + line-height: 2.2; + padding: 0 24px; } #empty-state code { - font-family: var(--vscode-editor-font-family, monospace); - background: var(--vscode-textCodeBlock-background, #2d2d2d); - padding: 1px 5px; + font-family: var(--font-mono); + background: var(--surface); + padding: 1px 6px; border-radius: 3px; } -/* ── Charts row ──────────────────────────────────────────────────────────────── */ +/* ── Dashboard shell ─────────────────────────────────────────────────────────── */ +#dashboard { + padding: 24px 28px 40px; + max-width: 1400px; +} -#charts-row { +/* ── Dashboard header ────────────────────────────────────────────────────────── */ +.dash-header { display: flex; - gap: 12px; - margin-bottom: 14px; - flex-wrap: nowrap; - overflow-x: auto; - padding-bottom: 4px; + align-items: flex-start; + gap: 16px; + margin-bottom: 22px; } -.chart-card { - flex: 1 1 200px; - max-width: 300px; - background: var(--vscode-editorWidget-background, #252526); - border: 1px solid var(--vscode-editorWidget-border, #454545); - border-radius: 6px; - padding: 12px; +.dash-icon { + width: 40px; height: 40px; + border-radius: 9px; + background: var(--surface); + border: 1px solid var(--border); + display: grid; + place-items: center; + flex-shrink: 0; + color: var(--accent); } -.chart-card canvas { - max-height: 200px; +.dash-icon svg { width: 20px; height: 20px; } + +.dash-title { + font-size: 18px; + font-weight: 600; + letter-spacing: -0.02em; + color: var(--fg); + line-height: 1.2; } -/* ── Filters ─────────────────────────────────────────────────────────────────── */ +.dash-sub { color: var(--fg-muted); font-size: 12px; margin-top: 3px; } -#filters { +/* ── Nav tabs (underline style) ──────────────────────────────────────────────── */ +.dash-nav { display: flex; - flex-wrap: wrap; - gap: 10px 16px; - align-items: center; - padding: 10px 14px; - background: var(--vscode-editorWidget-background, #252526); - border: 1px solid var(--vscode-editorWidget-border, #454545); - border-radius: 6px 6px 0 0; + margin-bottom: 22px; + border-bottom: 1px solid var(--border); } -#search-row { +.dash-nav-tab { + display: inline-flex; + align-items: center; + gap: 7px; padding: 8px 14px; - background: var(--vscode-editorWidget-background, #252526); - border: 1px solid var(--vscode-editorWidget-border, #454545); + font-size: 12.5px; + font-weight: 500; + color: var(--fg-muted); + cursor: pointer; + border-bottom: 2px solid transparent; + margin-bottom: -1px; + transition: color 0.14s, border-color 0.14s; + background: none; border-top: none; - border-radius: 0 0 6px 6px; - margin-bottom: 8px; + border-left: none; + border-right: none; } -.filter-label { +.dash-nav-tab:hover { color: var(--fg); } +.dash-nav-tab.active { color: var(--fg); border-bottom-color: var(--accent); } +.dash-nav-tab svg { width: 13px; height: 13px; } + +/* ── View container ──────────────────────────────────────────────────────────── */ +.view { + animation: viewFadeIn 0.16s ease-out; +} + +@keyframes viewFadeIn { from { opacity: 0; transform: translateY(2px); } to { opacity: 1; transform: none; } } + +/* ── KPI grid (3 large cards) ────────────────────────────────────────────────── */ +.kpi-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: var(--gap); + margin-bottom: var(--gap); +} + +.kpi { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--r-md); + padding: 18px 20px; + display: flex; + flex-direction: column; + gap: 4px; +} + +.kpi-label { + font-size: 11px; + font-weight: 500; + color: var(--fg-muted); + display: flex; + align-items: center; + gap: 6px; +} + +.kpi-dot { + width: 7px; height: 7px; + border-radius: 50%; + flex-shrink: 0; +} + +.kpi-body { + display: flex; + align-items: flex-end; + justify-content: space-between; + gap: 12px; + margin-top: 6px; +} + +.kpi-value { + font-family: var(--font-mono); + font-size: 30px; font-weight: 600; - font-size: 0.82em; - opacity: 0.75; - white-space: nowrap; + letter-spacing: -0.03em; + line-height: 1; + font-variant-numeric: tabular-nums; + color: var(--fg); } -#filter-severity, -#filter-sourcefile, -.filter-group { +/* ── KPI secondary row (4 small) ─────────────────────────────────────────────── */ +.kpi-sev-row { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 10px; + margin-bottom: var(--gap); +} + +.kpi-sev { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--r-md); + padding: 12px 14px; display: flex; align-items: center; - gap: 8px; - flex-wrap: wrap; + gap: 10px; } -#filter-custom { +.kpi-sev-bar { width: 3px; align-self: stretch; border-radius: 2px; flex-shrink: 0; } + +.kpi-sev-info { flex: 1; min-width: 0; } +.kpi-sev-label { font-size: 10.5px; color: var(--fg-muted); text-transform: capitalize; } +.kpi-sev-val { + font-family: var(--font-mono); + font-size: 20px; + font-weight: 600; + font-variant-numeric: tabular-nums; + line-height: 1.2; +} + +/* ── Layout grid ─────────────────────────────────────────────────────────────── */ +.row { display: grid; gap: var(--gap); margin-bottom: var(--gap); } +.row-3col { grid-template-columns: 1.3fr 1fr 1fr; } +.row-2col { grid-template-columns: 2fr 1fr; } +.row-full { grid-template-columns: 1fr; } +@media (max-width: 1000px) { .row-3col, .row-2col { grid-template-columns: 1fr; } } + +/* ── Cards ───────────────────────────────────────────────────────────────────── */ +.card { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--r-md); + padding: 18px 20px; +} + +.card-header { display: flex; - flex-wrap: wrap; - gap: 10px 16px; align-items: center; + gap: 10px; + margin-bottom: 14px; +} + +.card-title { + font-size: 12.5px; + font-weight: 600; + color: var(--fg); + letter-spacing: -0.01em; } -.filter-checkbox { +.card-action { + margin-left: auto; + font-size: 11px; + color: var(--fg-dim); display: inline-flex; align-items: center; gap: 4px; cursor: pointer; - font-size: 0.82em; + transition: color 0.12s; user-select: none; } -#filter-search { - width: 100%; +.card-action:hover { color: var(--accent); } + +/* ── Donut chart ─────────────────────────────────────────────────────────────── */ +.donut-wrap { display: flex; align-items: center; gap: 20px; } + +.donut-legend { flex: 1; display: flex; flex-direction: column; gap: 4px; min-width: 0; } + +.legend-row { + display: flex; + align-items: center; + gap: 9px; + font-size: 12.5px; + cursor: pointer; padding: 4px 8px; - background: var(--vscode-input-background, #3c3c3c); - color: var(--vscode-input-foreground, #ccc); - border: 1px solid var(--vscode-input-border, #555); - border-radius: 4px; - font-family: inherit; - font-size: 0.9em; + border-radius: 5px; + transition: background 0.1s; } -#filter-search:focus { - outline: 1px solid var(--vscode-focusBorder, #007acc); +.legend-row:hover { background: var(--surface-2); } +.legend-swatch { width: 8px; height: 8px; border-radius: 2px; flex-shrink: 0; } +.legend-label { flex: 1; text-transform: capitalize; color: var(--fg-muted); font-size: 12px; } +.legend-val { font-family: var(--font-mono); font-size: 13px; color: var(--fg); font-variant-numeric: tabular-nums; } +.legend-pct { font-family: var(--font-mono); font-size: 10.5px; color: var(--fg-dim); min-width: 32px; text-align: right; } + +/* ── Bar chart ───────────────────────────────────────────────────────────────── */ +.barchart { display: flex; flex-direction: column; gap: 8px; } + +.bar-row { + display: grid; + grid-template-columns: 110px 1fr 38px; + gap: 10px; + align-items: center; + font-size: 12px; } -/* ── Active filter chips ─────────────────────────────────────────────────────── */ +.bar-label { + font-family: var(--font-mono); + font-size: 11px; + color: var(--fg-muted); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.bar-track { height: 6px; background: var(--surface-2); border-radius: 3px; overflow: hidden; } + +.bar-fill { + height: 100%; + border-radius: 3px; + transition: width 0.45s cubic-bezier(0.2, 0.8, 0.2, 1); +} +.bar-val { + font-family: var(--font-mono); + font-size: 11px; + color: var(--fg-muted); + text-align: right; + font-variant-numeric: tabular-nums; +} + +/* ── Issues view ─────────────────────────────────────────────────────────────── */ +.issues-view-card { + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--r-md); + overflow: hidden; +} + +.issues-toolbar { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 16px; + border-bottom: 1px solid var(--border); + flex-wrap: wrap; +} + +.toolbar-label { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.09em; + color: var(--fg-dim); + font-weight: 600; + white-space: nowrap; +} + +/* Severity toggle buttons */ +.sev-toggles { display: flex; gap: 5px; flex-wrap: wrap; } + +.sev-toggle { + display: inline-flex; + align-items: center; + gap: 5px; + padding: 4px 10px; + border-radius: 6px; + border: 1px solid var(--border); + font-size: 11px; + font-weight: 600; + text-transform: capitalize; + font-family: var(--font-mono); + color: var(--fg-muted); + background: transparent; + transition: all 0.12s; +} + +.sev-toggle:hover { border-color: var(--border-strong); color: var(--fg); } + +.sev-toggle.active.blocker { background: var(--sev-blocker-bg); color: var(--sev-blocker); border-color: var(--sev-blocker); } +.sev-toggle.active.critical { background: var(--sev-critical-bg); color: var(--sev-critical); border-color: var(--sev-critical); } +.sev-toggle.active.major { background: var(--sev-major-bg); color: var(--sev-major); border-color: var(--sev-major); } +.sev-toggle.active.minor { background: var(--sev-minor-bg); color: var(--sev-minor); border-color: var(--sev-minor); } +.sev-toggle.active.info { background: var(--sev-info-bg); color: var(--sev-info); border-color: var(--sev-info); } + +.sev-toggle .dot { width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0; } +.sev-toggle.blocker .dot { background: var(--sev-blocker); } +.sev-toggle.critical .dot { background: var(--sev-critical); } +.sev-toggle.major .dot { background: var(--sev-major); } +.sev-toggle.minor .dot { background: var(--sev-minor); } +.sev-toggle.info .dot { background: var(--sev-info); } +.sev-toggle .ct { font-size: 10px; opacity: 0.75; } + +.issues-count { + font-size: 11px; + color: var(--fg-dim); + font-family: var(--font-mono); + font-variant-numeric: tabular-nums; + margin-left: auto; +} + +/* Search */ +.toolbar-search { flex: 1; min-width: 180px; position: relative; } + +.search-input { + width: 100%; + background: var(--surface-2); + border: 1px solid var(--border); + border-radius: 6px; + padding: 7px 12px 7px 32px; + color: var(--fg); + font: inherit; + font-size: 12.5px; + outline: none; + transition: border-color 0.14s; +} + +.search-input:focus { border-color: var(--accent); } + +.search-icon-pos { + position: absolute; + left: 10px; + top: 50%; + transform: translateY(-50%); + width: 13px; height: 13px; + color: var(--fg-dim); + pointer-events: none; +} + +/* Quick-filter bar (qf-chips) */ +.qf-bar { + display: flex; + align-items: center; + gap: 6px; + padding: 6px 16px; + border-bottom: 1px solid var(--border); + flex-wrap: wrap; +} + +.qf-chip { + display: inline-flex; + align-items: center; + padding: 3px 10px; + border-radius: 5px; + border: 1px solid var(--border); + font-size: 11px; + font-family: var(--font-mono); + color: var(--fg-muted); + background: transparent; + cursor: pointer; + transition: all 0.12s; +} + +.qf-chip:hover { border-color: var(--border-strong); color: var(--fg); } +.qf-chip.active { background: var(--accent); color: #000; border-color: var(--accent); font-weight: 600; } + +/* Active filter chips (above table) */ #active-filters { display: flex; flex-wrap: wrap; gap: 6px; - margin-bottom: 8px; + padding: 6px 16px; min-height: 4px; } @@ -159,318 +458,254 @@ h3 { display: inline-flex; align-items: center; gap: 6px; - padding: 3px 8px 3px 12px; - border-radius: 12px; - background: var(--vscode-badge-background, #4d4d4d); - color: var(--vscode-badge-foreground, #fff); - font-size: 0.82em; - border: 1px solid var(--vscode-focusBorder, #007acc); + padding: 3px 8px 3px 10px; + border-radius: 10px; + background: var(--surface-2); + color: var(--fg-muted); + font-size: 11.5px; + border: 1px solid var(--border); + font-family: var(--font-mono); } -.cat-filter-chip { - border-color: var(--vscode-charts-green, #4ec9b0); +.chip-remove { + background: none; + border: none; + color: inherit; + cursor: pointer; + font-size: 1em; + line-height: 1; + padding: 0 0 0 2px; + opacity: 0.6; } +.chip-remove:hover { opacity: 1; } -/* ── Table ───────────────────────────────────────────────────────────────────── */ - -#table-container { - overflow-x: auto; - border: 1px solid var(--vscode-editorWidget-border, #454545); - border-radius: 6px; -} +/* ── Issues table ────────────────────────────────────────────────────────────── */ +#table-container { overflow-x: auto; } #issues-table { width: 100%; - border-collapse: collapse; - font-size: 1em; /* inherit body — no downscaling */ + border-collapse: separate; + border-spacing: 0; + font-size: 12.5px; table-layout: auto; } #issues-table thead th { position: sticky; top: 0; - background: var(--vscode-editorGroupHeader-tabsBackground, #2d2d2d); - color: var(--vscode-tab-activeForeground, #fff); - padding: 8px 10px; - text-align: left; + z-index: 1; + background: var(--surface); + font-size: 10.5px; + text-transform: uppercase; + letter-spacing: 0.07em; + color: var(--fg-dim); font-weight: 600; - white-space: nowrap; - border-bottom: 2px solid var(--vscode-editorWidget-border, #454545); + text-align: left; + padding: 10px 14px; + border-bottom: 1px solid var(--border-strong); cursor: pointer; user-select: none; + white-space: nowrap; } -#issues-table thead th:hover { - background: var(--vscode-list-hoverBackground, #2a2d2e); -} - -#issues-table thead th.sort-asc::after { content: ' ▲'; font-size: 0.75em; } -#issues-table thead th.sort-desc::after { content: ' ▼'; font-size: 0.75em; } +#issues-table thead th:hover { color: var(--fg-muted); } +#issues-table thead th.sort-asc, +#issues-table thead th.sort-desc { color: var(--accent); } +#issues-table thead th.sort-asc::after { content: ' ▲'; font-size: 0.75em; vertical-align: 0.1em; } +#issues-table thead th.sort-desc::after { content: ' ▼'; font-size: 0.75em; vertical-align: 0.1em; } #issues-table tbody td { - padding: 5px 10px; - border-bottom: 1px solid var(--vscode-editorWidget-border, #333); + padding: 0 14px; + height: var(--row-h); + border-bottom: 1px solid var(--border); vertical-align: middle; - /* no cursor / hover on td — only on .filter-text span */ + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } -/* Per-column constraints — class-based so order is independent of position */ #issues-table .col-severity { white-space: nowrap; } #issues-table .col-categories { min-width: 50px; max-width: 160px; } -#issues-table .col-check_name { min-width: 120px; max-width: 260px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } +#issues-table .col-check_name { min-width: 120px; max-width: 260px; font-family: var(--font-mono); font-size: 11.5px; } #issues-table .col-sourceFile { min-width: 50px; max-width: 140px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } -#issues-table .col-file { min-width: 50px; max-width: 200px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } -#issues-table .col-line { white-space: nowrap; text-align: right; } -#issues-table .col-description { min-width: 160px; max-width: 420px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } -#issues-table .col-custom { min-width: 60px; max-width: 160px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } - -#issues-table tbody tr { - cursor: pointer; -} +#issues-table .col-file { min-width: 50px; max-width: 200px; font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-muted); } +#issues-table .col-line { white-space: nowrap; text-align: right; font-family: var(--font-mono); font-size: 11.5px; } +#issues-table .col-description { min-width: 160px; max-width: 420px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; color: var(--fg-muted); } +#issues-table .col-custom { min-width: 60px; max-width: 160px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-family: var(--font-mono); font-size: 11.5px; } -#issues-table tbody tr:hover { - background: var(--vscode-list-hoverBackground, #2a2d2e); -} +#issues-table tbody tr { cursor: pointer; transition: background 0.09s; } +#issues-table tbody tr:hover { background: var(--surface-hover); } +#issues-table tbody tr:last-child td { border-bottom: none; } -#issues-table tbody tr:last-child td { - border-bottom: none; +#table-footer { + padding: 7px 14px; + font-size: 11px; + opacity: 0.6; + text-align: right; + border-top: 1px solid var(--border); + font-family: var(--font-mono); } -/* ── Filter text span (hitbox = text glyphs only, td does the clipping) ─────── */ - +/* ── Filter-text span (clickable cell text) ──────────────────────────────────── */ .filter-text { - /* inline: span covers only the actual text, not the whole cell */ display: inline; cursor: pointer; text-decoration: underline dotted; text-underline-offset: 2px; } -.filter-text:hover { - color: var(--vscode-textLink-activeForeground, #4fc3f7); -} -.filter-text-active { - font-weight: 700; - color: var(--vscode-textLink-activeForeground, #4fc3f7); -} +.filter-text:hover { color: var(--accent); } +.filter-text-active { font-weight: 700; color: var(--accent); } -.cell-mono { - font-family: var(--vscode-editor-font-family, monospace); - font-size: 0.95em; -} - -/* .cell-desc truncation is handled by the td nth-child(7) rule above */ - -.cell-num { - text-align: right; - font-variant-numeric: tabular-nums; - white-space: nowrap; -} +.cell-mono { font-family: var(--font-mono); font-size: 11.5px; } +.cell-num { text-align: right; font-family: var(--font-mono); font-variant-numeric: tabular-nums; } /* ── Severity badges ─────────────────────────────────────────────────────────── */ - -.severity-badge { - display: inline-block; - padding: 2px 7px; - border-radius: 4px; - font-size: 0.78em; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 0.04em; - color: #fff; +.sev-badge { + display: inline-flex; + align-items: center; + gap: 5px; + padding: 3px 9px; + border-radius: 5px; + font-size: 10.5px; + font-weight: 600; + text-transform: capitalize; + letter-spacing: 0.02em; + font-family: var(--font-mono); white-space: nowrap; + cursor: pointer; } -.sev-blocker { background: #7b1fa2; } -.sev-critical { background: #e53935; } -.sev-major { background: #f4511e; } -.sev-minor { background: #f9a825; color: #1a1a1a; } -.sev-info { background: #78909c; } +.sev-badge.blocker { background: var(--sev-blocker-bg); color: var(--sev-blocker); } +.sev-badge.critical { background: var(--sev-critical-bg); color: var(--sev-critical); } +.sev-badge.major { background: var(--sev-major-bg); color: var(--sev-major); } +.sev-badge.minor { background: var(--sev-minor-bg); color: var(--sev-minor); } +.sev-badge.info { background: var(--sev-info-bg); color: var(--sev-info); } -.sev-badge-btn { - cursor: pointer; -} -.sev-badge-btn:hover { - filter: brightness(1.2); -} +.sev-badge:hover { filter: brightness(1.15); } -/* ── Category badges ─────────────────────────────────────────────────────────── */ +/* Row left accent by severity */ +.row-sev-blocker td:first-child { box-shadow: inset 2px 0 0 var(--sev-blocker); } +.row-sev-critical td:first-child { box-shadow: inset 2px 0 0 var(--sev-critical); } +.row-sev-major td:first-child { box-shadow: inset 2px 0 0 var(--sev-major); } +.row-sev-minor td:first-child { box-shadow: inset 2px 0 0 var(--sev-minor); } +.row-sev-info td:first-child { box-shadow: inset 2px 0 0 var(--sev-info); } +/* ── Category badges ─────────────────────────────────────────────────────────── */ .cat-badge { display: inline-block; - padding: 1px 6px; - border-radius: 10px; - font-size: 0.76em; - background: var(--vscode-badge-background, #4d4d4d); - color: var(--vscode-badge-foreground, #fff); - margin-right: 3px; - white-space: nowrap; + padding: 2px 8px; + border-radius: 5px; + font-size: 11px; + font-family: var(--font-mono); + background: var(--surface-2); + color: var(--fg-muted); + border: 1px solid var(--border); cursor: pointer; -} -.cat-badge:hover { - opacity: 0.8; - outline: 1px solid currentColor; -} -.cat-active { - outline: 2px solid var(--vscode-focusBorder, #007acc); - outline-offset: 1px; - font-weight: 700; + margin-right: 3px; } -/* ── Row left-border accent by severity ──────────────────────────────────────── */ - -.row-sev-blocker td:first-child { border-left: 3px solid #7b1fa2; } -.row-sev-critical td:first-child { border-left: 3px solid #e53935; } -.row-sev-major td:first-child { border-left: 3px solid #f4511e; } -.row-sev-minor td:first-child { border-left: 3px solid #f9a825; } -.row-sev-info td:first-child { border-left: 3px solid #78909c; } - -/* ── Focus flash ─────────────────────────────────────────────────────────────── */ - -@keyframes row-flash-anim { - 0%, 100% { background: transparent; } - 25% { background: var(--vscode-editor-findMatchHighlightBackground, rgba(255,200,0,0.35)); } -} -.row-flash { animation: row-flash-anim 1.6s ease-out; } +.cat-badge:hover { border-color: var(--border-strong); color: var(--fg); } +.cat-active { border-color: var(--accent) !important; color: var(--accent) !important; font-weight: 700; } /* ── Expanded row ────────────────────────────────────────────────────────────── */ +.row-expanded td:first-child { box-shadow: inset 3px 0 0 var(--accent) !important; } -.row-expanded { - background: var(--vscode-list-activeSelectionBackground, #094771) !important; -} -.row-expanded td:first-child { - border-left-width: 4px !important; -} - -.detail-row { - cursor: default; -} - -.detail-row td { - padding: 0; - border-bottom: 2px solid var(--vscode-editorWidget-border, #454545); -} +.detail-row { cursor: default; } +.detail-row td { padding: 0; border-bottom: 2px solid var(--border-strong); height: auto !important; } -/* Slide-down animation */ .detail-anim { display: grid; grid-template-rows: 0fr; - transition: grid-template-rows 0.22s ease-out; + transition: grid-template-rows 0.2s ease-out; } -.detail-anim-open { - grid-template-rows: 1fr; -} -.detail-anim > * { - overflow: hidden; -} - -/* ── Detail content ──────────────────────────────────────────────────────────── */ +.detail-anim-open { grid-template-rows: 1fr; } +.detail-anim > * { overflow: hidden; } .detail-content { - padding: 12px 16px 14px 28px; + padding: 14px 16px 16px 28px; display: flex; flex-direction: column; - gap: 8px; - background: var(--vscode-editorWidget-background, #252526); + gap: 9px; + background: var(--bg); } -/* 1. Full path — no label, link style */ .detail-path-link { - font-family: var(--vscode-editor-font-family, monospace); - font-size: 1em; + font-family: var(--font-mono); + font-size: 12px; cursor: pointer; - color: var(--vscode-textLink-foreground, #4ec9b0); + color: var(--accent); text-decoration: underline; text-underline-offset: 2px; word-break: break-all; align-self: flex-start; } -.detail-path-link:hover { - color: var(--vscode-textLink-activeForeground, #4fc3f7); -} -/* 2. Description */ +.detail-path-link:hover { opacity: 0.8; } + .detail-desc { font-size: max(13px, var(--vscode-font-size, 13px)); - opacity: 0.9; line-height: 1.5; } -/* 4. Body (fix guidance) */ .detail-body { - font-size: max(12px, var(--vscode-font-size, 13px)); - opacity: 0.8; + font-family: var(--font-mono); + font-size: 11.5px; + color: var(--fg-muted); line-height: 1.6; white-space: pre-wrap; - border-left: 2px solid var(--vscode-editorWidget-border, #454545); + border-left: 2px solid var(--accent); padding-left: 10px; - max-height: 200px; + border-radius: 0 4px 4px 0; + max-height: 180px; overflow-y: auto; } -/* 5. Other locations */ .other-loc-block { - display: flex; - flex-direction: column; - gap: 4px; - padding: 6px 0 0 0; - border-top: 1px solid var(--vscode-editorWidget-border, #3a3a3a); + display: flex; flex-direction: column; gap: 4px; + padding: 6px 0 0; + border-top: 1px solid var(--border); } .other-loc-label { - font-size: 0.85em; - font-weight: 700; - opacity: 0.55; - text-transform: uppercase; - letter-spacing: 0.06em; + font-size: 10px; font-weight: 700; + opacity: 0.5; text-transform: uppercase; letter-spacing: 0.07em; } .other-loc-path { - font-family: var(--vscode-editor-font-family, monospace); - font-size: max(12px, var(--vscode-font-size, 13px)); - opacity: 0.85; + font-family: var(--font-mono); + font-size: max(11px, var(--vscode-font-size, 13px)); } -/* Source file label in detail */ .detail-source { - font-family: var(--vscode-editor-font-family, monospace); + font-family: var(--font-mono); font-size: max(11px, var(--vscode-font-size, 13px)); - opacity: 0.55; - margin-top: 4px; + opacity: 0.5; } -/* 6. Fingerprint — right-aligned, clickable to copy */ .detail-fingerprint { align-self: flex-end; - font-family: var(--vscode-editor-font-family, monospace); - font-size: 0.88em; - opacity: 0.45; - letter-spacing: 0.02em; - margin-top: 4px; + font-family: var(--font-mono); + font-size: 10px; + opacity: 0.4; cursor: copy; user-select: all; } -.detail-fingerprint:hover { - opacity: 0.75; -} -.detail-fingerprint.copied { - opacity: 0.9; - color: var(--vscode-charts-green, #4ec9b0); -} +.detail-fingerprint:hover { opacity: 0.7; } +.detail-fingerprint.copied { opacity: 0.9; color: var(--accent); } /* ── Code snippet ────────────────────────────────────────────────────────────── */ - .snippet-container { overflow: auto; - max-height: 220px; - background: var(--vscode-editor-background, #1e1e1e); - border: 1px solid var(--vscode-editorWidget-border, #3a3a3a); - border-radius: 4px; + max-height: 200px; + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--r-sm); } .snippet-loading { display: block; padding: 8px 12px; - font-size: 0.82em; + font-size: 11.5px; opacity: 0.5; font-style: italic; } @@ -478,21 +713,17 @@ h3 { .snippet-pre { margin: 0; padding: 4px 0; - font-family: var(--vscode-editor-font-family, 'Courier New', monospace); + font-family: var(--font-mono); font-size: max(12px, var(--vscode-editor-font-size, 13px)); tab-size: 4; - line-height: 1.5; + line-height: 1.55; } -.snippet-line { - display: flex; - white-space: pre; -} +.snippet-line { display: flex; white-space: pre; } .snippet-hl { - background: var(--vscode-editor-lineHighlightBackground, rgba(255, 255, 255, 0.07)); - outline: 1px solid var(--vscode-editor-lineHighlightBorder, rgba(255,255,255,0.12)); - outline-offset: -1px; + background: rgba(248,113,113,0.08); + box-shadow: inset 2px 0 0 var(--sev-critical); } .snippet-num { @@ -500,75 +731,134 @@ h3 { min-width: 36px; padding: 0 10px 0 8px; text-align: right; - color: var(--vscode-editorLineNumber-foreground, #858585); + color: var(--fg-dim); user-select: none; flex-shrink: 0; } -.snippet-text { - color: var(--vscode-editor-foreground, #d4d4d4); - padding-right: 16px; +.snippet-text { color: var(--fg); padding-right: 16px; } + +/* ── Row flash animation ─────────────────────────────────────────────────────── */ +@keyframes row-flash-anim { + 0% { background: rgba(65,176,64,0.22); } + 60% { background: rgba(65,176,64,0.10); } + 100% { background: transparent; } } +.row-flash { animation: row-flash-anim 1.4s ease-out forwards; } -/* ── Issues count bar ────────────────────────────────────────────────────────── */ +/* ── Files view ──────────────────────────────────────────────────────────────── */ +.file-list { display: flex; flex-direction: column; } -#issues-count-bar { - padding: 4px 10px; - font-size: 0.88em; - opacity: 0.7; - font-variant-numeric: tabular-nums; +.file-row { + display: grid; + grid-template-columns: 1fr 80px 52px 52px 52px 56px; + gap: 12px; + align-items: center; + padding: 11px 16px; + border-bottom: 1px solid var(--border); + cursor: pointer; + transition: background 0.09s; } -/* ── Prism syntax token colours (VS Code dark+ palette) ──────────────────────── */ +.file-row:hover { background: var(--surface-hover); } -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { color: #6a9955; font-style: italic; } +.file-row.head { + font-size: 10px; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--fg-dim); + font-weight: 600; + padding: 8px 16px; + border-bottom: 1px solid var(--border-strong); + background: var(--surface-2); + cursor: default; +} -.token.punctuation { color: #d4d4d4; } +.file-row.head:hover { background: var(--surface-2); } -.token.property, -.token.tag, -.token.boolean, -.token.number, -.token.constant, -.token.symbol, -.token.deleted { color: #b5cea8; } +.file-name { display: flex; flex-direction: column; gap: 2px; min-width: 0; } +.file-name .basename { font-family: var(--font-mono); font-size: 12.5px; color: var(--fg); font-weight: 500; } +.file-name .dir { font-family: var(--font-mono); font-size: 10.5px; color: var(--fg-dim); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { color: #ce9178; } +.file-bar { display: flex; height: 10px; border-radius: 3px; overflow: hidden; background: var(--surface-2); } +.file-bar-seg { height: 100%; } + +.file-num { font-family: var(--font-mono); font-size: 12px; color: var(--fg-muted); text-align: right; font-variant-numeric: tabular-nums; } +.file-num.tot { color: var(--fg); font-weight: 600; } + +/* ── Treemap ─────────────────────────────────────────────────────────────────── */ +.treemap { + width: 100%; + height: 460px; + position: relative; + background: var(--bg); + border-radius: var(--r-md); + overflow: hidden; +} -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string { color: #d4d4d4; } +.tm-cell { + position: absolute; + border: 1px solid var(--bg); + padding: 8px 10px; + cursor: pointer; + transition: filter 0.12s; + overflow: hidden; +} -.token.atrule, -.token.attr-value, -.token.keyword { color: #569cd6; } +.tm-cell:hover { filter: brightness(1.2); z-index: 2; } -.token.function, -.token.class-name { color: #dcdcaa; } +.tm-cell-name { + font-family: var(--font-mono); + font-size: 11px; + color: rgba(255,255,255,0.9); + font-weight: 500; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-shadow: 0 1px 3px rgba(0,0,0,0.6); +} -.token.regex, -.token.important, -.token.variable { color: #9cdcfe; } +.tm-cell-num { + font-family: var(--font-mono); + font-size: 17px; + color: white; + font-weight: 700; + text-shadow: 0 1px 3px rgba(0,0,0,0.6); + margin-top: 3px; +} -.token.namespace { color: #4ec9b0; } +.treemap-legend { + display: flex; + gap: 14px; + padding: 10px 4px 0; + font-size: 11px; + color: var(--fg-muted); +} -/* ── Table footer ────────────────────────────────────────────────────────────── */ +.treemap-legend-item { display: flex; align-items: center; gap: 6px; } +.treemap-legend-swatch { width: 10px; height: 10px; border-radius: 2px; flex-shrink: 0; } -#table-footer { - padding: 6px 10px; - font-size: 0.82em; - opacity: 0.6; - text-align: right; - background: var(--vscode-editorWidget-background, #252526); - border-top: 1px solid var(--vscode-editorWidget-border, #454545); +/* ── Trends view ─────────────────────────────────────────────────────────────── */ +.trends-note { + padding: 12px 14px; + background: var(--surface-2); + border: 1px solid var(--border); + border-radius: var(--r-md); + font-size: 12px; + color: var(--fg-muted); + margin-bottom: var(--gap); } + +/* ── Prism token colors ──────────────────────────────────────────────────────── */ +.token.comment,.token.prolog,.token.doctype,.token.cdata { color: #6a9955; font-style: italic; } +.token.punctuation { color: #d4d4d4; } +.token.property,.token.tag,.token.boolean,.token.number, +.token.constant,.token.symbol,.token.deleted { color: #b5cea8; } +.token.selector,.token.attr-name,.token.string,.token.char, +.token.builtin,.token.inserted { color: #ce9178; } +.token.operator,.token.entity,.token.url, +.language-css .token.string,.style .token.string { color: #d4d4d4; } +.token.atrule,.token.attr-value,.token.keyword { color: #569cd6; } +.token.function,.token.class-name { color: #dcdcaa; } +.token.regex,.token.important,.token.variable { color: #9cdcfe; } +.token.namespace { color: #4ec9b0; } diff --git a/media/webview.js b/media/webview.js index d8d01a1..89aff76 100644 --- a/media/webview.js +++ b/media/webview.js @@ -1,30 +1,23 @@ // @ts-check 'use strict'; -// Configure Prism before its script loads (set via inline From 29aeab3b40fad07de8b38bf716dc1d9c070115a5 Mon Sep 17 00:00:00 2001 From: TREFOU Felix Date: Thu, 30 Apr 2026 20:03:23 +0200 Subject: [PATCH 06/28] feat: automate VS Code Marketplace release via GitHub Actions Add workflow_dispatch trigger with publish toggle, and a dedicated "Publish to VS Code Marketplace" step (vsce publish via VSCE_PAT secret). Marketplace publish and GitHub Release creation only fire on version tags; manual dispatch can package without publishing by setting publish=false. Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/release.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ee2b75a..f770c01 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,6 +4,14 @@ on: push: tags: - 'v*' + workflow_dispatch: + inputs: + publish: + description: 'Publish to VS Code Marketplace' + required: false + default: 'true' + type: choice + options: ['true', 'false'] jobs: release: @@ -33,7 +41,16 @@ jobs: - name: Package extension run: npm run package + - name: Publish to VS Code Marketplace + if: > + (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')) || + (github.event_name == 'workflow_dispatch' && github.event.inputs.publish == 'true') + env: + VSCE_PAT: ${{ secrets.VSCE_PAT }} + run: npm run publish + - name: Create GitHub Release + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') uses: softprops/action-gh-release@v2 with: files: '*.vsix' From 3ce378cadedc1a81ccd7006df43ef9f3f5115b6d Mon Sep 17 00:00:00 2001 From: TREFOU Felix Date: Fri, 1 May 2026 01:52:14 +0200 Subject: [PATCH 07/28] feat: semantic release automation with versioned VSIX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add semantic-release + plugins (commit-analyzer, release-notes-generator, npm, git, github) — bumps package.json version, commits, tags, and creates GitHub Release automatically on push to main - Add semantic-release.yml workflow (triggers on main push) - Update release.yml: sync version from git tag before packaging so VSIX name matches the release (e.g. codeclimate-visualiser-1.2.3.vsix); upload VSIX to existing GitHub Release via gh CLI; add manual version input - Add .releaserc.json config (no npm publish, VSIX upload deferred to release.yml) Commit message convention → version bump: fix: → patch (1.0.x) feat: → minor (1.x.0) BREAKING CHANGE: → major (x.0.0) Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/release.yml | 29 +- .github/workflows/semantic-release.yml | 43 + .releaserc.json | 13 + package-lock.json | 9082 ++++++++++++++++++------ package.json | 8 +- 5 files changed, 7133 insertions(+), 2042 deletions(-) create mode 100644 .github/workflows/semantic-release.yml create mode 100644 .releaserc.json diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f770c01..f999d84 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,6 +6,9 @@ on: - 'v*' workflow_dispatch: inputs: + version: + description: 'Version to package (e.g. 1.2.3) — defaults to package.json' + required: false publish: description: 'Publish to VS Code Marketplace' required: false @@ -15,7 +18,7 @@ on: jobs: release: - name: Build, Test & Release + name: Package & Publish runs-on: ubuntu-latest permissions: contents: write @@ -23,8 +26,7 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Node.js - uses: actions/setup-node@v4 + - uses: actions/setup-node@v4 with: node-version: '20' cache: npm @@ -32,6 +34,14 @@ jobs: - name: Install dependencies run: npm ci + - name: Sync version from tag + if: startsWith(github.ref, 'refs/tags/v') + run: npm version --no-git-tag-version "${GITHUB_REF_NAME#v}" + + - name: Sync version from input + if: github.event_name == 'workflow_dispatch' && github.event.inputs.version != '' + run: npm version --no-git-tag-version "${{ github.event.inputs.version }}" + - name: Compile TypeScript run: npm run compile @@ -41,6 +51,12 @@ jobs: - name: Package extension run: npm run package + - name: Upload VSIX to GitHub Release + if: startsWith(github.ref, 'refs/tags/v') + run: gh release upload "$GITHUB_REF_NAME" *.vsix --clobber + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Publish to VS Code Marketplace if: > (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')) || @@ -48,10 +64,3 @@ jobs: env: VSCE_PAT: ${{ secrets.VSCE_PAT }} run: npm run publish - - - name: Create GitHub Release - if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') - uses: softprops/action-gh-release@v2 - with: - files: '*.vsix' - generate_release_notes: true diff --git a/.github/workflows/semantic-release.yml b/.github/workflows/semantic-release.yml new file mode 100644 index 0000000..8fadb33 --- /dev/null +++ b/.github/workflows/semantic-release.yml @@ -0,0 +1,43 @@ +name: Semantic Release + +on: + push: + branches: [main] + +jobs: + release: + name: Semantic Release + runs-on: ubuntu-latest + permissions: + contents: write + issues: write + pull-requests: write + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + persist-credentials: false + + - uses: actions/setup-node@v4 + with: + node-version: '20' + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Compile TypeScript + run: npm run compile + + - name: Run tests + run: npm test + + - name: Semantic Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GIT_AUTHOR_NAME: github-actions[bot] + GIT_AUTHOR_EMAIL: github-actions[bot]@users.noreply.github.com + GIT_COMMITTER_NAME: github-actions[bot] + GIT_COMMITTER_EMAIL: github-actions[bot]@users.noreply.github.com + run: npx semantic-release diff --git a/.releaserc.json b/.releaserc.json new file mode 100644 index 0000000..fbe0816 --- /dev/null +++ b/.releaserc.json @@ -0,0 +1,13 @@ +{ + "branches": ["main"], + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + ["@semantic-release/npm", { "npmPublish": false }], + ["@semantic-release/git", { + "assets": ["package.json", "package-lock.json"], + "message": "chore(release): ${nextRelease.version} [skip ci]" + }], + ["@semantic-release/github", { "assets": [] }] + ] +} diff --git a/package-lock.json b/package-lock.json index 6624074..f34ed0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,11 +8,17 @@ "name": "codeclimate-visualiser", "version": "0.1.0", "devDependencies": { + "@semantic-release/commit-analyzer": "^13.0.1", + "@semantic-release/git": "^10.0.1", + "@semantic-release/github": "^12.0.6", + "@semantic-release/npm": "^13.1.5", + "@semantic-release/release-notes-generator": "^14.1.0", "@types/mocha": "^10.0.10", "@types/node": "^20.0.0", "@types/vscode": "^1.85.0", "@vscode/vsce": "^3.9.1", "mocha": "^10.4.0", + "semantic-release": "^25.0.3", "tsx": "^4.21.0", "typescript": "^5.3.0" }, @@ -20,6 +26,41 @@ "vscode": "^1.85.0" } }, + "node_modules/@actions/core": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-3.0.1.tgz", + "integrity": "sha512-a6d/Nwahm9fliVGRhdhofo40HjHQasUPusmc7vBfyky+7Z+P2A1J68zyFVaNcEclc/Se+eO595oAr5nwEIoIUA==", + "dev": true, + "dependencies": { + "@actions/exec": "^3.0.0", + "@actions/http-client": "^4.0.0" + } + }, + "node_modules/@actions/exec": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-3.0.0.tgz", + "integrity": "sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==", + "dev": true, + "dependencies": { + "@actions/io": "^3.0.2" + } + }, + "node_modules/@actions/http-client": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-4.0.1.tgz", + "integrity": "sha512-+Nvd1ImaOZBSoPbsUtEhv+1z99H12xzncCkz0a3RuehINE81FZSe2QTj3uvAPTcJX/SCzUQHQ0D1GrPMbrPitg==", + "dev": true, + "dependencies": { + "tunnel": "^0.0.6", + "undici": "^6.23.0" + } + }, + "node_modules/@actions/io": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-3.0.2.tgz", + "integrity": "sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==", + "dev": true + }, "node_modules/@azu/format-text": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", @@ -216,6 +257,16 @@ "node": ">=6.9.0" } }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.27.7", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", @@ -286,6 +337,199 @@ "node": ">= 8" } }, + "node_modules/@octokit/auth-token": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", + "dev": true, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/core": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", + "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", + "dev": true, + "dependencies": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/endpoint": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.3.tgz", + "integrity": "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==", + "dev": true, + "dependencies": { + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/graphql": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", + "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", + "dev": true, + "dependencies": { + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", + "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", + "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", + "dev": true, + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-8.1.0.tgz", + "integrity": "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==", + "dev": true, + "dependencies": { + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=7" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-11.0.3.tgz", + "integrity": "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==", + "dev": true, + "dependencies": { + "@octokit/types": "^16.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": "^7.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.8.tgz", + "integrity": "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^11.0.3", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "fast-content-type-parse": "^3.0.0", + "json-with-bigint": "^3.5.3", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/request-error": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", + "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", + "dev": true, + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", + "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^27.0.0" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/@pnpm/npm-conf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", + "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", + "dev": true, + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true + }, "node_modules/@secretlint/config-creator": { "version": "10.2.2", "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz", @@ -474,798 +718,750 @@ "node": ">=20.0.0" } }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "node_modules/@semantic-release/commit-analyzer": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-13.0.1.tgz", + "integrity": "sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==", "dev": true, + "dependencies": { + "conventional-changelog-angular": "^8.0.0", + "conventional-changelog-writer": "^8.0.0", + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.0.0", + "debug": "^4.0.0", + "import-from-esm": "^2.0.0", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" + }, "engines": { - "node": ">=18" + "node": ">=20.8.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "semantic-release": ">=20.1.0" } }, - "node_modules/@textlint/ast-node-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.6.0.tgz", - "integrity": "sha512-CxZHFbYAU7J0A4izz31wV2ZZfySR6aVj2OSR6/3tppZm7VV6hM7nA7sutsLwIiBL/v4lsB1RM79l4Dc/VrH4qw==", - "dev": true + "node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true, + "engines": { + "node": ">=14.17" + } }, - "node_modules/@textlint/linter-formatter": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.6.0.tgz", - "integrity": "sha512-IwHRhjwxs0a5t1eNAoKAdV224CDca38LyopPofXpwO/d0J75wBvzf/cBHXNl4TMsLKhYGtR83UprcLEKj/gZsA==", + "node_modules/@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", "dev": true, "dependencies": { - "@azu/format-text": "^1.0.2", - "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.6.0", - "@textlint/resolver": "15.6.0", - "@textlint/types": "15.6.0", - "chalk": "^4.1.2", - "debug": "^4.4.3", - "js-yaml": "^4.1.1", - "lodash": "^4.18.1", - "pluralize": "^2.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "table": "^6.9.0", - "text-table": "^0.2.0" + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" } }, - "node_modules/@textlint/linter-formatter/node_modules/pluralize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", - "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", - "dev": true - }, - "node_modules/@textlint/module-interop": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.6.0.tgz", - "integrity": "sha512-MHY6pJx9i5kOlrvUSK51887tYZjHAV2qnr6unBm7LtBLGDFo93utdYqHyWep8r9QLsilQdeijWtufJI46z4v4w==", - "dev": true - }, - "node_modules/@textlint/resolver": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.6.0.tgz", - "integrity": "sha512-T1l2Gd3455pwtm0cTewhX/LLy3bL9z6/Fu/am+jj+jjGfXVoknYkjfkZEKrjHlA7xzay0EfUKnu//teYemLeZw==", - "dev": true - }, - "node_modules/@textlint/types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.6.0.tgz", - "integrity": "sha512-CvgYb1PiqF4BGyoZebGWzAJCZ4ChJAZ9gtWjpQIMKE4Xe2KlSwDA8m8MsiZIV321f5Ibx38BMjC1Z/2ZYP2GQg==", + "node_modules/@semantic-release/github": { + "version": "12.0.6", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-12.0.6.tgz", + "integrity": "sha512-aYYFkwHW3c6YtHwQF0t0+lAjlU+87NFOZuH2CvWFD0Ylivc7MwhZMiHOJ0FMpIgPpCVib/VUAcOwvrW0KnxQtA==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "15.6.0" + "@octokit/core": "^7.0.0", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/plugin-retry": "^8.0.0", + "@octokit/plugin-throttling": "^11.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^5.0.0", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "issue-parser": "^7.0.0", + "lodash-es": "^4.17.21", + "mime": "^4.0.0", + "p-filter": "^4.0.0", + "tinyglobby": "^0.2.14", + "undici": "^7.0.0", + "url-join": "^5.0.0" + }, + "engines": { + "node": "^22.14.0 || >= 24.10.0" + }, + "peerDependencies": { + "semantic-release": ">=24.1.0" } }, - "node_modules/@types/mocha": { - "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "node_modules/@semantic-release/github/node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=18" + } }, - "node_modules/@types/node": { - "version": "20.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.39.tgz", - "integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==", + "node_modules/@semantic-release/github/node_modules/aggregate-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, "dependencies": { - "undici-types": "~6.21.0" + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true - }, - "node_modules/@types/vscode": { - "version": "1.116.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.116.0.tgz", - "integrity": "sha512-sYHp4MO6BqJ2PD7Hjt0hlIS3tMaYsVPJrd0RUjDJ8HtOYnyJIEej0bLSccM8rE77WrC+Xox/kdBwEFDO8MsxNA==", - "dev": true - }, - "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.5.tgz", - "integrity": "sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw==", + "node_modules/@semantic-release/github/node_modules/clean-stack": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", "dev": true, "dependencies": { - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" + "escape-string-regexp": "5.0.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vscode/vsce": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.9.1.tgz", - "integrity": "sha512-MPn5p+DoudI+3GfJSpAZZraE1lgLv0LcwbH3+xy7RgEhty3UIkmUMUA+5jPTDaxXae00AnX5u77FxGM8FhfKKA==", + "node_modules/@semantic-release/github/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "dependencies": { - "@azure/identity": "^4.1.0", - "@secretlint/node": "^10.1.2", - "@secretlint/secretlint-formatter-sarif": "^10.1.2", - "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", - "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", - "@vscode/vsce-sign": "^2.0.0", - "azure-devops-node-api": "^12.5.0", - "chalk": "^4.1.2", - "cheerio": "^1.0.0-rc.9", - "cockatiel": "^3.1.2", - "commander": "^12.1.0", - "form-data": "^4.0.0", - "glob": "^11.0.0", - "hosted-git-info": "^4.0.2", - "jsonc-parser": "^3.2.0", - "leven": "^3.1.0", - "markdown-it": "^14.1.0", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "secretlint": "^10.1.2", - "semver": "^7.5.2", - "tmp": "^0.2.3", - "typed-rest-client": "^1.8.4", - "url-join": "^4.0.1", - "xml2js": "^0.5.0", - "yauzl": "^3.2.1", - "yazl": "^2.2.2" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/mime": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa" + ], "bin": { - "vsce": "vsce" + "mime": "bin/cli.js" }, "engines": { - "node": ">= 20" - }, - "optionalDependencies": { - "keytar": "^7.7.0" + "node": ">=16" } }, - "node_modules/@vscode/vsce-sign": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", - "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", + "node_modules/@semantic-release/github/node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", "dev": true, - "hasInstallScript": true, - "optionalDependencies": { - "@vscode/vsce-sign-alpine-arm64": "2.0.6", - "@vscode/vsce-sign-alpine-x64": "2.0.6", - "@vscode/vsce-sign-darwin-arm64": "2.0.6", - "@vscode/vsce-sign-darwin-x64": "2.0.6", - "@vscode/vsce-sign-linux-arm": "2.0.6", - "@vscode/vsce-sign-linux-arm64": "2.0.6", - "@vscode/vsce-sign-linux-x64": "2.0.6", - "@vscode/vsce-sign-win32-arm64": "2.0.6", - "@vscode/vsce-sign-win32-x64": "2.0.6" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@vscode/vsce-sign-linux-x64": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", - "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", - "cpu": [ - "x64" - ], + "node_modules/@semantic-release/npm": { + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-13.1.5.tgz", + "integrity": "sha512-Hq5UxzoatN3LHiq2rTsWS54nCdqJHlsssGERCo8WlvdfFA9LoN0vO+OuKVSjtNapIc/S8C2LBj206wKLHg62mg==", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@actions/core": "^3.0.0", + "@semantic-release/error": "^4.0.0", + "aggregate-error": "^5.0.0", + "env-ci": "^11.2.0", + "execa": "^9.0.0", + "fs-extra": "^11.0.0", + "lodash-es": "^4.17.21", + "nerf-dart": "^1.0.0", + "normalize-url": "^9.0.0", + "npm": "^11.6.2", + "rc": "^1.2.8", + "read-pkg": "^10.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^3.0.0" + }, + "engines": { + "node": "^22.14.0 || >= 24.10.0" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "node_modules/@semantic-release/npm/node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, "engines": { - "node": ">= 14" + "node": ">=18" } }, - "node_modules/ajv": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "node_modules/@semantic-release/npm/node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "engines": { + "node": ">=18" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/@semantic-release/npm/node_modules/aggregate-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, - "license": "MIT", + "dependencies": { + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" + }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", - "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "node_modules/@semantic-release/npm/node_modules/clean-stack": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", "dev": true, "dependencies": { - "environment": "^1.0.0" + "escape-string-regexp": "5.0.0" }, "engines": { - "node": ">=18" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@semantic-release/npm/node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", "dev": true, - "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, "engines": { - "node": ">=8" + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@semantic-release/npm/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@semantic-release/npm/node_modules/hosted-git-info": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", "dev": true, - "license": "ISC", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "lru-cache": "^11.1.0" }, "engines": { - "node": ">= 8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/@semantic-release/npm/node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=18.18.0" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/azure-devops-node-api": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", - "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "node_modules/@semantic-release/npm/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/@semantic-release/npm/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/binaryextensions": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", - "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", + "node_modules/@semantic-release/npm/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, - "dependencies": { - "editions": "^6.21.0" - }, "engines": { - "node": ">=4" + "node": ">=18" }, "funding": { - "url": "https://bevry.me/fund" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/@semantic-release/npm/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", "dev": true, - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "engines": { + "node": "20 || >=22" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/boundary": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", - "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", - "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "node_modules/@semantic-release/npm/node_modules/normalize-package-data": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz", + "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "hosted-git-info": "^9.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/@semantic-release/npm/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "dev": true, - "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "license": "ISC" - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "node_modules/@semantic-release/npm/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "dependencies": { - "run-applescript": "^7.0.0" - }, "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/@semantic-release/npm/node_modules/read-pkg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.1.0.tgz", + "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", "dev": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "@types/normalize-package-data": "^2.4.4", + "normalize-package-data": "^8.0.0", + "parse-json": "^8.3.0", + "type-fest": "^5.4.4", + "unicorn-magic": "^0.4.0" }, "engines": { - "node": ">= 0.4" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/@semantic-release/npm/node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", "dev": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@semantic-release/npm/node_modules/type-fest": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "tagged-tag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=20" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cheerio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", - "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "node_modules/@semantic-release/release-notes-generator": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-14.1.0.tgz", + "integrity": "sha512-CcyDRk7xq+ON/20YNR+1I/jP7BYKICr1uKd1HHpROSnnTdGqOTburi4jcRiTYz0cpfhxSloQO3cGhnoot7IEkA==", "dev": true, "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "encoding-sniffer": "^0.2.1", - "htmlparser2": "^10.1.0", - "parse5": "^7.3.0", - "parse5-htmlparser2-tree-adapter": "^7.1.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^7.19.0", - "whatwg-mimetype": "^4.0.0" + "conventional-changelog-angular": "^8.0.0", + "conventional-changelog-writer": "^8.0.0", + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.0.0", + "debug": "^4.0.0", + "get-stream": "^7.0.0", + "import-from-esm": "^2.0.0", + "into-stream": "^7.0.0", + "lodash-es": "^4.17.21", + "read-package-up": "^11.0.0" }, "engines": { - "node": ">=20.18.1" + "node": ">=20.8.1" }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + "peerDependencies": { + "semantic-release": ">=20.1.0" } }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "node_modules/@simple-libs/stream-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-1.2.0.tgz", + "integrity": "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==", "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://ko-fi.com/dangreen" } }, - "node_modules/cheerio/node_modules/undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, "engines": { - "node": ">=14.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, "engines": { - "node": ">= 8.10.0" + "node": ">=18" }, "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "optional": true + "node_modules/@textlint/ast-node-types": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.6.0.tgz", + "integrity": "sha512-CxZHFbYAU7J0A4izz31wV2ZZfySR6aVj2OSR6/3tppZm7VV6hM7nA7sutsLwIiBL/v4lsB1RM79l4Dc/VrH4qw==", + "dev": true }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/@textlint/linter-formatter": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.6.0.tgz", + "integrity": "sha512-IwHRhjwxs0a5t1eNAoKAdV224CDca38LyopPofXpwO/d0J75wBvzf/cBHXNl4TMsLKhYGtR83UprcLEKj/gZsA==", "dev": true, - "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "@azu/format-text": "^1.0.2", + "@azu/style-format": "^1.0.1", + "@textlint/module-interop": "15.6.0", + "@textlint/resolver": "15.6.0", + "@textlint/types": "15.6.0", + "chalk": "^4.1.2", + "debug": "^4.4.3", + "js-yaml": "^4.1.1", + "lodash": "^4.18.1", + "pluralize": "^2.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "table": "^6.9.0", + "text-table": "^0.2.0" } }, - "node_modules/cockatiel": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", - "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", - "dev": true, - "engines": { - "node": ">=16" - } + "node_modules/@textlint/linter-formatter/node_modules/pluralize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", + "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", + "dev": true }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@textlint/module-interop": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.6.0.tgz", + "integrity": "sha512-MHY6pJx9i5kOlrvUSK51887tYZjHAV2qnr6unBm7LtBLGDFo93utdYqHyWep8r9QLsilQdeijWtufJI46z4v4w==", + "dev": true + }, + "node_modules/@textlint/resolver": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.6.0.tgz", + "integrity": "sha512-T1l2Gd3455pwtm0cTewhX/LLy3bL9z6/Fu/am+jj+jjGfXVoknYkjfkZEKrjHlA7xzay0EfUKnu//teYemLeZw==", + "dev": true + }, + "node_modules/@textlint/types": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.6.0.tgz", + "integrity": "sha512-CvgYb1PiqF4BGyoZebGWzAJCZ4ChJAZ9gtWjpQIMKE4Xe2KlSwDA8m8MsiZIV321f5Ibx38BMjC1Z/2ZYP2GQg==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@textlint/ast-node-types": "15.6.0" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "license": "MIT" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@types/node": { + "version": "20.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.39.tgz", + "integrity": "sha512-orrrD74MBUyK8jOAD/r0+lfa1I2MO6I+vAkmAWzMYbCcgrN4lCrmK52gRFQq/JRxfYPfonkr4b0jcY7Olqdqbw==", "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "undici-types": "~6.21.0" } }, - "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "engines": { - "node": ">=18" - } + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", "dev": true }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/@types/vscode": { + "version": "1.116.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.116.0.tgz", + "integrity": "sha512-sYHp4MO6BqJ2PD7Hjt0hlIS3tMaYsVPJrd0RUjDJ8HtOYnyJIEej0bLSccM8rE77WrC+Xox/kdBwEFDO8MsxNA==", + "dev": true + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.5.tgz", + "integrity": "sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=20.0.0" } }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "node_modules/@vscode/vsce": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.9.1.tgz", + "integrity": "sha512-MPn5p+DoudI+3GfJSpAZZraE1lgLv0LcwbH3+xy7RgEhty3UIkmUMUA+5jPTDaxXae00AnX5u77FxGM8FhfKKA==", "dev": true, "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "@azure/identity": "^4.1.0", + "@secretlint/node": "^10.1.2", + "@secretlint/secretlint-formatter-sarif": "^10.1.2", + "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", + "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", + "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", + "chalk": "^4.1.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^12.1.0", + "form-data": "^4.0.0", + "glob": "^11.0.0", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "markdown-it": "^14.1.0", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "secretlint": "^10.1.2", + "semver": "^7.5.2", + "tmp": "^0.2.3", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^3.2.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "dev": true, "engines": { - "node": ">= 6" + "node": ">= 20" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "optionalDependencies": { + "keytar": "^7.7.0" } }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/@vscode/vsce-sign": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", + "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "hasInstallScript": true, + "optionalDependencies": { + "@vscode/vsce-sign-alpine-arm64": "2.0.6", + "@vscode/vsce-sign-alpine-x64": "2.0.6", + "@vscode/vsce-sign-darwin-arm64": "2.0.6", + "@vscode/vsce-sign-darwin-x64": "2.0.6", + "@vscode/vsce-sign-linux-arm": "2.0.6", + "@vscode/vsce-sign-linux-arm64": "2.0.6", + "@vscode/vsce-sign-linux-x64": "2.0.6", + "@vscode/vsce-sign-win32-arm64": "2.0.6", + "@vscode/vsce-sign-win32-x64": "2.0.6" } }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "node_modules/@vscode/vsce-sign-linux-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", + "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "optional": true, "dependencies": { - "mimic-response": "^3.1.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, - "optional": true, + "license": "MIT", "engines": { - "node": ">=4.0.0" + "node": ">=6" } }, - "node_modules/default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" + "environment": "^1.0.0" }, "engines": { "node": ">=18" @@ -1274,821 +1470,5253 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-browser-id": { + "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", - "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/delayed-stream": { + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/argv-formatter": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", + "dev": true + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", "dev": true, - "optional": true, + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/before-after-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/diff": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", - "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "node_modules/binaryextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", + "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", "dev": true, - "license": "BSD-3-Clause", + "dependencies": { + "editions": "^6.21.0" + }, "engines": { - "node": ">=0.3.1" + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" } }, - "node_modules/dom-serializer": { + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "dev": true + }, + "node_modules/boundary": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", + "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "dev": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/cli-highlight/node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/cli-highlight/node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cockatiel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.1.tgz", + "integrity": "sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.4.0.tgz", + "integrity": "sha512-HHBFkk1EECxxmCi4CTu091iuDpQv5/OavuCUAuZmrkWpmYfyD816nom1CvtfXJ/uYfAAjavgHvXHX291tSLK8g==", + "dev": true, + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0", + "conventional-commits-filter": "^5.0.0", + "handlebars": "^4.7.7", + "meow": "^13.0.0", + "semver": "^7.5.2" + }, + "bin": { + "conventional-changelog-writer": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-commits-filter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz", + "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-commits-parser": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.4.0.tgz", + "integrity": "sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==", + "dev": true, + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0", + "meow": "^13.0.0" + }, + "bin": { + "conventional-commits-parser": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/convert-hrtime": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", + "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dev": true, + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", + "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", + "dev": true, + "dependencies": { + "version-range": "^4.15.0" + }, + "engines": { + "ecmascript": ">= es5", + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "dev": true + }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-ci": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-11.2.0.tgz", + "integrity": "sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA==", + "dev": true, + "dependencies": { + "execa": "^8.0.0", + "java-properties": "^1.0.2" + }, + "engines": { + "node": "^18.17 || >=20.6.1" + } + }, + "node_modules/env-ci/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/env-ci/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/env-ci/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-content-type-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-versions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-6.0.0.tgz", + "integrity": "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==", + "dev": true, + "dependencies": { + "semver-regex": "^4.0.5", + "super-regex": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "optional": true + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-timeout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", + "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/git-log-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", + "integrity": "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==", + "dev": true, + "dependencies": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "0.6.8" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "optional": true + }, + "node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/hook-std": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-4.0.0.tgz", + "integrity": "sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==", + "dev": true, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from-esm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-from-esm/-/import-from-esm-2.0.0.tgz", + "integrity": "sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "import-meta-resolve": "^4.0.0" + }, + "engines": { + "node": ">=18.20" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/index-to-position": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "dev": true, + "dependencies": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/issue-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", + "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", + "dev": true, + "dependencies": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + }, + "engines": { + "node": "^18.17 || >=20.6.1" + } + }, + "node_modules/istextorbinary": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", + "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "dev": true, + "dependencies": { + "binaryextensions": "^6.11.0", + "editions": "^6.21.0", + "textextensions": "^6.11.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json-with-bigint": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.8.tgz", + "integrity": "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "dev": true, + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dev": true, + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true + }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "dev": true + }, + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", + "dev": true + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "dev": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-asynchronous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-asynchronous/-/make-asynchronous-1.1.0.tgz", + "integrity": "sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==", + "dev": true, + "dependencies": { + "p-event": "^6.0.0", + "type-fest": "^4.6.0", + "web-worker": "^1.5.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/marked-terminal": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.3.0.tgz", + "integrity": "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^7.0.0", + "ansi-regex": "^6.1.0", + "chalk": "^5.4.1", + "cli-highlight": "^2.1.11", + "cli-table3": "^0.6.5", + "node-emoji": "^2.2.0", + "supports-hyperlinks": "^3.1.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "marked": ">=1 <16" + } + }, + "node_modules/marked-terminal/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/marked-terminal/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true + }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "optional": true + }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "dev": true, + "optional": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "dev": true + }, + "node_modules/node-abi": { + "version": "3.89.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.89.0.tgz", + "integrity": "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==", + "dev": true, + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true, + "optional": true + }, + "node_modules/node-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-sarif-builder": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz", + "integrity": "sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==", + "dev": true, + "dependencies": { + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-9.0.0.tgz", + "integrity": "sha512-z9nC87iaZXXySbWWtTHfCFJyFvKaUAW6lODhikG7ILSbVgmwuFjUqkgnheHvAUcGedO29e2QGBRXMUD64aurqQ==", + "dev": true, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.13.0.tgz", + "integrity": "sha512-cRmhaghDWA1lFgl3Ug4/VxDJdPBK/U+tNtnrl9kXunFqhWw1x4xL5txkNn7qzPuVfvXOmXyjHpMwsuk2uisbkg==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/metavuln-calculator", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which" + ], + "dev": true, + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^9.4.3", + "@npmcli/config": "^10.8.1", + "@npmcli/fs": "^5.0.0", + "@npmcli/map-workspaces": "^5.0.3", + "@npmcli/metavuln-calculator": "^9.0.3", + "@npmcli/package-json": "^7.0.5", + "@npmcli/promise-spawn": "^9.0.1", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.4", + "@sigstore/tuf": "^4.0.2", + "abbrev": "^4.0.0", + "archy": "~1.0.0", + "cacache": "^20.0.4", + "chalk": "^5.6.2", + "ci-info": "^4.4.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^13.0.6", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^9.0.2", + "ini": "^6.0.0", + "init-package-json": "^8.2.5", + "is-cidr": "^6.0.4", + "json-parse-even-better-errors": "^5.0.0", + "libnpmaccess": "^10.0.3", + "libnpmdiff": "^8.1.6", + "libnpmexec": "^10.2.6", + "libnpmfund": "^7.0.20", + "libnpmorg": "^8.0.1", + "libnpmpack": "^9.1.6", + "libnpmpublish": "^11.1.3", + "libnpmsearch": "^9.0.1", + "libnpmteam": "^8.0.2", + "libnpmversion": "^8.0.3", + "make-fetch-happen": "^15.0.5", + "minimatch": "^10.2.5", + "minipass": "^7.1.3", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^12.3.0", + "nopt": "^9.0.0", + "npm-audit-report": "^7.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.2", + "npm-pick-manifest": "^11.0.3", + "npm-profile": "^12.0.1", + "npm-registry-fetch": "^19.1.1", + "npm-user-validate": "^4.0.0", + "p-map": "^7.0.4", + "pacote": "^21.5.0", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.1.0", + "qrcode-terminal": "^0.12.0", + "read": "^5.0.1", + "semver": "^7.7.4", + "spdx-expression-parse": "^4.0.0", + "ssri": "^13.0.1", + "supports-color": "^10.2.2", + "tar": "^7.5.13", + "text-table": "~0.2.0", + "tiny-relative-date": "^2.0.2", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^7.0.2", + "which": "^6.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/@gar/promise-retry": { + "version": "1.0.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "9.4.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^5.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/query": "^5.0.0", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.0", + "bin-links": "^6.0.0", + "cacache": "^20.0.1", + "common-ancestor-path": "^2.0.0", + "hosted-git-info": "^9.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", + "nopt": "^9.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.0", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.0.0", + "proggy": "^4.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "semver": "^7.3.7", + "ssri": "^13.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "10.8.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "ini": "^6.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "7.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "5.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "glob": "^13.0.0", + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^20.0.0", + "json-parse-even-better-errors": "^5.0.0", + "pacote": "^21.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "7.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "spdx-expression-parse": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "10.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "3.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.5.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@gar/promise-retry": "^1.0.2", + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.2.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.4", + "proc-log": "^6.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^10.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/npm/node_modules/bin-links": { + "version": "6.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "proc-log": "^6.0.0", + "read-cmd-shim": "^6.0.0", + "write-file-atomic": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "5.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "20.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "5.6.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.4.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "5.0.4", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.4.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/diff": { + "version": "8.0.4", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "13.0.6", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "9.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.7.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^10.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/ini": { + "version": "6.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "8.2.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^7.0.0", + "npm-package-arg": "^13.0.0", + "promzard": "^3.0.1", + "read": "^5.0.1", + "semver": "^7.7.2", + "validate-npm-package-name": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/ip-address": { + "version": "10.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "6.0.4", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^5.0.4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/npm/node_modules/isexe": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "10.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "8.1.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.4.3", + "@npmcli/installed-package-contents": "^4.0.0", + "binary-extensions": "^3.0.0", + "diff": "^8.0.2", + "minimatch": "^10.0.3", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "tar": "^7.5.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "10.2.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/arborist": "^9.4.3", + "@npmcli/package-json": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "proc-log": "^6.0.0", + "read": "^5.0.1", + "semver": "^7.3.7", + "signal-exit": "^4.1.0", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "7.0.20", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.4.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "8.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "9.1.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.4.3", + "@npmcli/run-script": "^10.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "11.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7", + "sigstore": "^4.0.0", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "9.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "8.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "8.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "11.3.5", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "15.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "@npmcli/redact": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "10.2.5", "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "node_modules/npm/node_modules/minipass": { + "version": "7.1.3", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "domelementtype": "^2.3.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "node_modules/npm/node_modules/minipass-fetch": { + "version": "5.0.2", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "engines": { + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "iconv-lite": "^0.7.2" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.6", "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "minipass": "^7.1.3" }, "engines": { - "node": ">= 0.4" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "safe-buffer": "^5.0.1" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/editions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", - "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "version-range": "^4.15.0" + "yallist": "^4.0.0" }, "engines": { - "ecmascript": ">= es5", - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" + "node": ">=8" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "license": "MIT" + "inBundle": true, + "license": "ISC" }, - "node_modules/encoding-sniffer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", - "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "node_modules/npm/node_modules/minipass-sized": { + "version": "2.0.0", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "iconv-lite": "^0.6.3", - "whatwg-encoding": "^3.1.1" + "minipass": "^7.1.2" }, - "funding": { - "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "node_modules/npm/node_modules/minizlib": { + "version": "3.1.0", "dev": true, - "optional": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "once": "^1.4.0" + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } + "inBundle": true, + "license": "MIT" }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "node_modules/npm/node_modules/mute-stream": { + "version": "3.0.0", "dev": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/npm/node_modules/negotiator": { + "version": "1.0.0", "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/npm/node_modules/node-gyp": { + "version": "12.3.0", "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, "engines": { - "node": ">= 0.4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/npm/node_modules/nopt": { + "version": "9.0.0", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "es-errors": "^1.3.0" + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">= 0.4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/npm/node_modules/npm-audit-report": { + "version": "7.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "5.0.0", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "npm-normalize-package-bin": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "node_modules/npm/node_modules/npm-install-checks": { + "version": "8.0.0", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "node_modules/npm/node_modules/npm-package-arg": { + "version": "13.0.2", "dev": true, - "optional": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" + }, "engines": { - "node": ">=6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "node_modules/npm/node_modules/npm-packlist": { + "version": "10.0.4", "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" }, "engines": { - "node": ">=8.6.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "11.0.3", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "node_modules/npm/node_modules/npm-profile": { + "version": "12.0.1", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "reusify": "^1.0.4" + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "19.1.1", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "to-regex-range": "^5.0.1" + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/npm/node_modules/npm-user-validate": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "7.0.4", "dev": true, + "inBundle": true, "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/npm/node_modules/pacote": { + "version": "21.5.0", "dev": true, - "license": "BSD-3-Clause", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" + }, "bin": { - "flat": "cli.js" + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "5.0.1", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "json-parse-even-better-errors": "^5.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" }, "engines": { - "node": ">=14" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "7.1.1", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "node_modules/npm/node_modules/proc-log": { + "version": "6.1.0", "dev": true, - "optional": true + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "node_modules/npm/node_modules/proggy": { + "version": "4.0.0", "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=14.14" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", "dev": true, + "inBundle": true, + "license": "ISC", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", "dev": true, + "inBundle": true, "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/npm/node_modules/promzard": { + "version": "3.0.1", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "read": "^5.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "dev": true, + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "5.0.1", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "mute-stream": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/get-tsconfig": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", - "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "6.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", "dev": true, + "inBundle": true, + "license": "MIT", "optional": true }, - "node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/npm/node_modules/semver": { + "version": "7.7.4", "dev": true, - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, + "inBundle": true, + "license": "ISC", "bin": { - "glob": "dist/esm/bin.mjs" + "semver": "bin/semver.js" }, "engines": { - "node": "20 || >=22" + "node": ">=10" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/npm/node_modules/sigstore": { + "version": "4.1.0", "dev": true, - "license": "ISC", + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "is-glob": "^4.0.1" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.1.0", + "@sigstore/tuf": "^4.0.1", + "@sigstore/verify": "^3.1.0" }, "engines": { - "node": ">= 6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/glob/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": "18 || 20 || >=22" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.8.7", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.23", "dev": true, + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "13.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "balanced-match": "^4.0.2" + "minipass": "^7.0.3" }, "engines": { - "node": "18 || 20 || >=22" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "node_modules/npm/node_modules/supports-color": { + "version": "10.2.2", "dev": true, - "dependencies": { - "brace-expansion": "^5.0.5" - }, + "inBundle": true, + "license": "MIT", "engines": { - "node": "18 || 20 || >=22" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "node_modules/npm/node_modules/tar": { + "version": "7.5.13", "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.16", "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, "engines": { - "node": ">= 0.4" + "node": ">=12.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - }, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "node_modules/npm/node_modules/tuf-js": { + "version": "4.1.0", "dev": true, + "inBundle": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "@tufjs/models": "4.1.0", + "debug": "^4.4.3", + "make-fetch-happen": "^15.0.1" }, "engines": { - "node": ">= 0.4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/npm/node_modules/undici": { + "version": "6.25.0", "dev": true, + "inBundle": true, "license": "MIT", - "bin": { - "he": "bin/he" + "engines": { + "node": ">=18.17" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } + "inBundle": true, + "license": "MIT" }, - "node_modules/htmlparser2": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", - "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "7.0.2", "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "entities": "^7.0.1" + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "node_modules/npm/node_modules/walk-up-path": { + "version": "4.0.0", "dev": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": "20 || >=22" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "node_modules/npm/node_modules/which": { + "version": "6.0.1", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 14" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "node_modules/npm/node_modules/write-file-atomic": { + "version": "7.0.1", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 14" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/npm/node_modules/yallist": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "boolbase": "^1.0.0" }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, "engines": { - "node": ">= 4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/index-to-position": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", - "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, "engines": { "node": ">=18" }, @@ -2096,1195 +6724,1081 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "optional": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", "dev": true, - "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "p-timeout": "^6.1.2" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "node_modules/p-filter": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { + "p-map": "^7.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { + "node_modules/p-is-promise": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=14.16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-obj": { + "node_modules/p-reduce": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-wsl": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", - "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, - "dependencies": { - "is-inside-container": "^1.0.0" - }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true }, - "node_modules/istextorbinary": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", - "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { - "binaryextensions": "^6.11.0", - "editions": "^6.21.0", - "textextensions": "^6.11.0" + "callsites": "^3.0.0" }, "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" + "node": ">=6" } }, - "node_modules/jackspeak": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", - "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", "dev": true, "dependencies": { - "@isaacs/cliui": "^9.0.0" + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" }, "engines": { - "node": "20 || >=22" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/js-tokens": { + "node_modules/parse-ms": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" + "engines": { + "node": ">=18" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" + "dependencies": { + "semver": "^5.1.0" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "bin": { + "semver": "bin/semver" } }, - "node_modules/jsonwebtoken": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, "dependencies": { - "jws": "^4.0.1", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" + "entities": "^6.0.0" }, - "engines": { - "node": ">=12", - "npm": ">=6" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dev": true, "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/jws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", - "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", "dev": true, "dependencies": { - "jwa": "^2.0.1", - "safe-buffer": "^5.0.1" + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/keytar": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", - "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.0.1" + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "uc.micro": "^2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, - "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "dev": true - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "dev": true - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "dev": true - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "dev": true - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "dev": true, + "engines": { + "node": "20 || >=22" + } }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, "engines": { - "node": ">=10" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/markdown-it": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", - "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", "dev": true, "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" + "engines": { + "node": ">=4" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "node_modules/pkg-conf/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/mdurl": { + "node_modules/pkg-conf/node_modules/locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "p-try": "^1.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=4" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, - "bin": { - "mime": "cli.js" + "dependencies": { + "p-limit": "^1.1.0" }, "engines": { "node": ">=4" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", "dev": true, "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "parse-ms": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=6" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, - "optional": true - }, - "node_modules/mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" + "side-channel": "^1.1.0" }, "engines": { - "node": ">= 14.0.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mocha/node_modules/brace-expansion": { + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", - "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "safe-buffer": "^5.1.0" } }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "rc": "cli.js" } }, - "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/rc-config-loader": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.4.tgz", + "integrity": "sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==", "dev": true, - "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "debug": "^4.4.3", + "js-yaml": "^4.1.1", + "json5": "^2.2.3", + "require-from-string": "^2.0.2" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "mute-stream": "~0.0.4" }, "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/read-package-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", "dev": true, - "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "dev": true, - "optional": true - }, - "node_modules/node-abi": { - "version": "3.89.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.89.0.tgz", - "integrity": "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==", + "node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", "dev": true, - "optional": true, "dependencies": { - "semver": "^7.3.5" + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, - "optional": true + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/node-sarif-builder": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz", - "integrity": "sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "optional": true, "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=18" + "node": ">= 6" } }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "picomatch": "^2.2.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8.10.0" } }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "node_modules/registry-auth-token": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", "dev": true, "dependencies": { - "lru-cache": "^10.0.1" + "@pnpm/npm-conf": "^3.0.2" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=14" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, - "dependencies": { - "wrappy": "1" + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "queue-microtask": "^1.2.2" } }, - "node_modules/p-map": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=11.0.0" } }, - "node_modules/parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "node_modules/secretlint": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.2.tgz", + "integrity": "sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==", "dev": true, "dependencies": { - "semver": "^5.1.0" + "@secretlint/config-creator": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/node": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "debug": "^4.4.1", + "globby": "^14.1.0", + "read-pkg": "^9.0.1" + }, + "bin": { + "secretlint": "bin/secretlint.js" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/parse-semver/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, + "node_modules/semantic-release": { + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.3.tgz", + "integrity": "sha512-WRgl5GcypwramYX4HV+eQGzUbD7UUbljVmS+5G1uMwX/wLgYuJAxGeerXJDMO2xshng4+FXqCgyB5QfClV6WjA==", + "dev": true, + "dependencies": { + "@semantic-release/commit-analyzer": "^13.0.1", + "@semantic-release/error": "^4.0.0", + "@semantic-release/github": "^12.0.0", + "@semantic-release/npm": "^13.1.1", + "@semantic-release/release-notes-generator": "^14.1.0", + "aggregate-error": "^5.0.0", + "cosmiconfig": "^9.0.0", + "debug": "^4.0.0", + "env-ci": "^11.0.0", + "execa": "^9.0.0", + "figures": "^6.0.0", + "find-versions": "^6.0.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^4.0.0", + "hosted-git-info": "^9.0.0", + "import-from-esm": "^2.0.0", + "lodash-es": "^4.17.21", + "marked": "^15.0.0", + "marked-terminal": "^7.3.0", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-package-up": "^12.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "signale": "^1.2.1", + "yargs": "^18.0.0" + }, "bin": { - "semver": "bin/semver" + "semantic-release": "bin/semantic-release.js" + }, + "engines": { + "node": "^22.14.0 || >= 24.10.0" } }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "node_modules/semantic-release/node_modules/@semantic-release/error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">=18" } }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "node_modules/semantic-release/node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5-parser-stream": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "node_modules/semantic-release/node_modules/aggregate-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, "dependencies": { - "parse5": "^7.0.0" + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, "engines": { - "node": ">=0.12" + "node": ">=18" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/semantic-release/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/semantic-release/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "node_modules/semantic-release/node_modules/clean-stack": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", "dev": true, "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "escape-string-regexp": "5.0.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", - "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "node_modules/semantic-release/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "dev": true, + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, "engines": { - "node": "20 || >=22" + "node": ">=20" } }, - "node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "node_modules/semantic-release/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true + }, + "node_modules/semantic-release/node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, "engines": { - "node": ">=18" + "node": "^18.19.0 || >=20.5.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "node_modules/semantic-release/node_modules/execa/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, - "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, "engines": { - "node": ">=8.6" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "node_modules/semantic-release/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "node_modules/semantic-release/node_modules/hosted-git-info": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", "dev": true, - "optional": true, "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" + "lru-cache": "^11.1.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "optional": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "node_modules/semantic-release/node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", "dev": true, "engines": { - "node": ">=6" + "node": ">=18.18.0" } }, - "node_modules/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "node_modules/semantic-release/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "dependencies": { - "side-channel": "^1.1.0" - }, "engines": { - "node": ">=0.6" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/semantic-release/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/semantic-release/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "engines": { + "node": ">=18" }, - "bin": { - "rc": "cli.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rc-config-loader": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.4.tgz", - "integrity": "sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==", + "node_modules/semantic-release/node_modules/lru-cache": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", "dev": true, - "dependencies": { - "debug": "^4.4.3", - "js-yaml": "^4.1.1", - "json5": "^2.2.3", - "require-from-string": "^2.0.2" + "engines": { + "node": "20 || >=22" } }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "node_modules/semantic-release/node_modules/normalize-package-data": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz", + "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", "dev": true, "dependencies": { - "mute-stream": "~0.0.4" + "hosted-git-info": "^9.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=0.8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/read-pkg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "node_modules/semantic-release/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "dev": true, "dependencies": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" }, "engines": { "node": ">=18" @@ -3293,89 +7807,114 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg/node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "node_modules/semantic-release/node_modules/p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/semantic-release/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/semantic-release/node_modules/read-package-up": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-12.0.0.tgz", + "integrity": "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==", "dev": true, - "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "find-up-simple": "^1.0.1", + "read-pkg": "^10.0.0", + "type-fest": "^5.2.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/semantic-release/node_modules/read-pkg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.1.0.tgz", + "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", "dev": true, - "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.4", + "normalize-package-data": "^8.0.0", + "parse-json": "^8.3.0", + "type-fest": "^5.4.4", + "unicorn-magic": "^0.4.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/semantic-release/node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "node_modules/semantic-release/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, - "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "node_modules/semantic-release/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/run-applescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "node_modules/semantic-release/node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, "engines": { "node": ">=18" @@ -3384,83 +7923,62 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/semantic-release/node_modules/type-fest": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "queue-microtask": "^1.2.2" + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sax": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", - "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "node_modules/semantic-release/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, "engines": { - "node": ">=11.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/secretlint": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.2.tgz", - "integrity": "sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==", + "node_modules/semantic-release/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", "dev": true, "dependencies": { - "@secretlint/config-creator": "^10.2.2", - "@secretlint/formatter": "^10.2.2", - "@secretlint/node": "^10.2.2", - "@secretlint/profiler": "^10.2.2", - "debug": "^4.4.1", - "globby": "^14.1.0", - "read-pkg": "^9.0.1" - }, - "bin": { - "secretlint": "bin/secretlint.js" + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=20.0.0" + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/semantic-release/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/semver": { @@ -3475,6 +7993,18 @@ "node": ">=10" } }, + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -3578,16 +8108,113 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "dev": true, + "dependencies": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/signale/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/signale/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/signale/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/signale/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { - "node": ">=14" + "node": ">=4" + } + }, + "node_modules/signale/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=4" } }, "node_modules/simple-concat": { @@ -3637,6 +8264,18 @@ "simple-concat": "^1.0.0" } }, + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "dev": true, + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", @@ -3666,6 +8305,21 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", + "dev": true + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -3698,6 +8352,55 @@ "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true }, + "node_modules/split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "dev": true, + "dependencies": { + "through2": "~2.0.0" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "dev": true, + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-combiner2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-combiner2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stream-combiner2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -3736,12 +8439,29 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, - "optional": true, "engines": { "node": ">=0.10.0" } @@ -3755,6 +8475,23 @@ "boundary": "^2.0.0" } }, + "node_modules/super-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.1.0.tgz", + "integrity": "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==", + "dev": true, + "dependencies": { + "function-timeout": "^1.0.1", + "make-asynchronous": "^1.0.1", + "time-span": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3799,6 +8536,18 @@ "node": ">=10.0.0" } }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "dev": true, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tar-fs": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", @@ -3829,6 +8578,57 @@ "node": ">=6" } }, + "node_modules/temp-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", + "dev": true, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/tempy": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.2.0.tgz", + "integrity": "sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ==", + "dev": true, + "dependencies": { + "is-stream": "^3.0.0", + "temp-dir": "^3.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/terminal-link": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", @@ -3866,6 +8666,127 @@ "url": "https://bevry.me/fund" } }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "dev": true, + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmp": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", @@ -3888,6 +8809,18 @@ "node": ">=8.0" } }, + "node_modules/traverse": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", + "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -3978,18 +8911,52 @@ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/underscore": { "version": "1.13.8", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", "dev": true }, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/unicorn-magic": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", @@ -4002,6 +8969,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dev": true, + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universal-user-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "dev": true + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -4021,8 +9009,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "optional": true + "dev": true }, "node_modules/uuid": { "version": "8.3.2", @@ -4056,6 +9043,12 @@ "url": "https://bevry.me/fund" } }, + "node_modules/web-worker": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.5.0.tgz", + "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", + "dev": true + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -4093,6 +9086,12 @@ "node": ">= 8" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "node_modules/workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", @@ -4161,6 +9160,15 @@ "node": ">=4.0" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -4256,6 +9264,18 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index c01a966..fd4c46a 100644 --- a/package.json +++ b/package.json @@ -148,15 +148,21 @@ "publish": "vsce publish" }, "devDependencies": { + "@semantic-release/commit-analyzer": "^13.0.1", + "@semantic-release/git": "^10.0.1", + "@semantic-release/github": "^12.0.6", + "@semantic-release/npm": "^13.1.5", + "@semantic-release/release-notes-generator": "^14.1.0", "@types/mocha": "^10.0.10", "@types/node": "^20.0.0", "@types/vscode": "^1.85.0", "@vscode/vsce": "^3.9.1", "mocha": "^10.4.0", + "semantic-release": "^25.0.3", "tsx": "^4.21.0", "typescript": "^5.3.0" }, "overrides": { "undici": "5" } -} \ No newline at end of file +} From 0f62285857ea6d1b60224d9a601423511eb195aa Mon Sep 17 00:00:00 2001 From: TREFOU Felix Date: Fri, 1 May 2026 12:29:40 +0200 Subject: [PATCH 08/28] =?UTF-8?q?feat:=20history=20tracking=20=E2=80=94=20?= =?UTF-8?q?manual=20snapshots,=20fingerprint=20diff,=20trends=20view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Storage: append-only NDJSON at .vscode/codeclimate-visualiser.history.ndjson Fingerprint resolution (HistoryManager): - native: issue.fingerprint used directly - derived: sha1(check_name:path:line) when fingerprint absent - volatile: sha1(check_name:description) as last resort derived/volatile shown with ⚠ warning in diff Sidebar (SourcesViewProvider): - New "History" collapsible section showing snapshots newest-first - Each entry: label, date, total count, +new/-fixed diff vs previous, ⚠ if derived - Save icon button in History header → runs saveSnapshot command - Delete button per snapshot Command: CodeClimate: Save History Snapshot - Prompts for optional label (e.g. v1.2.3, sprint-42) - Saves current loaded issues as snapshot Trends view (buildTrendsView): - 0 snapshots → save-first prompt - 1 snapshot → severity KPI cards - 2+ snapshots → SVG line chart (total + per-severity overlays), new/fixed/persisting diff KPIs, full snapshot table with inline label editing, delta indicators, delete per row Co-Authored-By: Claude Sonnet 4.6 --- media/webview.css | 52 ++++++++ media/webview.js | 251 +++++++++++++++++++++++++------------ package.json | 5 + src/extension.ts | 36 +++++- src/historyManager.ts | 93 ++++++++++++++ src/sourcesViewProvider.ts | 136 +++++++++++++++++++- src/types.ts | 13 ++ src/webviewPanel.ts | 19 ++- 8 files changed, 519 insertions(+), 86 deletions(-) create mode 100644 src/historyManager.ts diff --git a/media/webview.css b/media/webview.css index 538e540..0a1e274 100644 --- a/media/webview.css +++ b/media/webview.css @@ -848,6 +848,58 @@ button { font-family: inherit; color: inherit; background: none; border: none; c color: var(--fg-muted); margin-bottom: var(--gap); } +.trends-warn { + border-color: var(--sev-minor); + color: var(--sev-minor); +} +.trends-sub { + font-size: 11px; + color: var(--fg-muted); + margin-top: 4px; +} + +/* ── Snapshot table ──────────────────────────────────────────────────────────── */ +.snap-table { + width: 100%; + border-collapse: collapse; + font-size: 12px; +} +.snap-table thead th { + text-align: left; + padding: 4px 8px; + font-weight: 600; + font-size: 11px; + letter-spacing: 0.04em; + color: var(--fg-muted); + border-bottom: 1px solid var(--border); +} +.snap-table thead th:nth-child(n+3) { text-align: right; } +.snap-table tbody tr { border-bottom: 1px solid var(--border-subtle, rgba(255,255,255,0.04)); } +.snap-table tbody tr:hover { background: var(--surface-2); } +.snap-table tbody td { padding: 5px 8px; vertical-align: middle; } +.snap-ts { white-space: nowrap; color: var(--fg-muted); font-size: 11px; } +.snap-lbl-cell { min-width: 80px; } +.snap-lbl-edit { cursor: pointer; border-bottom: 1px dashed transparent; } +.snap-lbl-edit:hover { border-bottom-color: var(--fg-muted); } +.snap-lbl-input { + background: var(--vscode-input-background, #2a2a2a); + color: var(--fg); + border: 1px solid var(--accent); + border-radius: 3px; + padding: 1px 4px; + font-size: 12px; + width: 100%; + outline: none; +} +.delta-pos { color: var(--sev-critical); font-size: 11px; } +.delta-neg { color: #4ade80; font-size: 11px; } +.snap-del-btn { + background: none; border: none; color: var(--fg-muted); + cursor: pointer; padding: 2px; display: inline-flex; align-items: center; + border-radius: 3px; opacity: 0; transition: opacity 0.1s; +} +.snap-table tbody tr:hover .snap-del-btn { opacity: 0.5; } +.snap-table tbody tr:hover .snap-del-btn:hover { opacity: 1; color: var(--sev-critical); } /* ── Prism token colors ──────────────────────────────────────────────────────── */ .token.comment,.token.prolog,.token.doctype,.token.cdata { color: #6a9955; font-style: italic; } diff --git a/media/webview.js b/media/webview.js index 89aff76..eb1e6ba 100644 --- a/media/webview.js +++ b/media/webview.js @@ -29,6 +29,8 @@ let allIssues = []; let allFiles = []; /** @type {Array<{name:string, index:number}>} */ let customColumnDefs = []; +/** @type {any[]} */ +let historySnapshots = []; /** @type {{severities:Set, categories:Set|null, quickTerms:Set, sourceFiles:Set, search:string, custom:Record|null>}} */ let filters = { @@ -174,8 +176,9 @@ function getIssueCustomValue(issue, colDef) { window.addEventListener('message', (event) => { const msg = event.data; if (msg.type === 'updateIssues') { - allIssues = msg.issues ?? []; - allFiles = msg.files ?? []; + allIssues = msg.issues ?? []; + allFiles = msg.files ?? []; + historySnapshots = msg.history ?? []; if (msg.config) config = { ...config, ...msg.config }; customColumnDefs = config.customColumns ?? []; filters.sourceFiles = new Set(allFiles.map(/** @param {any} f */ f => f.uri)); @@ -893,101 +896,187 @@ function buildTrendsView(container) { const view = document.createElement('div'); view.className = 'view'; - const note = document.createElement('div'); - note.className = 'trends-note'; - note.textContent = 'Historical trends require multiple reports loaded over time. Currently showing a snapshot breakdown of the loaded reports.'; - view.appendChild(note); + const snaps = [...historySnapshots].sort((a, b) => a.timestamp.localeCompare(b.timestamp)); - // Per-source-file breakdown - /** @type {Record>} */ - const bySrc = {}; - for (const i of allIssues) { - const src = i.sourceFile ?? '(unknown)'; - if (!bySrc[src]) bySrc[src] = { blocker: 0, critical: 0, major: 0, minor: 0, info: 0, total: 0 }; - bySrc[src][(i.severity ?? 'info')]++; - bySrc[src].total++; + if (snaps.length === 0) { + const empty = document.createElement('div'); + empty.className = 'trends-note'; + empty.innerHTML = 'No history yet.

Load a CodeClimate report, then click Save Snapshot in the sidebar to start tracking trends over time.'; + view.appendChild(empty); + container.appendChild(view); + return; } - const sources = Object.entries(bySrc).sort((a, b) => b[1].total - a[1].total); - - // KPI cards per severity - const counts = { blocker: 0, critical: 0, major: 0, minor: 0, info: 0 }; - for (const i of allIssues) counts[(i.severity ?? 'info')]++; - - const sevRow = document.createElement('div'); - sevRow.className = 'row row-3col'; - for (const sev of SEVERITY_ORDER.slice(0, 3)) { + // ── Line chart ────────────────────────────────────────────────────────── + if (snaps.length >= 2) { + const chartRow = document.createElement('div'); + chartRow.className = 'row row-full'; const card = document.createElement('div'); card.className = 'card'; - const badge = document.createElement('span'); - badge.className = `sev-badge ${sev}`; - badge.textContent = sev; - const hdr = document.createElement('div'); - hdr.className = 'card-header'; - hdr.appendChild(badge); - const num = document.createElement('div'); - num.style.cssText = `font-family:var(--font-mono);font-size:36px;font-weight:600;color:${SEVERITY_COLORS[sev]};font-variant-numeric:tabular-nums;margin-top:8px;`; - num.textContent = counts[sev].toLocaleString(); - card.appendChild(hdr); - card.appendChild(num); - sevRow.appendChild(card); + const hdr = document.createElement('div'); hdr.className = 'card-header'; + const t = document.createElement('div'); t.className = 'card-title'; t.textContent = 'Total Issues Over Time'; + hdr.appendChild(t); card.appendChild(hdr); + card.insertAdjacentHTML('beforeend', buildTrendSvg(snaps)); + chartRow.appendChild(card); view.appendChild(chartRow); } - view.appendChild(sevRow); - // Source breakdown - if (sources.length > 1) { - const row = document.createElement('div'); - row.className = 'row row-full'; - const card = document.createElement('div'); - card.className = 'card'; - const hdr = document.createElement('div'); - hdr.className = 'card-header'; - const title = document.createElement('div'); - title.className = 'card-title'; - title.textContent = 'Issues by Source Report'; - hdr.appendChild(title); - card.appendChild(hdr); - - for (const [src, c] of sources) { - const srcWrap = document.createElement('div'); - srcWrap.style.cssText = 'margin-bottom:14px;'; - const srcLbl = document.createElement('div'); - srcLbl.style.cssText = 'font-family:var(--font-mono);font-size:11.5px;color:var(--fg-muted);margin-bottom:5px;display:flex;justify-content:space-between;'; - srcLbl.innerHTML = `${src}${c.total}`; - const bar = document.createElement('div'); - bar.className = 'file-bar'; - bar.style.height = '14px'; - for (const sev of SEVERITY_ORDER) { - if (!c[sev]) continue; - const seg = document.createElement('div'); - seg.className = 'file-bar-seg'; - seg.style.width = `${(c[sev] / c.total) * 100}%`; - seg.style.background = SEVERITY_COLORS[sev]; - seg.title = `${sev}: ${c[sev]}`; - bar.appendChild(seg); - } - srcWrap.appendChild(srcLbl); - srcWrap.appendChild(bar); - card.appendChild(srcWrap); + // ── Latest diff KPIs ──────────────────────────────────────────────────── + if (snaps.length >= 2) { + const prev = snaps[snaps.length - 2]; + const curr = snaps[snaps.length - 1]; + const prevSet = new Set(prev.fingerprints ?? []); + const currSet = new Set(curr.fingerprints ?? []); + const newCount = (curr.fingerprints ?? []).filter(fp => !prevSet.has(fp)).length; + const fixedCount = (prev.fingerprints ?? []).filter(fp => !currSet.has(fp)).length; + const persistCount = (curr.fingerprints ?? []).filter(fp => prevSet.has(fp)).length; + const delta = curr.total - prev.total; + + const diffRow = document.createElement('div'); + diffRow.className = 'row row-3col'; + + /** @param {string} label @param {number} val @param {string} color @param {string} [sub] */ + function diffCard(label, val, color, sub) { + const c = document.createElement('div'); c.className = 'card'; + const h = document.createElement('div'); h.className = 'card-header'; + const tl = document.createElement('div'); tl.className = 'card-title'; tl.textContent = label; + h.appendChild(tl); c.appendChild(h); + const n = document.createElement('div'); + n.style.cssText = `font-size:32px;font-weight:600;font-variant-numeric:tabular-nums;color:${color};margin-top:6px;`; + n.textContent = (val > 0 && color === 'var(--sev-critical)' ? '+' : '') + val.toLocaleString(); + c.appendChild(n); + if (sub) { const s = document.createElement('div'); s.className = 'trends-sub'; s.textContent = sub; c.appendChild(s); } + return c; + } + const hasDerived = (curr.derivedCount ?? 0) > 0 || (prev.derivedCount ?? 0) > 0; + const fpWarn = hasDerived ? ' ⚠' : ''; + diffRow.appendChild(diffCard('New Issues', newCount, 'var(--sev-critical)', 'vs previous snapshot' + fpWarn)); + diffRow.appendChild(diffCard('Fixed Issues', fixedCount, 'var(--sev-info)', 'vs previous snapshot' + fpWarn)); + diffRow.appendChild(diffCard('Net Change', delta, delta > 0 ? 'var(--sev-major)' : delta < 0 ? '#4ade80' : 'var(--fg-muted)', `${persistCount} persisting`)); + if (hasDerived) { + const warn = document.createElement('div'); warn.className = 'trends-note trends-warn'; + warn.textContent = '⚠ Some issues use derived fingerprints (no native fingerprint in report). New/Fixed counts may be inaccurate if code moved between snapshots.'; + view.appendChild(diffRow); view.appendChild(warn); + } else { + view.appendChild(diffRow); } - row.appendChild(card); - view.appendChild(row); + } else { + // Single snapshot — show severity KPIs + const curr = snaps[0]; + const sevRow = document.createElement('div'); sevRow.className = 'row row-3col'; + for (const sev of SEVERITY_ORDER.slice(0, 3)) { + const c = document.createElement('div'); c.className = 'card'; + const h = document.createElement('div'); h.className = 'card-header'; + const badge = document.createElement('span'); badge.className = `sev-badge ${sev}`; badge.textContent = sev; + h.appendChild(badge); c.appendChild(h); + const n = document.createElement('div'); + n.style.cssText = `font-size:36px;font-weight:600;font-variant-numeric:tabular-nums;color:${SEVERITY_COLORS[sev]};margin-top:8px;`; + n.textContent = (curr.counts?.[sev] ?? 0).toLocaleString(); + c.appendChild(n); sevRow.appendChild(c); + } + view.appendChild(sevRow); } - // Minor/info breakdown - const row2 = document.createElement('div'); - row2.className = 'row row-2col'; + // ── Snapshot table ────────────────────────────────────────────────────── + const tableRow = document.createElement('div'); tableRow.className = 'row row-full'; + const tableCard = document.createElement('div'); tableCard.className = 'card'; + const tableHdr = document.createElement('div'); tableHdr.className = 'card-header'; + const tableTitle = document.createElement('div'); tableTitle.className = 'card-title'; tableTitle.textContent = 'Snapshot History'; + tableHdr.appendChild(tableTitle); tableCard.appendChild(tableHdr); + + const tbl = document.createElement('table'); tbl.className = 'snap-table'; + tbl.innerHTML = 'DateLabelTotalBCMajMinI'; + const tbody = document.createElement('tbody'); - const minorEntries = computeTopN(allIssues, i => i.check_name ?? '—', 10); - row2.appendChild(buildBarCard('Top Check Names', minorEntries, '#7c5cff')); + [...snaps].reverse().forEach((snap, idx) => { + const prev = snaps[snaps.length - 1 - idx - 1]; + const tr = document.createElement('tr'); + const d = new Date(snap.timestamp); + const dateTd = document.createElement('td'); dateTd.className = 'snap-ts'; dateTd.title = d.toISOString(); dateTd.textContent = d.toLocaleDateString(undefined, { month:'short', day:'numeric', year:'2-digit' }) + ' ' + d.toLocaleTimeString(undefined, { hour:'2-digit', minute:'2-digit' }); + + const labelTd = document.createElement('td'); labelTd.className = 'snap-lbl-cell'; + const labelEl = document.createElement('span'); labelEl.className = 'snap-lbl-edit'; labelEl.textContent = snap.label ?? '—'; labelEl.title = 'Click to edit label'; + labelEl.addEventListener('click', () => { + const input = document.createElement('input'); + input.type = 'text'; input.value = snap.label ?? ''; input.className = 'snap-lbl-input'; + labelTd.replaceChild(input, labelEl); input.focus(); input.select(); + const commit = () => { + vscode.postMessage({ type: 'editSnapshotLabel', id: snap.id, label: input.value }); + labelTd.replaceChild(labelEl, input); + labelEl.textContent = input.value || '—'; + }; + input.addEventListener('blur', commit); + input.addEventListener('keydown', e => { if (e.key === 'Enter') commit(); if (e.key === 'Escape') labelTd.replaceChild(labelEl, input); }); + }); + labelTd.appendChild(labelEl); + + const totalTd = document.createElement('td'); totalTd.style.cssText = 'text-align:right;font-variant-numeric:tabular-nums;font-weight:600;'; + if (prev) { + const delta = snap.total - prev.total; + totalTd.textContent = snap.total.toLocaleString(); + if (delta !== 0) { + const d2 = document.createElement('span'); d2.className = delta > 0 ? 'delta-pos' : 'delta-neg'; + d2.textContent = ' ' + (delta > 0 ? '+' : '') + delta; totalTd.appendChild(d2); + } + } else { + totalTd.textContent = snap.total.toLocaleString(); + } - const catEntries = computeTopN(allIssues, i => (i.categories ?? [])[0] ?? '—', 10); - row2.appendChild(buildBarCard('By Category', catEntries, '#22d3ee')); + const delTd = document.createElement('td'); + const delBtn = document.createElement('button'); delBtn.className = 'snap-del-btn'; delBtn.title = 'Delete'; + delBtn.innerHTML = ''; + delBtn.addEventListener('click', () => vscode.postMessage({ type: 'deleteSnapshot', id: snap.id })); + delTd.appendChild(delBtn); + + tr.appendChild(dateTd); tr.appendChild(labelTd); tr.appendChild(totalTd); + for (const sev of SEVERITY_ORDER) { + const td = document.createElement('td'); + td.style.cssText = `text-align:right;font-variant-numeric:tabular-nums;color:${SEVERITY_COLORS[sev]};`; + td.textContent = (snap.counts?.[sev] ?? 0) || ''; + tr.appendChild(td); + } + tr.appendChild(delTd); + tbody.appendChild(tr); + }); + tbl.appendChild(tbody); tableCard.appendChild(tbl); + tableRow.appendChild(tableCard); view.appendChild(tableRow); - view.appendChild(row2); container.appendChild(view); } +function buildTrendSvg(snaps) { + const W = 560, H = 140, PL = 44, PR = 12, PT = 10, PB = 28; + const cW = W - PL - PR, cH = H - PT - PB; + const n = snaps.length; + const maxVal = Math.max(...snaps.map(s => s.total), 1); + + /** @param {number} i */ const xOf = i => PL + (n < 2 ? cW / 2 : (i / (n - 1)) * cW); + /** @param {number} v */ const yOf = v => PT + cH - (v / maxVal) * cH; + + const gridLines = [0, 0.25, 0.5, 0.75, 1].map(f => { + const y = yOf(f * maxVal); const lbl = Math.round(f * maxVal); + return ` + ${lbl}`; + }).join(''); + + const totalPts = snaps.map((s, i) => `${xOf(i).toFixed(1)},${yOf(s.total).toFixed(1)}`).join(' '); + + const sevLines = SEVERITY_ORDER.map(sev => + `` + ).join(''); + + const dots = snaps.map((s, i) => + `${s.label ?? new Date(s.timestamp).toLocaleDateString()}: ${s.total}` + ).join(''); + + const xLabels = [0, Math.floor(n / 2), n - 1].filter((v, i, a) => a.indexOf(v) === i && v < n).map(i => { + const x = xOf(i); const lbl = new Date(snaps[i].timestamp).toLocaleDateString(undefined, { month: 'short', day: 'numeric' }); + const anchor = i === 0 ? 'start' : i === n - 1 ? 'end' : 'middle'; + return `${lbl}`; + }).join(''); + + return `${gridLines}${sevLines}${dots}${xLabels}`; +} + // ── Filtering ───────────────────────────────────────────────────────────────── function parseTerms() { diff --git a/package.json b/package.json index fd4c46a..7c32dde 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,11 @@ "command": "codeclimateVisualiser.reloadConfig", "title": "CodeClimate: Reload Config", "icon": "$(refresh)" + }, + { + "command": "codeclimateVisualiser.saveSnapshot", + "title": "CodeClimate: Save History Snapshot", + "icon": "$(history)" } ], "menus": { diff --git a/src/extension.ts b/src/extension.ts index 4c6d72f..7d2dd18 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,6 +6,7 @@ import { DecorationProvider } from './decorationProvider'; import { CodeClimatePanel } from './webviewPanel'; import { PatternEntry, ProjectConfig } from './types'; import { SourcesViewProvider } from './sourcesViewProvider'; +import { HistoryManager } from './historyManager'; const logChannel = vscode.window.createOutputChannel('CodeClimate Visualiser'); @@ -117,7 +118,9 @@ async function findConfiguredFiles(config: ProjectConfig | null): Promise { let loaded = 0; @@ -146,6 +149,11 @@ export function activate(context: vscode.ExtensionContext): void { issueManager, autoLoadFromConfig, (issueId) => { panel.show(); panel.focusIssue(issueId); }, + (id: string) => { + historyManager?.deleteSnapshot(id); + sourcesView.setHistory(historyManager?.loadHistory() ?? []); + panel.refreshHistory(); + }, async (filePath, line) => { let resolved: string | null = null; if (path.isAbsolute(filePath) && fs.existsSync(filePath)) { @@ -213,6 +221,32 @@ export function activate(context: vscode.ExtensionContext): void { await autoLoadFromConfig(); }), + vscode.commands.registerCommand('codeclimateVisualiser.saveSnapshot', async () => { + if (!historyManager) { + vscode.window.showWarningMessage('Open a folder to save history snapshots.'); + return; + } + const issues = issueManager.getAllIssues(); + if (issues.length === 0) { + vscode.window.showWarningMessage('No issues loaded. Open a CodeClimate report first.'); + return; + } + const label = await vscode.window.showInputBox({ + prompt: 'Snapshot label (optional)', + placeHolder: 'e.g. v1.2.3, main@abc1234, sprint-42…', + }); + if (label === undefined) return; + const sources = issueManager.getFileInfos().map(f => f.filename); + const snap = historyManager.saveSnapshot(issues, sources, label || undefined); + log(`Saved snapshot ${snap.id}: ${snap.total} issues`); + const snaps = historyManager.loadHistory(); + sourcesView.setHistory(snaps); + panel.refreshHistory(); + vscode.window.showInformationMessage( + `Snapshot saved: ${snap.total} issues${label ? ` (${label})` : ''}` + ); + }), + vscode.commands.registerCommand('codeclimateVisualiser.reloadConfig', async () => { issueManager.clearAll(); decorationProvider.clearDecorations(); diff --git a/src/historyManager.ts b/src/historyManager.ts new file mode 100644 index 0000000..f595be4 --- /dev/null +++ b/src/historyManager.ts @@ -0,0 +1,93 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import * as crypto from 'crypto'; +import { IssueWithSource, HistorySnapshot, Severity } from './types'; + +function beginLine(issue: IssueWithSource): number { + const b = issue.location?.lines?.begin; + if (typeof b === 'number') return b; + if (b && typeof b === 'object') return (b as { line?: number }).line ?? -1; + return issue.location?.positions?.begin?.line ?? -1; +} + +function sha1(s: string): string { + return crypto.createHash('sha1').update(s).digest('hex'); +} + +type FpSource = 'native' | 'derived' | 'volatile'; + +function resolveFingerprint(issue: IssueWithSource): { fp: string; source: FpSource } { + if (issue.fingerprint) return { fp: issue.fingerprint, source: 'native' }; + if (issue.check_name && issue.location?.path) { + return { fp: sha1(`${issue.check_name}:${issue.location.path}:${beginLine(issue)}`), source: 'derived' }; + } + return { fp: sha1(`${issue.check_name ?? ''}:${issue.description ?? ''}`), source: 'volatile' }; +} + +export class HistoryManager { + private readonly historyPath: string; + + constructor(workspaceRoot: string) { + this.historyPath = path.join(workspaceRoot, '.vscode', 'codeclimate-visualiser.history.ndjson'); + } + + saveSnapshot(issues: IssueWithSource[], sources: string[], label?: string): HistorySnapshot { + const counts: Record = { blocker: 0, critical: 0, major: 0, minor: 0, info: 0 }; + let nativeCount = 0, derivedCount = 0, volatileCount = 0; + const fingerprints: string[] = []; + + for (const issue of issues) { + counts[issue.severity ?? 'info']++; + const { fp, source } = resolveFingerprint(issue); + if (source === 'volatile') { + volatileCount++; + } else { + fingerprints.push(fp); + if (source === 'native') nativeCount++; else derivedCount++; + } + } + + const snapshot: HistorySnapshot = { + id: crypto.randomUUID(), + timestamp: new Date().toISOString(), + label: label || undefined, + sources, + counts, + total: issues.length, + nativeCount, + derivedCount, + volatileCount, + fingerprints, + }; + + fs.appendFileSync(this.historyPath, JSON.stringify(snapshot) + '\n', 'utf-8'); + return snapshot; + } + + loadHistory(): HistorySnapshot[] { + try { + const raw = fs.readFileSync(this.historyPath, 'utf-8'); + return raw + .trim() + .split('\n') + .filter(Boolean) + .map(line => { try { return JSON.parse(line) as HistorySnapshot; } catch { return null; } }) + .filter((s): s is HistorySnapshot => s !== null); + } catch { + return []; + } + } + + private rewrite(snapshots: HistorySnapshot[]): void { + const content = snapshots.map(s => JSON.stringify(s)).join('\n'); + fs.writeFileSync(this.historyPath, content ? content + '\n' : '', 'utf-8'); + } + + deleteSnapshot(id: string): void { + this.rewrite(this.loadHistory().filter(s => s.id !== id)); + } + + updateLabel(id: string, label: string): void { + this.rewrite(this.loadHistory().map(s => s.id === id ? { ...s, label: label || undefined } : s)); + } +} diff --git a/src/sourcesViewProvider.ts b/src/sourcesViewProvider.ts index 111e4fe..7e49324 100644 --- a/src/sourcesViewProvider.ts +++ b/src/sourcesViewProvider.ts @@ -1,20 +1,28 @@ import * as vscode from 'vscode'; import { IssueManager } from './issueManager'; +import { HistorySnapshot } from './types'; export class SourcesViewProvider implements vscode.WebviewViewProvider { static readonly viewId = 'codeclimateVisualiser.sourcesView'; private view?: vscode.WebviewView; + private historySnapshots: HistorySnapshot[] = []; constructor( private readonly issueManager: IssueManager, private readonly onInit: () => Promise, private readonly onFocusIssue: (id: string) => void, + private readonly onDeleteSnapshot: (id: string) => void, private readonly onOpenFile: (filePath: string, line: number) => Promise, ) { issueManager.onChange(() => this.update()); } + setHistory(snapshots: HistorySnapshot[]): void { + this.historySnapshots = snapshots; + this.update(); + } + resolveWebviewView(webviewView: vscode.WebviewView): void { this.view = webviewView; webviewView.webview.options = { enableScripts: true }; @@ -37,6 +45,8 @@ export class SourcesViewProvider implements vscode.WebviewViewProvider { this.onFocusIssue(msg.id); } else if (msg.type === 'openFile' && msg.path) { await this.onOpenFile(msg.path, msg.line ?? 1); + } else if (msg.type === 'deleteSnapshot' && msg.id) { + this.onDeleteSnapshot(msg.id); } }); @@ -56,7 +66,7 @@ export class SourcesViewProvider implements vscode.WebviewViewProvider { customColumns: i.customColumns, })); const customColumns = this.issueManager.getCustomColumns(); - this.view.webview.postMessage({ type: 'update', files, issues, customColumns }); + this.view.webview.postMessage({ type: 'update', files, issues, customColumns, history: this.historySnapshots }); } private buildHtml(): string { @@ -244,6 +254,24 @@ export class SourcesViewProvider implements vscode.WebviewViewProvider { /* ── Empty state ────────────────────────── */ #empty-msg { padding: 8px; opacity: 0.5; font-style: italic; } + + /* ── History section ────────────────────── */ + .snap-item { + display: flex; align-items: flex-start; padding: 4px 8px 4px 22px; gap: 4px; + cursor: default; flex-direction: column; + } + .snap-item:hover { background: var(--vscode-list-hoverBackground); } + .snap-row1 { display: flex; align-items: center; width: 100%; gap: 4px; } + .snap-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 500; } + .snap-date { opacity: 0.5; font-size: 0.82em; flex-shrink: 0; } + .snap-total { font-variant-numeric: tabular-nums; flex-shrink: 0; } + .snap-delete { opacity: 0; transition: opacity 0.1s; flex-shrink: 0; } + .snap-item:hover .snap-delete { opacity: 0.45; } + .snap-item:hover .snap-delete:hover { opacity: 1; } + .snap-diff { display: flex; gap: 6px; font-size: 0.82em; opacity: 0.75; margin-top: 1px; } + .snap-diff .new { color: #f87171; } + .snap-diff .fixed { color: #4ade80; } + .snap-empty { padding: 6px 8px 6px 22px; opacity: 0.5; font-style: italic; font-size: 0.9em; } @@ -312,6 +340,18 @@ export class SourcesViewProvider implements vscode.WebviewViewProvider {
No reports loaded.
+ +