@mirta/rollup 0.3.5 → 0.4.1
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/README.md +100 -10
- package/README.ru.md +99 -11
- package/dist/config-package.d.mts +18 -0
- package/dist/config-package.mjs +36 -0
- package/dist/config.d.mts +12 -0
- package/dist/config.mjs +24 -0
- package/dist/errors.mjs +185 -0
- package/dist/index.d.mts +39 -24
- package/dist/index.mjs +8 -6
- package/dist/package.mjs +1030 -0
- package/dist/runtime.mjs +75 -1350
- package/package.json +46 -34
- package/dist/configs/index.d.mts +0 -19
- package/dist/configs/index.mjs +0 -47
package/README.md
CHANGED
|
@@ -3,20 +3,110 @@
|
|
|
3
3
|
[](https://github.com/wb-mirta/core/blob/latest/packages/mirta-rollup/README.md)
|
|
4
4
|
[](https://github.com/wb-mirta/core/blob/latest/packages/mirta-rollup/README.ru.md)
|
|
5
5
|
[](https://npmjs.com/package/@mirta/rollup)
|
|
6
|
+
[](https://npmjs.com/package/@mirta/rollup)
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
> Zero-config Rollup configurations with customization support,
|
|
9
|
+
> plus public APIs for loading `.env` files and resolving project context with workspace support.
|
|
10
|
+
|
|
11
|
+
`@mirta/rollup` is the **core build tool** in the MIRTA ecosystem.
|
|
12
|
+
It provides:
|
|
13
|
+
- Zero-config Rollup presets for building projects for Wiren Board controllers and for publishing to NPM.
|
|
14
|
+
- Config factories for customization.
|
|
15
|
+
- Utilities for loading environment variables.
|
|
16
|
+
- Project context resolution based on `@mirta/workspace`.
|
|
17
|
+
|
|
18
|
+
Used by both the Mirta framework itself and projects generated via `create-mirta`.
|
|
19
|
+
**Not intended for execution in Duktape on Wiren Board controllers.**
|
|
20
|
+
|
|
21
|
+
## 🧩 Build Modes
|
|
22
|
+
|
|
23
|
+
### 1. `@mirta/rollup/config` — Build for Controller
|
|
24
|
+
|
|
25
|
+
For automation projects based on [wb-rules](https://github.com/wirenboard/wb-rules), running on Wiren Board controllers.
|
|
26
|
+
|
|
27
|
+
#### Usage
|
|
8
28
|
|
|
9
|
-
## Installation
|
|
10
29
|
```sh
|
|
30
|
+
## Installation
|
|
11
31
|
pnpm add -D @mirta/rollup
|
|
32
|
+
|
|
33
|
+
# Build without rollup.config.mjs
|
|
34
|
+
rollup -c node:@mirta/rollup/config
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
#### Features
|
|
39
|
+
|
|
40
|
+
- Input: `src/wb-rules/*.[jt]s`
|
|
41
|
+
- Format: `cjs`
|
|
42
|
+
- Compatibility: `Babel` + `@mirta/polyfills`
|
|
43
|
+
- Automatic `require()` adaptation via internal `wb-rules-imports` plugin
|
|
44
|
+
- Environment variables:
|
|
45
|
+
- Loaded from `.env*` files
|
|
46
|
+
- Filtered by prefixes: `MIRTA_`, `APP_`
|
|
47
|
+
- Monorepo support: uses `@mirta/workspace` for correct dependency resolution
|
|
48
|
+
|
|
49
|
+
✅ Automatically added as a devDependency to projects generated by `create-mirta` — used for their build.
|
|
50
|
+
|
|
51
|
+
### 2. `@mirta/rollup/config-package` — NPM Package Build
|
|
52
|
+
|
|
53
|
+
For projects distributed via NPM as modular components of the Mirta ecosystem.
|
|
54
|
+
|
|
55
|
+
#### Usage
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
# Without rollup.config.mjs
|
|
59
|
+
rollup -c node:@mirta/rollup/config-package
|
|
60
|
+
|
|
61
|
+
# For CLI tools without exports
|
|
62
|
+
rollup -c node:@mirta/rollup/config-package --config-skip-exports
|
|
63
|
+
|
|
12
64
|
```
|
|
13
|
-
## Usage
|
|
14
|
-
```mjs
|
|
15
|
-
// rollup.config.mjs
|
|
16
|
-
import { defineConfig } from '@mirta/rollup'
|
|
17
65
|
|
|
66
|
+
#### Features
|
|
67
|
+
|
|
68
|
+
- Input: `src/index.ts`
|
|
69
|
+
- Format: `es` → `.mjs`
|
|
70
|
+
- Validation: ensures `src/` ↔ `package.json#exports` alignment
|
|
71
|
+
- Type generation: `.d.mts` via `rollup-plugin-dts` with alias fixing
|
|
72
|
+
- External dependencies: correctly resolved using `@mirta/workspace`
|
|
73
|
+
|
|
74
|
+
✅ Automatically added to packages generated by create-mirta with the "distributable module" template.
|
|
75
|
+
|
|
76
|
+
## 🛠 Configuration Factories (for customization)
|
|
77
|
+
|
|
78
|
+
For full control, use direct functions:
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
import { defineConfig, definePackageConfig } from '@mirta/rollup'
|
|
82
|
+
|
|
83
|
+
// For controller projects
|
|
18
84
|
export default defineConfig({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
85
|
+
cwd: process.cwd(),
|
|
86
|
+
external: [/^lodash/],
|
|
87
|
+
envLoader: {
|
|
88
|
+
prefix: 'APP_',
|
|
89
|
+
},
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
// For packages
|
|
93
|
+
export default definePackageConfig({
|
|
94
|
+
cwd: process.cwd(),
|
|
95
|
+
input: 'src/main.ts',
|
|
96
|
+
external: ['some-legacy-dep'],
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
### Advantages
|
|
101
|
+
- Follows the framework's build standards
|
|
102
|
+
- Allows extending default behavior
|
|
103
|
+
- Ideal for complex projects
|
|
104
|
+
|
|
105
|
+
## 🔄 Architectural Role
|
|
106
|
+
|
|
107
|
+
The package ensures **consistency** and **predictability** across the entire ecosystem:
|
|
108
|
+
|
|
109
|
+
- All framework packages are built using `@mirta/rollup`.
|
|
110
|
+
- Projects generated by `create-mirta` use the `@mirta/rollup/config` and `@mirta/rollup/config-package` configurations, ensuring a unified build standard for `wb-rules`.
|
|
111
|
+
|
|
112
|
+
This creates a **closed trust chain**: the tool that generates a project has itself gone through the same process as its output.
|
package/README.ru.md
CHANGED
|
@@ -3,20 +3,108 @@
|
|
|
3
3
|
[](https://github.com/wb-mirta/core/blob/latest/packages/mirta-rollup/README.md)
|
|
4
4
|
[](https://github.com/wb-mirta/core/blob/latest/packages/mirta-rollup/README.ru.md)
|
|
5
5
|
[](https://npmjs.com/package/@mirta/rollup)
|
|
6
|
+
[](https://npmjs.com/package/@mirta/rollup)
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
> Готовые конфигурации сборки с zero-config и возможностью кастомизации,
|
|
9
|
+
> а также публичные API для загрузки `.env`-файлов и определения контекста проекта.
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
`@mirta/rollup` — это **основной инструмент сборки** экосистемы на базе фреймворка Мирта.
|
|
12
|
+
|
|
13
|
+
Он предоставляет:
|
|
14
|
+
- Готовые zero-config конфигурации для сборки под контроллеры Wiren Board и для публикации на NPM.
|
|
15
|
+
- Фабрики конфигураций для кастомизации.
|
|
16
|
+
- Утилиты для загрузки переменных окружения.
|
|
17
|
+
- Работу с контекстом проекта — на основе `@mirta/workspace`.
|
|
18
|
+
|
|
19
|
+
Используется как самим фреймворком, так и проектами, созданными через `create-mirta`.<br/>
|
|
20
|
+
**Не предназначен для выполнения в среде Duktape на контроллерах Wiren Board.**
|
|
21
|
+
|
|
22
|
+
## 🧩 Режимы сборки
|
|
23
|
+
|
|
24
|
+
### 1. `@mirta/rollup/config` — сборка под контроллер
|
|
25
|
+
|
|
26
|
+
Для проектов автоматизации на базе [wb-rules](https://github.com/wirenboard/wb-rules), исполняемых на контроллерах Wiren Board.
|
|
27
|
+
|
|
28
|
+
#### Использование
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Установка
|
|
11
32
|
pnpm add -D @mirta/rollup
|
|
33
|
+
|
|
34
|
+
# Сборка без rollup.config.mjs
|
|
35
|
+
rollup -c node:@mirta/rollup/config
|
|
12
36
|
```
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
37
|
+
#### Особенности
|
|
38
|
+
|
|
39
|
+
- Вход: `src/wb-rules/*.[jt]s`;
|
|
40
|
+
- Формат: `cjs`;
|
|
41
|
+
- Совместимость: Babel + `@mirta/polyfills`;
|
|
42
|
+
- Автоматическая адаптация `require()` через внутренний плагин `wb-rules-imports`;
|
|
43
|
+
- Переменные окружения:
|
|
44
|
+
- загружаются из `.env*` файлов;
|
|
45
|
+
- фильтруются по префиксам: `MIRTA_`, `APP_`;
|
|
46
|
+
- Поддержка монорепозиториев: использует `@mirta/workspace` для корректного разрешения зависимостей.
|
|
47
|
+
|
|
48
|
+
✅ Автоматически добавляется в проекты, сгенерированные через `create-mirta`, как `devDependency` — используется для их сборки.
|
|
49
|
+
|
|
50
|
+
### 2. `@mirta/rollup/config-package` — сборка в NPM-пакеты
|
|
51
|
+
|
|
52
|
+
Для проектов, распространяемых через NPM в виде подключаемых модулей экосистемы Мирта.
|
|
53
|
+
|
|
54
|
+
#### Использование
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
# Без rollup.config.mjs
|
|
58
|
+
rollup -c node:@mirta/rollup/config-package
|
|
17
59
|
|
|
60
|
+
# При сборке инструментов командной строки без exports
|
|
61
|
+
rollup -c node:@mirta/rollup/config-package --config-skip-exports
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
#### Особенности
|
|
65
|
+
|
|
66
|
+
- Вход: `src/index.ts`;
|
|
67
|
+
- Формат: `es` → `.mjs`;
|
|
68
|
+
- Валидация соответствия `src/` ↔ `package.json#exports`;
|
|
69
|
+
- Генерация типов: `.d.mts` через `rollup-plugin-dts` с исправлением алиасов;
|
|
70
|
+
- Внешние зависимости: корректно определяются с помощью `@mirta/workspace`.
|
|
71
|
+
|
|
72
|
+
✅ Автоматически добавляется в пакеты, сгенерированные через `create-mirta` с шаблоном "распространяемый модуль".
|
|
73
|
+
|
|
74
|
+
## 🛠 Фабрики конфигураций (для кастомизации)
|
|
75
|
+
|
|
76
|
+
Для полного контроля используйте прямые функции:
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
import { defineConfig, definePackageConfig } from '@mirta/rollup'
|
|
80
|
+
|
|
81
|
+
// Для проекта под контроллер
|
|
18
82
|
export default defineConfig({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
83
|
+
cwd: process.cwd(),
|
|
84
|
+
external: [/^lodash/],
|
|
85
|
+
envLoader: {
|
|
86
|
+
prefix: 'APP_',
|
|
87
|
+
},
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
// Для пакета
|
|
91
|
+
export default definePackageConfig({
|
|
92
|
+
cwd: process.cwd(),
|
|
93
|
+
input: 'src/main.ts',
|
|
94
|
+
external: ['some-legacy-dep'],
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
### Преимущества
|
|
99
|
+
- Следуют стандартам сборки фреймворка Mirta;
|
|
100
|
+
- Позволяют расширять поведение по умолчанию;
|
|
101
|
+
- Идеальны для сложных проектов.
|
|
102
|
+
|
|
103
|
+
## 🔄 Архитектурная роль
|
|
104
|
+
|
|
105
|
+
Пакет обеспечивает **консистентность** и **предсказуемость** на всех уровнях экосистемы:
|
|
106
|
+
|
|
107
|
+
- Все пакеты фреймворка собираются с помощью `@mirta/rollup`;
|
|
108
|
+
- Генерируемые `create-mirta` пакеты используют конфигурации `@mirta/rollup/config` и `@mirta/rollup/config-package`, обеспечивая единый стандарт сборки для `wb-rules`.
|
|
109
|
+
|
|
110
|
+
Так формируется **замкнутая цепочка доверия**: инструмент, создающий проект, сам прошёл через тот же процесс, что и результат.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as rollup from 'rollup';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Конфигурация Rollup по умолчанию, предназначенная
|
|
5
|
+
* для сборки распространяемых через NPM пакетов.
|
|
6
|
+
*
|
|
7
|
+
* @param args Объект с аргументами командной строки Rollup.
|
|
8
|
+
* Доступные ключи:
|
|
9
|
+
* - `--config-skip-exports` - пропускает валидацию соответствия между входными файлами и секцией `exports` в `package.json`.
|
|
10
|
+
*
|
|
11
|
+
* @returns Результат выполнения функции `definePackageConfig`
|
|
12
|
+
*
|
|
13
|
+
* @since 0.4.0
|
|
14
|
+
*
|
|
15
|
+
**/
|
|
16
|
+
declare function resolveConfig(args: Record<string, unknown>): rollup.RollupOptions[];
|
|
17
|
+
|
|
18
|
+
export { resolveConfig as default };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { d as definePackageConfig } from './package.mjs';
|
|
2
|
+
import '@rollup/plugin-typescript';
|
|
3
|
+
import '@rollup/plugin-node-resolve';
|
|
4
|
+
import '@rollup/plugin-commonjs';
|
|
5
|
+
import '@rollup/plugin-replace';
|
|
6
|
+
import 'rollup-plugin-copy';
|
|
7
|
+
import 'rollup-plugin-dts';
|
|
8
|
+
import './errors.mjs';
|
|
9
|
+
import 'del';
|
|
10
|
+
import 'typescript';
|
|
11
|
+
import 'node:path';
|
|
12
|
+
import '@mirta/package';
|
|
13
|
+
import '@mirta/basics/array';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Конфигурация Rollup по умолчанию, предназначенная
|
|
17
|
+
* для сборки распространяемых через NPM пакетов.
|
|
18
|
+
*
|
|
19
|
+
* @param args Объект с аргументами командной строки Rollup.
|
|
20
|
+
* Доступные ключи:
|
|
21
|
+
* - `--config-skip-exports` - пропускает валидацию соответствия между входными файлами и секцией `exports` в `package.json`.
|
|
22
|
+
*
|
|
23
|
+
* @returns Результат выполнения функции `definePackageConfig`
|
|
24
|
+
*
|
|
25
|
+
* @since 0.4.0
|
|
26
|
+
*
|
|
27
|
+
**/
|
|
28
|
+
function resolveConfig(args) {
|
|
29
|
+
// Пропуск проверки секции экспорта.
|
|
30
|
+
const skipExports = args['config-skip-exports'] === true;
|
|
31
|
+
return definePackageConfig({
|
|
32
|
+
skipExports,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { resolveConfig as default };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as rollup from 'rollup';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Конфигурация Rollup по умолчанию, предназначенная
|
|
5
|
+
* для сборки под контроллер Wiren Board.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.4.0
|
|
8
|
+
*
|
|
9
|
+
**/
|
|
10
|
+
declare const _default: Promise<rollup.RollupOptions>;
|
|
11
|
+
|
|
12
|
+
export { _default as default };
|
package/dist/config.mjs
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { d as defineRuntimeConfig } from './runtime.mjs';
|
|
2
|
+
import '@rollup/plugin-multi-entry';
|
|
3
|
+
import '@rollup/plugin-node-resolve';
|
|
4
|
+
import 'rollup-plugin-typescript2';
|
|
5
|
+
import '@rollup/plugin-replace';
|
|
6
|
+
import '@rollup/plugin-babel';
|
|
7
|
+
import '@mirta/env-loader';
|
|
8
|
+
import '@mirta/workspace';
|
|
9
|
+
import './errors.mjs';
|
|
10
|
+
import 'del';
|
|
11
|
+
import 'path';
|
|
12
|
+
import 'magic-string';
|
|
13
|
+
import 'node:path';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Конфигурация Rollup по умолчанию, предназначенная
|
|
17
|
+
* для сборки под контроллер Wiren Board.
|
|
18
|
+
*
|
|
19
|
+
* @since 0.4.0
|
|
20
|
+
*
|
|
21
|
+
**/
|
|
22
|
+
var config = defineRuntimeConfig();
|
|
23
|
+
|
|
24
|
+
export { config as default };
|
package/dist/errors.mjs
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { deleteAsync } from 'del';
|
|
2
|
+
|
|
3
|
+
function del(options = {}) {
|
|
4
|
+
const { hook = 'buildStart', runOnce = false, targets = [], verbose = false, } = options;
|
|
5
|
+
let isDeleted = false;
|
|
6
|
+
return {
|
|
7
|
+
name: 'del',
|
|
8
|
+
[hook]: async () => {
|
|
9
|
+
if (runOnce && isDeleted)
|
|
10
|
+
return;
|
|
11
|
+
const paths = await deleteAsync(targets, options);
|
|
12
|
+
if (verbose || options.dryRun) {
|
|
13
|
+
const message = options.dryRun
|
|
14
|
+
? `Expected files and folders to be deleted: ${paths.length.toString()}`
|
|
15
|
+
: `Deleted files and folders: ${paths.length.toString()}`;
|
|
16
|
+
console.log(message);
|
|
17
|
+
if (paths.length)
|
|
18
|
+
paths.forEach((path) => {
|
|
19
|
+
console.log(path);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
isDeleted = true;
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Класс ошибки сборки, расширяющий стандартный Error.
|
|
29
|
+
*
|
|
30
|
+
* @since 0.3.5
|
|
31
|
+
*
|
|
32
|
+
**/
|
|
33
|
+
class BuildError extends Error {
|
|
34
|
+
/** Код ошибки для программной идентификации. */
|
|
35
|
+
code;
|
|
36
|
+
/**
|
|
37
|
+
* Приватный конструктор для создания экземпляра ошибки.
|
|
38
|
+
*
|
|
39
|
+
* @param message - Сообщение об ошибке
|
|
40
|
+
* @param code - Код ошибки
|
|
41
|
+
* @param scope - Область действия ошибки (по умолчанию '@mirta/rollup')
|
|
42
|
+
*
|
|
43
|
+
**/
|
|
44
|
+
constructor(message, code, scope = '@mirta/rollup') {
|
|
45
|
+
super(`[${scope}] ${message}`);
|
|
46
|
+
this.name = 'BuildError';
|
|
47
|
+
this.code = code;
|
|
48
|
+
if ('captureStackTrace' in Error)
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
50
|
+
Error.captureStackTrace(this, BuildError.get);
|
|
51
|
+
}
|
|
52
|
+
/** Карта кодов ошибок с соответствующими сообщениями. */
|
|
53
|
+
static codeMappings = {
|
|
54
|
+
/** Ошибка, возникающая когда чанк выходит за пределы собираемого пакета. */
|
|
55
|
+
chunkOutsidePackage: (chunkName, packageName, workspacePath) => `Chunk "${chunkName}" is not within package "${packageName}" workspace path "${workspacePath}"`,
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Статический метод для получения экземпляра ошибки по коду.
|
|
59
|
+
*
|
|
60
|
+
* @template T - Тип ключа из codeMappings
|
|
61
|
+
* @param code - Код ошибки
|
|
62
|
+
* @param args - Аргументы для формирования сообщения
|
|
63
|
+
* @returns Экземпляр {@link BuildError}
|
|
64
|
+
*
|
|
65
|
+
**/
|
|
66
|
+
static get(code, ...args) {
|
|
67
|
+
const messageFn = this.codeMappings[code];
|
|
68
|
+
const message = messageFn(...args);
|
|
69
|
+
return new BuildError(message, code);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Класс ошибки сборки под NPM, расширяющий стандартный Error.
|
|
74
|
+
*
|
|
75
|
+
* @since 0.3.5
|
|
76
|
+
*
|
|
77
|
+
**/
|
|
78
|
+
class NpmBuildError extends Error {
|
|
79
|
+
/** Код ошибки для программной идентификации. */
|
|
80
|
+
code;
|
|
81
|
+
/**
|
|
82
|
+
* Приватный конструктор для создания экземпляра ошибки.
|
|
83
|
+
*
|
|
84
|
+
* @param message - Сообщение об ошибке
|
|
85
|
+
* @param code - Код ошибки
|
|
86
|
+
* @param scope - Область действия ошибки (по умолчанию '@mirta/rollup NPM')
|
|
87
|
+
*
|
|
88
|
+
**/
|
|
89
|
+
constructor(message, code, scope = '@mirta/rollup NPM') {
|
|
90
|
+
super(`[${scope}] ${message}`);
|
|
91
|
+
this.name = 'NpmBuildError';
|
|
92
|
+
this.code = code;
|
|
93
|
+
if ('captureStackTrace' in Error)
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
95
|
+
Error.captureStackTrace(this, NpmBuildError.get);
|
|
96
|
+
}
|
|
97
|
+
/** Карта кодов ошибок с соответствующими сообщениями. */
|
|
98
|
+
static codeMappings = {
|
|
99
|
+
/** Ошибка, возникающая когда конфигурация input-файлов Rollup пуста. */
|
|
100
|
+
inputEmpty: () => 'Rollup Config: Input configuration cannot be empty',
|
|
101
|
+
/** Ошибка, возникающая когда input-файл не начинается с требуемого префикса. */
|
|
102
|
+
inputPathRequiresPrefix: (input, prefix) => `Rollup Config: Input path "${input}" must start with required prefix "${prefix}"`,
|
|
103
|
+
/** Ошибка, возникающая когда input-файл имеет недопустимое расширение. */
|
|
104
|
+
inputFileExtensionNotSupported: (input) => `Rollup Config: Unsupported input "${input}". Please use valid JS or TS file extension`,
|
|
105
|
+
/** Ошибка, возникающая из-за дублирования выходного файла несколькими input-файлами. */
|
|
106
|
+
inputGeneratesDuplicateOutput: (outputFile) => `Rollup Config: Duplicate output file "${outputFile}" produced by multiple inputs. Ensure each input maps to a unique export path`,
|
|
107
|
+
/** Ошибка, возникающая когда input-файл не ассоциирован с экспортом в package.json. */
|
|
108
|
+
inputHasNoExport: (input, entry) => `Rollup Config: The input file "${input}" is not associated with corresponding export "${entry}"`,
|
|
109
|
+
/** Ошибка, возникающая при отсутствии экспорта в package.json. */
|
|
110
|
+
exportEmpty: () => 'Package Config: Missing export configuration. Please define the "exports" field',
|
|
111
|
+
/** Ошибка, возникающая при экспорте типов без указания default-импорта. */
|
|
112
|
+
exportTypesOnly: (types) => `Package Config: Export contains only types "${types}" without specifying a default import in package.json`,
|
|
113
|
+
/** Ошибка, возникающая при отсутствии соответствия с input-файлом конфигурации Rollup. */
|
|
114
|
+
exportHasNoInput: (entry) => `Package Config: Export "${entry}" has no corresponding input file in Rollup configuration`,
|
|
115
|
+
/** Ошибка, возникающая при использовании массива в качестве значения exports. */
|
|
116
|
+
exportDisallowArrayType: () => 'Package Config: The field "exports" must be either a string or an object, but found an array',
|
|
117
|
+
/** Ошибка, возникающая при отсутствии точки в начале пути экспорта. */
|
|
118
|
+
exportMustStartWithDot: (key) => `Package Config: Invalid export path "${key}", it must start with "."`,
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Статический метод для получения экземпляра ошибки по коду.
|
|
122
|
+
*
|
|
123
|
+
* @template T - Тип ключа из codeMappings
|
|
124
|
+
* @param code - Код ошибки
|
|
125
|
+
* @param args - Аргументы для формирования сообщения
|
|
126
|
+
* @returns Экземпляр {@link NpmBuildError}
|
|
127
|
+
*
|
|
128
|
+
**/
|
|
129
|
+
static get(code, ...args) {
|
|
130
|
+
const messageFn = this.codeMappings[code];
|
|
131
|
+
const message = messageFn(...args);
|
|
132
|
+
return new NpmBuildError(message, code);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Класс ошибки трансформации AST, расширяющий стандартный Error.
|
|
137
|
+
*
|
|
138
|
+
* @since 0.3.5
|
|
139
|
+
*
|
|
140
|
+
**/
|
|
141
|
+
class AstTransformError extends Error {
|
|
142
|
+
/** Код ошибки для программной идентификации. */
|
|
143
|
+
code;
|
|
144
|
+
/**
|
|
145
|
+
* Приватный конструктор для создания экземпляра ошибки.
|
|
146
|
+
*
|
|
147
|
+
* @param message - Сообщение об ошибке
|
|
148
|
+
* @param code - Код ошибки
|
|
149
|
+
* @param scope - Область действия ошибки (по умолчанию '@mirta/rollup AST')
|
|
150
|
+
*
|
|
151
|
+
**/
|
|
152
|
+
constructor(message, code, scope = '@mirta/rollup AST') {
|
|
153
|
+
super(`[${scope}] ${message}`);
|
|
154
|
+
this.name = 'AstTransformError';
|
|
155
|
+
this.code = code;
|
|
156
|
+
if ('captureStackTrace' in Error)
|
|
157
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
158
|
+
Error.captureStackTrace(this, AstTransformError.get);
|
|
159
|
+
}
|
|
160
|
+
/** Карта кодов ошибок с соответствующими сообщениями. */
|
|
161
|
+
static codeMappings = {
|
|
162
|
+
/** Ошибка, возникающая при отсутствии root-файлов в проекте. */
|
|
163
|
+
noRootFiles: () => 'No root files found in the project. Check your TypeScript configuration (tsconfig.json)',
|
|
164
|
+
/** Ошибка, возникающая при отсутствии модуля для указанного спецификатора. */
|
|
165
|
+
moduleNotFound: (modulePath, sourceFileName) => `Module "${modulePath}" not found in "${sourceFileName}"`,
|
|
166
|
+
/** Ошибка, возникающая когда modulePath содержит недопустимые символы. */
|
|
167
|
+
invalidChars: (path) => `Invalid chars in path: "${path}"`,
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Статический метод для получения экземпляра ошибки по коду.
|
|
171
|
+
*
|
|
172
|
+
* @template T - Тип ключа из codeMappings
|
|
173
|
+
* @param code - Код ошибки
|
|
174
|
+
* @param args - Аргументы для формирования сообщения
|
|
175
|
+
* @returns Экземпляр {@link AstTransformError}
|
|
176
|
+
*
|
|
177
|
+
**/
|
|
178
|
+
static get(code, ...args) {
|
|
179
|
+
const messageFn = this.codeMappings[code];
|
|
180
|
+
const message = messageFn(...args);
|
|
181
|
+
return new AstTransformError(message, code);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export { AstTransformError as A, BuildError as B, NpmBuildError as N, del as d };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import { ExternalOption, Plugin, RollupOptions } from 'rollup';
|
|
2
|
+
import { EnvLoaderOptions } from '@mirta/env-loader';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @file Генерирует конфигурации Rollup на основе `package.json`.
|
|
6
|
+
*
|
|
7
|
+
* Главная функция — `definePackageConfig`. Она:
|
|
8
|
+
* - Читает `exports` и сопоставляет с `input`
|
|
9
|
+
* - Генерирует ESM-бандл и, при необходимости, `.d.ts`
|
|
10
|
+
* - Поддерживает запуск из корня монорепозитория (через `cwd`)
|
|
11
|
+
*
|
|
12
|
+
* Используется для сборки пакетов в монорепозитории.
|
|
13
|
+
*
|
|
14
|
+
* @since 0.3.0
|
|
15
|
+
*
|
|
16
|
+
**/
|
|
2
17
|
|
|
3
18
|
/**
|
|
4
19
|
* Опции конфигурации Rollup.
|
|
@@ -26,28 +41,31 @@ interface RollupConfigOptions {
|
|
|
26
41
|
skipExports?: boolean;
|
|
27
42
|
}
|
|
28
43
|
/**
|
|
29
|
-
*
|
|
44
|
+
* Создаёт конфигурации Rollup для пакета на основе его `package.json`.
|
|
45
|
+
*
|
|
46
|
+
* Поддерживает:
|
|
47
|
+
* - ESM-бандл (обязательно)
|
|
48
|
+
* - `.d.ts`-бандл (если в `exports` указаны `types`)
|
|
49
|
+
* - Режим запуска из корня монорепозитория (через `packagePrefix`)
|
|
50
|
+
* - Проверки соответствия `input` ↔ `exports`
|
|
30
51
|
*
|
|
31
|
-
* @param options
|
|
32
|
-
* @returns Массив конфигураций Rollup
|
|
52
|
+
* @param options Настройки сборки
|
|
53
|
+
* @returns Массив конфигураций Rollup
|
|
33
54
|
*
|
|
55
|
+
* @example
|
|
56
|
+
*
|
|
57
|
+
* ```ts
|
|
58
|
+
* definePackageConfig({
|
|
59
|
+
* cwd: '/repo/packages/my-package',
|
|
60
|
+
* input: 'src/index.ts',
|
|
61
|
+
* })
|
|
62
|
+
*
|
|
63
|
+
* ```
|
|
34
64
|
* @since 0.3.0
|
|
35
65
|
*
|
|
36
66
|
**/
|
|
37
67
|
declare function definePackageConfig(options?: RollupConfigOptions): RollupOptions[];
|
|
38
68
|
|
|
39
|
-
/**
|
|
40
|
-
* Опции для загрузки переменных окружения через dotenv.
|
|
41
|
-
*
|
|
42
|
-
**/
|
|
43
|
-
interface DotenvOptions {
|
|
44
|
-
/** Префикс для фильтрации переменных окружения. */
|
|
45
|
-
prefix?: string;
|
|
46
|
-
/** Вывод в консоль значений переменных окружения. */
|
|
47
|
-
unsecure?: boolean;
|
|
48
|
-
/** Вывод в консоль отладочной информации. */
|
|
49
|
-
verbose: boolean;
|
|
50
|
-
}
|
|
51
69
|
/**
|
|
52
70
|
* Опции конфигурации сборки.
|
|
53
71
|
*
|
|
@@ -57,21 +75,18 @@ interface RuntimeConfigOptions {
|
|
|
57
75
|
cwd?: string;
|
|
58
76
|
/** Внешние зависимости, исключённые из сборки. */
|
|
59
77
|
external?: ExternalOption;
|
|
60
|
-
/**
|
|
61
|
-
|
|
78
|
+
/** Конфигурация загрузчика `.env`-файлов `dotenvx`, {@link EnvLoaderOptions}. */
|
|
79
|
+
envLoader?: Omit<EnvLoaderOptions, 'mode' | 'cwd' | 'rootDir'>;
|
|
62
80
|
/** Дополнительные плагины. */
|
|
63
81
|
plugins?: Plugin[];
|
|
64
82
|
}
|
|
65
83
|
/**
|
|
66
|
-
*
|
|
67
|
-
* Обрабатывает входные файлы, плагины и настройку выходных путей.
|
|
68
|
-
*
|
|
69
|
-
* @param options - опции конфигурации
|
|
70
|
-
* @returns Объект RollupOptions
|
|
84
|
+
* Собирает Rollup-конфигурацию для сборки runtime-кода проекта с учётом монорепозитория и подстановки переменных окружения.
|
|
71
85
|
*
|
|
86
|
+
* @param options - Параметры: `cwd` — рабочая директория проекта; `external` — список внешних зависимостей; `envLoader` — опции загрузчика окружения; `plugins` — дополнительные Rollup-плагины
|
|
87
|
+
* @returns Сконфигурированный объект RollupOptions, готовый для сборки в каталог `dist/es5`
|
|
72
88
|
* @since 0.3.0
|
|
73
|
-
|
|
74
|
-
**/
|
|
89
|
+
*/
|
|
75
90
|
declare function defineRuntimeConfig(options?: RuntimeConfigOptions): Promise<RollupOptions>;
|
|
76
91
|
|
|
77
92
|
export { defineRuntimeConfig as defineConfig, definePackageConfig };
|
package/dist/index.mjs
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { d as definePackageConfig } from './package.mjs';
|
|
2
|
+
export { d as defineConfig } from './runtime.mjs';
|
|
2
3
|
import '@rollup/plugin-typescript';
|
|
3
4
|
import '@rollup/plugin-node-resolve';
|
|
4
5
|
import '@rollup/plugin-commonjs';
|
|
5
6
|
import '@rollup/plugin-replace';
|
|
6
7
|
import 'rollup-plugin-copy';
|
|
7
8
|
import 'rollup-plugin-dts';
|
|
9
|
+
import './errors.mjs';
|
|
10
|
+
import 'del';
|
|
8
11
|
import 'typescript';
|
|
9
12
|
import 'node:path';
|
|
13
|
+
import '@mirta/package';
|
|
14
|
+
import '@mirta/basics/array';
|
|
10
15
|
import '@rollup/plugin-multi-entry';
|
|
11
16
|
import 'rollup-plugin-typescript2';
|
|
12
|
-
import '@dotenv-run/rollup';
|
|
13
17
|
import '@rollup/plugin-babel';
|
|
14
|
-
import '
|
|
18
|
+
import '@mirta/env-loader';
|
|
19
|
+
import '@mirta/workspace';
|
|
15
20
|
import 'path';
|
|
16
21
|
import 'magic-string';
|
|
17
|
-
import '@pnpm/find-workspace-dir';
|
|
18
|
-
import '@pnpm/workspace.find-packages';
|
|
19
|
-
import 'fs';
|