@loaders.gl/tile-converter 4.2.0-alpha.4 → 4.2.0-alpha.6

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 (192) hide show
  1. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +4 -4
  2. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
  3. package/dist/3d-tiles-converter/3d-tiles-converter.js +349 -293
  4. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -1
  5. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +261 -200
  6. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js +14 -5
  7. package/dist/3d-tiles-converter/helpers/load-i3s.d.ts.map +1 -1
  8. package/dist/3d-tiles-converter/helpers/load-i3s.js +83 -77
  9. package/dist/3d-tiles-converter/helpers/texture-atlas.js +44 -21
  10. package/dist/3d-tiles-converter/json-templates/tileset.js +32 -33
  11. package/dist/constants.js +0 -1
  12. package/dist/converter-cli.js +257 -234
  13. package/dist/converter.min.cjs +95 -105
  14. package/dist/deps-installer/deps-installer.d.ts.map +1 -1
  15. package/dist/deps-installer/deps-installer.js +78 -59
  16. package/dist/i3s-converter/helpers/attribute-metadata-info.js +210 -153
  17. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts +1 -1
  18. package/dist/i3s-converter/helpers/batch-ids-extensions.d.ts.map +1 -1
  19. package/dist/i3s-converter/helpers/batch-ids-extensions.js +146 -103
  20. package/dist/i3s-converter/helpers/coordinate-converter.js +100 -65
  21. package/dist/i3s-converter/helpers/create-scene-server-path.js +14 -9
  22. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -1
  23. package/dist/i3s-converter/helpers/feature-attributes.js +170 -105
  24. package/dist/i3s-converter/helpers/geometry-attributes.d.ts +1 -1
  25. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -1
  26. package/dist/i3s-converter/helpers/geometry-attributes.js +205 -212
  27. package/dist/i3s-converter/helpers/geometry-converter.d.ts +17 -3
  28. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  29. package/dist/i3s-converter/helpers/geometry-converter.js +1189 -830
  30. package/dist/i3s-converter/helpers/gltf-attributes.d.ts +1 -1
  31. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -1
  32. package/dist/i3s-converter/helpers/gltf-attributes.js +109 -97
  33. package/dist/i3s-converter/helpers/load-3d-tiles.js +103 -66
  34. package/dist/i3s-converter/helpers/node-debug.js +98 -54
  35. package/dist/i3s-converter/helpers/node-index-document.d.ts +11 -4
  36. package/dist/i3s-converter/helpers/node-index-document.d.ts.map +1 -1
  37. package/dist/i3s-converter/helpers/node-index-document.js +255 -177
  38. package/dist/i3s-converter/helpers/node-pages.d.ts +1 -1
  39. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -1
  40. package/dist/i3s-converter/helpers/node-pages.js +299 -193
  41. package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts +1 -1
  42. package/dist/i3s-converter/helpers/preprocess-3d-tiles.d.ts.map +1 -1
  43. package/dist/i3s-converter/helpers/preprocess-3d-tiles.js +92 -60
  44. package/dist/i3s-converter/helpers/progress.d.ts.map +1 -1
  45. package/dist/i3s-converter/helpers/progress.js +139 -83
  46. package/dist/i3s-converter/helpers/tileset-traversal.d.ts +9 -2
  47. package/dist/i3s-converter/helpers/tileset-traversal.d.ts.map +1 -1
  48. package/dist/i3s-converter/helpers/tileset-traversal.js +33 -13
  49. package/dist/i3s-converter/i3s-converter.d.ts +7 -7
  50. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  51. package/dist/i3s-converter/i3s-converter.js +1165 -895
  52. package/dist/i3s-converter/json-templates/geometry-definitions.js +70 -79
  53. package/dist/i3s-converter/json-templates/layers.js +120 -121
  54. package/dist/i3s-converter/json-templates/metadata.js +19 -20
  55. package/dist/i3s-converter/json-templates/node.js +73 -71
  56. package/dist/i3s-converter/json-templates/scene-server.js +25 -26
  57. package/dist/i3s-converter/json-templates/shared-resources.js +107 -108
  58. package/dist/i3s-converter/json-templates/store.js +96 -94
  59. package/dist/i3s-converter/types.js +35 -23
  60. package/dist/i3s-server/app.js +15 -12
  61. package/dist/i3s-server/bin/i3s-server.min.cjs +69 -69
  62. package/dist/i3s-server/bin/www.js +16 -7
  63. package/dist/i3s-server/controllers/index-controller.js +18 -15
  64. package/dist/i3s-server/controllers/slpk-controller.d.ts.map +1 -1
  65. package/dist/i3s-server/controllers/slpk-controller.js +24 -11
  66. package/dist/i3s-server/routes/index.js +13 -9
  67. package/dist/i3s-server/routes/slpk-router.d.ts.map +1 -1
  68. package/dist/i3s-server/routes/slpk-router.js +26 -19
  69. package/dist/i3s-server/utils/create-scene-server.js +15 -10
  70. package/dist/i3s-server/utils/server-utils.d.ts.map +1 -1
  71. package/dist/i3s-server/utils/server-utils.js +52 -32
  72. package/dist/index.cjs +616 -967
  73. package/dist/index.cjs.map +7 -0
  74. package/dist/index.d.ts +2 -2
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +0 -1
  77. package/dist/lib/json-schemas/conversion-dump-json-schema.js +243 -421
  78. package/dist/lib/utils/cli-utils.d.ts.map +1 -1
  79. package/dist/lib/utils/cli-utils.js +65 -36
  80. package/dist/lib/utils/compress-util.js +20 -15
  81. package/dist/lib/utils/conversion-dump.d.ts +10 -2
  82. package/dist/lib/utils/conversion-dump.d.ts.map +1 -1
  83. package/dist/lib/utils/conversion-dump.js +242 -197
  84. package/dist/lib/utils/file-utils.d.ts +1 -1
  85. package/dist/lib/utils/file-utils.d.ts.map +1 -1
  86. package/dist/lib/utils/file-utils.js +120 -74
  87. package/dist/lib/utils/geometry-utils.js +13 -7
  88. package/dist/lib/utils/lod-conversion-utils.js +65 -33
  89. package/dist/lib/utils/queue.js +12 -13
  90. package/dist/lib/utils/statistic-utills.d.ts +6 -23
  91. package/dist/lib/utils/statistic-utills.d.ts.map +1 -1
  92. package/dist/lib/utils/statistic-utills.js +58 -55
  93. package/dist/lib/utils/write-queue.d.ts +2 -2
  94. package/dist/lib/utils/write-queue.d.ts.map +1 -1
  95. package/dist/lib/utils/write-queue.js +72 -86
  96. package/dist/pgm-loader.js +17 -13
  97. package/dist/slpk-extractor/slpk-extractor.d.ts.map +1 -1
  98. package/dist/slpk-extractor/slpk-extractor.js +60 -50
  99. package/dist/slpk-extractor-cli.d.ts.map +1 -1
  100. package/dist/slpk-extractor-cli.js +90 -59
  101. package/dist/slpk-extractor.min.cjs +1 -1
  102. package/package.json +27 -26
  103. package/src/3d-tiles-converter/3d-tiles-converter.ts +21 -10
  104. package/src/3d-tiles-converter/helpers/b3dm-converter.ts +1 -0
  105. package/src/3d-tiles-converter/helpers/load-i3s.ts +3 -27
  106. package/src/converter-cli.ts +4 -2
  107. package/src/deps-installer/deps-installer.ts +7 -0
  108. package/src/i3s-converter/helpers/attribute-metadata-info.ts +1 -1
  109. package/src/i3s-converter/helpers/batch-ids-extensions.ts +3 -1
  110. package/src/i3s-converter/helpers/coordinate-converter.ts +2 -2
  111. package/src/i3s-converter/helpers/feature-attributes.ts +5 -2
  112. package/src/i3s-converter/helpers/geometry-attributes.ts +6 -5
  113. package/src/i3s-converter/helpers/geometry-converter.ts +118 -72
  114. package/src/i3s-converter/helpers/gltf-attributes.ts +12 -13
  115. package/src/i3s-converter/helpers/node-index-document.ts +18 -10
  116. package/src/i3s-converter/helpers/node-pages.ts +27 -29
  117. package/src/i3s-converter/helpers/preprocess-3d-tiles.ts +1 -0
  118. package/src/i3s-converter/helpers/progress.ts +1 -0
  119. package/src/i3s-converter/helpers/tileset-traversal.ts +22 -13
  120. package/src/i3s-converter/i3s-converter.ts +173 -114
  121. package/src/i3s-converter/json-templates/node.ts +1 -1
  122. package/src/i3s-server/bin/www.ts +6 -4
  123. package/src/i3s-server/controllers/slpk-controller.ts +4 -2
  124. package/src/i3s-server/routes/index.ts +10 -7
  125. package/src/i3s-server/routes/slpk-router.ts +22 -16
  126. package/src/i3s-server/utils/server-utils.ts +6 -4
  127. package/src/lib/utils/cli-utils.ts +2 -0
  128. package/src/lib/utils/conversion-dump.ts +35 -20
  129. package/src/lib/utils/file-utils.ts +11 -11
  130. package/src/lib/utils/statistic-utills.ts +5 -6
  131. package/src/lib/utils/write-queue.ts +2 -2
  132. package/src/slpk-extractor/slpk-extractor.ts +2 -1
  133. package/src/slpk-extractor-cli.ts +16 -8
  134. package/dist/3d-tiles-converter/3d-tiles-converter.js.map +0 -1
  135. package/dist/3d-tiles-converter/helpers/b3dm-converter.js.map +0 -1
  136. package/dist/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.js.map +0 -1
  137. package/dist/3d-tiles-converter/helpers/load-i3s.js.map +0 -1
  138. package/dist/3d-tiles-converter/helpers/texture-atlas.js.map +0 -1
  139. package/dist/3d-tiles-converter/json-templates/tileset.js.map +0 -1
  140. package/dist/constants.js.map +0 -1
  141. package/dist/converter-cli.js.map +0 -1
  142. package/dist/deps-installer/deps-installer.js.map +0 -1
  143. package/dist/i3s-converter/helpers/attribute-metadata-info.js.map +0 -1
  144. package/dist/i3s-converter/helpers/batch-ids-extensions.js.map +0 -1
  145. package/dist/i3s-converter/helpers/coordinate-converter.js.map +0 -1
  146. package/dist/i3s-converter/helpers/create-scene-server-path.js.map +0 -1
  147. package/dist/i3s-converter/helpers/feature-attributes.js.map +0 -1
  148. package/dist/i3s-converter/helpers/geometry-attributes.js.map +0 -1
  149. package/dist/i3s-converter/helpers/geometry-converter.js.map +0 -1
  150. package/dist/i3s-converter/helpers/gltf-attributes.js.map +0 -1
  151. package/dist/i3s-converter/helpers/load-3d-tiles.js.map +0 -1
  152. package/dist/i3s-converter/helpers/node-debug.js.map +0 -1
  153. package/dist/i3s-converter/helpers/node-index-document.js.map +0 -1
  154. package/dist/i3s-converter/helpers/node-pages.js.map +0 -1
  155. package/dist/i3s-converter/helpers/preprocess-3d-tiles.js.map +0 -1
  156. package/dist/i3s-converter/helpers/progress.js.map +0 -1
  157. package/dist/i3s-converter/helpers/tileset-traversal.js.map +0 -1
  158. package/dist/i3s-converter/i3s-converter.js.map +0 -1
  159. package/dist/i3s-converter/json-templates/geometry-definitions.js.map +0 -1
  160. package/dist/i3s-converter/json-templates/layers.js.map +0 -1
  161. package/dist/i3s-converter/json-templates/metadata.js.map +0 -1
  162. package/dist/i3s-converter/json-templates/node.js.map +0 -1
  163. package/dist/i3s-converter/json-templates/scene-server.js.map +0 -1
  164. package/dist/i3s-converter/json-templates/shared-resources.js.map +0 -1
  165. package/dist/i3s-converter/json-templates/store.js.map +0 -1
  166. package/dist/i3s-converter/types.js.map +0 -1
  167. package/dist/i3s-server/README.md +0 -63
  168. package/dist/i3s-server/app.js.map +0 -1
  169. package/dist/i3s-server/bin/www.js.map +0 -1
  170. package/dist/i3s-server/certs/cert.pem +0 -19
  171. package/dist/i3s-server/certs/key.pem +0 -27
  172. package/dist/i3s-server/controllers/index-controller.js.map +0 -1
  173. package/dist/i3s-server/controllers/slpk-controller.js.map +0 -1
  174. package/dist/i3s-server/routes/index.js.map +0 -1
  175. package/dist/i3s-server/routes/slpk-router.js.map +0 -1
  176. package/dist/i3s-server/utils/create-scene-server.js.map +0 -1
  177. package/dist/i3s-server/utils/server-utils.js.map +0 -1
  178. package/dist/index.js.map +0 -1
  179. package/dist/lib/json-schemas/conversion-dump-json-schema.js.map +0 -1
  180. package/dist/lib/utils/cli-utils.js.map +0 -1
  181. package/dist/lib/utils/compress-util.js.map +0 -1
  182. package/dist/lib/utils/conversion-dump.js.map +0 -1
  183. package/dist/lib/utils/file-utils.js.map +0 -1
  184. package/dist/lib/utils/geometry-utils.js.map +0 -1
  185. package/dist/lib/utils/lod-conversion-utils.js.map +0 -1
  186. package/dist/lib/utils/queue.js.map +0 -1
  187. package/dist/lib/utils/statistic-utills.js.map +0 -1
  188. package/dist/lib/utils/write-queue.js.map +0 -1
  189. package/dist/pgm-loader.js.map +0 -1
  190. package/dist/slpk-extractor/slpk-extractor.js.map +0 -1
  191. package/dist/slpk-extractor-cli.js.map +0 -1
  192. package/src/lib/utils/statistic-utills.d.ts +0 -25
