@koslibs/builder 0.1.0 → 2.0.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.
Files changed (67) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +88 -54
  3. package/dist/cli/commands.d.ts.map +1 -1
  4. package/dist/cli/commands.js +0 -2
  5. package/dist/cli/commands.js.map +1 -1
  6. package/dist/cli/handlers/library.d.ts.map +1 -1
  7. package/dist/cli/handlers/library.js +2 -2
  8. package/dist/cli/handlers/library.js.map +1 -1
  9. package/dist/cli/handlers/storybook.d.ts.map +1 -1
  10. package/dist/cli/handlers/storybook.js +22 -1
  11. package/dist/cli/handlers/storybook.js.map +1 -1
  12. package/dist/cli/handlers/tests.d.ts.map +1 -1
  13. package/dist/cli/handlers/tests.js +3 -20
  14. package/dist/cli/handlers/tests.js.map +1 -1
  15. package/dist/cli/handlers/typecheck.d.ts +2 -0
  16. package/dist/cli/handlers/typecheck.d.ts.map +1 -1
  17. package/dist/cli/handlers/typecheck.js +49 -1
  18. package/dist/cli/handlers/typecheck.js.map +1 -1
  19. package/dist/cli/handlers/ui.d.ts.map +1 -1
  20. package/dist/cli/handlers/ui.js +2 -1
  21. package/dist/cli/handlers/ui.js.map +1 -1
  22. package/dist/cli/process.d.ts +4 -2
  23. package/dist/cli/process.d.ts.map +1 -1
  24. package/dist/cli/process.js +29 -5
  25. package/dist/cli/process.js.map +1 -1
  26. package/dist/configs/library.d.ts.map +1 -1
  27. package/dist/configs/library.js +1 -2
  28. package/dist/configs/library.js.map +1 -1
  29. package/dist/configs/normalize.d.ts.map +1 -1
  30. package/dist/configs/normalize.js +7 -2
  31. package/dist/configs/normalize.js.map +1 -1
  32. package/dist/configs/storybook.d.ts +2 -2
  33. package/dist/configs/storybook.d.ts.map +1 -1
  34. package/dist/configs/storybook.js +10 -15
  35. package/dist/configs/storybook.js.map +1 -1
  36. package/dist/configs/typescript.d.ts +0 -1
  37. package/dist/configs/typescript.d.ts.map +1 -1
  38. package/dist/configs/typescript.js +0 -9
  39. package/dist/configs/typescript.js.map +1 -1
  40. package/dist/configs/ui.d.ts.map +1 -1
  41. package/dist/configs/ui.js +0 -2
  42. package/dist/configs/ui.js.map +1 -1
  43. package/dist/storybook/blocks.d.ts +2 -0
  44. package/dist/storybook/blocks.d.ts.map +1 -0
  45. package/dist/storybook/blocks.js +2 -0
  46. package/dist/storybook/blocks.js.map +1 -0
  47. package/dist/testing/index.d.ts +1 -2
  48. package/dist/testing/index.d.ts.map +1 -1
  49. package/dist/testing/index.js +0 -1
  50. package/dist/testing/index.js.map +1 -1
  51. package/dist/typings/config.d.ts +3 -0
  52. package/dist/typings/config.d.ts.map +1 -1
  53. package/dist/typings/index.d.ts +1 -1
  54. package/dist/typings/index.d.ts.map +1 -1
  55. package/dist/typings/storybook.d.ts +1 -1
  56. package/dist/typings/storybook.d.ts.map +1 -1
  57. package/dist/typings/testing.d.ts +0 -1
  58. package/dist/typings/testing.d.ts.map +1 -1
  59. package/package.json +26 -18
  60. package/dist/configs/browser-tests.d.ts +0 -4
  61. package/dist/configs/browser-tests.d.ts.map +0 -1
  62. package/dist/configs/browser-tests.js +0 -29
  63. package/dist/configs/browser-tests.js.map +0 -1
  64. package/dist/testing/playwright.d.ts +0 -2
  65. package/dist/testing/playwright.d.ts.map +0 -1
  66. package/dist/testing/playwright.js +0 -2
  67. package/dist/testing/playwright.js.map +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,19 @@
1
+ # @koslibs/builder
2
+
3
+ ## 2.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - [`9d77b88`](https://github.com/koslibs/builder/commit/9d77b88614c041de1176a5795cb45c1b5505bd43) Thanks [@holypower777](https://github.com/holypower777)! - Move browser testing to the independent @koslibs/playwright package. Remove the Playwright dependency, ./playwright export, createBrowserTestConfig, BrowserTestKind, and ui/lib test:e2e and test:screenshots commands. Install @koslibs/playwright directly, import its runner/configuration, and configure webServer in the consuming project. Rstest, build and Storybook commands remain supported.
8
+
9
+ Revalidate npm registry metadata when installing the packed smoke-test consumer, so newly released dependencies are resolved even when the dedicated npm cache contains older package metadata.
10
+
11
+ ## 1.0.0
12
+
13
+ ### Major Changes
14
+
15
+ - [#1](https://github.com/koslibs/builder/pull/1) [`79bd508`](https://github.com/koslibs/builder/commit/79bd5081d2dd824ec80a5249de4a9181a384563b) Thanks [@holypower777](https://github.com/holypower777)! - Update the shared toolchain and require @koslibs/configs 1.x. Replace the type-check plugin with tsc and background tsc --watch, and move Storybook to Vite to remove the vulnerable braces dependency chain. Application and library builds continue to use Rspack.
16
+
17
+ Add storybookViteConfig for Storybook-specific settings and expose Docs components and types through @koslibs/builder/storybook/blocks. Storybook customizations previously supplied through Rsbuild settings must be migrated to storybookViteConfig.
18
+
19
+ Adopt shared Changesets release workflows, changelog generation and Git hooks from @koslibs/configs.
package/README.md CHANGED
@@ -2,23 +2,21 @@
2
2
 
3
3
  Единый CLI для React-приложений, ESM-библиотек, Storybook и тестов.
4
4
  UI собирается через Rsbuild, библиотеки — через Rslib. Оба используют Rspack.
5
+ Storybook собирается через Vite.
5
6
 
6
7
  ## Подключение
7
8
 
8
9
  Node.js >= 24.13.0. Builder устанавливается в devDependencies:
9
10
 
10
11
  ```sh
11
- npm install @koslibs/api @koslibs/components
12
12
  npm install --save-dev @koslibs/builder @koslibs/configs @types/react @types/react-dom @types/node
13
13
  ```
14
14
 
15
- `@koslibs/configs` — обязательная peer-зависимость builder с диапазоном `^0.2.11`.
15
+ `@koslibs/configs` — обязательная peer-зависимость builder с диапазоном `^1.0.0`.
16
16
  Builder использует версию configs, установленную в проекте.
17
17
 
18
- Первая строка — целевая схема подключения runtime-пакетов: она применима, когда
19
- нужные версии API и components опубликованы. Builder не устанавливает эти пакеты автоматически
20
- и не требует их наличия для работы. React и react-dom устанавливаются самим приложением.
21
- Поддерживаются React 18.3 и 19; совместимость остальных пакетов нужно учитывать отдельно.
18
+ Builder использует TypeScript 6.0.3. TypeScript 7 пока не используется: генератор
19
+ типов свойств Storybook зависит от API компилятора TypeScript 6.
22
20
 
23
21
  В корне проекта создаётся `koslibs-builder.ts`:
24
22
 
@@ -45,6 +43,7 @@ export default config;
45
43
  interface KoslibsBuilderConfig {
46
44
  rsbuildConfig?: RsbuildConfig;
47
45
  clientConfig?: EnvironmentConfig;
46
+ storybookViteConfig?: UserConfig;
48
47
  port?: number;
49
48
  }
50
49
  ```
@@ -75,7 +74,8 @@ export default config;
75
74
  → клиентское окружение `clientConfig`. В UI это окружение называется `client`.
76
75
  `port` имеет приоритет над `rsbuildConfig.server.port`, затем используется 8080.
77
76
  Занятый порт вызывает ошибку вместо незаметного переключения на другой.
78
- `clientConfig` используется для UI и Storybook, для сборки библиотеки он игнорируется.
77
+ `clientConfig` используется только для UI. `rsbuildConfig` используется для UI и библиотек.
78
+ Для Storybook предназначен `storybookViteConfig`; настройки Rsbuild в Vite не переносятся.
79
79
 
80
80
  ## Scripts приложения
81
81
 
@@ -88,8 +88,6 @@ export default config;
88
88
  "test": "koslibs-builder ui:test",
89
89
  "test:watch": "koslibs-builder ui:test:watch",
90
90
  "test:coverage": "koslibs-builder ui:test:coverage",
91
- "test:e2e": "koslibs-builder ui:test:e2e",
92
- "test:screenshots": "koslibs-builder ui:test:screenshots",
93
91
  "storybook:start": "koslibs-builder storybook:start",
94
92
  "storybook:build": "koslibs-builder storybook:build"
95
93
  }
@@ -115,6 +113,7 @@ HTML можно изменить через `clientConfig.html`; для обыч
115
113
  "extends": "@koslibs/configs/tsconfig",
116
114
  "compilerOptions": {
117
115
  "types": ["@koslibs/builder/client"],
116
+ "esModuleInterop": true,
118
117
  "jsx": "react-jsx"
119
118
  },
120
119
  "include": ["src", "koslibs-builder.ts"]
@@ -122,6 +121,8 @@ HTML можно изменить через `clientConfig.html`; для обыч
122
121
  ```
123
122
 
124
123
  `@koslibs/builder/client` предоставляет типы CSS Modules, ресурсов и `import.meta.env`.
124
+ Для TypeScript 6 нужно явно включить `esModuleInterop`: preset из `@koslibs/configs@1.0.0`
125
+ задаёт устаревшее значение `false`.
125
126
  Для кода Node.js и конфигов, использующих `process`, добавь `@types/node` и `node` в `types`.
126
127
  При использовании библиотек или JSX также нужны соответствующие `@types/*`.
127
128
 
@@ -137,9 +138,10 @@ npm run typecheck
137
138
  зависимостей в package.json примера.
138
139
 
139
140
  `ui:build` сначала проверяет весь TS-проект и возвращает ненулевой код при ошибках.
140
- `ui:start` проверяет типы в отдельном процессе, показывает ошибки в терминале и overlay,
141
+ `ui:start` запускает `tsc --noEmit --watch`, показывает ошибки в терминале,
141
142
  продолжает работать и повторяет проверку после исправлений. Dev-server не прекращает
142
143
  работу из-за исправимой ошибки типов. Проверку типов задаёт builder.
144
+ Фоновый checker завершается вместе с dev-server; его неожиданное завершение останавливает сервер.
143
145
 
144
146
  ## Библиотеки
145
147
 
@@ -154,8 +156,6 @@ Scripts используют префикс `lib` для build, typecheck и в
154
156
  "test": "koslibs-builder lib:test",
155
157
  "test:watch": "koslibs-builder lib:test:watch",
156
158
  "test:coverage": "koslibs-builder lib:test:coverage",
157
- "test:e2e": "koslibs-builder lib:test:e2e",
158
- "test:screenshots": "koslibs-builder lib:test:screenshots",
159
159
  "storybook:start": "koslibs-builder storybook:start",
160
160
  "storybook:build": "koslibs-builder storybook:build"
161
161
  }
