@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.
- package/CHANGELOG.md +19 -0
- package/README.md +88 -54
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +0 -2
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/handlers/library.d.ts.map +1 -1
- package/dist/cli/handlers/library.js +2 -2
- package/dist/cli/handlers/library.js.map +1 -1
- package/dist/cli/handlers/storybook.d.ts.map +1 -1
- package/dist/cli/handlers/storybook.js +22 -1
- package/dist/cli/handlers/storybook.js.map +1 -1
- package/dist/cli/handlers/tests.d.ts.map +1 -1
- package/dist/cli/handlers/tests.js +3 -20
- package/dist/cli/handlers/tests.js.map +1 -1
- package/dist/cli/handlers/typecheck.d.ts +2 -0
- package/dist/cli/handlers/typecheck.d.ts.map +1 -1
- package/dist/cli/handlers/typecheck.js +49 -1
- package/dist/cli/handlers/typecheck.js.map +1 -1
- package/dist/cli/handlers/ui.d.ts.map +1 -1
- package/dist/cli/handlers/ui.js +2 -1
- package/dist/cli/handlers/ui.js.map +1 -1
- package/dist/cli/process.d.ts +4 -2
- package/dist/cli/process.d.ts.map +1 -1
- package/dist/cli/process.js +29 -5
- package/dist/cli/process.js.map +1 -1
- package/dist/configs/library.d.ts.map +1 -1
- package/dist/configs/library.js +1 -2
- package/dist/configs/library.js.map +1 -1
- package/dist/configs/normalize.d.ts.map +1 -1
- package/dist/configs/normalize.js +7 -2
- package/dist/configs/normalize.js.map +1 -1
- package/dist/configs/storybook.d.ts +2 -2
- package/dist/configs/storybook.d.ts.map +1 -1
- package/dist/configs/storybook.js +10 -15
- package/dist/configs/storybook.js.map +1 -1
- package/dist/configs/typescript.d.ts +0 -1
- package/dist/configs/typescript.d.ts.map +1 -1
- package/dist/configs/typescript.js +0 -9
- package/dist/configs/typescript.js.map +1 -1
- package/dist/configs/ui.d.ts.map +1 -1
- package/dist/configs/ui.js +0 -2
- package/dist/configs/ui.js.map +1 -1
- package/dist/storybook/blocks.d.ts +2 -0
- package/dist/storybook/blocks.d.ts.map +1 -0
- package/dist/storybook/blocks.js +2 -0
- package/dist/storybook/blocks.js.map +1 -0
- package/dist/testing/index.d.ts +1 -2
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +0 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/typings/config.d.ts +3 -0
- package/dist/typings/config.d.ts.map +1 -1
- package/dist/typings/index.d.ts +1 -1
- package/dist/typings/index.d.ts.map +1 -1
- package/dist/typings/storybook.d.ts +1 -1
- package/dist/typings/storybook.d.ts.map +1 -1
- package/dist/typings/testing.d.ts +0 -1
- package/dist/typings/testing.d.ts.map +1 -1
- package/package.json +26 -18
- package/dist/configs/browser-tests.d.ts +0 -4
- package/dist/configs/browser-tests.d.ts.map +0 -1
- package/dist/configs/browser-tests.js +0 -29
- package/dist/configs/browser-tests.js.map +0 -1
- package/dist/testing/playwright.d.ts +0 -2
- package/dist/testing/playwright.d.ts.map +0 -1
- package/dist/testing/playwright.js +0 -2
- 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.
|
|
15
|
+
`@koslibs/configs` — обязательная peer-зависимость builder с диапазоном `^1.0.0`.
|
|
16
16
|
Builder использует версию configs, установленную в проекте.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
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
|
|
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`
|
|
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 управляет
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
217
|
-
|
|
218
|
-
|
|
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
|
-
|
|
228
|
-
API тестов и типы stories доступны через builder, поэтому отдельные зависимости на
|
|
229
|
-
тестовые инструменты в проекте не обязательны:
|
|
222
|
+
Настройки Storybook задаются через `storybookViteConfig` в `koslibs-builder.ts`:
|
|
230
223
|
|
|
231
224
|
```ts
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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
|
-
|
|
241
|
-
`
|
|
242
|
-
|
|
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
|
-
|
|
245
|
-
В пользовательском Playwright-конфиге помечай screenshot-тесты тегом `@screenshots`:
|
|
246
|
-
builder выбирает E2E/screenshot-suite через grep. При таком конфиге запуск сервера
|
|
247
|
-
и остальные настройки контролирует сам проект. Общие фабрики доступны из
|
|
248
|
-
`@koslibs/builder/testing`, можно расширять их через обычные конфиги инструментов.
|
|
249
|
-
Тестовые и Storybook-флаги передаются дальше:
|
|
244
|
+
## Тесты
|
|
250
245
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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
|
|
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
|
|
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,
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,UAgBpB,CAAC"}
|
package/dist/cli/commands.js
CHANGED
package/dist/cli/commands.js.map
CHANGED
|
@@ -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;
|
|
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":"
|
|
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 {
|
|
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
|
-
|
|
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;
|
|
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":"
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
|
12
|
-
|
|
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,
|
|
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":"
|
|
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;
|
|
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":"
|
|
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"}
|
package/dist/cli/handlers/ui.js
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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"}
|
package/dist/cli/process.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function
|
|
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":"
|
|
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"}
|
package/dist/cli/process.js
CHANGED
|
@@ -1,21 +1,41 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
export function
|
|
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
|
|
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,
|
|
36
|
+
child.once('exit', (code, exitSignal) => {
|
|
17
37
|
removeListeners();
|
|
18
|
-
resolveCode(code ?? (
|
|
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
|
package/dist/cli/process.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/cli/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,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,
|
|
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"}
|
package/dist/configs/library.js
CHANGED
|
@@ -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 {
|
|
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,
|
|
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,
|
|
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({
|
|
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;
|
|
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
|
|
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
|
|
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,
|
|
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 {
|
|
3
|
+
import { mergeConfig } from 'vite';
|
|
4
4
|
import { packageDirectory } from '../utils/packages.js';
|
|
5
|
-
import {
|
|
5
|
+
import { writeGeneratedConfig } from './generated.js';
|
|
6
6
|
import { loadBuilderConfig } from './load.js';
|
|
7
|
-
export function
|
|
8
|
-
|
|
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
|
|
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:
|
|
31
|
-
async
|
|
32
|
-
return
|
|
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,
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/configs/typescript.ts"],"names":[],"mappings":"
|
|
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;
|
|
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"}
|
package/dist/configs/ui.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/configs/ui.js
CHANGED
|
@@ -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
|
package/dist/configs/ui.js.map
CHANGED
|
@@ -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;
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/storybook/blocks.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/storybook/blocks.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC"}
|
package/dist/testing/index.d.ts
CHANGED
|
@@ -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 {
|
|
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,
|
|
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"}
|
package/dist/testing/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
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"}
|
package/dist/typings/config.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/typings/index.d.ts
CHANGED
|
@@ -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 {
|
|
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,
|
|
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
|
|
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,
|
|
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 +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
|
|
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.
|
|
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
|
-
"
|
|
63
|
-
"
|
|
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
|
-
"
|
|
77
|
-
"
|
|
84
|
+
"typescript": "6.0.3",
|
|
85
|
+
"vite": "8.3.2"
|
|
78
86
|
},
|
|
79
87
|
"devDependencies": {
|
|
80
|
-
"@koslibs/configs": "0.
|
|
81
|
-
"@types/node": "^24.
|
|
82
|
-
"@types/react": "^
|
|
83
|
-
"@types/react-dom": "^
|
|
84
|
-
"react": "
|
|
85
|
-
"react-dom": "
|
|
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.
|
|
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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../src/testing/playwright.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.js","sourceRoot":"","sources":["../../src/testing/playwright.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|