sdl-mcp 0.12.2 → 0.12.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 (276) hide show
  1. package/README.md +10 -0
  2. package/config/sdlmcp.config.example.json +53 -8
  3. package/config/sdlmcp.config.schema.json +530 -106
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/benchmark/external-manifest.d.ts +162 -0
  6. package/dist/benchmark/external-manifest.d.ts.map +1 -0
  7. package/dist/benchmark/external-manifest.js +336 -0
  8. package/dist/benchmark/external-manifest.js.map +1 -0
  9. package/dist/benchmark/external-runner.d.ts +100 -0
  10. package/dist/benchmark/external-runner.d.ts.map +1 -0
  11. package/dist/benchmark/external-runner.js +1171 -0
  12. package/dist/benchmark/external-runner.js.map +1 -0
  13. package/dist/benchmark/output-file.d.ts +3 -0
  14. package/dist/benchmark/output-file.d.ts.map +1 -0
  15. package/dist/benchmark/output-file.js +8 -0
  16. package/dist/benchmark/output-file.js.map +1 -0
  17. package/dist/cli/argParsing.d.ts.map +1 -1
  18. package/dist/cli/argParsing.js +6 -0
  19. package/dist/cli/argParsing.js.map +1 -1
  20. package/dist/cli/commands/benchmark.d.ts.map +1 -1
  21. package/dist/cli/commands/benchmark.js +3 -2
  22. package/dist/cli/commands/benchmark.js.map +1 -1
  23. package/dist/cli/commands/index.d.ts +1 -0
  24. package/dist/cli/commands/index.d.ts.map +1 -1
  25. package/dist/cli/commands/index.js +13 -7
  26. package/dist/cli/commands/index.js.map +1 -1
  27. package/dist/cli/commands/init.d.ts +5 -1
  28. package/dist/cli/commands/init.d.ts.map +1 -1
  29. package/dist/cli/commands/init.js +73 -3
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/serve.d.ts.map +1 -1
  32. package/dist/cli/commands/serve.js +2 -0
  33. package/dist/cli/commands/serve.js.map +1 -1
  34. package/dist/cli/index.js +2 -0
  35. package/dist/cli/index.js.map +1 -1
  36. package/dist/cli/transport/http.d.ts +1 -35
  37. package/dist/cli/transport/http.d.ts.map +1 -1
  38. package/dist/cli/transport/http.js +151 -175
  39. package/dist/cli/transport/http.js.map +1 -1
  40. package/dist/cli/types.d.ts +1 -0
  41. package/dist/cli/types.d.ts.map +1 -1
  42. package/dist/config/constants.d.ts +30 -0
  43. package/dist/config/constants.d.ts.map +1 -1
  44. package/dist/config/constants.js +30 -0
  45. package/dist/config/constants.js.map +1 -1
  46. package/dist/config/types.d.ts +53 -1
  47. package/dist/config/types.d.ts.map +1 -1
  48. package/dist/config/types.js +62 -14
  49. package/dist/config/types.js.map +1 -1
  50. package/dist/db/ladybug-batching.d.ts +1 -0
  51. package/dist/db/ladybug-batching.d.ts.map +1 -1
  52. package/dist/db/ladybug-batching.js +1 -0
  53. package/dist/db/ladybug-batching.js.map +1 -1
  54. package/dist/db/ladybug-core.d.ts +3 -0
  55. package/dist/db/ladybug-core.d.ts.map +1 -1
  56. package/dist/db/ladybug-core.js +72 -2
  57. package/dist/db/ladybug-core.js.map +1 -1
  58. package/dist/db/ladybug-embeddings.d.ts +6 -1
  59. package/dist/db/ladybug-embeddings.d.ts.map +1 -1
  60. package/dist/db/ladybug-embeddings.js +6 -1
  61. package/dist/db/ladybug-embeddings.js.map +1 -1
  62. package/dist/db/ladybug-file-summaries.d.ts.map +1 -1
  63. package/dist/db/ladybug-file-summaries.js +23 -0
  64. package/dist/db/ladybug-file-summaries.js.map +1 -1
  65. package/dist/db/ladybug-queries.js +1 -1
  66. package/dist/db/ladybug-queries.js.map +1 -1
  67. package/dist/db/migrations/index.d.ts.map +1 -1
  68. package/dist/db/migrations/index.js +2 -0
  69. package/dist/db/migrations/index.js.map +1 -1
  70. package/dist/db/migrations/m007-copy-embeddings-to-symbol.d.ts +5 -9
  71. package/dist/db/migrations/m007-copy-embeddings-to-symbol.d.ts.map +1 -1
  72. package/dist/db/migrations/m007-copy-embeddings-to-symbol.js +24 -126
  73. package/dist/db/migrations/m007-copy-embeddings-to-symbol.js.map +1 -1
  74. package/dist/db/migrations/m021-remediate-symbol-embeddings.d.ts +5 -0
  75. package/dist/db/migrations/m021-remediate-symbol-embeddings.d.ts.map +1 -0
  76. package/dist/db/migrations/m021-remediate-symbol-embeddings.js +7 -0
  77. package/dist/db/migrations/m021-remediate-symbol-embeddings.js.map +1 -0
  78. package/dist/db/migrations/symbol-embedding-remediation.d.ts +57 -0
  79. package/dist/db/migrations/symbol-embedding-remediation.d.ts.map +1 -0
  80. package/dist/db/migrations/symbol-embedding-remediation.js +335 -0
  81. package/dist/db/migrations/symbol-embedding-remediation.js.map +1 -0
  82. package/dist/graph/layout/force-layout.d.ts +4 -0
  83. package/dist/graph/layout/force-layout.d.ts.map +1 -0
  84. package/dist/graph/layout/force-layout.js +127 -0
  85. package/dist/graph/layout/force-layout.js.map +1 -0
  86. package/dist/graph/layout/layout-service.d.ts +37 -0
  87. package/dist/graph/layout/layout-service.d.ts.map +1 -0
  88. package/dist/graph/layout/layout-service.js +172 -0
  89. package/dist/graph/layout/layout-service.js.map +1 -0
  90. package/dist/graph/layout/native-engine.d.ts +9 -0
  91. package/dist/graph/layout/native-engine.d.ts.map +1 -0
  92. package/dist/graph/layout/native-engine.js +59 -0
  93. package/dist/graph/layout/native-engine.js.map +1 -0
  94. package/dist/graph/layout/prng.d.ts +3 -0
  95. package/dist/graph/layout/prng.d.ts.map +1 -0
  96. package/dist/graph/layout/prng.js +19 -0
  97. package/dist/graph/layout/prng.js.map +1 -0
  98. package/dist/graph/layout/serializer.d.ts +3 -0
  99. package/dist/graph/layout/serializer.d.ts.map +1 -0
  100. package/dist/graph/layout/serializer.js +20 -0
  101. package/dist/graph/layout/serializer.js.map +1 -0
  102. package/dist/graph/layout/types.d.ts +30 -0
  103. package/dist/graph/layout/types.d.ts.map +1 -0
  104. package/dist/graph/layout/types.js +2 -0
  105. package/dist/graph/layout/types.js.map +1 -0
  106. package/dist/indexer/embeddings.d.ts +7 -0
  107. package/dist/indexer/embeddings.d.ts.map +1 -1
  108. package/dist/indexer/embeddings.js +44 -4
  109. package/dist/indexer/embeddings.js.map +1 -1
  110. package/dist/indexer/file-summary-embeddings.d.ts +12 -0
  111. package/dist/indexer/file-summary-embeddings.d.ts.map +1 -1
  112. package/dist/indexer/file-summary-embeddings.js +83 -21
  113. package/dist/indexer/file-summary-embeddings.js.map +1 -1
  114. package/dist/indexer/fileWalker.d.ts.map +1 -1
  115. package/dist/indexer/fileWalker.js +2 -1
  116. package/dist/indexer/fileWalker.js.map +1 -1
  117. package/dist/indexer/metrics-updater.d.ts.map +1 -1
  118. package/dist/indexer/metrics-updater.js +27 -4
  119. package/dist/indexer/metrics-updater.js.map +1 -1
  120. package/dist/indexer/watcher.d.ts.map +1 -1
  121. package/dist/indexer/watcher.js +2 -1
  122. package/dist/indexer/watcher.js.map +1 -1
  123. package/dist/mcp/context-response-projection.d.ts.map +1 -1
  124. package/dist/mcp/context-response-projection.js +49 -13
  125. package/dist/mcp/context-response-projection.js.map +1 -1
  126. package/dist/mcp/tools/search-edit/planner.d.ts.map +1 -1
  127. package/dist/mcp/tools/search-edit/planner.js +10 -3
  128. package/dist/mcp/tools/search-edit/planner.js.map +1 -1
  129. package/dist/observability/event-tap.d.ts +2 -1
  130. package/dist/observability/event-tap.d.ts.map +1 -1
  131. package/dist/observability/event-tap.js.map +1 -1
  132. package/dist/observability/service.d.ts +11 -4
  133. package/dist/observability/service.d.ts.map +1 -1
  134. package/dist/observability/service.js +83 -13
  135. package/dist/observability/service.js.map +1 -1
  136. package/dist/observability/types.d.ts +48 -2
  137. package/dist/observability/types.d.ts.map +1 -1
  138. package/dist/ui/.tsbuildinfo +1 -0
  139. package/dist/ui/vendor/fflate.js +2692 -0
  140. package/dist/ui/vendor/jsm/controls/ArcballControls.js +3543 -0
  141. package/dist/ui/vendor/jsm/controls/DragControls.js +452 -0
  142. package/dist/ui/vendor/jsm/controls/FirstPersonControls.js +488 -0
  143. package/dist/ui/vendor/jsm/controls/FlyControls.js +384 -0
  144. package/dist/ui/vendor/jsm/controls/MapControls.js +116 -0
  145. package/dist/ui/vendor/jsm/controls/OrbitControls.js +1963 -0
  146. package/dist/ui/vendor/jsm/controls/PointerLockControls.js +264 -0
  147. package/dist/ui/vendor/jsm/controls/TrackballControls.js +1001 -0
  148. package/dist/ui/vendor/jsm/controls/TransformControls.js +2003 -0
  149. package/dist/ui/vendor/jsm/loaders/3DMLoader.js +1836 -0
  150. package/dist/ui/vendor/jsm/loaders/3MFLoader.js +1621 -0
  151. package/dist/ui/vendor/jsm/loaders/AMFLoader.js +541 -0
  152. package/dist/ui/vendor/jsm/loaders/BVHLoader.js +484 -0
  153. package/dist/ui/vendor/jsm/loaders/ColladaLoader.js +153 -0
  154. package/dist/ui/vendor/jsm/loaders/DDSLoader.js +385 -0
  155. package/dist/ui/vendor/jsm/loaders/DRACOLoader.js +772 -0
  156. package/dist/ui/vendor/jsm/loaders/EXRLoader.js +3395 -0
  157. package/dist/ui/vendor/jsm/loaders/FBXLoader.js +4580 -0
  158. package/dist/ui/vendor/jsm/loaders/FontLoader.js +260 -0
  159. package/dist/ui/vendor/jsm/loaders/GCodeLoader.js +318 -0
  160. package/dist/ui/vendor/jsm/loaders/GLTFLoader.js +4860 -0
  161. package/dist/ui/vendor/jsm/loaders/HDRCubeTextureLoader.js +164 -0
  162. package/dist/ui/vendor/jsm/loaders/HDRLoader.js +463 -0
  163. package/dist/ui/vendor/jsm/loaders/IESLoader.js +379 -0
  164. package/dist/ui/vendor/jsm/loaders/KMZLoader.js +163 -0
  165. package/dist/ui/vendor/jsm/loaders/KTX2Loader.js +1276 -0
  166. package/dist/ui/vendor/jsm/loaders/KTXLoader.js +197 -0
  167. package/dist/ui/vendor/jsm/loaders/LDrawLoader.js +2510 -0
  168. package/dist/ui/vendor/jsm/loaders/LUT3dlLoader.js +205 -0
  169. package/dist/ui/vendor/jsm/loaders/LUTCubeLoader.js +190 -0
  170. package/dist/ui/vendor/jsm/loaders/LUTImageLoader.js +190 -0
  171. package/dist/ui/vendor/jsm/loaders/LWOLoader.js +1051 -0
  172. package/dist/ui/vendor/jsm/loaders/LottieLoader.js +130 -0
  173. package/dist/ui/vendor/jsm/loaders/MD2Loader.js +435 -0
  174. package/dist/ui/vendor/jsm/loaders/MDDLoader.js +147 -0
  175. package/dist/ui/vendor/jsm/loaders/MTLLoader.js +593 -0
  176. package/dist/ui/vendor/jsm/loaders/MaterialXLoader.js +1126 -0
  177. package/dist/ui/vendor/jsm/loaders/NRRDLoader.js +718 -0
  178. package/dist/ui/vendor/jsm/loaders/OBJLoader.js +955 -0
  179. package/dist/ui/vendor/jsm/loaders/PCDLoader.js +620 -0
  180. package/dist/ui/vendor/jsm/loaders/PDBLoader.js +272 -0
  181. package/dist/ui/vendor/jsm/loaders/PLYLoader.js +968 -0
  182. package/dist/ui/vendor/jsm/loaders/PVRLoader.js +270 -0
  183. package/dist/ui/vendor/jsm/loaders/RGBELoader.js +18 -0
  184. package/dist/ui/vendor/jsm/loaders/STLLoader.js +421 -0
  185. package/dist/ui/vendor/jsm/loaders/SVGLoader.js +3319 -0
  186. package/dist/ui/vendor/jsm/loaders/TDSLoader.js +1142 -0
  187. package/dist/ui/vendor/jsm/loaders/TGALoader.js +538 -0
  188. package/dist/ui/vendor/jsm/loaders/TIFFLoader.js +59 -0
  189. package/dist/ui/vendor/jsm/loaders/TTFLoader.js +261 -0
  190. package/dist/ui/vendor/jsm/loaders/USDLoader.js +303 -0
  191. package/dist/ui/vendor/jsm/loaders/USDZLoader.js +16 -0
  192. package/dist/ui/vendor/jsm/loaders/UltraHDRLoader.js +755 -0
  193. package/dist/ui/vendor/jsm/loaders/VOXLoader.js +919 -0
  194. package/dist/ui/vendor/jsm/loaders/VRMLLoader.js +3646 -0
  195. package/dist/ui/vendor/jsm/loaders/VTKLoader.js +1293 -0
  196. package/dist/ui/vendor/jsm/loaders/XYZLoader.js +143 -0
  197. package/dist/ui/vendor/jsm/loaders/collada/ColladaComposer.js +3044 -0
  198. package/dist/ui/vendor/jsm/loaders/collada/ColladaParser.js +1977 -0
  199. package/dist/ui/vendor/jsm/loaders/lwo/IFFParser.js +1217 -0
  200. package/dist/ui/vendor/jsm/loaders/lwo/LWO2Parser.js +414 -0
  201. package/dist/ui/vendor/jsm/loaders/lwo/LWO3Parser.js +373 -0
  202. package/dist/ui/vendor/jsm/loaders/usd/USDAParser.js +901 -0
  203. package/dist/ui/vendor/jsm/loaders/usd/USDCParser.js +1878 -0
  204. package/dist/ui/vendor/jsm/loaders/usd/USDComposer.js +4627 -0
  205. package/dist/ui/vendor/jsm/utils/BufferGeometryUtils.js +1501 -0
  206. package/dist/ui/vendor/jsm/utils/CameraUtils.js +82 -0
  207. package/dist/ui/vendor/jsm/utils/ColorUtils.js +76 -0
  208. package/dist/ui/vendor/jsm/utils/GeometryCompressionUtils.js +547 -0
  209. package/dist/ui/vendor/jsm/utils/GeometryUtils.js +226 -0
  210. package/dist/ui/vendor/jsm/utils/LDrawUtils.js +211 -0
  211. package/dist/ui/vendor/jsm/utils/SceneOptimizer.js +458 -0
  212. package/dist/ui/vendor/jsm/utils/SceneUtils.js +363 -0
  213. package/dist/ui/vendor/jsm/utils/ShadowMapViewer.js +244 -0
  214. package/dist/ui/vendor/jsm/utils/ShadowMapViewerGPU.js +233 -0
  215. package/dist/ui/vendor/jsm/utils/SkeletonUtils.js +496 -0
  216. package/dist/ui/vendor/jsm/utils/SortUtils.js +175 -0
  217. package/dist/ui/vendor/jsm/utils/UVsDebug.js +173 -0
  218. package/dist/ui/vendor/jsm/utils/WebGLTextureUtils.js +115 -0
  219. package/dist/ui/vendor/jsm/utils/WebGPUTextureUtils.js +81 -0
  220. package/dist/ui/vendor/jsm/utils/WorkerPool.js +167 -0
  221. package/dist/ui/vendor/three.core.min.js +6 -0
  222. package/dist/ui/vendor/three.module.min.js +6 -0
  223. package/dist/ui/viewer/ambient.js +39 -0
  224. package/dist/ui/viewer/api.js +93 -0
  225. package/dist/ui/viewer/chrome.js +36 -0
  226. package/dist/ui/viewer/edges.js +33 -0
  227. package/dist/ui/viewer/index.html +32 -0
  228. package/dist/ui/viewer/inspector.js +23 -0
  229. package/dist/ui/viewer/lenses/activity.js +24 -0
  230. package/dist/ui/viewer/lenses/community.js +5 -0
  231. package/dist/ui/viewer/lenses/edges.js +4 -0
  232. package/dist/ui/viewer/lenses/impact.js +6 -0
  233. package/dist/ui/viewer/lenses/search.js +69 -0
  234. package/dist/ui/viewer/lod.js +100 -0
  235. package/dist/ui/viewer/main.js +92 -0
  236. package/dist/ui/viewer/picking.js +45 -0
  237. package/dist/ui/viewer/scene.js +85 -0
  238. package/dist/ui/viewer/skins/default-skin.js +15 -0
  239. package/dist/ui/viewer/skins/loader.js +44 -0
  240. package/dist/ui/viewer/skins/manifest-schema.js +30 -0
  241. package/dist/ui/viewer/state.js +44 -0
  242. package/dist/ui/viewer/theme.js +23 -0
  243. package/dist/ui/viewer/universe.js +151 -0
  244. package/dist/ui/viewer/viewer.css +85 -0
  245. package/dist/util/safeRegex.d.ts.map +1 -1
  246. package/dist/util/safeRegex.js +221 -68
  247. package/dist/util/safeRegex.js.map +1 -1
  248. package/dist/viewer/legacy-graph.d.ts +40 -0
  249. package/dist/viewer/legacy-graph.d.ts.map +1 -0
  250. package/dist/viewer/legacy-graph.js +152 -0
  251. package/dist/viewer/legacy-graph.js.map +1 -0
  252. package/dist/viewer/routes.d.ts +10 -0
  253. package/dist/viewer/routes.d.ts.map +1 -0
  254. package/dist/viewer/routes.js +221 -0
  255. package/dist/viewer/routes.js.map +1 -0
  256. package/dist/viewer/service.d.ts +44 -0
  257. package/dist/viewer/service.d.ts.map +1 -0
  258. package/dist/viewer/service.js +160 -0
  259. package/dist/viewer/service.js.map +1 -0
  260. package/dist/viewer/types.d.ts +63 -0
  261. package/dist/viewer/types.d.ts.map +1 -0
  262. package/dist/viewer/types.js +2 -0
  263. package/dist/viewer/types.js.map +1 -0
  264. package/dist/viewer/viewer-config.d.ts +12 -0
  265. package/dist/viewer/viewer-config.d.ts.map +1 -0
  266. package/dist/viewer/viewer-config.js +36 -0
  267. package/dist/viewer/viewer-config.js.map +1 -0
  268. package/package.json +18 -9
  269. package/templates/SDL.md +19 -0
  270. package/templates/claude-code.json +8 -43
  271. package/dist/ui/graph.css +0 -108
  272. package/dist/ui/graph.d.ts +0 -2
  273. package/dist/ui/graph.d.ts.map +0 -1
  274. package/dist/ui/graph.html +0 -52
  275. package/dist/ui/graph.js +0 -259
  276. package/dist/ui/graph.js.map +0 -1