@@ -198,61 +198,66 @@ Builder не изменяет exports автоматически. Линтинг
198
198
 
199
199
  ## Storybook
200
200
 
201
- Builder управляет Rsbuild-framework, addon-docs, Controls, автодокументацией и stories
201
+ Builder управляет Vite-framework, addon-docs, Controls, автодокументацией и stories
202
202
  из `src/**/*.stories.{ts,tsx,js,jsx,mjs}`. `.storybook/main.ts` не требуется и не читается:
203
203
  служебный main создаётся builder. При миграции старые addons и main-настройки нужно
204
204
  сверить отдельно. Для локальных decorators и parameters используется `.storybook/preview.ts`.
205
205
  Файлы `public` подключаются как статические ресурсы. Выход — `storybook-static`.
206
206
 
207
- Storybook использует `port`, проверяет типы, наследует подходящие общие настройки
208
- Rsbuild и клиентские настройки. Entry, HTML, server и distPath принадлежат Storybook
209
- и не переносятся из настроек сборки приложения. Неподдерживаемые поля builder-конфига,
210
- включая `storybookConfig`, игнорируются; расширение API для addons возможно следующим шагом.
207
+ Блоки для собственных страниц Docs доступны через builder:
211
208
 
212
- ## Тесты
209
+ ```tsx
210
+ import { Canvas, Controls, Title } from '@koslibs/builder/storybook/blocks';
211
+ ```
213
212
 
214
- Только Rstest и Playwright. Компонентного браузерного runner нет.
213
+ Экспорт включает компоненты и типы `@storybook/addon-docs/blocks`. При миграции замените
214
+ импорты из `@storybook/addon-docs/blocks` на `@koslibs/builder/storybook/blocks`.
215
+ Если других прямых импортов `@storybook/addon-docs` нет, отдельную зависимость можно удалить:
216
+ builder управляет её версией и подключением addon в Storybook.
215
217
 
216
- - `test` запускает unit-тесты один раз, `test:watch` следит за изменениями.
217
- - `test:coverage` создаёт отчёты text, HTML и lcov через Istanbul.
218
- - Дефолтные unit-тесты: `src` и `tests`, имена `*.test.*` и `*.spec.*`.
219
- - UI unit-тесты используют happy-dom и React preset configs; lib unit-тесты — Node.js.
220
- - Без тестов команда завершается с ошибкой.
221
- - Playwright E2E использует `playwright/**/*.spec.*`, исключая `*.screenshots.spec.*`.
222
- - Screenshot-suite использует `playwright/**/*.screenshots.spec.*`.
223
- - Playwright сам запускает UI dev-server, а для библиотеки — Storybook, на заданном порту.
224
- - Скриншоты сравниваются через `expect(page).toHaveScreenshot()`. Обновление существующих
225
- эталонов — отдельное осознанное действие через `--update-snapshots`.
218
+ Storybook использует `port`. Перед production-сборкой запускается `tsc --noEmit`,
219
+ в dev — отдельный `tsc --noEmit --watch`. TypeScript 6 остаётся для извлечения типов
220
+ свойств компонентов в Docs/Controls.
226
221
 
227
- Для браузерных тестов нужен установленный Chromium соответствующей версии Playwright.
228
- API тестов и типы stories доступны через builder, поэтому отдельные зависимости на
229
- тестовые инструменты в проекте не обязательны:
222
+ Настройки Storybook задаются через `storybookViteConfig` в `koslibs-builder.ts`:
230
223
 
231
224
  ```ts
232
- // unit-тесты
233
- import { test, expect } from '@koslibs/builder/rstest';
234
- // Playwright-тесты (в другом файле)
235
- import { test, expect } from '@koslibs/builder/playwright';
236
- // типы stories
237
- import type { Meta, StoryObj } from '@koslibs/builder/storybook';
225
+ import type { KoslibsBuilderConfig } from '@koslibs/builder';
226
+
227
+ const config: KoslibsBuilderConfig = {
228
+ storybookViteConfig: {
229
+ define: { __API_URL__: JSON.stringify('https://api.example.test') },
230
+ },
231
+ };
232
+
233
+ export default config;
238
234
  ```
239
235
 
240
- Если используются прямые импорты `@playwright/test`, `@rstest/core` или
241
- `storybook-react-rsbuild`, эти пакеты должны быть прямыми devDependencies проекта.
242
- Builder сам разрешает исполняемые файлы своих инструментов и не полагается на глобальную установку.
236
+ Это типизированные настройки Vite. Корень проекта задаёт builder; локальные
237
+ `vite.config.*` не загружаются автоматически. CSS Modules и автоматический JSX runtime
238
+ поддерживаются без дополнительных настроек. Vite загружает `.env` проекта и публикует
239
+ переменные с префиксами `PUBLIC_` и `VITE_`. `rsbuildConfig`, `clientConfig` и плагины
240
+ Rspack не применяются к Storybook: определения, алиасы и другие специальные настройки
241
+ нужно перенести в соответствующие поля Vite. Неподдерживаемые поля builder-конфига,
242
+ включая `storybookConfig`, игнорируются; расширение API для addons возможно следующим шагом.
243
243
 
244
- Если проект имеет `rstest.config.*` или `playwright.config.*`, builder использует их.
245
- В пользовательском Playwright-конфиге помечай screenshot-тесты тегом `@screenshots`:
246
- builder выбирает E2E/screenshot-suite через grep. При таком конфиге запуск сервера
247
- и остальные настройки контролирует сам проект. Общие фабрики доступны из
248
- `@koslibs/builder/testing`, можно расширять их через обычные конфиги инструментов.
249
- Тестовые и Storybook-флаги передаются дальше:
244
+ ## Тесты
250
245
 
