@fdm-monster/server 2.0.6 → 2.0.8

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 (73) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/RELEASE_NOTES.MD +31 -0
  3. package/dist/consoles/bambu-mqtt-diagnostic.console.js +565 -0
  4. package/dist/consoles/bambu-mqtt-diagnostic.console.js.map +1 -0
  5. package/dist/consoles/mock-bambu.server.js +114 -88
  6. package/dist/consoles/mock-bambu.server.js.map +1 -1
  7. package/dist/controllers/file-storage.controller.js +34 -14
  8. package/dist/controllers/file-storage.controller.js.map +1 -1
  9. package/dist/controllers/print-job.controller.js +33 -236
  10. package/dist/controllers/print-job.controller.js.map +1 -1
  11. package/dist/controllers/print-queue.controller.js +82 -17
  12. package/dist/controllers/print-queue.controller.js.map +1 -1
  13. package/dist/controllers/printer-files.controller.js +8 -2
  14. package/dist/controllers/printer-files.controller.js.map +1 -1
  15. package/dist/controllers/printer.controller.js +3 -3
  16. package/dist/controllers/printer.controller.js.map +1 -1
  17. package/dist/entities/print-job.entity.js.map +1 -1
  18. package/dist/server.constants.js +1 -1
  19. package/dist/services/bambu/bambu-ftp.adapter.js +13 -21
  20. package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
  21. package/dist/services/bambu/bambu-mqtt.adapter.js +86 -32
  22. package/dist/services/bambu/bambu-mqtt.adapter.js.map +1 -1
  23. package/dist/services/bambu/bambu.client.js.map +1 -1
  24. package/dist/services/bambu.api.js +12 -24
  25. package/dist/services/bambu.api.js.map +1 -1
  26. package/dist/services/file-storage.service.js +11 -2
  27. package/dist/services/file-storage.service.js.map +1 -1
  28. package/dist/services/moonraker/moonraker.client.js +5 -17
  29. package/dist/services/moonraker/moonraker.client.js.map +1 -1
  30. package/dist/services/moonraker.api.js +3 -2
  31. package/dist/services/moonraker.api.js.map +1 -1
  32. package/dist/services/octoprint/octoprint.client.js +5 -17
  33. package/dist/services/octoprint/octoprint.client.js.map +1 -1
  34. package/dist/services/octoprint.api.js +3 -2
  35. package/dist/services/octoprint.api.js.map +1 -1
  36. package/dist/services/orm/print-job.service.js +55 -47
  37. package/dist/services/orm/print-job.service.js.map +1 -1
  38. package/dist/services/print-queue.service.js +90 -30
  39. package/dist/services/print-queue.service.js.map +1 -1
  40. package/dist/services/printer-api.interface.js +13 -0
  41. package/dist/services/printer-api.interface.js.map +1 -1
  42. package/dist/services/prusa-link/prusa-link.api.js +12 -22
  43. package/dist/services/prusa-link/prusa-link.api.js.map +1 -1
  44. package/dist/tasks/print-job-analysis.task.js.map +1 -1
  45. package/dist/utils/bgcode/bgcode-thumbnail.parser.js +50 -0
  46. package/dist/utils/bgcode/bgcode-thumbnail.parser.js.map +1 -0
  47. package/dist/utils/bgcode/bgcode.constants.js +57 -0
  48. package/dist/utils/bgcode/bgcode.constants.js.map +1 -0
  49. package/dist/utils/bgcode/bgcode.types.js +132 -0
  50. package/dist/utils/bgcode/bgcode.types.js.map +1 -0
  51. package/dist/utils/bgcode/bgcode.utils.js +288 -0
  52. package/dist/utils/bgcode/bgcode.utils.js.map +1 -0
  53. package/dist/utils/bgcode/heatshrink-decoder.js +172 -0
  54. package/dist/utils/bgcode/heatshrink-decoder.js.map +1 -0
  55. package/dist/utils/bgcode/png-encoder.js +76 -0
  56. package/dist/utils/bgcode/png-encoder.js.map +1 -0
  57. package/dist/utils/bgcode/qoi-decoder.js +141 -0
  58. package/dist/utils/bgcode/qoi-decoder.js.map +1 -0
  59. package/dist/utils/image-dimensions.js +62 -0
  60. package/dist/utils/image-dimensions.js.map +1 -0
  61. package/dist/utils/job-stats.util.js +79 -0
  62. package/dist/utils/job-stats.util.js.map +1 -0
  63. package/dist/utils/parsers/3mf.parser.js +39 -9
  64. package/dist/utils/parsers/3mf.parser.js.map +1 -1
  65. package/dist/utils/parsers/bgcode.parser.js +125 -144
  66. package/dist/utils/parsers/bgcode.parser.js.map +1 -1
  67. package/dist/utils/parsers/gcode.parser.js +13 -2
  68. package/dist/utils/parsers/gcode.parser.js.map +1 -1
  69. package/dist/utils/parsers/parser.types.js +6 -0
  70. package/dist/utils/parsers/parser.types.js.map +1 -0
  71. package/dist/utils/thumbnail.util.js +24 -0
  72. package/dist/utils/thumbnail.util.js.map +1 -0
  73. package/package.json +13 -10
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tasks/print-job-analysis.task.ts"],"names":["PrintJobAnalysisTask","logger","printJobRepository","loggerFactory","printJobService","fileAnalysisService","fileStorageService","typeormService","name","getDataSource","getRepository","PrintJob","run","pendingJobs","find","where","analysisState","status","take","length","log","job","analyzeJob","error","id","fileName","statusReason","Error","message","save","fileStorageId","cachedMetadata","loadMetadata","metadata","thumbnails","filePath","resolveFilePath","exists","needsAnalysis","analysisResult","analyzeFile","thumbnailMetadata","saveThumbnails","fileHash","undefined","saveMetadata","handleFileAnalyzed","fileExists","warn","getFilePath","debug"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/tasks/print-job-analysis.task.ts"],"names":["PrintJobAnalysisTask","logger","printJobRepository","loggerFactory","printJobService","fileAnalysisService","fileStorageService","typeormService","name","getDataSource","getRepository","PrintJob","run","pendingJobs","find","where","analysisState","status","take","length","log","job","analyzeJob","error","id","fileName","statusReason","Error","message","save","fileStorageId","cachedMetadata","loadMetadata","metadata","thumbnails","filePath","resolveFilePath","exists","needsAnalysis","analysisResult","analyzeFile","thumbnailMetadata","saveThumbnails","fileHash","undefined","saveMetadata","handleFileAnalyzed","fileExists","warn","getFilePath","debug"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get convertQoiToPng () {
13
+ return convertQoiToPng;
14
+ },
15
+ get processThumbnail () {
16
+ return processThumbnail;
17
+ }
18
+ });
19
+ const _bgcodetypes = require("./bgcode.types");
20
+ const _qoidecoder = require("./qoi-decoder");
21
+ const _pngencoder = require("./png-encoder");
22
+ function convertQoiToPng(qoiBuffer) {
23
+ const decoded = (0, _qoidecoder.decodeQOI)(qoiBuffer);
24
+ return (0, _pngencoder.encodePNG)(decoded.width, decoded.height, decoded.data);
25
+ }
26
+ function processThumbnail(data, parameters) {
27
+ switch(parameters.format){
28
+ case _bgcodetypes.BgCodeThumbnailFormats.PNG:
29
+ return {
30
+ extension: _bgcodetypes.BgCodeThumbnailFormatExtension[_bgcodetypes.BgCodeThumbnailFormats.PNG],
31
+ data: data
32
+ };
33
+ case _bgcodetypes.BgCodeThumbnailFormats.JPG:
34
+ return {
35
+ extension: _bgcodetypes.BgCodeThumbnailFormatExtension[_bgcodetypes.BgCodeThumbnailFormats.JPG],
36
+ data: data
37
+ };
38
+ case _bgcodetypes.BgCodeThumbnailFormats.QOI:
39
+ const pngData = convertQoiToPng(data);
40
+ return {
41
+ extension: _bgcodetypes.BgCodeThumbnailFormatExtension[_bgcodetypes.BgCodeThumbnailFormats.PNG],
42
+ data: pngData,
43
+ converted: true
44
+ };
45
+ default:
46
+ throw new Error(`Unsupported thumbnail format: ${parameters.format}`);
47
+ }
48
+ }
49
+
50
+ //# sourceMappingURL=bgcode-thumbnail.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/bgcode/bgcode-thumbnail.parser.ts"],"names":["convertQoiToPng","processThumbnail","qoiBuffer","decoded","decodeQOI","encodePNG","width","height","data","parameters","format","BgCodeThumbnailFormats","PNG","extension","BgCodeThumbnailFormatExtension","JPG","QOI","pngData","converted","Error"],"mappings":";;;;;;;;;;;QAcgBA;eAAAA;;QAKAC;eAAAA;;;6BAfT;4BACmB;4BACA;AAQnB,SAASD,gBAAgBE,SAAiB;IAC/C,MAAMC,UAAUC,IAAAA,qBAAS,EAACF;IAC1B,OAAOG,IAAAA,qBAAS,EAACF,QAAQG,KAAK,EAAEH,QAAQI,MAAM,EAAEJ,QAAQK,IAAI;AAC9D;AAEO,SAASP,iBAAiBO,IAAY,EAAEC,UAAqC;IAClF,OAAQA,WAAWC,MAAM;QACvB,KAAKC,mCAAsB,CAACC,GAAG;YAC7B,OAAO;gBACLC,WAAWC,2CAA8B,CAACH,mCAAsB,CAACC,GAAG,CAAC;gBACrEJ,MAAMA;YACR;QAEF,KAAKG,mCAAsB,CAACI,GAAG;YAC7B,OAAO;gBACLF,WAAWC,2CAA8B,CAACH,mCAAsB,CAACI,GAAG,CAAC;gBACrEP,MAAMA;YACR;QAEF,KAAKG,mCAAsB,CAACK,GAAG;YAC7B,MAAMC,UAAUjB,gBAAgBQ;YAChC,OAAO;gBACLK,WAAWC,2CAA8B,CAACH,mCAAsB,CAACC,GAAG,CAAC;gBACrEJ,MAAMS;gBACNC,WAAW;YACb;QAEF;YACE,MAAM,IAAIC,MAAM,CAAC,8BAA8B,EAAEV,WAAWC,MAAM,EAAE;IACxE;AACF"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get BGCODE_EXPECTED_HEADERS () {
13
+ return BGCODE_EXPECTED_HEADERS;
14
+ },
15
+ get BGCODE_HEADER_MARKER () {
16
+ return BGCODE_HEADER_MARKER;
17
+ },
18
+ get BGCODE_HEADER_SIZE () {
19
+ return BGCODE_HEADER_SIZE;
20
+ },
21
+ get BGCODE_MAX_BLOCK_HEADER_SIZE () {
22
+ return BGCODE_MAX_BLOCK_HEADER_SIZE;
23
+ },
24
+ get BGCODE_MAX_BLOCK_TYPE () {
25
+ return BGCODE_MAX_BLOCK_TYPE;
26
+ },
27
+ get BGCODE_MAX_CHECKSUM_TYPE () {
28
+ return BGCODE_MAX_CHECKSUM_TYPE;
29
+ },
30
+ get BGCODE_MAX_COMPRESSION () {
31
+ return BGCODE_MAX_COMPRESSION;
32
+ },
33
+ get BGCODE_MIN_BLOCK_HEADER_SIZE () {
34
+ return BGCODE_MIN_BLOCK_HEADER_SIZE;
35
+ },
36
+ get BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT () {
37
+ return BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT;
38
+ }
39
+ });
40
+ const BGCODE_HEADER_SIZE = 10;
41
+ const BGCODE_MIN_BLOCK_HEADER_SIZE = 8;
42
+ const BGCODE_MAX_BLOCK_HEADER_SIZE = 12;
43
+ const BGCODE_HEADER_MARKER = "GCDE";
44
+ const BGCODE_MAX_BLOCK_TYPE = 5;
45
+ const BGCODE_MAX_COMPRESSION = 3;
46
+ const BGCODE_EXPECTED_HEADERS = [
47
+ 0,
48
+ 3,
49
+ 5,
50
+ 4,
51
+ 2,
52
+ 1
53
+ ];
54
+ const BGCODE_MAX_CHECKSUM_TYPE = 1;
55
+ const BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT = 2;
56
+
57
+ //# sourceMappingURL=bgcode.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/bgcode/bgcode.constants.ts"],"names":["BGCODE_EXPECTED_HEADERS","BGCODE_HEADER_MARKER","BGCODE_HEADER_SIZE","BGCODE_MAX_BLOCK_HEADER_SIZE","BGCODE_MAX_BLOCK_TYPE","BGCODE_MAX_CHECKSUM_TYPE","BGCODE_MAX_COMPRESSION","BGCODE_MIN_BLOCK_HEADER_SIZE","BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT"],"mappings":";;;;;;;;;;;QA4BaA;eAAAA;;QAvBAC;eAAAA;;QALAC;eAAAA;;QAIAC;eAAAA;;QASAC;eAAAA;;QAiBAC;eAAAA;;QAXAC;eAAAA;;QAhBAC;eAAAA;;QA6BAC;eAAAA;;;AAhCN,MAAMN,qBAAqB;AAG3B,MAAMK,+BAA+B;AACrC,MAAMJ,+BAA+B;AACrC,MAAMF,uBAAuB;AAQ7B,MAAMG,wBAAwB;AAM9B,MAAME,yBAAyB;AAS/B,MAAMN,0BAA0B;IAAC;IAAG;IAAG;IAAG;IAAG;IAAG;CAAE;AAElD,MAAMK,2BAA2B;AAEjC,MAAMG,wCAAwC"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get BgCodeBlockParameterSizes () {
13
+ return BgCodeBlockParameterSizes;
14
+ },
15
+ get BgCodeBlockTypeName () {
16
+ return BgCodeBlockTypeName;
17
+ },
18
+ get BgCodeBlockTypes () {
19
+ return BgCodeBlockTypes;
20
+ },
21
+ get BgCodeChecksumTypeSize () {
22
+ return BgCodeChecksumTypeSize;
23
+ },
24
+ get BgCodeChecksumTypes () {
25
+ return BgCodeChecksumTypes;
26
+ },
27
+ get BgCodeCompression () {
28
+ return BgCodeCompression;
29
+ },
30
+ get BgCodeCompressionInfo () {
31
+ return BgCodeCompressionInfo;
32
+ },
33
+ get BgCodeCompressionName () {
34
+ return BgCodeCompressionName;
35
+ },
36
+ get BgCodeThumbnailFormatExtension () {
37
+ return BgCodeThumbnailFormatExtension;
38
+ },
39
+ get BgCodeThumbnailFormatName () {
40
+ return BgCodeThumbnailFormatName;
41
+ },
42
+ get BgCodeThumbnailFormats () {
43
+ return BgCodeThumbnailFormats;
44
+ },
45
+ get GcodeEncodingTypes () {
46
+ return GcodeEncodingTypes;
47
+ }
48
+ });
49
+ const BgCodeBlockTypes = {
50
+ FileMetadata: 0,
51
+ PrinterMetadata: 3,
52
+ Thumbnail: 5,
53
+ PrintMetadata: 4,
54
+ SlicerMetadata: 2,
55
+ GCode: 1
56
+ };
57
+ const BgCodeBlockTypeName = {
58
+ [BgCodeBlockTypes.FileMetadata]: "FileMetadata",
59
+ [BgCodeBlockTypes.GCode]: "GCode",
60
+ [BgCodeBlockTypes.SlicerMetadata]: "SlicerMetadata",
61
+ [BgCodeBlockTypes.PrinterMetadata]: "PrinterMetadata",
62
+ [BgCodeBlockTypes.PrintMetadata]: "PrintMetadata",
63
+ [BgCodeBlockTypes.Thumbnail]: "Thumbnail"
64
+ };
65
+ const BgCodeBlockParameterSizes = {
66
+ [BgCodeBlockTypes.FileMetadata]: 2,
67
+ [BgCodeBlockTypes.GCode]: 2,
68
+ [BgCodeBlockTypes.SlicerMetadata]: 2,
69
+ [BgCodeBlockTypes.PrinterMetadata]: 2,
70
+ [BgCodeBlockTypes.PrintMetadata]: 2,
71
+ [BgCodeBlockTypes.Thumbnail]: 6
72
+ };
73
+ const BgCodeCompression = {
74
+ None: 0,
75
+ Deflate: 1,
76
+ Heatshrink_11_4: 2,
77
+ Heatshrink_12_4: 3
78
+ };
79
+ const BgCodeCompressionInfo = {
80
+ 0: {
81
+ kind: "none"
82
+ },
83
+ 1: {
84
+ kind: "deflate"
85
+ },
86
+ 2: {
87
+ kind: "heatshrink",
88
+ window: 11,
89
+ lookahead: 4
90
+ },
91
+ 3: {
92
+ kind: "heatshrink",
93
+ window: 12,
94
+ lookahead: 4
95
+ }
96
+ };
97
+ const BgCodeCompressionName = {
98
+ 0: "None",
99
+ 1: "Deflate",
100
+ 2: "Heatshrink(11,4)",
101
+ 3: "Heatshrink(12,4)"
102
+ };
103
+ const BgCodeChecksumTypes = {
104
+ None: 0,
105
+ Crc32: 1
106
+ };
107
+ const BgCodeChecksumTypeSize = {
108
+ [BgCodeChecksumTypes.None]: 0,
109
+ [BgCodeChecksumTypes.Crc32]: 4
110
+ };
111
+ const BgCodeThumbnailFormats = {
112
+ PNG: 0,
113
+ JPG: 1,
114
+ QOI: 2
115
+ };
116
+ const BgCodeThumbnailFormatName = {
117
+ [BgCodeThumbnailFormats.PNG]: "PNG",
118
+ [BgCodeThumbnailFormats.JPG]: "JPG",
119
+ [BgCodeThumbnailFormats.QOI]: "QOI"
120
+ };
121
+ const BgCodeThumbnailFormatExtension = {
122
+ [BgCodeThumbnailFormats.PNG]: "png",
123
+ [BgCodeThumbnailFormats.JPG]: "jpg",
124
+ [BgCodeThumbnailFormats.QOI]: "qoi"
125
+ };
126
+ const GcodeEncodingTypes = {
127
+ None: 0,
128
+ MeatPack: 1,
129
+ MeatPackKeepingComments: 2
130
+ };
131
+
132
+ //# sourceMappingURL=bgcode.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/bgcode/bgcode.types.ts"],"names":["BgCodeBlockParameterSizes","BgCodeBlockTypeName","BgCodeBlockTypes","BgCodeChecksumTypeSize","BgCodeChecksumTypes","BgCodeCompression","BgCodeCompressionInfo","BgCodeCompressionName","BgCodeThumbnailFormatExtension","BgCodeThumbnailFormatName","BgCodeThumbnailFormats","GcodeEncodingTypes","FileMetadata","PrinterMetadata","Thumbnail","PrintMetadata","SlicerMetadata","GCode","None","Deflate","Heatshrink_11_4","Heatshrink_12_4","kind","window","lookahead","Crc32","PNG","JPG","QOI","MeatPack","MeatPackKeepingComments"],"mappings":";;;;;;;;;;;QAsCaA;eAAAA;;QATAC;eAAAA;;QAXAC;eAAAA;;QAmEAC;eAAAA;;QAPAC;eAAAA;;QA7BAC;eAAAA;;QAUAC;eAAAA;;QAYAC;eAAAA;;QAiCAC;eAAAA;;QANAC;eAAAA;;QARAC;eAAAA;;QAkCAC;eAAAA;;;AA1GN,MAAMT,mBAAmB;IAC9BU,cAAc;IACdC,iBAAiB;IACjBC,WAAW;IACXC,eAAe;IACfC,gBAAgB;IAChBC,OAAO;AACT;AAIO,MAAMhB,sBAAuD;IAClE,CAACC,iBAAiBU,YAAY,CAAC,EAAE;IACjC,CAACV,iBAAiBe,KAAK,CAAC,EAAE;IAC1B,CAACf,iBAAiBc,cAAc,CAAC,EAAE;IACnC,CAACd,iBAAiBW,eAAe,CAAC,EAAE;IACpC,CAACX,iBAAiBa,aAAa,CAAC,EAAE;IAClC,CAACb,iBAAiBY,SAAS,CAAC,EAAE;AAChC;AAEO,MAAMd,4BAA4B;IACvC,CAACE,iBAAiBU,YAAY,CAAC,EAAE;IACjC,CAACV,iBAAiBe,KAAK,CAAC,EAAE;IAC1B,CAACf,iBAAiBc,cAAc,CAAC,EAAE;IACnC,CAACd,iBAAiBW,eAAe,CAAC,EAAE;IACpC,CAACX,iBAAiBa,aAAa,CAAC,EAAE;IAClC,CAACb,iBAAiBY,SAAS,CAAC,EAAE;AAChC;AAIO,MAAMT,oBAAoB;IAC/Ba,MAAM;IACNC,SAAS;IACTC,iBAAiB;IACjBC,iBAAiB;AACnB;AAKO,MAAMf,wBAKT;IACF,GAAG;QAAEgB,MAAM;IAAO;IAClB,GAAG;QAAEA,MAAM;IAAU;IACrB,GAAG;QAAEA,MAAM;QAAcC,QAAQ;QAAIC,WAAW;IAAE;IAClD,GAAG;QAAEF,MAAM;QAAcC,QAAQ;QAAIC,WAAW;IAAE;AACpD;AAEO,MAAMjB,wBAA2D;IACtE,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;AACL;AAEO,MAAMH,sBAAsB;IACjCc,MAAM;IACNO,OAAO;AACT;AAIO,MAAMtB,yBAA6D;IACxE,CAACC,oBAAoBc,IAAI,CAAC,EAAE;IAC5B,CAACd,oBAAoBqB,KAAK,CAAC,EAAE;AAC/B;AAEO,MAAMf,yBAAyB;IACpCgB,KAAK;IACLC,KAAK;IACLC,KAAK;AACP;AAIO,MAAMnB,4BAAmE;IAC9E,CAACC,uBAAuBgB,GAAG,CAAC,EAAE;IAC9B,CAAChB,uBAAuBiB,GAAG,CAAC,EAAE;IAC9B,CAACjB,uBAAuBkB,GAAG,CAAC,EAAE;AAChC;AAEO,MAAMpB,iCAAwE;IACnF,CAACE,uBAAuBgB,GAAG,CAAC,EAAE;IAC9B,CAAChB,uBAAuBiB,GAAG,CAAC,EAAE;IAC9B,CAACjB,uBAAuBkB,GAAG,CAAC,EAAE;AAChC;AAgBO,MAAMjB,qBAAqB;IAChCO,MAAM;IACNW,UAAU;IACVC,yBAAyB;AAC3B"}
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get decompressBlock () {
13
+ return decompressBlock;
14
+ },
15
+ get extractMetadataFromBlocks () {
16
+ return extractMetadataFromBlocks;
17
+ },
18
+ get getBlockData () {
19
+ return getBlockData;
20
+ },
21
+ get getBlockParsedParameters () {
22
+ return getBlockParsedParameters;
23
+ },
24
+ get parseBlockHeader () {
25
+ return parseBlockHeader;
26
+ },
27
+ get parseBlockHeaders () {
28
+ return parseBlockHeaders;
29
+ },
30
+ get parseBlockParameters () {
31
+ return parseBlockParameters;
32
+ },
33
+ get parseFileHeader () {
34
+ return parseFileHeader;
35
+ }
36
+ });
37
+ const _bgcodeconstants = require("./bgcode.constants");
38
+ const _bgcodetypes = require("./bgcode.types");
39
+ const _nodezlib = require("node:zlib");
40
+ const _heatshrinkdecoder = require("./heatshrink-decoder");
41
+ async function parseFileHeader(fileHandle) {
42
+ const buffer = Buffer.alloc(_bgcodeconstants.BGCODE_HEADER_SIZE);
43
+ await fileHandle.read(buffer);
44
+ if (buffer.length < _bgcodeconstants.BGCODE_HEADER_SIZE) {
45
+ throw new Error("File too small to be a valid BGCode file");
46
+ }
47
+ const magic = buffer.toString("ascii", 0, 4);
48
+ if (magic !== _bgcodeconstants.BGCODE_HEADER_MARKER) {
49
+ throw new Error(`Invalid BGCode file: magic number not found (got "${magic}", expected ${_bgcodeconstants.BGCODE_HEADER_MARKER})`);
50
+ }
51
+ const version = buffer.readUInt32LE(4);
52
+ const checksumType = buffer.readUInt16LE(8);
53
+ return {
54
+ magic,
55
+ version,
56
+ checksumType
57
+ };
58
+ }
59
+ async function parseBlockHeaders(fileHandle, fileSize, checksumType, skipGcode) {
60
+ let offset = _bgcodeconstants.BGCODE_HEADER_SIZE;
61
+ const blockHeaders = [];
62
+ let currentExpectedHeaderIndex = 0;
63
+ while(offset < fileSize){
64
+ const blockHeader = await parseBlockHeader(fileHandle, fileSize, offset, checksumType);
65
+ if (skipGcode && blockHeader.type == _bgcodetypes.BgCodeBlockTypes.GCode) {
66
+ break;
67
+ }
68
+ const expectedType = _bgcodeconstants.BGCODE_EXPECTED_HEADERS[currentExpectedHeaderIndex];
69
+ if (blockHeader.type !== expectedType) {
70
+ const nextExpectedType = _bgcodeconstants.BGCODE_EXPECTED_HEADERS[currentExpectedHeaderIndex + 1];
71
+ if (blockHeader.type !== nextExpectedType) {
72
+ throw new Error(`Unexpected header header type ${blockHeader.type}, expected either ${expectedType} or next ${nextExpectedType}`);
73
+ }
74
+ currentExpectedHeaderIndex++;
75
+ }
76
+ if (Number.isNaN(blockHeader.blockSize)) {
77
+ throw new Error(`Unexpected blockHeader.blockSize ${blockHeader.blockSize}`);
78
+ }
79
+ offset += blockHeader.blockSize;
80
+ blockHeaders.push(blockHeader);
81
+ }
82
+ return blockHeaders;
83
+ }
84
+ async function parseBlockHeader(fileHandle, fileSize, blockStartOffset, checksumType) {
85
+ if (blockStartOffset + _bgcodeconstants.BGCODE_MAX_BLOCK_HEADER_SIZE > fileSize) {
86
+ throw new Error("Not enough data for block header");
87
+ }
88
+ const buffer = Buffer.alloc(_bgcodeconstants.BGCODE_MAX_BLOCK_HEADER_SIZE);
89
+ await fileHandle.read({
90
+ buffer,
91
+ offset: 0,
92
+ length: _bgcodeconstants.BGCODE_MAX_BLOCK_HEADER_SIZE,
93
+ position: blockStartOffset
94
+ });
95
+ const type = buffer.readUInt16LE(0);
96
+ if (type > _bgcodeconstants.BGCODE_MAX_BLOCK_TYPE) {
97
+ throw new Error(`Block header type ${type} exceeds ${_bgcodeconstants.BGCODE_MAX_BLOCK_TYPE}, cant parse block`);
98
+ }
99
+ const compression = buffer.readUInt16LE(2);
100
+ if (compression > _bgcodeconstants.BGCODE_MAX_COMPRESSION) {
101
+ throw new Error(`Block header compression ${compression} exceeds ${_bgcodeconstants.BGCODE_MAX_COMPRESSION}, cant parse block`);
102
+ }
103
+ const uncompressedSize = buffer.readUInt32LE(4);
104
+ if (uncompressedSize === 0) {
105
+ throw new Error(`Uncompressed Size is 0`);
106
+ }
107
+ let compressedSize = 0;
108
+ let headerSize = _bgcodeconstants.BGCODE_MIN_BLOCK_HEADER_SIZE;
109
+ if (compression > 0) {
110
+ compressedSize = buffer.readUInt32LE(8);
111
+ if (compressedSize === 0) {
112
+ throw new Error(`Compression is ${_bgcodetypes.BgCodeCompressionName[compression]} but compressed size is ${compressedSize}}`);
113
+ }
114
+ headerSize = _bgcodeconstants.BGCODE_MAX_BLOCK_HEADER_SIZE;
115
+ }
116
+ const checksumSize = calculateChecksumSize(checksumType);
117
+ const blockSize = calculateBlockSize(checksumSize, type, compression, uncompressedSize, compressedSize);
118
+ const parameterOffset = blockStartOffset + headerSize;
119
+ const parametersSize = calculateParameterSize(type);
120
+ const parameterBuffer = await getBlockParsedParameters(fileHandle, parameterOffset, parametersSize);
121
+ const parameters = parseBlockParameters(type, parameterBuffer);
122
+ const dataOffset = parameterOffset + parametersSize;
123
+ const dataSize = blockSize - parametersSize - checksumSize;
124
+ const checksumOffset = dataOffset + dataSize;
125
+ return {
126
+ type,
127
+ compression,
128
+ uncompressedSize,
129
+ compressedSize,
130
+ blockSize,
131
+ blockStartOffset,
132
+ headerSize,
133
+ parameterOffset,
134
+ parameters,
135
+ parametersSize,
136
+ dataOffset,
137
+ dataSize,
138
+ checksumOffset,
139
+ checksumSize,
140
+ checksumType
141
+ };
142
+ }
143
+ async function getBlockParsedParameters(fileHandle, parameterOffset, parametersSize) {
144
+ const parameters = Buffer.alloc(parametersSize);
145
+ if (parametersSize > 0) {
146
+ await fileHandle.read({
147
+ buffer: parameters,
148
+ offset: 0,
149
+ length: parametersSize,
150
+ position: parameterOffset
151
+ });
152
+ }
153
+ return parameters;
154
+ }
155
+ async function getBlockData(fileHandle, blockHeader) {
156
+ if (blockHeader.blockSize === 0) {
157
+ throw new Error("Cant get block data for block with size 0");
158
+ }
159
+ if (blockHeader.blockSize === 1E3) {
160
+ throw new Error(`Cant get block data for block with size ${blockHeader.blockSize} > ${1E3}`);
161
+ }
162
+ const data = Buffer.alloc(blockHeader.dataSize);
163
+ await fileHandle.read({
164
+ buffer: data,
165
+ offset: 0,
166
+ length: blockHeader.dataSize,
167
+ position: blockHeader.dataOffset
168
+ });
169
+ return data;
170
+ }
171
+ function decompressBlock(compression, data) {
172
+ const info = _bgcodetypes.BgCodeCompressionInfo[compression];
173
+ switch(info.kind){
174
+ case "none":
175
+ return data;
176
+ case "deflate":
177
+ return (0, _nodezlib.inflateSync)(data);
178
+ case "heatshrink":
179
+ const decoder = new _heatshrinkdecoder.HeatshrinkDecoder(info.window, info.lookahead);
180
+ return decoder.decompress(data);
181
+ default:
182
+ throw new Error(`Unknown compression type: ${compression}`);
183
+ }
184
+ }
185
+ function parseBlockParameters(blockType, parameters) {
186
+ const parameterSize = _bgcodetypes.BgCodeBlockParameterSizes[blockType];
187
+ if (parameters.length !== parameterSize) {
188
+ throw new Error(`Block Parameters should be exactly ${parameterSize} bytes long`);
189
+ }
190
+ if (blockType === _bgcodetypes.BgCodeBlockTypes.Thumbnail) {
191
+ return {
192
+ format: calculateThumbnailFormat(parameters.readUInt16LE(0)),
193
+ width: parameters.readUInt16LE(2),
194
+ height: parameters.readUInt16LE(4)
195
+ };
196
+ }
197
+ return {
198
+ encoding: parameters.readUInt16LE(0)
199
+ };
200
+ }
201
+ function calculateBlockSize(checksumSize, blockType, compression, uncompressedSize, compressedSize) {
202
+ const headerSize = compression > 0 ? 12 : 8;
203
+ const dataSize = compression === 0 ? uncompressedSize : compressedSize;
204
+ const parametersSize = blockType === _bgcodetypes.BgCodeBlockTypes.Thumbnail ? 6 : 2;
205
+ return headerSize + parametersSize + dataSize + checksumSize;
206
+ }
207
+ function calculateChecksumSize(checksumType) {
208
+ if (checksumType > _bgcodeconstants.BGCODE_MAX_CHECKSUM_TYPE) {
209
+ throw new Error(`Checksum type ${checksumType} exceeds max ${_bgcodeconstants.BGCODE_MAX_CHECKSUM_TYPE}`);
210
+ }
211
+ return _bgcodetypes.BgCodeChecksumTypeSize[checksumType];
212
+ }
213
+ function calculateParameterSize(blockType) {
214
+ if (blockType > _bgcodeconstants.BGCODE_MAX_BLOCK_TYPE) {
215
+ throw new Error(`Checksum type ${blockType} exceeds max ${_bgcodeconstants.BGCODE_MAX_BLOCK_TYPE}`);
216
+ }
217
+ return _bgcodetypes.BgCodeBlockParameterSizes[blockType];
218
+ }
219
+ function calculateThumbnailFormat(formatParameter) {
220
+ if (formatParameter > _bgcodeconstants.BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT) {
221
+ throw new Error(`Thumbnail format type ${formatParameter} exceeds max ${_bgcodeconstants.BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT}`);
222
+ }
223
+ return formatParameter;
224
+ }
225
+ async function extractMetadataFromBlocks(fileHandle, blockHeaders) {
226
+ const metadata = {};
227
+ const metadataBlocks = blockHeaders.filter((b)=>b.type === _bgcodetypes.BgCodeBlockTypes.FileMetadata || b.type === _bgcodetypes.BgCodeBlockTypes.SlicerMetadata || b.type === _bgcodetypes.BgCodeBlockTypes.PrinterMetadata || b.type === _bgcodetypes.BgCodeBlockTypes.PrintMetadata);
228
+ for (const header of metadataBlocks){
229
+ const blockData = await getBlockData(fileHandle, header);
230
+ const data = decompressBlock(header.compression, blockData);
231
+ const text = data.toString("utf8");
232
+ extractMetadataFromText(text, metadata);
233
+ }
234
+ return metadata;
235
+ }
236
+ const METADATA_KEY_NORMALIZATION = {
237
+ 'producer': 'producer',
238
+ 'produced on': 'produced_on',
239
+ 'print time': 'print_time',
240
+ 'estimated printing time (silent mode)': 'estimated_printing_time_silent_mode',
241
+ 'estimated printing time (normal mode)': 'estimated_printing_time_normal_mode',
242
+ 'layer height': 'layer_height',
243
+ 'first layer height': 'first_layer_height',
244
+ 'initial layer height': 'initial_layer_height',
245
+ 'nozzle diameter': 'nozzle_diameter',
246
+ 'filament diameter': 'filament_diameter',
247
+ 'filament density': 'filament_density',
248
+ 'filament used [mm]': 'filament_used_mm',
249
+ 'filament used [cm3]': 'filament_used_cm3',
250
+ 'filament used [g]': 'filament_used_g',
251
+ 'bed temperature': 'bed_temperature',
252
+ 'temperature': 'temperature',
253
+ 'fill density': 'fill_density',
254
+ 'filament type': 'filament_type',
255
+ 'printer model': 'printer_model',
256
+ 'max layer z': 'max_layer_z',
257
+ 'total layers': 'total_layers',
258
+ 'layer count': 'layer_count'
259
+ };
260
+ function extractMetadataFromText(text, metadata) {
261
+ const lines = text.split('\n');
262
+ for (const line of lines){
263
+ const keyValuePair = parseMetadataLine(line);
264
+ if (!keyValuePair) {
265
+ continue;
266
+ }
267
+ const { key, value } = keyValuePair;
268
+ metadata[key] = value;
269
+ }
270
+ }
271
+ function parseMetadataLine(line) {
272
+ const equalIndex = line.indexOf('=');
273
+ if (equalIndex === -1) {
274
+ return null;
275
+ }
276
+ const rawKey = line.substring(0, equalIndex).trim().toLowerCase();
277
+ const value = line.substring(equalIndex + 1).trim();
278
+ if (!rawKey || !value) {
279
+ return null;
280
+ }
281
+ const normalizedKey = METADATA_KEY_NORMALIZATION[rawKey] || rawKey.replace(/\s+/g, '_');
282
+ return {
283
+ key: normalizedKey,
284
+ value
285
+ };
286
+ }
287
+
288
+ //# sourceMappingURL=bgcode.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/bgcode/bgcode.utils.ts"],"names":["decompressBlock","extractMetadataFromBlocks","getBlockData","getBlockParsedParameters","parseBlockHeader","parseBlockHeaders","parseBlockParameters","parseFileHeader","fileHandle","buffer","Buffer","alloc","BGCODE_HEADER_SIZE","read","length","Error","magic","toString","BGCODE_HEADER_MARKER","version","readUInt32LE","checksumType","readUInt16LE","fileSize","skipGcode","offset","blockHeaders","currentExpectedHeaderIndex","blockHeader","type","BgCodeBlockTypes","GCode","expectedType","BGCODE_EXPECTED_HEADERS","nextExpectedType","Number","isNaN","blockSize","push","blockStartOffset","BGCODE_MAX_BLOCK_HEADER_SIZE","position","BGCODE_MAX_BLOCK_TYPE","compression","BGCODE_MAX_COMPRESSION","uncompressedSize","compressedSize","headerSize","BGCODE_MIN_BLOCK_HEADER_SIZE","BgCodeCompressionName","checksumSize","calculateChecksumSize","calculateBlockSize","parameterOffset","parametersSize","calculateParameterSize","parameterBuffer","parameters","dataOffset","dataSize","checksumOffset","data","info","BgCodeCompressionInfo","kind","inflateSync","decoder","HeatshrinkDecoder","window","lookahead","decompress","blockType","parameterSize","BgCodeBlockParameterSizes","Thumbnail","format","calculateThumbnailFormat","width","height","encoding","BGCODE_MAX_CHECKSUM_TYPE","BgCodeChecksumTypeSize","formatParameter","BGCODE_PARAMETER_THUMBNAIL_MAX_FORMAT","metadata","metadataBlocks","filter","b","FileMetadata","SlicerMetadata","PrinterMetadata","PrintMetadata","header","blockData","text","extractMetadataFromText","METADATA_KEY_NORMALIZATION","lines","split","line","keyValuePair","parseMetadataLine","key","value","equalIndex","indexOf","rawKey","substring","trim","toLowerCase","normalizedKey","replace"],"mappings":"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"}