@@ -0,0 +1,718 @@
1
+ import {
2
+ FileLoader,
3
+ Loader,
4
+ Matrix4,
5
+ Vector3
6
+ } from 'three';
7
+ import { gunzipSync } from '../libs/fflate.module.js';
8
+ import { Volume } from '../misc/Volume.js';
9
+
10
+ /**
11
+ * A loader for the NRRD format.
12
+ *
13
+ * ```js
14
+ * const loader = new NRRDLoader();
15
+ * const volume = await loader.loadAsync( 'models/nrrd/I.nrrd' );
16
+ * ```
17
+ *
18
+ * @augments Loader
19
+ * @three_import import { NRRDLoader } from 'three/addons/loaders/NRRDLoader.js';
20
+ */
21
+ class NRRDLoader extends Loader {
22
+
23
+ /**
24
+ * Constructs a new NRRD loader.
25
+ *
26
+ * @param {LoadingManager} [manager] - The loading manager.
27
+ */
28
+ constructor( manager ) {
29
+
30
+ super( manager );
31
+
32
+ }
33
+
34
+ /**
35
+ * Starts loading from the given URL and passes the loaded NRRD asset
36
+ * to the `onLoad()` callback.
37
+ *
38
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
39
+ * @param {function(Volume)} onLoad - Executed when the loading process has been finished.
40
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
41
+ * @param {onErrorCallback} onError - Executed when errors occur.
42
+ */
43
+ load( url, onLoad, onProgress, onError ) {
44
+
45
+ const scope = this;
46
+
47
+ const loader = new FileLoader( scope.manager );
48
+ loader.setPath( scope.path );
49
+ loader.setResponseType( 'arraybuffer' );
50
+ loader.setRequestHeader( scope.requestHeader );
51
+ loader.setWithCredentials( scope.withCredentials );
52
+ loader.load( url, function ( data ) {
53
+
54
+ try {
55
+
56
+ onLoad( scope.parse( data ) );
57
+
58
+ } catch ( e ) {
59
+
60
+ if ( onError ) {
61
+
62
+ onError( e );
63
+
64
+ } else {
65
+
66
+ console.error( e );
67
+
68
+ }
69
+
70
+ scope.manager.itemError( url );
71
+
72
+ }
73
+
74
+ }, onProgress, onError );
75
+
76
+ }
77
+
78
+ /**
79
+ * Toggles the segmentation mode.
80
+ *
81
+ * @param {boolean} segmentation - Whether to use segmentation mode or not.
82
+ */
83
+ setSegmentation( segmentation ) {
84
+
85
+ this.segmentation = segmentation;
86
+
87
+ }
88
+
89
+ /**
90
+ * Parses the given NRRD data and returns the resulting volume data.
91
+ *
92
+ * @param {ArrayBuffer} data - The raw NRRD data as an array buffer.
93
+ * @return {Volume} The parsed volume.
94
+ */
95
+ parse( data ) {
96
+
97
+ // this parser is largely inspired from the XTK NRRD parser : https://github.com/xtk/X
98
+
99
+ let _data = data;
100
+
101
+ let _dataPointer = 0;
102
+
103
+ const _nativeLittleEndian = new Int8Array( new Int16Array( [ 1 ] ).buffer )[ 0 ] > 0;
104
+
105
+ const _littleEndian = true;
106
+
107
+ const headerObject = {};
108
+
109
+ function scan( type, chunks ) {
110
+
111
+ let _chunkSize = 1;
112
+ let _array_type = Uint8Array;
113
+
114
+ switch ( type ) {
115
+
116
+ // 1 byte data types
117
+ case 'uchar':
118
+ break;
119
+ case 'schar':
120
+ _array_type = Int8Array;
121
+ break;
122
+ // 2 byte data types
123
+ case 'ushort':
124
+ _array_type = Uint16Array;
125
+ _chunkSize = 2;
126
+ break;
127
+ case 'sshort':
128
+ _array_type = Int16Array;
129
+ _chunkSize = 2;
130
+ break;
131
+ // 4 byte data types
132
+ case 'uint':
133
+ _array_type = Uint32Array;
134
+ _chunkSize = 4;
135
+ break;
136
+ case 'sint':
137
+ _array_type = Int32Array;
138
+ _chunkSize = 4;
139
+ break;
140
+ case 'float':
141
+ _array_type = Float32Array;
142
+ _chunkSize = 4;
143
+ break;
144
+ case 'complex':
145
+ _array_type = Float64Array;
146
+ _chunkSize = 8;
147
+ break;
148
+ case 'double':
149
+ _array_type = Float64Array;
150
+ _chunkSize = 8;
151
+ break;
152
+
153
+ }
154
+
155
+ // increase the data pointer in-place
156
+ let _bytes = new _array_type( _data.slice( _dataPointer,
157
+ _dataPointer += chunks * _chunkSize ) );
158
+
159
+ // if required, flip the endianness of the bytes
160
+ if ( _nativeLittleEndian != _littleEndian ) {
161
+
162
+ // we need to flip here since the format doesn't match the native endianness
163
+ _bytes = flipEndianness( _bytes, _chunkSize );
164
+
165
+ }
166
+
167
+ // return the byte array
168
+ return _bytes;
169
+
170
+ }
171
+
172
+ //Flips typed array endianness in-place. Based on https://github.com/kig/DataStream.js/blob/master/DataStream.js.
173
+
174
+ function flipEndianness( array, chunkSize ) {
175
+
176
+ const u8 = new Uint8Array( array.buffer, array.byteOffset, array.byteLength );
177
+ for ( let i = 0; i < array.byteLength; i += chunkSize ) {
178
+
179
+ for ( let j = i + chunkSize - 1, k = i; j > k; j --, k ++ ) {
180
+
181
+ const tmp = u8[ k ];
182
+ u8[ k ] = u8[ j ];
183
+ u8[ j ] = tmp;
184
+
185
+ }
186
+
187
+ }
188
+
189
+ return array;
190
+
191
+ }
192
+
193
+ //parse the header
194
+ function parseHeader( header ) {
195
+
196
+ let data, field, fn, i, l, m, _i, _len;
197
+ const lines = header.split( /\r?\n/ );
198
+ for ( _i = 0, _len = lines.length; _i < _len; _i ++ ) {
199
+
200
+ l = lines[ _i ];
201
+ if ( l.match( /NRRD\d+/ ) ) {
202
+
203
+ headerObject.isNrrd = true;
204
+
205
+ } else if ( ! l.match( /^#/ ) && ( m = l.match( /(.*):(.*)/ ) ) ) {
206
+
207
+ field = m[ 1 ].trim();
208
+ data = m[ 2 ].trim();
209
+ fn = _fieldFunctions[ field ];
210
+ if ( fn ) {
211
+
212
+ fn.call( headerObject, data );
213
+
214
+ } else {
215
+
216
+ headerObject[ field ] = data;
217
+
218
+ }
219
+
220
+ }
221
+
222
+ }
223
+
224
+ if ( ! headerObject.isNrrd ) {
225
+
226
+ throw new Error( 'THREE.NRRDLoader: Not an NRRD file' );
227
+
228
+ }
229
+
230
+ if ( headerObject.encoding === 'bz2' || headerObject.encoding === 'bzip2' ) {
231
+
232
+ throw new Error( 'THREE.NRRDLoader: Bzip is not supported' );
233
+
234
+ }
235
+
236
+ if ( ! headerObject.vectors ) {
237
+
238
+ //if no space direction is set, let's use the identity
239
+ headerObject.vectors = [ ];
240
+ headerObject.vectors.push( [ 1, 0, 0 ] );
241
+ headerObject.vectors.push( [ 0, 1, 0 ] );
242
+ headerObject.vectors.push( [ 0, 0, 1 ] );
243
+
244
+ //apply spacing if defined
245
+ if ( headerObject.spacings ) {
246
+
247
+ for ( i = 0; i <= 2; i ++ ) {
248
+
249
+ if ( ! isNaN( headerObject.spacings[ i ] ) ) {
250
+
251
+ for ( let j = 0; j <= 2; j ++ ) {
252
+
253
+ headerObject.vectors[ i ][ j ] *= headerObject.spacings[ i ];
254
+
255
+ }
256
+
257
+ }
258
+
259
+ }
260
+
261
+ }
262
+
263
+ }
264
+
265
+ }
266
+
267
+ //parse the data when registered as one of this type : 'text', 'ascii', 'txt'
268
+ function parseDataAsText( data, start, end ) {
269
+
270
+ let number = '';
271
+ start = start || 0;
272
+ end = end || data.length;
273
+ let value;
274
+ //length of the result is the product of the sizes
275
+ const lengthOfTheResult = headerObject.sizes.reduce( function ( previous, current ) {
276
+
277
+ return previous * current;
278
+
279
+ }, 1 );
280
+
281
+ let base = 10;
282
+ if ( headerObject.encoding === 'hex' ) {
283
+
284
+ base = 16;
285
+
286
+ }
287
+
288
+ const result = new headerObject.__array( lengthOfTheResult );
289
+ let resultIndex = 0;
290
+ let parsingFunction = parseInt;
291
+ if ( headerObject.__array === Float32Array || headerObject.__array === Float64Array ) {
292
+
293
+ parsingFunction = parseFloat;
294
+
295
+ }
296
+
297
+ for ( let i = start; i < end; i ++ ) {
298
+
299
+ value = data[ i ];
300
+ //if value is not a space
301
+ if ( ( value < 9 || value > 13 ) && value !== 32 ) {
302
+
303
+ number += String.fromCharCode( value );
304
+
305
+ } else {
306
+
307
+ if ( number !== '' ) {
308
+
309
+ result[ resultIndex ] = parsingFunction( number, base );
310
+ resultIndex ++;
311
+
312
+ }
313
+
314
+ number = '';
315
+
316
+ }
317
+
318
+ }
319
+
320
+ if ( number !== '' ) {
321
+
322
+ result[ resultIndex ] = parsingFunction( number, base );
323
+ resultIndex ++;
324
+
325
+ }
326
+
327
+ return result;
328
+
329
+ }
330
+
331
+ const _bytes = scan( 'uchar', data.byteLength );
332
+ const _length = _bytes.length;
333
+ let _header = null;
334
+ let _data_start = 0;
335
+ let i;
336
+ for ( i = 1; i < _length; i ++ ) {
337
+
338
+ if ( _bytes[ i - 1 ] == 10 && _bytes[ i ] == 10 ) {
339
+
340
+ // we found two line breaks in a row
341
+ // now we know what the header is
342
+ _header = this._parseChars( _bytes, 0, i - 2 );
343
+ // this is were the data starts
344
+ _data_start = i + 1;
345
+ break;
346
+
347
+ }
348
+
349
+ }
350
+
351
+ // parse the header
352
+ parseHeader( _header );
353
+
354
+ _data = _bytes.subarray( _data_start ); // the data without header
355
+ if ( headerObject.encoding.substring( 0, 2 ) === 'gz' ) {
356
+
357
+ // we need to decompress the datastream
358
+ // here we start the unzipping and get a typed Uint8Array back
359
+ _data = gunzipSync( new Uint8Array( _data ) );
360
+
361
+ } else if ( headerObject.encoding === 'ascii' || headerObject.encoding === 'text' || headerObject.encoding === 'txt' || headerObject.encoding === 'hex' ) {
362
+
363
+ _data = parseDataAsText( _data );
364
+
365
+ } else if ( headerObject.encoding === 'raw' ) {
366
+
367
+ //we need to copy the array to create a new array buffer, else we retrieve the original arraybuffer with the header
368
+ const _copy = new Uint8Array( _data.length );
369
+
370
+ for ( let i = 0; i < _data.length; i ++ ) {
371
+
372
+ _copy[ i ] = _data[ i ];
373
+
374
+ }
375
+
376
+ _data = _copy;
377
+
378
+ }
379
+
380
+ // .. let's use the underlying array buffer
381
+ _data = _data.buffer;
382
+
383
+ const volume = new Volume();
384
+ volume.header = headerObject;
385
+ volume.segmentation = this.segmentation;
386
+ //
387
+ // parse the (unzipped) data to a datastream of the correct type
388
+ //
389
+ volume.data = new headerObject.__array( _data );
390
+ // get the min and max intensities
391
+ const min_max = volume.computeMinMax();
392
+ const min = min_max[ 0 ];
393
+ const max = min_max[ 1 ];
394
+ // attach the scalar range to the volume
395
+ volume.windowLow = min;
396
+ volume.windowHigh = max;
397
+
398
+ // get the image dimensions
399
+ volume.dimensions = [ headerObject.sizes[ 0 ], headerObject.sizes[ 1 ], headerObject.sizes[ 2 ] ];
400
+ volume.xLength = volume.dimensions[ 0 ];
401
+ volume.yLength = volume.dimensions[ 1 ];
402
+ volume.zLength = volume.dimensions[ 2 ];
403
+
404
+ // Identify axis order in the space-directions matrix from the header if possible.
405
+ if ( headerObject.vectors ) {
406
+
407
+ const xIndex = headerObject.vectors.findIndex( vector => vector[ 0 ] !== 0 );
408
+ const yIndex = headerObject.vectors.findIndex( vector => vector[ 1 ] !== 0 );
409
+ const zIndex = headerObject.vectors.findIndex( vector => vector[ 2 ] !== 0 );
410
+
411
+ const axisOrder = [];
412
+
413
+ if ( xIndex !== yIndex && xIndex !== zIndex && yIndex !== zIndex ) {
414
+
415
+ axisOrder[ xIndex ] = 'x';
416
+ axisOrder[ yIndex ] = 'y';
417
+ axisOrder[ zIndex ] = 'z';
418
+
419
+ } else {
420
+
421
+ axisOrder[ 0 ] = 'x';
422
+ axisOrder[ 1 ] = 'y';
423
+ axisOrder[ 2 ] = 'z';
424
+
425
+ }
426
+
427
+ volume.axisOrder = axisOrder;
428
+
429
+ } else {
430
+
431
+ volume.axisOrder = [ 'x', 'y', 'z' ];
432
+
433
+ }
434
+
435
+ // spacing
436
+ const spacingX = new Vector3().fromArray( headerObject.vectors[ 0 ] ).length();
437
+ const spacingY = new Vector3().fromArray( headerObject.vectors[ 1 ] ).length();
438
+ const spacingZ = new Vector3().fromArray( headerObject.vectors[ 2 ] ).length();
439
+ volume.spacing = [ spacingX, spacingY, spacingZ ];
440
+
441
+
442
+ // Create IJKtoRAS matrix
443
+ volume.matrix = new Matrix4();
444
+
445
+ const transitionMatrix = new Matrix4();
446
+
447
+ if ( headerObject.space === 'left-posterior-superior' ) {
448
+
449
+ transitionMatrix.set(
450
+ - 1, 0, 0, 0,
451
+ 0, - 1, 0, 0,
452
+ 0, 0, 1, 0,
453
+ 0, 0, 0, 1
454
+ );
455
+
456
+ } else if ( headerObject.space === 'left-anterior-superior' ) {
457
+
458
+ transitionMatrix.set(
459
+ 1, 0, 0, 0,
460
+ 0, 1, 0, 0,
461
+ 0, 0, - 1, 0,
462
+ 0, 0, 0, 1
463
+ );
464
+
465
+ }
466
+
467
+
468
+ if ( ! headerObject.vectors ) {
469
+
470
+ volume.matrix.set(
471
+ 1, 0, 0, 0,
472
+ 0, 1, 0, 0,
473
+ 0, 0, 1, 0,
474
+ 0, 0, 0, 1 );
475
+
476
+ } else {
477
+
478
+ const v = headerObject.vectors;
479
+
480
+ const ijk_to_transition = new Matrix4().set(
481
+ v[ 0 ][ 0 ], v[ 1 ][ 0 ], v[ 2 ][ 0 ], 0,
482
+ v[ 0 ][ 1 ], v[ 1 ][ 1 ], v[ 2 ][ 1 ], 0,
483
+ v[ 0 ][ 2 ], v[ 1 ][ 2 ], v[ 2 ][ 2 ], 0,
484
+ 0, 0, 0, 1
485
+ );
486
+
487
+ const transition_to_ras = new Matrix4().multiplyMatrices( ijk_to_transition, transitionMatrix );
488
+
489
+ volume.matrix = transition_to_ras;
490
+
491
+ }
492
+
493
+ volume.inverseMatrix = new Matrix4();
494
+ volume.inverseMatrix.copy( volume.matrix ).invert();
495
+
496
+ volume.RASDimensions = [
497
+ Math.floor( volume.xLength * spacingX ),
498
+ Math.floor( volume.yLength * spacingY ),
499
+ Math.floor( volume.zLength * spacingZ )
500
+ ];
501
+
502
+ // .. and set the default threshold
503
+ // only if the threshold was not already set
504
+ if ( volume.lowerThreshold === - Infinity ) {
505
+
506
+ volume.lowerThreshold = min;
507
+
508
+ }
509
+
510
+ if ( volume.upperThreshold === Infinity ) {
511
+
512
+ volume.upperThreshold = max;
513
+
514
+ }
515
+
516
+ return volume;
517
+
518
+ }
519
+
520
+ _parseChars( array, start, end ) {
521
+
522
+ // without borders, use the whole array
523
+ if ( start === undefined ) {
524
+
525
+ start = 0;
526
+
527
+ }
528
+
529
+ if ( end === undefined ) {
530
+
531
+ end = array.length;
532
+
533
+ }
534
+
535
+ let output = '';
536
+ // create and append the chars
537
+ let i = 0;
538
+ for ( i = start; i < end; ++ i ) {
539
+
540
+ output += String.fromCharCode( array[ i ] );
541
+
542
+ }
543
+
544
+ return output;
545
+
546
+ }
547
+
548
+ }
549
+
550
+ const _fieldFunctions = {
551
+
552
+ type: function ( data ) {
553
+
554
+ switch ( data ) {
555
+
556
+ case 'uchar':
557
+ case 'unsigned char':
558
+ case 'uint8':
559
+ case 'uint8_t':
560
+ this.__array = Uint8Array;
561
+ break;
562
+ case 'signed char':
563
+ case 'int8':
564
+ case 'int8_t':
565
+ this.__array = Int8Array;
566
+ break;
567
+ case 'short':
568
+ case 'short int':
569
+ case 'signed short':
570
+ case 'signed short int':
571
+ case 'int16':
572
+ case 'int16_t':
573
+ this.__array = Int16Array;
574
+ break;
575
+ case 'ushort':
576
+ case 'unsigned short':
577
+ case 'unsigned short int':
578
+ case 'uint16':
579
+ case 'uint16_t':
580
+ this.__array = Uint16Array;
581
+ break;
582
+ case 'int':
583
+ case 'signed int':
584
+ case 'int32':
585
+ case 'int32_t':
586
+ this.__array = Int32Array;
587
+ break;
588
+ case 'uint':
589
+ case 'unsigned int':
590
+ case 'uint32':
591
+ case 'uint32_t':
592
+ this.__array = Uint32Array;
593
+ break;
594
+ case 'float':
595
+ this.__array = Float32Array;
596
+ break;
597
+ case 'double':
598
+ this.__array = Float64Array;
599
+ break;
600
+ default:
601
+ throw new Error( 'THREE.NRRDLoader: Unsupported NRRD data type: ' + data );
602
+
603
+ }
604
+
605
+ return this.type = data;
606
+
607
+ },
608
+
609
+ endian: function ( data ) {
610
+
611
+ return this.endian = data;
612
+
613
+ },
614
+
615
+ encoding: function ( data ) {
616
+
617
+ return this.encoding = data;
618
+
619
+ },
620
+
621
+ dimension: function ( data ) {
622
+
623
+ return this.dim = parseInt( data, 10 );
624
+
625
+ },
626
+
627
+ sizes: function ( data ) {
628
+
629
+ let i;
630
+ return this.sizes = ( function () {
631
+
632
+ const _ref = data.split( /\s+/ );
633
+ const _results = [];
634
+
635
+ for ( let _i = 0, _len = _ref.length; _i < _len; _i ++ ) {
636
+
637
+ i = _ref[ _i ];
638
+ _results.push( parseInt( i, 10 ) );
639
+
640
+ }
641
+
642
+ return _results;
643
+
644
+ } )();
645
+
646
+ },
647
+
648
+ space: function ( data ) {
649
+
650
+ return this.space = data;
651
+
652
+ },
653
+
654
+ 'space origin': function ( data ) {
655
+
656
+ return this.space_origin = data.split( '(' )[ 1 ].split( ')' )[ 0 ].split( ',' );
657
+
658
+ },
659
+
660
+ 'space directions': function ( data ) {
661
+
662
+ let f, v;
663
+ const parts = data.match( /\(.*?\)/g );
664
+ return this.vectors = ( function () {
665
+
666
+ const _results = [];
667
+
668
+ for ( let _i = 0, _len = parts.length; _i < _len; _i ++ ) {
669
+
670
+ v = parts[ _i ];
671
+ _results.push( ( function () {
672
+
673
+ const _ref = v.slice( 1, - 1 ).split( /,/ );
674
+ const _results2 = [];
675
+
676
+ for ( let _j = 0, _len2 = _ref.length; _j < _len2; _j ++ ) {
677
+
678
+ f = _ref[ _j ];
679
+ _results2.push( parseFloat( f ) );
680
+
681
+ }
682
+
683
+ return _results2;
684
+
685
+ } )() );
686
+
687
+ }
688
+
689
+ return _results;
690
+
691
+ } )();
692
+
693
+ },
694
+
695
+ spacings: function ( data ) {
696
+
697
+ let f;
698
+ const parts = data.split( /\s+/ );
699
+ return this.spacings = ( function () {
700
+
701
+ const _results = [];
702
+
703
+ for ( let _i = 0, _len = parts.length; _i < _len; _i ++ ) {
704
+
705
+ f = parts[ _i ];
706
+ _results.push( parseFloat( f ) );
707
+
708
+ }
709
+
710
+ return _results;
711
+
712
+ } )();
713
+
714
+ }
715
+
716
+ };
717
+
718
+ export { NRRDLoader };