@sequent-org/ifc-viewer 1.0.7-ci.10.0 → 1.0.14-ci.13.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/README.md CHANGED
@@ -25,7 +25,7 @@ IFC 3D model viewer component for web applications. Основан на Three.js
25
25
  await viewer.init()
26
26
  ```
27
27
 
28
- **Готово!** WASM файл автоматически загружается из пакета. Никаких дополнительных настроек не требуется.
28
+ **Готово!** Пакет полностью автоматический - никаких дополнительных настроек не требуется.
29
29
 
30
30
  ## 🚀 Установка
31
31
 
@@ -33,14 +33,20 @@ IFC 3D model viewer component for web applications. Основан на Three.js
33
33
  npm install @sequent-org/ifc-viewer
34
34
  ```
35
35
 
36
- ### ✨ Автоматическая настройка WASM
36
+ ### ✨ Полная автоматизация
37
37
 
38
- **WASM файл автоматически включается в пакет** - никаких дополнительных настроек не требуется!
38
+ **Никаких дополнительных настроек не требуется!** Пакет автоматически:
39
39
 
40
- - ✅ WASM файл автоматически загружается из пакета
41
- - ✅ Не нужно копировать файлы в публичную папку
42
- - ✅ Работает "из коробки" в любом проекте
43
- - ✅ Совместимо с любыми сборщиками (Vite, Webpack, Rollup)
40
+ - ✅ Находит WASM файл из node_modules
41
+ - ✅ Применяет патч совместимости Three.js
42
+ - ✅ Отключает Web Workers для стабильности
43
+ - ✅ Работает в любом проекте "из коробки"
44
+
45
+ **Умный поиск WASM:** Пакет автоматически ищет файл по путям:
46
+ - `/node_modules/web-ifc/web-ifc.wasm` (основной путь)
47
+ - `/wasm/web-ifc.wasm` (если скопировали в public/wasm/)
48
+ - `/web-ifc.wasm` (если скопировали в корень public/)
49
+ - И другие стандартные пути
44
50
 
45
51
  **Важно:** Пакет использует парсинг в главном потоке (Web Workers отключены) для максимальной совместимости с различными окружениями.
46
52
 
