diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..d4f85ef --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,262 @@ +# Copilot Instructions for Markdown Table Prettifier VS Code Extension + +## Project Overview + +This is a **VS Code extension** that formats and prettifies Markdown tables to make them more readable. The extension is also available as an **NPM package**, **CLI tool**, and **Docker image**. + +### Key Features +- Formats Markdown tables with proper alignment and spacing +- Supports column alignment (left, center, right) using `:` markers +- Handles table borders intelligently (adds/removes as needed) +- Supports indented tables and empty columns +- Provides configurable column padding +- Available as VS Code extension, CLI tool, NPM package, and Docker image + +## Architecture Overview + +The codebase follows a **layered architecture** with clear separation of concerns: + +### Core Layers +1. **Models** (`src/models/`) - Core data structures (Table, Row, Cell, Alignment) +2. **Model Factories** (`src/modelFactory/`) - Create and transform models from raw text +3. **View Models** (`src/viewModels/`) - Presentation layer models (TableViewModel, RowViewModel) +4. **View Model Factories** (`src/viewModelFactories/`) - Convert models to view models +5. **Writers** (`src/writers/`) - Convert view models to formatted strings +6. **Prettyfiers** (`src/prettyfiers/`) - Main formatting orchestration + +### Key Components +- **MultiTablePrettyfier**: Finds and formats multiple tables in a document +- **SingleTablePrettyfier**: Formats individual tables +- **TableFactory**: Parses raw text into Table models +- **TableValidator**: Validates table structure +- **TableFinder**: Locates tables within documents +- **PadCalculators**: Handle column padding and alignment + +## File Structure Guidelines + +### Source Code Organization +- `src/extension/` - VS Code extension integration +- `src/models/` - Core domain models +- `src/modelFactory/` - Model creation and transformation +- `src/viewModels/` - Presentation models +- `src/viewModelFactories/` - View model creation +- `src/writers/` - String output generation +- `src/prettyfiers/` - Main formatting logic +- `src/padCalculation/` - Column padding calculations +- `src/tableFinding/` - Table detection logic +- `src/diagnostics/` - Logging and diagnostics +- `cli/` - Command-line interface +- `test/` - Unit and system tests + +### Test Organization +- `test/unitTests/` - Unit tests mirroring source structure +- `test/systemTests/` - End-to-end tests with input/expected files +- `test/stubs/` - Test doubles and mocks + +## Coding Standards + +### TypeScript Guidelines +- Use **strict TypeScript** with proper typing +- Prefer **composition over inheritance** +- Use **dependency injection** patterns +- Follow **SOLID principles** +- Use **readonly** for immutable data +- Prefer **private readonly** for dependencies + +### Class Design Patterns +```typescript +// Example class structure +export class ExampleClass { + constructor( + private readonly _dependency: IDependency, + private readonly _logger: ILogger + ) { } + + public method(): ReturnType { + // Implementation + } +} +``` + +### Error Handling +- Use **descriptive error messages** +- Validate inputs at public method boundaries +- Use **null checks** for critical operations +- Log errors appropriately based on context + +### Naming Conventions +- Use **descriptive names** for classes and methods +- Private fields prefixed with `_` +- Interfaces prefixed with `I` when needed +- Test methods describe behavior: `"methodName() with condition returns expected result"` + +## Testing Guidelines + +### Unit Tests +- Use **Mocha** with **TDD style** (`suite`/`test`) +- Use **TypeMoq** for mocking dependencies +- Test structure: **Arrange, Act, Assert** +- One assertion per test when possible +- Use descriptive test names explaining the scenario + +### Test Patterns +```typescript +suite("ClassName tests", () => { + let _mockDependency: IMock; + + setup(() => { + _mockDependency = Mock.ofType(); + }); + + test("methodName() with valid input returns expected result", () => { + // Arrange + const sut = createSut(); + const input = "test input"; + const expected = "expected output"; + _mockDependency.setup(m => m.method(input)).returns(() => expected); + + // Act + const result = sut.method(input); + + // Assert + assert.strictEqual(result, expected); + _mockDependency.verify(m => m.method(input), Times.once()); + }); + + function createSut(): ClassName { + return new ClassName(_mockDependency.object); + } +}); +``` + +### System Tests +- Test files in `test/systemTests/resources/` +- Input files: `testname-input.md` +- Expected files: `testname-expected.md` +- Tests both CLI and VS Code formatter + +## VS Code Extension Patterns + +### Extension Structure +- **Extension activation**: `src/extension/extension.ts` +- **Command registration**: Document formatters and commands +- **Configuration**: Use VS Code workspace configuration +- **Factory pattern**: `prettyfierFactory.ts` creates instances + +### Key Extension Files +- `extension.ts` - Entry point and activation +- `prettyfierFactory.ts` - Dependency injection container +- `tableDocumentPrettyfier.ts` - Document formatting provider +- `tableDocumentRangePrettyfier.ts` - Range formatting provider +- `tableDocumentPrettyfierCommand.ts` - Manual command execution + +## Configuration + +### VS Code Settings +- `markdownTablePrettify.maxTextLength` - Size limit for formatting +- `markdownTablePrettify.extendedLanguages` - Additional language support +- `markdownTablePrettify.columnPadding` - Extra column spacing +- `markdownTablePrettify.showWindowMessages` - UI message control + +### CLI Options +- `--check` - Validate formatting without changes +- `--columnPadding=N` - Set column padding + +## Performance Considerations + +### Size Limits +- Default 1M character limit for VS Code extension +- No limits for CLI/NPM usage +- Use `SizeLimitChecker` implementations + +### Caching +- Cache factory instances in VS Code extension +- Invalidate cache on configuration changes + +### Benchmarking +- Performance tests in `test/systemTests/benchmarkRunner.ts` +- Measure factory creation and document formatting +- Results stored in `benchmark-results-*.json` + +## Common Patterns + +### Dependency Injection +Classes receive dependencies via constructor injection: +```typescript +constructor( + private readonly _tableFactory: TableFactory, + private readonly _validator: TableValidator, + private readonly _logger: ILogger +) { } +``` + +### Factory Pattern +Use factories to create complex object graphs: +```typescript +export function getDocumentPrettyfier(): vscode.DocumentFormattingEditProvider { + return new TableDocumentPrettyfier(getMultiTablePrettyfier()); +} +``` + +### Strategy Pattern +Use strategies for different behaviors (alignment, padding): +```typescript +export class PadCalculatorSelector { + public getCalculator(alignment: Alignment): BasePadCalculator { + // Return appropriate calculator based on alignment + } +} +``` + +## Build and Distribution + +### Build Scripts +- `npm run compile` - TypeScript compilation +- `npm run test` - Run all tests +- `npm run benchmark` - Performance benchmarks +- `npm run dist` - Create NPM distribution + +### Multi-Target Distribution +- **VS Code Extension**: Published to marketplace +- **NPM Package**: Core logic for Node.js/web +- **CLI Tool**: Standalone command-line interface +- **Docker Image**: Containerized CLI + +## Common Operations + +### Adding New Features +1. Create models in `src/models/` if needed +2. Add business logic in appropriate layer +3. Update factories for dependency injection +4. Add unit tests mirroring source structure +5. Add system tests with input/expected files +6. Update configuration if needed + +### Adding New Tests +1. Create test file in matching `test/unitTests/` directory +2. Use TypeMoq for mocking dependencies +3. Follow naming convention: `className.test.ts` +4. For system tests, add input/expected file pairs + +### Debugging +- Use VS Code debugger with TypeScript source maps +- Check logs via `ILogger` implementations +- Use system tests for end-to-end verification + +## Integration Points + +### VS Code APIs +- `vscode.languages.registerDocumentFormattingEditProvider` +- `vscode.languages.registerDocumentRangeFormattingEditProvider` +- `vscode.commands.registerTextEditorCommand` +- `vscode.workspace.getConfiguration` + +### NPM Package +- Entry point: `cli/cliPrettify.js` +- Exports `CliPrettify` class with static methods +- Supports both CommonJS and ES modules + +### CLI Interface +- Entry point: `cli/index.ts` +- Argument parsing: `cli/argumentsParser.ts` +- Stdin/stdout handling: `cli/inputReader.ts` diff --git a/package-lock.json b/package-lock.json index 566fa4f..1ca6c61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,18 +10,18 @@ "license": "MIT", "devDependencies": { "@types/mocha": "^10.0.10", - "@types/node": "^24.3.0", - "@types/vscode": "^1.103.0", + "@types/node": "^24.10.1", + "@types/vscode": "^1.106.1", "@vscode/test-electron": "^2.5.2", - "glob": "^11.0.3", + "glob": "^13.0.0", "gulp": "^5.0.1", "gulp-merge-json": "^2.2.1", - "mocha": "^11.7.1", + "mocha": "^11.7.5", "typemoq": "^2.1.0", - "typescript": "^5.9.2" + "typescript": "^5.9.3" }, "engines": { - "vscode": "^1.103.0" + "vscode": "^1.106.1" } }, "node_modules/@gulpjs/messages": { @@ -132,19 +132,19 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", - "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.10.0" + "undici-types": "~7.16.0" } }, "node_modules/@types/vscode": { - "version": "1.103.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.103.0.tgz", - "integrity": "sha512-o4hanZAQdNfsKecexq9L3eHICd0AAvdbLk6hA60UzGXbGH/q8b/9xv2RgR7vV3ZcHuyKVq7b37IGd/+gM4Tu+Q==", + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.106.1.tgz", + "integrity": "sha512-R/HV8u2h8CAddSbX8cjpdd7B8/GnE4UjgjpuGuHcbp1xV6yh4OeqU4L1pKjlwujCrSFS0MOpwJAIs/NexMB1fQ==", "dev": true, "license": "MIT" }, @@ -1038,22 +1038,16 @@ } }, "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", + "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" }, @@ -1514,6 +1508,16 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "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", @@ -1614,27 +1618,12 @@ "node": ">=0.10.0" } }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "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" }, @@ -1815,11 +1804,11 @@ } }, "node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, @@ -1841,9 +1830,9 @@ } }, "node_modules/mocha": { - "version": "11.7.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.1.tgz", - "integrity": "sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==", + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", "dev": true, "license": "MIT", "dependencies": { @@ -1855,6 +1844,7 @@ "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", "minimatch": "^9.0.5", @@ -1918,9 +1908,9 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { @@ -2991,9 +2981,9 @@ } }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3041,9 +3031,9 @@ } }, "node_modules/undici-types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, @@ -3497,18 +3487,18 @@ "dev": true }, "@types/node": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", - "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "requires": { - "undici-types": "~7.10.0" + "undici-types": "~7.16.0" } }, "@types/vscode": { - "version": "1.103.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.103.0.tgz", - "integrity": "sha512-o4hanZAQdNfsKecexq9L3eHICd0AAvdbLk6hA60UzGXbGH/q8b/9xv2RgR7vV3ZcHuyKVq7b37IGd/+gM4Tu+Q==", + "version": "1.106.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.106.1.tgz", + "integrity": "sha512-R/HV8u2h8CAddSbX8cjpdd7B8/GnE4UjgjpuGuHcbp1xV6yh4OeqU4L1pKjlwujCrSFS0MOpwJAIs/NexMB1fQ==", "dev": true }, "@vscode/test-electron": { @@ -4115,16 +4105,13 @@ "dev": true }, "glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", "dev": true, "requires": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", + "minimatch": "^10.1.1", "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" } }, @@ -4443,6 +4430,12 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -4509,19 +4502,10 @@ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, - "jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2" - } - }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -4647,9 +4631,9 @@ "dev": true }, "minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, "requires": { "@isaacs/brace-expansion": "^5.0.0" @@ -4662,9 +4646,9 @@ "dev": true }, "mocha": { - "version": "11.7.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.1.tgz", - "integrity": "sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==", + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", "dev": true, "requires": { "browser-stdout": "^1.3.1", @@ -4675,6 +4659,7 @@ "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", "minimatch": "^9.0.5", @@ -4716,9 +4701,9 @@ } }, "glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "requires": { "foreground-child": "^3.1.0", @@ -5453,9 +5438,9 @@ } }, "typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true }, "unc-path-regex": { @@ -5483,9 +5468,9 @@ "dev": true }, "undici-types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true }, "util-deprecate": { diff --git a/package.json b/package.json index 3e1b369..611ff17 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ }, "icon": "assets/logo.png", "engines": { - "vscode": "^1.103.0" + "vscode": "^1.106.1" }, "categories": [ "Formatters" @@ -84,15 +84,15 @@ }, "devDependencies": { "@types/mocha": "^10.0.10", - "@types/node": "^24.3.0", - "@types/vscode": "^1.103.0", + "@types/node": "^24.10.1", + "@types/vscode": "^1.106.1", "@vscode/test-electron": "^2.5.2", - "glob": "^11.0.3", + "glob": "^13.0.0", "gulp": "^5.0.1", "gulp-merge-json": "^2.2.1", - "mocha": "^11.7.1", + "mocha": "^11.7.5", "typemoq": "^2.1.0", - "typescript": "^5.9.2" + "typescript": "^5.9.3" }, "license": "MIT" }