mdt-module-builder 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +12 -2
  2. package/package.json +1 -1
  3. package/src/index.mjs +20 -6
package/README.md CHANGED
@@ -30,7 +30,12 @@ devtool/builder вызывают `npm run build` в репе модуля — м
30
30
  - **`SHARED_GLOBALS`** (`@tanstack/react-query`, `zustand` + подпути, `echarts`, `echarts-for-react`)
31
31
  — НЕ бандлятся: externalize + чтение `globalThis.__mdtShared[spec]`. В отличие от react-семьи,
32
32
  имена экспортов перечислять не нужно. Как вынести новую такую зависимость — см. [SHARED-DEPENDENCIES.md](./SHARED-DEPENDENCIES.md).
33
- - **ics-ui-kit, lucide-react, mdt-client** бандлятся внутрь `index.js` (должны быть установлены).
33
+ - **ics-ui-kit** (сам пакет и любой сабпас `ics-ui-kit/components/*`, `ics-ui-kit/lib/*`, …)
34
+ НЕ бандлится: externalize по префиксу (`SHARED_PREFIXES`) + чтение `globalThis.__mdtShared[spec]`.
35
+ Сабпасы перечислять не нужно. MDT кладёт туда свой инстанс (vite-app `legacy/shared-ui-kit.ts`),
36
+ по ключу на каждый сабпас. → один инстанс ui-kit → общий React-контекст (тема, провайдеры): иначе
37
+ компоненты модуля читали бы чужой `ThemeContext`. CSS-сабпасы (`styles.css`) не externalize-ятся.
38
+ - **lucide-react, mdt-client** — бандлятся внутрь `index.js` (должны быть установлены).
34
39
  Их внутренний `import "react"` тоже перехватывается шимом.
35
40
  - **CSS** инлайнится в `index.js` (рантайм-инъекция `<style>`), как старый style-loader —
36
41
  оверлей копирует только `index.js`, отдельного `.css` нет.
@@ -66,9 +71,14 @@ registerModule(() => MDT.Navigation.addNode({ code: "x", title: "X" }));
66
71
  Модуль и MDT договариваются о:
67
72
 
68
73
  - имени глобала **`window.__mdtShared`**;
69
- - наборе ключей **`SHARED_EXACT`** (react-семья);
74
+ - наборе ключей **`SHARED_EXACT`** (react-семья), **`SHARED_GLOBALS`** и префиксах
75
+ **`SHARED_PREFIXES`** (`ics-ui-kit`) — все они должны присутствовать в `__mdtShared` хоста;
70
76
  - **мажоре React** (от него зависит список именованных экспортов `SHARED_NAMES`).
71
77
 
78
+ Вынос `ics-ui-kit` в `__mdtShared` — **ломающее** изменение контракта: модуль, собранный новым
79
+ билдером, больше не бандлит ui-kit и требует MDT, который его экспонирует (`legacy/shared-ui-kit.ts`).
80
+ Версию билдера поднимать соответственно (см. §Версионирование).
81
+
72
82
  MDT-сторона контракта — `ui/vite-app/src/legacy/config-global.ts` (ставит `__mdtShared`).
73
83
 
74
84
  ## Vite / Node
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mdt-module-builder",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Сборщик внешних UI-модулей MDT (Vite).",
5
5
  "type": "module",
6
6
  "bin": {
package/src/index.mjs CHANGED
@@ -1,9 +1,10 @@
1
1
  // mdt-module-builder — сборка внешнего UI-модуля MDT билдером MDT (Vite), артефакт «по старому»:
2
2
  // один самовыполняющийся dist/index.js (IIFE), который зовёт window.MDT.registerModule.
3
3
  //
4
- // Дедуп (MP-16057, вариант B): react-семья НЕ бандлитсязаменяется alias-шимами,
5
- // читающими globalThis.__mdtShared[spec] (его ставит MDT при старте). ics-ui-kit/lucide-react
6
- // бандлятся внутрь; их внутренний import "react" тоже ловит alias → один инстанс React.
4
+ // Дедуп (MP-16057, вариант B): react-семья и ics-ui-kit НЕ бандлятсяreact-семья через
5
+ // alias-шимы, ics-ui-kit (и любой его сабпас) через externalize; оба читаются из
6
+ // globalThis.__mdtShared[spec] (его ставит MDT при старте) → один инстанс на рантайм.
7
+ // lucide-react пока бандлится внутрь; её внутренний import "react" ловит alias → общий React.
7
8
  //
8
9
  // react/* НЕ обязаны быть установлены в модуле (не попадают в бандл): имена их экспортов
9
10
  // зашиты статически (SHARED_NAMES) и версионируются мажором React вместе с пакетом.
@@ -33,6 +34,19 @@ export const SHARED_GLOBALS = [
33
34
  "echarts-for-react"
34
35
  ];
35
36
 
37
+ // Библиотеки, которые MDT хостит ЦЕЛИКОМ и отдаёт модулям единым инстансом через ПРЕФИКС: матчим и
38
+ // сам пакет, и любой его сабпас (ics-ui-kit/components/button, ics-ui-kit/lib/utils, …). В отличие
39
+ // от SHARED_GLOBALS (точные спецификаторы) сабпасы перечислять не нужно — их у ui-kit десятки и они
40
+ // растут. Экспорты каждого сабпаса кладёт MDT в globalThis.__mdtShared (vite-app legacy/shared-ui-kit.ts).
41
+ // Общий инстанс ui-kit нужен ради общего React-контекста (тема, провайдеры): две копии ui-kit = два
42
+ // разных ThemeContext даже при общем React. CSS-сабпасы (styles.css и т.п.) не externalize-им.
43
+ export const SHARED_PREFIXES = ["ics-ui-kit"];
44
+
45
+ function isSharedPrefix(id) {
46
+ if (id.endsWith(".css")) return false;
47
+ return SHARED_PREFIXES.some((p) => id === p || id.startsWith(p + "/"));
48
+ }
49
+
36
50
  // Именованные экспорты react-семьи (React 19). Зашиты статически — react не ставится при сборке.
37
51
  // При смене мажора React обновляются вместе с major-версией пакета (см. README §версионирование).
38
52
  export const SHARED_NAMES = {
@@ -165,9 +179,9 @@ export function moduleViteConfig({ root, entry, outDir, watch = false, name = "_
165
179
  minify: false,
166
180
  ...(watch ? { watch: {} } : {}),
167
181
  rollupOptions: {
168
- // SHARED_GLOBALS externalize: их инстанс даёт MDT через globalThis.__mdtShared, в модуль не бандлятся.
169
- // react/* перехвачены alias-шимами; ics-ui-kit/lucide бандлятся целиком.
170
- external: (id) => SHARED_GLOBALS.includes(id) || id.startsWith(MDT_SDK_PREFIX),
182
+ // externalize (инстанс даёт MDT через globalThis.__mdtShared, в модуль НЕ бандлятся): SHARED_GLOBALS
183
+ // (точные спецификаторы) + ics-ui-kit с сабпасами (SHARED_PREFIXES). react/* — alias-шимы; lucide бандлится.
184
+ external: (id) => SHARED_GLOBALS.includes(id) || isSharedPrefix(id) || id.startsWith(MDT_SDK_PREFIX),
171
185
  // host кладёт значения в __mdtShared/__mdtSdk с флагом __esModule, поэтому
172
186
  // interop модуля (__toESM) корректно отдаёт `.default` для default-импорта
173
187
  // (иначе default-импорт, напр. echarts-for-react, превращается в объект-неймспейс → React