diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 437f139..e690900 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -35,8 +35,8 @@ jobs: cache: 'yarn' - name: Install run: yarn install --immutable - - name: Prettier - run: yarn prettier:check + - name: Lint + run: yarn lint - name: Build run: yarn build - name: Test diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 0000000..059e88f --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,9 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "trailingComma": "all", + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "sortPackageJson": false, + "ignorePatterns": ["*.md", "*.yml", "*.yaml"] +} diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 0000000..be6fa7e --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,6 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["eslint", "typescript", "unicorn", "oxc", "import"], + "categories": { "correctness": "warn" }, + "options": { "typeAware": true } +} diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 632a3f5..0000000 --- a/.prettierrc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "trailingComma": "all", - "tabWidth": 2, - "singleQuote": true, - "printWidth": 100, - "parser": "typescript" -} \ No newline at end of file diff --git a/.releaserc.json b/.releaserc.json index a78d493..1263871 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -5,5 +5,5 @@ "@semantic-release/npm", "@semantic-release/github" ], - "branches": [ "main" ] + "branches": ["main"] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 212544f..afacb4e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,4 +6,4 @@ "**/dist": true }, "typescript.tsdk": "node_modules/typescript/lib" -} \ No newline at end of file +} diff --git a/package.json b/package.json index 157c368..7420cb9 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "scripts": { "build": "tsc", "prepublishOnly": "yarn build", - "prettier:check": "prettier --list-different \"src/**/*.{ts,tsx}\"", - "prettier:write": "prettier --write \"src/**/*.{ts,tsx}\"", + "lint": "oxfmt --check . && oxlint", + "lint:fix": "oxfmt --write . && oxlint --fix", "test": "tsc --noEmit -p tests && vitest run", "prepare": "husky" }, @@ -37,8 +37,10 @@ "@vitest/coverage-v8": "3.0.5", "husky": "^9.1.6", "lint-staged": "^16.2.7", - "prettier": "^3.3.3", - "typescript": "^5.8.3", + "oxfmt": "^0.44.0", + "oxlint": "^1.59.0", + "oxlint-tsgolint": "^0.20.0", + "typescript": "^6.0.2", "vitest": "^4.0.18" }, "dependencies": { @@ -51,7 +53,13 @@ "pretty-ms": "^9.1.0" }, "lint-staged": { - "*.ts": "prettier --write" + "*.{js,ts}": [ + "oxfmt --write", + "oxlint --fix" + ], + "*.json": [ + "oxfmt --write" + ] }, "repository": { "type": "git", diff --git a/src/bin.ts b/src/bin.ts index b6fde55..f9e6ff5 100755 --- a/src/bin.ts +++ b/src/bin.ts @@ -36,7 +36,7 @@ const { }, }); -let safePackageMode = packageMode as 'single' | 'multi' | string; +let safePackageMode = packageMode as string; if (safePackageMode !== 'single' && safePackageMode !== 'multi') { console.error(chalk.red('packageMode must be one of "single" and "multi"')); @@ -79,7 +79,7 @@ runner.text = chalk.cyan(`Generating API in directory: ${chalk.yellow(`"${resolv const start = Date.now(); -fs.promises.mkdir(resolvedOutDir, { recursive: true }).then(() => +void fs.promises.mkdir(resolvedOutDir, { recursive: true }).then(() => parseDocs({ useReadme: useReadme ? true : false, baseDirectory: resolvedDir, diff --git a/src/block-parsers.ts b/src/block-parsers.ts index 494e6e4..a875fc5 100644 --- a/src/block-parsers.ts +++ b/src/block-parsers.ts @@ -28,7 +28,7 @@ type GuessedParam = { export const guessParametersFromSignature = (signature: string) => { expect(signature).to.match( - /^\(([a-zA-Z,\[\] ]+|(\.\.\.[^\.])|([a-zA-Z][0-9]))+\)$/g, + /^\(([a-zA-Z,[\] ]+|(\.\.\.[^.])|([a-zA-Z][0-9]))+\)$/g, 'signature should be a bracket wrapped group of parameters', ); const justParams = signature.slice(1, signature.length - 1); diff --git a/src/markdown-helpers.ts b/src/markdown-helpers.ts index b15afc9..ce7e075 100644 --- a/src/markdown-helpers.ts +++ b/src/markdown-helpers.ts @@ -237,7 +237,7 @@ export const getTopLevelGenericType = (typeString: string) => { ) return null; const start = typeString.indexOf('<'); - const end = typeString.length - [...typeString].reverse().indexOf('>') - 1; + const end = typeString.length - Array.from(typeString).reverse().indexOf('>') - 1; if (start === -1) return null; return { outerType: typeString.slice(0, start), @@ -645,7 +645,7 @@ export const extractReturnType = ( } const returnsWithNewLineMatch = description.match( - new RegExp(`${prefix} \`([^\`]+?)\`:?(\. |\.\n|\n|$)`), + new RegExp(`${prefix} \`([^\`]+?)\`:?(. |.\n|\n|$)`), ); const returnsWithHyphenMatch = description.match(new RegExp(`${prefix} \`([^\`]+?)\` - `)); const returnsWithContinousSentence = description.match(new RegExp(`${prefix} \`([^\`]+?)\` `)); @@ -1004,7 +1004,7 @@ export const findProcess = (tokens: Token[]): ProcessBlock => { export const slugifyHeading = (heading: string): string => { return heading - .replace(/[^A-Za-z0-9 \-]/g, '') + .replace(/[^A-Za-z0-9 -]/g, '') .replace(/ /g, '-') .toLowerCase(); }; diff --git a/tests/DocsParser.spec.ts b/tests/DocsParser.spec.ts index 578f4be..8bb3ad9 100644 --- a/tests/DocsParser.spec.ts +++ b/tests/DocsParser.spec.ts @@ -2,12 +2,6 @@ import { afterEach, assert, beforeEach, describe, expect, it } from 'vitest'; import fs from 'node:fs'; import path from 'node:path'; import { DocsParser } from '../src/DocsParser.js'; -import type { - ModuleDocumentationContainer, - ClassDocumentationContainer, - ElementDocumentationContainer, - StructureDocumentationContainer, -} from '../src/ParsedDocumentation.js'; describe('DocsParser', () => { let tempDir: string; diff --git a/tests/block-parsers.spec.ts b/tests/block-parsers.spec.ts index 0276f10..edaec2d 100644 --- a/tests/block-parsers.spec.ts +++ b/tests/block-parsers.spec.ts @@ -11,254 +11,254 @@ import { DocumentationTag } from '../src/ParsedDocumentation.js'; describe('block parsers', () => { describe('parseMethodBlocks', () => { - it('should parse a method', async () => { - const md = new MarkdownIt({ html: true }); - const contents = ` + it('should parse a method', async () => { + const md = new MarkdownIt({ html: true }); + const contents = ` # \`test.foo(x)\` * \`x\` Integer - x `; - const allTokens = md.parse(contents, {}); - - expect(parseMethodBlocks(allTokens)).toEqual([ - { - additionalTags: [], - description: '', - name: 'foo', - parameters: [ - { - collection: false, - description: 'x', - name: 'x', - required: true, - type: 'Integer', - }, - ], - rawGenerics: undefined, - returns: null, - signature: '(x)', - urlFragment: '#testfoox', - }, - ]); - }); - - it('should parse a method with optional parameters', async () => { - const md = new MarkdownIt(); - const contents = ` + const allTokens = md.parse(contents, {}); + + expect(parseMethodBlocks(allTokens)).toEqual([ + { + additionalTags: [], + description: '', + name: 'foo', + parameters: [ + { + collection: false, + description: 'x', + name: 'x', + required: true, + type: 'Integer', + }, + ], + rawGenerics: undefined, + returns: null, + signature: '(x)', + urlFragment: '#testfoox', + }, + ]); + }); + + it('should parse a method with optional parameters', async () => { + const md = new MarkdownIt(); + const contents = ` # \`test.foo([x])\` * \`x\` Integer (optional) - x `; - const allTokens = md.parse(contents, {}); - - expect(parseMethodBlocks(allTokens)).toEqual([ - { - additionalTags: [], - description: '', - name: 'foo', - parameters: [ - { - collection: false, - description: 'x', - name: 'x', - required: false, - type: 'Integer', - }, - ], - rawGenerics: undefined, - returns: null, - signature: '([x])', - urlFragment: '#testfoox', - }, - ]); - }); - - it('should parse a method with a parameter that can be an object or an integer', async () => { - const md = new MarkdownIt(); - const contents = ` + const allTokens = md.parse(contents, {}); + + expect(parseMethodBlocks(allTokens)).toEqual([ + { + additionalTags: [], + description: '', + name: 'foo', + parameters: [ + { + collection: false, + description: 'x', + name: 'x', + required: false, + type: 'Integer', + }, + ], + rawGenerics: undefined, + returns: null, + signature: '([x])', + urlFragment: '#testfoox', + }, + ]); + }); + + it('should parse a method with a parameter that can be an object or an integer', async () => { + const md = new MarkdownIt(); + const contents = ` # \`test.foo([x])\` * \`x\` Object | Integer (optional) - x * \`y\` Integer - y `; - const allTokens = md.parse(contents, {}); - - expect(parseMethodBlocks(allTokens)).toEqual([ - { - additionalTags: [], - description: '', - name: 'foo', - parameters: [ - { - collection: false, - description: 'x', - name: 'x', - required: false, - type: [ - { - collection: false, - properties: [ - { - additionalTags: [], - collection: false, - description: 'y', - name: 'y', - required: true, - type: 'Integer', - }, - ], - type: 'Object', - }, - { - collection: false, - type: 'Integer', - }, - ], - }, - ], - rawGenerics: undefined, - returns: null, - signature: '([x])', - urlFragment: '#testfoox', - }, - ]); - }); - - it('should parse a method with return type', async () => { - const md = new MarkdownIt(); - const contents = ` + const allTokens = md.parse(contents, {}); + + expect(parseMethodBlocks(allTokens)).toEqual([ + { + additionalTags: [], + description: '', + name: 'foo', + parameters: [ + { + collection: false, + description: 'x', + name: 'x', + required: false, + type: [ + { + collection: false, + properties: [ + { + additionalTags: [], + collection: false, + description: 'y', + name: 'y', + required: true, + type: 'Integer', + }, + ], + type: 'Object', + }, + { + collection: false, + type: 'Integer', + }, + ], + }, + ], + rawGenerics: undefined, + returns: null, + signature: '([x])', + urlFragment: '#testfoox', + }, + ]); + }); + + it('should parse a method with return type', async () => { + const md = new MarkdownIt(); + const contents = ` # \`test.getValue()\` Returns \`string\` - The current value. `; - const allTokens = md.parse(contents, {}); - const methods = parseMethodBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const methods = parseMethodBlocks(allTokens); - expect(methods).toHaveLength(1); - expect(methods[0].returns).toBeDefined(); - expect(methods[0].returns?.type).toBe('String'); - }); + expect(methods).toHaveLength(1); + expect(methods[0].returns).toBeDefined(); + expect(methods[0].returns?.type).toBe('String'); + }); - it('should handle methods with no parameters', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should handle methods with no parameters', async () => { + const md = new MarkdownIt(); + const contents = ` # \`test.noParams()\` Does something without parameters. `; - const allTokens = md.parse(contents, {}); - const methods = parseMethodBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const methods = parseMethodBlocks(allTokens); - expect(methods).toHaveLength(1); - expect(methods[0].parameters).toHaveLength(0); - expect(methods[0].signature).toBe('()'); - }); + expect(methods).toHaveLength(1); + expect(methods[0].parameters).toHaveLength(0); + expect(methods[0].signature).toBe('()'); + }); - it('should parse methods with generic types', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should parse methods with generic types', async () => { + const md = new MarkdownIt(); + const contents = ` # \`test.getItems()\` Returns \`T[]\` - Array of items. `; - const allTokens = md.parse(contents, {}); - const methods = parseMethodBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const methods = parseMethodBlocks(allTokens); - expect(methods).toHaveLength(1); - expect(methods[0].rawGenerics).toBe(''); - }); + expect(methods).toHaveLength(1); + expect(methods[0].rawGenerics).toBe(''); + }); - it('should handle platform tags', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should handle platform tags', async () => { + const md = new MarkdownIt(); + const contents = ` # \`test.macOnly()\` _macOS_ macOS specific method. `; - const allTokens = md.parse(contents, {}); - const methods = parseMethodBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const methods = parseMethodBlocks(allTokens); - expect(methods).toHaveLength(1); - expect(methods[0].additionalTags).toContain(DocumentationTag.OS_MACOS); - }); + expect(methods).toHaveLength(1); + expect(methods[0].additionalTags).toContain(DocumentationTag.OS_MACOS); + }); - it('should return empty array for null tokens', () => { - expect(parseMethodBlocks(null)).toEqual([]); + it('should return empty array for null tokens', () => { + expect(parseMethodBlocks(null)).toEqual([]); + }); }); -}); -describe('parsePropertyBlocks', () => { - it('should parse a basic property', async () => { - const md = new MarkdownIt(); - const contents = ` + describe('parsePropertyBlocks', () => { + it('should parse a basic property', async () => { + const md = new MarkdownIt(); + const contents = ` # \`obj.name\` A \`string\` representing the name. `; - const allTokens = md.parse(contents, {}); - const properties = parsePropertyBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const properties = parsePropertyBlocks(allTokens); - expect(properties).toHaveLength(1); - expect(properties[0].name).toBe('name'); - expect(properties[0].type).toBe('String'); - expect(properties[0].required).toBe(true); - }); + expect(properties).toHaveLength(1); + expect(properties[0].name).toBe('name'); + expect(properties[0].type).toBe('String'); + expect(properties[0].required).toBe(true); + }); - it('should parse an optional property', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should parse an optional property', async () => { + const md = new MarkdownIt(); + const contents = ` # \`obj.title\` A \`string\` (optional) representing the title. `; - const allTokens = md.parse(contents, {}); - const properties = parsePropertyBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const properties = parsePropertyBlocks(allTokens); - expect(properties).toHaveLength(1); - expect(properties[0].name).toBe('title'); - expect(properties[0].required).toBe(false); - }); + expect(properties).toHaveLength(1); + expect(properties[0].name).toBe('title'); + expect(properties[0].required).toBe(false); + }); - it('should parse a readonly property', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should parse a readonly property', async () => { + const md = new MarkdownIt(); + const contents = ` # \`obj.id\` _Readonly_ An \`Integer\` representing the unique identifier. `; - const allTokens = md.parse(contents, {}); - const properties = parsePropertyBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const properties = parsePropertyBlocks(allTokens); - expect(properties).toHaveLength(1); - expect(properties[0].name).toBe('id'); - expect(properties[0].additionalTags).toContain(DocumentationTag.AVAILABILITY_READONLY); - }); + expect(properties).toHaveLength(1); + expect(properties[0].name).toBe('id'); + expect(properties[0].additionalTags).toContain(DocumentationTag.AVAILABILITY_READONLY); + }); - it('should parse properties with complex types', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should parse properties with complex types', async () => { + const md = new MarkdownIt(); + const contents = ` # \`obj.bounds\` A \`Rectangle | null\` representing the window bounds. `; - const allTokens = md.parse(contents, {}); - const properties = parsePropertyBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const properties = parsePropertyBlocks(allTokens); - expect(properties).toHaveLength(1); - expect(properties[0].name).toBe('bounds'); - }); + expect(properties).toHaveLength(1); + expect(properties[0].name).toBe('bounds'); + }); - it('should parse multiple properties', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should parse multiple properties', async () => { + const md = new MarkdownIt(); + const contents = ` # \`obj.width\` A \`Integer\` for the width. @@ -268,55 +268,55 @@ A \`Integer\` for the width. A \`Integer\` for the height. `; - const allTokens = md.parse(contents, {}); - const properties = parsePropertyBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const properties = parsePropertyBlocks(allTokens); - expect(properties).toHaveLength(2); - expect(properties[0].name).toBe('width'); - expect(properties[1].name).toBe('height'); - }); + expect(properties).toHaveLength(2); + expect(properties[0].name).toBe('width'); + expect(properties[1].name).toBe('height'); + }); - it('should handle platform-specific properties', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should handle platform-specific properties', async () => { + const md = new MarkdownIt(); + const contents = ` # \`obj.macProperty\` _macOS_ A \`boolean\` available only on macOS. `; - const allTokens = md.parse(contents, {}); - const properties = parsePropertyBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const properties = parsePropertyBlocks(allTokens); - expect(properties).toHaveLength(1); - expect(properties[0].additionalTags).toContain(DocumentationTag.OS_MACOS); - }); + expect(properties).toHaveLength(1); + expect(properties[0].additionalTags).toContain(DocumentationTag.OS_MACOS); + }); - it('should return empty array for null tokens', () => { - expect(parsePropertyBlocks(null)).toEqual([]); + it('should return empty array for null tokens', () => { + expect(parsePropertyBlocks(null)).toEqual([]); + }); }); -}); -describe('parseEventBlocks', () => { - it('should parse a basic event', async () => { - const md = new MarkdownIt(); - const contents = ` + describe('parseEventBlocks', () => { + it('should parse a basic event', async () => { + const md = new MarkdownIt(); + const contents = ` # Event: 'ready' Emitted when the app is ready. `; - const allTokens = md.parse(contents, {}); - const events = parseEventBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const events = parseEventBlocks(allTokens); - expect(events).toHaveLength(1); - expect(events[0].name).toBe('ready'); - expect(events[0].description).toContain('Emitted when the app is ready'); - expect(events[0].parameters).toHaveLength(0); - }); + expect(events).toHaveLength(1); + expect(events[0].name).toBe('ready'); + expect(events[0].description).toContain('Emitted when the app is ready'); + expect(events[0].parameters).toHaveLength(0); + }); - it('should parse an event with parameters', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should parse an event with parameters', async () => { + const md = new MarkdownIt(); + const contents = ` # Event: 'login' Returns: @@ -329,20 +329,20 @@ Returns: Emitted when login is requested. `; - const allTokens = md.parse(contents, {}); - const events = parseEventBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const events = parseEventBlocks(allTokens); - expect(events).toHaveLength(1); - expect(events[0].name).toBe('login'); - expect(events[0].parameters).toHaveLength(3); - expect(events[0].parameters[0].name).toBe('event'); - expect(events[0].parameters[1].name).toBe('webContents'); - expect(events[0].parameters[2].name).toBe('authenticationResponseDetails'); - }); + expect(events).toHaveLength(1); + expect(events[0].name).toBe('login'); + expect(events[0].parameters).toHaveLength(3); + expect(events[0].parameters[0].name).toBe('event'); + expect(events[0].parameters[1].name).toBe('webContents'); + expect(events[0].parameters[2].name).toBe('authenticationResponseDetails'); + }); - it('should parse multiple events', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should parse multiple events', async () => { + const md = new MarkdownIt(); + const contents = ` # Event: 'focus' Emitted when focused. @@ -352,17 +352,17 @@ Emitted when focused. Emitted when blurred. `; - const allTokens = md.parse(contents, {}); - const events = parseEventBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const events = parseEventBlocks(allTokens); - expect(events).toHaveLength(2); - expect(events[0].name).toBe('focus'); - expect(events[1].name).toBe('blur'); - }); + expect(events).toHaveLength(2); + expect(events[0].name).toBe('focus'); + expect(events[1].name).toBe('blur'); + }); - it('should handle platform-specific events', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should handle platform-specific events', async () => { + const md = new MarkdownIt(); + const contents = ` # Event: 'swipe' _macOS_ Returns: @@ -373,81 +373,83 @@ Returns: Emitted on swipe gesture. `; - const allTokens = md.parse(contents, {}); - const events = parseEventBlocks(allTokens); + const allTokens = md.parse(contents, {}); + const events = parseEventBlocks(allTokens); - expect(events).toHaveLength(1); - expect(events[0].additionalTags).toContain(DocumentationTag.OS_MACOS); - }); + expect(events).toHaveLength(1); + expect(events[0].additionalTags).toContain(DocumentationTag.OS_MACOS); + }); - it('should parse event with deprecated tag', async () => { - const md = new MarkdownIt(); - const contents = ` + it('should parse event with deprecated tag', async () => { + const md = new MarkdownIt(); + const contents = ` # Event: 'old-event' _Deprecated_ This event is deprecated. `; - const allTokens = md.parse(contents, {}); - const events = parseEventBlocks(allTokens); - - expect(events).toHaveLength(1); - expect(events[0].additionalTags).toContain(DocumentationTag.STABILITY_DEPRECATED); - }); - - it('should return empty array for null tokens', () => { - expect(parseEventBlocks(null)).toEqual([]); - }); -}); - -describe('guessParametersFromSignature', () => { - it('should parse single parameter', () => { - const params = guessParametersFromSignature('(x)'); - expect(params).toEqual([{ name: 'x', optional: false }]); - }); + const allTokens = md.parse(contents, {}); + const events = parseEventBlocks(allTokens); - it('should parse multiple parameters', () => { - const params = guessParametersFromSignature('(x, y, z)'); - expect(params).toEqual([ - { name: 'x', optional: false }, - { name: 'y', optional: false }, - { name: 'z', optional: false }, - ]); - }); + expect(events).toHaveLength(1); + expect(events[0].additionalTags).toContain(DocumentationTag.STABILITY_DEPRECATED); + }); - it('should parse optional parameters', () => { - const params = guessParametersFromSignature('(x, [y])'); - expect(params).toEqual([ - { name: 'x', optional: false }, - { name: 'y', optional: true }, - ]); + it('should return empty array for null tokens', () => { + expect(parseEventBlocks(null)).toEqual([]); + }); }); - it('should parse nested optional parameters', () => { - const params = guessParametersFromSignature('(x, [y, [z]])'); - expect(params).toEqual([ - { name: 'x', optional: false }, - { name: 'y', optional: true }, - { name: 'z', optional: true }, - ]); + describe('guessParametersFromSignature', () => { + it('should parse single parameter', () => { + const params = guessParametersFromSignature('(x)'); + expect(params).toEqual([{ name: 'x', optional: false }]); + }); + + it('should parse multiple parameters', () => { + const params = guessParametersFromSignature('(x, y, z)'); + expect(params).toEqual([ + { name: 'x', optional: false }, + { name: 'y', optional: false }, + { name: 'z', optional: false }, + ]); + }); + + it('should parse optional parameters', () => { + const params = guessParametersFromSignature('(x, [y])'); + expect(params).toEqual([ + { name: 'x', optional: false }, + { name: 'y', optional: true }, + ]); + }); + + it('should parse nested optional parameters', () => { + const params = guessParametersFromSignature('(x, [y, [z]])'); + expect(params).toEqual([ + { name: 'x', optional: false }, + { name: 'y', optional: true }, + { name: 'z', optional: true }, + ]); + }); + + it('should handle spread parameters', () => { + const params = guessParametersFromSignature('(...args)'); + expect(params).toEqual([{ name: '...args', optional: false }]); + }); + + it('should reject empty parameters due to regex restriction', () => { + // The function's regex doesn't support empty parentheses by design + expect(() => guessParametersFromSignature('()')).toThrow( + /signature should be a bracket wrapped group/, + ); + }); + + it('should handle parameters with numbers', () => { + const params = guessParametersFromSignature('(x1, y2)'); + expect(params).toEqual([ + { name: 'x1', optional: false }, + { name: 'y2', optional: false }, + ]); + }); }); - - it('should handle spread parameters', () => { - const params = guessParametersFromSignature('(...args)'); - expect(params).toEqual([{ name: '...args', optional: false }]); - }); - - it('should reject empty parameters due to regex restriction', () => { - // The function's regex doesn't support empty parentheses by design - expect(() => guessParametersFromSignature('()')).toThrow(/signature should be a bracket wrapped group/); - }); - - it('should handle parameters with numbers', () => { - const params = guessParametersFromSignature('(x1, y2)'); - expect(params).toEqual([ - { name: 'x1', optional: false }, - { name: 'y2', optional: false }, - ]); - }); -}); }); diff --git a/tests/markdown-helpers.spec.ts b/tests/markdown-helpers.spec.ts index 9b0fa84..4609f49 100644 --- a/tests/markdown-helpers.spec.ts +++ b/tests/markdown-helpers.spec.ts @@ -27,14 +27,7 @@ import { getTopLevelOrderedTypes, convertListToTypedKeys, } from '../src/markdown-helpers.js'; -import { - DocumentationTag, - type DetailedFunctionType, - type DetailedObjectType, - type DetailedStringType, - type DetailedEventType, - type DetailedEventReferenceType, -} from '../src/ParsedDocumentation.js'; +import { DocumentationTag } from '../src/ParsedDocumentation.js'; const getTokens = (md: string) => { const markdown = new MarkdownIt({ html: true }); diff --git a/tests/tsconfig.json b/tests/tsconfig.json index beb5030..f2fe28c 100644 --- a/tests/tsconfig.json +++ b/tests/tsconfig.json @@ -1,11 +1,9 @@ { - "extends": "../tsconfig.json", - "compilerOptions": { - "incremental": false, - "noEmit": true, - "rootDir": ".." - }, - "include": [ - "." - ] + "extends": "../tsconfig.json", + "compilerOptions": { + "incremental": false, + "noEmit": true, + "rootDir": ".." + }, + "include": ["."] } diff --git a/tsconfig.json b/tsconfig.json index e0ea089..4796f5a 100755 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,15 +1,14 @@ { - "extends": "@tsconfig/node22/tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "declaration": true, - "sourceMap": true, - "rootDir": "src", - "strict": true, - "esModuleInterop": true, - "incremental": true - }, - "include": [ - "src" - ] -} \ No newline at end of file + "extends": "@tsconfig/node22/tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "declaration": true, + "sourceMap": true, + "rootDir": "src", + "strict": true, + "esModuleInterop": true, + "incremental": true, + "types": ["node"] + }, + "include": ["src"] +} diff --git a/yarn.lock b/yarn.lock index d4bb5ae..4c2e810 100644 --- a/yarn.lock +++ b/yarn.lock @@ -75,9 +75,11 @@ __metadata: lodash.camelcase: "npm:^4.3.0" markdown-it: "npm:^14.1.0" ora: "npm:^8.1.0" - prettier: "npm:^3.3.3" + oxfmt: "npm:^0.44.0" + oxlint: "npm:^1.59.0" + oxlint-tsgolint: "npm:^0.20.0" pretty-ms: "npm:^9.1.0" - typescript: "npm:^5.8.3" + typescript: "npm:^6.0.2" vitest: "npm:^4.0.18" bin: electron-docs-linter: ./dist/bin.js @@ -329,6 +331,314 @@ __metadata: languageName: node linkType: hard +"@oxfmt/binding-android-arm-eabi@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-android-arm-eabi@npm:0.44.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@oxfmt/binding-android-arm64@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-android-arm64@npm:0.44.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-darwin-arm64@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-darwin-arm64@npm:0.44.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-darwin-x64@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-darwin-x64@npm:0.44.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxfmt/binding-freebsd-x64@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-freebsd-x64@npm:0.44.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm-gnueabihf@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-linux-arm-gnueabihf@npm:0.44.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm-musleabihf@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-linux-arm-musleabihf@npm:0.44.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm64-gnu@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-linux-arm64-gnu@npm:0.44.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-arm64-musl@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-linux-arm64-musl@npm:0.44.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@oxfmt/binding-linux-ppc64-gnu@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-linux-ppc64-gnu@npm:0.44.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-riscv64-gnu@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-linux-riscv64-gnu@npm:0.44.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-riscv64-musl@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-linux-riscv64-musl@npm:0.44.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@oxfmt/binding-linux-s390x-gnu@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-linux-s390x-gnu@npm:0.44.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-x64-gnu@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-linux-x64-gnu@npm:0.44.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@oxfmt/binding-linux-x64-musl@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-linux-x64-musl@npm:0.44.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@oxfmt/binding-openharmony-arm64@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-openharmony-arm64@npm:0.44.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-win32-arm64-msvc@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-win32-arm64-msvc@npm:0.44.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxfmt/binding-win32-ia32-msvc@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-win32-ia32-msvc@npm:0.44.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@oxfmt/binding-win32-x64-msvc@npm:0.44.0": + version: 0.44.0 + resolution: "@oxfmt/binding-win32-x64-msvc@npm:0.44.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/darwin-arm64@npm:0.20.0": + version: 0.20.0 + resolution: "@oxlint-tsgolint/darwin-arm64@npm:0.20.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/darwin-x64@npm:0.20.0": + version: 0.20.0 + resolution: "@oxlint-tsgolint/darwin-x64@npm:0.20.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/linux-arm64@npm:0.20.0": + version: 0.20.0 + resolution: "@oxlint-tsgolint/linux-arm64@npm:0.20.0" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/linux-x64@npm:0.20.0": + version: 0.20.0 + resolution: "@oxlint-tsgolint/linux-x64@npm:0.20.0" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/win32-arm64@npm:0.20.0": + version: 0.20.0 + resolution: "@oxlint-tsgolint/win32-arm64@npm:0.20.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/win32-x64@npm:0.20.0": + version: 0.20.0 + resolution: "@oxlint-tsgolint/win32-x64@npm:0.20.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/binding-android-arm-eabi@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-android-arm-eabi@npm:1.59.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@oxlint/binding-android-arm64@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-android-arm64@npm:1.59.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-darwin-arm64@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-darwin-arm64@npm:1.59.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-darwin-x64@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-darwin-x64@npm:1.59.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/binding-freebsd-x64@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-freebsd-x64@npm:1.59.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm-gnueabihf@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-linux-arm-gnueabihf@npm:1.59.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm-musleabihf@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-linux-arm-musleabihf@npm:1.59.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm64-gnu@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-linux-arm64-gnu@npm:1.59.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm64-musl@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-linux-arm64-musl@npm:1.59.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/binding-linux-ppc64-gnu@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-linux-ppc64-gnu@npm:1.59.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-riscv64-gnu@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-linux-riscv64-gnu@npm:1.59.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-riscv64-musl@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-linux-riscv64-musl@npm:1.59.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/binding-linux-s390x-gnu@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-linux-s390x-gnu@npm:1.59.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-x64-gnu@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-linux-x64-gnu@npm:1.59.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-x64-musl@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-linux-x64-musl@npm:1.59.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/binding-openharmony-arm64@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-openharmony-arm64@npm:1.59.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-win32-arm64-msvc@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-win32-arm64-msvc@npm:1.59.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-win32-ia32-msvc@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-win32-ia32-msvc@npm:1.59.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@oxlint/binding-win32-x64-msvc@npm:1.59.0": + version: 1.59.0 + resolution: "@oxlint/binding-win32-x64-msvc@npm:1.59.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -1550,6 +1860,177 @@ __metadata: languageName: node linkType: hard +"oxfmt@npm:^0.44.0": + version: 0.44.0 + resolution: "oxfmt@npm:0.44.0" + dependencies: + "@oxfmt/binding-android-arm-eabi": "npm:0.44.0" + "@oxfmt/binding-android-arm64": "npm:0.44.0" + "@oxfmt/binding-darwin-arm64": "npm:0.44.0" + "@oxfmt/binding-darwin-x64": "npm:0.44.0" + "@oxfmt/binding-freebsd-x64": "npm:0.44.0" + "@oxfmt/binding-linux-arm-gnueabihf": "npm:0.44.0" + "@oxfmt/binding-linux-arm-musleabihf": "npm:0.44.0" + "@oxfmt/binding-linux-arm64-gnu": "npm:0.44.0" + "@oxfmt/binding-linux-arm64-musl": "npm:0.44.0" + "@oxfmt/binding-linux-ppc64-gnu": "npm:0.44.0" + "@oxfmt/binding-linux-riscv64-gnu": "npm:0.44.0" + "@oxfmt/binding-linux-riscv64-musl": "npm:0.44.0" + "@oxfmt/binding-linux-s390x-gnu": "npm:0.44.0" + "@oxfmt/binding-linux-x64-gnu": "npm:0.44.0" + "@oxfmt/binding-linux-x64-musl": "npm:0.44.0" + "@oxfmt/binding-openharmony-arm64": "npm:0.44.0" + "@oxfmt/binding-win32-arm64-msvc": "npm:0.44.0" + "@oxfmt/binding-win32-ia32-msvc": "npm:0.44.0" + "@oxfmt/binding-win32-x64-msvc": "npm:0.44.0" + tinypool: "npm:2.1.0" + dependenciesMeta: + "@oxfmt/binding-android-arm-eabi": + optional: true + "@oxfmt/binding-android-arm64": + optional: true + "@oxfmt/binding-darwin-arm64": + optional: true + "@oxfmt/binding-darwin-x64": + optional: true + "@oxfmt/binding-freebsd-x64": + optional: true + "@oxfmt/binding-linux-arm-gnueabihf": + optional: true + "@oxfmt/binding-linux-arm-musleabihf": + optional: true + "@oxfmt/binding-linux-arm64-gnu": + optional: true + "@oxfmt/binding-linux-arm64-musl": + optional: true + "@oxfmt/binding-linux-ppc64-gnu": + optional: true + "@oxfmt/binding-linux-riscv64-gnu": + optional: true + "@oxfmt/binding-linux-riscv64-musl": + optional: true + "@oxfmt/binding-linux-s390x-gnu": + optional: true + "@oxfmt/binding-linux-x64-gnu": + optional: true + "@oxfmt/binding-linux-x64-musl": + optional: true + "@oxfmt/binding-openharmony-arm64": + optional: true + "@oxfmt/binding-win32-arm64-msvc": + optional: true + "@oxfmt/binding-win32-ia32-msvc": + optional: true + "@oxfmt/binding-win32-x64-msvc": + optional: true + bin: + oxfmt: bin/oxfmt + checksum: 10c0/c4e0239ff9c7480a820cffd43a805a70df1b4569bdae5c253a0547f93a48ab70bb22454487c50529a5e6b2080717d15db981a52a99da7d6b55fa365c9b03fdb9 + languageName: node + linkType: hard + +"oxlint-tsgolint@npm:^0.20.0": + version: 0.20.0 + resolution: "oxlint-tsgolint@npm:0.20.0" + dependencies: + "@oxlint-tsgolint/darwin-arm64": "npm:0.20.0" + "@oxlint-tsgolint/darwin-x64": "npm:0.20.0" + "@oxlint-tsgolint/linux-arm64": "npm:0.20.0" + "@oxlint-tsgolint/linux-x64": "npm:0.20.0" + "@oxlint-tsgolint/win32-arm64": "npm:0.20.0" + "@oxlint-tsgolint/win32-x64": "npm:0.20.0" + dependenciesMeta: + "@oxlint-tsgolint/darwin-arm64": + optional: true + "@oxlint-tsgolint/darwin-x64": + optional: true + "@oxlint-tsgolint/linux-arm64": + optional: true + "@oxlint-tsgolint/linux-x64": + optional: true + "@oxlint-tsgolint/win32-arm64": + optional: true + "@oxlint-tsgolint/win32-x64": + optional: true + bin: + tsgolint: bin/tsgolint.js + checksum: 10c0/9521a8e6aaea637592cda093bfb9220eb8a728bfccc980cc82de0011ed84733f1a42c629dfff8574a023e40e48c2dcdaf1675f0cf11aa92d164d5ccca1305c52 + languageName: node + linkType: hard + +"oxlint@npm:^1.59.0": + version: 1.59.0 + resolution: "oxlint@npm:1.59.0" + dependencies: + "@oxlint/binding-android-arm-eabi": "npm:1.59.0" + "@oxlint/binding-android-arm64": "npm:1.59.0" + "@oxlint/binding-darwin-arm64": "npm:1.59.0" + "@oxlint/binding-darwin-x64": "npm:1.59.0" + "@oxlint/binding-freebsd-x64": "npm:1.59.0" + "@oxlint/binding-linux-arm-gnueabihf": "npm:1.59.0" + "@oxlint/binding-linux-arm-musleabihf": "npm:1.59.0" + "@oxlint/binding-linux-arm64-gnu": "npm:1.59.0" + "@oxlint/binding-linux-arm64-musl": "npm:1.59.0" + "@oxlint/binding-linux-ppc64-gnu": "npm:1.59.0" + "@oxlint/binding-linux-riscv64-gnu": "npm:1.59.0" + "@oxlint/binding-linux-riscv64-musl": "npm:1.59.0" + "@oxlint/binding-linux-s390x-gnu": "npm:1.59.0" + "@oxlint/binding-linux-x64-gnu": "npm:1.59.0" + "@oxlint/binding-linux-x64-musl": "npm:1.59.0" + "@oxlint/binding-openharmony-arm64": "npm:1.59.0" + "@oxlint/binding-win32-arm64-msvc": "npm:1.59.0" + "@oxlint/binding-win32-ia32-msvc": "npm:1.59.0" + "@oxlint/binding-win32-x64-msvc": "npm:1.59.0" + peerDependencies: + oxlint-tsgolint: ">=0.18.0" + dependenciesMeta: + "@oxlint/binding-android-arm-eabi": + optional: true + "@oxlint/binding-android-arm64": + optional: true + "@oxlint/binding-darwin-arm64": + optional: true + "@oxlint/binding-darwin-x64": + optional: true + "@oxlint/binding-freebsd-x64": + optional: true + "@oxlint/binding-linux-arm-gnueabihf": + optional: true + "@oxlint/binding-linux-arm-musleabihf": + optional: true + "@oxlint/binding-linux-arm64-gnu": + optional: true + "@oxlint/binding-linux-arm64-musl": + optional: true + "@oxlint/binding-linux-ppc64-gnu": + optional: true + "@oxlint/binding-linux-riscv64-gnu": + optional: true + "@oxlint/binding-linux-riscv64-musl": + optional: true + "@oxlint/binding-linux-s390x-gnu": + optional: true + "@oxlint/binding-linux-x64-gnu": + optional: true + "@oxlint/binding-linux-x64-musl": + optional: true + "@oxlint/binding-openharmony-arm64": + optional: true + "@oxlint/binding-win32-arm64-msvc": + optional: true + "@oxlint/binding-win32-ia32-msvc": + optional: true + "@oxlint/binding-win32-x64-msvc": + optional: true + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + bin: + oxlint: bin/oxlint + checksum: 10c0/68614addf6b6a95df8a0c8ba764ee09d2d6d1693b55b62a4f31eda3be63915d24666a11b31dfe1fabbe88e1d7ab814243a1e7ecb40db87d0f567135d17f44e2c + languageName: node + linkType: hard + "package-json-from-dist@npm:^1.0.0": version: 1.0.1 resolution: "package-json-from-dist@npm:1.0.1" @@ -1643,15 +2124,6 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^3.3.3": - version: 3.3.3 - resolution: "prettier@npm:3.3.3" - bin: - prettier: bin/prettier.cjs - checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26 - languageName: node - linkType: hard - "pretty-ms@npm:*": version: 8.0.0 resolution: "pretty-ms@npm:8.0.0" @@ -1989,6 +2461,13 @@ __metadata: languageName: node linkType: hard +"tinypool@npm:2.1.0": + version: 2.1.0 + resolution: "tinypool@npm:2.1.0" + checksum: 10c0/9fb1c760558c6264e0f4cfde96a63b12450b43f1730fbe6274aa24ddbdf488745c08924d0dea7a1303b47d555416a6415f2113898c69b6ecf731e75ac95238a5 + languageName: node + linkType: hard + "tinyrainbow@npm:^2.0.0": version: 2.0.0 resolution: "tinyrainbow@npm:2.0.0" @@ -2012,23 +2491,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.8.3": - version: 5.9.3 - resolution: "typescript@npm:5.9.3" +"typescript@npm:^6.0.2": + version: 6.0.2 + resolution: "typescript@npm:6.0.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + checksum: 10c0/4b860b0bf87cc0fee0f66d8ef2640b5a8a8a8c74d1129adb82e389e5f97124383823c47946bef8a73ede371461143a3aa8544399d2133c7b2e4f07e81860af7f languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": - version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" +"typescript@patch:typescript@npm%3A^6.0.2#optional!builtin": + version: 6.0.2 + resolution: "typescript@patch:typescript@npm%3A6.0.2#optional!builtin::version=6.0.2&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + checksum: 10c0/49f0b84fc6ca55653e77752b8a61beabc09ee3dae5d965c31596225aa6ef213c5727b1d2e895b900416dc603854ba0872ac4a812c2a4ed6793a601f9c675de02 languageName: node linkType: hard