@loaders.gl/tile-converter 4.0.0-beta.1 → 4.0.0-beta.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 (288) hide show
  1. package/dist/{esm/3d-tiles-converter → 3d-tiles-converter}/3d-tiles-converter.js +31 -32
  2. package/dist/3d-tiles-converter/3d-tiles-converter.js.map +1 -0
  3. package/dist/{esm/3d-tiles-converter → 3d-tiles-converter}/helpers/b3dm-converter.js +5 -6
  4. package/dist/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -0
  5. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +1 -0
  6. package/dist/3d-tiles-converter/helpers/load-i3s.js.map +1 -0
  7. package/dist/3d-tiles-converter/helpers/texture-atlas.js.map +1 -0
  8. package/dist/3d-tiles-converter/json-templates/tileset.js.map +1 -0
  9. package/dist/constants.js.map +1 -0
  10. package/dist/{esm/converter-cli.js → converter-cli.js} +37 -15
  11. package/dist/converter-cli.js.map +1 -0
  12. package/dist/converter.min.js +496 -328
  13. package/dist/{esm/deps-installer → deps-installer}/deps-installer.js +3 -3
  14. package/dist/deps-installer/deps-installer.js.map +1 -0
  15. package/dist/esm/i3s-server/bin/i3s-server.min.js +789 -431
  16. package/dist/{esm/i3s-converter → i3s-converter}/helpers/batch-ids-extensions.js +2 -2
  17. package/dist/i3s-converter/helpers/batch-ids-extensions.js.map +1 -0
  18. package/dist/i3s-converter/helpers/coordinate-converter.js.map +1 -0
  19. package/dist/{esm/i3s-converter → i3s-converter}/helpers/create-scene-server-path.js +2 -2
  20. package/dist/i3s-converter/helpers/create-scene-server-path.js.map +1 -0
  21. package/dist/{esm/i3s-converter → i3s-converter}/helpers/feature-attributes.js +1 -1
  22. package/dist/i3s-converter/helpers/feature-attributes.js.map +1 -0
  23. package/dist/i3s-converter/helpers/geometry-attributes.js.map +1 -0
  24. package/dist/{esm/i3s-converter → i3s-converter}/helpers/geometry-converter.js +11 -11
  25. package/dist/i3s-converter/helpers/geometry-converter.js.map +1 -0
  26. package/dist/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  27. package/dist/{esm/i3s-converter → i3s-converter}/helpers/load-3d-tiles.js +1 -1
  28. package/dist/i3s-converter/helpers/load-3d-tiles.js.map +1 -0
  29. package/dist/{esm/i3s-converter → i3s-converter}/helpers/node-debug.js +2 -2
  30. package/dist/i3s-converter/helpers/node-debug.js.map +1 -0
  31. package/dist/{esm/i3s-converter → i3s-converter}/helpers/node-index-document.js +14 -15
  32. package/dist/i3s-converter/helpers/node-index-document.js.map +1 -0
  33. package/dist/{esm/i3s-converter → i3s-converter}/helpers/node-pages.js +13 -14
  34. package/dist/i3s-converter/helpers/node-pages.js.map +1 -0
  35. package/dist/{esm/i3s-converter → i3s-converter}/helpers/preprocess-3d-tiles.js +1 -1
  36. package/dist/i3s-converter/helpers/preprocess-3d-tiles.js.map +1 -0
  37. package/dist/i3s-converter/helpers/tileset-traversal.js.map +1 -0
  38. package/dist/i3s-converter/i3s-converter.d.ts +6 -0
  39. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  40. package/dist/{esm/i3s-converter → i3s-converter}/i3s-converter.js +120 -111
  41. package/dist/i3s-converter/i3s-converter.js.map +1 -0
  42. package/dist/i3s-converter/json-templates/geometry-definitions.js.map +1 -0
  43. package/dist/{esm/i3s-converter → i3s-converter}/json-templates/layers.js +1 -1
  44. package/dist/i3s-converter/json-templates/layers.js.map +1 -0
  45. package/dist/i3s-converter/json-templates/metadata.js.map +1 -0
  46. package/dist/i3s-converter/json-templates/node.js.map +1 -0
  47. package/dist/i3s-converter/json-templates/scene-server.js.map +1 -0
  48. package/dist/{esm/i3s-converter → i3s-converter}/json-templates/shared-resources.js +2 -2
  49. package/dist/i3s-converter/json-templates/shared-resources.js.map +1 -0
  50. package/dist/i3s-converter/json-templates/store.js.map +1 -0
  51. package/dist/i3s-converter/types.js.map +1 -0
  52. package/dist/{esm/i3s-server → i3s-server}/app.js +1 -1
  53. package/dist/i3s-server/app.js.map +1 -0
  54. package/dist/{esm/i3s-server → i3s-server}/bin/www.js +4 -4
  55. package/dist/i3s-server/bin/www.js.map +1 -0
  56. package/dist/{esm/i3s-server → i3s-server}/controllers/index-controller.js +1 -1
  57. package/dist/i3s-server/controllers/index-controller.js.map +1 -0
  58. package/dist/i3s-server/controllers/slpk-controller.d.ts +2 -3
  59. package/dist/i3s-server/controllers/slpk-controller.d.ts.map +1 -1
  60. package/dist/i3s-server/controllers/slpk-controller.js +19 -0
  61. package/dist/i3s-server/controllers/slpk-controller.js.map +1 -0
  62. package/dist/i3s-server/routes/index.js.map +1 -0
  63. package/dist/{esm/i3s-server → i3s-server}/routes/slpk-router.js +2 -2
  64. package/dist/i3s-server/routes/slpk-router.js.map +1 -0
  65. package/dist/i3s-server/utils/create-scene-server.js.map +1 -0
  66. package/dist/{esm/i3s-server → i3s-server}/utils/server-utils.js +5 -5
  67. package/dist/i3s-server/utils/server-utils.js.map +1 -0
  68. package/dist/index.cjs +5129 -0
  69. package/dist/index.js +3 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/{esm/lib → lib}/utils/cli-utils.js +2 -2
  72. package/dist/lib/utils/cli-utils.js.map +1 -0
  73. package/dist/{esm/lib → lib}/utils/compress-util.js +15 -15
  74. package/dist/lib/utils/compress-util.js.map +1 -0
  75. package/dist/{esm/lib → lib}/utils/file-utils.js +5 -5
  76. package/dist/lib/utils/file-utils.js.map +1 -0
  77. package/dist/lib/utils/geometry-utils.js.map +1 -0
  78. package/dist/lib/utils/lod-conversion-utils.js.map +1 -0
  79. package/dist/lib/utils/queue.js.map +1 -0
  80. package/dist/lib/utils/statistic-utills.d.js +2 -0
  81. package/dist/lib/utils/statistic-utills.d.js.map +1 -0
  82. package/dist/{esm/lib → lib}/utils/statistic-utills.js +6 -6
  83. package/dist/lib/utils/statistic-utills.js.map +1 -0
  84. package/dist/{esm/lib → lib}/utils/write-queue.js +6 -7
  85. package/dist/lib/utils/write-queue.js.map +1 -0
  86. package/dist/{esm/pgm-loader.js → pgm-loader.js} +1 -1
  87. package/dist/pgm-loader.js.map +1 -0
  88. package/dist/{esm/slpk-extractor → slpk-extractor}/slpk-extractor.js +4 -4
  89. package/dist/slpk-extractor/slpk-extractor.js.map +1 -0
  90. package/dist/{esm/slpk-extractor-cli.js → slpk-extractor-cli.js} +6 -6
  91. package/dist/slpk-extractor-cli.js.map +1 -0
  92. package/dist/slpk-extractor.min.js +286 -140
  93. package/package.json +29 -22
  94. package/src/converter-cli.ts +32 -14
  95. package/src/i3s-converter/i3s-converter.ts +44 -30
  96. package/src/i3s-server/controllers/slpk-controller.ts +12 -10
  97. package/src/slpk-extractor/slpk-extractor.ts +1 -1
  98. package/dist/bundle.d.ts +0 -2
  99. package/dist/bundle.d.ts.map +0 -1
  100. package/dist/dist.min.js +0 -64291
  101. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +0 -447
  102. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +0 -1
  103. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +0 -295
  104. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +0 -1
  105. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +0 -18
  106. package/dist/es5/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +0 -1
  107. package/dist/es5/3d-tiles-converter/helpers/load-i3s.js +0 -63
  108. package/dist/es5/3d-tiles-converter/helpers/load-i3s.js.map +0 -1
  109. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js +0 -33
  110. package/dist/es5/3d-tiles-converter/helpers/texture-atlas.js.map +0 -1
  111. package/dist/es5/3d-tiles-converter/json-templates/tileset.js +0 -61
  112. package/dist/es5/3d-tiles-converter/json-templates/tileset.js.map +0 -1
  113. package/dist/es5/bundle.js +0 -6
  114. package/dist/es5/bundle.js.map +0 -1
  115. package/dist/es5/constants.js +0 -9
  116. package/dist/es5/constants.js.map +0 -1
  117. package/dist/es5/converter-cli.js +0 -249
  118. package/dist/es5/converter-cli.js.map +0 -1
  119. package/dist/es5/deps-installer/deps-installer.js +0 -198
  120. package/dist/es5/deps-installer/deps-installer.js.map +0 -1
  121. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js +0 -146
  122. package/dist/es5/i3s-converter/helpers/batch-ids-extensions.js.map +0 -1
  123. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +0 -89
  124. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +0 -1
  125. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js +0 -41
  126. package/dist/es5/i3s-converter/helpers/create-scene-server-path.js.map +0 -1
  127. package/dist/es5/i3s-converter/helpers/feature-attributes.js +0 -164
  128. package/dist/es5/i3s-converter/helpers/feature-attributes.js.map +0 -1
  129. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +0 -253
  130. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +0 -1
  131. package/dist/es5/i3s-converter/helpers/geometry-converter.js +0 -1190
  132. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +0 -1
  133. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +0 -113
  134. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +0 -1
  135. package/dist/es5/i3s-converter/helpers/load-3d-tiles.js +0 -148
  136. package/dist/es5/i3s-converter/helpers/load-3d-tiles.js.map +0 -1
  137. package/dist/es5/i3s-converter/helpers/node-debug.js +0 -76
  138. package/dist/es5/i3s-converter/helpers/node-debug.js.map +0 -1
  139. package/dist/es5/i3s-converter/helpers/node-index-document.js +0 -522
  140. package/dist/es5/i3s-converter/helpers/node-index-document.js.map +0 -1
  141. package/dist/es5/i3s-converter/helpers/node-pages.js +0 -519
  142. package/dist/es5/i3s-converter/helpers/node-pages.js.map +0 -1
  143. package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js +0 -146
  144. package/dist/es5/i3s-converter/helpers/preprocess-3d-tiles.js.map +0 -1
  145. package/dist/es5/i3s-converter/helpers/tileset-traversal.js +0 -82
  146. package/dist/es5/i3s-converter/helpers/tileset-traversal.js.map +0 -1
  147. package/dist/es5/i3s-converter/i3s-converter.js +0 -1554
  148. package/dist/es5/i3s-converter/i3s-converter.js.map +0 -1
  149. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js +0 -107
  150. package/dist/es5/i3s-converter/json-templates/geometry-definitions.js.map +0 -1
  151. package/dist/es5/i3s-converter/json-templates/layers.js +0 -163
  152. package/dist/es5/i3s-converter/json-templates/layers.js.map +0 -1
  153. package/dist/es5/i3s-converter/json-templates/metadata.js +0 -31
  154. package/dist/es5/i3s-converter/json-templates/metadata.js.map +0 -1
  155. package/dist/es5/i3s-converter/json-templates/node.js +0 -99
  156. package/dist/es5/i3s-converter/json-templates/node.js.map +0 -1
  157. package/dist/es5/i3s-converter/json-templates/scene-server.js +0 -39
  158. package/dist/es5/i3s-converter/json-templates/scene-server.js.map +0 -1
  159. package/dist/es5/i3s-converter/json-templates/shared-resources.js +0 -173
  160. package/dist/es5/i3s-converter/json-templates/shared-resources.js.map +0 -1
  161. package/dist/es5/i3s-converter/json-templates/store.js +0 -107
  162. package/dist/es5/i3s-converter/json-templates/store.js.map +0 -1
  163. package/dist/es5/i3s-converter/types.js +0 -18
  164. package/dist/es5/i3s-converter/types.js.map +0 -1
  165. package/dist/es5/i3s-server/app.js +0 -35
  166. package/dist/es5/i3s-server/app.js.map +0 -1
  167. package/dist/es5/i3s-server/bin/www.js +0 -33
  168. package/dist/es5/i3s-server/bin/www.js.map +0 -1
  169. package/dist/es5/i3s-server/controllers/index-controller.js +0 -56
  170. package/dist/es5/i3s-server/controllers/index-controller.js.map +0 -1
  171. package/dist/es5/i3s-server/controllers/slpk-controller.js +0 -81
  172. package/dist/es5/i3s-server/controllers/slpk-controller.js.map +0 -1
  173. package/dist/es5/i3s-server/routes/index.js +0 -37
  174. package/dist/es5/i3s-server/routes/index.js.map +0 -1
  175. package/dist/es5/i3s-server/routes/slpk-router.js +0 -72
  176. package/dist/es5/i3s-server/routes/slpk-router.js.map +0 -1
  177. package/dist/es5/i3s-server/utils/create-scene-server.js +0 -20
  178. package/dist/es5/i3s-server/utils/create-scene-server.js.map +0 -1
  179. package/dist/es5/i3s-server/utils/server-utils.js +0 -49
  180. package/dist/es5/i3s-server/utils/server-utils.js.map +0 -1
  181. package/dist/es5/index.js +0 -21
  182. package/dist/es5/index.js.map +0 -1
  183. package/dist/es5/lib/utils/cli-utils.js +0 -57
  184. package/dist/es5/lib/utils/cli-utils.js.map +0 -1
  185. package/dist/es5/lib/utils/compress-util.js +0 -346
  186. package/dist/es5/lib/utils/compress-util.js.map +0 -1
  187. package/dist/es5/lib/utils/file-utils.js +0 -208
  188. package/dist/es5/lib/utils/file-utils.js.map +0 -1
  189. package/dist/es5/lib/utils/geometry-utils.js +0 -15
  190. package/dist/es5/lib/utils/geometry-utils.js.map +0 -1
  191. package/dist/es5/lib/utils/lod-conversion-utils.js +0 -50
  192. package/dist/es5/lib/utils/lod-conversion-utils.js.map +0 -1
  193. package/dist/es5/lib/utils/queue.js +0 -47
  194. package/dist/es5/lib/utils/queue.js.map +0 -1
  195. package/dist/es5/lib/utils/statistic-utills.d.ts +0 -25
  196. package/dist/es5/lib/utils/statistic-utills.js +0 -147
  197. package/dist/es5/lib/utils/statistic-utills.js.map +0 -1
  198. package/dist/es5/lib/utils/write-queue.js +0 -214
  199. package/dist/es5/lib/utils/write-queue.js.map +0 -1
  200. package/dist/es5/pgm-loader.js +0 -49
  201. package/dist/es5/pgm-loader.js.map +0 -1
  202. package/dist/es5/slpk-extractor/slpk-extractor.js +0 -171
  203. package/dist/es5/slpk-extractor/slpk-extractor.js.map +0 -1
  204. package/dist/es5/slpk-extractor-cli.js +0 -117
  205. package/dist/es5/slpk-extractor-cli.js.map +0 -1
  206. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +0 -1
  207. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +0 -1
  208. package/dist/esm/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +0 -1
  209. package/dist/esm/3d-tiles-converter/helpers/load-i3s.js.map +0 -1
  210. package/dist/esm/3d-tiles-converter/helpers/texture-atlas.js.map +0 -1
  211. package/dist/esm/3d-tiles-converter/json-templates/tileset.js.map +0 -1
  212. package/dist/esm/bundle.js +0 -4
  213. package/dist/esm/bundle.js.map +0 -1
  214. package/dist/esm/constants.js.map +0 -1
  215. package/dist/esm/converter-cli.js.map +0 -1
  216. package/dist/esm/deps-installer/deps-installer.js.map +0 -1
  217. package/dist/esm/i3s-converter/helpers/batch-ids-extensions.js.map +0 -1
  218. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +0 -1
  219. package/dist/esm/i3s-converter/helpers/create-scene-server-path.js.map +0 -1
  220. package/dist/esm/i3s-converter/helpers/feature-attributes.js.map +0 -1
  221. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +0 -1
  222. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +0 -1
  223. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +0 -1
  224. package/dist/esm/i3s-converter/helpers/load-3d-tiles.js.map +0 -1
  225. package/dist/esm/i3s-converter/helpers/node-debug.js.map +0 -1
  226. package/dist/esm/i3s-converter/helpers/node-index-document.js.map +0 -1
  227. package/dist/esm/i3s-converter/helpers/node-pages.js.map +0 -1
  228. package/dist/esm/i3s-converter/helpers/preprocess-3d-tiles.js.map +0 -1
  229. package/dist/esm/i3s-converter/helpers/tileset-traversal.js.map +0 -1
  230. package/dist/esm/i3s-converter/i3s-converter.js.map +0 -1
  231. package/dist/esm/i3s-converter/json-templates/geometry-definitions.js.map +0 -1
  232. package/dist/esm/i3s-converter/json-templates/layers.js.map +0 -1
  233. package/dist/esm/i3s-converter/json-templates/metadata.js.map +0 -1
  234. package/dist/esm/i3s-converter/json-templates/node.js.map +0 -1
  235. package/dist/esm/i3s-converter/json-templates/scene-server.js.map +0 -1
  236. package/dist/esm/i3s-converter/json-templates/shared-resources.js.map +0 -1
  237. package/dist/esm/i3s-converter/json-templates/store.js.map +0 -1
  238. package/dist/esm/i3s-converter/types.js.map +0 -1
  239. package/dist/esm/i3s-server/README.md +0 -63
  240. package/dist/esm/i3s-server/app.js.map +0 -1
  241. package/dist/esm/i3s-server/bin/www.js.map +0 -1
  242. package/dist/esm/i3s-server/certs/cert.pem +0 -19
  243. package/dist/esm/i3s-server/certs/key.pem +0 -27
  244. package/dist/esm/i3s-server/controllers/index-controller.js.map +0 -1
  245. package/dist/esm/i3s-server/controllers/slpk-controller.js +0 -19
  246. package/dist/esm/i3s-server/controllers/slpk-controller.js.map +0 -1
  247. package/dist/esm/i3s-server/routes/index.js.map +0 -1
  248. package/dist/esm/i3s-server/routes/slpk-router.js.map +0 -1
  249. package/dist/esm/i3s-server/utils/create-scene-server.js.map +0 -1
  250. package/dist/esm/i3s-server/utils/server-utils.js.map +0 -1
  251. package/dist/esm/index.js +0 -3
  252. package/dist/esm/index.js.map +0 -1
  253. package/dist/esm/lib/utils/cli-utils.js.map +0 -1
  254. package/dist/esm/lib/utils/compress-util.js.map +0 -1
  255. package/dist/esm/lib/utils/file-utils.js.map +0 -1
  256. package/dist/esm/lib/utils/geometry-utils.js.map +0 -1
  257. package/dist/esm/lib/utils/lod-conversion-utils.js.map +0 -1
  258. package/dist/esm/lib/utils/queue.js.map +0 -1
  259. package/dist/esm/lib/utils/statistic-utills.d.ts +0 -25
  260. package/dist/esm/lib/utils/statistic-utills.js.map +0 -1
  261. package/dist/esm/lib/utils/write-queue.js.map +0 -1
  262. package/dist/esm/pgm-loader.js.map +0 -1
  263. package/dist/esm/slpk-extractor/slpk-extractor.js.map +0 -1
  264. package/dist/esm/slpk-extractor-cli.js.map +0 -1
  265. package/src/bundle.ts +0 -4
  266. /package/dist/{esm/3d-tiles-converter → 3d-tiles-converter}/helpers/i3s-obb-to-3d-tiles-obb.js +0 -0
  267. /package/dist/{esm/3d-tiles-converter → 3d-tiles-converter}/helpers/load-i3s.js +0 -0
  268. /package/dist/{esm/3d-tiles-converter → 3d-tiles-converter}/helpers/texture-atlas.js +0 -0
  269. /package/dist/{esm/3d-tiles-converter → 3d-tiles-converter}/json-templates/tileset.js +0 -0
  270. /package/dist/{esm/constants.js → constants.js} +0 -0
  271. /package/dist/{esm/i3s-converter → i3s-converter}/helpers/coordinate-converter.js +0 -0
  272. /package/dist/{esm/i3s-converter → i3s-converter}/helpers/geometry-attributes.js +0 -0
  273. /package/dist/{esm/i3s-converter → i3s-converter}/helpers/gltf-attributes.js +0 -0
  274. /package/dist/{esm/i3s-converter → i3s-converter}/helpers/tileset-traversal.js +0 -0
  275. /package/dist/{esm/i3s-converter → i3s-converter}/json-templates/geometry-definitions.js +0 -0
  276. /package/dist/{esm/i3s-converter → i3s-converter}/json-templates/metadata.js +0 -0
  277. /package/dist/{esm/i3s-converter → i3s-converter}/json-templates/node.js +0 -0
  278. /package/dist/{esm/i3s-converter → i3s-converter}/json-templates/scene-server.js +0 -0
  279. /package/dist/{esm/i3s-converter → i3s-converter}/json-templates/store.js +0 -0
  280. /package/dist/{esm/i3s-converter → i3s-converter}/types.js +0 -0
  281. /package/dist/{es5/i3s-server → i3s-server}/README.md +0 -0
  282. /package/dist/{es5/i3s-server → i3s-server}/certs/cert.pem +0 -0
  283. /package/dist/{es5/i3s-server → i3s-server}/certs/key.pem +0 -0
  284. /package/dist/{esm/i3s-server → i3s-server}/routes/index.js +0 -0
  285. /package/dist/{esm/i3s-server → i3s-server}/utils/create-scene-server.js +0 -0
  286. /package/dist/{esm/lib → lib}/utils/geometry-utils.js +0 -0
  287. /package/dist/{esm/lib → lib}/utils/lod-conversion-utils.js +0 -0
  288. /package/dist/{esm/lib → lib}/utils/queue.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"i3s-converter.js","names":["load","encode","isBrowser","CesiumIonLoader","Tiles3DLoader","join","v4","uuidv4","process","transform","md5","NodePages","writeFile","removeDir","writeFileForSlpk","removeFile","compressFileWithGzip","compressWithChildProcess","calculateFilesSize","timeConverter","convertB3dmToI3sGeometry","getPropertyTable","createBoundingVolumes","convertBoundingVolumeToI3SFullExtent","createSceneServerPath","convertGeometricErrorToScreenThreshold","PGMLoader","LAYERS","layersTemplate","GEOMETRY_DEFINITION","geometryDefinitionTemlate","SHARED_RESOURCES","sharedResourcesTemplate","validateNodeBoundingVolumes","KTX2BasisWriterWorker","ImageWriter","GLTFPrimitiveModeString","WorkerFarm","WriteQueue","BROWSER_ERROR_MESSAGE","createdStorageAttribute","createFieldAttribute","createPopupInfo","getAttributeType","getFieldAttributeType","NodeIndexDocument","isNestedTileset","loadNestedTileset","loadTile3DContent","loadFromArchive","Matrix4","createBoundingVolume","traverseDatasetWith","analyzeTileContent","mergePreprocessData","ION_DEFAULT_TOKEN","_process$env","env","IonToken","HARDCODED_NODES_PER_PAGE","_3D_TILES","_3D_OBJECT_LAYER_TYPE","REFRESH_TOKEN_TIMEOUT","CESIUM_DATASET_PREFIX","I3SConverter","constructor","_defineProperty","_nodeWorkers","reuseWorkers","useLocalLibraries","basis","format","workerUrl","draco","fetch","modules","meshTopologyTypes","Set","metadataClasses","nodePages","options","layers0Path","materialMap","Map","materialDefinitions","geometryMap","geometryConfigs","vertexCounter","layers0","featuresHashArray","refinementCounter","tilesCount","tilesWithAddRefineCount","validate","generateTextures","generateBoundingVolumes","layersHasTexture","compressList","convert","console","log","conversionStartTime","hrtime","tilesetName","slpk","egmFilePath","inputUrl","outputPath","sevenZipExe","maxDepth","token","instantNodeWriting","mergeMaterials","inquirer","metadataClass","Boolean","Loader","indexOf","writeQueue","startListening","geoidHeightModel","useWriteFunction","preloadOptions","_fetchPreloadOptions","tilesetUrl","url","headers","loadOptions","sourceTileset","preprocessResult","preprocessConversion","_createAndSaveTileset","_finishConversion","error","finalize","workerFarm","getWorkerFarm","destroy","sourceRootTile","root","analyzeTile","bind","undefined","preprocessData","concat","Array","from","size","has","TRIANGLES","TRIANGLE_STRIP","_this$options$metadat","length","result","prompt","name","type","message","choices","sourceTile","traversalProps","isTileset","id","tileContent","loadGLTF","contentUrl","tilePreprocessData","_this$sourceTileset","_this$sourceTileset$r","_this$sourceTileset$r2","tilesetPath","e","sourceBoundingVolume","boundingVolume","_formLayers0","region","boundingVolumes","push","index","lodThreshold","obb","children","rootNode","createRootNode","parentNodes","convertTile","finalizeTile","geometryDefinitions","map","config","geometryConfig","store","defaultGeometrySchema","ordering","filter","attribute","_writeLayers0","filePath","save","_createSlpk","boundingVolumeRegion","_this$sourceTileset2","fullExtent","zmin","zmax","extent","xmin","ymin","xmax","ymax","layers0data","version","toUpperCase","href","nodesPerPage","compressGeometry","enqueue","archiveKey","writePromise","JSON","stringify","slpkTilesetPath","slpkFileName","transformationMatrix","clone","multiplyRight","parentNode","childNodes","_createNode","addChildren","newTraversalProps","conversionResults","currentTraversalProps","node","addNeighbors","_checkAddRefinementTypeForTile","_updateTilesetOptions","propertyTable","_convertPropertyTableToNodeAttributes","resourcesData","_convertResources","inPageId","nodes","nodeIds","nodesInPage","emptyResources","geometry","compressedGeometry","texture","hasUvRegions","sharedResources","meshMaterial","vertexCount","attributes","featureCount","resources","lodSelection","maxScreenThresholdSQ","find","val","metricType","maxError","nodeInPage","_updateNodeInNodePages","nodeData","createNodeIndexDocument","addData","mesh","_writeResources","boundingVolumeWarnings","warn","parentId","_this$layers","isContentSupported","draftObb","center","halfSize","quaternion","attributeStorageInfo","definition","findOrCreateGeometryDefinition","resource","material","nodeId","getNodeById","updateAll","updateMaterialByNodeId","_findOrCreateMaterial","texelCountHint","image","height","width","updateTexelCountHintByNodeId","updateVertexCountByNodeId","updateNodeAttributeByNodeId","updateFeatureCountByNodeId","saveNode","nodePath","geometryBuffer","childPath","slpkChildPath","_writeGeometries","_writeShared","_writeTexture","_writeAttributes","slpkGeometryPath","geometryPath","slpkCompressedGeometryPath","compressedGeometryPath","sharedData","sharedDataStr","slpkSharedPath","sharedPath","_getFormatByMimeType","mimeType","formats","textureData","bufferView","data","writeTextureFile","copyArrayBuffer","subarray","arrayToEncode","Uint8Array","ktx2TextureData","decodedFromKTX2TextureData","textureSetDefinitions","atlas","slpkTexturePath","compress","texturePath","_this$layers2","_this$layers2$attribu","arguments","minimumLength","folderName","key","fileBuffer","slpkAttributesPath","attributesPath","hash","get","newMaterialId","set","hasTexture","newGeometryId","attributeIndex","propertyTableWithObjectId","OBJECTID","found","element","firstAttribute","attributeType","storageAttribute","fieldAttributeType","fieldAttribute","popupInfo","fields","layerType","params","addRefinementPercentage","filesSize","diff","conversionTime","preload","accessToken","refreshTokenTime","tile","ADD_TILE_REFINEMENT","refine","includes"],"sources":["../../../src/i3s-converter/i3s-converter.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {\n FeatureTableJson,\n Tiles3DLoaderOptions,\n Tiles3DTileContent,\n Tiles3DTileJSONPostprocessed,\n Tiles3DTilesetJSONPostprocessed\n} from '@loaders.gl/3d-tiles';\nimport type {WriteQueueItem} from '../lib/utils/write-queue';\nimport type {\n SceneLayer3D,\n BoundingVolumes,\n MaxScreenThresholdSQ,\n NodeInPage,\n AttributeStorageInfo\n} from '@loaders.gl/i3s';\nimport {load, encode, isBrowser} from '@loaders.gl/core';\nimport {CesiumIonLoader, Tiles3DLoader} from '@loaders.gl/3d-tiles';\nimport {Geoid} from '@math.gl/geoid';\nimport {join} from 'path';\nimport {v4 as uuidv4} from 'uuid';\nimport process from 'process';\nimport transform from 'json-map-transform';\nimport md5 from 'md5';\n\nimport NodePages from './helpers/node-pages';\nimport {writeFile, removeDir, writeFileForSlpk, removeFile} from '../lib/utils/file-utils';\nimport {\n compressFileWithGzip,\n compressWithChildProcess\n // generateHash128FromZip,\n // addFileToZip\n} from '../lib/utils/compress-util';\nimport {calculateFilesSize, timeConverter} from '../lib/utils/statistic-utills';\nimport convertB3dmToI3sGeometry, {getPropertyTable} from './helpers/geometry-converter';\nimport {\n createBoundingVolumes,\n convertBoundingVolumeToI3SFullExtent\n} from './helpers/coordinate-converter';\nimport {createSceneServerPath} from './helpers/create-scene-server-path';\nimport {convertGeometricErrorToScreenThreshold} from '../lib/utils/lod-conversion-utils';\nimport {PGMLoader} from '../pgm-loader';\n\nimport {LAYERS as layersTemplate} from './json-templates/layers';\nimport {GEOMETRY_DEFINITION as geometryDefinitionTemlate} from './json-templates/geometry-definitions';\nimport {SHARED_RESOURCES as sharedResourcesTemplate} from './json-templates/shared-resources';\nimport {validateNodeBoundingVolumes} from './helpers/node-debug';\nimport {KTX2BasisWriterWorker} from '@loaders.gl/textures';\nimport {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {I3SMaterialDefinition, TextureSetDefinitionFormats} from '@loaders.gl/i3s';\nimport {ImageWriter} from '@loaders.gl/images';\nimport {GLTFImagePostprocessed} from '@loaders.gl/gltf';\nimport {\n GLTFPrimitiveModeString,\n I3SConvertedResources,\n PreprocessData,\n SharedResourcesArrays\n} from './types';\nimport {WorkerFarm} from '@loaders.gl/worker-utils';\nimport WriteQueue from '../lib/utils/write-queue';\nimport {BROWSER_ERROR_MESSAGE} from '../constants';\nimport {\n createdStorageAttribute,\n createFieldAttribute,\n createPopupInfo,\n getAttributeType,\n getFieldAttributeType\n} from './helpers/feature-attributes';\nimport {NodeIndexDocument} from './helpers/node-index-document';\nimport {\n isNestedTileset,\n loadNestedTileset,\n loadTile3DContent,\n loadFromArchive\n} from './helpers/load-3d-tiles';\nimport {Matrix4} from '@math.gl/core';\nimport {BoundingSphere, OrientedBoundingBox} from '@math.gl/culling';\nimport {createBoundingVolume} from '@loaders.gl/tiles';\nimport {TraversalConversionProps, traverseDatasetWith} from './helpers/tileset-traversal';\nimport {analyzeTileContent, mergePreprocessData} from './helpers/preprocess-3d-tiles';\n\nconst ION_DEFAULT_TOKEN = process.env?.IonToken;\nconst HARDCODED_NODES_PER_PAGE = 64;\nconst _3D_TILES = '3DTILES';\nconst _3D_OBJECT_LAYER_TYPE = '3DObject';\nconst REFRESH_TOKEN_TIMEOUT = 1800; // 30 minutes in seconds\nconst CESIUM_DATASET_PREFIX = 'https://';\n// const FS_FILE_TOO_LARGE = 'ERR_FS_FILE_TOO_LARGE';\n\n/**\n * Converter from 3d-tiles tileset to i3s layer\n */\nexport default class I3SConverter {\n nodePages: NodePages;\n options: any;\n layers0Path: string;\n materialMap: Map<string, number>;\n materialDefinitions: I3SMaterialDefinition[];\n geometryMap: Map<string, number>;\n geometryConfigs: {hasTexture: boolean; hasUvRegions: boolean}[];\n vertexCounter: number;\n layers0: SceneLayer3D | null;\n featuresHashArray: string[];\n refinementCounter: {\n tilesCount: number;\n tilesWithAddRefineCount: number;\n };\n validate: boolean;\n boundingVolumeWarnings?: string[] = [];\n conversionStartTime: [number, number] = [0, 0];\n refreshTokenTime: [number, number] = [0, 0];\n sourceTileset: Tiles3DTilesetJSONPostprocessed | null = null;\n loadOptions: Tiles3DLoaderOptions = {\n _nodeWorkers: true,\n reuseWorkers: true,\n useLocalLibraries: true,\n basis: {\n format: 'rgba32',\n // We need to load local fs workers because nodejs can't load workers from the Internet\n workerUrl: './modules/textures/dist/basis-worker-node.js'\n },\n // We need to load local fs workers because nodejs can't load workers from the Internet\n draco: {workerUrl: './modules/draco/dist/draco-worker-node.js'},\n fetch: {},\n modules: {}\n };\n geoidHeightModel: Geoid | null = null;\n Loader: LoaderWithParser = Tiles3DLoader;\n generateTextures: boolean;\n generateBoundingVolumes: boolean;\n layersHasTexture: boolean;\n workerSource: {[key: string]: string} = {};\n writeQueue: WriteQueue<WriteQueueItem> = new WriteQueue();\n compressList: string[] | null = null;\n preprocessData: PreprocessData = {\n meshTopologyTypes: new Set(),\n metadataClasses: new Set()\n };\n\n constructor() {\n this.nodePages = new NodePages(writeFile, HARDCODED_NODES_PER_PAGE, this);\n this.options = {};\n this.layers0Path = '';\n this.materialMap = new Map();\n this.materialDefinitions = [];\n this.geometryMap = new Map();\n this.geometryConfigs = [];\n this.vertexCounter = 0;\n this.layers0 = null;\n this.featuresHashArray = [];\n this.refinementCounter = {\n tilesCount: 0,\n tilesWithAddRefineCount: 0\n };\n this.validate = false;\n this.generateTextures = false;\n this.generateBoundingVolumes = false;\n this.layersHasTexture = false;\n this.compressList = null;\n }\n\n /**\n * Convert a 3d tileset\n * @param options\n * @param options.inputUrl the url to read the tileset from\n * @param options.outputPath the output filename\n * @param options.tilesetName the output name of the tileset\n * @param options.maxDepth The max tree depth of conversion\n * @param options.slpk Generate slpk (Scene Layer Packages) output file\n * @param options.sevenZipExe Location of 7z.exe archiver to create slpk on Windows\n * @param options.egmFilePath location of *.pgm file to convert heights from ellipsoidal to gravity-related format\n * @param options.token Token for Cesium ION tilesets authentication\n * @param options.draco Generate I3S 1.7 draco compressed geometries\n * @param options.validate -enable validation\n * @param options.generateTextures - generate alternative type of textures (to have non-compressed jpeg/png and compressed ktx2)\n * @param options.generateBoundingVolumes - generate bounding volumes from vertices coordinates instead of source tiles bounding volumes\n * @param options.instantNodeWriting - Keep created 3DNodeIndexDocument files on disk instead of memory. This option reduce memory usage but decelerates conversion speed\n */\n async convert(options: {\n inputUrl: string;\n outputPath: string;\n tilesetName: string;\n sevenZipExe: string;\n egmFilePath: string;\n maxDepth?: number;\n slpk?: boolean;\n token?: string;\n draco?: boolean;\n mergeMaterials?: boolean;\n validate?: boolean;\n generateTextures?: boolean;\n generateBoundingVolumes?: boolean;\n instantNodeWriting?: boolean;\n inquirer?: Promise<unknown>;\n metadataClass?: string;\n }): Promise<string> {\n if (isBrowser) {\n console.log(BROWSER_ERROR_MESSAGE);\n return BROWSER_ERROR_MESSAGE;\n }\n this.conversionStartTime = process.hrtime();\n const {\n tilesetName,\n slpk,\n egmFilePath,\n inputUrl,\n validate,\n outputPath,\n draco = true,\n sevenZipExe,\n maxDepth,\n token,\n generateTextures,\n generateBoundingVolumes,\n instantNodeWriting = false,\n mergeMaterials = true,\n inquirer,\n metadataClass\n } = options;\n this.options = {\n maxDepth,\n slpk,\n sevenZipExe,\n egmFilePath,\n draco,\n token,\n inputUrl,\n instantNodeWriting,\n mergeMaterials,\n inquirer,\n metadataClass\n };\n this.compressList = (this.options.instantNodeWriting && []) || null;\n this.validate = Boolean(validate);\n this.Loader = inputUrl.indexOf(CESIUM_DATASET_PREFIX) !== -1 ? CesiumIonLoader : Tiles3DLoader;\n this.generateTextures = Boolean(generateTextures);\n this.generateBoundingVolumes = Boolean(generateBoundingVolumes);\n\n this.writeQueue = new WriteQueue();\n this.writeQueue.startListening();\n\n console.log('Loading egm file...'); // eslint-disable-line\n this.geoidHeightModel = await load(egmFilePath, PGMLoader);\n console.log('Loading egm file completed!'); // eslint-disable-line\n\n if (slpk) {\n this.nodePages.useWriteFunction(writeFileForSlpk);\n }\n\n try {\n const preloadOptions = await this._fetchPreloadOptions();\n let tilesetUrl = inputUrl;\n if (preloadOptions.url) {\n tilesetUrl = preloadOptions.url;\n }\n if (preloadOptions.headers) {\n this.loadOptions.fetch = {headers: preloadOptions.headers};\n }\n this.sourceTileset = await loadFromArchive(tilesetUrl, this.Loader, this.loadOptions);\n\n const preprocessResult = await this.preprocessConversion();\n\n if (preprocessResult) {\n await this._createAndSaveTileset(outputPath, tilesetName);\n await this._finishConversion({slpk: Boolean(slpk), outputPath, tilesetName});\n }\n } catch (error) {\n throw error;\n } finally {\n await this.writeQueue.finalize();\n // Clean up worker pools\n const workerFarm = WorkerFarm.getWorkerFarm({});\n workerFarm.destroy();\n }\n return 'success';\n }\n\n /**\n * Preprocess stage of the tile converter. Traverse all the tiles tree and\n * check a tile content to be sure that the data is supported\n * @returns true - the conversion is possible, false - the tileset's content is not supported\n */\n private async preprocessConversion(): Promise<boolean> {\n console.log(`Analyze source tileset`);\n const sourceRootTile: Tiles3DTileJSONPostprocessed = this.sourceTileset!.root!;\n await traverseDatasetWith<null>(\n sourceRootTile,\n null,\n this.analyzeTile.bind(this),\n undefined,\n this.options.maxDepth\n );\n const {meshTopologyTypes, metadataClasses} = this.preprocessData;\n\n console.log(`------------------------------------------------`);\n console.log(`Preprocess results:`);\n console.log(`glTF mesh topology types: ${Array.from(meshTopologyTypes).join(', ')}`);\n\n if (metadataClasses.size) {\n console.log(\n `Feature metadata classes have been found: ${Array.from(metadataClasses).join(', ')}`\n );\n } else {\n console.log('Feature metadata classes have not been found');\n }\n\n console.log(`------------------------------------------------`);\n if (\n !meshTopologyTypes.has(GLTFPrimitiveModeString.TRIANGLES) &&\n !meshTopologyTypes.has(GLTFPrimitiveModeString.TRIANGLE_STRIP)\n ) {\n console.log(\n 'The tileset is of unsupported mesh topology types. The conversion will be interrupted.'\n );\n console.log(`------------------------------------------------`);\n return false;\n }\n\n if (metadataClasses.size > 1) {\n if (this.options.metadataClass?.length) {\n console.log(`${this.options.metadataClass} has been selected`);\n } else if (this.options.inquirer) {\n const result = await this.options.inquirer.prompt([\n {\n name: 'metadataClass',\n type: 'list',\n message: 'Select feature metadata data class to convert...',\n choices: Array.from(metadataClasses)\n }\n ]);\n this.options.metadataClass = result.metadataClass;\n console.log(`${result.metadataClass} has been selected`);\n } else {\n console.log(\n `A feature metadata class has not been selected. Start the converter with option \"--metadata-class\". For example, \"npx tile-converter ... --metadata-class ${\n Array.from(metadataClasses)[0]\n }\"`\n );\n console.log(`------------------------------------------------`);\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Analyze a tile content. The callback for preprocess stage.\n * @param sourceTile - 3DTiles tile JSON metadata\n * @param traversalProps - mandatory argument but it is not used for the preprocess stage\n * @returns - nothing\n */\n private async analyzeTile(\n sourceTile: Tiles3DTileJSONPostprocessed,\n traversalProps: null\n ): Promise<null> {\n const isTileset = isNestedTileset(sourceTile);\n if (isTileset) {\n await loadNestedTileset(this.sourceTileset, sourceTile, this.loadOptions);\n return null;\n }\n if (sourceTile.id) {\n console.log(`[analyze]: ${sourceTile.id}`); // eslint-disable-line\n }\n\n let tileContent: Tiles3DTileContent | null = null;\n try {\n tileContent = await loadTile3DContent(this.sourceTileset, sourceTile, {\n ...this.loadOptions,\n '3d-tiles': {...this.loadOptions['3d-tiles'], loadGLTF: false}\n });\n } catch (error) {\n console.log(\n `[warning]: Failed to load ${sourceTile.contentUrl}. An I3S tile with empty content will be added to the output tileset`\n );\n }\n const tilePreprocessData = await analyzeTileContent(tileContent);\n mergePreprocessData(this.preprocessData, tilePreprocessData);\n\n return null;\n }\n\n /**\n * Convert and save the layer and embedded tiles\n * @param outputPath - path to save output data\n * @param tilesetName - new tileset path\n */\n private async _createAndSaveTileset(outputPath: string, tilesetName: string): Promise<void> {\n const tilesetPath = join(`${outputPath}`, `${tilesetName}`);\n // Removing the tilesetPath needed to exclude erroneous files after conversion\n try {\n await removeDir(tilesetPath);\n } catch (e) {\n // do nothing\n }\n\n this.layers0Path = join(tilesetPath, 'SceneServer', 'layers', '0');\n\n this.materialDefinitions = [];\n this.materialMap = new Map();\n\n const sourceRootTile: Tiles3DTileJSONPostprocessed = this.sourceTileset!.root!;\n const sourceBoundingVolume = createBoundingVolume(\n sourceRootTile.boundingVolume,\n new Matrix4(sourceRootTile.transform),\n null\n );\n\n this._formLayers0(\n tilesetName,\n sourceBoundingVolume,\n this.sourceTileset?.root?.boundingVolume?.region\n );\n\n const boundingVolumes = createBoundingVolumes(sourceBoundingVolume, this.geoidHeightModel!);\n\n await this.nodePages.push({\n index: 0,\n lodThreshold: 0,\n obb: boundingVolumes.obb,\n children: []\n });\n\n const rootNode = await NodeIndexDocument.createRootNode(boundingVolumes, this);\n await traverseDatasetWith<TraversalConversionProps>(\n sourceRootTile,\n {\n transform: new Matrix4(sourceRootTile.transform),\n parentNodes: [rootNode]\n },\n this.convertTile.bind(this),\n this.finalizeTile.bind(this),\n this.options.maxDepth\n );\n\n this.layers0!.materialDefinitions = this.materialDefinitions;\n // @ts-ignore\n this.layers0.geometryDefinitions = transform(\n this.geometryConfigs.map((config) => ({\n geometryConfig: {...config, draco: this.options.draco}\n })),\n geometryDefinitionTemlate()\n );\n\n if (this.layersHasTexture === false) {\n this.layers0!.store.defaultGeometrySchema.ordering =\n this.layers0!.store.defaultGeometrySchema.ordering.filter(\n (attribute) => attribute !== 'uv0'\n );\n }\n\n await this._writeLayers0();\n createSceneServerPath(tilesetName, this.layers0!, tilesetPath);\n for (const filePath of this.compressList || []) {\n await compressFileWithGzip(filePath);\n await removeFile(filePath);\n }\n await this.nodePages.save();\n await this.writeQueue.finalize();\n await this._createSlpk(tilesetPath);\n }\n\n /**\n * Form object of 3DSceneLayer https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DSceneLayer.cmn.md\n * @param tilesetName - Name of layer\n * @param sourceBoundingVolume - initialized bounding volume of the source root tile\n * @param boundingVolumeRegion - region bounding volume of the source root tile\n */\n private _formLayers0(\n tilesetName: string,\n sourceBoundingVolume: OrientedBoundingBox | BoundingSphere,\n boundingVolumeRegion?: number[]\n ): void {\n if (!this.sourceTileset?.root) {\n return;\n }\n const fullExtent = convertBoundingVolumeToI3SFullExtent(sourceBoundingVolume);\n if (boundingVolumeRegion) {\n fullExtent.zmin = boundingVolumeRegion[4];\n fullExtent.zmax = boundingVolumeRegion[5];\n }\n const extent = [fullExtent.xmin, fullExtent.ymin, fullExtent.xmax, fullExtent.ymax];\n const layers0data = {\n version: `{${uuidv4().toUpperCase()}}`,\n id: 0,\n name: tilesetName,\n href: './layers/0',\n store: {\n id: `{${uuidv4().toUpperCase()}}`,\n extent\n },\n nodePages: {\n nodesPerPage: HARDCODED_NODES_PER_PAGE\n },\n compressGeometry: this.options.draco,\n fullExtent\n };\n this.layers0 = transform(layers0data, layersTemplate());\n }\n\n /**\n * Write 3DSceneLayer https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3DSceneLayer.cmn.md in file\n */\n private async _writeLayers0(): Promise<void> {\n if (this.options.slpk) {\n await this.writeQueue.enqueue({\n archiveKey: '3dSceneLayer.json.gz',\n writePromise: () =>\n writeFileForSlpk(this.layers0Path, JSON.stringify(this.layers0), '3dSceneLayer.json')\n });\n } else {\n await this.writeQueue.enqueue({\n writePromise: () => writeFile(this.layers0Path, JSON.stringify(this.layers0))\n });\n }\n }\n\n /**\n * Pack files into *.slpk archive\n * @param tilesetPath - Path to save file\n */\n private async _createSlpk(tilesetPath: string): Promise<void> {\n if (this.options.slpk) {\n const slpkTilesetPath = join(tilesetPath, 'SceneServer', 'layers', '0');\n const slpkFileName = `${tilesetPath}.slpk`;\n await compressWithChildProcess(\n slpkTilesetPath,\n slpkFileName,\n 0,\n '.',\n this.options.sevenZipExe\n );\n\n // TODO: `addFileToZip` corrupts archive so it can't be validated with windows i3s_converter.exe\n // const fileHash128Path = `${tilesetPath}/@specialIndexFileHASH128@`;\n // try {\n // await generateHash128FromZip(slpkFileName, fileHash128Path);\n // await addFileToZip(\n // tilesetPath,\n // '@specialIndexFileHASH128@',\n // slpkFileName,\n // this.options.sevenZipExe\n // );\n // } catch (error) {\n // if (error.code === FS_FILE_TOO_LARGE) {\n // console.warn(`${slpkFileName} file is too big to generate a hash`); // eslint-disable-line\n // } else {\n // console.error(error); // eslint-disable-line\n // }\n // }\n // All converted files are contained in slpk now they can be deleted\n try {\n await removeDir(tilesetPath);\n } catch (e) {\n // do nothing\n }\n }\n }\n\n /**\n * Convert the specific 3DTiles tile to I3S nodes.\n * This is callback function for the traversal generic function\n * @param sourceTile - current 3DTiles tile JSON metadata\n * @param traversalProps - traversal properties calculated recursively\n * @returns - traversal properties for the child tiles\n */\n private async convertTile(\n sourceTile: Tiles3DTileJSONPostprocessed,\n traversalProps: TraversalConversionProps\n ): Promise<TraversalConversionProps> {\n const isTileset = isNestedTileset(sourceTile);\n if (isTileset || sourceTile.type === 'empty') {\n if (isTileset) {\n if (sourceTile.id) {\n console.log(`[load]: ${sourceTile.id}`); // eslint-disable-line\n }\n await loadNestedTileset(this.sourceTileset, sourceTile, this.loadOptions);\n }\n return traversalProps;\n }\n if (sourceTile.id) {\n console.log(`[convert]: ${sourceTile.id}`); // eslint-disable-line\n }\n\n const {parentNodes, transform} = traversalProps;\n let transformationMatrix: Matrix4 = transform.clone();\n if (sourceTile.transform) {\n transformationMatrix = transformationMatrix.multiplyRight(sourceTile.transform);\n }\n const parentNode = parentNodes[0];\n const childNodes = await this._createNode(parentNode, sourceTile, transformationMatrix);\n await parentNode.addChildren(childNodes);\n\n const newTraversalProps: TraversalConversionProps = {\n transform: transformationMatrix,\n parentNodes: childNodes\n };\n return newTraversalProps;\n }\n\n /**\n * Do final action with nodes after the current node and all child nodes been converted.\n * @param conversionResults - array of conversion results of the current node\n * @param currentTraversalProps - traversal properties of the current node\n */\n private async finalizeTile(\n conversionResults: TraversalConversionProps[],\n currentTraversalProps: TraversalConversionProps\n ): Promise<void> {\n for (const result of conversionResults) {\n for (const node of result.parentNodes) {\n await node.addNeighbors();\n }\n }\n for (const node of currentTraversalProps.parentNodes) {\n await node.save();\n }\n }\n\n /**\n * Convert tile to one or more I3S nodes\n * @param parentNode - 3DNodeIndexDocument of parent node\n * @param sourceTile - source 3DTile data\n * @param transformationMatrix - transformation matrix of the current tile, calculated recursively multiplying\n * transform of all parent tiles and transform of the current tile\n * @param level - tree level\n */\n private async _createNode(\n parentNode: NodeIndexDocument,\n sourceTile: Tiles3DTileJSONPostprocessed,\n transformationMatrix: Matrix4\n ): Promise<NodeIndexDocument[]> {\n this._checkAddRefinementTypeForTile(sourceTile);\n\n await this._updateTilesetOptions();\n\n let tileContent: Tiles3DTileContent | null = null;\n try {\n tileContent = await loadTile3DContent(this.sourceTileset, sourceTile, this.loadOptions);\n } catch (error) {\n console.log(`[warning]: Failed to load ${sourceTile.contentUrl}`);\n }\n const sourceBoundingVolume = createBoundingVolume(\n sourceTile.boundingVolume,\n transformationMatrix,\n null\n );\n let boundingVolumes = createBoundingVolumes(sourceBoundingVolume, this.geoidHeightModel!);\n\n const propertyTable = getPropertyTable(tileContent, this.options.metadataClass);\n\n if (propertyTable) {\n /*\n Call the convertion procedure even if the node attributes have been already created.\n We will append new attributes only in case the property table is updated.\n According to ver 1.9 (see https://github.com/Esri/i3s-spec/blob/master/docs/1.9/attributeStorageInfo.cmn.md):\n \"The attributeStorageInfo object describes the structure of the binary attribute data resource of a layer, which is the same for every node in the layer.\"\n */\n this._convertPropertyTableToNodeAttributes(propertyTable);\n }\n\n const resourcesData = await this._convertResources(\n sourceTile,\n transformationMatrix,\n sourceBoundingVolume,\n tileContent,\n parentNode.inPageId,\n propertyTable\n );\n\n const nodes: NodeIndexDocument[] = [];\n const nodeIds: number[] = [];\n const nodesInPage: NodeInPage[] = [];\n const emptyResources = {\n geometry: null,\n compressedGeometry: null,\n texture: null,\n hasUvRegions: false,\n sharedResources: null,\n meshMaterial: null,\n vertexCount: null,\n attributes: null,\n featureCount: null,\n boundingVolumes: null\n };\n\n for (const resources of resourcesData || [emptyResources]) {\n this.layersHasTexture = this.layersHasTexture || Boolean(resources.texture);\n\n if (this.generateBoundingVolumes && resources.boundingVolumes) {\n boundingVolumes = resources.boundingVolumes;\n }\n\n const lodSelection = convertGeometricErrorToScreenThreshold(sourceTile, boundingVolumes);\n const maxScreenThresholdSQ = lodSelection.find(\n (val) => val.metricType === 'maxScreenThresholdSQ'\n ) || {maxError: 0};\n\n const nodeInPage = await this._updateNodeInNodePages(\n maxScreenThresholdSQ,\n boundingVolumes,\n sourceTile,\n parentNode.inPageId,\n resources\n );\n\n const nodeData = await NodeIndexDocument.createNodeIndexDocument(\n parentNode,\n boundingVolumes,\n lodSelection,\n nodeInPage,\n resources\n );\n const node = await new NodeIndexDocument(nodeInPage.index, this).addData(nodeData);\n nodes.push(node);\n\n if (nodeInPage.mesh) {\n await this._writeResources(resources, node.id);\n }\n\n if (this.validate) {\n this.boundingVolumeWarnings = validateNodeBoundingVolumes(nodeData);\n\n if (this.boundingVolumeWarnings && this.boundingVolumeWarnings.length) {\n console.warn('Bounding Volume Warnings: ', ...this.boundingVolumeWarnings); //eslint-disable-line\n }\n }\n\n nodeIds.push(nodeInPage.index);\n nodesInPage.push(nodeInPage);\n }\n\n return nodes;\n }\n\n /**\n * Convert tile to one or more I3S nodes\n * @param sourceTile - source tile (3DTile)\n * @param transformationMatrix - transformation matrix of the current tile, calculated recursively multiplying\n * transform of all parent tiles and transform of the current tile\n * @param boundingVolume - initialized bounding volume of the source tile\n * @param tileContent - content of the source tile\n * @param parentId - id of parent node in node pages\n * @param propertyTable - batch table from b3dm / feature properties from EXT_FEATURE_METADATA, EXT_MESH_FEATURES or EXT_STRUCTURAL_METADATA\n * @returns - converted node resources\n */\n private async _convertResources(\n sourceTile: Tiles3DTileJSONPostprocessed,\n transformationMatrix: Matrix4,\n boundingVolume: OrientedBoundingBox | BoundingSphere,\n tileContent: Tiles3DTileContent | null,\n parentId: number,\n propertyTable: FeatureTableJson | null\n ): Promise<I3SConvertedResources[] | null> {\n if (!this.isContentSupported(sourceTile) || !tileContent) {\n return null;\n }\n const draftObb = {\n center: [],\n halfSize: [],\n quaternion: []\n };\n const resourcesData = await convertB3dmToI3sGeometry(\n tileContent,\n transformationMatrix,\n boundingVolume,\n async () => (await this.nodePages.push({index: 0, obb: draftObb}, parentId)).index,\n propertyTable,\n this.featuresHashArray,\n this.layers0?.attributeStorageInfo,\n this.options.draco,\n this.generateBoundingVolumes,\n this.options.mergeMaterials,\n this.geoidHeightModel!,\n this.loadOptions.modules as Record<string, string>,\n this.options.metadataClass\n );\n return resourcesData;\n }\n\n /**\n * Update node object (https://github.com/Esri/i3s-spec/blob/master/docs/1.7/node.cmn.md)\n * in node pages (https://github.com/Esri/i3s-spec/blob/master/docs/1.7/nodePage.cmn.md)\n * @param maxScreenThresholdSQ - Level of Details (LOD) metric\n * @param boundingVolumes - Bounding volumes\n * @param sourceTile - source tile (3DTile)\n * @param parentId - id of parent node in node pages\n * @param resources - the node resources data\n * @param resources.meshMaterial - PBR-like material object\n * @param resources.texture - texture image\n * @param resources.vertexCount - number of vertices in geometry\n * @param resources.featureCount - number of features\n * @param resources.geometry - Uint8Array with geometry attributes\n * @return the node object in node pages\n */\n private async _updateNodeInNodePages(\n maxScreenThresholdSQ: MaxScreenThresholdSQ,\n boundingVolumes: BoundingVolumes,\n sourceTile: Tiles3DTileJSONPostprocessed,\n parentId: number,\n resources: I3SConvertedResources\n ): Promise<NodeInPage> {\n const {meshMaterial, texture, vertexCount, featureCount, geometry, hasUvRegions} = resources;\n const nodeInPage: NodeInPage = {\n index: 0,\n lodThreshold: maxScreenThresholdSQ.maxError,\n obb: boundingVolumes.obb,\n children: []\n };\n if (geometry && this.isContentSupported(sourceTile)) {\n nodeInPage.mesh = {\n geometry: {\n definition: this.findOrCreateGeometryDefinition(Boolean(texture), hasUvRegions),\n resource: 0\n },\n attribute: {\n resource: 0\n },\n material: {\n definition: 0\n }\n };\n }\n\n let nodeId = resources.nodeId;\n let node: NodeInPage;\n if (!nodeId) {\n node = await this.nodePages.push(nodeInPage, parentId);\n } else {\n node = await this.nodePages.getNodeById(nodeId);\n }\n\n if (!nodeInPage.mesh) {\n console.log(`[warning]: node ${node.index} is created with empty content`);\n }\n\n NodePages.updateAll(node, nodeInPage);\n if (meshMaterial) {\n NodePages.updateMaterialByNodeId(node, this._findOrCreateMaterial(meshMaterial));\n }\n if (texture) {\n const texelCountHint = texture.image.height * texture.image.width;\n NodePages.updateTexelCountHintByNodeId(node, texelCountHint);\n }\n if (vertexCount) {\n this.vertexCounter += vertexCount;\n NodePages.updateVertexCountByNodeId(node, vertexCount);\n }\n NodePages.updateNodeAttributeByNodeId(node);\n if (featureCount) {\n NodePages.updateFeatureCountByNodeId(node, featureCount);\n }\n\n this.nodePages.saveNode(node);\n\n return node;\n }\n\n /**\n * Write node resources in files\n * @param resources - source tile (3DTile)\n * @param resources.geometry - Uint8Array with geometry attributes\n * @param resources.compressedGeometry - Uint8Array with compressed (draco) geometry\n * @param resources.texture - texture image\n * @param resources.sharedResources - shared resource data object\n * @param resources.attributes - feature attributes\n * @return {Promise<void>}\n */\n private async _writeResources(resources: I3SConvertedResources, nodePath: string): Promise<void> {\n const {\n geometry: geometryBuffer,\n compressedGeometry,\n texture,\n sharedResources,\n attributes\n } = resources;\n const childPath = join(this.layers0Path, 'nodes', nodePath);\n const slpkChildPath = join('nodes', nodePath);\n\n await this._writeGeometries(geometryBuffer!, compressedGeometry!, childPath, slpkChildPath);\n await this._writeShared(sharedResources, childPath, slpkChildPath, nodePath);\n await this._writeTexture(texture, childPath, slpkChildPath);\n await this._writeAttributes(attributes, childPath, slpkChildPath);\n }\n\n /**\n * Write non-compressed and compressed geometries in files\n * @param geometryBuffer - Uint8Array with geometry attributes\n * @param compressedGeometry - Uint8Array with compressed (draco) geometry\n * @param childPath - a child path to write resources\n * @param slpkChildPath - resource path inside *slpk file\n */\n private async _writeGeometries(\n geometryBuffer: ArrayBuffer,\n compressedGeometry: Promise<ArrayBuffer>,\n childPath: string,\n slpkChildPath: string\n ): Promise<void> {\n if (this.options.slpk) {\n const slpkGeometryPath = join(childPath, 'geometries');\n await this.writeQueue.enqueue({\n archiveKey: `${slpkChildPath}/geometries/0.bin.gz`,\n writePromise: () => writeFileForSlpk(slpkGeometryPath, geometryBuffer, '0.bin')\n });\n } else {\n const geometryPath = join(childPath, 'geometries/0/');\n await this.writeQueue.enqueue({\n writePromise: () => writeFile(geometryPath, geometryBuffer, 'index.bin')\n });\n }\n\n if (this.options.draco) {\n if (this.options.slpk) {\n const slpkCompressedGeometryPath = join(childPath, 'geometries');\n await this.writeQueue.enqueue({\n archiveKey: `${slpkChildPath}/geometries/1.bin.gz`,\n writePromise: () =>\n writeFileForSlpk(slpkCompressedGeometryPath, compressedGeometry, '1.bin')\n });\n } else {\n const compressedGeometryPath = join(childPath, 'geometries/1/');\n await this.writeQueue.enqueue({\n writePromise: () => writeFile(compressedGeometryPath, compressedGeometry, 'index.bin')\n });\n }\n }\n }\n\n /**\n * Write shared resources in a file\n * @param sharedResources - shared resource data object\n * @param childPath - a child path to write resources\n * @param slpkChildPath - resource path inside *slpk file\n * @param nodePath - a node path\n */\n private async _writeShared(\n sharedResources: SharedResourcesArrays | null,\n childPath: string,\n slpkChildPath: string,\n nodePath: string\n ): Promise<void> {\n if (!sharedResources) {\n return;\n }\n sharedResources.nodePath = nodePath;\n const sharedData = transform(sharedResources, sharedResourcesTemplate());\n const sharedDataStr = JSON.stringify(sharedData);\n if (this.options.slpk) {\n const slpkSharedPath = join(childPath, 'shared');\n await this.writeQueue.enqueue({\n archiveKey: `${slpkChildPath}/shared/sharedResource.json.gz`,\n writePromise: () => writeFileForSlpk(slpkSharedPath, sharedDataStr, 'sharedResource.json')\n });\n } else {\n const sharedPath = join(childPath, 'shared/');\n await this.writeQueue.enqueue({writePromise: () => writeFile(sharedPath, sharedDataStr)});\n }\n }\n\n /**\n * Generates textures based on texture mime type and fill in textureSetDefinitions data.\n * @param texture - the texture image\n * @param childPath - a child path to write resources\n * @param slpkChildPath - the resource path inside *slpk file\n */\n private async _writeTexture(\n texture: GLTFImagePostprocessed,\n childPath: string,\n slpkChildPath: string\n ): Promise<void> {\n if (texture) {\n const format = this._getFormatByMimeType(texture?.mimeType);\n const formats: TextureSetDefinitionFormats = [];\n const textureData = texture.bufferView!.data;\n\n switch (format) {\n case 'jpg':\n case 'png': {\n formats.push({name: '0', format});\n await this.writeTextureFile(textureData, '0', format, childPath, slpkChildPath);\n\n if (this.generateTextures) {\n formats.push({name: '1', format: 'ktx2'});\n // For Node.js texture.image.data is type of Buffer\n const copyArrayBuffer = texture.image.data.subarray();\n const arrayToEncode = new Uint8Array(copyArrayBuffer);\n const ktx2TextureData = encode(\n {...texture.image, data: arrayToEncode},\n KTX2BasisWriterWorker,\n {\n ...KTX2BasisWriterWorker.options,\n ['ktx2-basis-writer']: {\n // We need to load local fs workers because nodejs can't load workers from the Internet\n workerUrl: './modules/textures/dist/ktx2-basis-writer-worker-node.js'\n },\n reuseWorkers: true,\n _nodeWorkers: true,\n useLocalLibraries: true\n }\n );\n\n await this.writeTextureFile(ktx2TextureData, '1', 'ktx2', childPath, slpkChildPath);\n }\n\n break;\n }\n\n case 'ktx2': {\n formats.push({name: '1', format});\n await this.writeTextureFile(textureData, '1', format, childPath, slpkChildPath);\n\n if (this.generateTextures) {\n formats.push({name: '0', format: 'jpg'});\n const decodedFromKTX2TextureData = encode(texture.image!.data[0], ImageWriter);\n await this.writeTextureFile(\n decodedFromKTX2TextureData,\n '0',\n 'jpg',\n childPath,\n slpkChildPath\n );\n }\n }\n }\n\n if (!this.layers0!.textureSetDefinitions!.length) {\n this.layers0!.textureSetDefinitions!.push({formats});\n this.layers0!.textureSetDefinitions!.push({formats, atlas: true});\n }\n }\n }\n\n /**\n * Write the texture image in a file\n * @param textureData\n * @param name\n * @param format\n * @param childPath\n * @param slpkChildPath\n */\n private async writeTextureFile(\n textureData: Uint8Array | Promise<ArrayBuffer>,\n name: string,\n format: 'jpg' | 'png' | 'ktx2',\n childPath: string,\n slpkChildPath: string\n ): Promise<void> {\n if (this.options.slpk) {\n const slpkTexturePath = join(childPath, 'textures');\n const compress = false;\n\n await this.writeQueue.enqueue({\n archiveKey: `${slpkChildPath}/textures/${name}.${format}`,\n writePromise: () =>\n writeFileForSlpk(slpkTexturePath, textureData, `${name}.${format}`, compress)\n });\n } else {\n const texturePath = join(childPath, `textures/${name}/`);\n await this.writeQueue.enqueue({\n writePromise: () => writeFile(texturePath, textureData, `index.${format}`)\n });\n }\n }\n\n /**\n * Write feature attributes in files\n * @param attributes - feature attributes\n * @param childPath - a child path to write resources\n * @param slpkChildPath - the resource path inside *slpk file\n */\n private async _writeAttributes(\n attributes: ArrayBuffer[] | null = [],\n childPath: string,\n slpkChildPath: string\n ): Promise<void> {\n if (attributes?.length && this.layers0?.attributeStorageInfo?.length) {\n const minimumLength =\n attributes.length < this.layers0.attributeStorageInfo.length\n ? attributes.length\n : this.layers0.attributeStorageInfo.length;\n\n for (let index = 0; index < minimumLength; index++) {\n const folderName = this.layers0.attributeStorageInfo[index].key;\n const fileBuffer = new Uint8Array(attributes[index]);\n\n if (this.options.slpk) {\n const slpkAttributesPath = join(childPath, 'attributes', folderName);\n await this.writeQueue.enqueue({\n archiveKey: `${slpkChildPath}/attributes/${folderName}.bin.gz`,\n writePromise: () => writeFileForSlpk(slpkAttributesPath, fileBuffer, '0.bin')\n });\n } else {\n const attributesPath = join(childPath, `attributes/${folderName}/0`);\n await this.writeQueue.enqueue({\n writePromise: () => writeFile(attributesPath, fileBuffer, 'index.bin')\n });\n }\n }\n }\n }\n\n /**\n * Return file format by its MIME type\n * @param mimeType - feature attributes\n */\n private _getFormatByMimeType(mimeType: string | undefined): 'jpg' | 'png' | 'ktx2' {\n switch (mimeType) {\n case 'image/jpeg':\n return 'jpg';\n case 'image/png':\n return 'png';\n case 'image/ktx2':\n return 'ktx2';\n default:\n return 'jpg';\n }\n }\n\n /**\n * Find or create material in materialDefinitions array\n * @param material - end-to-end index of the node\n * @return material id\n */\n private _findOrCreateMaterial(material: I3SMaterialDefinition): number {\n const hash = md5(JSON.stringify(material));\n if (this.materialMap.has(hash)) {\n return this.materialMap.get(hash) || 0;\n }\n const newMaterialId = this.materialDefinitions.push(material) - 1;\n this.materialMap.set(hash, newMaterialId);\n return newMaterialId;\n }\n\n /**\n * Get unique geometry configuration index\n * In the end of conversion configurations will be transformed to geometryDefinitions array\n * @param hasTexture\n * @param hasUvRegions\n * @returns\n */\n private findOrCreateGeometryDefinition(hasTexture: boolean, hasUvRegions: boolean): number {\n const geometryConfig = {hasTexture, hasUvRegions};\n const hash = md5(JSON.stringify(geometryConfig));\n if (this.geometryMap.has(hash)) {\n return this.geometryMap.get(hash) || 0;\n }\n const newGeometryId = this.geometryConfigs.push(geometryConfig) - 1;\n this.geometryMap.set(hash, newGeometryId);\n return newGeometryId;\n }\n\n /**\n * Do conversion of 3DTiles property table to I3s node attributes.\n * @param propertyTable - Table with layer meta data.\n */\n private _convertPropertyTableToNodeAttributes(propertyTable: FeatureTableJson): void {\n let attributeIndex = 0;\n const propertyTableWithObjectId = {\n OBJECTID: [0],\n ...propertyTable\n };\n\n for (const key in propertyTableWithObjectId) {\n /*\n We will append new attributes only in case the property table is updated.\n According to ver 1.9 (see https://github.com/Esri/i3s-spec/blob/master/docs/1.9/attributeStorageInfo.cmn.md):\n \"The attributeStorageInfo object describes the structure of the binary attribute data resource of a layer, which is the same for every node in the layer.\"\n */\n const found = this.layers0!.attributeStorageInfo!.find((element) => element.name === key);\n if (!found) {\n const firstAttribute = propertyTableWithObjectId[key][0];\n const attributeType = getAttributeType(key, firstAttribute);\n\n const storageAttribute: AttributeStorageInfo = createdStorageAttribute(\n attributeIndex,\n key,\n attributeType\n );\n const fieldAttributeType = getFieldAttributeType(attributeType);\n const fieldAttribute = createFieldAttribute(key, fieldAttributeType);\n const popupInfo = createPopupInfo(propertyTableWithObjectId);\n\n this.layers0!.attributeStorageInfo!.push(storageAttribute);\n this.layers0!.fields!.push(fieldAttribute);\n this.layers0!.popupInfo = popupInfo;\n this.layers0!.layerType = _3D_OBJECT_LAYER_TYPE;\n }\n attributeIndex += 1;\n }\n }\n\n /**\n * Print statistics in the end of conversion\n * @param params - output files data\n */\n private async _finishConversion(params: {\n slpk: boolean;\n outputPath: string;\n tilesetName: string;\n }): Promise<void> {\n const {tilesCount, tilesWithAddRefineCount} = this.refinementCounter;\n const addRefinementPercentage = tilesWithAddRefineCount\n ? (tilesWithAddRefineCount / tilesCount) * 100\n : 0;\n const filesSize = await calculateFilesSize(params);\n const diff = process.hrtime(this.conversionStartTime);\n const conversionTime = timeConverter(diff);\n console.log(`------------------------------------------------`); // eslint-disable-line no-undef, no-console\n console.log(`Finishing conversion of ${_3D_TILES}`); // eslint-disable-line no-undef, no-console\n console.log(`Total conversion time: ${conversionTime}`); // eslint-disable-line no-undef, no-console\n console.log(`Vertex count: `, this.vertexCounter); // eslint-disable-line no-undef, no-console\n console.log(`File(s) size: `, filesSize, ' bytes'); // eslint-disable-line no-undef, no-console\n console.log(`Percentage of tiles with \"ADD\" refinement type:`, addRefinementPercentage, '%'); // eslint-disable-line no-undef, no-console\n console.log(`------------------------------------------------`); // eslint-disable-line no-undef, no-console\n }\n\n /**\n * Fetch preload options for ION tileset\n */\n private async _fetchPreloadOptions(): Promise<any> {\n if (!this.Loader.preload) {\n return {};\n }\n const options = {\n 'cesium-ion': {accessToken: this.options.token || ION_DEFAULT_TOKEN}\n };\n const preloadOptions = await this.Loader.preload(this.options.inputUrl, options);\n this.refreshTokenTime = process.hrtime();\n return {...options, ...preloadOptions};\n }\n\n /**\n * Update options of source tileset\n */\n private async _updateTilesetOptions(): Promise<void> {\n const diff = process.hrtime(this.refreshTokenTime);\n if (diff[0] < REFRESH_TOKEN_TIMEOUT) {\n return;\n }\n this.refreshTokenTime = process.hrtime();\n\n const preloadOptions = await this._fetchPreloadOptions();\n if (preloadOptions.headers) {\n this.loadOptions.fetch = {\n ...this.loadOptions.fetch,\n headers: preloadOptions.headers\n };\n console.log('Authorization Bearer token has been updated'); // eslint-disable-line no-undef, no-console\n }\n }\n\n /** Do calculations of all tiles and tiles with \"ADD\" type of refinement.\n * @param tile\n */\n private _checkAddRefinementTypeForTile(tile: Tiles3DTileJSONPostprocessed): void {\n const ADD_TILE_REFINEMENT = 1;\n\n if (tile.refine === ADD_TILE_REFINEMENT) {\n this.refinementCounter.tilesWithAddRefineCount += 1;\n console.warn('This tile uses \"ADD\" type of refinement'); // eslint-disable-line\n }\n\n this.refinementCounter.tilesCount += 1;\n }\n\n /**\n * Check if the tile's content format is supported by the converter\n * @param sourceTile\n * @returns\n */\n private isContentSupported(sourceTile: Tiles3DTileJSONPostprocessed): boolean {\n return ['b3dm', 'glTF', 'scenegraph'].includes(sourceTile.type || '');\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"geometry-definitions.js","names":["transform","PLAIN_GEOMETRY_DEFINITION","offset","default","position","type","component","normal","uv0","path","val","omitValues","color","uvRegion","featureId","binding","faceRange","COMPRESSED_GEOMETRY_DEFINITION","result","hasTexture","push","hasUvRegions","GEOMETRY_DEFINITION","geometryBuffers","draco","geometryConfig"],"sources":["../../../../src/i3s-converter/json-templates/geometry-definitions.ts"],"sourcesContent":["import transform from 'json-map-transform';\n\nconst PLAIN_GEOMETRY_DEFINITION = () => ({\n offset: {\n default: 8\n },\n position: {\n default: {\n type: 'Float32',\n component: 3\n }\n },\n normal: {\n default: {\n type: 'Float32',\n component: 3\n }\n },\n uv0: {\n path: 'hasTexture',\n transform: (val) => (val && {type: 'Float32', component: 2}) || false,\n omitValues: [false]\n },\n color: {\n default: {\n type: 'UInt8',\n component: 4\n }\n },\n uvRegion: {\n path: 'hasUvRegions',\n transform: (val) => (val && {type: 'UInt16', component: 4}) || false,\n omitValues: [false]\n },\n featureId: {\n default: {\n binding: 'per-feature',\n type: 'UInt64',\n component: 1\n }\n },\n faceRange: {\n default: {\n binding: 'per-feature',\n type: 'UInt32',\n component: 2\n }\n }\n});\n\nconst COMPRESSED_GEOMETRY_DEFINITION = () => ({\n 'compressedAttributes.encoding': {\n default: 'draco'\n },\n 'compressedAttributes.attributes': {\n path: 'geometryConfig',\n transform: (val) => {\n const result = ['position', 'normal'];\n if (val.hasTexture) {\n result.push('uv0');\n }\n result.push('color');\n if (val.hasUvRegions) {\n result.push('uv-region');\n }\n result.push('feature-index');\n return result;\n }\n }\n});\n\nexport const GEOMETRY_DEFINITION = () => ({\n geometryBuffers: {\n path: 'geometryConfig',\n transform: (val) => {\n const result = [transform(val, PLAIN_GEOMETRY_DEFINITION())];\n if (val.draco) {\n result.push(transform({geometryConfig: val}, COMPRESSED_GEOMETRY_DEFINITION()));\n }\n return result;\n }\n }\n});\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,oBAAoB;AAE1C,MAAMC,yBAAyB,GAAGA,CAAA,MAAO;EACvCC,MAAM,EAAE;IACNC,OAAO,EAAE;EACX,CAAC;EACDC,QAAQ,EAAE;IACRD,OAAO,EAAE;MACPE,IAAI,EAAE,SAAS;MACfC,SAAS,EAAE;IACb;EACF,CAAC;EACDC,MAAM,EAAE;IACNJ,OAAO,EAAE;MACPE,IAAI,EAAE,SAAS;MACfC,SAAS,EAAE;IACb;EACF,CAAC;EACDE,GAAG,EAAE;IACHC,IAAI,EAAE,YAAY;IAClBT,SAAS,EAAGU,GAAG,IAAMA,GAAG,IAAI;MAACL,IAAI,EAAE,SAAS;MAAEC,SAAS,EAAE;IAAC,CAAC,IAAK,KAAK;IACrEK,UAAU,EAAE,CAAC,KAAK;EACpB,CAAC;EACDC,KAAK,EAAE;IACLT,OAAO,EAAE;MACPE,IAAI,EAAE,OAAO;MACbC,SAAS,EAAE;IACb;EACF,CAAC;EACDO,QAAQ,EAAE;IACRJ,IAAI,EAAE,cAAc;IACpBT,SAAS,EAAGU,GAAG,IAAMA,GAAG,IAAI;MAACL,IAAI,EAAE,QAAQ;MAAEC,SAAS,EAAE;IAAC,CAAC,IAAK,KAAK;IACpEK,UAAU,EAAE,CAAC,KAAK;EACpB,CAAC;EACDG,SAAS,EAAE;IACTX,OAAO,EAAE;MACPY,OAAO,EAAE,aAAa;MACtBV,IAAI,EAAE,QAAQ;MACdC,SAAS,EAAE;IACb;EACF,CAAC;EACDU,SAAS,EAAE;IACTb,OAAO,EAAE;MACPY,OAAO,EAAE,aAAa;MACtBV,IAAI,EAAE,QAAQ;MACdC,SAAS,EAAE;IACb;EACF;AACF,CAAC,CAAC;AAEF,MAAMW,8BAA8B,GAAGA,CAAA,MAAO;EAC5C,+BAA+B,EAAE;IAC/Bd,OAAO,EAAE;EACX,CAAC;EACD,iCAAiC,EAAE;IACjCM,IAAI,EAAE,gBAAgB;IACtBT,SAAS,EAAGU,GAAG,IAAK;MAClB,MAAMQ,MAAM,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;MACrC,IAAIR,GAAG,CAACS,UAAU,EAAE;QAClBD,MAAM,CAACE,IAAI,CAAC,KAAK,CAAC;MACpB;MACAF,MAAM,CAACE,IAAI,CAAC,OAAO,CAAC;MACpB,IAAIV,GAAG,CAACW,YAAY,EAAE;QACpBH,MAAM,CAACE,IAAI,CAAC,WAAW,CAAC;MAC1B;MACAF,MAAM,CAACE,IAAI,CAAC,eAAe,CAAC;MAC5B,OAAOF,MAAM;IACf;EACF;AACF,CAAC,CAAC;AAEF,OAAO,MAAMI,mBAAmB,GAAGA,CAAA,MAAO;EACxCC,eAAe,EAAE;IACfd,IAAI,EAAE,gBAAgB;IACtBT,SAAS,EAAGU,GAAG,IAAK;MAClB,MAAMQ,MAAM,GAAG,CAAClB,SAAS,CAACU,GAAG,EAAET,yBAAyB,CAAC,CAAC,CAAC,CAAC;MAC5D,IAAIS,GAAG,CAACc,KAAK,EAAE;QACbN,MAAM,CAACE,IAAI,CAACpB,SAAS,CAAC;UAACyB,cAAc,EAAEf;QAAG,CAAC,EAAEO,8BAA8B,CAAC,CAAC,CAAC,CAAC;MACjF;MACA,OAAOC,MAAM;IACf;EACF;AACF,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"layers.js","names":["transform","STORE","SPATIAL_REFERENCE","wkid","path","default","latestWkid","vcsWkid","latestVcsWkid","HEIGHT_MODEL_INFO","heightModel","vertCRS","heightUnit","NODE_PAGES","nodesPerPage","lodSelectionMetricType","FULL_EXTENT","xmin","ymin","xmax","ymax","zmin","zmax","LAYERS","version","val","toUpperCase","id","name","href","layerType","spatialReference","capabilities","store","fullExtent","heightModelInfo","nodePages","materialDefinitions","textureSetDefinitions","geometryDefinitions","attributeStorageInfo","fields","popupInfo"],"sources":["../../../../src/i3s-converter/json-templates/layers.ts"],"sourcesContent":["import transform from 'json-map-transform';\nimport {STORE} from './store';\n\nconst SPATIAL_REFERENCE = () => ({\n wkid: {\n path: 'wkid',\n default: 4326\n },\n latestWkid: {\n path: 'latestWkid',\n default: 4326\n },\n vcsWkid: {\n path: 'vcsWkid',\n default: 5773\n },\n latestVcsWkid: {\n path: 'latestVcsWkid',\n default: 5773\n }\n});\n\nconst HEIGHT_MODEL_INFO = () => ({\n heightModel: {\n path: 'heightModel',\n default: 'gravity_related_height'\n },\n vertCRS: {\n path: 'vertCRS',\n default: 'EGM96_Geoid'\n },\n heightUnit: {\n path: 'heightUnit',\n default: 'meter'\n }\n});\n\nconst NODE_PAGES = () => ({\n nodesPerPage: {\n path: 'nodesPerPage'\n },\n lodSelectionMetricType: {\n path: 'lodSelectionMetricType',\n default: 'maxScreenThresholdSQ'\n }\n});\n\nconst FULL_EXTENT = () => ({\n xmin: {\n path: 'xmin'\n },\n ymin: {\n path: 'ymin'\n },\n xmax: {\n path: 'xmax'\n },\n ymax: {\n path: 'ymax'\n },\n zmin: {\n path: 'zmin'\n },\n zmax: {\n path: 'zmax'\n }\n});\n\nexport const LAYERS = () => ({\n version: {\n path: 'version',\n transform: (val) => val.toUpperCase()\n },\n id: {\n path: 'id',\n default: 0\n },\n name: {\n path: 'name'\n },\n href: {\n path: 'href',\n default: './layers/0'\n },\n layerType: {\n path: 'layerType',\n default: 'IntegratedMesh'\n },\n spatialReference: {\n path: 'spatialReference',\n transform: (val) => transform(val, SPATIAL_REFERENCE())\n },\n capabilities: {\n path: 'capabilities',\n default: ['View', 'Query']\n },\n store: {\n path: 'store',\n transform: (val) => transform(val, STORE)\n },\n fullExtent: {\n path: 'fullExtent',\n transform: (val) => transform(val, FULL_EXTENT())\n },\n heightModelInfo: {\n path: 'heightModelInfo',\n transform: (val) => transform(val, HEIGHT_MODEL_INFO())\n },\n nodePages: {\n path: 'nodePages',\n transform: (val) => transform(val, NODE_PAGES())\n },\n materialDefinitions: {\n path: 'materialDefinitions',\n default: []\n },\n textureSetDefinitions: {\n path: 'textureSetDefinitions',\n default: []\n },\n geometryDefinitions: {\n path: 'geometryDefinitions',\n default: []\n },\n attributeStorageInfo: {\n path: 'attributeStorageInfo',\n default: []\n },\n fields: {\n path: 'fields',\n default: []\n },\n popupInfo: {\n path: 'popupInfo',\n default: null\n }\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"metadata.js","names":["METADATA","folderPattern","path","default","archiveCompressionType","resourceCompressionType","I3SVersion","nodeCount"],"sources":["../../../../src/i3s-converter/json-templates/metadata.ts"],"sourcesContent":["export const METADATA = () => ({\n folderPattern: {\n path: 'folderPattern',\n default: 'BASIC'\n },\n archiveCompressionType: {\n path: 'archiveCompressionType',\n default: 'STORE'\n },\n resourceCompressionType: {\n path: 'resourceCompressionType',\n default: 'GZIP'\n },\n I3SVersion: {\n path: 'I3SVersion',\n default: '1.8'\n },\n nodeCount: {\n path: 'nodeCount'\n }\n});\n"],"mappings":"AAAA,OAAO,MAAMA,QAAQ,GAAGA,CAAA,MAAO;EAC7BC,aAAa,EAAE;IACbC,IAAI,EAAE,eAAe;IACrBC,OAAO,EAAE;EACX,CAAC;EACDC,sBAAsB,EAAE;IACtBF,IAAI,EAAE,wBAAwB;IAC9BC,OAAO,EAAE;EACX,CAAC;EACDE,uBAAuB,EAAE;IACvBH,IAAI,EAAE,yBAAyB;IAC/BC,OAAO,EAAE;EACX,CAAC;EACDG,UAAU,EAAE;IACVJ,IAAI,EAAE,YAAY;IAClBC,OAAO,EAAE;EACX,CAAC;EACDI,SAAS,EAAE;IACTL,IAAI,EAAE;EACR;AACF,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.js","names":["transform","COORDINATES","mbs","path","obb","HREF","href","PARENT_NODE","id","NODE","version","level","lodSelection","default","metricType","maxError","children","neighbors","parentNode","val","sharedResource","featureData","geometryData","textureData","attributeData"],"sources":["../../../../src/i3s-converter/json-templates/node.ts"],"sourcesContent":["import transform from 'json-map-transform';\n\nconst COORDINATES = () => ({\n mbs: {\n path: 'mbs'\n },\n obb: {\n path: 'obb'\n }\n});\n\nconst HREF = () => ({\n href: {\n path: 'href'\n }\n});\n\nconst PARENT_NODE = () => ({\n id: {\n path: 'id'\n },\n ...HREF(),\n ...COORDINATES()\n});\n\nexport const NODE = () => ({\n version: {\n path: 'version'\n },\n id: {\n path: 'id'\n },\n path: {\n path: 'path'\n },\n level: {\n path: 'level'\n },\n ...COORDINATES(),\n lodSelection: {\n path: 'lodSelection',\n default: [\n {\n metricType: 'maxScreenThresholdSQ',\n maxError: 196349.54374999998\n },\n {\n metricType: 'maxScreenThreshold',\n maxError: 999.99999999999994\n }\n ]\n },\n children: {\n path: 'children',\n default: null\n },\n neighbors: {\n path: 'neighbors',\n default: null\n },\n parentNode: {\n path: 'parentNode',\n transform: (val) => transform(val, PARENT_NODE()),\n default: null\n },\n sharedResource: {\n path: 'sharedResource',\n default: null\n },\n featureData: {\n path: 'featureData',\n default: null\n },\n geometryData: {\n path: 'geometryData',\n default: null\n },\n textureData: {\n path: 'textureData',\n default: null\n },\n attributeData: {\n path: 'attributeData',\n default: null\n }\n});\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,oBAAoB;AAE1C,MAAMC,WAAW,GAAGA,CAAA,MAAO;EACzBC,GAAG,EAAE;IACHC,IAAI,EAAE;EACR,CAAC;EACDC,GAAG,EAAE;IACHD,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAEF,MAAME,IAAI,GAAGA,CAAA,MAAO;EAClBC,IAAI,EAAE;IACJH,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAEF,MAAMI,WAAW,GAAGA,CAAA,MAAO;EACzBC,EAAE,EAAE;IACFL,IAAI,EAAE;EACR,CAAC;EACD,GAAGE,IAAI,CAAC,CAAC;EACT,GAAGJ,WAAW,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,MAAMQ,IAAI,GAAGA,CAAA,MAAO;EACzBC,OAAO,EAAE;IACPP,IAAI,EAAE;EACR,CAAC;EACDK,EAAE,EAAE;IACFL,IAAI,EAAE;EACR,CAAC;EACDA,IAAI,EAAE;IACJA,IAAI,EAAE;EACR,CAAC;EACDQ,KAAK,EAAE;IACLR,IAAI,EAAE;EACR,CAAC;EACD,GAAGF,WAAW,CAAC,CAAC;EAChBW,YAAY,EAAE;IACZT,IAAI,EAAE,cAAc;IACpBU,OAAO,EAAE,CACP;MACEC,UAAU,EAAE,sBAAsB;MAClCC,QAAQ,EAAE;IACZ,CAAC,EACD;MACED,UAAU,EAAE,oBAAoB;MAChCC,QAAQ,EAAE;IACZ,CAAC;EAEL,CAAC;EACDC,QAAQ,EAAE;IACRb,IAAI,EAAE,UAAU;IAChBU,OAAO,EAAE;EACX,CAAC;EACDI,SAAS,EAAE;IACTd,IAAI,EAAE,WAAW;IACjBU,OAAO,EAAE;EACX,CAAC;EACDK,UAAU,EAAE;IACVf,IAAI,EAAE,YAAY;IAClBH,SAAS,EAAGmB,GAAG,IAAKnB,SAAS,CAACmB,GAAG,EAAEZ,WAAW,CAAC,CAAC,CAAC;IACjDM,OAAO,EAAE;EACX,CAAC;EACDO,cAAc,EAAE;IACdjB,IAAI,EAAE,gBAAgB;IACtBU,OAAO,EAAE;EACX,CAAC;EACDQ,WAAW,EAAE;IACXlB,IAAI,EAAE,aAAa;IACnBU,OAAO,EAAE;EACX,CAAC;EACDS,YAAY,EAAE;IACZnB,IAAI,EAAE,cAAc;IACpBU,OAAO,EAAE;EACX,CAAC;EACDU,WAAW,EAAE;IACXpB,IAAI,EAAE,aAAa;IACnBU,OAAO,EAAE;EACX,CAAC;EACDW,aAAa,EAAE;IACbrB,IAAI,EAAE,eAAe;IACrBU,OAAO,EAAE;EACX;AACF,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scene-server.js","names":["SCENE_SERVER","serviceItemId","path","serviceName","name","currentVersion","default","serviceVersion","supportedBindings","layers","transform","layers0"],"sources":["../../../../src/i3s-converter/json-templates/scene-server.ts"],"sourcesContent":["export const SCENE_SERVER = () => ({\n serviceItemId: {\n path: 'serviceItemId'\n },\n serviceName: {\n path: 'layerName'\n },\n name: {\n path: 'layerName'\n },\n currentVersion: {\n path: 'currentVersion',\n default: 10.7\n },\n serviceVersion: {\n path: 'serviceVersion',\n default: '1.8'\n },\n supportedBindings: {\n path: 'supportedBindings',\n default: ['REST']\n },\n layers: {\n path: 'layers0',\n transform: (layers0) => [layers0]\n }\n});\n"],"mappings":"AAAA,OAAO,MAAMA,YAAY,GAAGA,CAAA,MAAO;EACjCC,aAAa,EAAE;IACbC,IAAI,EAAE;EACR,CAAC;EACDC,WAAW,EAAE;IACXD,IAAI,EAAE;EACR,CAAC;EACDE,IAAI,EAAE;IACJF,IAAI,EAAE;EACR,CAAC;EACDG,cAAc,EAAE;IACdH,IAAI,EAAE,gBAAgB;IACtBI,OAAO,EAAE;EACX,CAAC;EACDC,cAAc,EAAE;IACdL,IAAI,EAAE,gBAAgB;IACtBI,OAAO,EAAE;EACX,CAAC;EACDE,iBAAiB,EAAE;IACjBN,IAAI,EAAE,mBAAmB;IACzBI,OAAO,EAAE,CAAC,MAAM;EAClB,CAAC;EACDG,MAAM,EAAE;IACNP,IAAI,EAAE,SAAS;IACfQ,SAAS,EAAGC,OAAO,IAAK,CAACA,OAAO;EAClC;AACF,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared-resources.js","names":["transform","MATERIAL_DEFINITION_INFO_PARAMS","renderMode","path","default","shininess","reflectivity","ambient","diffuse","specular","useVertexColorAlpha","vertexRegions","vertexColors","MATERIAL_DEFINITION_INFO","name","type","params","val","thisObject","originalObject","TEXTURE_DEFINITION_IMAGE","id","size","href","length","TEXTURE_DEFINITION_INFO","encoding","wrap","atlas","uvSet","channels","images","map","image","SHARED_RESOURCES","materialDefinitions","transfromMaterialDefinitions","textureDefinitions","transfromTextureDefinitions","materialDefinitionInfos","result","index","materialDefinitionInfo","entries","concat","nodePath","textureDefinitionInfos","textureDefinitionInfo","imageIndex"],"sources":["../../../../src/i3s-converter/json-templates/shared-resources.ts"],"sourcesContent":["import transform from 'json-map-transform';\n\nconst MATERIAL_DEFINITION_INFO_PARAMS = () => ({\n renderMode: {\n path: 'renderMode',\n default: 'solid'\n },\n shininess: {\n path: 'shininess',\n default: 1\n },\n reflectivity: {\n path: 'reflectivity',\n default: 0\n },\n ambient: {\n path: 'ambient',\n default: [1, 1, 1]\n },\n diffuse: {\n path: 'diffuse',\n default: [1, 1, 1]\n },\n specular: {\n path: 'specular',\n default: [0, 0, 0]\n },\n useVertexColorAlpha: {\n path: 'useVertexColorAlpha',\n default: false\n },\n vertexRegions: {\n path: 'vertexRegions',\n default: false\n },\n vertexColors: {\n path: 'vertexColors',\n default: true\n }\n});\n\nconst MATERIAL_DEFINITION_INFO = () => ({\n name: {\n path: 'name',\n default: 'standard'\n },\n type: {\n path: 'type',\n default: 'standard'\n },\n params: {\n path: 'params',\n transform: (val, thisObject, originalObject) =>\n transform(originalObject, MATERIAL_DEFINITION_INFO_PARAMS())\n }\n});\n\nconst TEXTURE_DEFINITION_IMAGE = () => ({\n id: {\n path: 'id'\n },\n size: {\n path: 'size'\n },\n href: {\n path: 'href',\n default: ['../textures/0']\n },\n length: {\n path: 'length'\n }\n});\n\nconst TEXTURE_DEFINITION_INFO = () => ({\n encoding: {\n path: 'encoding'\n },\n wrap: {\n path: 'wrap',\n default: ['none']\n },\n atlas: {\n path: 'atlas',\n default: false\n },\n uvSet: {\n path: 'uvSet',\n default: 'uv0'\n },\n channels: {\n path: 'channels',\n default: 'rgb'\n },\n images: {\n path: 'images',\n transform: (val, thisObject, originalObject) =>\n val.map((image) => transform(image, TEXTURE_DEFINITION_IMAGE()))\n }\n});\n\nexport const SHARED_RESOURCES = () => ({\n materialDefinitions: {\n path: 'materialDefinitionInfos',\n transform: transfromMaterialDefinitions\n },\n textureDefinitions: {\n path: 'textureDefinitionInfos',\n transform: transfromTextureDefinitions\n }\n});\n\nfunction transfromMaterialDefinitions(materialDefinitionInfos, thisObject, originalObject) {\n const result = {};\n for (const [index, materialDefinitionInfo] of materialDefinitionInfos.entries()) {\n result[`Mat${originalObject.nodePath}${index}`] = transform(\n materialDefinitionInfo,\n MATERIAL_DEFINITION_INFO()\n );\n }\n return result;\n}\n\nfunction transfromTextureDefinitions(textureDefinitionInfos, thisObject, originalObject) {\n if (!textureDefinitionInfos) {\n return null;\n }\n const result = {};\n for (const [index, textureDefinitionInfo] of textureDefinitionInfos.entries()) {\n const imageIndex = `${originalObject.nodePath}${index}`;\n textureDefinitionInfo.imageIndex = imageIndex;\n result[imageIndex] = transform(textureDefinitionInfo, TEXTURE_DEFINITION_INFO());\n }\n return result;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","names":["STORE","id","path","transform","val","toUpperCase","profile","default","version","resourcePattern","rootNode","extent","indexCRS","vertexCRS","normalReferenceFrame","attributeEncoding","textureEncoding","lodType","lodModel","defaultGeometrySchema","geometryType","header","property","type","topology","ordering","vertexAttributes","position","valueType","valuesPerElement","normal","uv0","color","featureAttributeOrder","featureAttributes","faceRange"],"sources":["../../../../src/i3s-converter/json-templates/store.ts"],"sourcesContent":["export const STORE = {\n id: {\n path: 'id',\n transform: (val) => val.toUpperCase()\n },\n profile: {\n path: 'profile',\n default: 'meshpyramids'\n },\n version: {\n path: 'version',\n default: '1.8'\n },\n resourcePattern: {\n path: 'resourcePattern',\n default: ['3dNodeIndexDocument', 'Attributes', 'SharedResource', 'Geometry']\n },\n rootNode: {\n path: 'rootNode',\n default: './nodes/root'\n },\n extent: {\n path: 'extent'\n },\n indexCRS: {\n path: 'indexCRS',\n default: 'http://www.opengis.net/def/crs/EPSG/0/4326'\n },\n vertexCRS: {\n path: 'vertexCRS',\n default: 'http://www.opengis.net/def/crs/EPSG/0/4326'\n },\n normalReferenceFrame: {\n path: 'normalReferenceFrame',\n default: 'east-north-up'\n },\n attributeEncoding: {\n path: 'attributeEncoding',\n default: 'application/octet-stream; version=1.6'\n },\n textureEncoding: {\n path: 'textureEncoding',\n default: ['image/jpeg', 'image/ktx2']\n },\n lodType: {\n path: 'lodType',\n default: 'MeshPyramid'\n },\n lodModel: {\n path: 'lodModel',\n default: 'node-switching'\n },\n defaultGeometrySchema: {\n path: 'defaultGeometrySchema',\n default: {\n geometryType: 'triangles',\n header: [\n {\n property: 'vertexCount',\n type: 'UInt32'\n },\n {\n property: 'featureCount',\n type: 'UInt32'\n }\n ],\n topology: 'PerAttributeArray',\n ordering: ['position', 'normal', 'uv0', 'color'],\n vertexAttributes: {\n position: {\n valueType: 'Float32',\n valuesPerElement: 3\n },\n normal: {\n valueType: 'Float32',\n valuesPerElement: 3\n },\n uv0: {\n valueType: 'Float32',\n valuesPerElement: 2\n },\n color: {\n valueType: 'UInt8',\n valuesPerElement: 4\n }\n },\n featureAttributeOrder: ['id', 'faceRange'],\n featureAttributes: {\n id: {\n valueType: 'UInt64',\n valuesPerElement: 1\n },\n faceRange: {\n valueType: 'UInt32',\n valuesPerElement: 2\n }\n }\n }\n }\n};\n"],"mappings":"AAAA,OAAO,MAAMA,KAAK,GAAG;EACnBC,EAAE,EAAE;IACFC,IAAI,EAAE,IAAI;IACVC,SAAS,EAAGC,GAAG,IAAKA,GAAG,CAACC,WAAW,CAAC;EACtC,CAAC;EACDC,OAAO,EAAE;IACPJ,IAAI,EAAE,SAAS;IACfK,OAAO,EAAE;EACX,CAAC;EACDC,OAAO,EAAE;IACPN,IAAI,EAAE,SAAS;IACfK,OAAO,EAAE;EACX,CAAC;EACDE,eAAe,EAAE;IACfP,IAAI,EAAE,iBAAiB;IACvBK,OAAO,EAAE,CAAC,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU;EAC7E,CAAC;EACDG,QAAQ,EAAE;IACRR,IAAI,EAAE,UAAU;IAChBK,OAAO,EAAE;EACX,CAAC;EACDI,MAAM,EAAE;IACNT,IAAI,EAAE;EACR,CAAC;EACDU,QAAQ,EAAE;IACRV,IAAI,EAAE,UAAU;IAChBK,OAAO,EAAE;EACX,CAAC;EACDM,SAAS,EAAE;IACTX,IAAI,EAAE,WAAW;IACjBK,OAAO,EAAE;EACX,CAAC;EACDO,oBAAoB,EAAE;IACpBZ,IAAI,EAAE,sBAAsB;IAC5BK,OAAO,EAAE;EACX,CAAC;EACDQ,iBAAiB,EAAE;IACjBb,IAAI,EAAE,mBAAmB;IACzBK,OAAO,EAAE;EACX,CAAC;EACDS,eAAe,EAAE;IACfd,IAAI,EAAE,iBAAiB;IACvBK,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY;EACtC,CAAC;EACDU,OAAO,EAAE;IACPf,IAAI,EAAE,SAAS;IACfK,OAAO,EAAE;EACX,CAAC;EACDW,QAAQ,EAAE;IACRhB,IAAI,EAAE,UAAU;IAChBK,OAAO,EAAE;EACX,CAAC;EACDY,qBAAqB,EAAE;IACrBjB,IAAI,EAAE,uBAAuB;IAC7BK,OAAO,EAAE;MACPa,YAAY,EAAE,WAAW;MACzBC,MAAM,EAAE,CACN;QACEC,QAAQ,EAAE,aAAa;QACvBC,IAAI,EAAE;MACR,CAAC,EACD;QACED,QAAQ,EAAE,cAAc;QACxBC,IAAI,EAAE;MACR,CAAC,CACF;MACDC,QAAQ,EAAE,mBAAmB;MAC7BC,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC;MAChDC,gBAAgB,EAAE;QAChBC,QAAQ,EAAE;UACRC,SAAS,EAAE,SAAS;UACpBC,gBAAgB,EAAE;QACpB,CAAC;QACDC,MAAM,EAAE;UACNF,SAAS,EAAE,SAAS;UACpBC,gBAAgB,EAAE;QACpB,CAAC;QACDE,GAAG,EAAE;UACHH,SAAS,EAAE,SAAS;UACpBC,gBAAgB,EAAE;QACpB,CAAC;QACDG,KAAK,EAAE;UACLJ,SAAS,EAAE,OAAO;UAClBC,gBAAgB,EAAE;QACpB;MACF,CAAC;MACDI,qBAAqB,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC;MAC1CC,iBAAiB,EAAE;QACjBjC,EAAE,EAAE;UACF2B,SAAS,EAAE,QAAQ;UACnBC,gBAAgB,EAAE;QACpB,CAAC;QACDM,SAAS,EAAE;UACTP,SAAS,EAAE,QAAQ;UACnBC,gBAAgB,EAAE;QACpB;MACF;IACF;EACF;AACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","names":["GLTFPrimitiveModeString"],"sources":["../../../src/i3s-converter/types.ts"],"sourcesContent":["import {GLTFImagePostprocessed, GLTFNodePostprocessed} from '@loaders.gl/gltf';\nimport {\n BoundingVolumes,\n I3SMaterialDefinition,\n MaterialDefinitionInfo,\n TextureDefinitionInfo\n} from '@loaders.gl/i3s';\nimport {Matrix4, Vector3} from '@math.gl/core';\n\n/** Converted resources for specific node */\nexport type I3SConvertedResources = {\n /**\n * Node id\n */\n nodeId?: number;\n /** Non-compressed geometry buffer that have structure met\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.8/defaultGeometrySchema.cmn.md\n * (Geometry buffer)\n */\n geometry: ArrayBuffer | null;\n /**\n * Draco compressed geometry\n */\n compressedGeometry?: Promise<ArrayBuffer> | null;\n /**\n * Texture image content\n */\n texture: any | null;\n /**\n * If the resource has uvRegions geometry attribute\n */\n hasUvRegions: boolean;\n /**\n * Shared resources built from GLTF material\n */\n sharedResources: SharedResourcesArrays | null;\n /**\n * Material definition of the node\n */\n meshMaterial?: I3SMaterialDefinition | null;\n /**\n * Number of vertices in the node\n */\n vertexCount: number | null;\n /**\n * Feature attributes contents\n */\n attributes: ArrayBuffer[] | null;\n /**\n * Number of features in the node\n */\n featureCount: number | null;\n /**\n * MBS and/or OBB bounding volumes of the node\n */\n boundingVolumes: BoundingVolumes | null;\n};\n\n/**\n * Geometry and feature attributes converted from GLTF primitives\n */\nexport type ConvertedAttributes = {\n /** POSITION attribute value */\n positions: Float32Array;\n /** NORMAL attribute value */\n normals: Float32Array;\n /** TEXCOORD_0 attribute value */\n texCoords: Float32Array;\n /** COLOR_0 attribute value */\n colors: Uint8Array;\n /** uvRegion attribute for a texture atlas */\n uvRegions: Uint16Array;\n /** Feature indices grouped by ...\n * converted from \"batch ids\" of GLTF\n */\n featureIndicesGroups?: number[][];\n /** Feature indices converted from \"batch ids\" */\n featureIndices: number[];\n /**\n * MBS and/or OBB bounding volumes of the node\n */\n boundingVolumes: null | BoundingVolumes;\n /** merged materials data */\n mergedMaterials: MergedMaterial[];\n};\n\n/** Postprocessed geometry and feature attributes\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.8/defaultGeometrySchema.cmn.md\n */\nexport type GeometryAttributes = {\n /** POSITION attribute value */\n positions: Float32Array;\n /** NORMAL attribute value */\n normals: Float32Array;\n /** TEXCOORD_0 attribute value */\n texCoords: Float32Array;\n /** COLOR_0 attribute value */\n colors: Uint8Array;\n /** uvRegion attribute for a texture atlas */\n uvRegions: Uint16Array;\n /** faceRanges attribute value */\n faceRange: Uint32Array;\n /** feature Ids attribute value */\n featureIds: number[];\n /** number of features in the node */\n featureCount: number;\n};\n\n/** Geometry attributes applicable for reordering by featureId */\nexport type GroupedAttributes = {\n /** POSITION attribute value */\n positions: Float32Array;\n /** NORMAL attribute value */\n normals: Float32Array;\n /** COLOR_0 attribute value */\n colors: Uint8Array;\n /** uvRegion attribute for a texture atlas */\n uvRegions: Uint16Array;\n /** TEXCOORD_0 attribute value */\n texCoords: Float32Array;\n};\n\n/** Geometry attributes specific for the particular feature */\nexport type GroupedByFeatureIdAttributes = GroupedAttributes & {\n /** Feature Id */\n featureId: number;\n};\n\n/** Shared resources made from GLTF material */\nexport type SharedResourcesArrays = {\n /** material definitions list https://github.com/Esri/i3s-spec/blob/master/docs/1.8/materialDefinitionInfo.cmn.md */\n materialDefinitionInfos?: MaterialDefinitionInfo[];\n /** texture definitions list https://github.com/Esri/i3s-spec/blob/master/docs/1.8/textureDefinitionInfo.cmn.md*/\n textureDefinitionInfos?: TextureDefinitionInfo[];\n /** node id to make unique SharedResource ids */\n nodePath?: string;\n};\n\n/** I3S material definition and texture content taken from GLTF material */\nexport type I3SMaterialWithTexture = {\n /** Material definition https://github.com/Esri/i3s-spec/blob/master/docs/1.8/materialDefinitions.cmn.md */\n material: I3SMaterialDefinition;\n /** Texture content (image) */\n texture?: GLTFImagePostprocessed;\n /** Metadata of all merged materials */\n mergedMaterials: MergedMaterial[];\n};\n\n/** Metadata of some original texture */\nexport type MergedMaterial = {\n /** Gltf material Id */\n originalMaterialId: string;\n /** Original texture size */\n textureSize?: {\n width: number;\n height: number;\n };\n /** Uint16Array of 4 elements https://github.com/Esri/i3s-spec/blob/master/docs/1.7/geometryUVRegion.cmn.md */\n uvRegion?: Uint16Array;\n};\n\nexport type TypedArrayConstructor =\n | Uint8ArrayConstructor\n | Int8ArrayConstructor\n | Uint16ArrayConstructor\n | Int16ArrayConstructor\n | Int32ArrayConstructor\n | Uint32ArrayConstructor\n | Float32ArrayConstructor\n | Float64ArrayConstructor;\n\n/**\n * glTF primitive modes (mesh topology types)\n * @see https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#_mesh_primitive_mode\n */\nexport enum GLTFPrimitiveModeString {\n POINTS = 'POINTS',\n LINES = 'LINES',\n LINE_LOOP = 'LINE_LOOP',\n LINE_STRIP = 'LINE_STRIP',\n TRIANGLES = 'TRIANGLES',\n TRIANGLE_STRIP = 'TRIANGLE_STRIP',\n TRIANGLE_FAN = 'TRIANGLE_FAN'\n}\n\n/** Preprocessed data gathered from child tiles binary content */\nexport type PreprocessData = {\n /** Mesh topology types used in gltf primitives of the tileset */\n meshTopologyTypes: Set<GLTFPrimitiveModeString>;\n /**\n * Featrue metadata classes found in glTF extensions\n * The tileset might contain multiple metadata classes provided by EXT_feature_metadata and EXT_structural_metadata extensions.\n * Every class is a set of properties. But I3S can consume only one set of properties.\n * On the pre-process we collect all classes from the tileset in order to show the prompt to select one class for conversion to I3S.\n */\n metadataClasses: Set<string>;\n};\n\n/** Texture image properties required for conversion */\nexport type TextureImageProperties = {\n /** Array with image data */\n data: Uint8Array;\n /** Is the texture compressed */\n compressed?: boolean;\n /** Height of the texture's image */\n height?: number;\n /** Width of the texture's image */\n width?: number;\n /** Number of components (3 for RGB, 4 for RGBA) */\n components?: number;\n /** Mime type of the texture's image */\n mimeType?: string;\n};\n\n/** glTF attributes data, prepared for conversion */\nexport type GLTFAttributesData = {\n /** glTF PBR materials (only id is required) */\n gltfMaterials?: {id: string}[];\n /** glTF geometry nodes */\n nodes: GLTFNodePostprocessed[];\n /** glTF texture images (set to null for compressed textures) */\n images: (null | TextureImageProperties)[];\n /** Source tile origin coordinates in cartographic coordinate system */\n cartographicOrigin: Vector3;\n /** Model matrix to convert coordinate system of POSITION and NORMAL attributes from METER_OFFSETS to CARTESIAN */\n cartesianModelMatrix: Matrix4;\n};\n"],"mappings":"AA+KA,WAAYA,uBAAuB,aAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAvBA,uBAAuB;EAAA,OAAvBA,uBAAuB;AAAA"}
@@ -1,63 +0,0 @@
1
- # I3S server
2
-
3
- The http server run on NodeJS ExpressJS framework.
4
- The server provides I3S Rest endpoints per specification https://github.com/Esri/i3s-spec/blob/master/docs/1.7/3Dobject_ReadMe.md#http-api-overview-17
5
-
6
- ## Usage
7
-
8
- ### Serve 3DTiles to I3S converted dataset
9
-
10
- - Convert data set from 3DTiles to I3S without `--slpk` option
11
- - Serve output folder
12
-
13
- Example for path `./data/BatchTextured/SceneServer/layers/0/...`:
14
-
15
- #### Start the server
16
-
17
- ```bash
18
- PORT=8080 HTTPS_PORT=4443 I3sLayerPath="./data" DEBUG=i3s-server:* npx i3s-server
19
- ```
20
- #### Check the layer availability
21
-
22
- The layer should be available on URLs:
23
-
24
- - `http://localhost:8080/BatchTextured/SceneServer/layers/0/...`
25
- - `https://localhost:4443/BatchTextured/SceneServer/layers/0/...`
26
-
27
- #### Open in ArcGIS
28
-
29
- `https://www.arcgis.com/home/webscene/viewer.html?url=http://localhost:8080/BatchTextured/SceneServer/layers/0/`
30
-
31
- #### Open in I3S Explorer
32
-
33
- `https://i3s.loaders.gl/viewer?tileset=http://localhost:8080/BatchTextured/SceneServer/layers/0`
34
-
35
- ### Serve SLPK
36
-
37
- Example for path `../datasets/Rancho_Mesh_mesh_v17_1.slpk`:
38
-
39
- #### Start the server
40
-
41
- ```bash
42
- PORT=8080 HTTPS_PORT=4443 I3sLayerPath="../datasets/Rancho_Mesh_mesh_v17_1.slpk" DEBUG=i3s-server:* npx i3s-server
43
- ```
44
- #### Check the layer availability
45
-
46
- The layer should be available on URLs:
47
-
48
- - `http://localhost:8080/SceneServer/layers/0/...`
49
- - `https://localhost:4443/SceneServer/layers/0/...`
50
-
51
- #### Open in ArcGIS
52
-
53
- `https://www.arcgis.com/home/webscene/viewer.html?url=http://localhost:8080/SceneServer`
54
-
55
- #### Open in I3S Explorer
56
-
57
- `https://i3s.loaders.gl/viewer?tileset=http://localhost:8080/SceneServer/layers/0`
58
-
59
- ## ENV variables
60
-
61
- - `I3sLayerPath` - path to converted data or SLPK file.
62
- - `PORT` - HTTP port. Eg for `PORT = 8080 npx i3s-server` the server will work on host `http://localhost:8080/...`. Default value is `80`;
63
- - `HTTPS_PORT` - HTTPS port. Eg for `PORT = 4443 npx i3s-server` the server will work on host `https://localhost:4443/...`. Default value is `443`
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.js","names":["express","path","logger","cors","loadArchive","I3S_LAYER_PATH","process","env","I3sLayerPath","FULL_LAYER_PATH","join","cwd","indexRouter","require","app","use","json","urlencoded","extended","static","__dirname","test","sceneServerRouter","router"],"sources":["../../../src/i3s-server/app.ts"],"sourcesContent":["import express from 'express';\nimport path from 'path';\nimport logger from 'morgan';\nimport cors from 'cors';\nimport {loadArchive} from './controllers/slpk-controller';\n\nconst I3S_LAYER_PATH = process.env.I3sLayerPath || ''; // eslint-disable-line no-process-env, no-undef\nconst FULL_LAYER_PATH = path.join(process.cwd(), I3S_LAYER_PATH); // eslint-disable-line no-undef\nloadArchive(FULL_LAYER_PATH);\n\nconst indexRouter = require('./routes/index');\n\nexport const app = express();\n\napp.use(logger('dev'));\napp.use(express.json());\napp.use(express.urlencoded({extended: false}));\napp.use(express.static(path.join(__dirname, 'public')));\napp.use(cors());\n\nif (/\\.slpk$/.test(I3S_LAYER_PATH)) {\n const {sceneServerRouter, router} = require('./routes/slpk-router');\n app.use('/SceneServer/layers/0', router);\n app.use('/SceneServer', sceneServerRouter);\n} else {\n app.use('/', indexRouter);\n}\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,SAAS;AAC7B,OAAOC,IAAI,MAAM,MAAM;AACvB,OAAOC,MAAM,MAAM,QAAQ;AAC3B,OAAOC,IAAI,MAAM,MAAM;AACvB,SAAQC,WAAW,QAAO,+BAA+B;AAEzD,MAAMC,cAAc,GAAGC,OAAO,CAACC,GAAG,CAACC,YAAY,IAAI,EAAE;AACrD,MAAMC,eAAe,GAAGR,IAAI,CAACS,IAAI,CAACJ,OAAO,CAACK,GAAG,CAAC,CAAC,EAAEN,cAAc,CAAC;AAChED,WAAW,CAACK,eAAe,CAAC;AAE5B,MAAMG,WAAW,GAAGC,OAAO,CAAC,gBAAgB,CAAC;AAE7C,OAAO,MAAMC,GAAG,GAAGd,OAAO,CAAC,CAAC;AAE5Bc,GAAG,CAACC,GAAG,CAACb,MAAM,CAAC,KAAK,CAAC,CAAC;AACtBY,GAAG,CAACC,GAAG,CAACf,OAAO,CAACgB,IAAI,CAAC,CAAC,CAAC;AACvBF,GAAG,CAACC,GAAG,CAACf,OAAO,CAACiB,UAAU,CAAC;EAACC,QAAQ,EAAE;AAAK,CAAC,CAAC,CAAC;AAC9CJ,GAAG,CAACC,GAAG,CAACf,OAAO,CAACmB,MAAM,CAAClB,IAAI,CAACS,IAAI,CAACU,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvDN,GAAG,CAACC,GAAG,CAACZ,IAAI,CAAC,CAAC,CAAC;AAEf,IAAI,SAAS,CAACkB,IAAI,CAAChB,cAAc,CAAC,EAAE;EAClC,MAAM;IAACiB,iBAAiB;IAAEC;EAAM,CAAC,GAAGV,OAAO,CAAC,sBAAsB,CAAC;EACnEC,GAAG,CAACC,GAAG,CAAC,uBAAuB,EAAEQ,MAAM,CAAC;EACxCT,GAAG,CAACC,GAAG,CAAC,cAAc,EAAEO,iBAAiB,CAAC;AAC5C,CAAC,MAAM;EACLR,GAAG,CAACC,GAAG,CAAC,GAAG,EAAEH,WAAW,CAAC;AAC3B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"www.js","names":["app","https","http","fs","path","formErrorHandler","formListeningHandler","normalizePort","httpPort","process","env","PORT","console","error","exit","httpsPort","HTTPS_PORT","options","key","readFileSync","join","__dirname","cert","httpServer","createServer","httpsServer","listen","on"],"sources":["../../../../src/i3s-server/bin/www.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport {app} from '../app';\nimport https from 'https';\nimport http from 'http';\nimport fs from 'fs';\nimport path from 'path';\nimport {formErrorHandler, formListeningHandler, normalizePort} from '../utils/server-utils';\n\n/** Get port from environment and store in Express. */\nconst httpPort = normalizePort(process.env.PORT || '80');\nif (httpPort === false) {\n console.error(`Incorrect HTTP port`);\n process.exit(1);\n}\nconst httpsPort = normalizePort(process.env.HTTPS_PORT || '443');\nif (httpsPort === false) {\n console.error(`Incorrect HTTPs port`);\n process.exit(1);\n}\n\n/** Create HTTP server. */\nconst options = {\n key: fs.readFileSync(path.join(__dirname, '../certs/key.pem')),\n cert: fs.readFileSync(path.join(__dirname, '../certs/cert.pem'))\n};\n\nconst httpServer = http.createServer(app);\nconst httpsServer = https.createServer(options, app);\n\n/** Listen on provided port, on all network interfaces. */\nhttpServer.listen(httpPort);\nhttpServer.on('error', formErrorHandler(httpPort));\nhttpServer.on('listening', formListeningHandler(httpServer));\n\nhttpsServer.listen(httpsPort);\nhttpsServer.on('error', formErrorHandler(httpsPort));\nhttpsServer.on('listening', formListeningHandler(httpsServer));\n"],"mappings":"AAAA;AAEA,SAAQA,GAAG,QAAO,QAAQ;AAC1B,OAAOC,KAAK,MAAM,OAAO;AACzB,OAAOC,IAAI,MAAM,MAAM;AACvB,OAAOC,EAAE,MAAM,IAAI;AACnB,OAAOC,IAAI,MAAM,MAAM;AACvB,SAAQC,gBAAgB,EAAEC,oBAAoB,EAAEC,aAAa,QAAO,uBAAuB;AAG3F,MAAMC,QAAQ,GAAGD,aAAa,CAACE,OAAO,CAACC,GAAG,CAACC,IAAI,IAAI,IAAI,CAAC;AACxD,IAAIH,QAAQ,KAAK,KAAK,EAAE;EACtBI,OAAO,CAACC,KAAK,sBAAsB,CAAC;EACpCJ,OAAO,CAACK,IAAI,CAAC,CAAC,CAAC;AACjB;AACA,MAAMC,SAAS,GAAGR,aAAa,CAACE,OAAO,CAACC,GAAG,CAACM,UAAU,IAAI,KAAK,CAAC;AAChE,IAAID,SAAS,KAAK,KAAK,EAAE;EACvBH,OAAO,CAACC,KAAK,uBAAuB,CAAC;EACrCJ,OAAO,CAACK,IAAI,CAAC,CAAC,CAAC;AACjB;AAGA,MAAMG,OAAO,GAAG;EACdC,GAAG,EAAEf,EAAE,CAACgB,YAAY,CAACf,IAAI,CAACgB,IAAI,CAACC,SAAS,EAAE,kBAAkB,CAAC,CAAC;EAC9DC,IAAI,EAAEnB,EAAE,CAACgB,YAAY,CAACf,IAAI,CAACgB,IAAI,CAACC,SAAS,EAAE,mBAAmB,CAAC;AACjE,CAAC;AAED,MAAME,UAAU,GAAGrB,IAAI,CAACsB,YAAY,CAACxB,GAAG,CAAC;AACzC,MAAMyB,WAAW,GAAGxB,KAAK,CAACuB,YAAY,CAACP,OAAO,EAAEjB,GAAG,CAAC;AAGpDuB,UAAU,CAACG,MAAM,CAAClB,QAAQ,CAAC;AAC3Be,UAAU,CAACI,EAAE,CAAC,OAAO,EAAEtB,gBAAgB,CAACG,QAAQ,CAAC,CAAC;AAClDe,UAAU,CAACI,EAAE,CAAC,WAAW,EAAErB,oBAAoB,CAACiB,UAAU,CAAC,CAAC;AAE5DE,WAAW,CAACC,MAAM,CAACX,SAAS,CAAC;AAC7BU,WAAW,CAACE,EAAE,CAAC,OAAO,EAAEtB,gBAAgB,CAACU,SAAS,CAAC,CAAC;AACpDU,WAAW,CAACE,EAAE,CAAC,WAAW,EAAErB,oBAAoB,CAACmB,WAAW,CAAC,CAAC"}
@@ -1,19 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDETCCAfkCFGRwpPyg0eenFihajAR2W9s89/L6MA0GCSqGSIb3DQEBCwUAMEUx
3
- CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl
4
- cm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMjAwODEwMDkwMjQ2WhcNNDcxMjI2MDkw
5
- MjQ2WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE
6
- CgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOC
7
- AQ8AMIIBCgKCAQEA6frLVw16PaWLku7spGHwY23DtkF8CNmSQq7ii6/zkQ/tSvSG
8
- 5AcDu0wW/2MRgDZW+jWz86VZ9jgfdVXQ+hhz72A7Hmy9x4tPWEyXL8iV5TmUi0rs
9
- 0m4L+JrAQAGLDWPzx83Ok+6aZCMJPm33dygWgqNd+q0ElUN6I5bEQLvrd/5ZgVps
10
- FXvfvtK/CTz+CZtjtCbxl4r/p4IohD6ER9dbtPjdX0M3CMkLz0zOJhTf9n0lktJt
11
- zAGOdaPSuLb8w3z4c1EF66sE+FPDNnfphro06XxUZrw1k0x2Wc0selhiDgZ8MO3i
12
- gpx3aeiB9V/CGezVqL+jM8owEB23Bku8pStfiwIDAQABMA0GCSqGSIb3DQEBCwUA
13
- A4IBAQCqynXAOU3mT+C+p143MUMCURQfSB3inlFaFpQLdFdlIPCxlttC0DfBkAZr
14
- SvX/BbYTDAIsFk4t8rS3WqOvsbmuTzXDrtTTGRuid2+SR2+Zz+xO7y2L7BWj4rz/
15
- ImSuJT8fkpU+JiXGG4xvPcPTJnNM0rT0Oo2+YATZaev1M81hd8gntH0+hUktccp6
16
- NLjSTQMZOxzwKCzJCO+oNwy/862tmlJEeGePOk0bkmcMSrOEsrxUBZEfy0s5Uj9r
17
- Jog5/cUelB8PzXsF9KPCAEc7KedVABfTdULOFJckq5tNqw5lQb5E3E/mvNVADqp9
18
- oOqoAWG4G4vcJS95XSUpPjOYlvFn
19
- -----END CERTIFICATE-----
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEpQIBAAKCAQEA6frLVw16PaWLku7spGHwY23DtkF8CNmSQq7ii6/zkQ/tSvSG
3
- 5AcDu0wW/2MRgDZW+jWz86VZ9jgfdVXQ+hhz72A7Hmy9x4tPWEyXL8iV5TmUi0rs
4
- 0m4L+JrAQAGLDWPzx83Ok+6aZCMJPm33dygWgqNd+q0ElUN6I5bEQLvrd/5ZgVps
5
- FXvfvtK/CTz+CZtjtCbxl4r/p4IohD6ER9dbtPjdX0M3CMkLz0zOJhTf9n0lktJt
6
- zAGOdaPSuLb8w3z4c1EF66sE+FPDNnfphro06XxUZrw1k0x2Wc0selhiDgZ8MO3i
7
- gpx3aeiB9V/CGezVqL+jM8owEB23Bku8pStfiwIDAQABAoIBAQDSQ0wkCLqHV5Mc
8
- EZWbC2BJGcS8rhBWq56iSiLPwOiyvYtSxnfJxvv1fqVUD6UUgMCczVHPbBJyD3FF
9
- sj6/4OWege3eo33QKkK9aOacTDdX7OyuWECFwdsEJ50IZ9qbx+y06x/vFIat4kZW
10
- UeAGtoG0GDdGI+FweVjzTnNCcR1jj/i0+FigdUrdPEFffV3+QKLqPl2gqIcx0NWu
11
- mYnA3rZP4WfKp9kPeTM3py8fQSp56JDc2+/UsZi2ttq3PAXOvKPS8pIJMGwx3zvY
12
- Z9bCMOZz9X6o/deBeSUTIRpkRdpOZo83wp0Mio5wKMTj10+u1YygE0n/O7Xnxi5i
13
- nRo3Yk9hAoGBAPvVekevtrmwCo7WB6VWwEK493/Rs5ZIJ+GpS5XZwV0J+KSE9+t0
14
- CTquZMnpGfAqq6Cftmfy+TOepGiYMldQrYrCZKLwU+cqH/XnCOwwQzLOYhNwWiuk
15
- 6XTYPnSedGpwkMG+F4uPjEfx034tn6nSaEUqDAb3JuRP67NduCi2VoQpAoGBAO3Z
16
- tBxlXKMn+JvhQDCLbYYTN6++tA4xUeptcqxiEcGBitn2Q1DVvcwHx7Uz8kL9Nfqj
17
- IABirj+XwPZaqpSfgr+ltzQmhy1f2TUWUW0lVIkNetzlq/VLrL4T04euiy+TF+Zt
18
- lBCfPcvhhXYz3OhOumf5y2DU0gKhmi4dUPAb4RyTAoGBAJnpkQB7HdxDAVDm8mlU
19
- qdCdp3ZRPccddnJuu6lsGse4LmSud69JjdJ1f1f/xUCJc7eJpTvGvhOUY7shObMv
20
- tcDWqhcDduQTVNE/UK65mHhWto5W3mVKNvyYpSM1LMVY4r/mZBGBvCTEYZP+YlSy
21
- KdQLrKodJ4HmbpGDN+h5+EpxAoGANj8Xv/4yMZf1MIAgJrI2CYUqhy+kWzRObXwG
22
- 0mAPkqWb6HgtBCurfPQtTRuK3lJn1EEOFGhtO12+CbHGA92ZcWI3NXKwE94vaNct
23
- PQptjFCBvA25uVlIDZXyAZkCb5hJtCk7wsq+ylgmGz5a3LTP+NTU2MHRH/6BbpEL
24
- G6gQIHcCgYEAyLlYgrVBEbfb25eli8UTFKR/30n/BPLKef+WziKq2AunL5nJkQYX
25
- 9z+N6hVLq61+A1Xzp/LtWbfUH163jlT+hgPSthfAfzp7OXAYts9d9hd2r+GFVCR2
26
- t1RAIqOUW5z+OHzuUO+DGiSuV9yG5vCfVZK7dn5aoAeQwixw01u+iww=
27
- -----END RSA PRIVATE KEY-----
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-controller.js","names":["path","fs","promises","I3S_LAYER_PATH","process","env","I3sLayerPath","getFileNameByUrl","url","extensions","FULL_LAYER_PATH","join","cwd","ext","fileName","concat","access"],"sources":["../../../../src/i3s-server/controllers/index-controller.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs';\n\nconst {promises} = fs;\n\nconst I3S_LAYER_PATH = process.env.I3sLayerPath || '';\n\n/**\n * Get local file name by input HTTP URL\n * @param url - I3S HTTP service url\n * @returns - local file name\n */\nexport async function getFileNameByUrl(url: string): Promise<string | null> {\n const extensions = ['json', 'bin', 'jpg', 'jpeg', 'png', 'bin.dds', 'ktx2'];\n const FULL_LAYER_PATH = path.join(process.cwd(), I3S_LAYER_PATH);\n for (const ext of extensions) {\n const fileName = `${FULL_LAYER_PATH}${url}/index.${ext}`;\n try {\n await promises.access(fileName);\n return fileName;\n } catch {\n continue; // eslint-disable-line no-continue\n }\n }\n return null;\n}\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,MAAM;AACvB,OAAOC,EAAE,MAAM,IAAI;AAEnB,MAAM;EAACC;AAAQ,CAAC,GAAGD,EAAE;AAErB,MAAME,cAAc,GAAGC,OAAO,CAACC,GAAG,CAACC,YAAY,IAAI,EAAE;AAOrD,OAAO,eAAeC,gBAAgBA,CAACC,GAAW,EAA0B;EAC1E,MAAMC,UAAU,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC;EAC3E,MAAMC,eAAe,GAAGV,IAAI,CAACW,IAAI,CAACP,OAAO,CAACQ,GAAG,CAAC,CAAC,EAAET,cAAc,CAAC;EAChE,KAAK,MAAMU,GAAG,IAAIJ,UAAU,EAAE;IAC5B,MAAMK,QAAQ,MAAAC,MAAA,CAAML,eAAe,EAAAK,MAAA,CAAGP,GAAG,aAAAO,MAAA,CAAUF,GAAG,CAAE;IACxD,IAAI;MACF,MAAMX,QAAQ,CAACc,MAAM,CAACF,QAAQ,CAAC;MAC/B,OAAOA,QAAQ;IACjB,CAAC,CAAC,MAAM;MACN;IACF;EACF;EACA,OAAO,IAAI;AACb"}
@@ -1,19 +0,0 @@
1
- import '@loaders.gl/polyfills';
2
- import { parseSLPK } from '@loaders.gl/i3s';
3
- import { FileHandleFile } from '@loaders.gl/loader-utils';
4
- let slpkArchive;
5
- export const loadArchive = async fullLayerPath => {
6
- slpkArchive = await parseSLPK(await FileHandleFile.from(fullLayerPath), msg => console.log(msg));
7
- console.log('The server is ready to use');
8
- };
9
- export async function getFileByUrl(url) {
10
- const trimmedPath = /^\/?(.*)\/?$/.exec(url);
11
- let uncompressedFile = null;
12
- if (trimmedPath) {
13
- try {
14
- uncompressedFile = Buffer.from(await slpkArchive.getFile(trimmedPath[1], 'http'));
15
- } catch (e) {}
16
- }
17
- return uncompressedFile;
18
- }
19
- //# sourceMappingURL=slpk-controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slpk-controller.js","names":["parseSLPK","FileHandleFile","slpkArchive","loadArchive","fullLayerPath","from","msg","console","log","getFileByUrl","url","trimmedPath","exec","uncompressedFile","Buffer","getFile","e"],"sources":["../../../../src/i3s-server/controllers/slpk-controller.ts"],"sourcesContent":["import '@loaders.gl/polyfills';\nimport {parseSLPK} from '@loaders.gl/i3s';\nimport {FileHandleFile} from '@loaders.gl/loader-utils';\n\nlet slpkArchive;\n\n/**\n * Open SLPK file for reading and load HASH file\n * @param fullLayerPath - full path to SLPK file\n */\nexport const loadArchive = async (fullLayerPath: string): Promise<void> => {\n slpkArchive = await parseSLPK(await FileHandleFile.from(fullLayerPath), (msg) =>\n console.log(msg)\n );\n console.log('The server is ready to use');\n};\n\n/**\n * Get a file from SLPK\n * @param url - I3S HTTP URL\n * @returns - file content\n */\nexport async function getFileByUrl(url: string) {\n const trimmedPath = /^\\/?(.*)\\/?$/.exec(url);\n let uncompressedFile: Buffer | null = null;\n if (trimmedPath) {\n try {\n uncompressedFile = Buffer.from(await slpkArchive.getFile(trimmedPath[1], 'http'));\n } catch (e) {}\n }\n return uncompressedFile;\n}\n"],"mappings":"AAAA,OAAO,uBAAuB;AAC9B,SAAQA,SAAS,QAAO,iBAAiB;AACzC,SAAQC,cAAc,QAAO,0BAA0B;AAEvD,IAAIC,WAAW;AAMf,OAAO,MAAMC,WAAW,GAAG,MAAOC,aAAqB,IAAoB;EACzEF,WAAW,GAAG,MAAMF,SAAS,CAAC,MAAMC,cAAc,CAACI,IAAI,CAACD,aAAa,CAAC,EAAGE,GAAG,IAC1EC,OAAO,CAACC,GAAG,CAACF,GAAG,CACjB,CAAC;EACDC,OAAO,CAACC,GAAG,CAAC,4BAA4B,CAAC;AAC3C,CAAC;AAOD,OAAO,eAAeC,YAAYA,CAACC,GAAW,EAAE;EAC9C,MAAMC,WAAW,GAAG,cAAc,CAACC,IAAI,CAACF,GAAG,CAAC;EAC5C,IAAIG,gBAA+B,GAAG,IAAI;EAC1C,IAAIF,WAAW,EAAE;IACf,IAAI;MACFE,gBAAgB,GAAGC,MAAM,CAACT,IAAI,CAAC,MAAMH,WAAW,CAACa,OAAO,CAACJ,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC,CAAC,OAAOK,CAAC,EAAE,CAAC;EACf;EACA,OAAOH,gBAAgB;AACzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["express","router","Router","getFileNameByUrl","require","get","req","res","next","fileName","path","sendFile","status","send","module","exports"],"sources":["../../../../src/i3s-server/routes/index.ts"],"sourcesContent":["import express from 'express';\n\nconst router = express.Router();\nconst {getFileNameByUrl} = require('../controllers/index-controller');\n\n/* GET home page. */\nrouter.get('*', async function (req, res, next) {\n const fileName = await getFileNameByUrl(req.path);\n if (fileName) {\n res.sendFile(fileName);\n } else {\n res.status(404);\n res.send('File not found');\n }\n});\n\nmodule.exports = router;\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,SAAS;AAE7B,MAAMC,MAAM,GAAGD,OAAO,CAACE,MAAM,CAAC,CAAC;AAC/B,MAAM;EAACC;AAAgB,CAAC,GAAGC,OAAO,CAAC,iCAAiC,CAAC;AAGrEH,MAAM,CAACI,GAAG,CAAC,GAAG,EAAE,gBAAgBC,GAAG,EAAEC,GAAG,EAAEC,IAAI,EAAE;EAC9C,MAAMC,QAAQ,GAAG,MAAMN,gBAAgB,CAACG,GAAG,CAACI,IAAI,CAAC;EACjD,IAAID,QAAQ,EAAE;IACZF,GAAG,CAACI,QAAQ,CAACF,QAAQ,CAAC;EACxB,CAAC,MAAM;IACLF,GAAG,CAACK,MAAM,CAAC,GAAG,CAAC;IACfL,GAAG,CAACM,IAAI,CAAC,gBAAgB,CAAC;EAC5B;AACF,CAAC,CAAC;AAEFC,MAAM,CAACC,OAAO,GAAGd,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"slpk-router.js","names":["express","getFileByUrl","createSceneServer","sceneServerRouter","Router","get","req","res","next","file","layer","JSON","parse","toString","sceneServerResponse","name","send","status","router","console","log","path"],"sources":["../../../../src/i3s-server/routes/slpk-router.ts"],"sourcesContent":["import express from 'express';\nimport {getFileByUrl} from '../controllers/slpk-controller';\nimport {createSceneServer} from '../utils/create-scene-server';\n\nexport const sceneServerRouter = express.Router();\nsceneServerRouter.get('*', async function (req, res, next) {\n const file = await getFileByUrl('/');\n if (file) {\n const layer = JSON.parse(file.toString());\n const sceneServerResponse = createSceneServer(layer.name, layer);\n res.send(sceneServerResponse);\n } else {\n res.status(404);\n res.send('File not found');\n }\n});\n\nexport const router = express.Router();\nrouter.get('*', async function (req, res, next) {\n console.log(req.path);\n const file = await getFileByUrl(req.path);\n if (file) {\n res.send(file);\n } else {\n res.status(404);\n res.send('File not found');\n }\n});\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,SAAS;AAC7B,SAAQC,YAAY,QAAO,gCAAgC;AAC3D,SAAQC,iBAAiB,QAAO,8BAA8B;AAE9D,OAAO,MAAMC,iBAAiB,GAAGH,OAAO,CAACI,MAAM,CAAC,CAAC;AACjDD,iBAAiB,CAACE,GAAG,CAAC,GAAG,EAAE,gBAAgBC,GAAG,EAAEC,GAAG,EAAEC,IAAI,EAAE;EACzD,MAAMC,IAAI,GAAG,MAAMR,YAAY,CAAC,GAAG,CAAC;EACpC,IAAIQ,IAAI,EAAE;IACR,MAAMC,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACH,IAAI,CAACI,QAAQ,CAAC,CAAC,CAAC;IACzC,MAAMC,mBAAmB,GAAGZ,iBAAiB,CAACQ,KAAK,CAACK,IAAI,EAAEL,KAAK,CAAC;IAChEH,GAAG,CAACS,IAAI,CAACF,mBAAmB,CAAC;EAC/B,CAAC,MAAM;IACLP,GAAG,CAACU,MAAM,CAAC,GAAG,CAAC;IACfV,GAAG,CAACS,IAAI,CAAC,gBAAgB,CAAC;EAC5B;AACF,CAAC,CAAC;AAEF,OAAO,MAAME,MAAM,GAAGlB,OAAO,CAACI,MAAM,CAAC,CAAC;AACtCc,MAAM,CAACb,GAAG,CAAC,GAAG,EAAE,gBAAgBC,GAAG,EAAEC,GAAG,EAAEC,IAAI,EAAE;EAC9CW,OAAO,CAACC,GAAG,CAACd,GAAG,CAACe,IAAI,CAAC;EACrB,MAAMZ,IAAI,GAAG,MAAMR,YAAY,CAACK,GAAG,CAACe,IAAI,CAAC;EACzC,IAAIZ,IAAI,EAAE;IACRF,GAAG,CAACS,IAAI,CAACP,IAAI,CAAC;EAChB,CAAC,MAAM;IACLF,GAAG,CAACU,MAAM,CAAC,GAAG,CAAC;IACfV,GAAG,CAACS,IAAI,CAAC,gBAAgB,CAAC;EAC5B;AACF,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-scene-server.js","names":["v4","uuidv4","createSceneServer","name","layer","serviceItemId","replace","serviceName","currentVersion","serviceVersion","supportedBindings","layers"],"sources":["../../../../src/i3s-server/utils/create-scene-server.ts"],"sourcesContent":["import {SceneLayer3D} from '@loaders.gl/i3s';\nimport {v4 as uuidv4} from 'uuid';\n\n/**\n * Create `/SceneServer` response\n * @param name - service name, custom user-friendly name of the service\n * @param layer - I3S layer JSON\n * @returns reponse JSON for `/SceneServer` route\n */\nexport const createSceneServer = (name: string, layer: SceneLayer3D) => {\n return {\n serviceItemId: uuidv4().replace(/-/gi, ''),\n serviceName: name,\n name,\n currentVersion: '10.7',\n serviceVersion: '1.8',\n supportedBindings: ['REST'],\n layers: [layer]\n };\n};\n"],"mappings":"AACA,SAAQA,EAAE,IAAIC,MAAM,QAAO,MAAM;AAQjC,OAAO,MAAMC,iBAAiB,GAAGA,CAACC,IAAY,EAAEC,KAAmB,KAAK;EACtE,OAAO;IACLC,aAAa,EAAEJ,MAAM,CAAC,CAAC,CAACK,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAC1CC,WAAW,EAAEJ,IAAI;IACjBA,IAAI;IACJK,cAAc,EAAE,MAAM;IACtBC,cAAc,EAAE,KAAK;IACrBC,iBAAiB,EAAE,CAAC,MAAM,CAAC;IAC3BC,MAAM,EAAE,CAACP,KAAK;EAChB,CAAC;AACH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-utils.js","names":["debugFactory","debug","normalizePort","val","chkPort","parseInt","Number","isNaN","formErrorHandler","optionalPort","onError","error","syscall","bind","concat","code","console","process","exit","formListeningHandler","optionalServer","onListening","addr","address","port"],"sources":["../../../../src/i3s-server/utils/server-utils.ts"],"sourcesContent":["import type {Server as HttpsServer} from 'https';\nimport type {Server as HttpServer} from 'http';\n\nimport debugFactory from 'debug';\nconst debug = debugFactory('i3s-server:server');\n\n/**\n * Normalize a port into a number, string, or false.\n * @param val - port value from env variables\n * @returns - `number` for port, `string` for a named pipe, or `false` if the port number is not correct\n */\nexport function normalizePort(val: string): number | string | false {\n const chkPort = parseInt(val, 10);\n\n if (Number.isNaN(chkPort)) {\n // named pipe\n return val;\n }\n\n if (chkPort >= 0) {\n // port number\n return chkPort;\n }\n\n return false;\n}\n\n/**\n * Event listener creator for HTTP/HTTPS server \"error\" event.\n * @param optionalPort - the port/named pipe the server is started on\n * @return callback to handle server errors\n */\nexport function formErrorHandler(\n optionalPort: string | number\n): (error: NodeJS.ErrnoException) => void {\n return function onError(error: NodeJS.ErrnoException) {\n if (error.syscall !== 'listen') {\n throw error;\n }\n\n const bind = typeof optionalPort === 'string' ? `Pipe ${optionalPort}` : `Port ${optionalPort}`;\n\n // handle specific listen errors with friendly messages\n switch (error.code) {\n case 'EACCES':\n console.error(`${bind} requires elevated privileges`); // eslint-disable-line no-console, no-undef\n process.exit(1); // eslint-disable-line no-process-exit, no-undef\n break;\n case 'EADDRINUSE':\n console.error(`${bind} is already in use`); // eslint-disable-line no-console, no-undef\n process.exit(1); // eslint-disable-line no-process-exit, no-undef\n break;\n default:\n throw error;\n }\n };\n}\n\n/**\n * Event listener for HTTP/HTTPS server \"listening\" event.\n * @param optionalServer - http or https NodeJS server\n * @return callback that is triggered when the server has started\n */\nexport function formListeningHandler(optionalServer: HttpsServer | HttpServer): () => void {\n return function onListening() {\n const addr = optionalServer.address();\n const bind = typeof addr === 'string' ? `pipe ${addr}` : `port ${addr?.port}`;\n debug(`Listening on ${bind}`);\n };\n}\n"],"mappings":"AAGA,OAAOA,YAAY,MAAM,OAAO;AAChC,MAAMC,KAAK,GAAGD,YAAY,CAAC,mBAAmB,CAAC;AAO/C,OAAO,SAASE,aAAaA,CAACC,GAAW,EAA2B;EAClE,MAAMC,OAAO,GAAGC,QAAQ,CAACF,GAAG,EAAE,EAAE,CAAC;EAEjC,IAAIG,MAAM,CAACC,KAAK,CAACH,OAAO,CAAC,EAAE;IAEzB,OAAOD,GAAG;EACZ;EAEA,IAAIC,OAAO,IAAI,CAAC,EAAE;IAEhB,OAAOA,OAAO;EAChB;EAEA,OAAO,KAAK;AACd;AAOA,OAAO,SAASI,gBAAgBA,CAC9BC,YAA6B,EACW;EACxC,OAAO,SAASC,OAAOA,CAACC,KAA4B,EAAE;IACpD,IAAIA,KAAK,CAACC,OAAO,KAAK,QAAQ,EAAE;MAC9B,MAAMD,KAAK;IACb;IAEA,MAAME,IAAI,GAAG,OAAOJ,YAAY,KAAK,QAAQ,WAAAK,MAAA,CAAWL,YAAY,YAAAK,MAAA,CAAaL,YAAY,CAAE;IAG/F,QAAQE,KAAK,CAACI,IAAI;MAChB,KAAK,QAAQ;QACXC,OAAO,CAACL,KAAK,IAAAG,MAAA,CAAID,IAAI,kCAA+B,CAAC;QACrDI,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;QACf;MACF,KAAK,YAAY;QACfF,OAAO,CAACL,KAAK,IAAAG,MAAA,CAAID,IAAI,uBAAoB,CAAC;QAC1CI,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;QACf;MACF;QACE,MAAMP,KAAK;IACf;EACF,CAAC;AACH;AAOA,OAAO,SAASQ,oBAAoBA,CAACC,cAAwC,EAAc;EACzF,OAAO,SAASC,WAAWA,CAAA,EAAG;IAC5B,MAAMC,IAAI,GAAGF,cAAc,CAACG,OAAO,CAAC,CAAC;IACrC,MAAMV,IAAI,GAAG,OAAOS,IAAI,KAAK,QAAQ,WAAAR,MAAA,CAAWQ,IAAI,YAAAR,MAAA,CAAaQ,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEE,IAAI,CAAE;IAC7EvB,KAAK,iBAAAa,MAAA,CAAiBD,IAAI,CAAE,CAAC;EAC/B,CAAC;AACH"}
package/dist/esm/index.js DELETED
@@ -1,3 +0,0 @@
1
- export { default as I3SConverter } from './i3s-converter/i3s-converter';
2
- export { default as Tiles3DConverter } from './3d-tiles-converter/3d-tiles-converter';
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["default","I3SConverter","Tiles3DConverter"],"sources":["../../src/index.ts"],"sourcesContent":["export {default as I3SConverter} from './i3s-converter/i3s-converter';\nexport {default as Tiles3DConverter} from './3d-tiles-converter/3d-tiles-converter';\n"],"mappings":"AAAA,SAAQA,OAAO,IAAIC,YAAY,QAAO,+BAA+B;AACrE,SAAQD,OAAO,IAAIE,gBAAgB,QAAO,yCAAyC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-utils.js","names":["getStringValue","index","args","length","value","indexOf","getURLValue","console","log","concat","replace","validateOptionsWithEqual","reduce","acc","curr","equalSignIndex","beforeEqual","slice","afterEqual","condition","includes","startsWith","getIntegerValue","stringValue","result","Number","parseInt","isFinite","NaN","getBooleanValue","toLowerCase","trim"],"sources":["../../../../src/lib/utils/cli-utils.ts"],"sourcesContent":["/**\n * Get string option value from cli arguments\n * @param index - option's name index in the argument's array.\n * The value of the option should be next to name of the option.\n * @param args - cli arguments array\n * @returns - string value of the option\n */\nexport function getStringValue(index: number, args: string[]): string {\n if (index + 1 >= args.length) {\n return '';\n }\n const value = args[index + 1];\n if (value.indexOf('--') === 0) {\n return '';\n }\n return value;\n}\n\n/**\n * Modyfy URL path to be compatible with fetch\n * @param index - option's name index in the argument's array.\n * The value of the option should be next to name of the option.\n * @param args - cli arguments array\n * @returns - string value of the option\n */\nexport function getURLValue(index: number, args: string[]): string {\n const value = getStringValue(index, args);\n console.log(`Input tileset value: ${value}`);\n console.log(`Modified tileset value: ${value.replace(/\\\\/g, '/')}`);\n return value.replace(/\\\\/g, '/');\n}\n\nexport function validateOptionsWithEqual(args: string[]): string[] {\n return args.reduce((acc: string[], curr) => {\n const equalSignIndex = curr.indexOf('=');\n const beforeEqual = curr.slice(0, equalSignIndex);\n const afterEqual = curr.slice(equalSignIndex + 1, curr.length);\n const condition = curr.includes('=') && curr.startsWith('--') && afterEqual;\n if (condition) {\n return acc.concat(beforeEqual, afterEqual);\n }\n return acc.concat(curr);\n }, []);\n}\n\n/**\n * Get integer option value from cli arguments\n * @param index - option's name index in the argument's array\n * The value of the option should be next to name of the option.\n * @param args - cli arguments array\n * @returns - number value of the option\n */\nexport function getIntegerValue(index: number, args: string[]): number {\n const stringValue: string = getStringValue(index, args);\n const result: number = Number.parseInt(stringValue);\n if (isFinite(result)) {\n return result;\n }\n return NaN;\n}\n\n/**\n * Get boolean option value from cli arguments\n * @param index - option's name index in the argument's array\n * The value of the option should be next to name of the option.\n * @param args - cli arguments array\n * @returns - boolean value of the option\n */\nexport function getBooleanValue(index: number, args: string[]): boolean {\n const stringValue: string = getStringValue(index, args).toLowerCase().trim();\n if (['--no-draco', '--split-nodes'].includes(args[index]) && !stringValue) {\n return false;\n }\n if (!stringValue || stringValue === 'true') {\n return true;\n }\n return false;\n}\n"],"mappings":"AAOA,OAAO,SAASA,cAAcA,CAACC,KAAa,EAAEC,IAAc,EAAU;EACpE,IAAID,KAAK,GAAG,CAAC,IAAIC,IAAI,CAACC,MAAM,EAAE;IAC5B,OAAO,EAAE;EACX;EACA,MAAMC,KAAK,GAAGF,IAAI,CAACD,KAAK,GAAG,CAAC,CAAC;EAC7B,IAAIG,KAAK,CAACC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IAC7B,OAAO,EAAE;EACX;EACA,OAAOD,KAAK;AACd;AASA,OAAO,SAASE,WAAWA,CAACL,KAAa,EAAEC,IAAc,EAAU;EACjE,MAAME,KAAK,GAAGJ,cAAc,CAACC,KAAK,EAAEC,IAAI,CAAC;EACzCK,OAAO,CAACC,GAAG,yBAAAC,MAAA,CAAyBL,KAAK,CAAE,CAAC;EAC5CG,OAAO,CAACC,GAAG,4BAAAC,MAAA,CAA4BL,KAAK,CAACM,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAE,CAAC;EACnE,OAAON,KAAK,CAACM,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAClC;AAEA,OAAO,SAASC,wBAAwBA,CAACT,IAAc,EAAY;EACjE,OAAOA,IAAI,CAACU,MAAM,CAAC,CAACC,GAAa,EAAEC,IAAI,KAAK;IAC1C,MAAMC,cAAc,GAAGD,IAAI,CAACT,OAAO,CAAC,GAAG,CAAC;IACxC,MAAMW,WAAW,GAAGF,IAAI,CAACG,KAAK,CAAC,CAAC,EAAEF,cAAc,CAAC;IACjD,MAAMG,UAAU,GAAGJ,IAAI,CAACG,KAAK,CAACF,cAAc,GAAG,CAAC,EAAED,IAAI,CAACX,MAAM,CAAC;IAC9D,MAAMgB,SAAS,GAAGL,IAAI,CAACM,QAAQ,CAAC,GAAG,CAAC,IAAIN,IAAI,CAACO,UAAU,CAAC,IAAI,CAAC,IAAIH,UAAU;IAC3E,IAAIC,SAAS,EAAE;MACb,OAAON,GAAG,CAACJ,MAAM,CAACO,WAAW,EAAEE,UAAU,CAAC;IAC5C;IACA,OAAOL,GAAG,CAACJ,MAAM,CAACK,IAAI,CAAC;EACzB,CAAC,EAAE,EAAE,CAAC;AACR;AASA,OAAO,SAASQ,eAAeA,CAACrB,KAAa,EAAEC,IAAc,EAAU;EACrE,MAAMqB,WAAmB,GAAGvB,cAAc,CAACC,KAAK,EAAEC,IAAI,CAAC;EACvD,MAAMsB,MAAc,GAAGC,MAAM,CAACC,QAAQ,CAACH,WAAW,CAAC;EACnD,IAAII,QAAQ,CAACH,MAAM,CAAC,EAAE;IACpB,OAAOA,MAAM;EACf;EACA,OAAOI,GAAG;AACZ;AASA,OAAO,SAASC,eAAeA,CAAC5B,KAAa,EAAEC,IAAc,EAAW;EACtE,MAAMqB,WAAmB,GAAGvB,cAAc,CAACC,KAAK,EAAEC,IAAI,CAAC,CAAC4B,WAAW,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC;EAC5E,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAACX,QAAQ,CAAClB,IAAI,CAACD,KAAK,CAAC,CAAC,IAAI,CAACsB,WAAW,EAAE;IACzE,OAAO,KAAK;EACd;EACA,IAAI,CAACA,WAAW,IAAIA,WAAW,KAAK,MAAM,EAAE;IAC1C,OAAO,IAAI;EACb;EACA,OAAO,KAAK;AACd"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"compress-util.js","names":["createGzip","join","promises","fs","createReadStream","createWriteStream","archiver","removeFile","ChildProcessProxy","JSZip","MD5Hash","crypt","getAbsoluteFilePath","compressFileWithGzip","pathFile","compressedPathFile","concat","gzip","input","output","Promise","resolve","reject","on","console","log","error","pipe","compressFilesWithZip","fileMap","outputFile","level","arguments","length","undefined","e","archive","zlib","pointer","err","subFileName","subFileData","appendFileToArchive","finalize","compressWithChildProcess","inputFolder","inputFiles","sevenZipExe","process","platform","compressWithChildProcessWindows","compressWithChildProcessUnix","fullOutputFile","args","childProcess","start","command","spawn","cwd","wait","substr","generateHash128FromZip","inputZipFile","readFile","zip","loadAsync","hashTable","zipFiles","files","relativePath","zipEntry","_data","content","compressedContent","dir","hash","Buffer","from","toLowerCase","push","key","atob","value","byteOffset","sort","prev","next","item","longToByteArray","write","hexToBytes","close","long","buffer","ArrayBuffer","longNum","Float64Array","parseInt","Array","Uint8Array","reverse","addFileToZip","fileName","zipFile","fileStream","append","name"],"sources":["../../../../src/lib/utils/compress-util.ts"],"sourcesContent":["import {createGzip} from 'zlib';\nimport {join} from 'path';\nimport {promises as fs, createReadStream, createWriteStream} from 'fs';\nimport archiver from 'archiver';\nimport {removeFile} from './file-utils';\nimport {ChildProcessProxy} from '@loaders.gl/worker-utils';\nimport JSZip from 'jszip';\nimport {MD5Hash} from '@loaders.gl/crypto';\nimport crypt from 'crypt';\nimport {getAbsoluteFilePath} from './file-utils';\n\n/**\n * Compress file to gzip file\n *\n * @param pathFile - the path to the file\n * @return the path to the gzip file\n */\nexport function compressFileWithGzip(pathFile: string): Promise<string> {\n const compressedPathFile = `${pathFile}.gz`;\n const gzip = createGzip();\n const input = createReadStream(pathFile);\n const output = createWriteStream(compressedPathFile);\n\n return new Promise((resolve, reject) => {\n input.on('end', () => {\n console.log(`${compressedPathFile} compressed and saved.`); // eslint-disable-line no-undef,no-console\n resolve(compressedPathFile);\n });\n input.on('error', (error) => {\n console.log(`${compressedPathFile}: compression error!`); // eslint-disable-line no-undef,no-console\n reject(error);\n });\n input.pipe(gzip).pipe(output);\n });\n}\n\n/**\n * Compress files from map into slpk file\n *\n * @param fileMap - map with file paths (key: output path, value: input path)\n * @param outputFile - output slpk file\n * @param level - compression level\n */\nexport async function compressFilesWithZip(\n fileMap: {[key: string]: string},\n outputFile: string,\n level: number = 0\n) {\n // Before creating a new file, we need to delete the old file\n try {\n await removeFile(outputFile);\n } catch (e) {\n // Do nothing if old file doesn't exist\n }\n\n const output = createWriteStream(outputFile);\n const archive = archiver('zip', {\n zlib: {level} // Sets the compression level.\n });\n\n return new Promise(async (resolve, reject) => {\n // listen for all archive data to be writte\n // 'close' event is fired only when a file descriptor is involved\n output.on('close', function () {\n console.log(`${outputFile} saved.`); // eslint-disable-line no-undef,no-console\n console.log(`${archive.pointer()} total bytes`); // eslint-disable-line no-undef,no-console\n resolve(null);\n });\n\n // This event is fired when the data source is drained no matter what was the data source.\n // It is not part of this library but rather from the NodeJS Stream API.\n // @see: https://nodejs.org/api/stream.html#stream_event_end\n output.on('end', function () {\n console.log('Data has been drained'); // eslint-disable-line no-undef,no-console\n resolve(null);\n });\n\n // good practice to catch warnings (ie stat failures and other non-blocking errors)\n archive.on('warning', function (err) {\n console.log(err); // eslint-disable-line no-undef,no-console\n reject(err);\n });\n\n // good practice to catch this error explicitly\n archive.on('error', function (err) {\n reject(err);\n });\n\n // pipe archive data to the file\n archive.pipe(output);\n\n for (const subFileName in fileMap) {\n const subFileData = fileMap[subFileName];\n await appendFileToArchive(archive, subFileName, subFileData);\n }\n\n // finalize the archive (ie we are done appending files but streams have to finish yet)\n archive.finalize();\n });\n}\n\n/**\n * Compress files using external tool 'zip'/'7z'\n *\n * @param inputFolder - folder to archive - for cwd option\n * @param outputFile - output slpk file\n * @param level - compression level\n * @param inputFiles - input files path to pass to the executable as option\n * @param sevenZipExe - path to 7z.exe executable\n */\nexport async function compressWithChildProcess(\n inputFolder: string,\n outputFile: string,\n level: number,\n inputFiles: string,\n sevenZipExe: string\n) {\n // eslint-disable-next-line no-undef\n if (process.platform === 'win32') {\n await compressWithChildProcessWindows(inputFolder, outputFile, level, inputFiles, sevenZipExe);\n } else {\n await compressWithChildProcessUnix(inputFolder, outputFile, level, inputFiles);\n }\n}\n\n/**\n * Compress files using external linux tool 'zip'\n *\n * @param inputFolder - folder to archive - for cwd option\n * @param outputFile - output slpk file\n * @param level - compression level\n * @param inputFiles - input files path to pass to the executable as option\n */\nasync function compressWithChildProcessUnix(\n inputFolder: string,\n outputFile: string,\n level: number = 0,\n inputFiles: string = '.'\n) {\n const fullOutputFile = getAbsoluteFilePath(outputFile);\n const args = [`-${level}`, '-r', fullOutputFile, inputFiles];\n const childProcess = new ChildProcessProxy();\n await childProcess.start({\n command: 'zip',\n arguments: args,\n spawn: {\n cwd: inputFolder\n },\n wait: 0\n });\n}\n\n/**\n * Compress files using windows external tool '7z'\n *\n * @param inputFolder - folder to archive - for cwd option\n * @param outputFile - output slpk file\n * @param level - compression level\n * @param inputFiles - input files path to pass to the executable as option\n * @param sevenZipExe - path to 7z.exe executable\n */\nasync function compressWithChildProcessWindows(\n inputFolder: string,\n outputFile: string,\n level: number = 0,\n inputFiles: string = join('.', '*'),\n sevenZipExe: string\n) {\n // Workaround for @listfile issue. In 7z.exe @-leading files are handled as listfiles\n // https://sevenzip.osdn.jp/chm/cmdline/syntax.htm\n if (inputFiles[0] === '@') {\n inputFiles = `*${inputFiles.substr(1)}`;\n }\n\n const fullOutputFile = getAbsoluteFilePath(outputFile);\n const args = ['a', '-tzip', `-mx=${level}`, fullOutputFile, inputFiles];\n const childProcess = new ChildProcessProxy();\n await childProcess.start({\n command: sevenZipExe,\n arguments: args,\n spawn: {\n cwd: `${inputFolder}`\n },\n wait: 0\n });\n}\n\n/**\n * Generate hash file from zip archive\n * https://github.com/Esri/i3s-spec/blob/master/docs/1.7/slpk_hashtable.cmn.md\n *\n * @param inputZipFile\n * @param outputFile\n */\nexport async function generateHash128FromZip(inputZipFile: string, outputFile: string) {\n const input = await fs.readFile(inputZipFile);\n const zip = await JSZip.loadAsync(input);\n const hashTable: {key: string; value: string}[] = [];\n const zipFiles = zip.files;\n for (const relativePath in zipFiles) {\n const zipEntry = zipFiles[relativePath];\n // Had to use a workaround because the correct string is getting the wrong data\n // const content = await zipEntry.async('nodebuffer');\n // _data isn't described in the interface, so lint thought it was wrong\n const _data = '_data';\n const content = zipEntry[_data].compressedContent;\n if (zipEntry.dir) continue; // eslint-disable-line no-continue\n // eslint-disable-next-line no-undef\n const hash = await new MD5Hash().hash(Buffer.from(relativePath.toLowerCase()), 'base64');\n // eslint-disable-next-line no-undef\n hashTable.push({key: atob(hash), value: content.byteOffset});\n }\n\n hashTable.sort((prev, next) => {\n if (prev.key === next.key) {\n return prev.value < next.value ? -1 : 1;\n }\n return prev.key < next.key ? -1 : 1;\n });\n\n const output = createWriteStream(outputFile);\n return new Promise((resolve, reject) => {\n output.on('close', function () {\n console.log(`${outputFile} generated and saved`); // eslint-disable-line\n resolve(null);\n });\n output.on('error', function (err) {\n console.log(err); // eslint-disable-line\n reject(err);\n });\n for (const key in hashTable) {\n const item = hashTable[key];\n const value = longToByteArray(item.value);\n // TODO: perhaps you need to wait for the 'drain' event if the write returns 'false'\n // eslint-disable-next-line no-undef\n output.write(Buffer.from(crypt.hexToBytes(item.key).concat(value)));\n }\n output.close();\n });\n}\n\n/**\n * Encode 64 bit value to byte array\n *\n * @param long - stringified number\n * @returns\n */\nfunction longToByteArray(long: string): number[] {\n const buffer = new ArrayBuffer(8); // JS numbers are 8 bytes long, or 64 bits\n const longNum = new Float64Array(buffer); // so equivalent to Float64\n longNum[0] = parseInt(long);\n return Array.from(new Uint8Array(buffer)).reverse(); // reverse to get little endian\n}\n\n/**\n * Add file to zip archive\n *\n * @param inputFile\n * @param fileName\n * @param zipFile\n * @param sevenZipExe\n */\nexport async function addFileToZip(\n inputFolder: string,\n fileName: string,\n zipFile: string,\n sevenZipExe: string\n) {\n await compressWithChildProcess(inputFolder, zipFile, 0, fileName, sevenZipExe);\n console.log(`${fileName} added to ${zipFile}.`); // eslint-disable-line\n}\n\n/**\n *\n * @param archive zip archive instance\n * @param subFileName file path inside archive\n * @param subFileData source file path\n * @returns\n */\nfunction appendFileToArchive(archive: any, subFileName: string, subFileData: string) {\n return new Promise((resolve) => {\n const fileStream = createReadStream(subFileData);\n console.log(`Compression start: ${subFileName}`); // eslint-disable-line no-undef,no-console\n fileStream.on('close', () => {\n console.log(`Compression finish: ${subFileName}`); // eslint-disable-line no-undef,no-console\n resolve(null);\n });\n archive.append(fileStream, {name: subFileName});\n });\n}\n"],"mappings":"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"}