@@ -1,96 +1,82 @@
1
1
  import { Queue } from "./queue.js";
2
2
  import process from 'process';
3
- const MEMORY_LIMIT = 4 * 1024 * 1024 * 1024;
3
+ /** Memory limit size is based on testing */
4
+ const MEMORY_LIMIT = 4 * 1024 * 1024 * 1024; // 4GB
4
5
  export default class WriteQueue extends Queue {
5
- constructor(conversionDump) {
6
- let listeningInterval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2000;
7
- let writeConcurrency = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 400;
8
- super();
9
- this.intervalId = void 0;
10
- this.conversionDump = void 0;
11
- this.writePromise = null;
12
- this.fileMap = {};
13
- this.listeningInterval = void 0;
14
- this.writeConcurrency = void 0;
15
- this.conversionDump = conversionDump;
16
- this.listeningInterval = listeningInterval;
17
- this.writeConcurrency = writeConcurrency;
18
- }
19
- async enqueue(val) {
20
- let writeImmediately = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
21
- if (writeImmediately) {
22
- const {
23
- archiveKey,
24
- writePromise
25
- } = val;
26
- const result = await writePromise();
27
- if (archiveKey && result) {
28
- this.fileMap[archiveKey] = result;
29
- }
30
- } else {
31
- super.enqueue(val);
32
- if (process.memoryUsage().rss > MEMORY_LIMIT) {
33
- await this.startWrite();
34
- }
6
+ intervalId; // eslint-disable-line no-undef
7
+ conversionDump;
8
+ writePromise = null;
9
+ fileMap = {};
10
+ listeningInterval;
11
+ writeConcurrency;
12
+ constructor(conversionDump, listeningInterval = 2000, writeConcurrency = 400) {
13
+ super();
14
+ this.conversionDump = conversionDump;
15
+ this.listeningInterval = listeningInterval;
16
+ this.writeConcurrency = writeConcurrency;
17
+ }
18
+ async enqueue(val, writeImmediately = false) {
19
+ if (writeImmediately) {
20
+ const { archiveKey, writePromise } = val;
21
+ const result = await writePromise();
22
+ if (archiveKey && result) {
23
+ this.fileMap[archiveKey] = result;
24
+ }
25
+ }
26
+ else {
27
+ super.enqueue(val);
28
+ /** https://nodejs.org/docs/latest-v14.x/api/process.html#process_process_memoryusage */
29
+ if (process.memoryUsage().rss > MEMORY_LIMIT) {
30
+ await this.startWrite();
31
+ }
32
+ }
33
+ }
34
+ startListening() {
35
+ this.intervalId = setInterval(() => this.startWrite.bind(this), this.listeningInterval);
35
36
  }
36
- }
37
- startListening() {
38
- this.intervalId = setInterval(this.startWrite.bind(this), this.listeningInterval);
39
- }
40
- stopListening() {
41
- if (this.intervalId) {
42
- clearInterval(this.intervalId);
37
+ stopListening() {
38
+ if (this.intervalId) {
39
+ clearInterval(this.intervalId);
40
+ }
43
41
  }
44
- }
45
- async startWrite() {
46
- if (!this.writePromise) {
47
- this.writePromise = this.doWrite();
42
+ async startWrite() {
43
+ if (!this.writePromise) {
44
+ this.writePromise = this.doWrite();
45
+ }
46
+ await this.writePromise;
47
+ this.writePromise = null;
48
48
  }
49
- await this.writePromise;
50
- this.writePromise = null;
51
- }
52
- async finalize() {
53
- this.stopListening();
54
- await this.startWrite();
55
- }
56
- async doWrite() {
57
- while (this.length) {
58
- const promises = [];
59
- const archiveKeys = [];
60
- const changedRecords = [];
61
- for (let i = 0; i < this.writeConcurrency; i++) {
62
- const item = this.dequeue();
63
- if (!item) {
64
- break;
49
+ async finalize() {
50
+ this.stopListening();
51
+ await this.startWrite();
52
+ }
53
+ async doWrite() {
54
+ while (this.length) {
55
+ const promises = [];
56
+ const archiveKeys = [];
57
+ const changedRecords = [];
58
+ for (let i = 0; i < this.writeConcurrency; i++) {
59
+ const item = this.dequeue();
60
+ if (!item) {
61
+ break;
62
+ }
63
+ const { archiveKey, sourceId, outputId, resourceType, writePromise } = item;
64
+ archiveKeys.push(archiveKey);
65
+ changedRecords.push({ sourceId, outputId, resourceType });
66
+ const promise = writePromise();
67
+ promises.push(promise);
68
+ }
69
+ const writeResults = await Promise.allSettled(promises);
70
+ this.updateFileMap(archiveKeys, writeResults);
71
+ await this.conversionDump.updateConvertedTilesDump(changedRecords, writeResults);
65
72
  }
66
- const {
67
- archiveKey,
68
- sourceId,
69
- outputId,
70
- resourceType,
71
- writePromise
72
- } = item;
73
- archiveKeys.push(archiveKey);
74
- changedRecords.push({
75
- sourceId,
76
- outputId,
77
- resourceType
78
- });
79
- const promise = writePromise();
80
- promises.push(promise);
81
- }
82
- const writeResults = await Promise.allSettled(promises);
83
- this.updateFileMap(archiveKeys, writeResults);
84
- await this.conversionDump.updateConvertedTilesDump(changedRecords, writeResults);
85
73
  }
86
- }
87
- updateFileMap(archiveKeys, writeResults) {
88
- for (let i = 0; i < archiveKeys.length; i++) {
89
- const archiveKey = archiveKeys[i];
90
- if (archiveKey && 'value' in writeResults[i]) {
91
- this.fileMap[archiveKey] = writeResults[i].value;
92
- }
74
+ updateFileMap(archiveKeys, writeResults) {
75
+ for (let i = 0; i < archiveKeys.length; i++) {
76
+ const archiveKey = archiveKeys[i];
77
+ if (archiveKey && 'value' in writeResults[i]) {
78
+ this.fileMap[archiveKey] = writeResults[i].value;
79
+ }
80
+ }
93
81
  }
94
- }
95
82
  }
96
- //# sourceMappingURL=write-queue.js.map
@@ -1,18 +1,22 @@
1
1
  import { Geoid, parsePGM } from '@math.gl/geoid';
2
- const VERSION = typeof "4.2.0-alpha.4" !== 'undefined' ? "4.2.0-alpha.4" : 'latest';
2
+ // __VERSION__ is injected by babel-plugin-version-inline
3
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
4
+ const VERSION = typeof "4.2.0-alpha.5" !== 'undefined' ? "4.2.0-alpha.5" : 'latest';
3
5
  export { Geoid };
6
+ /**
7
+ * Loader for PGM - Netpbm grayscale image format
8
+ */
4
9
  export const PGMLoader = {
5
- name: 'PGM - Netpbm grayscale image format',
6
- id: 'pgm',
7
- module: 'tile-converter',
8
- version: VERSION,
9
- mimeTypes: ['image/x-portable-graymap'],
10
- parse: async (arrayBuffer, options) => parsePGM(new Uint8Array(arrayBuffer), (options === null || options === void 0 ? void 0 : options.pgm) || {}),
11
- extensions: ['pgm'],
12
- options: {
13
- pgm: {
14
- cubic: false
10
+ name: 'PGM - Netpbm grayscale image format',
11
+ id: 'pgm',
12
+ module: 'tile-converter',
13
+ version: VERSION,
14
+ mimeTypes: ['image/x-portable-graymap'],
15
+ parse: async (arrayBuffer, options) => parsePGM(new Uint8Array(arrayBuffer), options?.pgm || {}),
16
+ extensions: ['pgm'],
17
+ options: {
18
+ pgm: {
19
+ cubic: false
20
+ }
15
21
  }
16
- }
17
22
  };
18
- //# sourceMappingURL=pgm-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slpk-extractor.d.ts","sourceRoot":"","sources":["../../src/slpk-extractor/slpk-extractor.ts"],"names":[],"mappings":"AAuBA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC;;;;;OAKG;IACU,OAAO,CAAC,OAAO,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BtF;;;OAGG;IAEH,OAAO,CAAC,iBAAiB;YAYX,MAAM;YAWN,SAAS;CASxB"}
1
+ {"version":3,"file":"slpk-extractor.d.ts","sourceRoot":"","sources":["../../src/slpk-extractor/slpk-extractor.ts"],"names":[],"mappings":"AAuBA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC;;;;;OAKG;IACU,OAAO,CAAC,OAAO,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BtF;;;OAGG;IAEH,OAAO,CAAC,iBAAiB;YAYX,MAAM;YAWN,SAAS;CASxB"}
@@ -5,59 +5,69 @@ import { FileHandleFile } from '@loaders.gl/loader-utils';
5
5
  import { parseZipLocalFileHeader } from '@loaders.gl/zip';
6
6
  import { GZipCompression } from '@loaders.gl/compression';
7
7
  import { writeFile } from "../lib/utils/file-utils.js";
8
- const indexNames = ['3dSceneLayer.json.gz', '3dNodeIndexDocument.json.gz', 'sharedResource.json.gz'];
8
+ const indexNames = [
9
+ '3dSceneLayer.json.gz',
10
+ '3dNodeIndexDocument.json.gz',
11
+ 'sharedResource.json.gz'
12
+ ];
13
+ /**
14
+ * Converter from slpk to i3s
15
+ */
9
16
  export default class SLPKExtractor {
10
- async extract(options) {
11
- if (isBrowser) {
12
- console.log(BROWSER_ERROR_MESSAGE);
13
- return BROWSER_ERROR_MESSAGE;
17
+ /**
18
+ * Extract slpk to i3s
19
+ * @param options
20
+ * @param options.inputUrl the url to read SLPK file
21
+ * @param options.outputPath the output filename
22
+ */
23
+ async extract(options) {
24
+ if (isBrowser) {
25
+ // eslint-disable-next-line no-console
26
+ console.log(BROWSER_ERROR_MESSAGE);
27
+ return BROWSER_ERROR_MESSAGE;
28
+ }
29
+ const { inputUrl } = options;
30
+ const provider = new FileHandleFile(inputUrl);
31
+ let localHeader = await parseZipLocalFileHeader(0n, provider);
32
+ while (localHeader) {
33
+ await this.writeFile(await this.unGzip({
34
+ name: this.correctIndexNames(localHeader.fileName),
35
+ data: await provider.slice(localHeader.fileDataOffset, localHeader.fileDataOffset + localHeader.compressedSize)
36
+ }), options.outputPath);
37
+ localHeader = await parseZipLocalFileHeader(localHeader.fileDataOffset + localHeader?.compressedSize, provider);
38
+ }
39
+ return 'success';
14
40
  }
15
- const {
16
- inputUrl
17
- } = options;
18
- const provider = new FileHandleFile(inputUrl);
19
- let localHeader = await parseZipLocalFileHeader(0n, provider);
20
- while (localHeader) {
21
- var _localHeader;
22
- await this.writeFile(await this.unGzip({
23
- name: this.correctIndexNames(localHeader.fileName),
24
- data: await provider.slice(localHeader.fileDataOffset, localHeader.fileDataOffset + localHeader.compressedSize)
25
- }), options.outputPath);
26
- localHeader = await parseZipLocalFileHeader(localHeader.fileDataOffset + ((_localHeader = localHeader) === null || _localHeader === void 0 ? void 0 : _localHeader.compressedSize), provider);
41
+ /**
42
+ * Defines file name and path for i3s format
43
+ * @param fileName initial file name and path
44
+ */
45
+ correctIndexNames(fileName) {
46
+ if (indexNames.includes(path.filename(path.join('/', fileName)))) {
47
+ return path.join(path.dirname(fileName), 'index.json.gz');
48
+ }
49
+ // finds path with name part and extention part
50
+ const parts = /^(.*\/[^\/\.]*)(\..+)$/.exec(fileName);
51
+ if (!parts) {
52
+ return null;
53
+ }
54
+ return `${parts?.at(1)}/index${parts?.at(2)}`;
27
55
  }
28
- return 'success';
29
- }
30
- correctIndexNames(fileName) {
31
- if (indexNames.includes(path.filename(path.join('/', fileName)))) {
32
- return path.join(path.dirname(fileName), 'index.json.gz');
56
+ async unGzip(file) {
57
+ if (/\.gz$/.test(file.name ?? '')) {
58
+ const compression = new GZipCompression();
59
+ const decompressedData = await compression.decompress(file.data);
60
+ return { data: decompressedData, name: (file.name ?? '').slice(0, -3) };
61
+ }
62
+ return Promise.resolve(file);
33
63
  }
34
- let parts = /^(.*\/[^\/\.]*)(\..+)$/.exec(fileName);
35
- if (!parts) {
36
- return null;
64
+ async writeFile(options, outputPath) {
65
+ if (!options.name) {
66
+ return;
67
+ }
68
+ const finalPath = path.join(outputPath, options.name);
69
+ const dirName = path.dirname(finalPath);
70
+ const fileName = path.filename(finalPath);
71
+ await writeFile(dirName, options.data, fileName);
37
72
  }
38
- return `${parts === null || parts === void 0 ? void 0 : parts.at(1)}/index${parts === null || parts === void 0 ? void 0 : parts.at(2)}`;
39
- }
40
- async unGzip(file) {
41
- var _file$name;
42
- if (/\.gz$/.test((_file$name = file.name) !== null && _file$name !== void 0 ? _file$name : '')) {
43
- var _file$name2;
44
- const compression = new GZipCompression();
45
- const decompressedData = await compression.decompress(file.data);
46
- return {
47
- data: decompressedData,
48
- name: ((_file$name2 = file.name) !== null && _file$name2 !== void 0 ? _file$name2 : '').slice(0, -3)
49
- };
50
- }
51
- return Promise.resolve(file);
52
- }
53
- async writeFile(options, outputPath) {
54
- if (!options.name) {
55
- return;
56
- }
57
- const finalPath = path.join(outputPath, options.name);
58
- const dirName = path.dirname(finalPath);
59
- const fileName = path.filename(finalPath);
60
- await writeFile(dirName, options.data, fileName);
61
- }
62
73
  }
63
- //# sourceMappingURL=slpk-extractor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slpk-extractor-cli.d.ts","sourceRoot":"","sources":["../src/slpk-extractor-cli.ts"],"names":[],"mappings":"AACA,OAAO,uBAAuB,CAAC;AAI/B,KAAK,qBAAqB,GAAG;IAC3B,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;gCAC4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAGF,MAAM,MAAM,8BAA8B,GAAG,qBAAqB,GAAG;IACnE,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB;gCAC4B;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
1
+ {"version":3,"file":"slpk-extractor-cli.d.ts","sourceRoot":"","sources":["../src/slpk-extractor-cli.ts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,CAAC;AAI/B,KAAK,qBAAqB,GAAG;IAC3B,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;gCAC4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAGF,MAAM,MAAM,8BAA8B,GAAG,qBAAqB,GAAG;IACnE,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB;gCAC4B;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -1,74 +1,105 @@
1
1
  import '@loaders.gl/polyfills';
2
2
  import SLPKExtractor from "./slpk-extractor/slpk-extractor.js";
3
3
  import { getURLValue, validateOptionsWithEqual } from "./lib/utils/cli-utils.js";
4
+ /**
5
+ * CLI entry
6
+ * @returns
7
+ */
4
8
  async function main() {
5
- const [,, ...args] = process.argv;
6
- if (args.length === 0) {
7
- printHelp();
8
- }
9
- const validatedOptionsArr = validateOptionsWithEqual(args);
10
- const options = parseOptions(validatedOptionsArr);
11
- const validatedOptions = validateOptions(options);
12
- await convert(validatedOptions);
9
+ const [, , ...args] = process.argv;
10
+ if (args.length === 0) {
11
+ printHelp();
12
+ }
13
+ const validatedOptionsArr = validateOptionsWithEqual(args);
14
+ const options = parseOptions(validatedOptionsArr);
15
+ const validatedOptions = validateOptions(options);
16
+ await convert(validatedOptions);
13
17
  }
14
- main().catch(error => {
15
- console.log(error);
16
- process.exit(1);
18
+ main().catch((error) => {
19
+ console.log(error); // eslint-disable-line no-console
20
+ process.exit(1); // eslint-disable-line no-process-exit
17
21
  });
22
+ /**
23
+ * Output for `npx slpk-extractor --help`
24
+ */
18
25
  function printHelp() {
19
- console.log('cli: converter slpk to I3S...');
20
- console.log('--output [Output folder, default: "data" folder]');
21
- console.log('--tileset [SLPK file]');
22
- process.exit(0);
26
+ // eslint-disable-next-line no-console
27
+ console.log('cli: converter slpk to I3S...');
28
+ // eslint-disable-next-line no-console
29
+ console.log('--output [Output folder, default: "data" folder]');
30
+ // eslint-disable-next-line no-console
31
+ console.log('--tileset [SLPK file]');
32
+ process.exit(0); // eslint-disable-line no-process-exit
23
33
  }
34
+ /**
35
+ * Run extraction process
36
+ * @param options validated slpk-extractor options
37
+ */
24
38
  async function convert(options) {
25
- console.log(`------------------------------------------------`);
26
- console.log(`Starting conversion of SLPK`);
27
- console.log(`------------------------------------------------`);
28
- const slpkExtractor = new SLPKExtractor();
29
- slpkExtractor.extract({
30
- inputUrl: options.tileset,
31
- outputPath: options.output
32
- });
39
+ // eslint-disable-next-line no-console
40
+ console.log('------------------------------------------------');
41
+ // eslint-disable-next-line no-console
42
+ console.log('Starting conversion of SLPK');
43
+ // eslint-disable-next-line no-console
44
+ console.log('------------------------------------------------');
45
+ const slpkExtractor = new SLPKExtractor();
46
+ slpkExtractor.extract({
47
+ inputUrl: options.tileset,
48
+ outputPath: options.output
49
+ });
33
50
  }
51
+ // OPTIONS
52
+ /**
53
+ * Validate input options of the CLI command
54
+ * @param options - input options of the CLI command
55
+ * @returns validated options
56
+ */
34
57
  function validateOptions(options) {
35
- const mandatoryOptionsWithExceptions = {
36
- output: () => console.log('Missed: --output [Output path name]'),
37
- tileset: () => console.log('Missed: --tileset [SLPK file]')
38
- };
39
- const exceptions = [];
40
- for (const mandatoryOption in mandatoryOptionsWithExceptions) {
41
- const optionValue = options[mandatoryOption];
42
- if (!optionValue) {
43
- exceptions.push(mandatoryOptionsWithExceptions[mandatoryOption]);
58
+ const mandatoryOptionsWithExceptions = {
59
+ // eslint-disable-next-line no-console
60
+ output: () => console.log('Missed: --output [Output path name]'),
61
+ // eslint-disable-next-line no-console
62
+ tileset: () => console.log('Missed: --tileset [SLPK file]')
63
+ };
64
+ const exceptions = [];
65
+ for (const mandatoryOption in mandatoryOptionsWithExceptions) {
66
+ const optionValue = options[mandatoryOption];
67
+ if (!optionValue) {
68
+ exceptions.push(mandatoryOptionsWithExceptions[mandatoryOption]);
69
+ }
70
+ }
71
+ if (exceptions.length) {
72
+ exceptions.forEach((exeption) => exeption());
73
+ process.exit(1); // eslint-disable-line no-process-exit
44
74
  }
45
- }
46
- if (exceptions.length) {
47
- exceptions.forEach(exeption => exeption());
48
- process.exit(1);
49
- }
50
- return options;
75
+ return options;
51
76
  }
77
+ /**
78
+ * Parse option from the cli arguments array
79
+ * @param args
80
+ * @returns
81
+ */
52
82
  function parseOptions(args) {
53
- const opts = {};
54
- args.forEach((arg, index) => {
55
- if (arg.indexOf('--') === 0) {
56
- switch (arg) {
57
- case '--tileset':
58
- opts.tileset = getURLValue(index, args);
59
- break;
60
- case '--output':
61
- opts.output = getURLValue(index, args);
62
- break;
63
- case '--help':
64
- printHelp();
65
- break;
66
- default:
67
- console.warn(`Unknown option ${arg}`);
68
- process.exit(0);
69
- }
70
- }
71
- });
72
- return opts;
83
+ const opts = {};
84
+ // eslint-disable-next-line complexity
85
+ args.forEach((arg, index) => {
86
+ if (arg.indexOf('--') === 0) {
87
+ switch (arg) {
88
+ case '--tileset':
89
+ opts.tileset = getURLValue(index, args);
90
+ break;
91
+ case '--output':
92
+ opts.output = getURLValue(index, args);
93
+ break;
94
+ case '--help':
95
+ printHelp();
96
+ break;
97
+ default:
98
+ // eslint-disable-next-line no-console
99
+ console.warn(`Unknown option ${arg}`);
100
+ process.exit(0); // eslint-disable-line
101
+ }
102
+ }
103
+ });
104
+ return opts;
73
105
  }
74
- //# sourceMappingURL=slpk-extractor-cli.js.map