@@ -105,14 +111,14 @@ function showIfcModal(ifcUrl) {
105
111
 
106
112
  **Настройка в Laravel:**
107
113
 
108
- WASM файл автоматически загружается из пакета. Дополнительная настройка не требуется!
114
+ WASM файл автоматически загружается из node_modules. Дополнительная настройка не требуется!
109
115
 
110
116
  **Для кастомных путей (опционально):**
111
117
  ```javascript
112
118
  const viewer = new IfcViewer({
113
119
  container: container,
114
120
  ifcUrl: ifcUrl,
115
- wasmUrl: '/custom-path/web-ifc.wasm' // Только если нужен кастомный путь
121
+ wasmUrl: '/storage/web-ifc.wasm' // Только если нужен кастомный путь
116
122
  })
117
123
  ```
118
124
 
@@ -123,16 +129,18 @@ const viewer = new IfcViewer({
123
129
  ### ✅ Что включено в пакет
124
130
 
125
131
  - **Автономные стили** - не требует Tailwind CSS, Bootstrap или других фреймворков
126
- - **Автоматический WASM** - файл автоматически включается в пакет
132
+ - **Умный поиск WASM** - автоматический поиск по популярным путям
127
133
  - **Отключенные Web Workers** - парсинг в главном потоке для максимальной совместимости
128
134
  - **Fallback защита** - автоматическое переключение на резервные пути при ошибках WASM
129
135
  - **Обработка ошибок** - graceful degradation при критических ошибках
130
- - **Поддержка wasmUrl** - гибкая настройка пути к WASM файлу (опционально)
136
+ - **Поддержка wasmUrl** - гибкая настройка пути к WASM файлу
137
+ - **Патч совместимости Three.js** - автоматическое исправление проблем с mergeGeometries
131
138
 
132
139
  ### 🚫 Что НЕ включено
133
140
 
134
141
  - **IFCWorker** - Web Workers отключены для предотвращения проблем интеграции
135
142
  - **Внешние зависимости** - все стили и ресурсы включены в пакет
143
+ - **WASM файл** - нужно скопировать из node_modules (один раз)
136
144
 
137
145
  ### 🎯 Совместимость
138
146
 
@@ -394,6 +402,25 @@ Failed to load IFCWorker.js
394
402
  npm list @sequent-org/ifc-viewer
395
403
  ```
396
404
 
405
+ ### Проблемы совместимости с Three.js
406
+
407
+ **Ошибка mergeGeometries:**
408
+ ```
409
+ mergeGeometries is not a function
410
+ ```
411
+
412
+ **Решение:** Пакет автоматически применяет патч совместимости для Three.js 0.149+. Если проблемы продолжаются:
413
+
414
+ 1. **Проверьте версию Three.js:**
415
+ ```bash
416
+ npm list three
417
+ ```
418
+
419
+ 2. **Убедитесь, что используется Three.js 0.149+:**
420
+ ```bash
421
+ npm install three@^0.149.0
422
+ ```
423
+
397
424
  2. **Очистите кэш:**
398
425
  ```bash
399
426
  npm cache clean --force
@@ -457,9 +484,9 @@ Cannot resolve module '@sequent-org/ifc-viewer'
457
484
 
458
485
  При помощи с интеграцией пакета учитывайте:
459
486
 
460
- 1. **WASM файл автоматически включен** - никаких дополнительных настроек не требуется
487
+ 1. **WASM файл автоматически найден** - никаких дополнительных настроек не требуется
461
488
  2. **Web Workers отключены** - не пытайтесь их включить
462
- 3. **Используйте параметр wasmUrl** только для кастомных путей (опционально)
489
+ 3. **Используйте параметр wasmUrl** только для кастомных путей к WASM файлу
463
490
  4. **Пакет полностью автономен** - не требует внешних CSS фреймворков
464
491
  5. **Поддерживает все современные фреймворки** - React, Vue, Angular, Laravel
465
492
  6. **Работает "из коробки"** - просто установите и используйте
@@ -467,7 +494,7 @@ Cannot resolve module '@sequent-org/ifc-viewer'
467
494
  ### Отладка
468
495
 
469
496
  - Проверьте консоль на сообщение "Web Workers отключены"
470
- - WASM файл автоматически загружается из пакета
497
+ - WASM файл автоматически загружается из node_modules
471
498
  - Используйте DevTools → Network для проверки загрузки ресурсов
472
499
  - При проблемах используйте параметр `wasmUrl` для кастомного пути
473
500
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sequent-org/ifc-viewer",
3
3
  "private": false,
4
- "version": "1.0.7-ci.10.0",
4
+ "version": "1.0.14-ci.13.0",
5
5
  "type": "module",
6
6
  "description": "IFC 3D model viewer component for web applications",
7
7
  "main": "src/index.js",
@@ -10,12 +10,10 @@
10
10
  ".": {
11
11
  "import": "./src/index.js"
12
12
  },
13
- "./style.css": "./src/style.css",
14
- "./wasm/web-ifc.wasm": "./wasm/web-ifc.wasm"
13
+ "./style.css": "./src/style.css"
15
14
  },
16
15
  "files": [
17
16
  "src/",
18
- "wasm/",
19
17
  "README.md"
20
18
  ],
21
19
  "keywords": [
@@ -0,0 +1,58 @@
1
+ // Патч совместимости для Three.js 0.149+ и web-ifc-three
2
+ // web-ifc-three ожидает mergeGeometries, но в новой версии Three.js его нет
3
+
4
+ import * as THREE from 'three';
5
+ import { mergeBufferGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils.js';
6
+
7
+ // Создаем совместимую функцию mergeGeometries
8
+ function createMergeGeometries() {
9
+ return function mergeGeometries(geometries, useGroups = false) {
10
+ if (!Array.isArray(geometries) || geometries.length === 0) return null;
11
+ const prepared = [];
12
+ for (const g of geometries) {
13
+ if (!g) continue;
14
+ const geom = g.isBufferGeometry ? g : new THREE.BufferGeometry().copy(g);
15
+ // Гарантируем наличие индекса, иначе mergeBufferGeometries может падать
16
+ if (!geom.index) {
17
+ const position = geom.getAttribute('position');
18
+ if (!position) continue;
19
+ const count = position.count;
20
+ const IndexArray = count > 65535 ? Uint32Array : Uint16Array;
21
+ const indices = new IndexArray(count);
22
+ for (let i = 0; i < count; i++) indices[i] = i;
23
+ geom.setIndex(new THREE.BufferAttribute(indices, 1));
24
+ }
25
+ prepared.push(geom);
26
+ }
27
+ if (prepared.length === 0) {
28
+ const empty = new THREE.BufferGeometry();
29
+ empty.setAttribute('position', new THREE.Float32BufferAttribute([], 3));
30
+ empty.setIndex(new THREE.BufferAttribute(new Uint16Array(0), 1));
31
+ return empty;
32
+ }
33
+ const merged = mergeBufferGeometries(prepared, useGroups);
34
+ if (merged) return merged;
35
+ const fallback = new THREE.BufferGeometry();
36
+ fallback.setAttribute('position', new THREE.Float32BufferAttribute([], 3));
37
+ fallback.setIndex(new THREE.BufferAttribute(new Uint16Array(0), 1));
38
+ return fallback;
39
+ };
40
+ }
41
+
42
+ // Экспортируем совместимую функцию
43
+ export const mergeGeometries = createMergeGeometries();
44
+ export { mergeBufferGeometries };
45
+
46
+ // Патчим глобальный THREE если доступен
47
+ if (typeof window !== 'undefined' && window.THREE) {
48
+ try {
49
+ const BufferGeometryUtils = window.THREE.BufferGeometryUtils || {};
50
+ if (!BufferGeometryUtils.mergeGeometries) {
51
+ BufferGeometryUtils.mergeGeometries = mergeGeometries;
52
+ window.THREE.BufferGeometryUtils = BufferGeometryUtils;
53
+ console.log('✅ Three.js патч: mergeGeometries добавлен в глобальный THREE');
54
+ }
55
+ } catch (error) {
56
+ console.warn('Three.js патч: не удалось применить к глобальному THREE:', error.message);
57
+ }
58
+ }
@@ -2,11 +2,11 @@
2
2
  // Требует three@^0.149 и web-ifc-three совместимой версии
3
3
 
4
4
  import { IFCLoader } from "web-ifc-three/IFCLoader";
5
- // Автоматический импорт WASM файла из пакета
6
- import WEBIFC_WASM_URL from '/wasm/web-ifc.wasm?url';
7
5
  // Примечание: IFCWorker не используется, так как мы отключаем Web Workers
8
6
  // для стабильности работы в различных окружениях
9
7
 
8
+ // Патч совместимости будет применен после инициализации WASM
9
+
10
10
  export class IfcService {
11
11
  /**
12
12
  * @param {import('../viewer/Viewer').Viewer} viewer
@@ -41,6 +41,9 @@ export class IfcService {
41
41
  // Настройка конфигурации web-ifc
42
42
  this._setupWebIfcConfig();
43
43
 
44
+ // Применяем патч совместимости Three.js после успешной инициализации
45
+ this._applyThreeJsPatch();
46
+
44
47
  } catch (error) {
45
48
  console.error('IfcService: критическая ошибка инициализации:', error);
46
49
  this._handleCriticalError(error);
@@ -81,18 +84,14 @@ export class IfcService {
81
84
  paths.push(this.wasmUrl);
82
85
  }
83
86
 
84
- // 2. WASM файл из пакета (автоматически включен в сборку)
85
- try {
86
- paths.push(WEBIFC_WASM_URL);
87
- } catch (_) {}
88
-
89
- try {
90
- const wasmDir = new URL('.', WEBIFC_WASM_URL).href;
91
- paths.push(wasmDir);
92
- } catch (_) {}
93
-
94
- // 3. Резервные пути для обратной совместимости
95
- paths.push('/wasm/', '/wasm/web-ifc.wasm', '/web-ifc.wasm');
87
+ // 2. Популярные пути по умолчанию (в порядке приоритета)
88
+ paths.push(
89
+ '/node_modules/web-ifc/web-ifc.wasm', // Прямо из node_modules (самый надежный)
90
+ '/wasm/web-ifc.wasm', // Стандартный путь в public/wasm/
91
+ '/web-ifc.wasm', // Корневой путь
92
+ './web-ifc.wasm', // Относительный путь
93
+ 'web-ifc.wasm' // Просто имя файла
94
+ );
96
95
 
97
96
  return paths;
98
97
  }
@@ -114,6 +113,23 @@ export class IfcService {
114
113
  }
115
114
  }
116
115
 
116
+ /**
117
+ * Применяет патч совместимости для Three.js 0.149+
118
+ * @private
119
+ */
120
+ _applyThreeJsPatch() {
121
+ try {
122
+ // Динамически импортируем патч совместимости
123
+ import('../compat/three-compat-patch.js').then(() => {
124
+ console.log('✅ IfcService: Патч совместимости Three.js применен');
125
+ }).catch(error => {
126
+ console.warn('IfcService: не удалось применить патч совместимости:', error.message);
127
+ });
128
+ } catch (error) {
129
+ console.warn('IfcService: ошибка при применении патча совместимости:', error.message);
130
+ }
131
+ }
132
+
117
133
  /**
118
134
  * Обработка критических ошибок инициализации
119
135
  * @private