251
- ```sh
252
- npm run test -- greeting
253
- npm run test:e2e -- --list
254
- npm run test:screenshots -- --update-snapshots
255
- koslibs-builder ui:build --root ./frontend
246
+ Builder запускает unit-тесты через Rstest: `test`, `test:watch`, `test:coverage`.
247
+ UI-тесты используют happy-dom, библиотечные — Node.js. Конфигурация проекта
248
+ `rstest.config.*` имеет приоритет; иначе используется `createUnitTestConfig`
249
+ из `@koslibs/builder/testing`.
250
+
251
+ Браузерные тесты и screenshots перенесены в отдельный пакет `@koslibs/playwright`.
252
+ Установите его как прямую devDependency и используйте `koslibs-playwright test`.
253
+ Команды `*:test:e2e` / `*:test:screenshots`, экспорт `./playwright`,
254
+ `createBrowserTestConfig` и `BrowserTestKind` удалены в builder 2.
255
+ В конфигурации браузерных тестов задавайте `webServer.command` и `url`
256
+ явно; пакет браузерного тестирования не зависит от builder.
257
+
258
+ ```ts
259
+ import { test, expect } from '@koslibs/builder/rstest';
260
+ import type { Meta, StoryObj } from '@koslibs/builder/storybook';
256
261
  ```
257
262
 
258
263
  ## Переменные окружения
@@ -274,6 +279,35 @@ const apiUrl = import.meta.env.PUBLIC_API_URL;
274
279
  Для переиспользуемых библиотек builder не загружает `.env` автоматически.
275
280
  Поведение описано в [документации Rsbuild](https://rsbuild.rs/guide/advanced/env-vars).
276
281
 
282
+ ## Релиз самого builder
283
+
284
+ Релиз и Git hooks управляются `@koslibs/configs`. `npm install` / `npm ci` запускают
285
+ `prepare` и устанавливают общий Lefthook preset: проверки перед commit, Commitlint
286
+ и проверку Changeset перед push.
287
+
288
+ Перед отправкой изменений создайте один Changeset для PR:
289
+
290
+ ```sh
291
+ npm run changeset
292
+ git add .changeset/*.md
293
+ git commit -m "feat: describe the change"
294
+ git push
295
+ ```
296
+
297
+ Для следующих изменений в том же PR обновляйте существующий Changeset.
298
+ Проверка перед push требует, чтобы файл был добавлен и закоммичен; версия пакета
299
+ до релиза остаётся прежней. Для ручной проверки используется
300
+ `npm run changeset:check -- --base origin/main --head HEAD`.
301
+
302
+ В PR общий workflow запускает проверку `Changeset required`. После merge в `main`
303
+ workflow проверяет npm-пакет и через `koslibs-release` обновляет версию и `CHANGELOG.md`,
304
+ публикует пакет и отправляет релизный commit и Git tag. Повторный запуск доступен
305
+ через `workflow_dispatch`. Общие workflows закреплены на теге configs `v1.0.0`.
306
+
307
+ В настройках GitHub сделайте `Changeset required` обязательным для merge.
308
+ Для публикации используется существующий `NPM_TOKEN` либо npm Trusted Publishing,
309
+ настроенный для репозитория `koslibs/builder` и вызывающего workflow `release.yml`.
310
+
277
311
  ## Структура исходников
278
312
 
279
313
  ```text
@@ -290,7 +324,7 @@ src/
290
324
  typings/ интерфейсы, типы и клиентские декларации
291
325
  utils/ общие функции для пакетов и shell-команд
292
326
  storybook/ публичная точка входа @koslibs/builder/storybook
293
- testing/ публичные точки входа testing, rstest и playwright
327
+ testing/ публичные точки входа testing и rstest
294
328
  ```
295
329
 
296
330
  Тесты повторяют структуру модулей в `tests/cli` и `tests/configs`.
@@ -298,4 +332,4 @@ src/
298
332
 
299
333
  Архитектурные источники: [Rsbuild](https://rsbuild.dev/guide/faq/general),
300
334
  [Rslib: сохранение структуры модулей](https://www.rslib.rs/config/lib/bundle),
301
- [Storybook Rsbuild](https://storybook.rsbuild.rs/guide/configuration).
335
+ [Storybook Vite](https://storybook.js.org/docs/builders/vite).
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,UAkBpB,CAAC"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,UAgBpB,CAAC"}
@@ -13,8 +13,6 @@ export const COMMANDS = [
13
13
  `${kind}:test`,
14
14
  `${kind}:test:watch`,
15
15
  `${kind}:test:coverage`,
16
- `${kind}:test:e2e`,
17
- `${kind}:test:screenshots`,
18
16
  ]),
19
17
  ];
20
18
  //# sourceMappingURL=commands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,UAAU;IACV,UAAU;IACV,YAAY;IACZ,cAAc;IACd,WAAW;IACX,WAAW;IACX,WAAW;IACX,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,GAAI,CAAC,IAAI,EAAE,KAAK,CAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,GAAG,IAAI,OAAO;QACd,GAAG,IAAI,aAAa;QACpB,GAAG,IAAI,gBAAgB;QACvB,GAAG,IAAI,WAAW;QAClB,GAAG,IAAI,mBAAmB;KAC7B,CAAC;CACL,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,UAAU;IACV,UAAU;IACV,YAAY;IACZ,cAAc;IACd,WAAW;IACX,WAAW;IACX,WAAW;IACX,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,GAAI,CAAC,IAAI,EAAE,KAAK,CAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,GAAG,IAAI,OAAO;QACd,GAAG,IAAI,aAAa;QACpB,GAAG,IAAI,gBAAgB;KAC1B,CAAC;CACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/library.ts"],"names":[],"mappings":"AAKA,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc7E"}
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/library.ts"],"names":[],"mappings":"AAMA,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc7E"}
@@ -1,7 +1,7 @@
1
1
  import { writeLibraryTsconfig } from '../../configs/generated.js';
2
2
  import { createLibraryConfig } from '../../configs/library.js';
3
3
  import { loadBuilderConfig } from '../../configs/load.js';
4
- import { closeOnSignal } from '../process.js';
4
+ import { watchTypecheck } from './typecheck.js';
5
5
  export async function runLibrary(command, root) {
6
6
  const config = await loadBuilderConfig(root);
7
7
  const { createRslib } = await import('@rslib/core');
@@ -12,7 +12,7 @@ export async function runLibrary(command, root) {
12
12
  });
13
13
  const result = await rslib.build({ watch: command === 'lib:watch' });
14
14
  if (command === 'lib:watch') {
15
- closeOnSignal(() => result.close());
15
+ await watchTypecheck(root, () => result.close());
16
16
  }
17
17
  else {
18
18
  await result.close();
@@ -1 +1 @@
1
- {"version":3,"file":"library.js","sourceRoot":"","sources":["../../../src/cli/handlers/library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,IAAY;IAC1D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACpD,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC;QAC5B,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,WAAW,CAAC;KACrE,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC,CAAC;IACrE,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC1B,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACJ,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../../../src/cli/handlers/library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,IAAY;IAC1D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACpD,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC;QAC5B,GAAG,EAAE,IAAI;QACT,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,WAAW,CAAC;KACrE,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC,CAAC;IACrE,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC1B,MAAM,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACJ,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"storybook.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/storybook.ts"],"names":[],"mappings":"AAQA,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBjG"}
1
+ {"version":3,"file":"storybook.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/storybook.ts"],"names":[],"mappings":"AAUA,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA2CjG"}
@@ -4,11 +4,18 @@ import { writeGeneratedConfig } from '../../configs/generated.js';
4
4
  import { loadBuilderConfig } from '../../configs/load.js';
5
5
  import { packageBin } from '../../utils/packages.js';
6
6
  import { runNode } from '../process.js';
7
+ import { typecheck, watchTypecheck } from './typecheck.js';
7
8
  export async function runStorybook(command, root, args) {
8
9
  const config = await loadBuilderConfig(root);
9
10
  const generated = await writeGeneratedConfig(root, 'storybook', `import { createStorybookConfig } from ${JSON.stringify(new URL('../../storybook/index.js', import.meta.url).href)};\n` +
10
11
  `export default await createStorybookConfig(${JSON.stringify(root)});\n`);
11
12
  const dev = command.endsWith(':start');
13
+ if (!dev) {
14
+ const code = await typecheck(root);
15
+ if (code !== 0) {
16
+ return code;
17
+ }
18
+ }
12
19
  const flags = dev
13
20
  ? [
14
21
  'dev',
@@ -18,6 +25,20 @@ export async function runStorybook(command, root, args) {
18
25
  '--no-open',
19
26
  ]
20
27
  : ['build', '--output-dir', resolve(root, 'storybook-static')];
21
- return runNode(packageBin('storybook', 'storybook'), [...flags, '--config-dir', generated.directory, '--disable-telemetry', ...args], root);
28
+ const controller = new AbortController();
29
+ const result = runNode(packageBin('storybook', 'storybook'), [...flags, '--config-dir', generated.directory, '--disable-telemetry', ...args], root, controller.signal);
30
+ if (!dev) {
31
+ return result;
32
+ }
33
+ const stop = await watchTypecheck(root, async () => {
34
+ controller.abort();
35
+ await result;
36
+ });
37
+ try {
38
+ return await result;
39
+ }
40
+ finally {
41
+ await stop();
42
+ }
22
43
  }
23
44
  //# sourceMappingURL=storybook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storybook.js","sourceRoot":"","sources":["../../../src/cli/handlers/storybook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,IAAY,EAAE,IAAc;IAC5E,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,oBAAoB,CACxC,IAAI,EACJ,WAAW,EACX,yCAAyC,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;QACnH,8CAA8C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAC/E,CAAC;IACF,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,GAAG;QACb,CAAC,CAAC;YACI,KAAK;YACL,QAAQ;YACR,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,IAAI,YAAY,CAAC;YACzE,cAAc;YACd,WAAW;SACd;QACH,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACnE,OAAO,OAAO,CACV,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,EACpC,CAAC,GAAG,KAAK,EAAE,cAAc,EAAE,SAAS,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC,EAC/E,IAAI,CACP,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"storybook.js","sourceRoot":"","sources":["../../../src/cli/handlers/storybook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,IAAY,EAAE,IAAc;IAC5E,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,oBAAoB,CACxC,IAAI,EACJ,WAAW,EACX,yCAAyC,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;QACnH,8CAA8C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAC/E,CAAC;IACF,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,GAAG;QACb,CAAC,CAAC;YACI,KAAK;YACL,QAAQ;YACR,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,IAAI,YAAY,CAAC;YACzE,cAAc;YACd,WAAW;SACd;QACH,CAAC,CAAC,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAClB,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,EACpC,CAAC,GAAG,KAAK,EAAE,cAAc,EAAE,SAAS,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC,EAC/E,IAAI,EACJ,UAAU,CAAC,MAAM,CACpB,CAAC;IACF,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;QAC/C,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,MAAM,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACD,OAAO,MAAM,MAAM,CAAC;IACxB,CAAC;YAAS,CAAC;QACP,MAAM,IAAI,EAAE,CAAC;IACjB,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/tests.ts"],"names":[],"mappings":"AAMA,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA6C7F"}
1
+ {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/tests.ts"],"names":[],"mappings":"AAMA,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB7F"}
@@ -4,30 +4,13 @@ import { packageBin } from '../../utils/packages.js';
4
4
  import { runNode } from '../process.js';
5
5
  export async function runTests(command, root, args) {
6
6
  const [kind] = command.split(':');
7
- const browser = command.endsWith(':e2e') || command.endsWith(':screenshots');
8
- let file = findTestConfig(root, browser ? 'playwright' : 'rstest');
7
+ let file = findTestConfig(root, 'rstest');
9
8
  if (!file) {
10
9
  const module = new URL('../../testing/index.js', import.meta.url).href;
11
- const expression = browser
12
- ? `await createBrowserTestConfig(${JSON.stringify(kind)}, ${JSON.stringify(command.endsWith(':screenshots') ? 'screenshots' : 'e2e')}, ${JSON.stringify(root)})`
13
- : `createUnitTestConfig(${JSON.stringify(kind)}, ${JSON.stringify(root)})`;
14
- const generated = await writeGeneratedConfig(root, browser ? 'playwright' : 'rstest', `import { createBrowserTestConfig, createUnitTestConfig } from ${JSON.stringify(module)};\n` +
15
- `export default ${expression};\n`);
10
+ const generated = await writeGeneratedConfig(root, 'rstest', `import { createUnitTestConfig } from ${JSON.stringify(module)};\n` +
11
+ `export default createUnitTestConfig(${JSON.stringify(kind)}, ${JSON.stringify(root)});\n`);
16
12
  file = generated.file;
17
13
  }
18
- if (browser) {
19
- const filter = command.endsWith(':screenshots')
20
- ? ['--grep', '@screenshots']
21
- : ['--grep-invert', '@screenshots'];
22
- // Generated configs select by filename; custom configs use the shared @screenshots tag.
23
- return runNode(packageBin('@playwright/test', 'playwright'), [
24
- 'test',
25
- '--config',
26
- file,
27
- ...(findTestConfig(root, 'playwright') ? filter : []),
28
- ...args,
29
- ], root);
30
- }
31
14
  return runNode(packageBin('@rstest/core', 'rstest'), [
32
15
  command.endsWith(':watch') ? 'watch' : 'run',
33
16
  '--config',
@@ -1 +1 @@
1
- {"version":3,"file":"tests.js","sourceRoot":"","sources":["../../../src/cli/handlers/tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAY,EAAE,IAAc;IACxE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC7E,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACnE,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACvE,MAAM,UAAU,GAAG,OAAO;YACtB,CAAC,CAAC,iCAAiC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;YAChK,CAAC,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/E,MAAM,SAAS,GAAG,MAAM,oBAAoB,CACxC,IAAI,EACJ,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EACjC,iEAAiE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK;YACxF,kBAAkB,UAAU,KAAK,CACxC,CAAC;QACF,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC3C,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC;YAC5B,CAAC,CAAC,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QACxC,wFAAwF;QACxF,OAAO,OAAO,CACV,UAAU,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAC5C;YACI,MAAM;YACN,UAAU;YACV,IAAI;YACJ,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,IAAI;SACV,EACD,IAAI,CACP,CAAC;IACN,CAAC;IACD,OAAO,OAAO,CACV,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,EACpC;QACI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;QAC5C,UAAU;QACV,IAAI;QACJ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,IAAI;KACV,EACD,IAAI,CACP,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"tests.js","sourceRoot":"","sources":["../../../src/cli/handlers/tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAY,EAAE,IAAc;IACxE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IACnD,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACvE,MAAM,SAAS,GAAG,MAAM,oBAAoB,CACxC,IAAI,EACJ,QAAQ,EACR,wCAAwC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK;YAC/D,uCAAuC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CACjG,CAAC;QACF,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,CACV,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,EACpC;QACI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;QAC5C,UAAU;QACV,IAAI;QACJ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,IAAI;KACV,EACD,IAAI,CACP,CAAC;AACN,CAAC"}
@@ -1,2 +1,4 @@
1
1
  export declare function typecheck(root: string): Promise<number>;
2
+ /** Owns the checker and the dev/watch resource, closing both together. */
3
+ export declare function watchTypecheck(root: string, closeOwner: () => Promise<void>): Promise<() => Promise<void>>;
2
4
  //# sourceMappingURL=typecheck.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typecheck.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/typecheck.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7D"}
