onreza-release 1.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/types.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  /**
2
- * Конфигурация для gitverse-release
2
+ * Поддерживаемые Git платформы
3
+ */
4
+ export type GitPlatform = "gitverse" | "github" | "gitlab";
5
+ /**
6
+ * Конфигурация для onreza-release
3
7
  */
4
8
  export interface ReleaseConfig {
5
9
  /**
@@ -19,9 +23,9 @@ export interface ReleaseConfig {
19
23
  */
20
24
  versioning?: VersioningConfig;
21
25
  /**
22
- * Настройки GitVerse Release
26
+ * Настройки создания Release (GitVerse, GitHub, GitLab)
23
27
  */
24
- gitverse?: GitVerseConfig;
28
+ release?: ReleaseProviderConfig;
25
29
  /**
26
30
  * Настройки retry механизма
27
31
  */
@@ -224,6 +228,14 @@ export interface GitRepoInfo {
224
228
  * Текущая ветка
225
229
  */
226
230
  branch: string;
231
+ /**
232
+ * Git платформа (gitverse, github, gitlab)
233
+ */
234
+ platform?: GitPlatform;
235
+ /**
236
+ * Хост платформы (например: github.com, gitverse.ru)
237
+ */
238
+ host?: string;
227
239
  }
228
240
  /**
229
241
  * Conventional Commit
@@ -374,22 +386,37 @@ export interface ReleaseResult {
374
386
  warnings: string[];
375
387
  }
376
388
  /**
377
- * Конфигурация GitVerse Release
389
+ * Конфигурация Release Provider (GitVerse, GitHub, GitLab)
378
390
  */
379
- export interface GitVerseConfig {
391
+ export interface ReleaseProviderConfig {
380
392
  /**
381
- * Включить создание релиза через GitVerse API
382
- * Требует переменную окружения GVR_TOKEN
393
+ * Включить создание релиза через API платформы
394
+ * Требует соответствующий токен:
395
+ * - GitVerse: GVR_TOKEN
396
+ * - GitHub: GITHUB_TOKEN или GH_TOKEN
397
+ * - GitLab: GITLAB_TOKEN или GL_TOKEN
398
+ * @default true
383
399
  */
384
400
  enabled: boolean;
401
+ /**
402
+ * Платформа для создания релиза
403
+ * - "auto": автоопределение по git remote или CI окружению
404
+ * - "gitverse": GitVerse
405
+ * - "github": GitHub
406
+ * - "gitlab": GitLab
407
+ * @default "auto"
408
+ */
409
+ platform: GitPlatform | "auto";
385
410
  /**
386
411
  * Прерывать процесс релиза при ошибке создания release (после retry)
387
412
  * Если false, ошибки логируются как warnings
413
+ * @default true
388
414
  */
389
415
  failOnError: boolean;
390
416
  /**
391
417
  * Проверять существование релиза перед созданием (идемпотентность)
392
418
  * Позволяет безопасно перезапускать pipeline
419
+ * @default true
393
420
  */
394
421
  checkExisting: boolean;
395
422
  }
@@ -508,7 +535,7 @@ export interface CommitlintGeneratorConfig {
508
535
  export interface GenerateCommitlintOptions {
509
536
  /**
510
537
  * Путь к release конфигу
511
- * @default ".gitversereleaserc.json"
538
+ * @default ".onrezarelease.json"
512
539
  */
513
540
  configPath?: string;
514
541
  /**
@@ -596,31 +623,79 @@ export type BinaryPlatform = "linux-x64" | "linux-arm64" | "darwin-x64" | "darwi
596
623
  */
597
624
  export type BinaryInputFormat = "directory" | "tar.gz";
598
625
  /**
599
- * Допустимые значения для поля os в package.json
626
+ * Расширение исполняемого файла
600
627
  */
601
- export type NpmOS = "linux" | "darwin" | "win32" | "freebsd" | "openbsd" | "sunos" | "aix";
628
+ export type BinaryExtension = "" | ".exe";
602
629
  /**
603
- * Допустимые значения для поля cpu в package.json
630
+ * Маппинг платформы на os/arch значения
604
631
  */
605
- export type NpmCPU = "x64" | "arm64" | "ia32" | "arm" | "mips" | "ppc64";
632
+ export interface PlatformMapping {
633
+ /** Значение для os (linux, darwin, win32) */
634
+ os: string;
635
+ /** Значение для arch (x64, arm64) */
636
+ arch: string;
637
+ /** Расширение исполняемого файла */
638
+ extension: BinaryExtension;
639
+ }
606
640
  /**
607
- * Расширение исполняемого файла
641
+ * Результат загрузки asset в GitVerse Release
608
642
  */
609
- export type BinaryExtension = "" | ".exe";
643
+ export interface BinaryAssetUploadResult {
644
+ /** Платформа */
645
+ platform: BinaryPlatform;
646
+ /** Имя загруженного asset */
647
+ assetName: string;
648
+ /** URL для скачивания */
649
+ downloadUrl: string;
650
+ /** Успешно ли загружен */
651
+ success: boolean;
652
+ /** Сообщение об ошибке */
653
+ error?: string;
654
+ }
610
655
  /**
611
- * npm scope в формате @org
656
+ * Провайдер дистрибуции бинарников (абстракция)
612
657
  */
613
- export type NpmScope = `@${string}`;
658
+ export interface BinaryDistributionProvider {
659
+ /** Загружает файл и возвращает URL для скачивания */
660
+ uploadAsset(filePath: string, assetName: string): Promise<{
661
+ downloadUrl: string;
662
+ }>;
663
+ }
614
664
  /**
615
- * Маппинг платформы на os/cpu значения для package.json
665
+ * Манифест с URL-ами для скачивания бинарников
616
666
  */
617
- export interface PlatformMapping {
618
- /** Значение для поля os в package.json */
619
- os: NpmOS;
620
- /** Значение для поля cpu в package.json */
621
- cpu: NpmCPU;
622
- /** Расширение исполняемого файла */
623
- extension: BinaryExtension;
667
+ export interface BinaryManifest {
668
+ /** Версия */
669
+ version: string;
670
+ /** Имя бинарника */
671
+ binName: string;
672
+ /** Маппинг платформ на URL-ы для скачивания */
673
+ assets: Record<BinaryPlatform, string>;
674
+ }
675
+ /**
676
+ * Настройки npm пакета для бинарной дистрибуции
677
+ */
678
+ export interface BinariesNpmConfig {
679
+ /**
680
+ * Генерировать postinstall скрипт и bin wrapper
681
+ * @default true
682
+ */
683
+ generateScripts: boolean;
684
+ /**
685
+ * Директория для postinstall скрипта
686
+ * @default "scripts"
687
+ */
688
+ scriptsDir: string;
689
+ /**
690
+ * Директория для bin wrapper
691
+ * @default "bin"
692
+ */
693
+ binDir: string;
694
+ /**
695
+ * Обновлять package.json с правильными bin и scripts.postinstall
696
+ * @default true
697
+ */
698
+ updatePackageJson: boolean;
624
699
  }
625
700
  /**
626
701
  * Конфигурация бинарной дистрибуции
@@ -632,25 +707,7 @@ export interface BinariesConfig {
632
707
  */
633
708
  enabled: boolean;
634
709
  /**
635
- * npm scope (например: @rainypixel)
636
- * Опционален — если не указан, пакеты публикуются без scope
637
- */
638
- scope?: string;
639
- /**
640
- * Шаблон имени пакета
641
- * Плейсхолдеры: {{scope}}, {{name}}, {{platform}}
642
- *
643
- * @default "{{name}}-{{platform}}" (без scope)
644
- * @default "@{{scope}}/{{name}}-{{platform}}" (со scope)
645
- *
646
- * @example
647
- * "{{name}}-{{platform}}" → "myapp-linux-x64"
648
- * "@{{scope}}/{{name}}-{{platform}}" → "@org/myapp-linux-x64"
649
- * "{{name}}-bin-{{platform}}" → "myapp-bin-linux-x64"
650
- */
651
- packageNameTemplate?: string;
652
- /**
653
- * Базовое имя пакетов (например: yougile)
710
+ * Базовое имя бинарника (например: yougile)
654
711
  */
655
712
  name: string;
656
713
  /**
@@ -663,60 +720,32 @@ export interface BinariesConfig {
663
720
  * @default "./dist"
664
721
  */
665
722
  distDir: string;
666
- /**
667
- * Директория для генерации пакетов
668
- * @default "./npm"
669
- */
670
- outDir: string;
671
723
  /**
672
724
  * Список платформ для публикации
673
725
  * @default ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64"]
674
726
  */
675
727
  platforms: BinaryPlatform[];
676
- /**
677
- * Команда для публикации пакетов
678
- * Поддерживает плейсхолдеры: {{packageDir}}, {{version}}, {{platform}}
679
- * @default "npm publish --access public"
680
- */
681
- publishCommand: string;
682
- /**
683
- * Путь к основному package.json для обновления optionalDependencies
684
- * @default "./package.json"
685
- */
686
- mainPackage: string;
687
- /**
688
- * Продолжать при ошибке публикации отдельной платформы
689
- * @default false
690
- */
691
- continueOnError: boolean;
692
- /**
693
- * Количество попыток retry при ошибке публикации
694
- * @default 3
695
- */
696
- retryAttempts: number;
697
728
  /**
698
729
  * Формат входных данных для бинарников
699
730
  * - "directory": бинарники в директориях (dist/name-platform/name)
700
731
  * - "tar.gz": бинарники в tar.gz архивах (dist/name-platform.tar.gz)
701
- * @default "directory"
732
+ * @default "tar.gz"
702
733
  */
703
734
  inputFormat?: BinaryInputFormat;
704
735
  /**
705
736
  * Шаблон имени архива.
706
737
  * Плейсхолдеры: {{name}}, {{platform}}
707
- * Используется только при inputFormat: "tar.gz"
708
738
  * @default "{{name}}-{{platform}}.tar.gz"
709
739
  */
710
740
  archiveNameTemplate?: string;
711
741
  /**
712
742
  * Имя бинарника внутри архива (если отличается от name)
713
- * Используется только при inputFormat: "tar.gz"
714
743
  */
715
744
  sourceBinName?: string;
716
745
  /**
717
- * Маппинг имён файлов/директорий источника на npm платформы
746
+ * Маппинг имён файлов/директорий источника на платформы
718
747
  * Ключ - идентификатор в имени файла (например: "linux-x64")
719
- * Значение - npm платформа (например: "linux-x64")
748
+ * Значение - платформа (например: "linux-x64")
720
749
  *
721
750
  * @example
722
751
  * {
@@ -726,61 +755,46 @@ export interface BinariesConfig {
726
755
  * }
727
756
  */
728
757
  platformMap?: Record<string, BinaryPlatform>;
758
+ /**
759
+ * Количество попыток retry при ошибке загрузки
760
+ * @default 3
761
+ */
762
+ retryAttempts: number;
763
+ /**
764
+ * Продолжать при ошибке загрузки отдельной платформы
765
+ * @default false
766
+ */
767
+ continueOnError: boolean;
768
+ /**
769
+ * Настройки генерации npm пакета
770
+ * Генерирует postinstall скрипт который скачивает бинарник с Release
771
+ */
772
+ npm?: BinariesNpmConfig;
729
773
  }
730
774
  /**
731
- * Успешный результат генерации платформенного пакета
732
- */
733
- export interface BinaryPackageSuccess {
734
- /** Платформа */
735
- platform: BinaryPlatform;
736
- /** Путь к сгенерированному пакету */
737
- packageDir: string;
738
- /** Полное имя пакета (например: @rainypixel/yougile-linux-x64) */
739
- packageName: string;
740
- /** Успешно сгенерирован */
741
- success: true;
742
- }
743
- /**
744
- * Неуспешный результат генерации платформенного пакета
745
- */
746
- export interface BinaryPackageFailure {
747
- /** Платформа */
748
- platform: BinaryPlatform;
749
- /** Путь к сгенерированному пакету (может отсутствовать при ошибке) */
750
- packageDir: string;
751
- /** Полное имя пакета */
752
- packageName: string;
753
- /** Не удалось сгенерировать */
754
- success: false;
755
- /** Сообщение об ошибке */
756
- error: string;
757
- }
758
- /**
759
- * Результат генерации платформенного пакета (discriminated union)
760
- */
761
- export type BinaryPackageResult = BinaryPackageSuccess | BinaryPackageFailure;
762
- /**
763
- * Успешный результат публикации платформенного пакета
775
+ * Успешный результат загрузки asset
764
776
  */
765
- export interface BinaryPublishSuccess {
777
+ export interface BinaryUploadSuccess {
766
778
  /** Платформа */
767
779
  platform: BinaryPlatform;
768
- /** Полное имя пакета */
769
- packageName: string;
770
- /** Успешно опубликован */
780
+ /** Имя asset */
781
+ assetName: string;
782
+ /** URL для скачивания */
783
+ downloadUrl: string;
784
+ /** Успешно загружен */
771
785
  success: true;
772
786
  /** Количество попыток */
773
787
  attempts: number;
774
788
  }
775
789
  /**
776
- * Неуспешный результат публикации платформенного пакета
790
+ * Неуспешный результат загрузки asset
777
791
  */
778
- export interface BinaryPublishFailure {
792
+ export interface BinaryUploadFailure {
779
793
  /** Платформа */
780
794
  platform: BinaryPlatform;
781
- /** Полное имя пакета */
782
- packageName: string;
783
- /** Не удалось опубликовать */
795
+ /** Имя asset */
796
+ assetName: string;
797
+ /** Не удалось загрузить */
784
798
  success: false;
785
799
  /** Сообщение об ошибке */
786
800
  error: string;
@@ -788,9 +802,9 @@ export interface BinaryPublishFailure {
788
802
  attempts: number;
789
803
  }
790
804
  /**
791
- * Результат публикации платформенного пакета (discriminated union)
805
+ * Результат загрузки asset (discriminated union)
792
806
  */
793
- export type BinaryPublishResult = BinaryPublishSuccess | BinaryPublishFailure;
807
+ export type BinaryUploadResult = BinaryUploadSuccess | BinaryUploadFailure;
794
808
  /**
795
809
  * Общий результат бинарной дистрибуции
796
810
  */
@@ -799,10 +813,12 @@ export interface BinaryDistributionResult {
799
813
  success: boolean;
800
814
  /** Версия */
801
815
  version: string;
802
- /** Результаты генерации пакетов */
803
- packages: BinaryPackageResult[];
804
- /** Результаты публикации */
805
- published: BinaryPublishResult[];
816
+ /** ID созданного релиза */
817
+ releaseId?: number;
818
+ /** URL релиза */
819
+ releaseUrl?: string;
820
+ /** Результаты загрузки assets */
821
+ uploads: BinaryUploadResult[];
806
822
  /** Ошибки */
807
823
  errors: string[];
808
824
  /** Предупреждения */
@@ -832,7 +848,7 @@ export type BinaryExtractionResult = BinaryExtractionSuccess | BinaryExtractionF
832
848
  */
833
849
  export interface BinaryCliOptions {
834
850
  /**
835
- * Тестовый прогон (не публиковать)
851
+ * Тестовый прогон (не загружать)
836
852
  */
837
853
  dryRun?: boolean;
838
854
  /**
@@ -843,20 +859,40 @@ export interface BinaryCliOptions {
843
859
  * Override версии
844
860
  */
845
861
  version?: string;
846
- /**
847
- * Только генерация пакетов (без публикации)
848
- */
849
- generateOnly?: boolean;
850
- /**
851
- * Не обновлять основной package.json
852
- */
853
- skipMainPackage?: boolean;
854
862
  /**
855
863
  * Конкретные платформы для обработки
856
864
  */
857
865
  platforms?: BinaryPlatform[];
866
+ /**
867
+ * Тег релиза (по умолчанию создаётся новый релиз)
868
+ */
869
+ tag?: string;
858
870
  /**
859
871
  * Подробный вывод
860
872
  */
861
873
  verbose?: boolean;
862
874
  }
875
+ /**
876
+ * Лимиты GitVerse для артефактов релиза
877
+ */
878
+ export interface GitVerseAssetLimits {
879
+ /** Максимальный размер одного файла (100 МБ) */
880
+ maxFileSizeBytes: number;
881
+ /** Максимальное количество файлов за раз */
882
+ maxFilesPerUpload: number;
883
+ /** Максимальный совокупный размер за раз (500 МБ) */
884
+ maxTotalSizeBytes: number;
885
+ /** Допустимые расширения файлов */
886
+ allowedExtensions: string[];
887
+ }
888
+ /**
889
+ * Результат валидации asset
890
+ */
891
+ export interface AssetValidationResult {
892
+ /** Валиден ли файл */
893
+ valid: boolean;
894
+ /** Сообщение об ошибке */
895
+ error?: string;
896
+ /** Размер файла */
897
+ sizeBytes?: number;
898
+ }
@@ -0,0 +1,50 @@
1
+ import type { GitVerseReleaseProvider } from "../providers";
2
+ import type { AssetValidationResult, BinaryDistributionProvider, GitVerseAssetLimits } from "../types";
3
+ /**
4
+ * Лимиты GitVerse для артефактов релиза
5
+ */
6
+ export declare const GITVERSE_ASSET_LIMITS: GitVerseAssetLimits;
7
+ /**
8
+ * Форматирует размер файла в человекочитаемый формат
9
+ */
10
+ export declare function formatFileSize(bytes: number): string;
11
+ /**
12
+ * Валидирует файл для загрузки в GitVerse Release
13
+ *
14
+ * @param filePath - Путь к файлу
15
+ * @returns Результат валидации
16
+ */
17
+ export declare function validateAssetFile(filePath: string): Promise<AssetValidationResult>;
18
+ /**
19
+ * Валидирует набор файлов для загрузки
20
+ *
21
+ * @param filePaths - Массив путей к файлам
22
+ * @returns Результат валидации с совокупным размером
23
+ */
24
+ export declare function validateAssetBatch(filePaths: string[]): Promise<{
25
+ valid: boolean;
26
+ errors: string[];
27
+ totalSize: number;
28
+ }>;
29
+ /**
30
+ * GitVerse провайдер дистрибуции бинарников
31
+ */
32
+ export declare class GitVerseDistributionProvider implements BinaryDistributionProvider {
33
+ private client;
34
+ private releaseId;
35
+ constructor(client: GitVerseReleaseProvider, releaseId: number);
36
+ /**
37
+ * Загружает файл как asset в релиз
38
+ *
39
+ * @param filePath - Путь к файлу
40
+ * @param assetName - Имя asset в релизе
41
+ * @returns URL для скачивания
42
+ */
43
+ uploadAsset(filePath: string, assetName: string): Promise<{
44
+ downloadUrl: string;
45
+ }>;
46
+ /**
47
+ * Возвращает ID релиза
48
+ */
49
+ get id(): number;
50
+ }
@@ -1,6 +1,6 @@
1
1
  import type { BinariesConfig, BinaryPlatform, PlatformMapping } from "../types";
2
2
  /**
3
- * Маппинг платформ на os/cpu значения для package.json
3
+ * Маппинг платформ на os/arch значения
4
4
  */
5
5
  export declare const PLATFORM_MAPPINGS: Record<BinaryPlatform, PlatformMapping>;
6
6
  /**
@@ -35,30 +35,6 @@ export declare function validateBinaryExists(distDir: string, name: string, plat
35
35
  * @returns Массив отсутствующих платформ
36
36
  */
37
37
  export declare function validateAllBinaries(distDir: string, name: string, platforms: BinaryPlatform[]): Promise<BinaryPlatform[]>;
38
- /**
39
- * Возвращает дефолтный шаблон имени пакета
40
- */
41
- export declare function getDefaultPackageNameTemplate(scope?: string): string;
42
- /**
43
- * Генерирует полное имя пакета для платформы.
44
- * Поддерживает кастомный шаблон через packageNameTemplate.
45
- */
46
- export declare function getPackageName(config: BinariesConfig, platform: BinaryPlatform): string;
47
- /**
48
- * Генерирует путь к пакету в output директории.
49
- * Создаёт структуру директорий на основе имени пакета.
50
- */
51
- export declare function getPackageOutputPath(config: BinariesConfig, platform: BinaryPlatform): string;
52
- /**
53
- * Раскрывает плейсхолдеры в строке
54
- */
55
- export declare function expandPlaceholders(template: string, values: {
56
- packageDir?: string;
57
- version?: string;
58
- platform?: string;
59
- scope?: string;
60
- name?: string;
61
- }): string;
62
38
  /**
63
39
  * Конвертирует платформу в Node.js process.platform и process.arch
64
40
  */
@@ -0,0 +1,67 @@
1
+ import type { BinariesNpmConfig, BinaryManifest, BinaryPlatform } from "../types";
2
+ /**
3
+ * Генерирует postinstall скрипт для скачивания бинарника
4
+ *
5
+ * @param manifest - Манифест с URL-ами для скачивания
6
+ * @returns JavaScript код postinstall скрипта
7
+ */
8
+ export declare function generatePostinstallScript(manifest: BinaryManifest): string;
9
+ /**
10
+ * Генерирует простой wrapper скрипт для bin/
11
+ *
12
+ * @param binName - Имя бинарника
13
+ * @returns JavaScript код wrapper скрипта
14
+ */
15
+ export declare function generateBinWrapper(binName: string): string;
16
+ /**
17
+ * Создаёт манифест для бинарной дистрибуции
18
+ *
19
+ * @param version - Версия
20
+ * @param binName - Имя бинарника
21
+ * @param assets - Маппинг платформ на URL-ы
22
+ * @returns Манифест
23
+ */
24
+ export declare function createBinaryManifest(version: string, binName: string, assets: Partial<Record<BinaryPlatform, string>>): BinaryManifest;
25
+ /**
26
+ * Генерирует package.json для мастер-пакета с postinstall
27
+ *
28
+ * @param name - Имя пакета
29
+ * @param version - Версия
30
+ * @param binName - Имя бинарника
31
+ * @param description - Описание пакета
32
+ * @returns Содержимое package.json
33
+ */
34
+ export declare function generateMasterPackageJson(name: string, version: string, binName: string, description?: string): string;
35
+ /**
36
+ * Опции для записи npm файлов
37
+ */
38
+ export interface WriteNpmFilesOptions {
39
+ /** Манифест с URL-ами */
40
+ manifest: BinaryManifest;
41
+ /** Имя бинарника для wrapper */
42
+ binName: string;
43
+ /** Настройки npm */
44
+ npmConfig: BinariesNpmConfig;
45
+ /** Базовая директория проекта */
46
+ baseDir?: string;
47
+ /** Dry-run режим */
48
+ dryRun?: boolean;
49
+ }
50
+ /**
51
+ * Результат записи npm файлов
52
+ */
53
+ export interface WriteNpmFilesResult {
54
+ /** Путь к postinstall скрипту */
55
+ postinstallPath: string;
56
+ /** Путь к bin wrapper */
57
+ binWrapperPath: string;
58
+ /** Был ли обновлён package.json */
59
+ packageJsonUpdated: boolean;
60
+ }
61
+ /**
62
+ * Записывает postinstall скрипт и bin wrapper в проект
63
+ *
64
+ * @param options - Опции записи
65
+ * @returns Результат записи
66
+ */
67
+ export declare function writeNpmFiles(options: WriteNpmFilesOptions): Promise<WriteNpmFilesResult>;
@@ -18,7 +18,7 @@ export declare function gitCommand(command: string): Promise<string>;
18
18
  * Получает информацию о Git репозитории
19
19
  *
20
20
  * Приоритет источников данных:
21
- * 1. Переменные окружения GitVerse Actions (для CI/CD)
21
+ * 1. Переменные окружения CI (GitVerse Actions, GitHub Actions, GitLab CI)
22
22
  * 2. Git remote URL (для локального использования)
23
23
  */
24
24
  export declare function getRepoInfo(): Promise<GitRepoInfo>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "onreza-release",
3
- "version": "1.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "Conventional Commits release automation tool with GitVerse and GitHub support",
5
5
  "keywords": [
6
6
  "release",
@@ -55,13 +55,13 @@
55
55
  "typecheck": "tsc --noEmit"
56
56
  },
57
57
  "dependencies": {
58
- "@onreza/gitverse-sdk": ">=0.0.0",
58
+ "@onreza/gitverse-sdk": ">=1.0.2",
59
59
  "jsonc-parser": "^3.3.1",
60
60
  "tar": "^7.5.3"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@biomejs/biome": "^2.3.11",
64
- "@types/bun": "1.3.6",
64
+ "@types/bun": "1.3.8",
65
65
  "typescript": "^5.9.3"
66
66
  },
67
67
  "publishConfig": {