diff --git a/.gitignore b/.gitignore
index ebb0b3e..c0e9fe3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,6 +40,9 @@ pids/
# Reports
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+# Dependency Checks
+.depcheck.json
+
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 14b8431..faf6460 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,41 @@
All notable changes to the "barrel-roll" extension will be documented in this file.
-## [Unreleased]
+## [1.1.1] - 2026-02-19
+
+### Added
+
+- **Major architectural refactoring**: Implemented modular barrel generation system with dedicated processors, strategies, and validators
+ - `EntryCollector` processor for gathering TypeScript files and directories
+ - `DirectoryProcessor` for recursive directory handling with concurrency control
+ - `ContentMerger` for intelligent content merging and deduplication
+ - `BarrelGenerationStrategy` for configurable generation modes
+ - `ReExportValidator` for validating and cleaning re-exports
+- Enhanced performance with intelligent caching system (`ExportCache`) and concurrency control (`Semaphore`)
+- Comprehensive test coverage expanded to 349 tests covering all new architectural components
+- Contract validation tests for type safety and enum exhaustiveness
+- File size validation in `FileSystemService` to prevent processing oversized files
+
+### Changed
+
+- **Refactored barrel generation architecture**: Split monolithic `BarrelFileGenerator` into modular components for better maintainability and testability
+- Enhanced export parsing with improved regex patterns supporting double quotes and complex comment scenarios
+- Consolidated utility functions and improved error handling throughout the codebase
+- Updated build configuration with enhanced webpack externals and improved TypeScript compilation settings
+
+### Fixed
+
+- Export duplication during barrel operations when comments containing closing braces (`}`) were present in existing imports
+- Regex patterns in `export-patterns.ts` now use non-greedy matching (`[\s\S]*?`) to properly handle comments with closing braces
+- Added support for trailing line comments (`//`) and block comments (`/* */`) in export statements
+- Added support for TypeScript's type-only exports (`export type { ... } from './path'`)
+- Added support for comments between export parts (e.g., `export * /* comment */ from './path'`)
+- Added support for exports without spaces (e.g., `export{` instead of `export {`, `export*from` instead of `export * from`)
+
+### Removed
+
+- Removed Jest compatibility shim (`src/test/testHarness.ts`) and test barrel export file (`src/test/index.ts`)
+- Removed Jest-specific dev dependencies (`eslint-plugin-jest`, `expect`) from the repository
## [1.1.0]
diff --git a/badges/coverage.svg b/badges/coverage.svg
index d675708..75b34c8 100644
--- a/badges/coverage.svg
+++ b/badges/coverage.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index b075fde..89308a6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "barrel-roll",
- "version": "1.1.0",
+ "version": "1.1.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "barrel-roll",
- "version": "1.1.0",
+ "version": "1.1.1",
"license": "Apache-2.0",
"devDependencies": {
"@types/glob": "^8.1.0",
@@ -22,13 +22,11 @@
"eslint": "^9.21.0",
"eslint-import-resolver-typescript": "^3.8.0",
"eslint-plugin-import": "^2.32.0",
- "eslint-plugin-jest": "^28.11.0",
"eslint-plugin-jsdoc": "^62.4.0",
"eslint-plugin-prettier": "^5.2.3",
"eslint-plugin-simple-import-sort": "^12.1.0",
"eslint-plugin-sonarjs": "^3.0.5",
"eslint-plugin-unused-imports": "^4.2.0",
- "expect": "^29.7.0",
"glob": "^10.5.0",
"jscodeshift": "^17.3.0",
"jscpd": "^4.0.5",
@@ -48,9 +46,9 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz",
- "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -63,9 +61,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz",
- "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -73,21 +71,21 @@
}
},
"node_modules/@babel/core": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz",
- "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.28.6",
- "@babel/generator": "^7.28.6",
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
"@babel/helper-compilation-targets": "^7.28.6",
"@babel/helper-module-transforms": "^7.28.6",
"@babel/helpers": "^7.28.6",
- "@babel/parser": "^7.28.6",
+ "@babel/parser": "^7.29.0",
"@babel/template": "^7.28.6",
- "@babel/traverse": "^7.28.6",
- "@babel/types": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
"@jridgewell/remapping": "^2.3.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
@@ -114,14 +112,14 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz",
- "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.28.6",
- "@babel/types": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
"@jridgewell/gen-mapping": "^0.3.12",
"@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2"
@@ -160,16 +158,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -368,13 +356,13 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz",
- "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.28.6"
+ "@babel/types": "^7.29.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -650,18 +638,18 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz",
- "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.28.6",
- "@babel/generator": "^7.28.6",
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
"@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.6",
+ "@babel/parser": "^7.29.0",
"@babel/template": "^7.28.6",
- "@babel/types": "^7.28.6",
+ "@babel/types": "^7.29.0",
"debug": "^4.3.1"
},
"engines": {
@@ -669,9 +657,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz",
- "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -793,32 +781,22 @@
"license": "MIT"
},
"node_modules/@es-joy/jsdoccomment": {
- "version": "0.82.0",
- "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.82.0.tgz",
- "integrity": "sha512-xs3OTxPefjTZaoDS7H1X2pV33enAmZg+8YldjmeYk7XZnq420phdnp6o0JtrsHBdSRJ5+RTocgyED9TL3epgpw==",
+ "version": "0.84.0",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.84.0.tgz",
+ "integrity": "sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "^1.0.8",
- "@typescript-eslint/types": "^8.53.1",
- "comment-parser": "1.4.4",
+ "@typescript-eslint/types": "^8.54.0",
+ "comment-parser": "1.4.5",
"esquery": "^1.7.0",
- "jsdoc-type-pratt-parser": "~7.1.0"
+ "jsdoc-type-pratt-parser": "~7.1.1"
},
"engines": {
"node": "^20.19.0 || ^22.13.0 || >=24"
}
},
- "node_modules/@es-joy/jsdoccomment/node_modules/comment-parser": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.4.tgz",
- "integrity": "sha512-0D6qSQ5IkeRrGJFHRClzaMOenMeT0gErz3zIw3AprKMqhRN6LNU2jQOdkPG/FZ+8bCgXE1VidrgSzlBBDZRr8A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 12.0.0"
- }
- },
"node_modules/@es-joy/resolve.exports": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz",
@@ -1141,50 +1119,6 @@
"node": ">=8"
}
},
- "node_modules/@jest/expect-utils": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
- "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "jest-get-type": "^29.6.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/schemas": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
- "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@sinclair/typebox": "^0.27.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.13",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
@@ -1247,9 +1181,9 @@
}
},
"node_modules/@jscpd/badge-reporter": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.3.tgz",
- "integrity": "sha512-ZDBQzbVRK2v9U1yxHIkvzbwBMgSHTZM4s0vbiDf9NKBwrpxiAvSYWSwdAtlC8xQeMpJlBNls/cTXakXmiKGb8g==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz",
+ "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1259,9 +1193,9 @@
}
},
"node_modules/@jscpd/core": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.3.tgz",
- "integrity": "sha512-7C//TeHQlyt0Tm/jEynir4VsyWpVmwS6GPzw0mPPhgYE1/5F6knYYWQiwUZEEAEfNwkwW3EoG4YcKPAkdOJISA==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz",
+ "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1269,14 +1203,14 @@
}
},
"node_modules/@jscpd/finder": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.3.tgz",
- "integrity": "sha512-qHi5jlG/8s2uF3Kr6QX1zZEwpj8L8RRHSHQekQxOyqm9sgWqXaaIgoR1+dZqn+XhQWFXhY8CKrrFS9T6u6GKUg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz",
+ "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jscpd/core": "4.0.3",
- "@jscpd/tokenizer": "4.0.3",
+ "@jscpd/core": "4.0.4",
+ "@jscpd/tokenizer": "4.0.4",
"blamer": "^1.0.6",
"bytes": "^3.1.2",
"cli-table3": "^0.6.5",
@@ -1288,9 +1222,9 @@
}
},
"node_modules/@jscpd/html-reporter": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.3.tgz",
- "integrity": "sha512-1WxywVjdx35Kd1X1S2gfMJ9Tod1NDDMpmctP9ybVZURjq3xdShDiShg5ry2kj+1qOBqMnMVvc21r9AD+IwEK2g==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz",
+ "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1300,13 +1234,13 @@
}
},
"node_modules/@jscpd/tokenizer": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.3.tgz",
- "integrity": "sha512-EosztK2+i2TPnLZuroC5jfvSPVuSDRsPtrAOL2UhwNttcK3L8F0/ERih6zRySMNUgL77OOhch5QX0I3YE8HLcQ==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz",
+ "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jscpd/core": "4.0.3",
+ "@jscpd/core": "4.0.4",
"reprism": "^0.0.11",
"spark-md5": "^3.0.2"
}
@@ -1403,13 +1337,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@sinclair/typebox": {
- "version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@sindresorhus/base62": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz",
@@ -1627,26 +1554,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/istanbul-lib-report": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
- "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "node_modules/@types/istanbul-reports": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
- "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-report": "*"
- }
- },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -1669,9 +1576,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.19.7",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.7.tgz",
- "integrity": "sha512-MciR4AKGHWl7xwxkBa6xUGxQJ4VBOmPTF7sL+iGzuahOFaO0jHCsuEfS80pan1ef4gWId1oWOweIhrDEYLuaOw==",
+ "version": "22.19.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.10.tgz",
+ "integrity": "sha512-tF5VOugLS/EuDlTBijk0MqABfP8UxgYazTLo3uIn3b4yJgg26QRbVYJYsDtHrjdDUIRfP70+VfhTTc+CE1yskw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1692,49 +1599,25 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/stack-utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
- "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/vscode": {
- "version": "1.108.1",
- "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.108.1.tgz",
- "integrity": "sha512-DerV0BbSzt87TbrqmZ7lRDIYaMiqvP8tmJTzW2p49ZBVtGUnGAu2RGQd1Wv4XMzEVUpaHbsemVM5nfuQJj7H6w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/yargs": {
- "version": "17.0.35",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
- "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@types/yargs-parser": {
- "version": "21.0.3",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
- "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
+ "version": "1.109.0",
+ "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.109.0.tgz",
+ "integrity": "sha512-0Pf95rnwEIwDbmXGC08r0B4TQhAbsHQ5UyTIgVgoieDe4cOnf92usuR5dEczb6bTKEp7ziZH4TV1TRGPPCExtw==",
"dev": true,
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.53.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz",
- "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.55.0.tgz",
+ "integrity": "sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.53.1",
- "@typescript-eslint/type-utils": "8.53.1",
- "@typescript-eslint/utils": "8.53.1",
- "@typescript-eslint/visitor-keys": "8.53.1",
+ "@typescript-eslint/scope-manager": "8.55.0",
+ "@typescript-eslint/type-utils": "8.55.0",
+ "@typescript-eslint/utils": "8.55.0",
+ "@typescript-eslint/visitor-keys": "8.55.0",
"ignore": "^7.0.5",
"natural-compare": "^1.4.0",
"ts-api-utils": "^2.4.0"
@@ -1747,22 +1630,22 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.53.1",
+ "@typescript-eslint/parser": "^8.55.0",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.53.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz",
- "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.55.0.tgz",
+ "integrity": "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "8.53.1",
- "@typescript-eslint/types": "8.53.1",
- "@typescript-eslint/typescript-estree": "8.53.1",
- "@typescript-eslint/visitor-keys": "8.53.1",
+ "@typescript-eslint/scope-manager": "8.55.0",
+ "@typescript-eslint/types": "8.55.0",
+ "@typescript-eslint/typescript-estree": "8.55.0",
+ "@typescript-eslint/visitor-keys": "8.55.0",
"debug": "^4.4.3"
},
"engines": {
@@ -1778,14 +1661,14 @@
}
},
"node_modules/@typescript-eslint/project-service": {
- "version": "8.53.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz",
- "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.55.0.tgz",
+ "integrity": "sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.53.1",
- "@typescript-eslint/types": "^8.53.1",
+ "@typescript-eslint/tsconfig-utils": "^8.55.0",
+ "@typescript-eslint/types": "^8.55.0",
"debug": "^4.4.3"
},
"engines": {
@@ -1800,14 +1683,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.53.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz",
- "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.55.0.tgz",
+ "integrity": "sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.53.1",
- "@typescript-eslint/visitor-keys": "8.53.1"
+ "@typescript-eslint/types": "8.55.0",
+ "@typescript-eslint/visitor-keys": "8.55.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1818,9 +1701,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.53.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz",
- "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.55.0.tgz",
+ "integrity": "sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1835,15 +1718,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.53.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz",
- "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.55.0.tgz",
+ "integrity": "sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.53.1",
- "@typescript-eslint/typescript-estree": "8.53.1",
- "@typescript-eslint/utils": "8.53.1",
+ "@typescript-eslint/types": "8.55.0",
+ "@typescript-eslint/typescript-estree": "8.55.0",
+ "@typescript-eslint/utils": "8.55.0",
"debug": "^4.4.3",
"ts-api-utils": "^2.4.0"
},
@@ -1860,9 +1743,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "8.53.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz",
- "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.55.0.tgz",
+ "integrity": "sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1874,16 +1757,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.53.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz",
- "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.55.0.tgz",
+ "integrity": "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.53.1",
- "@typescript-eslint/tsconfig-utils": "8.53.1",
- "@typescript-eslint/types": "8.53.1",
- "@typescript-eslint/visitor-keys": "8.53.1",
+ "@typescript-eslint/project-service": "8.55.0",
+ "@typescript-eslint/tsconfig-utils": "8.55.0",
+ "@typescript-eslint/types": "8.55.0",
+ "@typescript-eslint/visitor-keys": "8.55.0",
"debug": "^4.4.3",
"minimatch": "^9.0.5",
"semver": "^7.7.3",
@@ -1902,16 +1785,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "8.53.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz",
- "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.55.0.tgz",
+ "integrity": "sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.53.1",
- "@typescript-eslint/types": "8.53.1",
- "@typescript-eslint/typescript-estree": "8.53.1"
+ "@typescript-eslint/scope-manager": "8.55.0",
+ "@typescript-eslint/types": "8.55.0",
+ "@typescript-eslint/typescript-estree": "8.55.0"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1926,13 +1809,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.53.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz",
- "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.55.0.tgz",
+ "integrity": "sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.53.1",
+ "@typescript-eslint/types": "8.55.0",
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
@@ -2243,42 +2126,42 @@
}
},
"node_modules/@vue/compiler-core": {
- "version": "3.5.27",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.27.tgz",
- "integrity": "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==",
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.28.tgz",
+ "integrity": "sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.28.5",
- "@vue/shared": "3.5.27",
- "entities": "^7.0.0",
+ "@babel/parser": "^7.29.0",
+ "@vue/shared": "3.5.28",
+ "entities": "^7.0.1",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
- "version": "3.5.27",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz",
- "integrity": "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==",
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.28.tgz",
+ "integrity": "sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vue/compiler-core": "3.5.27",
- "@vue/shared": "3.5.27"
+ "@vue/compiler-core": "3.5.28",
+ "@vue/shared": "3.5.28"
}
},
"node_modules/@vue/compiler-sfc": {
- "version": "3.5.27",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz",
- "integrity": "sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==",
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.28.tgz",
+ "integrity": "sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.28.5",
- "@vue/compiler-core": "3.5.27",
- "@vue/compiler-dom": "3.5.27",
- "@vue/compiler-ssr": "3.5.27",
- "@vue/shared": "3.5.27",
+ "@babel/parser": "^7.29.0",
+ "@vue/compiler-core": "3.5.28",
+ "@vue/compiler-dom": "3.5.28",
+ "@vue/compiler-ssr": "3.5.28",
+ "@vue/shared": "3.5.28",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.21",
"postcss": "^8.5.6",
@@ -2286,20 +2169,20 @@
}
},
"node_modules/@vue/compiler-ssr": {
- "version": "3.5.27",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz",
- "integrity": "sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==",
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.28.tgz",
+ "integrity": "sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.5.27",
- "@vue/shared": "3.5.27"
+ "@vue/compiler-dom": "3.5.28",
+ "@vue/shared": "3.5.28"
}
},
"node_modules/@vue/shared": {
- "version": "3.5.27",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.27.tgz",
- "integrity": "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==",
+ "version": "3.5.28",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.28.tgz",
+ "integrity": "sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==",
"dev": true,
"license": "MIT"
},
@@ -2997,9 +2880,9 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.9.17",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz",
- "integrity": "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==",
+ "version": "2.9.19",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
+ "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -3276,9 +3159,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001765",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz",
- "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==",
+ "version": "1.0.30001769",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz",
+ "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==",
"dev": true,
"funding": [
{
@@ -3333,22 +3216,6 @@
"node": ">=6.0"
}
},
- "node_modules/ci-info": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
- "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/cli-cursor": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
@@ -3587,9 +3454,9 @@
}
},
"node_modules/commander": {
- "version": "14.0.2",
- "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz",
- "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
+ "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4009,9 +3876,9 @@
}
},
"node_modules/dependency-cruiser": {
- "version": "17.3.7",
- "resolved": "https://registry.npmjs.org/dependency-cruiser/-/dependency-cruiser-17.3.7.tgz",
- "integrity": "sha512-WEEOrnf0eshNirg4CMWuB7kK+qVZ+fecW6EBJa6AomEFhDDZKi3Zel1Tyl4ihcWtiSDhF+vALQb8NJS+wQiwLA==",
+ "version": "17.3.8",
+ "resolved": "https://registry.npmjs.org/dependency-cruiser/-/dependency-cruiser-17.3.8.tgz",
+ "integrity": "sha512-ziP2ziP7D6MVFK/mFTOQAAb7t2VAD6mhBMjD1Pu9CWDMzozssDN49RprKn8u85mTuK/W6kyiRg9WOyr1Y7lNqg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4020,8 +3887,8 @@
"acorn-jsx-walk": "2.0.0",
"acorn-loose": "8.5.2",
"acorn-walk": "8.3.4",
- "commander": "14.0.2",
- "enhanced-resolve": "5.18.4",
+ "commander": "14.0.3",
+ "enhanced-resolve": "5.19.0",
"ignore": "7.0.5",
"interpret": "3.1.1",
"is-installed-globally": "1.0.0",
@@ -4030,7 +3897,7 @@
"prompts": "2.4.2",
"rechoir": "0.8.0",
"safe-regex": "2.1.1",
- "semver": "7.7.3",
+ "semver": "7.7.4",
"tsconfig-paths-webpack-plugin": "4.2.0",
"watskeburt": "5.0.2"
},
@@ -4047,16 +3914,16 @@
}
},
"node_modules/dependency-tree": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-11.2.0.tgz",
- "integrity": "sha512-+C1H3mXhcvMCeu5i2Jpg9dc0N29TWTuT6vJD7mHLAfVmAbo9zW8NlkvQ1tYd3PDMab0IRQM0ccoyX68EZtx9xw==",
+ "version": "11.3.0",
+ "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-11.3.0.tgz",
+ "integrity": "sha512-T893F3p48rblazo45S/5jkFEvU8mzZ8obtNSyP2S1QCA8e9PpVH+hIakHnQYdnhitwQ8wo9btYJpQxnjiGm0Qg==",
"dev": true,
"license": "MIT",
"dependencies": {
"commander": "^12.1.0",
- "filing-cabinet": "^5.0.3",
+ "filing-cabinet": "^5.1.0",
"precinct": "^12.2.0",
- "typescript": "^5.8.3"
+ "typescript": "^5.9.3"
},
"bin": {
"dependency-tree": "bin/cli.js"
@@ -4243,16 +4110,6 @@
"node": ">=0.3.1"
}
},
- "node_modules/diff-sequences": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
- "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
"node_modules/doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -4296,9 +4153,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.277",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.277.tgz",
- "integrity": "sha512-wKXFZw4erWmmOz5N/grBoJ2XrNJGDFMu2+W5ACHza5rHtvsqrK4gb6rnLC7XxKB9WlJ+RmyQatuEXmtm86xbnw==",
+ "version": "1.5.286",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz",
+ "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==",
"dev": true,
"license": "ISC"
},
@@ -4320,14 +4177,14 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.18.4",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz",
- "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==",
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz",
+ "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "tapable": "^2.3.0"
},
"engines": {
"node": ">=10.13.0"
@@ -4793,40 +4650,14 @@
"semver": "bin/semver.js"
}
},
- "node_modules/eslint-plugin-jest": {
- "version": "28.14.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.14.0.tgz",
- "integrity": "sha512-P9s/qXSMTpRTerE2FQ0qJet2gKbcGyFTPAJipoKxmWqR6uuFqIqk8FuEfg5yBieOezVrEfAMZrEwJ6yEp+1MFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0"
- },
- "engines": {
- "node": "^16.10.0 || ^18.12.0 || >=20.0.0"
- },
- "peerDependencies": {
- "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0",
- "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0",
- "jest": "*"
- },
- "peerDependenciesMeta": {
- "@typescript-eslint/eslint-plugin": {
- "optional": true
- },
- "jest": {
- "optional": true
- }
- }
- },
"node_modules/eslint-plugin-jsdoc": {
- "version": "62.4.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.4.0.tgz",
- "integrity": "sha512-SmwVS4QCSsBRmOfAn1J2CyCO4chqZtSU5olBCiHZ0RnxZVjIBTgm/1ZBFwFDUiV5/llFZcuSHEJK5DjHCDcGPw==",
+ "version": "62.5.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.5.4.tgz",
+ "integrity": "sha512-U+Q5ppErmC17VFQl542eBIaXcuq975BzoIHBXyx7UQx/i4gyHXxPiBkonkuxWyFA98hGLALLUuD+NJcXqSGKxg==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "@es-joy/jsdoccomment": "~0.82.0",
+ "@es-joy/jsdoccomment": "~0.84.0",
"@es-joy/resolve.exports": "1.2.0",
"are-docs-informative": "^0.0.2",
"comment-parser": "1.4.5",
@@ -4921,41 +4752,47 @@
}
},
"node_modules/eslint-plugin-sonarjs": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.5.tgz",
- "integrity": "sha512-dI62Ff3zMezUToi161hs2i1HX1ie8Ia2hO0jtNBfdgRBicAG4ydy2WPt0rMTrAe3ZrlqhpAO3w1jcQEdneYoFA==",
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.6.tgz",
+ "integrity": "sha512-3mVUqsAUSylGfkJMj2v0aC2Cu/eUunDLm+XMjLf0uLjAZao205NWF3g6EXxcCAFO+rCZiQ6Or1WQkUcU9/sKFQ==",
"dev": true,
"license": "LGPL-3.0-only",
"dependencies": {
- "@eslint-community/regexpp": "4.12.1",
+ "@eslint-community/regexpp": "4.12.2",
"builtin-modules": "3.3.0",
"bytes": "3.1.2",
"functional-red-black-tree": "1.0.1",
"jsx-ast-utils-x": "0.1.0",
"lodash.merge": "4.6.2",
- "minimatch": "9.0.5",
+ "minimatch": "10.1.1",
"scslre": "0.3.0",
- "semver": "7.7.2",
+ "semver": "7.7.3",
"typescript": ">=5"
},
"peerDependencies": {
"eslint": "^8.0.0 || ^9.0.0"
}
},
- "node_modules/eslint-plugin-sonarjs/node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "node_modules/eslint-plugin-sonarjs/node_modules/minimatch": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
+ "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
"dev": true,
- "license": "MIT",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/brace-expansion": "^5.0.0"
+ },
"engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/eslint-plugin-sonarjs/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"dev": true,
"license": "ISC",
"bin": {
@@ -4966,14 +4803,14 @@
}
},
"node_modules/eslint-plugin-unused-imports": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.3.0.tgz",
- "integrity": "sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.4.1.tgz",
+ "integrity": "sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
"@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0",
- "eslint": "^9.0.0 || ^8.0.0"
+ "eslint": "^10.0.0 || ^9.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"@typescript-eslint/eslint-plugin": {
@@ -5217,23 +5054,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/expect": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
- "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/expect-utils": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.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",
@@ -5361,23 +5181,23 @@
}
},
"node_modules/filing-cabinet": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-5.0.3.tgz",
- "integrity": "sha512-PlPcMwVWg60NQkhvfoxZs4wEHjhlOO/y7OAm4sKM60o1Z9nttRY4mcdQxp/iZ+kg/Vv6Hw1OAaTbYVM9DA9pYg==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-5.1.0.tgz",
+ "integrity": "sha512-xA3nKuR0N762AtUloSEbq4T+tOqNf1rZ3vgPW8Sijurqz9rvArjTpZhfrV1OxSrhX6OUoDGAONXo6liKZTNXKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"app-module-path": "^2.2.0",
"commander": "^12.1.0",
- "enhanced-resolve": "^5.18.0",
+ "enhanced-resolve": "^5.19.0",
"module-definition": "^6.0.1",
- "module-lookup-amd": "^9.0.3",
- "resolve": "^1.22.10",
+ "module-lookup-amd": "^9.1.0",
+ "resolve": "^1.22.11",
"resolve-dependency-path": "^4.0.1",
"sass-lookup": "^6.1.0",
"stylus-lookup": "^6.1.0",
"tsconfig-paths": "^4.2.0",
- "typescript": "^5.7.3"
+ "typescript": "^5.9.3"
},
"bin": {
"filing-cabinet": "bin/cli.js"
@@ -5439,33 +5259,6 @@
"node": ">=6"
}
},
- "node_modules/find-cache-dir/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/find-cache-dir/node_modules/make-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
@@ -5480,58 +5273,6 @@
"node": ">=6"
}
},
- "node_modules/find-cache-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/find-cache-dir/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/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,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/find-cache-dir/node_modules/pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/find-cache-dir/node_modules/semver": {
"version": "5.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
@@ -5607,9 +5348,9 @@
"license": "ISC"
},
"node_modules/flow-parser": {
- "version": "0.298.0",
- "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.298.0.tgz",
- "integrity": "sha512-sSWgBEU+IJmcozN5VtMYcN6Q8zD/QF7Ty1Iw8t+XJG4uimVuJG1J98XhuUSgqxOm2XGvrjb8sy5ctBBpwLD5zQ==",
+ "version": "0.299.0",
+ "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.299.0.tgz",
+ "integrity": "sha512-phGMRoNt6SNglPHGRbCyWm9/pxfe6t/t4++EIYPaBGWT6e0lphLBgUMrvpL62NbRo9R549o3oqrbKHq82kANCw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5664,13 +5405,6 @@
"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,
- "license": "ISC"
- },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -5857,9 +5591,9 @@
}
},
"node_modules/get-tsconfig": {
- "version": "4.13.0",
- "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz",
- "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==",
+ "version": "4.13.6",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz",
+ "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5883,6 +5617,7 @@
"version": "10.5.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
"integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "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": {
@@ -6308,6 +6043,75 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/import-local/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-local/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -6318,18 +6122,6 @@
"node": ">=0.8.19"
}
},
- "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,
- "license": "ISC",
- "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",
@@ -7033,100 +6825,6 @@
"@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/jest-diff": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
- "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.0.0",
- "diff-sequences": "^29.6.3",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-matcher-utils": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
- "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.0.0",
- "jest-diff": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-message-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
- "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.6.3",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
- "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.9",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-util/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/jest-worker": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
@@ -7228,37 +6926,37 @@
}
},
"node_modules/jscpd": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.7.tgz",
- "integrity": "sha512-ftw3OKgJUmAoS48TqeNOPRQbBdzzapKPF7L8auMKAp04kdOtoUuMonjVN0mruzb0zWObsh6CIWM78fzeeU29AA==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz",
+ "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@jscpd/badge-reporter": "4.0.3",
- "@jscpd/core": "4.0.3",
- "@jscpd/finder": "4.0.3",
- "@jscpd/html-reporter": "4.0.3",
- "@jscpd/tokenizer": "4.0.3",
+ "@jscpd/badge-reporter": "4.0.4",
+ "@jscpd/core": "4.0.4",
+ "@jscpd/finder": "4.0.4",
+ "@jscpd/html-reporter": "4.0.4",
+ "@jscpd/tokenizer": "4.0.4",
"colors": "^1.4.0",
"commander": "^5.0.0",
"fs-extra": "^11.2.0",
"gitignore-to-glob": "^0.3.0",
- "jscpd-sarif-reporter": "4.0.5"
+ "jscpd-sarif-reporter": "4.0.6"
},
"bin": {
"jscpd": "bin/jscpd"
}
},
"node_modules/jscpd-sarif-reporter": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.5.tgz",
- "integrity": "sha512-cD1MtUdpomUPM5C0YD0vKZmdj+Gyr0KD5Bk47yGMrPCtwtgsK+7v59OzBIUjYOL8AuxNAt6hvPFo0PH+PYJh0Q==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz",
+ "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==",
"dev": true,
"license": "MIT",
"dependencies": {
"colors": "^1.4.0",
"fs-extra": "^11.2.0",
- "node-sarif-builder": "^3.1.0"
+ "node-sarif-builder": "^3.4.0"
}
},
"node_modules/jscpd/node_modules/commander": {
@@ -7272,9 +6970,9 @@
}
},
"node_modules/jsdoc-type-pratt-parser": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.1.0.tgz",
- "integrity": "sha512-SX7q7XyCwzM/MEDCYz0l8GgGbJAACGFII9+WfNYr5SLEKukHWRy2Jk3iWRe7P+lpYJNs7oQ+OSei4JtKGUjd7A==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.1.1.tgz",
+ "integrity": "sha512-/2uqY7x6bsrpi3i9LVU6J89352C0rpMk0as8trXxCtvd4kPk1ke/Eyif6wqfSLvoNJqcDG9Vk4UsXgygzCt2xA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7531,11 +7229,14 @@
}
},
"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==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
- "license": "ISC"
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
},
"node_modules/madge": {
"version": "8.0.0",
@@ -7925,15 +7626,14 @@
}
},
"node_modules/module-lookup-amd": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-9.0.5.tgz",
- "integrity": "sha512-Rs5FVpVcBYRHPLuhHOjgbRhosaQYLtEo3JIeDIbmNo7mSssi1CTzwMh8v36gAzpbzLGXI9wB/yHh+5+3fY1QVw==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-9.1.0.tgz",
+ "integrity": "sha512-j4tnAgLfIR/7p26DF7cyLL/2LD/5386L5EuvVtID+HnOvTSzVk8lwheZIlhfCbeyrZPBDm9m+eseH7yp81dZrA==",
"dev": true,
"license": "MIT",
"dependencies": {
"commander": "^12.1.0",
- "glob": "^7.2.3",
- "requirejs": "^2.3.7",
+ "requirejs": "^2.3.8",
"requirejs-config-file": "^4.0.0"
},
"bin": {
@@ -7943,17 +7643,6 @@
"node": ">=18"
}
},
- "node_modules/module-lookup-amd/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
"node_modules/module-lookup-amd/node_modules/commander": {
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
@@ -7964,41 +7653,6 @@
"node": ">=18"
}
},
- "node_modules/module-lookup-amd/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/module-lookup-amd/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/mri": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz",
@@ -8543,16 +8197,6 @@
"node": ">=8"
}
},
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
@@ -8587,6 +8231,13 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/path-scurry/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,
+ "license": "ISC"
+ },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -8638,43 +8289,43 @@
}
},
"node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "find-up": "^4.0.0"
+ "find-up": "^3.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
"node_modules/pkg-dir/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "locate-path": "^3.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
"node_modules/pkg-dir/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "p-locate": "^4.1.0"
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
"node_modules/pkg-dir/node_modules/p-limit": {
@@ -8694,16 +8345,26 @@
}
},
"node_modules/pkg-dir/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "p-limit": "^2.2.0"
+ "p-limit": "^2.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir/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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/please-upgrade-node": {
@@ -8862,34 +8523,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/pretty-ms": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz",
@@ -9165,13 +8798,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
@@ -9742,9 +9368,9 @@
}
},
"node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -9959,16 +9585,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -10046,29 +9662,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/stack-utils": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
- "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/stack-utils/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/stdin-discarder": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
@@ -11049,9 +10642,9 @@
}
},
"node_modules/webpack": {
- "version": "5.104.1",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz",
- "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==",
+ "version": "5.105.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz",
+ "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11065,7 +10658,7 @@
"acorn-import-phases": "^1.0.3",
"browserslist": "^4.28.1",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.4",
+ "enhanced-resolve": "^5.19.0",
"es-module-lexer": "^2.0.0",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
@@ -11078,7 +10671,7 @@
"schema-utils": "^4.3.3",
"tapable": "^2.3.0",
"terser-webpack-plugin": "^5.3.16",
- "watchpack": "^2.4.4",
+ "watchpack": "^2.5.1",
"webpack-sources": "^3.3.3"
},
"bin": {
diff --git a/package.json b/package.json
index 0ad5492..111e114 100644
--- a/package.json
+++ b/package.json
@@ -101,13 +101,11 @@
"eslint": "^9.21.0",
"eslint-import-resolver-typescript": "^3.8.0",
"eslint-plugin-import": "^2.32.0",
- "eslint-plugin-jest": "^28.11.0",
"eslint-plugin-jsdoc": "^62.4.0",
"eslint-plugin-prettier": "^5.2.3",
"eslint-plugin-simple-import-sort": "^12.1.0",
"eslint-plugin-sonarjs": "^3.0.5",
"eslint-plugin-unused-imports": "^4.2.0",
- "expect": "^29.7.0",
"glob": "^10.5.0",
"jscodeshift": "^17.3.0",
"jscpd": "^4.0.5",
@@ -177,5 +175,5 @@
"watch": "webpack --watch",
"watch-tests": "tsc -p . -w --outDir dist"
},
- "version": "1.1.0"
+ "version": "1.1.1"
}
diff --git a/src/core/barrel/barrel-content.builder.ts b/src/core/barrel/barrel-content.builder.ts
index 6558ae7..6b6b0a0 100644
--- a/src/core/barrel/barrel-content.builder.ts
+++ b/src/core/barrel/barrel-content.builder.ts
@@ -218,25 +218,33 @@ export class BarrelContentBuilder {
/**
* Generates export statement(s) based on the type of exports.
+ * Uses TypeScript 4.5+ mixed export syntax to combine value and type exports
+ * in a single statement when both are present.
* @param modulePath The module path
* @param exports The exports
* @returns The export statement(s)
*/
+ // eslint-disable-next-line complexity -- Acceptable complexity for export combination logic
private generateExportStatements(modulePath: string, exports: BarrelExport[]): string[] {
const lines: string[] = [];
const valueNames = this.getExportNames(exports, BarrelExportKind.Value);
const typeNames = this.getExportNames(exports, BarrelExportKind.Type);
+ const hasDefault = exports.some((exp) => exp.kind === BarrelExportKind.Default);
- if (valueNames.length > 0) {
+ // If we have both values and types, combine them using TypeScript 4.5+ syntax
+ if (valueNames.length > 0 && typeNames.length > 0) {
+ const combinedExports = [...valueNames, ...typeNames.map((name) => `type ${name}`)].join(
+ ', ',
+ );
+ lines.push(`export { ${combinedExports} } from './${modulePath}';`);
+ } else if (valueNames.length > 0) {
lines.push(`export { ${valueNames.join(', ')} } from './${modulePath}';`);
- }
-
- if (typeNames.length > 0) {
+ } else if (typeNames.length > 0) {
lines.push(`export type { ${typeNames.join(', ')} } from './${modulePath}';`);
}
- if (exports.some((exp) => exp.kind === BarrelExportKind.Default)) {
+ if (hasDefault) {
lines.push(`export { default } from './${modulePath}';`);
}
@@ -270,17 +278,15 @@ export class BarrelContentBuilder {
directoryPath: string,
): Promise {
const isDirectory = await this.isDirectory(filePath, directoryPath);
-
- if (!isDirectory) {
- // For files, remove .ts/.tsx extension and replace with the desired export extension
- let modulePath = filePath.replace(/\.tsx?$/, '') + exportExtension;
- // Normalize path separators for cross-platform compatibility
- modulePath = modulePath.replaceAll('\\', '/');
- return modulePath;
+ // For directories, append /index + extension if extension is specified
+ if (isDirectory) {
+ return exportExtension ? `${filePath}/index${exportExtension}` : filePath;
}
- // For directories, append /index + extension if extension is specified
- return exportExtension ? `${filePath}/index${exportExtension}` : filePath;
+ // For files, remove .ts/.tsx extension and replace with the desired export extension
+ const modulePath = filePath.replace(/\.tsx?$/, '') + exportExtension;
+ // Normalize path separators for cross-platform compatibility
+ return modulePath.replaceAll('\\', '/');
}
/**
diff --git a/src/core/barrel/barrel-file.generator.ts b/src/core/barrel/barrel-file.generator.ts
index b3be521..298065d 100644
--- a/src/core/barrel/barrel-file.generator.ts
+++ b/src/core/barrel/barrel-file.generator.ts
@@ -19,7 +19,6 @@ import * as path from 'node:path';
import type { Uri } from 'vscode';
-import type { LoggerInstance } from '../../types/index.js';
import {
type BarrelEntry,
BarrelEntryKind,
@@ -30,6 +29,7 @@ import {
type IBarrelGenerationOptions,
INDEX_FILENAME,
type IParsedExport,
+ type LoggerInstance,
type NormalizedBarrelGenerationOptions,
} from '../../types/index.js';
import { processConcurrently } from '../../utils/semaphore.js';
diff --git a/src/core/barrel/content-sanitizer.ts b/src/core/barrel/content-sanitizer.ts
index f3fa11a..3902e93 100644
--- a/src/core/barrel/content-sanitizer.ts
+++ b/src/core/barrel/content-sanitizer.ts
@@ -172,6 +172,10 @@ export class BarrelContentSanitizer {
return;
}
+ this.logger.debug(
+ `[SANITIZER] Checking: ${exportPath} → ${normalizedPath} isExternal: ${isExternal} willBeRegenerated: ${willBeRegenerated}`,
+ );
+
if (isExternal) {
this.logger.debug(`Stripping external re-export: ${exportPath}`);
return;
diff --git a/src/core/barrel/export-patterns.ts b/src/core/barrel/export-patterns.ts
index 53ca3ad..79a4e5e 100644
--- a/src/core/barrel/export-patterns.ts
+++ b/src/core/barrel/export-patterns.ts
@@ -17,20 +17,22 @@
/**
* Regex pattern for extracting export paths from barrel export lines.
- * Handles both single-line export statements.
+ * Uses non-greedy matching to handle comments containing closing braces.
+ * Matches: export * from 'path', export { ... } from 'path', export type { ... } from 'path'
+ * Handles comments between export parts and trailing line/block comments.
+ * Supports exports with or without spaces (export{ or export {).
*/
-const EXPORT_PATH_PATTERN = /^export (?:\*|\{[^}]*\}) from '([^']+)';?$/;
+const EXPORT_PATH_PATTERN =
+ /^export(?:\s+type)?\s*(?:\*|\{[\s\S]*?\})[\s\S]*?from\s*["']([^"']+)["']\s*;?\s*(?:\/\/.*|\/\*[\s\S]*?\*\/)?$/;
/**
* Regex pattern for multiline export statements.
- * Captures: export { ... } from 'path'; spanning multiple lines.
+ * Uses non-greedy matching to handle comments containing closing braces.
+ * Captures: export { ... } from 'path' or export type { ... } from 'path' spanning multiple lines.
+ * Supports exports with or without spaces (export{ or export {).
*/
-const MULTILINE_EXPORT_PATTERN = /^export\s*\{[^}]*\}\s*from\s*'([^']+)'\s*;?$/s;
-
-/**
- * Regex to detect the end of a multiline export: } from 'path'
- */
-const MULTILINE_EXPORT_END = /\}\s*from\s*'/;
+const MULTILINE_EXPORT_PATTERN =
+ /^export(?:\s+type)?\s*\{[\s\S]*?\}[\s\S]*?from\s*["']([^"']+)["']\s*;?\s*(?:\/\/.*|\/\*[\s\S]*?\*\/)?$/s;
/**
* Extracts the export path from a barrel export line or multiline block.
@@ -86,12 +88,13 @@ export function extractAllExportPaths(content: string): Set {
}
/**
- * Checks if a line is an export statement.
+ * Checks if a line is an export statement using AST parsing.
* @param line The line to check.
* @returns True if the line is an export statement.
*/
export function isExportLine(line: string): boolean {
- return line.startsWith("export * from '") || line.startsWith('export {');
+ const path = extractExportPath(line);
+ return path !== null;
}
/**
@@ -100,19 +103,20 @@ export function isExportLine(line: string): boolean {
* @returns The extension pattern, or null if none found.
*/
export function extractExtensionFromLine(line: string): string | null {
- if (line.includes('.js')) {
- return '.js';
+ const exportPath = extractExportPath(line);
+ if (!exportPath) {
+ return null;
}
- if (line.includes('.mjs')) {
- return '.mjs';
+ if (exportPath.includes('.js')) {
+ return '.js';
}
- // If we find exports without extensions, return empty string
- if (!/from '[^']*'(\s*;|$)/.exec(line)) {
- return null;
+ if (exportPath.includes('.mjs')) {
+ return '.mjs';
}
+ // Export without extension
return '';
}
@@ -141,18 +145,29 @@ export function detectExtensionFromBarrelContent(content: string): string | null
/**
* Checks if a line closes a multiline export statement.
+ * Simple heuristic check for performance since this is called per-line.
* @param line The line to check.
* @returns True if the line ends a multiline export.
*/
export function isMultilineExportEnd(line: string): boolean {
- return MULTILINE_EXPORT_END.test(line);
+ // Quick heuristic: line contains } followed by from and a quote
+ return /\}\s*from\s*['"]/.test(line);
}
/**
* Checks if a line starts a multiline export (opens but doesn't close on same line).
+ * Simple heuristic check for performance since this is called per-line.
* @param line The line to check.
* @returns True if the line starts a multiline export.
*/
export function isMultilineExportStart(line: string): boolean {
- return line.startsWith('export {') && !isMultilineExportEnd(line);
+ const trimmed = line.trim();
+
+ // Must start with export and contain opening brace
+ if (!/^export(?:\s+type)?\s*\{/.test(trimmed)) {
+ return false;
+ }
+
+ // If it already ends on the same line, it's not a multiline start
+ return !isMultilineExportEnd(trimmed);
}
diff --git a/src/core/barrel/index.ts b/src/core/barrel/index.ts
index 6ed6fb2..3b95f3f 100644
--- a/src/core/barrel/index.ts
+++ b/src/core/barrel/index.ts
@@ -14,11 +14,16 @@
* limitations under the License.
*
*/
-
export { BarrelContentBuilder } from './barrel-content.builder.js';
export { BarrelFileGenerator } from './barrel-file.generator.js';
export { BarrelContentSanitizer, type SanitizationResult } from './content-sanitizer.js';
-export { type CachedExport, ExportCache, type ExportCacheOptions } from './export-cache.js';
+export {
+ type CachedExport,
+ ExportCache,
+ type ExportCacheFileSystem,
+ type ExportCacheOptions,
+ type ExportCacheParser,
+} from './export-cache.js';
export {
detectExtensionFromBarrelContent,
extractAllExportPaths,
diff --git a/src/core/index.ts b/src/core/index.ts
index 5dfabf5..92d6c57 100644
--- a/src/core/index.ts
+++ b/src/core/index.ts
@@ -14,7 +14,6 @@
* limitations under the License.
*
*/
-
export * from './barrel/index.js';
export * from './io/index.js';
export * from './parser/index.js';
diff --git a/src/core/io/index.ts b/src/core/io/index.ts
index d11db02..719098b 100644
--- a/src/core/io/index.ts
+++ b/src/core/io/index.ts
@@ -14,5 +14,4 @@
* limitations under the License.
*
*/
-
export { FileSystemService } from './file-system.service.js';
diff --git a/src/extension.ts b/src/extension.ts
index 6e35f98..854e170 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -50,6 +50,8 @@ class BarrelCommandQueue {
resolve();
} catch (error) {
reject(error);
+ // Rethrow so the processing loop can observe/log the failure.
+ throw error;
}
});
void this.processQueue();
diff --git a/src/index.ts b/src/index.ts
index b07892c..8518313 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -14,5 +14,4 @@
* limitations under the License.
*
*/
-
export * from './core/index.js';
diff --git a/src/logging/index.ts b/src/logging/index.ts
index 3a7e95f..c4b4513 100644
--- a/src/logging/index.ts
+++ b/src/logging/index.ts
@@ -15,5 +15,14 @@
*
*/
-export type { LoggerOptions, LogMetadata } from './output-channel.logger.js';
-export { LogLevel, OutputChannelLogger } from './output-channel.logger.js';
+/**
+ * @fileoverview Barrel export for logging utilities
+ * @module logging
+ */
+
+export {
+ type LoggerOptions,
+ LogLevel,
+ type LogMetadata,
+ OutputChannelLogger,
+} from './output-channel.logger.js';
diff --git a/src/test/index.ts b/src/test/index.ts
deleted file mode 100644
index 8cbb528..0000000
--- a/src/test/index.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2025 Robert Lindley
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export * from './runTest.js';
-export { jest } from './testHarness.js';
-export type {
- ActivateFn,
- CommandHandler,
- DeactivateFn,
- FakeUri,
- LoggerConstructor,
- LoggerInstance,
- TestCommandsApi,
- TestWindowApi,
- TestWorkspaceApi,
-} from './testTypes.js';
-export { uriFile } from './testTypes.js';
diff --git a/src/test/integration/index.ts b/src/test/integration/index.ts
index 03f5e0f..c166194 100644
--- a/src/test/integration/index.ts
+++ b/src/test/integration/index.ts
@@ -14,6 +14,5 @@
* limitations under the License.
*
*/
-
// Placeholder for VS Code integration tests. Keep this file so the VS Code test
// runner has a stable entry point.
diff --git a/src/test/testHarness.ts b/src/test/testHarness.ts
deleted file mode 100644
index 72c3d8c..0000000
--- a/src/test/testHarness.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 2025 Robert Lindley
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-export { afterEach, beforeEach, describe, it, mock } from 'node:test';
-
-const activeSpies = new Set();
-
-type AnyFunction = (...args: any[]) => any;
-
-type SpyInstance = {
- restore: () => void;
-};
-
-type Spy = {
- mock: {
- calls: TArgs[];
- };
- mockImplementation: (impl: (...args: TArgs) => TReturn) => Spy;
- mockResolvedValue: (value: Awaited) => Spy;
- mockRejectedValue: (error: unknown) => Spy;
-};
-
-/**
- * Creates a spy for testing purposes that can mock function behavior.
- */
-function createSpy(
- target: TTarget,
- key: TKey,
-): Spy<
- Parameters>,
- ReturnType>
-> {
- const original = target[key];
-
- if (typeof original !== 'function') {
- throw new TypeError(`Cannot spy on property ${String(key)} because it is not a function.`);
- }
-
- type Args = Parameters>;
- type Return = ReturnType>;
-
- const calls: Args[] = [];
- let implementation = original as AnyFunction;
-
- const spyWrapper = ((...args: Args) => {
- calls.push(args);
- return implementation.apply(target, args);
- }) as TTarget[TKey];
-
- // Try to set the property directly first
- try {
- (target as Record)[key as string | symbol] = spyWrapper;
- } catch {
- // If direct assignment fails (e.g., getter-only properties), use defineProperty
- Object.defineProperty(target, key, {
- value: spyWrapper,
- writable: true,
- configurable: true,
- });
- }
-
- const spyApi: Spy & SpyInstance = {
- mock: {
- calls,
- },
- mockImplementation(newImpl: AnyFunction) {
- implementation = newImpl;
- return spyApi;
- },
- mockResolvedValue(value: unknown) {
- implementation = () => Promise.resolve(value) as Return;
- return spyApi;
- },
- mockRejectedValue(error: unknown) {
- implementation = () => Promise.reject(error) as Return;
- return spyApi;
- },
- restore() {
- try {
- (target as Record)[key as string | symbol] = original;
- } catch {
- // If direct assignment fails, try defineProperty
- Object.defineProperty(target, key, {
- value: original,
- writable: true,
- configurable: true,
- });
- }
- activeSpies.delete(spyApi);
- },
- };
-
- activeSpies.add(spyApi);
-
- return spyApi;
-}
-
-const jestLike = {
- spyOn: createSpy,
- restoreAllMocks(): void {
- for (const spy of activeSpies) {
- spy.restore();
- }
- activeSpies.clear();
- },
-};
-
-export const jest = jestLike;
diff --git a/src/test/unit/core/barrel/barrel-content.builder.smoke.test.ts b/src/test/unit/core/barrel/barrel-content.builder.smoke.test.ts
index 67e17bc..45fe3fe 100644
--- a/src/test/unit/core/barrel/barrel-content.builder.smoke.test.ts
+++ b/src/test/unit/core/barrel/barrel-content.builder.smoke.test.ts
@@ -76,8 +76,11 @@ describe('BarrelContentBuilder Test Suite', () => {
const content = await builder.buildContent(entries, '/some/path');
- assert.ok(content.includes("export { MyClass } from './myFile';"));
- assert.ok(content.includes("export type { MyInterface } from './myFile';"));
+ // TypeScript 4.5+ mixed export syntax combines value and type in one statement
+ assert.ok(
+ content.includes("export { MyClass, type MyInterface } from './myFile';"),
+ 'Expected combined value and type export',
+ );
assert.ok(content.includes("export { default } from './myFile';"));
});
diff --git a/src/test/unit/core/barrel/barrel-content.builder.test.ts b/src/test/unit/core/barrel/barrel-content.builder.test.ts
index 2845d44..92c2ca4 100644
--- a/src/test/unit/core/barrel/barrel-content.builder.test.ts
+++ b/src/test/unit/core/barrel/barrel-content.builder.test.ts
@@ -120,6 +120,27 @@ describe('BarrelContentBuilder', () => {
assert.strictEqual(result.trim(), "export { Echo } from './echo';");
});
+ it('should combine value and type exports using mixed export syntax', async () => {
+ const entries = new Map();
+ entries.set('mixed.ts', {
+ kind: BarrelEntryKind.File,
+ exports: [
+ { kind: BarrelExportKind.Value, name: 'Something' },
+ { kind: BarrelExportKind.Type, name: 'OtherThing' },
+ { kind: BarrelExportKind.Value, name: 'AnotherValue' },
+ { kind: BarrelExportKind.Type, name: 'AnotherType' },
+ ],
+ });
+
+ const result = await builder.buildContent(entries, '');
+
+ // Should use TypeScript 4.5+ mixed export syntax
+ assert.strictEqual(
+ result.trim(),
+ "export { AnotherValue, Something, type AnotherType, type OtherThing } from './mixed';",
+ );
+ });
+
const parentDirectoryCases: Array