1
+ {"version":3,"file":"typecheck.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/typecheck.ts"],"names":[],"mappings":"AAMA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7D;AAED,0EAA0E;AAC1E,wBAAsB,cAAc,CAChC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAChC,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CA+C9B"}
@@ -1,6 +1,54 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { once } from 'node:events';
1
3
  import { packageBin } from '../../utils/packages.js';
2
- import { runNode } from '../process.js';
4
+ import { closeOnSignal, runNode, stopNode } from '../process.js';
3
5
  export async function typecheck(root) {
4
6
  return runNode(packageBin('typescript', 'tsc'), ['--project', 'tsconfig.json', '--noEmit'], root);
5
7
  }
8
+ /** Owns the checker and the dev/watch resource, closing both together. */
9
+ export async function watchTypecheck(root, closeOwner) {
10
+ const child = spawn(process.execPath, [
11
+ packageBin('typescript', 'tsc'),
12
+ '--project',
13
+ 'tsconfig.json',
14
+ '--noEmit',
15
+ '--watch',
16
+ '--preserveWatchOutput',
17
+ '--pretty',
18
+ 'false',
19
+ ], { cwd: root, stdio: 'inherit', windowsHide: true });
20
+ const closed = new Promise((resolveClosed) => child.once('close', () => resolveClosed()));
21
+ let stopping;
22
+ let removeSignals = () => { };
23
+ const onExit = () => stopNode(child);
24
+ const stop = () => {
25
+ if (!stopping) {
26
+ // Mark as stopping before killing: a normal shutdown is not a checker failure.
27
+ stopping = Promise.resolve().then(async () => {
28
+ removeSignals();
29
+ process.removeListener('exit', onExit);
30
+ stopNode(child);
31
+ await Promise.all([closed, closeOwner()]);
32
+ });
33
+ }
34
+ return stopping;
35
+ };
36
+ try {
37
+ await once(child, 'spawn');
38
+ }
39
+ catch (error) {
40
+ await stop();
41
+ throw error;
42
+ }
43
+ child.once('close', (code) => {
44
+ if (!stopping) {
45
+ console.error(`[koslibs-builder] TypeScript watcher exited unexpectedly (${code}).`);
46
+ process.exitCode = 1;
47
+ void stop().catch((error) => console.error(error));
48
+ }
49
+ });
50
+ process.once('exit', onExit);
51
+ removeSignals = closeOnSignal(stop);
52
+ return stop;
53
+ }
6
54
  //# sourceMappingURL=typecheck.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typecheck.js","sourceRoot":"","sources":["../../../src/cli/handlers/typecheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IACxC,OAAO,OAAO,CACV,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,EAC/B,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,EAC1C,IAAI,CACP,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"typecheck.js","sourceRoot":"","sources":["../../../src/cli/handlers/typecheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IACxC,OAAO,OAAO,CACV,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,EAC/B,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,EAC1C,IAAI,CACP,CAAC;AACN,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,IAAY,EACZ,UAA+B;IAE/B,MAAM,KAAK,GAAG,KAAK,CACf,OAAO,CAAC,QAAQ,EAChB;QACI,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC;QAC/B,WAAW;QACX,eAAe;QACf,UAAU;QACV,SAAS;QACT,uBAAuB;QACvB,UAAU;QACV,OAAO;KACV,EACD,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CACrD,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAChG,IAAI,QAAmC,CAAC;IACxC,IAAI,aAAa,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,GAAG,EAAE;QACd,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,+EAA+E;YAC/E,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACzC,aAAa,EAAE,CAAC;gBAChB,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAChB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC;IACF,IAAI,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,KAAK,CAAC;IAChB,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,6DAA6D,IAAI,IAAI,CAAC,CAAC;YACrF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/ui.ts"],"names":[],"mappings":"AAIA,wBAAsB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxE"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/ui.ts"],"names":[],"mappings":"AAMA,wBAAsB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxE"}
