From 6b30df302e97459a1691773b63a5c6d467336664 Mon Sep 17 00:00:00 2001 From: Marc Beinder Date: Sun, 15 Mar 2026 08:15:54 -0500 Subject: [PATCH 1/2] Add Config Helper --- dist/build-plugins/index.d.ts | 1 + .../transformGenericsPlugin.d.ts | 4 + dist/cli.d.ts | 1 + dist/core/ast/ASTAnalyzer.d.ts | 16 + dist/core/ast/ASTTransformer.d.ts | 9 + dist/core/ast/DependencyResolver.d.ts | 16 + dist/core/ast/index.d.ts | 3 + dist/core/config/ConfigDefaults.d.ts | 82 ++ dist/core/config/ConfigLoader.d.ts | 20 + dist/core/config/ConfigMerger.d.ts | 6 + dist/core/config/ConfigTypes.d.ts | 97 +++ dist/core/config/ConfigValidator.d.ts | 10 + dist/core/config/index.d.ts | 5 + dist/core/di/Container.d.ts | 17 + dist/core/di/ServiceRegistration.d.ts | 5 + dist/core/di/index.d.ts | 2 + dist/core/formatters/BaseFormattingRule.d.ts | 16 + dist/core/formatters/IFormattingRule.d.ts | 4 + dist/core/formatters/index.d.ts | 3 + .../rules/ast/ClassMemberSortingRule.d.ts | 34 + .../rules/ast/FileDeclarationSortingRule.d.ts | 33 + dist/core/formatters/rules/ast/index.d.ts | 2 + .../rules/imports/ImportOrganizationRule.d.ts | 15 + dist/core/formatters/rules/imports/index.d.ts | 1 + .../index-generation/IndexGenerationRule.d.ts | 26 + .../rules/index-generation/index.d.ts | 1 + dist/core/formatters/rules/index.d.ts | 5 + .../spacing/BlankLineBeforeReturnsRule.d.ts | 5 + .../BlankLineBetweenDeclarationsRule.d.ts | 6 + .../BlankLineBetweenStatementTypesRule.d.ts | 6 + .../rules/spacing/BlockSpacingRule.d.ts | 5 + .../rules/spacing/BracketSpacingRule.d.ts | 5 + dist/core/formatters/rules/spacing/index.d.ts | 5 + .../rules/style/DocBlockCommentRule.d.ts | 5 + .../rules/style/IndentationRule.d.ts | 5 + .../rules/style/QuoteStyleRule.d.ts | 5 + .../formatters/rules/style/SemicolonRule.d.ts | 5 + .../style/StructuralIndentationRule.d.ts | 11 + dist/core/formatters/rules/style/index.d.ts | 5 + dist/core/index.d.ts | 5 + dist/core/pipeline/FormatterPipeline.d.ts | 42 + dist/core/pipeline/index.d.ts | 1 + dist/formatters/index.d.ts | 1 + dist/formatters/package.d.ts | 1 + dist/index.d.ts | 5 + dist/index.js | 2 + dist/shared/index.d.ts | 1 + dist/shared/types.d.ts | 7 + dist/sortPackage.d.ts | 3 + dist/sortTSConfig.d.ts | 3 + dist/tsfmt.d.ts | 2 + dist/tsfmt.js | 9 + package-lock.json | 715 +++++++++--------- package.json | 11 +- src/index.ts | 1 + src/sortPackage.ts | 4 +- src/tsfmt.ts | 26 + 57 files changed, 973 insertions(+), 368 deletions(-) create mode 100644 dist/build-plugins/index.d.ts create mode 100644 dist/build-plugins/transformGenericsPlugin.d.ts create mode 100644 dist/cli.d.ts create mode 100644 dist/core/ast/ASTAnalyzer.d.ts create mode 100644 dist/core/ast/ASTTransformer.d.ts create mode 100644 dist/core/ast/DependencyResolver.d.ts create mode 100644 dist/core/ast/index.d.ts create mode 100644 dist/core/config/ConfigDefaults.d.ts create mode 100644 dist/core/config/ConfigLoader.d.ts create mode 100644 dist/core/config/ConfigMerger.d.ts create mode 100644 dist/core/config/ConfigTypes.d.ts create mode 100644 dist/core/config/ConfigValidator.d.ts create mode 100644 dist/core/config/index.d.ts create mode 100644 dist/core/di/Container.d.ts create mode 100644 dist/core/di/ServiceRegistration.d.ts create mode 100644 dist/core/di/index.d.ts create mode 100644 dist/core/formatters/BaseFormattingRule.d.ts create mode 100644 dist/core/formatters/IFormattingRule.d.ts create mode 100644 dist/core/formatters/index.d.ts create mode 100644 dist/core/formatters/rules/ast/ClassMemberSortingRule.d.ts create mode 100644 dist/core/formatters/rules/ast/FileDeclarationSortingRule.d.ts create mode 100644 dist/core/formatters/rules/ast/index.d.ts create mode 100644 dist/core/formatters/rules/imports/ImportOrganizationRule.d.ts create mode 100644 dist/core/formatters/rules/imports/index.d.ts create mode 100644 dist/core/formatters/rules/index-generation/IndexGenerationRule.d.ts create mode 100644 dist/core/formatters/rules/index-generation/index.d.ts create mode 100644 dist/core/formatters/rules/index.d.ts create mode 100644 dist/core/formatters/rules/spacing/BlankLineBeforeReturnsRule.d.ts create mode 100644 dist/core/formatters/rules/spacing/BlankLineBetweenDeclarationsRule.d.ts create mode 100644 dist/core/formatters/rules/spacing/BlankLineBetweenStatementTypesRule.d.ts create mode 100644 dist/core/formatters/rules/spacing/BlockSpacingRule.d.ts create mode 100644 dist/core/formatters/rules/spacing/BracketSpacingRule.d.ts create mode 100644 dist/core/formatters/rules/spacing/index.d.ts create mode 100644 dist/core/formatters/rules/style/DocBlockCommentRule.d.ts create mode 100644 dist/core/formatters/rules/style/IndentationRule.d.ts create mode 100644 dist/core/formatters/rules/style/QuoteStyleRule.d.ts create mode 100644 dist/core/formatters/rules/style/SemicolonRule.d.ts create mode 100644 dist/core/formatters/rules/style/StructuralIndentationRule.d.ts create mode 100644 dist/core/formatters/rules/style/index.d.ts create mode 100644 dist/core/index.d.ts create mode 100644 dist/core/pipeline/FormatterPipeline.d.ts create mode 100644 dist/core/pipeline/index.d.ts create mode 100644 dist/formatters/index.d.ts create mode 100644 dist/formatters/package.d.ts create mode 100644 dist/index.d.ts create mode 100644 dist/shared/index.d.ts create mode 100644 dist/shared/types.d.ts create mode 100644 dist/sortPackage.d.ts create mode 100644 dist/sortTSConfig.d.ts create mode 100644 dist/tsfmt.d.ts create mode 100644 dist/tsfmt.js create mode 100644 src/tsfmt.ts diff --git a/dist/build-plugins/index.d.ts b/dist/build-plugins/index.d.ts new file mode 100644 index 0000000..25221e1 --- /dev/null +++ b/dist/build-plugins/index.d.ts @@ -0,0 +1 @@ +export * from "./transformGenericsPlugin"; diff --git a/dist/build-plugins/transformGenericsPlugin.d.ts b/dist/build-plugins/transformGenericsPlugin.d.ts new file mode 100644 index 0000000..92d4746 --- /dev/null +++ b/dist/build-plugins/transformGenericsPlugin.d.ts @@ -0,0 +1,4 @@ +export declare function transformGenericsPlugin(): { + name: string; + generateBundle(options: any, bundle: any): void; +}; diff --git a/dist/cli.d.ts b/dist/cli.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/dist/cli.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/dist/core/ast/ASTAnalyzer.d.ts b/dist/core/ast/ASTAnalyzer.d.ts new file mode 100644 index 0000000..c7a3655 --- /dev/null +++ b/dist/core/ast/ASTAnalyzer.d.ts @@ -0,0 +1,16 @@ +import * as ts from "typescript"; +export interface ReferenceInfo { + identifiers: Set; + thisReferences: Set; + directCalls: Set; +} +export declare class ASTAnalyzer { + static extractReferences(node: ts.Node, scopeFilter?: (name: string) => boolean): ReferenceInfo; + static extractClassMemberReferences(member: ts.ClassElement, availableMembers: Set): Set; + static extractFileDeclarationReferences(declaration: ts.Statement, availableDeclarations: Set): Set; + static getClassMemberName(member: ts.ClassElement): string; + static getDeclarationName(declaration: ts.Statement): string; + static hasModifier(node: ts.Node, kind: ts.SyntaxKind): boolean; + static isDefaultExport(node: ts.Statement): boolean; + static isExported(node: ts.Statement): boolean; +} diff --git a/dist/core/ast/ASTTransformer.d.ts b/dist/core/ast/ASTTransformer.d.ts new file mode 100644 index 0000000..819f319 --- /dev/null +++ b/dist/core/ast/ASTTransformer.d.ts @@ -0,0 +1,9 @@ +import * as ts from "typescript"; +export declare class ASTTransformer { + static createSourceFile(source: string, filePath: string): ts.SourceFile; + static printNode(node: ts.Node, sourceFile: ts.SourceFile, removeComments?: boolean): string; + static printSourceFile(sourceFile: ts.SourceFile): string; + static reorderClassMembers(classNode: ts.ClassDeclaration, orderedMembers: ts.ClassElement[]): ts.ClassDeclaration; + static reorderSourceFileStatements(sourceFile: ts.SourceFile, orderedStatements: ts.Statement[]): ts.SourceFile; + static transformSourceFile(sourceFile: ts.SourceFile, visitor: (node: ts.Node) => ts.Node | undefined): ts.SourceFile; +} diff --git a/dist/core/ast/DependencyResolver.d.ts b/dist/core/ast/DependencyResolver.d.ts new file mode 100644 index 0000000..c460dff --- /dev/null +++ b/dist/core/ast/DependencyResolver.d.ts @@ -0,0 +1,16 @@ +export interface DependencyNode { + name: string; + dependencies: Set; + originalIndex: number; + sortedIndex: number; +} +export interface DependencyGraph { + nodes: Map; + circularGroups: Set[]; +} +export declare class DependencyResolver { + private static findStronglyConnectedComponents; + static buildGraph(items: T[], getName: (item: T) => string, getDependencies: (item: T) => Set): DependencyGraph; + static topologicalSort(graph: DependencyGraph, sortedNames: string[]): string[]; + static reorderWithDependencies(items: T[], getName: (item: T) => string): T[]; +} diff --git a/dist/core/ast/index.d.ts b/dist/core/ast/index.d.ts new file mode 100644 index 0000000..daf6e56 --- /dev/null +++ b/dist/core/ast/index.d.ts @@ -0,0 +1,3 @@ +export * from "./ASTAnalyzer"; +export * from "./ASTTransformer"; +export * from "./DependencyResolver"; diff --git a/dist/core/config/ConfigDefaults.d.ts b/dist/core/config/ConfigDefaults.d.ts new file mode 100644 index 0000000..0d447ab --- /dev/null +++ b/dist/core/config/ConfigDefaults.d.ts @@ -0,0 +1,82 @@ +import { CoreConfig, FormatterOrder } from "./ConfigTypes"; +export declare class ConfigDefaults { + static readonly DEFAULT_EXCLUDE_PATTERNS: readonly ["node_modules/**", "dist/**", "vendor/**", "bin/**"]; + static readonly DEFAULT_INDEX_DIRECTORIES: readonly ["src/", "packages/"]; + static readonly DEFAULT_JS_INCLUDE_PATTERNS: readonly ["**/*.{js,ts,jsx,tsx}"]; + static readonly DEFAULT_TS_INCLUDE_PATTERNS: readonly ["**/*.{ts,tsx}"]; + static getDefaultCodeStyleConfig(): { + enabled: boolean; + quoteStyle: "double"; + semicolons: "always"; + bracketSpacing: boolean; + indentStyle: "space"; + indentWidth: number; + lineWidth: number; + trailingCommas: "all"; + arrowParens: "avoid"; + }; + static getDefaultIndexDirectories(): string[]; + static getDefaultIndexGenerationConfig(): { + enabled: boolean; + directories: string[]; + options: { + fileExtension: string; + indexFileName: string; + recursive: boolean; + }; + updateMainIndex: boolean; + }; + static getDefaultImportConfig(): { + enabled: boolean; + sortImports: boolean; + removeUnused: boolean; + removeSideEffects: boolean; + groupImports: boolean; + groupOrder: string[]; + separateGroups: boolean; + }; + static getDefaultIncludePatterns(): string[]; + static getDefaultExcludePatterns(): string[]; + static getDefaultSortingConfig(): { + enabled: boolean; + classMembers: { + enabled: boolean; + order: import("../").MemberType[]; + groupByVisibility: boolean; + respectDependencies: boolean; + }; + reactComponents: { + enabled: boolean; + order: import("../").MemberType[]; + groupByVisibility: boolean; + respectDependencies: boolean; + }; + fileDeclarations: { + enabled: boolean; + order: import("../").DeclarationType[]; + respectDependencies: boolean; + }; + include: string[]; + exclude: string[]; + }; + static getDefaultSpacingConfig(): { + enabled: boolean; + betweenDeclarations: boolean; + beforeReturns: boolean; + betweenStatementTypes: boolean; + }; + static getDefaultPackageJsonConfig(): { + enabled: boolean; + customSortOrder: string[] | undefined; + indentation: number; + }; + static getDefaultTsConfigConfig(): { + enabled: boolean; + indentation: number; + }; + static getDefaultFormatterOrder(): FormatterOrder[]; + static getDefaultConfig(): CoreConfig; + static getDefaultJavaScriptIncludePatterns(): string[]; + static getDisabledConfig(): CoreConfig; + static getMinimalConfig(): CoreConfig; +} diff --git a/dist/core/config/ConfigLoader.d.ts b/dist/core/config/ConfigLoader.d.ts new file mode 100644 index 0000000..2ea2bf6 --- /dev/null +++ b/dist/core/config/ConfigLoader.d.ts @@ -0,0 +1,20 @@ +import { CoreConfig } from "./ConfigTypes"; +export declare class ConfigLoader { + static readonly CONFIG_FILE_NAME = "tsfmt.config.ts"; + private static configCache; + static clearCache(): void; + static getConfigFilePath(projectRoot?: string): string; + static createSampleConfig(projectRoot?: string, overwrite?: boolean): void; + static getCacheStats(): { + size: number; + keys: string[]; + }; + private static getFileModTime; + static hasConfigFile(projectRoot?: string): boolean; + private static transpileTypeScript; + private static loadTypeScriptConfig; + private static loadConfigWithCache; + static loadConfig(projectRoot?: string, validate?: boolean): CoreConfig; + static loadConfigWithoutValidation(projectRoot?: string): CoreConfig; + static reloadConfig(projectRoot?: string): CoreConfig; +} diff --git a/dist/core/config/ConfigMerger.d.ts b/dist/core/config/ConfigMerger.d.ts new file mode 100644 index 0000000..d198c52 --- /dev/null +++ b/dist/core/config/ConfigMerger.d.ts @@ -0,0 +1,6 @@ +import { CoreConfig } from "./ConfigTypes"; +export declare class ConfigMerger { + private static deepMerge; + static merge(userConfig: Partial): CoreConfig; + static mergeMultiple(...configs: Partial[]): CoreConfig; +} diff --git a/dist/core/config/ConfigTypes.d.ts b/dist/core/config/ConfigTypes.d.ts new file mode 100644 index 0000000..b644c03 --- /dev/null +++ b/dist/core/config/ConfigTypes.d.ts @@ -0,0 +1,97 @@ +import { MemberType } from "../"; +import { DeclarationType } from "../"; +import { IndexGenerationConfig } from "../"; +export interface ClassMemberConfig { + enabled?: boolean; + order?: MemberType[]; + groupByVisibility?: boolean; + respectDependencies?: boolean; +} +export interface CodeStyleConfig { + enabled?: boolean; + quoteStyle?: "single" | "double"; + semicolons?: "always" | "never"; + bracketSpacing?: boolean; + indentStyle?: "tab" | "space"; + indentWidth?: number; + lineWidth?: number; + trailingCommas?: "none" | "es5" | "all"; + arrowParens?: "always" | "avoid"; +} +export interface ImportConfig { + enabled?: boolean; + sortImports?: boolean; + removeUnused?: boolean; + removeSideEffects?: boolean; + groupImports?: boolean; + groupOrder?: string[]; + separateGroups?: boolean; +} +export interface ReactComponentConfig { + enabled?: boolean; + order?: MemberType[]; + groupByVisibility?: boolean; + respectDependencies?: boolean; +} +export interface FileDeclarationConfig { + enabled?: boolean; + order?: DeclarationType[]; + respectDependencies?: boolean; +} +export interface SortingConfig { + enabled?: boolean; + classMembers?: ClassMemberConfig; + reactComponents?: ReactComponentConfig; + fileDeclarations?: FileDeclarationConfig; + include?: string[]; + exclude?: string[]; +} +export interface SpacingConfig { + enabled?: boolean; + betweenDeclarations?: boolean; + beforeReturns?: boolean; + betweenStatementTypes?: boolean; +} +export interface PackageJsonConfig { + enabled?: boolean; + customSortOrder?: string[]; + indentation?: number; +} +export interface TsConfigConfig { + enabled?: boolean; + indentation?: number; +} +export declare enum FormatterOrder { + IndexGeneration = "IndexGeneration", + CodeStyle = "CodeStyle", + ImportOrganization = "ImportOrganization", + ASTTransformation = "ASTTransformation", + Spacing = "Spacing" +} +export interface CoreConfig { + indexGeneration?: IndexGenerationConfig; + codeStyle?: CodeStyleConfig; + imports?: ImportConfig; + sorting?: SortingConfig; + spacing?: SpacingConfig; + packageJson?: PackageJsonConfig; + tsConfig?: TsConfigConfig; + formatterOrder?: FormatterOrder[]; + skipReactFiles?: boolean; +} +export declare class ConfigTypes { + static getArrowParenOptions(): Array<"always" | "avoid">; + static getFormatterOrderOptions(): FormatterOrder[]; + static getImportGroupOptions(): string[]; + static getIndentStyleOptions(): Array<"tab" | "space">; + static getQuoteStyleOptions(): Array<"single" | "double">; + static getSemicolonOptions(): Array<"always" | "never">; + static getTrailingCommaOptions(): Array<"none" | "es5" | "all">; + static isRecommendedLineWidth(width: number): boolean; + static isValidArrowParenOption(option: string): option is "always" | "avoid"; + static isValidIndentStyle(style: string): style is "tab" | "space"; + static isValidIndentWidth(width: number): boolean; + static isValidQuoteStyle(style: string): style is "single" | "double"; + static isValidSemicolonOption(option: string): option is "always" | "never"; + static isValidTrailingCommaOption(option: string): option is "none" | "es5" | "all"; +} diff --git a/dist/core/config/ConfigValidator.d.ts b/dist/core/config/ConfigValidator.d.ts new file mode 100644 index 0000000..c766074 --- /dev/null +++ b/dist/core/config/ConfigValidator.d.ts @@ -0,0 +1,10 @@ +import { CoreConfig } from "./ConfigTypes"; +export interface ValidationResult { + valid: boolean; + errors: string[]; + warnings: string[]; +} +export declare class ConfigValidator { + static validate(config: CoreConfig): ValidationResult; + static validateOrThrow(config: CoreConfig): void; +} diff --git a/dist/core/config/index.d.ts b/dist/core/config/index.d.ts new file mode 100644 index 0000000..d4da400 --- /dev/null +++ b/dist/core/config/index.d.ts @@ -0,0 +1,5 @@ +export * from "./ConfigDefaults"; +export * from "./ConfigLoader"; +export * from "./ConfigMerger"; +export * from "./ConfigTypes"; +export * from "./ConfigValidator"; diff --git a/dist/core/di/Container.d.ts b/dist/core/di/Container.d.ts new file mode 100644 index 0000000..3d4ffa4 --- /dev/null +++ b/dist/core/di/Container.d.ts @@ -0,0 +1,17 @@ +import "reflect-metadata"; +export declare class Container { + private factories; + private services; + private singletons; + static inject(...dependencies: string[]): (target: any) => any; + clear(): void; + private extractGenericTypeName; + private extractGenericTypeNameForRegistration; + has(name: string): boolean; + private isConstructorFunction; + register(name: string, instance: T): void; + private resolveByKey; + resolve(name?: string): T; + private resolveDependencies; + singleton(nameOrInstanceOrConstructor: string | T | (() => T) | (new (...args: any[]) => T), instance?: T | (() => T)): void; +} diff --git a/dist/core/di/ServiceRegistration.d.ts b/dist/core/di/ServiceRegistration.d.ts new file mode 100644 index 0000000..2dc4ea8 --- /dev/null +++ b/dist/core/di/ServiceRegistration.d.ts @@ -0,0 +1,5 @@ +import { CoreConfig } from "../config"; +import { Container } from "./Container"; +export declare class ServiceRegistration { + static registerServices(container: Container, config: CoreConfig): void; +} diff --git a/dist/core/di/index.d.ts b/dist/core/di/index.d.ts new file mode 100644 index 0000000..1bba20d --- /dev/null +++ b/dist/core/di/index.d.ts @@ -0,0 +1,2 @@ +export * from "./Container"; +export * from "./ServiceRegistration"; diff --git a/dist/core/formatters/BaseFormattingRule.d.ts b/dist/core/formatters/BaseFormattingRule.d.ts new file mode 100644 index 0000000..76fb087 --- /dev/null +++ b/dist/core/formatters/BaseFormattingRule.d.ts @@ -0,0 +1,16 @@ +import { CoreConfig } from "../config"; +import { Container } from "../di"; +import { IFormattingRule } from "./IFormattingRule"; +export declare abstract class BaseFormattingRule implements IFormattingRule { + protected readonly container: Container; + protected readonly config: CoreConfig; + abstract readonly name: string; + constructor(container: Container, config?: CoreConfig); + abstract apply(source: string, filePath?: string): string; + protected getConfig(): CoreConfig; + protected getCodeStyleConfig(): import("../config").CodeStyleConfig | undefined; + protected getImportsConfig(): import("../config").ImportConfig | undefined; + protected getIndexGenerationConfig(): import("./rules").IndexGenerationConfig | undefined; + protected getSortingConfig(): import("../config").SortingConfig | undefined; + protected getSpacingConfig(): import("../config").SpacingConfig | undefined; +} diff --git a/dist/core/formatters/IFormattingRule.d.ts b/dist/core/formatters/IFormattingRule.d.ts new file mode 100644 index 0000000..f0ae5b1 --- /dev/null +++ b/dist/core/formatters/IFormattingRule.d.ts @@ -0,0 +1,4 @@ +export interface IFormattingRule { + readonly name: string; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/index.d.ts b/dist/core/formatters/index.d.ts new file mode 100644 index 0000000..8c8a07d --- /dev/null +++ b/dist/core/formatters/index.d.ts @@ -0,0 +1,3 @@ +export * from "./BaseFormattingRule"; +export * from "./IFormattingRule"; +export * from "./rules"; diff --git a/dist/core/formatters/rules/ast/ClassMemberSortingRule.d.ts b/dist/core/formatters/rules/ast/ClassMemberSortingRule.d.ts new file mode 100644 index 0000000..c00a6dc --- /dev/null +++ b/dist/core/formatters/rules/ast/ClassMemberSortingRule.d.ts @@ -0,0 +1,34 @@ +import * as ts from "typescript"; +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare enum MemberType { + StaticProperty = "static_property", + InstanceProperty = "instance_property", + Constructor = "constructor", + StaticMethod = "static_method", + InstanceMethod = "instance_method", + GetAccessor = "get_accessor", + SetAccessor = "set_accessor" +} +export interface ClassMember { + node: ts.ClassElement; + type: MemberType; + name: string; + isPublic: boolean; + isProtected: boolean; + isPrivate: boolean; + isStatic: boolean; + hasDecorator: boolean; + text: string; + dependencies?: Set; + originalIndex?: number; +} +export declare const DEFAULT_CLASS_ORDER: MemberType[]; +export declare class ClassMemberSortingRule extends BaseFormattingRule { + readonly name = "ClassMemberSortingRule"; + private getMemberType; + private analyzeClassMember; + private createSourceFile; + private compareMembers; + private sortClassMembers; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/ast/FileDeclarationSortingRule.d.ts b/dist/core/formatters/rules/ast/FileDeclarationSortingRule.d.ts new file mode 100644 index 0000000..2b49f0f --- /dev/null +++ b/dist/core/formatters/rules/ast/FileDeclarationSortingRule.d.ts @@ -0,0 +1,33 @@ +import * as ts from "typescript"; +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare enum DeclarationType { + Interface = "interface", + TypeAlias = "type_alias", + Enum = "enum", + HelperFunction = "helper_function", + HelperVariable = "helper_variable", + ExportedFunction = "exported_function", + ExportedVariable = "exported_variable", + ExportedClass = "exported_class", + DefaultExport = "default_export", + Other = "other" +} +export interface FileDeclaration { + node: ts.Statement; + type: DeclarationType; + name: string; + isExported: boolean; + isDefaultExport: boolean; + text: string; + dependencies?: Set; + originalIndex?: number; +} +export declare const DEFAULT_FILE_ORDER: DeclarationType[]; +export declare class FileDeclarationSortingRule extends BaseFormattingRule { + readonly name = "FileDeclarationSortingRule"; + private getDeclarationType; + private analyzeDeclaration; + private createSourceFile; + private sortFileDeclarations; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/ast/index.d.ts b/dist/core/formatters/rules/ast/index.d.ts new file mode 100644 index 0000000..c2f9d83 --- /dev/null +++ b/dist/core/formatters/rules/ast/index.d.ts @@ -0,0 +1,2 @@ +export * from "./ClassMemberSortingRule"; +export * from "./FileDeclarationSortingRule"; diff --git a/dist/core/formatters/rules/imports/ImportOrganizationRule.d.ts b/dist/core/formatters/rules/imports/ImportOrganizationRule.d.ts new file mode 100644 index 0000000..e24297a --- /dev/null +++ b/dist/core/formatters/rules/imports/ImportOrganizationRule.d.ts @@ -0,0 +1,15 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class ImportOrganizationRule extends BaseFormattingRule { + readonly name = "ImportOrganizationRule"; + private createSourceFile; + private determineImportGroup; + private extractImports; + private getImportedIdentifiers; + private isIdentifierUsed; + private isImportUsed; + private filterUnusedImports; + private sortImports; + private groupImports; + private reconstructSource; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/imports/index.d.ts b/dist/core/formatters/rules/imports/index.d.ts new file mode 100644 index 0000000..a66710e --- /dev/null +++ b/dist/core/formatters/rules/imports/index.d.ts @@ -0,0 +1 @@ +export * from "./ImportOrganizationRule"; diff --git a/dist/core/formatters/rules/index-generation/IndexGenerationRule.d.ts b/dist/core/formatters/rules/index-generation/IndexGenerationRule.d.ts new file mode 100644 index 0000000..90e2208 --- /dev/null +++ b/dist/core/formatters/rules/index-generation/IndexGenerationRule.d.ts @@ -0,0 +1,26 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export interface IndexGenerationOptions { + fileExtension: string; + indexFileName: string; + recursive: boolean; +} +export interface IndexGenerationConfig { + enabled?: boolean; + directories?: string[]; + options?: Partial; + updateMainIndex?: boolean; +} +export declare class IndexGenerationRule extends BaseFormattingRule { + private readonly defaultOptions; + readonly name = "IndexGenerationRule"; + private findProjectRoot; + private isTestDirectory; + private isTestFile; + private generateSingleDirectoryIndex; + private generateIndexExportRecursive; + private generateIndexExport; + private discoverExportableModules; + private updateMainIndex; + private generateIndexFiles; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/index-generation/index.d.ts b/dist/core/formatters/rules/index-generation/index.d.ts new file mode 100644 index 0000000..8ee1fb6 --- /dev/null +++ b/dist/core/formatters/rules/index-generation/index.d.ts @@ -0,0 +1 @@ +export * from "./IndexGenerationRule"; diff --git a/dist/core/formatters/rules/index.d.ts b/dist/core/formatters/rules/index.d.ts new file mode 100644 index 0000000..10823e2 --- /dev/null +++ b/dist/core/formatters/rules/index.d.ts @@ -0,0 +1,5 @@ +export * from "./ast"; +export * from "./imports"; +export * from "./index-generation"; +export * from "./spacing"; +export * from "./style"; diff --git a/dist/core/formatters/rules/spacing/BlankLineBeforeReturnsRule.d.ts b/dist/core/formatters/rules/spacing/BlankLineBeforeReturnsRule.d.ts new file mode 100644 index 0000000..b28e3b7 --- /dev/null +++ b/dist/core/formatters/rules/spacing/BlankLineBeforeReturnsRule.d.ts @@ -0,0 +1,5 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class BlankLineBeforeReturnsRule extends BaseFormattingRule { + readonly name = "BlankLineBeforeReturnsRule"; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/spacing/BlankLineBetweenDeclarationsRule.d.ts b/dist/core/formatters/rules/spacing/BlankLineBetweenDeclarationsRule.d.ts new file mode 100644 index 0000000..c06de95 --- /dev/null +++ b/dist/core/formatters/rules/spacing/BlankLineBetweenDeclarationsRule.d.ts @@ -0,0 +1,6 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class BlankLineBetweenDeclarationsRule extends BaseFormattingRule { + readonly name = "BlankLineBetweenDeclarationsRule"; + private getDeclarationKeyword; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/spacing/BlankLineBetweenStatementTypesRule.d.ts b/dist/core/formatters/rules/spacing/BlankLineBetweenStatementTypesRule.d.ts new file mode 100644 index 0000000..349aecb --- /dev/null +++ b/dist/core/formatters/rules/spacing/BlankLineBetweenStatementTypesRule.d.ts @@ -0,0 +1,6 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class BlankLineBetweenStatementTypesRule extends BaseFormattingRule { + readonly name = "BlankLineBetweenStatementTypesRule"; + private getStatementType; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/spacing/BlockSpacingRule.d.ts b/dist/core/formatters/rules/spacing/BlockSpacingRule.d.ts new file mode 100644 index 0000000..ce00130 --- /dev/null +++ b/dist/core/formatters/rules/spacing/BlockSpacingRule.d.ts @@ -0,0 +1,5 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class BlockSpacingRule extends BaseFormattingRule { + readonly name = "BlockSpacingRule"; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/spacing/BracketSpacingRule.d.ts b/dist/core/formatters/rules/spacing/BracketSpacingRule.d.ts new file mode 100644 index 0000000..7674d43 --- /dev/null +++ b/dist/core/formatters/rules/spacing/BracketSpacingRule.d.ts @@ -0,0 +1,5 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class BracketSpacingRule extends BaseFormattingRule { + readonly name = "BracketSpacingRule"; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/spacing/index.d.ts b/dist/core/formatters/rules/spacing/index.d.ts new file mode 100644 index 0000000..29df7b6 --- /dev/null +++ b/dist/core/formatters/rules/spacing/index.d.ts @@ -0,0 +1,5 @@ +export * from "./BlankLineBeforeReturnsRule"; +export * from "./BlankLineBetweenDeclarationsRule"; +export * from "./BlankLineBetweenStatementTypesRule"; +export * from "./BlockSpacingRule"; +export * from "./BracketSpacingRule"; diff --git a/dist/core/formatters/rules/style/DocBlockCommentRule.d.ts b/dist/core/formatters/rules/style/DocBlockCommentRule.d.ts new file mode 100644 index 0000000..e51864e --- /dev/null +++ b/dist/core/formatters/rules/style/DocBlockCommentRule.d.ts @@ -0,0 +1,5 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class DocBlockCommentRule extends BaseFormattingRule { + readonly name = "DocBlockCommentRule"; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/style/IndentationRule.d.ts b/dist/core/formatters/rules/style/IndentationRule.d.ts new file mode 100644 index 0000000..a9e275b --- /dev/null +++ b/dist/core/formatters/rules/style/IndentationRule.d.ts @@ -0,0 +1,5 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class IndentationRule extends BaseFormattingRule { + readonly name = "IndentationRule"; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/style/QuoteStyleRule.d.ts b/dist/core/formatters/rules/style/QuoteStyleRule.d.ts new file mode 100644 index 0000000..774e0ac --- /dev/null +++ b/dist/core/formatters/rules/style/QuoteStyleRule.d.ts @@ -0,0 +1,5 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class QuoteStyleRule extends BaseFormattingRule { + readonly name = "QuoteStyleRule"; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/style/SemicolonRule.d.ts b/dist/core/formatters/rules/style/SemicolonRule.d.ts new file mode 100644 index 0000000..7b9c158 --- /dev/null +++ b/dist/core/formatters/rules/style/SemicolonRule.d.ts @@ -0,0 +1,5 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class SemicolonRule extends BaseFormattingRule { + readonly name = "SemicolonRule"; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/style/StructuralIndentationRule.d.ts b/dist/core/formatters/rules/style/StructuralIndentationRule.d.ts new file mode 100644 index 0000000..ecb90f4 --- /dev/null +++ b/dist/core/formatters/rules/style/StructuralIndentationRule.d.ts @@ -0,0 +1,11 @@ +import { BaseFormattingRule } from "../../BaseFormattingRule"; +export declare class StructuralIndentationRule extends BaseFormattingRule { + readonly name = "StructuralIndentationRule"; + private skipString; + private isRegexStart; + private skipRegex; + private getLineIndentLevel; + private startsWithClosingBracket; + private findBracketFixes; + apply(source: string, filePath?: string): string; +} diff --git a/dist/core/formatters/rules/style/index.d.ts b/dist/core/formatters/rules/style/index.d.ts new file mode 100644 index 0000000..d792c20 --- /dev/null +++ b/dist/core/formatters/rules/style/index.d.ts @@ -0,0 +1,5 @@ +export * from "./DocBlockCommentRule"; +export * from "./IndentationRule"; +export * from "./QuoteStyleRule"; +export * from "./SemicolonRule"; +export * from "./StructuralIndentationRule"; diff --git a/dist/core/index.d.ts b/dist/core/index.d.ts new file mode 100644 index 0000000..059d615 --- /dev/null +++ b/dist/core/index.d.ts @@ -0,0 +1,5 @@ +export * from "./ast"; +export * from "./config"; +export * from "./di"; +export * from "./formatters"; +export * from "./pipeline"; diff --git a/dist/core/pipeline/FormatterPipeline.d.ts b/dist/core/pipeline/FormatterPipeline.d.ts new file mode 100644 index 0000000..2a6e119 --- /dev/null +++ b/dist/core/pipeline/FormatterPipeline.d.ts @@ -0,0 +1,42 @@ +import { CoreConfig, FormatterOrder } from "../config"; +import { Container } from "../di"; +import { IFormattingRule } from "../formatters"; +export interface FormatterExecution { + formatterName: string; + order: FormatterOrder; + changed: boolean; + error?: Error; +} +export interface PipelineContext { + filePath: string; + originalSource: string; + currentSource: string; + executions: FormatterExecution[]; + changed: boolean; + dryRun: boolean; +} +export declare class FormatterError extends Error { + readonly formatterName: string; + readonly filePath: string; + readonly originalError: Error; + constructor(formatterName: string, filePath: string, originalError: Error); +} +export declare class FormatterPipeline { + private readonly config; + private readonly container; + private formatterOrder; + private rules; + constructor(config: CoreConfig, container: Container); + private extractTypeNameFromStack; + private addRule; + private addRuleByName; + private getFilesRecursively; + private shouldIgnoreFile; + formatFile(filePath: string, dryRun?: boolean): Promise; + formatFiles(filePaths: string[], dryRun?: boolean): Promise; + formatDirectory(dirPath: string, dryRun?: boolean, extensions?: string[]): Promise; + getFormatterOrder(): FormatterOrder[]; + getRulesAtOrder(order: FormatterOrder): IFormattingRule[]; + hasRules(): boolean; + private initializeRules; +} diff --git a/dist/core/pipeline/index.d.ts b/dist/core/pipeline/index.d.ts new file mode 100644 index 0000000..2ff53f2 --- /dev/null +++ b/dist/core/pipeline/index.d.ts @@ -0,0 +1 @@ +export * from "./FormatterPipeline"; diff --git a/dist/formatters/index.d.ts b/dist/formatters/index.d.ts new file mode 100644 index 0000000..f9ee5df --- /dev/null +++ b/dist/formatters/index.d.ts @@ -0,0 +1 @@ +export * from "./package"; diff --git a/dist/formatters/package.d.ts b/dist/formatters/package.d.ts new file mode 100644 index 0000000..886b16c --- /dev/null +++ b/dist/formatters/package.d.ts @@ -0,0 +1 @@ +export declare function sortExportsKeys(exports: Record): Record; diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..6a56434 --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,5 @@ +export * from "./build-plugins"; +export * from "./core"; +export * from "./formatters"; +export * from "./shared"; +export { tsfmt } from "./tsfmt"; diff --git a/dist/index.js b/dist/index.js index 4970b8c..4c8b4b7 100644 --- a/dist/index.js +++ b/dist/index.js @@ -29,6 +29,7 @@ const StructuralIndentationRule = require("./core/formatters/rules/style/Structu const FormatterPipeline = require("./core/pipeline/FormatterPipeline.js"); const _package = require("./formatters/package.js"); const types = require("./shared/types.js"); +const tsfmt = require("./tsfmt.js"); exports.transformGenericsPlugin = transformGenericsPlugin.transformGenericsPlugin; exports.ASTAnalyzer = ASTAnalyzer.ASTAnalyzer; exports.ASTTransformer = ASTTransformer.ASTTransformer; @@ -64,3 +65,4 @@ exports.FormatterError = FormatterPipeline.FormatterError; exports.FormatterPipeline = FormatterPipeline.FormatterPipeline; exports.sortExportsKeys = _package.sortExportsKeys; exports.DefaultSortOptions = types.DefaultSortOptions; +exports.tsfmt = tsfmt.tsfmt; diff --git a/dist/shared/index.d.ts b/dist/shared/index.d.ts new file mode 100644 index 0000000..eea524d --- /dev/null +++ b/dist/shared/index.d.ts @@ -0,0 +1 @@ +export * from "./types"; diff --git a/dist/shared/types.d.ts b/dist/shared/types.d.ts new file mode 100644 index 0000000..6bb051b --- /dev/null +++ b/dist/shared/types.d.ts @@ -0,0 +1,7 @@ +export interface SortOptions { + customSortOrder?: string[]; + indentation?: number; + filePath?: string; + dryRun?: boolean; +} +export declare const DefaultSortOptions: SortOptions; diff --git a/dist/sortPackage.d.ts b/dist/sortPackage.d.ts new file mode 100644 index 0000000..caf3cd0 --- /dev/null +++ b/dist/sortPackage.d.ts @@ -0,0 +1,3 @@ +import { SortOptions } from "./shared"; +export declare function sortPackageJson(packageObj: Record, options?: SortOptions): Record; +export declare function sortPackageFile(filePath?: string, options?: SortOptions): Record; diff --git a/dist/sortTSConfig.d.ts b/dist/sortTSConfig.d.ts new file mode 100644 index 0000000..9a438ed --- /dev/null +++ b/dist/sortTSConfig.d.ts @@ -0,0 +1,3 @@ +import { SortOptions } from "./shared/types"; +export declare function sortTsConfig(tsConfig: Record): Record; +export declare function sortTsConfigFile(filePath?: string, options?: SortOptions): Record; diff --git a/dist/tsfmt.d.ts b/dist/tsfmt.d.ts new file mode 100644 index 0000000..cb1cdbb --- /dev/null +++ b/dist/tsfmt.d.ts @@ -0,0 +1,2 @@ +import { CoreConfig } from "./core/config"; +export declare function tsfmt(config?: Partial): CoreConfig; diff --git a/dist/tsfmt.js b/dist/tsfmt.js new file mode 100644 index 0000000..1b09d64 --- /dev/null +++ b/dist/tsfmt.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); +require("./core/config/ConfigDefaults.js"); +require("./core/config/ConfigLoader.js"); +const ConfigMerger = require("./core/config/ConfigMerger.js"); +function tsfmt(config = {}) { + return ConfigMerger.ConfigMerger.merge(config); +} +exports.tsfmt = tsfmt; diff --git a/package-lock.json b/package-lock.json index 7302d8d..86d9a2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,9 +30,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": { @@ -45,9 +45,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": { @@ -55,21 +55,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", @@ -86,14 +86,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" @@ -216,13 +216,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" @@ -486,18 +486,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": { @@ -505,9 +505,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": { @@ -526,21 +526,21 @@ "license": "MIT" }, "node_modules/@emnapi/core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", - "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.0.tgz", + "integrity": "sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.1.0", + "@emnapi/wasi-threads": "1.2.0", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", - "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.0.tgz", + "integrity": "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==", "dev": true, "license": "MIT", "optional": true, @@ -549,9 +549,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", + "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", "dev": true, "license": "MIT", "optional": true, @@ -560,9 +560,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", "cpu": [ "ppc64" ], @@ -577,9 +577,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", "cpu": [ "arm" ], @@ -594,9 +594,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", "cpu": [ "arm64" ], @@ -611,9 +611,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", "cpu": [ "x64" ], @@ -628,9 +628,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", "cpu": [ "arm64" ], @@ -645,9 +645,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", "cpu": [ "x64" ], @@ -662,9 +662,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", "cpu": [ "arm64" ], @@ -679,9 +679,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", "cpu": [ "x64" ], @@ -696,9 +696,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", "cpu": [ "arm" ], @@ -713,9 +713,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", "cpu": [ "arm64" ], @@ -730,9 +730,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", "cpu": [ "ia32" ], @@ -747,9 +747,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", "cpu": [ "loong64" ], @@ -764,9 +764,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", "cpu": [ "mips64el" ], @@ -781,9 +781,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", "cpu": [ "ppc64" ], @@ -798,9 +798,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", "cpu": [ "riscv64" ], @@ -815,9 +815,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", "cpu": [ "s390x" ], @@ -832,9 +832,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", "cpu": [ "x64" ], @@ -849,9 +849,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", "cpu": [ "arm64" ], @@ -866,9 +866,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", "cpu": [ "x64" ], @@ -883,9 +883,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", "cpu": [ "arm64" ], @@ -900,9 +900,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", "cpu": [ "x64" ], @@ -917,9 +917,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", "cpu": [ "arm64" ], @@ -934,9 +934,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", "cpu": [ "x64" ], @@ -951,9 +951,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", "cpu": [ "arm64" ], @@ -968,9 +968,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", "cpu": [ "ia32" ], @@ -985,9 +985,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", "cpu": [ "x64" ], @@ -1350,6 +1350,23 @@ } } }, + "node_modules/@jest/reporters/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@jest/reporters/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -1683,9 +1700,9 @@ "license": "ISC" }, "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", + "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", "license": "MIT", "dependencies": { "@pnpm/config.env-replace": "^1.1.0", @@ -2047,9 +2064,9 @@ ] }, "node_modules/@sinclair/typebox": { - "version": "0.34.47", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.47.tgz", - "integrity": "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==", + "version": "0.34.48", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", + "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", "dev": true, "license": "MIT" }, @@ -2187,9 +2204,9 @@ } }, "node_modules/@types/node": { - "version": "25.4.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.4.0.tgz", - "integrity": "sha512-9wLpoeWuBlcbBpOY3XmzSTG3oscB6xjBEEtn+pYXTfhyXhIxC5FsBer2KTopBlvKEiW9l13po9fq+SJY/5lkhw==", + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", + "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", "dev": true, "license": "MIT", "dependencies": { @@ -2580,6 +2597,19 @@ "node": ">= 8" } }, + "node_modules/anymatch/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/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -2614,9 +2644,9 @@ } }, "node_modules/atomically": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz", - "integrity": "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", "license": "MIT", "dependencies": { "stubborn-fs": "^2.0.0", @@ -2723,20 +2753,25 @@ } }, "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } }, "node_modules/baseline-browser-mapping": { - "version": "2.9.14", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", - "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", + "version": "2.10.8", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz", + "integrity": "sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==", "dev": true, "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/boxen": { @@ -2798,13 +2833,15 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/braces": { @@ -2904,9 +2941,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001764", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", - "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", + "version": "1.0.30001779", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001779.tgz", + "integrity": "sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA==", "dev": true, "funding": [ { @@ -2952,9 +2989,9 @@ } }, "node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, "funding": [ { @@ -3263,9 +3300,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "version": "1.5.313", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.313.tgz", + "integrity": "sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==", "dev": true, "license": "ISC" }, @@ -3299,9 +3336,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3312,32 +3349,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" } }, "node_modules/escalade": { @@ -3480,6 +3517,23 @@ "bser": "2.1.1" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3537,9 +3591,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -3593,9 +3647,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", "license": "MIT", "engines": { "node": ">=18" @@ -3628,9 +3682,9 @@ } }, "node_modules/git-hooks-list": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", - "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", "license": "MIT", "funding": { "url": "https://github.com/fisker/git-hooks-list?sponsor=1" @@ -3681,9 +3735,9 @@ } }, "node_modules/globby": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.0.tgz", - "integrity": "sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.1.tgz", + "integrity": "sha512-dW7vl+yiAJSp6aCekaVnVJxurRv7DCOLyXqEG3RYMYUg7AuJ2jCqPkZTA8ooqC2vtnkaMcV5WfFBMuEnTu1OQg==", "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", @@ -4017,9 +4071,9 @@ } }, "node_modules/istanbul-lib-instrument/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": { @@ -4247,6 +4301,23 @@ } } }, + "node_modules/jest-config/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/jest-config/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -4399,19 +4470,6 @@ "fsevents": "^2.3.3" } }, - "node_modules/jest-haste-map/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-leak-detector": { "version": "30.3.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.3.0.tgz", @@ -4463,19 +4521,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-message-util/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-mock": { "version": "30.3.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz", @@ -4621,6 +4666,23 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, + "node_modules/jest-runtime/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/jest-runtime/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -4747,19 +4809,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-validate": { "version": "30.3.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz", @@ -4949,9 +4998,9 @@ } }, "node_modules/ky": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.2.tgz", - "integrity": "sha512-q3RBbsO5A5zrPhB6CaCS8ZUv+NWCXv6JJT4Em0i264G9W0fdPB8YRfnnEi7Dm7X7omAkBIPojzYJ2D1oHTHqug==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.3.tgz", + "integrity": "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw==", "license": "MIT", "engines": { "node": ">=18" @@ -5069,9 +5118,9 @@ } }, "node_modules/meow": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-14.0.0.tgz", - "integrity": "sha512-JhC3R1f6dbspVtmF3vKjAWz1EVIvwFrGGPLSdU6rK79xBwHWTuHoLnRX/t1/zHS1Ch1Y2UtIrih7DAHuH9JFJA==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-14.1.0.tgz", + "integrity": "sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==", "license": "MIT", "engines": { "node": ">=20" @@ -5109,6 +5158,18 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -5134,27 +5195,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimatch/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/minimatch/node_modules/brace-expansion": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -5237,9 +5277,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", "dev": true, "license": "MIT" }, @@ -5412,9 +5452,9 @@ "license": "BlueOak-1.0.0" }, "node_modules/package-json/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==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -5489,9 +5529,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" @@ -5505,12 +5545,12 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -5561,9 +5601,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "dev": true, "funding": [ { @@ -5719,12 +5759,12 @@ "license": "Apache-2.0" }, "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", "license": "MIT", "dependencies": { - "@pnpm/npm-conf": "^2.1.0" + "@pnpm/npm-conf": "^3.0.2" }, "engines": { "node": ">=14" @@ -5952,9 +5992,9 @@ } }, "node_modules/sort-package-json/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==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6081,12 +6121,12 @@ } }, "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -6213,6 +6253,13 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -6228,7 +6275,7 @@ "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", + "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": { @@ -6275,35 +6322,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -6377,9 +6395,9 @@ } }, "node_modules/ts-jest/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": { @@ -6591,9 +6609,9 @@ } }, "node_modules/update-notifier/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==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6692,37 +6710,6 @@ } } }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -6860,12 +6847,12 @@ } }, "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" diff --git a/package.json b/package.json index 6c07105..81814d9 100644 --- a/package.json +++ b/package.json @@ -25,12 +25,19 @@ "vite": "^7.0.0" }, "scripts": { - "build": "vite build", + "build": "vite build && tsc --emitDeclarationOnly --declarationDir dist", "dev": "tsx src/cli.ts", "format": "node dist/cli.js", "test": "jest" }, - "main": "dist/cli.js", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.js" + } + }, "files": [ "dist", "README.md" diff --git a/src/index.ts b/src/index.ts index 6aa48a8..9a1dba3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,3 +5,4 @@ export * from "./build-plugins"; export * from "./core"; export * from "./formatters"; export * from "./shared"; +export {tsfmt} from "./tsfmt"; diff --git a/src/sortPackage.ts b/src/sortPackage.ts index 6346716..11c88e7 100644 --- a/src/sortPackage.ts +++ b/src/sortPackage.ts @@ -6,8 +6,8 @@ import fs from "fs"; import path from "path"; import { sortPackageJson as baseSortPackageJson } from "sort-package-json"; -import { sortExportsKeys } from "./formatters/package"; -import { DefaultSortOptions, SortOptions } from "./shared/types"; +import { sortExportsKeys } from "./formatters"; +import { DefaultSortOptions, SortOptions } from "./shared"; export function sortPackageJson(packageObj: Record, options: SortOptions = {}): Record { diff --git a/src/tsfmt.ts b/src/tsfmt.ts new file mode 100644 index 0000000..ee9906c --- /dev/null +++ b/src/tsfmt.ts @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2026. Encore Digital Group. +* All Rights Reserved. +*/ + +import { ConfigMerger, CoreConfig } from "./core/config"; + + +/** +* Config helper for use in tsfmt.config.ts. +* Merges the provided config with defaults and provides full type safety. +* +* @example +* ```ts +* // tsfmt.config.ts +* import { tsfmt } from "tsfmt"; +* +* export default tsfmt({ +* codeStyle: { quoteStyle: "single" }, +* spacing: { enabled: true }, +* }); +* ``` +*/ +export function tsfmt(config: Partial = {}): CoreConfig { + return ConfigMerger.merge(config); +} \ No newline at end of file From 8fb25ed5a7195d01beccc6f0c090fb58dbe9be3c Mon Sep 17 00:00:00 2001 From: EncoreBot Date: Sun, 15 Mar 2026 13:17:47 +0000 Subject: [PATCH 2/2] Apply Formatting and Build --- package.json | 2 +- src/index.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 81814d9..1ce4f0b 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ "format": "node dist/cli.js", "test": "jest" }, - "main": "dist/index.js", "types": "dist/index.d.ts", + "main": "dist/index.js", "exports": { ".": { "types": "./dist/index.d.ts", diff --git a/src/index.ts b/src/index.ts index 9a1dba3..6aa48a8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,4 +5,3 @@ export * from "./build-plugins"; export * from "./core"; export * from "./formatters"; export * from "./shared"; -export {tsfmt} from "./tsfmt";