@@ -1,6 +1,7 @@
1
1
  import { loadBuilderConfig } from '../../configs/load.js';
2
2
  import { createUiConfig } from '../../configs/ui.js';
3
3
  import { closeOnSignal } from '../process.js';
4
+ import { watchTypecheck } from './typecheck.js';
4
5
  export async function runUi(command, root) {
5
6
  const config = await loadBuilderConfig(root);
6
7
  const { createRsbuild } = await import('@rsbuild/core');
@@ -11,7 +12,7 @@ export async function runUi(command, root) {
11
12
  });
12
13
  if (command === 'ui:start') {
13
14
  const result = await rsbuild.startDevServer();
14
- closeOnSignal(() => result.server.close());
15
+ await watchTypecheck(root, () => result.server.close());
15
16
  }
16
17
  else if (command === 'ui:preview') {
17
18
  const result = await rsbuild.preview();
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/cli/handlers/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAe,EAAE,IAAY;IACrD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;QAChC,GAAG,EAAE,IAAI;QACT,aAAa,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;QAC3C,OAAO,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;QAC9C,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACvC,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/cli/handlers/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAe,EAAE,IAAY;IACrD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;QAChC,GAAG,EAAE,IAAI;QACT,aAAa,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;QAC3C,OAAO,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;QAC9C,MAAM,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACvC,aAAa,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACL,CAAC"}
@@ -1,3 +1,5 @@
1
- export declare function runNode(bin: string, args: string[], root: string): Promise<number>;
2
- export declare function closeOnSignal(close: () => Promise<void>): void;
1
+ import { type ChildProcess } from 'node:child_process';
2
+ export declare function stopNode(child: ChildProcess): void;
3
+ export declare function runNode(bin: string, args: string[], root: string, signal?: AbortSignal): Promise<number>;
4
+ export declare function closeOnSignal(close: () => Promise<void>): () => void;
3
5
  //# sourceMappingURL=process.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/cli/process.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBlF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAgB9D"}
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/cli/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEzE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAclD;AAED,wBAAgB,OAAO,CACnB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,MAAM,CAAC,CAwBjB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAoBpE"}
@@ -1,21 +1,41 @@
1
- import { spawn } from 'node:child_process';
2
- export function runNode(bin, args, root) {
1
+ import { spawn, spawnSync } from 'node:child_process';
2
+ export function stopNode(child) {
3
+ if (!child.pid || child.exitCode !== null || child.signalCode !== null) {
4
+ return;
5
+ }
6
+ if (process.platform === 'win32') {
7
+ const result = spawnSync('taskkill', ['/pid', String(child.pid), '/T', '/F'], {
8
+ stdio: 'ignore',
9
+ windowsHide: true,
10
+ });
11
+ if (result.status === 0) {
12
+ return;
13
+ }
14
+ }
15
+ child.kill('SIGTERM');
16
+ }
17
+ export function runNode(bin, args, root, signal) {
3
18
  return new Promise((resolveCode, reject) => {
4
19
  const child = spawn(process.execPath, [bin, ...args], { cwd: root, stdio: 'inherit' });
5
- const stop = () => child.kill('SIGTERM');
20
+ const stop = () => stopNode(child);
6
21
  process.once('SIGINT', stop);
7
22
  process.once('SIGTERM', stop);
23
+ signal?.addEventListener('abort', stop, { once: true });
24
+ if (signal?.aborted) {
25
+ stop();
26
+ }
8
27
  const removeListeners = () => {
9
28
  process.removeListener('SIGINT', stop);
10
29
  process.removeListener('SIGTERM', stop);
30
+ signal?.removeEventListener('abort', stop);
11
31
  };
12
32
  child.once('error', (error) => {
13
33
  removeListeners();
14
34
  reject(error);
15
35
  });
16
- child.once('exit', (code, signal) => {
36
+ child.once('exit', (code, exitSignal) => {
17
37
  removeListeners();
18
- resolveCode(code ?? (signal ? 130 : 1));
38
+ resolveCode(code ?? (exitSignal ? 130 : 1));
19
39
  });
20
40
  });
21
41
  }
@@ -32,5 +52,9 @@ export function closeOnSignal(close) {
32
52
  };
33
53
  process.once('SIGINT', stop);
34
54
  process.once('SIGTERM', stop);
55
+ return () => {
56
+ process.removeListener('SIGINT', stop);
57
+ process.removeListener('SIGTERM', stop);
58
+ };
35
59
  }
36
60
  //# sourceMappingURL=process.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/cli/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,IAAc,EAAE,IAAY;IAC7D,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACvF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,eAAe,GAAG,GAAG,EAAE;YACzB,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,eAAe,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,eAAe,EAAE,CAAC;YAClB,WAAW,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA0B;IACpD,MAAM,IAAI,GAAG,GAAG,EAAE;QACd,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACxC,KAAK,KAAK,EAAE,CAAC,IAAI,CACb,GAAG,EAAE;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACzB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACzB,CAAC,CACJ,CAAC;IACN,CAAC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/cli/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AAEzE,MAAM,UAAU,QAAQ,CAAC,KAAmB;IACxC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QACrE,OAAO;IACX,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;YAC1E,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO;QACX,CAAC;IACL,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,OAAO,CACnB,GAAW,EACX,IAAc,EACd,IAAY,EACZ,MAAoB;IAEpB,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACvF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YAClB,IAAI,EAAE,CAAC;QACX,CAAC;QACD,MAAM,eAAe,GAAG,GAAG,EAAE;YACzB,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,eAAe,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;YACpC,eAAe,EAAE,CAAC;YAClB,WAAW,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA0B;IACpD,MAAM,IAAI,GAAG,GAAG,EAAE;QACd,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACxC,KAAK,KAAK,EAAE,CAAC,IAAI,CACb,GAAG,EAAE;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACzB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACzB,CAAC,CACJ,CAAC;IACN,CAAC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9B,OAAO,GAAG,EAAE;QACR,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/configs/library.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIjE,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,UAAQ,GACd,WAAW,CA+Bb"}
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/configs/library.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIjE,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,UAAQ,GACd,WAAW,CA8Bb"}
@@ -1,7 +1,7 @@
1
1
  import { resolve } from 'node:path';
2
2
  import { mergeRsbuildConfig } from '@rsbuild/core';
3
3
  import { pluginReact } from '@rsbuild/plugin-react';
4
- import { typeCheckPlugin, typescriptPath } from './typescript.js';
4
+ import { typescriptPath } from './typescript.js';
5
5
  export function createLibraryConfig(config, root, watch = false) {
6
6
  // clientConfig belongs to browser UIs and Storybook, never to the library output.
7
7
  const merged = mergeRsbuildConfig({
@@ -21,7 +21,6 @@ export function createLibraryConfig(config, root, watch = false) {
21
21
  }, config.rsbuildConfig);
22
22
  return {
23
23
  ...merged,
24
- plugins: [...(merged.plugins ?? []), ...(watch ? [typeCheckPlugin(root)] : [])],
25
24
  lib: [
26
25
  {
27
26
  format: 'esm',
@@ -1 +1 @@
1
- {"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/configs/library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,UAAU,mBAAmB,CAC/B,MAA4B,EAC5B,IAAY,EACZ,KAAK,GAAG,KAAK;IAEb,kFAAkF;IAClF,MAAM,MAAM,GAAG,kBAAkB,CAC7B;QACI,MAAM,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,IAAI;gBAC1C,KAAK,EAAE;oBACH,UAAU;oBACV,oBAAoB;oBACpB,oBAAoB;oBACpB,uBAAuB;iBAC1B;aACJ;YACD,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,8CAA8C,CAAC;SAC9E;QACD,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACrD,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;KAC3B,EACD,MAAM,CAAC,aAAa,CACvB,CAAC;IACF,OAAO;QACH,GAAG,MAAM;QACT,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/E,GAAG,EAAE;YACD;gBACI,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE;aAC/D;SACJ;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/configs/library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,UAAU,mBAAmB,CAC/B,MAA4B,EAC5B,IAAY,EACZ,KAAK,GAAG,KAAK;IAEb,kFAAkF;IAClF,MAAM,MAAM,GAAG,kBAAkB,CAC7B;QACI,MAAM,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,IAAI;gBAC1C,KAAK,EAAE;oBACH,UAAU;oBACV,oBAAoB;oBACpB,oBAAoB;oBACpB,uBAAuB;iBAC1B;aACJ;YACD,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,8CAA8C,CAAC;SAC9E;QACD,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACrD,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;KAC3B,EACD,MAAM,CAAC,aAAa,CACvB,CAAC;IACF,OAAO;QACH,GAAG,MAAM;QACT,GAAG,EAAE;YACD;gBACI,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE;aAC/D;SACJ;KACJ,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/configs/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAMjE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAqBpE"}
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/configs/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAMjE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CA0BpE"}
@@ -5,12 +5,16 @@ export function normalizeConfig(value) {
5
5
  if (!isObject(value)) {
6
6
  throw new Error('koslibs-builder.ts must default-export a configuration object.');
7
7
  }
8
- const { port, rsbuildConfig, clientConfig } = value;
8
+ const { port, rsbuildConfig, clientConfig, storybookViteConfig } = value;
9
9
  if (port !== undefined &&
10
10
  (!Number.isInteger(port) || Number(port) < 1 || Number(port) > 65535)) {
11
11
  throw new Error('port must be an integer between 1 and 65535.');
12
12
  }
13
- for (const [name, field] of Object.entries({ rsbuildConfig, clientConfig })) {
13
+ for (const [name, field] of Object.entries({
14
+ rsbuildConfig,
15
+ clientConfig,
16
+ storybookViteConfig,
17
+ })) {
14
18
  if (field !== undefined && !isObject(field)) {
15
19
  throw new Error(`${name} must be a configuration object.`);
16
20
  }
@@ -19,6 +23,7 @@ export function normalizeConfig(value) {
19
23
  port: port,
20
24
  rsbuildConfig: rsbuildConfig,
21
25
  clientConfig: clientConfig,
26
+ storybookViteConfig: storybookViteConfig,
22
27
  };
23
28
  }
24
29
  //# sourceMappingURL=normalize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/configs/normalize.ts"],"names":[],"mappings":"AAEA,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IACpD,IACI,IAAI,KAAK,SAAS;QAClB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EACvE,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAC1E,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kCAAkC,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IACD,OAAO;QACH,IAAI,EAAE,IAA0B;QAChC,aAAa,EAAE,aAAsD;QACrE,YAAY,EAAE,YAAoD;KACrE,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/configs/normalize.ts"],"names":[],"mappings":"AAEA,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;IACzE,IACI,IAAI,KAAK,SAAS;QAClB,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EACvE,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;QACvC,aAAa;QACb,YAAY;QACZ,mBAAmB;KACtB,CAAC,EAAE,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kCAAkC,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IACD,OAAO;QACH,IAAI,EAAE,IAA0B;QAChC,aAAa,EAAE,aAAsD;QACrE,YAAY,EAAE,YAAoD;QAClE,mBAAmB,EAAE,mBAAkE;KAC1F,CAAC;AACN,CAAC"}
@@ -1,6 +1,6 @@
1
- import { type RsbuildConfig } from '@rsbuild/core';
1
+ import { type UserConfig } from 'vite';
2
2
  import type { KoslibsBuilderConfig } from '../typings/config.js';
3
3
  import type { StorybookConfig } from '../typings/storybook.js';
4
- export declare function createStorybookRsbuildConfig(config: KoslibsBuilderConfig): RsbuildConfig;
4
+ export declare function createStorybookViteConfig(config: KoslibsBuilderConfig, root: string): UserConfig;
5
5
  export declare function createStorybookConfig(root?: string): Promise<StorybookConfig>;
6
6
  //# sourceMappingURL=storybook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storybook.d.ts","sourceRoot":"","sources":["../../src/configs/storybook.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM/D,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CAYxF;AAED,wBAAsB,qBAAqB,CAAC,IAAI,SAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmB1F"}
1
+ {"version":3,"file":"storybook.d.ts","sourceRoot":"","sources":["../../src/configs/storybook.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM/D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAKhG;AAED,wBAAsB,qBAAqB,CAAC,IAAI,SAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoB1F"}
@@ -1,35 +1,30 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
- import { mergeRsbuildConfig } from '@rsbuild/core';
3
+ import { mergeConfig } from 'vite';
4
4
  import { packageDirectory } from '../utils/packages.js';
5
- import { createClientDefaults } from './defaults.js';
5
+ import { writeGeneratedConfig } from './generated.js';
6
6
  import { loadBuilderConfig } from './load.js';
7
- export function createStorybookRsbuildConfig(config) {
8
- const defaults = createClientDefaults();
9
- const merged = mergeRsbuildConfig(defaults, config.rsbuildConfig, config.clientConfig);
10
- // Storybook owns its entry points, HTML, dev server and output directory.
11
- const { environments: _environments, server: _server, html: _html, ...common } = merged;
12
- const { entry: _entry, ...source } = common.source ?? {};
13
- const { distPath: _distPath, target: _target, ...output } = common.output ?? {};
14
- return { ...common, source, output };
7
+ export function createStorybookViteConfig(config, root) {
8
+ return mergeConfig(mergeConfig({ envPrefix: ['VITE_', 'PUBLIC_'] }, config.storybookViteConfig ?? {}), { root });
15
9
  }
16
10
  export async function createStorybookConfig(root = process.cwd()) {
17
11
  const config = await loadBuilderConfig(root);
12
+ const viteConfig = await writeGeneratedConfig(root, 'storybook-vite', 'export default {};\n');
18
13
  const preview = ['ts', 'tsx', 'js', 'jsx', 'mjs']
19
14
  .map((extension) => resolve(root, `.storybook/preview.${extension}`))
20
15
  .find((path) => existsSync(path));
21
16
  return {
22
17
  framework: {
23
- name: packageDirectory('storybook-react-rsbuild'),
24
- options: {},
18
+ name: packageDirectory('@storybook/react-vite'),
19
+ options: { builder: { viteConfigPath: viteConfig.file } },
25
20
  },
26
21
  stories: [resolve(root, 'src/**/*.stories.@(ts|tsx|js|jsx|mjs)').replaceAll('\\', '/')],
27
22
  addons: [packageDirectory('@storybook/addon-docs')],
28
23
  ...(preview ? { previewAnnotations: [preview] } : {}),
29
24
  ...(existsSync(resolve(root, 'public')) ? { staticDirs: [resolve(root, 'public')] } : {}),
30
- typescript: { check: true, reactDocgen: 'react-docgen-typescript' },
31
- async rsbuildFinal(base) {
32
- return mergeRsbuildConfig(base, createStorybookRsbuildConfig(config));
25
+ typescript: { check: false, reactDocgen: 'react-docgen-typescript' },
26
+ async viteFinal(base) {
27
+ return mergeConfig(base, createStorybookViteConfig(config, root));
33
28
  },
34
29
  };
35
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storybook.js","sourceRoot":"","sources":["../../src/configs/storybook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAsB,MAAM,eAAe,CAAC;AAIvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,UAAU,4BAA4B,CAAC,MAA4B;IACrE,MAAM,QAAQ,GAAkB,oBAAoB,EAAE,CAAC;IACvD,MAAM,MAAM,GAAkB,kBAAkB,CAC5C,QAAQ,EACR,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,YAAY,CACtB,CAAC;IACF,0EAA0E;IAC1E,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;IACxF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACzD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAChF,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;IAC5D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;SAC5C,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,sBAAsB,SAAS,EAAE,CAAC,CAAC;SACpE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,OAAO;QACH,SAAS,EAAE;YACP,IAAI,EAAE,gBAAgB,CAAC,yBAAyB,CAAC;YACjD,OAAO,EAAE,EAAE;SACd;QACD,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACvF,MAAM,EAAE,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QACnD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,yBAAyB,EAAE;QACnE,KAAK,CAAC,YAAY,CAAC,IAAI;YACnB,OAAO,kBAAkB,CAAC,IAAI,EAAE,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"storybook.js","sourceRoot":"","sources":["../../src/configs/storybook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAmB,MAAM,MAAM,CAAC;AAIpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,UAAU,yBAAyB,CAAC,MAA4B,EAAE,IAAY;IAChF,OAAO,WAAW,CACd,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC,EAClF,EAAE,IAAI,EAAE,CACX,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;IAC5D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,sBAAsB,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;SAC5C,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,sBAAsB,SAAS,EAAE,CAAC,CAAC;SACpE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,OAAO;QACH,SAAS,EAAE;YACP,IAAI,EAAE,gBAAgB,CAAC,uBAAuB,CAAC;YAC/C,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE;SAC5D;QACD,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACvF,MAAM,EAAE,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QACnD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE;QACpE,KAAK,CAAC,SAAS,CAAC,IAAI;YAChB,OAAO,WAAW,CAAC,IAAI,EAAE,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,3 +1,2 @@
1
1
  export declare const typescriptPath: string;
2
- export declare function typeCheckPlugin(root: string): import("@rsbuild/core").RsbuildPlugin;
3
2
  //# sourceMappingURL=typescript.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/configs/typescript.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,QAAgC,CAAC;AAE5D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,yCAM3C"}
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/configs/typescript.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,QAAgC,CAAC"}
@@ -1,13 +1,4 @@
1
1
  import { createRequire } from 'node:module';
2
- import { resolve } from 'node:path';
3
- import { pluginTypeCheck } from '@rsbuild/plugin-type-check';
4
2
  const require = createRequire(import.meta.url);
5
3
  export const typescriptPath = require.resolve('typescript');
6
- export function typeCheckPlugin(root) {
7
- return pluginTypeCheck({
8
- tsCheckerOptions: {
9
- typescript: { configFile: resolve(root, 'tsconfig.json'), typescriptPath },
10
- },
11
- });
12
- }
13
4
  //# sourceMappingURL=typescript.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/configs/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAE5D,MAAM,UAAU,eAAe,CAAC,IAAY;IACxC,OAAO,eAAe,CAAC;QACnB,gBAAgB,EAAE;YACd,UAAU,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,cAAc,EAAE;SAC7E;KACJ,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/configs/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/configs/ui.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAYjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAqBxF"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/configs/ui.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAWjE,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAoBxF"}
@@ -3,7 +3,6 @@ import { resolve } from 'node:path';
3
3
  import { mergeRsbuildConfig } from '@rsbuild/core';
4
4
  import { pluginReact } from '@rsbuild/plugin-react';
5
5
  import { createClientDefaults, DEFAULT_PORT } from './defaults.js';
6
- import { typeCheckPlugin } from './typescript.js';
7
6
  function defaultEntry(root, names) {
8
7
  return resolve(root, names.find((name) => existsSync(resolve(root, name))) ?? names[0]).replaceAll('\\', '/');
9
8
  }
@@ -22,7 +21,6 @@ export function createUiConfig(config, root) {
22
21
  }, config.rsbuildConfig, { environments: { client: config.clientConfig ?? {} } });
23
22
  return mergeRsbuildConfig(merged, {
24
23
  server: { port: config.port ?? config.rsbuildConfig?.server?.port ?? DEFAULT_PORT },
25
- plugins: [typeCheckPlugin(root)],
26
24
  });
27
25
  }
28
26
  //# sourceMappingURL=ui.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/configs/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAsB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,SAAS,YAAY,CAAC,IAAY,EAAE,KAAe;IAC/C,OAAO,OAAO,CACV,IAAI,EACJ,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CACpE,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAA4B,EAAE,IAAY;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC;IACxF,MAAM,MAAM,GAAG,kBAAkB,CAC7B;QACI,GAAG,oBAAoB,EAAE;QACzB,MAAM,EAAE;YACJ,KAAK,EAAE,KAAK,IAAI;gBACZ,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;aAC/E;YACD,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC;SAC/C;QACD,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE;QAChD,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;KAC3B,EACD,MAAM,CAAC,aAAa,EACpB,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,EAAE,CAC1D,CAAC;IACF,OAAO,kBAAkB,CAAC,MAAM,EAAE;QAC9B,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,IAAI,YAAY,EAAE;QACnF,OAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KACnC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/configs/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAsB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnE,SAAS,YAAY,CAAC,IAAY,EAAE,KAAe;IAC/C,OAAO,OAAO,CACV,IAAI,EACJ,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CACpE,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAA4B,EAAE,IAAY;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC;IACxF,MAAM,MAAM,GAAG,kBAAkB,CAC7B;QACI,GAAG,oBAAoB,EAAE;QACzB,MAAM,EAAE;YACJ,KAAK,EAAE,KAAK,IAAI;gBACZ,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;aAC/E;YACD,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC;SAC/C;QACD,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE;QAChD,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;KAC3B,EACD,MAAM,CAAC,aAAa,EACpB,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,EAAE,CAC1D,CAAC;IACF,OAAO,kBAAkB,CAAC,MAAM,EAAE;QAC9B,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,IAAI,YAAY,EAAE;KACtF,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from '@storybook/addon-docs/blocks';
2
+ //# sourceMappingURL=blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/storybook/blocks.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from '@storybook/addon-docs/blocks';
2
+ //# sourceMappingURL=blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/storybook/blocks.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC"}
@@ -1,5 +1,4 @@
1
- export { createBrowserTestConfig } from '../configs/browser-tests.js';
2
1
  export { findTestConfig } from '../configs/find-test.js';
3
2
  export { createUnitTestConfig } from '../configs/unit-tests.js';
4
- export type { BrowserTestKind, ProjectKind } from '../typings/testing.js';
3
+ export type { ProjectKind } from '../typings/testing.js';
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,4 +1,3 @@
1
- export { createBrowserTestConfig } from '../configs/browser-tests.js';
2
1
  export { findTestConfig } from '../configs/find-test.js';
3
2
  export { createUnitTestConfig } from '../configs/unit-tests.js';
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,8 +1,11 @@
1
1
  import type { EnvironmentConfig, RsbuildConfig } from '@rsbuild/core';
2
+ import type { UserConfig } from 'vite';
2
3
  /** Unknown properties are ignored by the CLI; only these fields are public. */
3
4
  export interface KoslibsBuilderConfig {
4
5
  rsbuildConfig?: RsbuildConfig;
5
6
  clientConfig?: EnvironmentConfig;
7
+ /** Vite options used only by Storybook. */
8
+ storybookViteConfig?: UserConfig;
6
9
  /** Shared dev-server port. Defaults to 8080. */
7
10
  port?: number;
8
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/typings/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEtE,+EAA+E;AAC/E,MAAM,WAAW,oBAAoB;IACjC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/typings/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,+EAA+E;AAC/E,MAAM,WAAW,oBAAoB;IACjC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,2CAA2C;IAC3C,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1,5 +1,5 @@
1
1
  export type { EnvironmentConfig, RsbuildConfig } from '@rsbuild/core';
2
2
  export type { KoslibsBuilderConfig } from './config.js';
3
3
  export type { CliOptions } from './cli.js';
4
- export type { BrowserTestKind, ProjectKind } from './testing.js';
4
+ export type { ProjectKind } from './testing.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/typings/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEtE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/typings/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEtE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
@@ -1,2 +1,2 @@
1
- export type { Meta, StoryObj, Preview, StorybookConfig } from 'storybook-react-rsbuild';
1
+ export type { Meta, StoryObj, Preview, StorybookConfig } from '@storybook/react-vite';
2
2
  //# sourceMappingURL=storybook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storybook.d.ts","sourceRoot":"","sources":["../../src/typings/storybook.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"storybook.d.ts","sourceRoot":"","sources":["../../src/typings/storybook.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,3 +1,2 @@
1
1
  export type ProjectKind = 'ui' | 'lib';
2
- export type BrowserTestKind = 'e2e' | 'screenshots';
3
2
  //# sourceMappingURL=testing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/typings/testing.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,CAAC;AACvC,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,aAAa,CAAC"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/typings/testing.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,KAAK,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koslibs/builder",
3
- "version": "0.1.0",
3
+ "version": "2.0.0",
4
4
  "description": "Shared React application and ESM library toolchain powered by Rspack",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -25,6 +25,10 @@
25
25
  "types": "./dist/storybook/index.d.ts",
26
26
  "import": "./dist/storybook/index.js"
27
27
  },
28
+ "./storybook/blocks": {
29
+ "types": "./dist/storybook/blocks.d.ts",
30
+ "import": "./dist/storybook/blocks.js"
31
+ },
28
32
  "./testing": {
29
33
  "types": "./dist/testing/index.d.ts",
30
34
  "import": "./dist/testing/index.js"
@@ -33,15 +37,12 @@
33
37
  "types": "./dist/testing/rstest.d.ts",
34
38
  "import": "./dist/testing/rstest.js"
35
39
  },
36
- "./playwright": {
37
- "types": "./dist/testing/playwright.d.ts",
38
- "import": "./dist/testing/playwright.js"
39
- },
40
40
  "./package.json": "./package.json"
41
41
  },
42
42
  "files": [
43
43
  "dist",
44
44
  "README.md",
45
+ "CHANGELOG.md",
45
46
  "LICENSE"
46
47
  ],
47
48
  "scripts": {
@@ -59,33 +60,40 @@
59
60
  "format": "koslibs-lint format",
60
61
  "format:check": "koslibs-lint format:check",
61
62
  "prepack": "node scripts/build.mjs",
62
- "version-package:patch": "npm version patch --no-git-tag-version",
63
- "release": "npm publish --access public"
63
+ "changeset": "koslibs-release add",
64
+ "changeset:check": "koslibs-release check",
65
+ "version-package": "koslibs-release version",
66
+ "release": "koslibs-release publish",
67
+ "prepare": "koslibs-release hooks:install"
68
+ },
69
+ "commitlint": {
70
+ "extends": [
71
+ "@koslibs/configs/commitlint"
72
+ ]
64
73
  },
65
74
  "dependencies": {
66
- "@playwright/test": "1.63.0",
67
75
  "@rsbuild/core": "2.2.11",
68
76
  "@rsbuild/plugin-react": "2.1.1",
69
- "@rsbuild/plugin-type-check": "1.6.0",
70
77
  "@rslib/core": "1.0.3",
71
78
  "@rstest/core": "0.12.3",
72
79
  "@rstest/coverage-istanbul": "0.12.3",
73
80
  "@storybook/addon-docs": "10.6.1",
81
+ "@storybook/react-vite": "10.6.1",
74
82
  "happy-dom": "20.14.5",
75
83
  "storybook": "10.6.1",
76
- "storybook-react-rsbuild": "3.6.0",
77
- "typescript": "5.9.3"
84
+ "typescript": "6.0.3",
85
+ "vite": "8.3.2"
78
86
  },
79
87
  "devDependencies": {
80
- "@koslibs/configs": "0.2.11",
81
- "@types/node": "^24.0.0",
82
- "@types/react": "^18.3.0",
83
- "@types/react-dom": "^18.3.0",
84
- "react": "18.3.1",
85
- "react-dom": "18.3.1"
88
+ "@koslibs/configs": "^2.0.0",
89
+ "@types/node": "^24.19.1",
90
+ "@types/react": "^19.3.0",
91
+ "@types/react-dom": "^19.3.0",
92
+ "react": "19.3.0",
93
+ "react-dom": "19.3.0"
86
94
  },
87
95
  "peerDependencies": {
88
- "@koslibs/configs": "^0.2.11",
96
+ "@koslibs/configs": "^2.0.0",
89
97
  "react": "^18.3.1 || ^19.0.0",
90
98
  "react-dom": "^18.3.1 || ^19.0.0"
91
99
  },
@@ -1,4 +0,0 @@
1
- import type { PlaywrightTestConfig } from '@playwright/test';
2
- import type { BrowserTestKind, ProjectKind } from '../typings/testing.js';
3
- export declare function createBrowserTestConfig(kind: ProjectKind, suite: BrowserTestKind, root?: string): Promise<PlaywrightTestConfig>;
4
- //# sourceMappingURL=browser-tests.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-tests.d.ts","sourceRoot":"","sources":["../../src/configs/browser-tests.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAM1E,wBAAsB,uBAAuB,CACzC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,eAAe,EACtB,IAAI,SAAgB,GACrB,OAAO,CAAC,oBAAoB,CAAC,CAsB/B"}
@@ -1,29 +0,0 @@
1
- import { resolve } from 'node:path';
2
- import { fileURLToPath } from 'node:url';
3
- import { createPlaywrightConfig } from '@koslibs/configs/playwright';
4
- import { quote } from '../utils/shell.js';
5
- import { DEFAULT_PORT } from './defaults.js';
6
- import { loadBuilderConfig } from './load.js';
7
- export async function createBrowserTestConfig(kind, suite, root = process.cwd()) {
8
- const config = await loadBuilderConfig(root);
9
- const port = config.port ?? config.rsbuildConfig?.server?.port ?? DEFAULT_PORT;
10
- const cli = fileURLToPath(new URL('../cli/index.js', import.meta.url));
11
- const command = kind === 'ui' ? 'ui:start' : 'storybook:start';
12
- return createPlaywrightConfig({
13
- testDir: resolve(root, 'playwright'),
14
- testMatch: suite === 'screenshots'
15
- ? '**/*.screenshots.spec.{ts,tsx,js,mjs}'
16
- : '**/*.spec.{ts,tsx,js,mjs}',
17
- ...(suite === 'e2e' ? { testIgnore: '**/*.screenshots.spec.*' } : {}),
18
- outputDir: resolve(root, 'test-results', suite),
19
- use: { baseURL: `http://localhost:${port}`, browserName: 'chromium' },
20
- webServer: {
21
- command: `${quote(process.execPath)} ${quote(cli)} ${command} --root ${quote(root)}`,
22
- cwd: root,
23
- url: `http://localhost:${port}`,
24
- reuseExistingServer: !process.env.CI,
25
- timeout: 120000,
26
- },
27
- });
28
- }
29
- //# sourceMappingURL=browser-tests.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-tests.js","sourceRoot":"","sources":["../../src/configs/browser-tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAIrE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CACzC,IAAiB,EACjB,KAAsB,EACtB,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;IAEpB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,IAAI,YAAY,CAAC;IAC/E,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC/D,OAAO,sBAAsB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;QACpC,SAAS,EACL,KAAK,KAAK,aAAa;YACnB,CAAC,CAAC,uCAAuC;YACzC,CAAC,CAAC,2BAA2B;QACrC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC;QAC/C,GAAG,EAAE,EAAE,OAAO,EAAE,oBAAoB,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;QACrE,SAAS,EAAE;YACP,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,WAAW,KAAK,CAAC,IAAI,CAAC,EAAE;YACpF,GAAG,EAAE,IAAI;YACT,GAAG,EAAE,oBAAoB,IAAI,EAAE;YAC/B,mBAAmB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACpC,OAAO,EAAE,MAAM;SAClB;KACJ,CAAC,CAAC;AACP,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from '@playwright/test';
2
- //# sourceMappingURL=playwright.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../src/testing/playwright.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from '@playwright/test';
2
- //# sourceMappingURL=playwright.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwright.js","sourceRoot":"","sources":["../../src/testing/playwright.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}