@fdm-monster/server 1.9.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.template +8 -7
- package/.yarn/install-state.gz +0 -0
- package/CONTRIBUTING.md +5 -5
- package/README.md +9 -8
- package/RELEASE_NOTES.MD +52 -0
- package/SECURITY.md +1 -1
- package/biome.json +8 -5
- package/dist/consoles/download-github-releases.js +3 -3
- package/dist/consoles/launch-http-servers.js +4 -4
- package/dist/consoles/launch-http-servers.js.map +1 -1
- package/dist/consoles/mock-bambu.server.js +50 -30
- package/dist/consoles/mock-bambu.server.js.map +1 -1
- package/dist/consoles/mock-camera/default-image.js +13 -0
- package/dist/consoles/mock-camera/default-image.js.map +1 -0
- package/dist/consoles/mock-camera/mock-camera.server.js +160 -0
- package/dist/consoles/mock-camera/mock-camera.server.js.map +1 -0
- package/dist/consoles/mock-octoprint.server.js +281 -73
- package/dist/consoles/mock-octoprint.server.js.map +1 -1
- package/dist/consoles/mock-prusalink.server.js +17 -17
- package/dist/consoles/mock-prusalink.server.js.map +1 -1
- package/dist/consoles/typeorm-create.js +135 -0
- package/dist/consoles/typeorm-create.js.map +1 -0
- package/dist/consoles/typeorm-generate.js +8 -8
- package/dist/consoles/typeorm-generate.js.map +1 -1
- package/dist/consoles/utils/api-messages.js.map +1 -1
- package/dist/constants/authorization.constants.js +25 -31
- package/dist/constants/authorization.constants.js.map +1 -1
- package/dist/constants/event.constants.js.map +1 -1
- package/dist/constants/server-settings.constants.js +3 -19
- package/dist/constants/server-settings.constants.js.map +1 -1
- package/dist/container.js +43 -59
- package/dist/container.js.map +1 -1
- package/dist/container.tokens.js +9 -6
- package/dist/container.tokens.js.map +1 -1
- package/dist/controllers/auth.controller.js +1 -1
- package/dist/controllers/auth.controller.js.map +1 -1
- package/dist/controllers/batch-call.controller.js +7 -25
- package/dist/controllers/batch-call.controller.js.map +1 -1
- package/dist/controllers/file-storage.controller.js +248 -0
- package/dist/controllers/file-storage.controller.js.map +1 -0
- package/dist/controllers/first-time-setup.controller.js +6 -5
- package/dist/controllers/first-time-setup.controller.js.map +1 -1
- package/dist/controllers/floor.controller.js +12 -12
- package/dist/controllers/floor.controller.js.map +1 -1
- package/dist/controllers/metrics.controller.js.map +1 -1
- package/dist/controllers/print-job.controller.js +666 -0
- package/dist/controllers/print-job.controller.js.map +1 -0
- package/dist/controllers/print-queue.controller.js +375 -0
- package/dist/controllers/print-queue.controller.js.map +1 -0
- package/dist/controllers/printer-files.controller.js +88 -59
- package/dist/controllers/printer-files.controller.js.map +1 -1
- package/dist/controllers/printer-settings.controller.js +0 -21
- package/dist/controllers/printer-settings.controller.js.map +1 -1
- package/dist/controllers/{printer-group.controller.js → printer-tag.controller.js} +51 -34
- package/dist/controllers/printer-tag.controller.js.map +1 -0
- package/dist/controllers/printer.controller.js +21 -7
- package/dist/controllers/printer.controller.js.map +1 -1
- package/dist/controllers/server-private.controller.js +2 -1
- package/dist/controllers/server-private.controller.js.map +1 -1
- package/dist/controllers/server-public.controller.js +11 -15
- package/dist/controllers/server-public.controller.js.map +1 -1
- package/dist/controllers/settings.controller.js +0 -68
- package/dist/controllers/settings.controller.js.map +1 -1
- package/dist/controllers/slicer-compat.controller.js +216 -0
- package/dist/controllers/slicer-compat.controller.js.map +1 -0
- package/dist/controllers/user.controller.js +8 -12
- package/dist/controllers/user.controller.js.map +1 -1
- package/dist/controllers/validation/batch-controller.validation.js +13 -13
- package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
- package/dist/controllers/validation/generic.validation.js +4 -8
- package/dist/controllers/validation/generic.validation.js.map +1 -1
- package/dist/controllers/validation/printer-files-controller.validation.js +2 -2
- package/dist/controllers/validation/user-controller.validation.js +14 -9
- package/dist/controllers/validation/user-controller.validation.js.map +1 -1
- package/dist/data-source.js +25 -12
- package/dist/data-source.js.map +1 -1
- package/dist/entities/camera-stream.entity.js +2 -1
- package/dist/entities/camera-stream.entity.js.map +1 -1
- package/dist/entities/floor.entity.js +3 -5
- package/dist/entities/floor.entity.js.map +1 -1
- package/dist/entities/index.js +15 -11
- package/dist/entities/index.js.map +1 -1
- package/dist/entities/print-job.entity.js +195 -0
- package/dist/entities/print-job.entity.js.map +1 -0
- package/dist/entities/{printer-group.entity.js → printer-tag.entity.js} +17 -17
- package/dist/entities/printer-tag.entity.js.map +1 -0
- package/dist/entities/printer.entity.js +4 -10
- package/dist/entities/printer.entity.js.map +1 -1
- package/dist/entities/settings.entity.js +3 -12
- package/dist/entities/settings.entity.js.map +1 -1
- package/dist/entities/{group.entity.js → tag.entity.js} +15 -8
- package/dist/entities/tag.entity.js.map +1 -0
- package/dist/handlers/logging/file-logging.transport.js.map +1 -1
- package/dist/handlers/logging/static.logger.js.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/middleware/authenticate.js +4 -4
- package/dist/middleware/authenticate.js.map +1 -1
- package/dist/middleware/database.js +1 -1
- package/dist/middleware/exception.filter.js +114 -90
- package/dist/middleware/exception.filter.js.map +1 -1
- package/dist/middleware/global.middleware.js +10 -18
- package/dist/middleware/global.middleware.js.map +1 -1
- package/dist/middleware/param-converter.middleware.js +5 -13
- package/dist/middleware/param-converter.middleware.js.map +1 -1
- package/dist/middleware/passport.js +2 -2
- package/dist/middleware/passport.js.map +1 -1
- package/dist/middleware/printer-resolver.js.map +1 -1
- package/dist/middleware/printer.js +3 -2
- package/dist/middleware/printer.js.map +1 -1
- package/dist/middleware/socketio.middleware.js.map +1 -1
- package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js +1 -1
- package/dist/migrations/1745141688926-AddPrinterUsernamePassword.js.map +1 -1
- package/dist/migrations/1766576698569-DropPermissions.js +28 -0
- package/dist/migrations/1766576698569-DropPermissions.js.map +1 -0
- package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js +186 -0
- package/dist/migrations/1767278216516-ChangeCameraPrinterOnDeleteSetNull.js.map +1 -0
- package/dist/migrations/1767279607392-DropCustomGcode.js +31 -0
- package/dist/migrations/1767279607392-DropCustomGcode.js.map +1 -0
- package/dist/migrations/1767291804417-DropPrintCompletions.js +37 -0
- package/dist/migrations/1767291804417-DropPrintCompletions.js.map +1 -0
- package/dist/migrations/1767352862576-DropSettingsFileClean.js +88 -0
- package/dist/migrations/1767352862576-DropSettingsFileClean.js.map +1 -0
- package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js +107 -0
- package/dist/migrations/1767355639023-ChangeFloorLevelToOrder.js.map +1 -0
- package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js +62 -0
- package/dist/migrations/1767370191762-ChangeFloorNonUniqueOrder.js.map +1 -0
- package/dist/migrations/1767432108916-RenameGroupToTag.js +86 -0
- package/dist/migrations/1767432108916-RenameGroupToTag.js.map +1 -0
- package/dist/migrations/1767451444137-AddPrintJob.js +207 -0
- package/dist/migrations/1767451444137-AddPrintJob.js.map +1 -0
- package/dist/server.constants.js +9 -17
- package/dist/server.constants.js.map +1 -1
- package/dist/server.core.js +3 -7
- package/dist/server.core.js.map +1 -1
- package/dist/server.env.js +4 -49
- package/dist/server.env.js.map +1 -1
- package/dist/server.host.js +26 -44
- package/dist/server.host.js.map +1 -1
- package/dist/services/authentication/auth.service.js.map +1 -1
- package/dist/services/authentication/jwt.service.js.map +1 -1
- package/dist/services/bambu/bambu-ftp.adapter.js +3 -3
- package/dist/services/bambu/bambu-ftp.adapter.js.map +1 -1
- package/dist/services/bambu/bambu-mqtt.adapter.js +74 -77
- package/dist/services/bambu/bambu-mqtt.adapter.js.map +1 -1
- package/dist/services/bambu/bambu.client.js.map +1 -1
- package/dist/services/bambu.api.js +11 -0
- package/dist/services/bambu.api.js.map +1 -1
- package/dist/services/core/batch-call.service.js +0 -25
- package/dist/services/core/batch-call.service.js.map +1 -1
- package/dist/services/core/multer.service.js +5 -9
- package/dist/services/core/multer.service.js.map +1 -1
- package/dist/services/core/yaml.service.js +219 -187
- package/dist/services/core/yaml.service.js.map +1 -1
- package/dist/services/file-analysis.service.js +146 -0
- package/dist/services/file-analysis.service.js.map +1 -0
- package/dist/services/file-storage.service.js +386 -0
- package/dist/services/file-storage.service.js.map +1 -0
- package/dist/services/interfaces/camera-stream.dto.js +2 -2
- package/dist/services/interfaces/camera-stream.dto.js.map +1 -1
- package/dist/services/interfaces/floor.dto.js +3 -3
- package/dist/services/interfaces/floor.dto.js.map +1 -1
- package/dist/services/interfaces/{printer-group.dto.js → printer-tag.dto.js} +9 -8
- package/dist/services/interfaces/printer-tag.dto.js.map +1 -0
- package/dist/services/interfaces/{print-completion.interface.js → printer-tag.service.interface.js} +1 -1
- package/dist/services/interfaces/{printer-group.service.interface.js.map → printer-tag.service.interface.js.map} +1 -1
- package/dist/services/interfaces/printer.dto.js +2 -2
- package/dist/services/interfaces/printer.dto.js.map +1 -1
- package/dist/services/interfaces/refresh-token.dto.js.map +1 -1
- package/dist/services/interfaces/role.dto.js.map +1 -1
- package/dist/services/interfaces/settings.dto.js +0 -1
- package/dist/services/interfaces/settings.dto.js.map +1 -1
- package/dist/services/interfaces/{group.dto.js → tag.dto.js} +1 -1
- package/dist/services/interfaces/tag.dto.js.map +1 -0
- package/dist/services/interfaces/user.dto.js.map +1 -1
- package/dist/services/moonraker/constants/moonraker-event.dto.js.map +1 -1
- package/dist/services/moonraker/moonraker-websocket.adapter.js.map +1 -1
- package/dist/services/moonraker/moonraker.client.js.map +1 -1
- package/dist/services/moonraker.api.js +3 -0
- package/dist/services/moonraker.api.js.map +1 -1
- package/dist/services/octoprint/dto/files/gcode-analysis.dto.js.map +1 -0
- package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
- package/dist/services/octoprint/octoprint-api.routes.js +0 -7
- package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
- package/dist/services/octoprint/octoprint-websocket.adapter.js.map +1 -1
- package/dist/services/octoprint/octoprint.client.js +0 -4
- package/dist/services/octoprint/octoprint.client.js.map +1 -1
- package/dist/services/octoprint.api.js +3 -0
- package/dist/services/octoprint.api.js.map +1 -1
- package/dist/services/orm/base.service.js.map +1 -1
- package/dist/services/orm/camera-stream.service.js.map +1 -1
- package/dist/services/orm/floor-position.service.js.map +1 -1
- package/dist/services/orm/floor.service.js +12 -19
- package/dist/services/orm/floor.service.js.map +1 -1
- package/dist/services/orm/permission.service.js +3 -54
- package/dist/services/orm/permission.service.js.map +1 -1
- package/dist/services/orm/print-job.service.js +539 -0
- package/dist/services/orm/print-job.service.js.map +1 -0
- package/dist/services/orm/printer-tag.service.js +120 -0
- package/dist/services/orm/printer-tag.service.js.map +1 -0
- package/dist/services/orm/printer.service.js.map +1 -1
- package/dist/services/orm/refresh-token.service.js.map +1 -1
- package/dist/services/orm/role.service.js +25 -39
- package/dist/services/orm/role.service.js.map +1 -1
- package/dist/services/orm/settings.service.js +4 -15
- package/dist/services/orm/settings.service.js.map +1 -1
- package/dist/services/orm/user.service.js +17 -13
- package/dist/services/orm/user.service.js.map +1 -1
- package/dist/services/print-file-downloader.service.js +169 -0
- package/dist/services/print-file-downloader.service.js.map +1 -0
- package/dist/services/print-queue.service.js +268 -0
- package/dist/services/print-queue.service.js.map +1 -0
- package/dist/services/printer-api.factory.js +1 -1
- package/dist/services/printer-api.factory.js.map +1 -1
- package/dist/services/printer-api.interface.js.map +1 -1
- package/dist/services/prusa-link/constants/prusalink-event.dto.js.map +1 -1
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js +1 -3
- package/dist/services/prusa-link/prusa-link-http-polling.adapter.js.map +1 -1
- package/dist/services/prusa-link/prusa-link.api.js +4 -1
- package/dist/services/prusa-link/prusa-link.api.js.map +1 -1
- package/dist/services/prusa-link/utils/prusa-link-http-client.builder.js.map +1 -1
- package/dist/services/validators/floor-service.validation.js +25 -31
- package/dist/services/validators/floor-service.validation.js.map +1 -1
- package/dist/services/validators/print-job.validation.js +31 -0
- package/dist/services/validators/print-job.validation.js.map +1 -0
- package/dist/services/validators/settings-service.validation.js +0 -22
- package/dist/services/validators/settings-service.validation.js.map +1 -1
- package/dist/services/validators/user-service.validation.js +15 -10
- package/dist/services/validators/user-service.validation.js.map +1 -1
- package/dist/services/validators/yaml-service.validation.js +8 -14
- package/dist/services/validators/yaml-service.validation.js.map +1 -1
- package/dist/shared/load-controllers.js +2 -1
- package/dist/shared/load-controllers.js.map +1 -1
- package/dist/shared/runtime-settings.migration.js +1 -11
- package/dist/shared/runtime-settings.migration.js.map +1 -1
- package/dist/shared/websocket-rpc-extended.adapter.js +13 -4
- package/dist/shared/websocket-rpc-extended.adapter.js.map +1 -1
- package/dist/shared/websocket.adapter.js.map +1 -1
- package/dist/state/file-upload-tracker.cache.js.map +1 -1
- package/dist/state/file.cache.js +6 -6
- package/dist/state/file.cache.js.map +1 -1
- package/dist/state/floor.store.js +3 -10
- package/dist/state/floor.store.js.map +1 -1
- package/dist/state/printer-events.cache.js +180 -20
- package/dist/state/printer-events.cache.js.map +1 -1
- package/dist/state/printer-files.store.js.map +1 -1
- package/dist/state/printer-socket.store.js +25 -20
- package/dist/state/printer-socket.store.js.map +1 -1
- package/dist/state/printer-thumbnail.cache.js +98 -188
- package/dist/state/printer-thumbnail.cache.js.map +1 -1
- package/dist/state/printer.cache.js +3 -13
- package/dist/state/printer.cache.js.map +1 -1
- package/dist/state/settings.store.js +4 -42
- package/dist/state/settings.store.js.map +1 -1
- package/dist/state/socket-io.gateway.js +1 -1
- package/dist/state/socket-io.gateway.js.map +1 -1
- package/dist/state/test-printer-socket.store.js +6 -3
- package/dist/state/test-printer-socket.store.js.map +1 -1
- package/dist/tasks/boot.task.js +11 -91
- package/dist/tasks/boot.task.js.map +1 -1
- package/dist/tasks/print-job-analysis.task.js +116 -0
- package/dist/tasks/print-job-analysis.task.js.map +1 -0
- package/dist/tasks/printer-files-load.task.js +29 -0
- package/dist/tasks/printer-files-load.task.js.map +1 -0
- package/dist/tasks/socketio.task.js +1 -1
- package/dist/tasks/socketio.task.js.map +1 -1
- package/dist/tasks.js +3 -2
- package/dist/tasks.js.map +1 -1
- package/dist/utils/cache/key-diff.cache.js +20 -61
- package/dist/utils/cache/key-diff.cache.js.map +1 -1
- package/dist/utils/parsers/3mf.parser.js +337 -0
- package/dist/utils/parsers/3mf.parser.js.map +1 -0
- package/dist/utils/parsers/bgcode.parser.js +223 -0
- package/dist/utils/parsers/bgcode.parser.js.map +1 -0
- package/dist/utils/parsers/gcode.parser.js +254 -0
- package/dist/utils/parsers/gcode.parser.js.map +1 -0
- package/dist/utils/swagger/decorators.js +39 -0
- package/dist/utils/swagger/decorators.js.map +1 -0
- package/dist/utils/swagger/generator.js +196 -0
- package/dist/utils/swagger/generator.js.map +1 -0
- package/dist/utils/swagger/swagger.js +93 -0
- package/dist/utils/swagger/swagger.js.map +1 -0
- package/package.json +24 -30
- package/dist/controllers/custom-gcode.controller.js +0 -150
- package/dist/controllers/custom-gcode.controller.js.map +0 -1
- package/dist/controllers/print-completion.controller.js +0 -118
- package/dist/controllers/print-completion.controller.js.map +0 -1
- package/dist/controllers/printer-group.controller.js.map +0 -1
- package/dist/entities/custom-gcode.entity.js +0 -49
- package/dist/entities/custom-gcode.entity.js.map +0 -1
- package/dist/entities/group.entity.js.map +0 -1
- package/dist/entities/permission.entity.js +0 -37
- package/dist/entities/permission.entity.js.map +0 -1
- package/dist/entities/print-completion.entity.js +0 -90
- package/dist/entities/print-completion.entity.js.map +0 -1
- package/dist/entities/printer-group.entity.js.map +0 -1
- package/dist/models/Auth/Permission.js +0 -20
- package/dist/models/Auth/Permission.js.map +0 -1
- package/dist/models/Auth/RefreshToken.js +0 -41
- package/dist/models/Auth/RefreshToken.js.map +0 -1
- package/dist/models/Auth/Role.js +0 -20
- package/dist/models/Auth/Role.js.map +0 -1
- package/dist/models/Auth/User.js +0 -49
- package/dist/models/Auth/User.js.map +0 -1
- package/dist/models/CameraStream.js +0 -49
- package/dist/models/CameraStream.js.map +0 -1
- package/dist/models/CustomGcode.js +0 -28
- package/dist/models/CustomGcode.js.map +0 -1
- package/dist/models/Floor.js +0 -33
- package/dist/models/Floor.js.map +0 -1
- package/dist/models/FloorPrinter.js +0 -38
- package/dist/models/FloorPrinter.js.map +0 -1
- package/dist/models/PrintCompletion.js +0 -40
- package/dist/models/PrintCompletion.js.map +0 -1
- package/dist/models/Printer.js +0 -78
- package/dist/models/Printer.js.map +0 -1
- package/dist/models/Settings.js +0 -150
- package/dist/models/Settings.js.map +0 -1
- package/dist/models/index.js +0 -54
- package/dist/models/index.js.map +0 -1
- package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js +0 -45
- package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +0 -1
- package/dist/mongo-migrations/20210907173950-printers-enabled.js +0 -35
- package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +0 -1
- package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js +0 -35
- package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +0 -1
- package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js +0 -60
- package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +0 -1
- package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js +0 -30
- package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +0 -1
- package/dist/mongo-migrations/20230716065316-user-remove-name.js +0 -30
- package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +0 -1
- package/dist/mongo-migrations/20231111081809-printer-flatten-name.js +0 -35
- package/dist/mongo-migrations/20231111081809-printer-flatten-name.js.map +0 -1
- package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js +0 -41
- package/dist/mongo-migrations/20231111082521-printer-remove-settingsappearance.js.map +0 -1
- package/dist/mongo-migrations/20231202183902-printer-files-simpler.js +0 -41
- package/dist/mongo-migrations/20231202183902-printer-files-simpler.js.map +0 -1
- package/dist/services/interfaces/custom-gcode.dto.js +0 -18
- package/dist/services/interfaces/custom-gcode.dto.js.map +0 -1
- package/dist/services/interfaces/custom-gcode.service.interface.js +0 -6
- package/dist/services/interfaces/custom-gcode.service.interface.js.map +0 -1
- package/dist/services/interfaces/gcode-analysis.dto.js.map +0 -1
- package/dist/services/interfaces/group.dto.js.map +0 -1
- package/dist/services/interfaces/permission.dto.js +0 -16
- package/dist/services/interfaces/permission.dto.js.map +0 -1
- package/dist/services/interfaces/print-completion-context.dto.js +0 -6
- package/dist/services/interfaces/print-completion-context.dto.js.map +0 -1
- package/dist/services/interfaces/print-completion.dto.js +0 -38
- package/dist/services/interfaces/print-completion.dto.js.map +0 -1
- package/dist/services/interfaces/print-completion.interface.js.map +0 -1
- package/dist/services/interfaces/printer-group.dto.js.map +0 -1
- package/dist/services/interfaces/printer-group.service.interface.js +0 -6
- package/dist/services/mongoose/camera-stream.service.js +0 -67
- package/dist/services/mongoose/camera-stream.service.js.map +0 -1
- package/dist/services/mongoose/custom-gcode.service.js +0 -50
- package/dist/services/mongoose/custom-gcode.service.js.map +0 -1
- package/dist/services/mongoose/floor.service.js +0 -139
- package/dist/services/mongoose/floor.service.js.map +0 -1
- package/dist/services/mongoose/permission.service.js +0 -73
- package/dist/services/mongoose/permission.service.js.map +0 -1
- package/dist/services/mongoose/print-completion.service.js +0 -134
- package/dist/services/mongoose/print-completion.service.js.map +0 -1
- package/dist/services/mongoose/print-completion.shared.js +0 -59
- package/dist/services/mongoose/print-completion.shared.js.map +0 -1
- package/dist/services/mongoose/printer.service.js +0 -216
- package/dist/services/mongoose/printer.service.js.map +0 -1
- package/dist/services/mongoose/refresh-token.service.js +0 -104
- package/dist/services/mongoose/refresh-token.service.js.map +0 -1
- package/dist/services/mongoose/role.service.js +0 -132
- package/dist/services/mongoose/role.service.js.map +0 -1
- package/dist/services/mongoose/settings.service.js +0 -124
- package/dist/services/mongoose/settings.service.js.map +0 -1
- package/dist/services/mongoose/user.service.js +0 -180
- package/dist/services/mongoose/user.service.js.map +0 -1
- package/dist/services/orm/custom-gcode.service.js +0 -42
- package/dist/services/orm/custom-gcode.service.js.map +0 -1
- package/dist/services/orm/print-completion.service.js +0 -87
- package/dist/services/orm/print-completion.service.js.map +0 -1
- package/dist/services/orm/printer-group.service.js +0 -109
- package/dist/services/orm/printer-group.service.js.map +0 -1
- package/dist/services/validators/camera-service.validation.js +0 -19
- package/dist/services/validators/camera-service.validation.js.map +0 -1
- package/dist/services/validators/print-completion-service.validation.js +0 -33
- package/dist/services/validators/print-completion-service.validation.js.map +0 -1
- package/dist/shared.constants.js +0 -15
- package/dist/shared.constants.js.map +0 -1
- package/dist/tasks/print-completion.socketio.task.js +0 -91
- package/dist/tasks/print-completion.socketio.task.js.map +0 -1
- package/dist/tasks/printer-file-clean.task.js +0 -74
- package/dist/tasks/printer-file-clean.task.js.map +0 -1
- package/migrate-mongo-config.js +0 -45
- /package/dist/services/{interfaces → octoprint/dto/files}/gcode-analysis.dto.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/cache/key-diff.cache.ts"],"names":["KeyDiffCache","deletedKeys","updatedKeys","keyValueStore","
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/cache/key-diff.cache.ts"],"names":["KeyDiffCache","deletedKeys","updatedKeys","keyValueStore","Map","getAllValues","Array","from","values","getAllKeyValues","Object","fromEntries","getValue","key","get","setKeyValuesBatch","keyValues","markUpdated","value","setKeyValue","map","batchMarkUpdated","deleteKeysBatch","keys","markDeleted","deleteKeyValue","batchMarkDeleted","set","delete","deletedIndex","indexOf","splice","includes","push","updatedIndex","resetDiffs"],"mappings":";;;;+BAAaA;;;eAAAA;;;AAAN,MAAMA;IACXC,cAAwB,EAAE,CAAC;IAC3BC,cAAwB,EAAE,CAAC;IAEjBC,gBAAgB,IAAIC,MAAiB;IAE/C,MAAaC,eAA6B;QACxC,OAAOC,MAAMC,IAAI,CAAC,IAAI,CAACJ,aAAa,CAACK,MAAM;IAC7C;IAEA,MAAaC,kBAA8C;QACzD,OAAOC,OAAOC,WAAW,CAAC,IAAI,CAACR,aAAa;IAC9C;IAEA,MAAaS,SAASC,GAAW,EAA0B;QACzD,OAAO,IAAI,CAACV,aAAa,CAACW,GAAG,CAACD;IAChC;IAEA,MAAgBE,kBAAkBC,SAA2C,EAAEC,cAAuB,IAAI,EAAE;QAC1G,KAAK,MAAM,EAAEJ,GAAG,EAAEK,KAAK,EAAE,IAAIF,UAAW;YACtC,MAAM,IAAI,CAACG,WAAW,CAACN,KAAKK,OAAO;QACrC;QACA,IAAID,aAAa;YACf,MAAMf,cAAcc,UAAUI,GAAG,CAAC,CAAC,EAAEP,GAAG,EAAE,GAAKA;YAC/C,IAAI,CAACQ,gBAAgB,CAACnB;QACxB;IACF;IAEA,MAAgBoB,gBAAgBC,IAAc,EAAEC,cAAuB,IAAI,EAAE;QAC3E,KAAK,MAAMX,OAAOU,KAAM;YACtB,MAAM,IAAI,CAACE,cAAc,CAACZ,KAAK;QACjC;QACA,IAAIW,aAAa;YACf,IAAI,CAACE,gBAAgB,CAACH;QACxB;IACF;IAEA,MAAgBJ,YAAYN,GAAW,EAAEK,KAAQ,EAAED,cAAuB,IAAI,EAAE;QAC9E,IAAI,CAACd,aAAa,CAACwB,GAAG,CAACd,KAAKK;QAC5B,IAAID,aAAa;YACf,IAAI,CAACA,WAAW,CAACJ;QACnB;IACF;IAEA,MAAgBY,eAAeZ,GAAW,EAAEW,cAAuB,IAAI,EAAE;QACvE,IAAI,CAACrB,aAAa,CAACyB,MAAM,CAACf;QAC1B,IAAIW,aAAa;YACf,IAAI,CAACA,WAAW,CAACX;QACnB;IACF;IAEUa,iBAAiBH,IAAc,EAAE;QACzC,KAAK,MAAMV,OAAOU,KAAM;YACtB,IAAI,CAACC,WAAW,CAACX;QACnB;IACF;IAEUI,YAAYJ,GAAW,EAAE;QACjC,MAAMgB,eAAe,IAAI,CAAC5B,WAAW,CAAC6B,OAAO,CAACjB;QAC9C,IAAIgB,iBAAiB,CAAC,GAAG;YACvB,IAAI,CAAC5B,WAAW,CAAC8B,MAAM,CAACF,cAAc;QACxC;QACA,IAAI,CAAC,IAAI,CAAC3B,WAAW,CAAC8B,QAAQ,CAACnB,MAAM;YACnC,IAAI,CAACX,WAAW,CAAC+B,IAAI,CAACpB;QACxB;IACF;IAEUW,YAAYX,GAAW,EAAE;QACjC,MAAMqB,eAAe,IAAI,CAAChC,WAAW,CAAC4B,OAAO,CAACjB;QAC9C,IAAIqB,iBAAiB,CAAC,GAAG;YACvB,IAAI,CAAChC,WAAW,CAAC6B,MAAM,CAACG,cAAc;QACxC;QACA,IAAI,CAAC,IAAI,CAACjC,WAAW,CAAC+B,QAAQ,CAACnB,MAAM;YACnC,IAAI,CAACZ,WAAW,CAACgC,IAAI,CAACpB;QACxB;IACF;IAEUsB,aAAa;QACrB,IAAI,CAAClC,WAAW,GAAG,EAAE;QACrB,IAAI,CAACC,WAAW,GAAG,EAAE;IACvB;IAEQmB,iBAAiBE,IAAc,EAAE;QACvC,KAAK,MAAMV,OAAOU,KAAM;YACtB,IAAI,CAACN,WAAW,CAACJ;QACnB;IACF;AACF"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "ThreeMFParser", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ThreeMFParser;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _promises = /*#__PURE__*/ _interop_require_wildcard(require("node:fs/promises"));
|
|
12
|
+
const _nodepath = /*#__PURE__*/ _interop_require_wildcard(require("node:path"));
|
|
13
|
+
const _admzip = /*#__PURE__*/ _interop_require_default(require("adm-zip"));
|
|
14
|
+
function _interop_require_default(obj) {
|
|
15
|
+
return obj && obj.__esModule ? obj : {
|
|
16
|
+
default: obj
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
20
|
+
if (typeof WeakMap !== "function") return null;
|
|
21
|
+
var cacheBabelInterop = new WeakMap();
|
|
22
|
+
var cacheNodeInterop = new WeakMap();
|
|
23
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
24
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
25
|
+
})(nodeInterop);
|
|
26
|
+
}
|
|
27
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
28
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
29
|
+
return obj;
|
|
30
|
+
}
|
|
31
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
32
|
+
return {
|
|
33
|
+
default: obj
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
37
|
+
if (cache && cache.has(obj)) {
|
|
38
|
+
return cache.get(obj);
|
|
39
|
+
}
|
|
40
|
+
var newObj = {
|
|
41
|
+
__proto__: null
|
|
42
|
+
};
|
|
43
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
44
|
+
for(var key in obj){
|
|
45
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
46
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
47
|
+
if (desc && (desc.get || desc.set)) {
|
|
48
|
+
Object.defineProperty(newObj, key, desc);
|
|
49
|
+
} else {
|
|
50
|
+
newObj[key] = obj[key];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
newObj.default = obj;
|
|
55
|
+
if (cache) {
|
|
56
|
+
cache.set(obj, newObj);
|
|
57
|
+
}
|
|
58
|
+
return newObj;
|
|
59
|
+
}
|
|
60
|
+
class ThreeMFParser {
|
|
61
|
+
async parse(filePath) {
|
|
62
|
+
const stats = await _promises.stat(filePath);
|
|
63
|
+
const fileName = _nodepath.basename(filePath);
|
|
64
|
+
const zip = new _admzip.default(filePath);
|
|
65
|
+
const zipEntries = zip.getEntries();
|
|
66
|
+
const metadataJsonEntry = zipEntries.find((e)=>e.entryName === "metadata.json");
|
|
67
|
+
let metadata = {};
|
|
68
|
+
if (metadataJsonEntry) {
|
|
69
|
+
const jsonContent = metadataJsonEntry.getData().toString("utf8");
|
|
70
|
+
const jsonData = JSON.parse(jsonContent);
|
|
71
|
+
metadata = this.normalizeJsonMetadata(jsonData);
|
|
72
|
+
} else {
|
|
73
|
+
const modelEntry = zipEntries.find((e)=>e.entryName === "3D/3dmodel.model" || e.entryName === "Metadata/model_settings.config");
|
|
74
|
+
metadata = modelEntry ? this.extractMetadataFromXML(modelEntry.getData().toString("utf8")) : {};
|
|
75
|
+
}
|
|
76
|
+
const plates = this.extractPlates(zipEntries);
|
|
77
|
+
const isMultiPlate = plates.length > 1;
|
|
78
|
+
const thumbnails = this.extractThumbnails(zipEntries);
|
|
79
|
+
let topLevelPrintTime = this.parseTime(metadata.printTime);
|
|
80
|
+
let topLevelFilamentWeight = this.parseFloat(metadata.totalFilamentWeight || metadata.filamentWeight);
|
|
81
|
+
let topLevelLayers = this.parseInt(metadata.layerCount);
|
|
82
|
+
let topLevelFilamentUsedMm = this.parseFloat(metadata.filamentUsed);
|
|
83
|
+
let topLevelFilamentUsedCm3 = this.parseFloat(metadata.filamentVolume);
|
|
84
|
+
let topLevelFilamentDensity = this.parseFloat(metadata.filamentDensity);
|
|
85
|
+
let topLevelMaxZ = this.parseFloat(metadata.maxZ);
|
|
86
|
+
let topLevelSlicerVersion = metadata.slicerVersion || metadata.generator;
|
|
87
|
+
let topLevelNozzleDiameter = this.parseFloat(metadata.nozzleDiameter);
|
|
88
|
+
let topLevelLayerHeight = this.parseFloat(metadata.layerHeight || metadata.layer_height);
|
|
89
|
+
let topLevelFirstLayerHeight = this.parseFloat(metadata.firstLayerHeight || metadata.first_layer_height);
|
|
90
|
+
let topLevelBedTemp = this.parseFloat(metadata.bedTemp || metadata.bed_temperature);
|
|
91
|
+
let topLevelNozzleTemp = this.parseFloat(metadata.nozzleTemp || metadata.nozzle_temperature);
|
|
92
|
+
let topLevelFillDensity = metadata.infillDensity || metadata.infill_density || metadata.fill_density || null;
|
|
93
|
+
let topLevelFilamentType = metadata.filamentType || metadata.filament_type || null;
|
|
94
|
+
let topLevelPrinterModel = metadata.printerModel || metadata.printer_model || null;
|
|
95
|
+
let topLevelFilamentDiameter = this.parseFloat(metadata.filamentDiameter || metadata.filament_diameter) || 1.75;
|
|
96
|
+
if (plates.length >= 1 && plates[0]) {
|
|
97
|
+
if (plates.length === 1) {
|
|
98
|
+
const plate = plates[0];
|
|
99
|
+
topLevelPrintTime = plate.gcodePrintTimeSeconds ?? topLevelPrintTime;
|
|
100
|
+
topLevelFilamentWeight = plate.filamentUsedGrams ?? topLevelFilamentWeight;
|
|
101
|
+
topLevelLayers = plate.totalLayers ?? topLevelLayers;
|
|
102
|
+
topLevelFilamentUsedMm = plate.filamentUsedMm ?? topLevelFilamentUsedMm;
|
|
103
|
+
topLevelFilamentUsedCm3 = plate.filamentUsedCm3 ?? topLevelFilamentUsedCm3;
|
|
104
|
+
topLevelFilamentDensity = plate.filamentDensityGramsCm3 ?? topLevelFilamentDensity;
|
|
105
|
+
topLevelMaxZ = plate.maxLayerZ ?? topLevelMaxZ;
|
|
106
|
+
topLevelSlicerVersion = plate.slicerVersion ?? topLevelSlicerVersion;
|
|
107
|
+
topLevelNozzleDiameter = plate.nozzleDiameterMm ?? topLevelNozzleDiameter;
|
|
108
|
+
topLevelLayerHeight = plate.layerHeight ?? topLevelLayerHeight;
|
|
109
|
+
topLevelFirstLayerHeight = plate.firstLayerHeight ?? topLevelFirstLayerHeight;
|
|
110
|
+
topLevelBedTemp = plate.bedTemperature ?? topLevelBedTemp;
|
|
111
|
+
topLevelNozzleTemp = plate.nozzleTemperature ?? topLevelNozzleTemp;
|
|
112
|
+
topLevelFillDensity = plate.fillDensity ?? topLevelFillDensity;
|
|
113
|
+
topLevelFilamentType = plate.filamentType ?? topLevelFilamentType;
|
|
114
|
+
topLevelPrinterModel = plate.printerModel ?? topLevelPrinterModel;
|
|
115
|
+
topLevelFilamentDiameter = plate.filamentDiameterMm ?? topLevelFilamentDiameter;
|
|
116
|
+
} else {
|
|
117
|
+
topLevelPrintTime = plates.reduce((sum, p)=>sum + (p.gcodePrintTimeSeconds || 0), 0);
|
|
118
|
+
topLevelFilamentWeight = plates.reduce((sum, p)=>sum + (p.filamentUsedGrams || 0), 0);
|
|
119
|
+
topLevelFilamentUsedMm = plates.reduce((sum, p)=>sum + (p.filamentUsedMm || 0), 0);
|
|
120
|
+
topLevelFilamentUsedCm3 = plates.reduce((sum, p)=>sum + (p.filamentUsedCm3 || 0), 0);
|
|
121
|
+
topLevelLayers = Math.max(...plates.map((p)=>p.totalLayers || 0));
|
|
122
|
+
topLevelMaxZ = Math.max(...plates.map((p)=>p.maxLayerZ || 0));
|
|
123
|
+
const firstPlate = plates[0];
|
|
124
|
+
topLevelFilamentDensity = firstPlate.filamentDensityGramsCm3 ?? topLevelFilamentDensity;
|
|
125
|
+
topLevelSlicerVersion = firstPlate.slicerVersion ?? topLevelSlicerVersion;
|
|
126
|
+
topLevelNozzleDiameter = firstPlate.nozzleDiameterMm ?? topLevelNozzleDiameter;
|
|
127
|
+
topLevelLayerHeight = firstPlate.layerHeight ?? topLevelLayerHeight;
|
|
128
|
+
topLevelFirstLayerHeight = firstPlate.firstLayerHeight ?? topLevelFirstLayerHeight;
|
|
129
|
+
topLevelBedTemp = firstPlate.bedTemperature ?? topLevelBedTemp;
|
|
130
|
+
topLevelNozzleTemp = firstPlate.nozzleTemperature ?? topLevelNozzleTemp;
|
|
131
|
+
topLevelFillDensity = firstPlate.fillDensity ?? topLevelFillDensity;
|
|
132
|
+
topLevelFilamentType = firstPlate.filamentType ?? topLevelFilamentType;
|
|
133
|
+
topLevelPrinterModel = firstPlate.printerModel ?? topLevelPrinterModel;
|
|
134
|
+
topLevelFilamentDiameter = firstPlate.filamentDiameterMm ?? topLevelFilamentDiameter;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const normalized = {
|
|
138
|
+
fileName,
|
|
139
|
+
fileFormat: "3mf",
|
|
140
|
+
fileSize: stats.size,
|
|
141
|
+
isMultiPlate,
|
|
142
|
+
totalPlates: plates.length || 1,
|
|
143
|
+
gcodePrintTimeSeconds: topLevelPrintTime,
|
|
144
|
+
nozzleDiameterMm: topLevelNozzleDiameter,
|
|
145
|
+
filamentDiameterMm: topLevelFilamentDiameter,
|
|
146
|
+
filamentDensityGramsCm3: topLevelFilamentDensity,
|
|
147
|
+
filamentUsedMm: topLevelFilamentUsedMm,
|
|
148
|
+
filamentUsedCm3: topLevelFilamentUsedCm3,
|
|
149
|
+
filamentUsedGrams: topLevelFilamentWeight,
|
|
150
|
+
totalFilamentUsedGrams: topLevelFilamentWeight,
|
|
151
|
+
layerHeight: topLevelLayerHeight,
|
|
152
|
+
firstLayerHeight: topLevelFirstLayerHeight,
|
|
153
|
+
bedTemperature: topLevelBedTemp,
|
|
154
|
+
nozzleTemperature: topLevelNozzleTemp,
|
|
155
|
+
fillDensity: topLevelFillDensity,
|
|
156
|
+
filamentType: topLevelFilamentType,
|
|
157
|
+
printerModel: topLevelPrinterModel,
|
|
158
|
+
slicerVersion: topLevelSlicerVersion,
|
|
159
|
+
maxLayerZ: topLevelMaxZ,
|
|
160
|
+
totalLayers: topLevelLayers,
|
|
161
|
+
plates: plates.length > 0 ? plates : undefined
|
|
162
|
+
};
|
|
163
|
+
return {
|
|
164
|
+
raw: {
|
|
165
|
+
_thumbnails: thumbnails,
|
|
166
|
+
plates: plates.length > 0 ? plates : undefined
|
|
167
|
+
},
|
|
168
|
+
normalized,
|
|
169
|
+
plates: plates.length > 0 ? plates : undefined
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
normalizeJsonMetadata(jsonData) {
|
|
173
|
+
const metadata = {};
|
|
174
|
+
if (jsonData.nozzleDiameter !== undefined) metadata.nozzleDiameter = String(jsonData.nozzleDiameter);
|
|
175
|
+
if (jsonData.estimatedPrintTimeSec !== undefined) metadata.printTime = String(jsonData.estimatedPrintTimeSec);
|
|
176
|
+
if (jsonData.filamentDiameter !== undefined) metadata.filamentDiameter = String(jsonData.filamentDiameter);
|
|
177
|
+
if (jsonData.filamentDensity !== undefined) metadata.filamentDensity = String(jsonData.filamentDensity);
|
|
178
|
+
if (jsonData.filamentUsedGrams !== undefined) metadata.filamentWeight = String(jsonData.filamentUsedGrams);
|
|
179
|
+
if (jsonData.layerHeight !== undefined) metadata.layerHeight = String(jsonData.layerHeight);
|
|
180
|
+
if (jsonData.firstLayerHeight !== undefined) metadata.firstLayerHeight = String(jsonData.firstLayerHeight);
|
|
181
|
+
if (jsonData.bedTemp !== undefined) metadata.bedTemp = String(jsonData.bedTemp);
|
|
182
|
+
if (jsonData.nozzleTemp !== undefined) metadata.nozzleTemp = String(jsonData.nozzleTemp);
|
|
183
|
+
if (jsonData.fillDensity !== undefined) metadata.infillDensity = String(jsonData.fillDensity);
|
|
184
|
+
if (jsonData.filamentType !== undefined) metadata.filamentType = jsonData.filamentType;
|
|
185
|
+
if (jsonData.printerModel !== undefined) metadata.printerModel = jsonData.printerModel;
|
|
186
|
+
return metadata;
|
|
187
|
+
}
|
|
188
|
+
extractMetadataFromXML(xml) {
|
|
189
|
+
const metadata = {};
|
|
190
|
+
const patterns = [
|
|
191
|
+
/<printtime>([^<]+)<\/printtime>/i,
|
|
192
|
+
/<layerheight>([^<]+)<\/layerheight>/i,
|
|
193
|
+
/<filamentused>([^<]+)<\/filamentused>/i,
|
|
194
|
+
/<filamenttype>([^<]+)<\/filamenttype>/i,
|
|
195
|
+
/<nozzlediameter>([^<]+)<\/nozzlediameter>/i,
|
|
196
|
+
/<bedtemperature>([^<]+)<\/bedtemperature>/i,
|
|
197
|
+
/<nozzletemperature>([^<]+)<\/nozzletemperature>/i
|
|
198
|
+
];
|
|
199
|
+
for (const pattern of patterns){
|
|
200
|
+
const match = xml.match(pattern);
|
|
201
|
+
if (match) {
|
|
202
|
+
const key = pattern.source.match(/<([^>]+)>/)?.[1] || "";
|
|
203
|
+
metadata[key] = match[1];
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
const generatorMatch = xml.match(/generator="([^"]+)"/);
|
|
207
|
+
if (generatorMatch) {
|
|
208
|
+
metadata.generator = generatorMatch[1];
|
|
209
|
+
metadata.slicerVersion = generatorMatch[1];
|
|
210
|
+
}
|
|
211
|
+
return metadata;
|
|
212
|
+
}
|
|
213
|
+
extractPlates(zipEntries) {
|
|
214
|
+
const plates = [];
|
|
215
|
+
const plateEntries = zipEntries.filter((e)=>e.entryName.match(/Metadata\/plate_\d+\.gcode$/) && !e.entryName.endsWith('.md5'));
|
|
216
|
+
if (plateEntries.length === 0) {
|
|
217
|
+
return [];
|
|
218
|
+
}
|
|
219
|
+
for (const entry of plateEntries){
|
|
220
|
+
const plateMatch = entry.entryName.match(/plate_(\d+)\.gcode/);
|
|
221
|
+
if (!plateMatch) continue;
|
|
222
|
+
const plateNumber = Number.parseInt(plateMatch[1]);
|
|
223
|
+
const gcodeContent = entry.getData().toString("utf8", 0, Math.min(50000, entry.getData().length));
|
|
224
|
+
const metadata = this.parseGCodeHeader(gcodeContent);
|
|
225
|
+
const plateThumbs = zipEntries.filter((e)=>e.entryName.includes(`plate_${plateMatch[1]}`) && (e.entryName.endsWith(".png") || e.entryName.endsWith(".jpg")));
|
|
226
|
+
const printTime = this.parseTime(metadata.model_printing_time || metadata.total_estimated_time || metadata.print_time);
|
|
227
|
+
const filamentWeight = this.parseFloat(metadata.total_filament_weight_g || metadata.filament_weight || metadata.total_filament_weight);
|
|
228
|
+
const layerCount = this.parseInt(metadata.total_layer_number || metadata.layer_count || metadata.total_layers);
|
|
229
|
+
const plateMetadata = {
|
|
230
|
+
plateNumber,
|
|
231
|
+
gcodePrintTimeSeconds: printTime,
|
|
232
|
+
filamentUsedGrams: filamentWeight,
|
|
233
|
+
totalLayers: layerCount,
|
|
234
|
+
filamentUsedMm: this.parseFloat(metadata.total_filament_length_mm || metadata.filament_length_mm || metadata.filament_used_mm),
|
|
235
|
+
filamentUsedCm3: this.parseFloat(metadata.total_filament_volume_cm3 || metadata.filament_volume_cm3),
|
|
236
|
+
filamentDensityGramsCm3: this.parseFloat(metadata.filament_density),
|
|
237
|
+
filamentDiameterMm: this.parseFloat(metadata.filament_diameter) || 1.75,
|
|
238
|
+
maxLayerZ: this.parseFloat(metadata.max_z_height || metadata.max_layer_z),
|
|
239
|
+
slicerVersion: metadata.bambustudio || metadata.slicer_version || metadata.slicer || null,
|
|
240
|
+
nozzleDiameterMm: this.parseFloat(metadata.nozzle_diameter),
|
|
241
|
+
layerHeight: this.parseFloat(metadata.layer_height),
|
|
242
|
+
firstLayerHeight: this.parseFloat(metadata.first_layer_height || metadata.initial_layer_height || metadata.initial_layer_print_height),
|
|
243
|
+
bedTemperature: this.parseFloat(metadata.bed_temperature_actual || metadata.bed_temperature || metadata.bed_temp || metadata.bed_temperature_initial_layer),
|
|
244
|
+
nozzleTemperature: this.parseFloat(metadata.nozzle_temperature || metadata.nozzle_temp || metadata.nozzle_temperature_initial_layer),
|
|
245
|
+
fillDensity: metadata.sparse_infill_density || metadata.infill_density || metadata.fill_density || null,
|
|
246
|
+
filamentType: metadata.filament_type || null,
|
|
247
|
+
printerModel: metadata.printer_model || null,
|
|
248
|
+
objects: [],
|
|
249
|
+
thumbnails: plateThumbs.map((t)=>({
|
|
250
|
+
path: t.entryName,
|
|
251
|
+
size: t.getData().length,
|
|
252
|
+
type: t.entryName.endsWith(".png") ? "PNG" : "JPG"
|
|
253
|
+
}))
|
|
254
|
+
};
|
|
255
|
+
plates.push(plateMetadata);
|
|
256
|
+
}
|
|
257
|
+
return plates.sort((a, b)=>a.plateNumber - b.plateNumber);
|
|
258
|
+
}
|
|
259
|
+
parseGCodeHeader(gcode) {
|
|
260
|
+
const metadata = {};
|
|
261
|
+
const lines = gcode.split("\n").slice(0, 1000);
|
|
262
|
+
for (const line of lines){
|
|
263
|
+
if (line.startsWith(";")) {
|
|
264
|
+
if (line.includes("_BLOCK_START") || line.includes("_BLOCK_END")) continue;
|
|
265
|
+
const bambuMatch = line.match(/;\s*BambuStudio\s+([\d.]+)/i);
|
|
266
|
+
if (bambuMatch) {
|
|
267
|
+
metadata.bambustudio = `BambuStudio ${bambuMatch[1]}`;
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
const match = line.match(/;\s*([^=:]+?)\s*[:=]\s*(.+)/);
|
|
271
|
+
if (match) {
|
|
272
|
+
let key = match[1].trim().toLowerCase().replace(/\s+/g, "_");
|
|
273
|
+
let value = match[2].trim();
|
|
274
|
+
key = key.replace(/\[([^\]]+)\]/g, (_, unit)=>unit.replace(/\^/g, ''));
|
|
275
|
+
value = value.split(';')[0].trim();
|
|
276
|
+
value = value.replace(/\s*\[.*?\]\s*/g, '');
|
|
277
|
+
if (!metadata[key]) {
|
|
278
|
+
metadata[key] = value;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
} else {
|
|
282
|
+
if (!metadata.bed_temperature_actual) {
|
|
283
|
+
const bedTempMatch = line.match(/^M1(40|90)\s+S(\d+)/);
|
|
284
|
+
if (bedTempMatch && Number.parseInt(bedTempMatch[2]) > 0) {
|
|
285
|
+
metadata.bed_temperature_actual = bedTempMatch[2];
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return metadata;
|
|
291
|
+
}
|
|
292
|
+
extractThumbnails(zipEntries) {
|
|
293
|
+
const thumbnails = [];
|
|
294
|
+
const thumbEntries = zipEntries.filter((e)=>e.entryName.match(/Metadata\/.*\.(png|jpg|jpeg)/i) || e.entryName.match(/Thumbnails\/.*/i));
|
|
295
|
+
for (const entry of thumbEntries){
|
|
296
|
+
const sizeMatch = entry.entryName.match(/(\d+)x(\d+)/);
|
|
297
|
+
const width = sizeMatch ? Number.parseInt(sizeMatch[1]) : 0;
|
|
298
|
+
const height = sizeMatch ? Number.parseInt(sizeMatch[2]) : 0;
|
|
299
|
+
const format = entry.entryName.match(/\.(png|jpg|jpeg)$/i)?.[1].toUpperCase() || "PNG";
|
|
300
|
+
const imageData = entry.getData();
|
|
301
|
+
const base64Data = imageData.toString("base64");
|
|
302
|
+
thumbnails.push({
|
|
303
|
+
width,
|
|
304
|
+
height,
|
|
305
|
+
format,
|
|
306
|
+
path: entry.entryName,
|
|
307
|
+
data: base64Data
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
return thumbnails;
|
|
311
|
+
}
|
|
312
|
+
parseFloat(value) {
|
|
313
|
+
if (!value) return null;
|
|
314
|
+
const num = Number.parseFloat(value);
|
|
315
|
+
return Number.isNaN(num) ? null : num;
|
|
316
|
+
}
|
|
317
|
+
parseInt(value) {
|
|
318
|
+
if (!value) return null;
|
|
319
|
+
const num = Number.parseInt(value, 10);
|
|
320
|
+
return Number.isNaN(num) ? null : num;
|
|
321
|
+
}
|
|
322
|
+
parseTime(value) {
|
|
323
|
+
if (!value) return null;
|
|
324
|
+
const match = value.match(/(?:(\d+)h)?(?:\s*(\d+)m)?(?:\s*(\d+)s)?/);
|
|
325
|
+
if (match && (match[1] || match[2] || match[3])) {
|
|
326
|
+
const hours = Number.parseInt(match[1] || "0");
|
|
327
|
+
const minutes = Number.parseInt(match[2] || "0");
|
|
328
|
+
const secs = Number.parseInt(match[3] || "0");
|
|
329
|
+
return hours * 3600 + minutes * 60 + secs;
|
|
330
|
+
}
|
|
331
|
+
const seconds = Number.parseFloat(value);
|
|
332
|
+
if (!Number.isNaN(seconds)) return seconds;
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
//# sourceMappingURL=3mf.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/parsers/3mf.parser.ts"],"names":["ThreeMFParser","parse","filePath","stats","fs","stat","fileName","path","basename","zip","AdmZip","zipEntries","getEntries","metadataJsonEntry","find","e","entryName","metadata","jsonContent","getData","toString","jsonData","JSON","normalizeJsonMetadata","modelEntry","extractMetadataFromXML","plates","extractPlates","isMultiPlate","length","thumbnails","extractThumbnails","topLevelPrintTime","parseTime","printTime","topLevelFilamentWeight","parseFloat","totalFilamentWeight","filamentWeight","topLevelLayers","parseInt","layerCount","topLevelFilamentUsedMm","filamentUsed","topLevelFilamentUsedCm3","filamentVolume","topLevelFilamentDensity","filamentDensity","topLevelMaxZ","maxZ","topLevelSlicerVersion","slicerVersion","generator","topLevelNozzleDiameter","nozzleDiameter","topLevelLayerHeight","layerHeight","layer_height","topLevelFirstLayerHeight","firstLayerHeight","first_layer_height","topLevelBedTemp","bedTemp","bed_temperature","topLevelNozzleTemp","nozzleTemp","nozzle_temperature","topLevelFillDensity","infillDensity","infill_density","fill_density","topLevelFilamentType","filamentType","filament_type","topLevelPrinterModel","printerModel","printer_model","topLevelFilamentDiameter","filamentDiameter","filament_diameter","plate","gcodePrintTimeSeconds","filamentUsedGrams","totalLayers","filamentUsedMm","filamentUsedCm3","filamentDensityGramsCm3","maxLayerZ","nozzleDiameterMm","bedTemperature","nozzleTemperature","fillDensity","filamentDiameterMm","reduce","sum","p","Math","max","map","firstPlate","normalized","fileFormat","fileSize","size","totalPlates","totalFilamentUsedGrams","undefined","raw","_thumbnails","String","estimatedPrintTimeSec","xml","patterns","pattern","match","key","source","generatorMatch","plateEntries","filter","endsWith","entry","plateMatch","plateNumber","Number","gcodeContent","min","parseGCodeHeader","plateThumbs","includes","model_printing_time","total_estimated_time","print_time","total_filament_weight_g","filament_weight","total_filament_weight","total_layer_number","layer_count","total_layers","plateMetadata","total_filament_length_mm","filament_length_mm","filament_used_mm","total_filament_volume_cm3","filament_volume_cm3","filament_density","max_z_height","max_layer_z","bambustudio","slicer_version","slicer","nozzle_diameter","initial_layer_height","initial_layer_print_height","bed_temperature_actual","bed_temp","bed_temperature_initial_layer","nozzle_temp","nozzle_temperature_initial_layer","sparse_infill_density","objects","t","type","push","sort","a","b","gcode","lines","split","slice","line","startsWith","bambuMatch","trim","toLowerCase","replace","value","_","unit","bedTempMatch","thumbEntries","sizeMatch","width","height","format","toUpperCase","imageData","base64Data","data","num","isNaN","hours","minutes","secs","seconds"],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "BGCodeParser", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return BGCodeParser;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _promises = /*#__PURE__*/ _interop_require_wildcard(require("node:fs/promises"));
|
|
12
|
+
const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
|
|
13
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
14
|
+
if (typeof WeakMap !== "function") return null;
|
|
15
|
+
var cacheBabelInterop = new WeakMap();
|
|
16
|
+
var cacheNodeInterop = new WeakMap();
|
|
17
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
18
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
19
|
+
})(nodeInterop);
|
|
20
|
+
}
|
|
21
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
22
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
23
|
+
return obj;
|
|
24
|
+
}
|
|
25
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
26
|
+
return {
|
|
27
|
+
default: obj
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
31
|
+
if (cache && cache.has(obj)) {
|
|
32
|
+
return cache.get(obj);
|
|
33
|
+
}
|
|
34
|
+
var newObj = {
|
|
35
|
+
__proto__: null
|
|
36
|
+
};
|
|
37
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
38
|
+
for(var key in obj){
|
|
39
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
40
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
41
|
+
if (desc && (desc.get || desc.set)) {
|
|
42
|
+
Object.defineProperty(newObj, key, desc);
|
|
43
|
+
} else {
|
|
44
|
+
newObj[key] = obj[key];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
newObj.default = obj;
|
|
49
|
+
if (cache) {
|
|
50
|
+
cache.set(obj, newObj);
|
|
51
|
+
}
|
|
52
|
+
return newObj;
|
|
53
|
+
}
|
|
54
|
+
class BGCodeParser {
|
|
55
|
+
async parse(filePath) {
|
|
56
|
+
const stats = await _promises.stat(filePath);
|
|
57
|
+
const fileName = _path.basename(filePath);
|
|
58
|
+
const buffer = await this.readFileHeader(filePath, 4096);
|
|
59
|
+
const metadata = this.parseHeader(buffer);
|
|
60
|
+
const blocks = this.parseBlocks(buffer);
|
|
61
|
+
const thumbnails = this.extractThumbnails(buffer);
|
|
62
|
+
const normalized = {
|
|
63
|
+
fileName,
|
|
64
|
+
fileFormat: "bgcode",
|
|
65
|
+
fileSize: stats.size,
|
|
66
|
+
producer: metadata.producer,
|
|
67
|
+
producedOn: metadata.produced_on,
|
|
68
|
+
checksumType: metadata.checksum_type,
|
|
69
|
+
gcodePrintTimeSeconds: this.parseTime(metadata.estimated_printing_time_normal_mode || metadata.estimated_printing_time || metadata.print_time),
|
|
70
|
+
nozzleDiameterMm: this.parseFirstValue(metadata.nozzle_diameter),
|
|
71
|
+
filamentDiameterMm: this.parseFirstValue(metadata.filament_diameter) || 1.75,
|
|
72
|
+
filamentDensityGramsCm3: this.parseFirstValue(metadata.filament_density),
|
|
73
|
+
filamentUsedMm: this.parseFirstValue(metadata.filament_used_mm),
|
|
74
|
+
filamentUsedCm3: this.parseFirstValue(metadata.filament_used_cm3),
|
|
75
|
+
filamentUsedGrams: this.parseFirstValue(metadata.filament_used_g),
|
|
76
|
+
totalFilamentUsedGrams: this.parseFirstValue(metadata.filament_used_g),
|
|
77
|
+
layerHeight: this.parseFloat(metadata.layer_height),
|
|
78
|
+
firstLayerHeight: this.parseFloat(metadata.first_layer_height || metadata.initial_layer_height),
|
|
79
|
+
bedTemperature: this.parseFirstValue(metadata.bed_temperature),
|
|
80
|
+
nozzleTemperature: this.parseFirstValue(metadata.temperature),
|
|
81
|
+
fillDensity: metadata.fill_density || null,
|
|
82
|
+
filamentType: this.parseFirstCsvValue(metadata.filament_type),
|
|
83
|
+
printerModel: metadata.printer_model || null,
|
|
84
|
+
slicerVersion: metadata.producer || null,
|
|
85
|
+
maxLayerZ: this.parseFloat(metadata.max_layer_z),
|
|
86
|
+
totalLayers: this.parseInt(metadata.total_layers || metadata.layer_count),
|
|
87
|
+
thumbnails: thumbnails.length > 0 ? thumbnails : undefined,
|
|
88
|
+
blocks: blocks.length > 0 ? blocks : undefined
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
raw: {
|
|
92
|
+
_thumbnails: thumbnails,
|
|
93
|
+
blocks
|
|
94
|
+
},
|
|
95
|
+
normalized
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async readFileHeader(filePath, bytes) {
|
|
99
|
+
const fileHandle = await _promises.open(filePath, "r");
|
|
100
|
+
try {
|
|
101
|
+
const buffer = Buffer.alloc(bytes);
|
|
102
|
+
await fileHandle.read(buffer, 0, bytes, 0);
|
|
103
|
+
return buffer;
|
|
104
|
+
} finally{
|
|
105
|
+
await fileHandle.close();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
parseHeader(buffer) {
|
|
109
|
+
const metadata = {};
|
|
110
|
+
const magic = buffer.toString("ascii", 0, 4);
|
|
111
|
+
if (magic !== "GCDE" && magic !== "BGCD") {
|
|
112
|
+
throw new Error(`Invalid BGCode file: magic number not found (got "${magic}", expected "GCDE" or "BGCD")`);
|
|
113
|
+
}
|
|
114
|
+
const version = buffer.readUInt32LE(4);
|
|
115
|
+
metadata.version = version.toString();
|
|
116
|
+
const headerText = buffer.toString("utf8", 0, Math.min(buffer.length, 2048));
|
|
117
|
+
this.extractMetadataFromText(headerText, metadata);
|
|
118
|
+
return metadata;
|
|
119
|
+
}
|
|
120
|
+
extractMetadataFromText(text, metadata) {
|
|
121
|
+
const lines = text.split('\n');
|
|
122
|
+
const producerMatch = text.match(/Producer=([^\n\r\0]+)/);
|
|
123
|
+
if (producerMatch) {
|
|
124
|
+
metadata.producer = producerMatch[1].trim();
|
|
125
|
+
}
|
|
126
|
+
for (const line of lines){
|
|
127
|
+
const match = line.match(/^([a-z_\s]+(?:\[[^\]]+\])?(?:\([^)]+\))?)\s*=\s*(.+)/i);
|
|
128
|
+
if (match) {
|
|
129
|
+
let key = match[1].trim().toLowerCase().replace(/\s+/g, '_');
|
|
130
|
+
let value = match[2].trim();
|
|
131
|
+
key = key.replace(/\(([^)]+)\)/g, (_, content)=>'_' + content.replace(/\s+/g, '_'));
|
|
132
|
+
key = key.replace(/\[([^\]]+)\]/g, (_, unit)=>'_' + unit.replace(/\^/g, ''));
|
|
133
|
+
key = key.replace(/_+/g, '_');
|
|
134
|
+
metadata[key] = value;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const patterns = [
|
|
138
|
+
/producer[=:]\s*([^\n\r]+)/i,
|
|
139
|
+
/produced[\s_]on[=:]\s*([^\n\r]+)/i,
|
|
140
|
+
/print[\s_]time[=:]\s*([^\n\r]+)/i,
|
|
141
|
+
/layer[\s_]height[=:]\s*([^\n\r]+)/i,
|
|
142
|
+
/nozzle_diameter[=:]\s*([^\n\r]+)/i,
|
|
143
|
+
/bed_temperature[=:]\s*([^\n\r]+)/i,
|
|
144
|
+
/nozzle_temperature[=:]\s*([^\n\r]+)/i
|
|
145
|
+
];
|
|
146
|
+
for (const pattern of patterns){
|
|
147
|
+
const match = text.match(pattern);
|
|
148
|
+
if (match) {
|
|
149
|
+
const key = pattern.source.match(/^(\w+)/)?.[1] || "";
|
|
150
|
+
metadata[key] = match[1].trim();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
parseBlocks(buffer) {
|
|
155
|
+
const blocks = [];
|
|
156
|
+
try {
|
|
157
|
+
let offset = 8;
|
|
158
|
+
const blockCount = Math.min(buffer.readUInt16LE(offset), 10);
|
|
159
|
+
for(let i = 0; i < blockCount; i++){
|
|
160
|
+
blocks.push({
|
|
161
|
+
type: `Block${i}`,
|
|
162
|
+
compressedSize: 0,
|
|
163
|
+
uncompressedSize: 0,
|
|
164
|
+
compression: "unknown"
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
} catch (error) {}
|
|
168
|
+
return blocks;
|
|
169
|
+
}
|
|
170
|
+
extractThumbnails(buffer) {
|
|
171
|
+
const thumbnails = [];
|
|
172
|
+
try {
|
|
173
|
+
for(let i = 0; i < buffer.length - 8; i++){
|
|
174
|
+
if (buffer[i] === 0x89 && buffer[i + 1] === 0x50 && buffer[i + 2] === 0x4E && buffer[i + 3] === 0x47) {
|
|
175
|
+
thumbnails.push({
|
|
176
|
+
width: 0,
|
|
177
|
+
height: 0,
|
|
178
|
+
format: "PNG",
|
|
179
|
+
size: 0
|
|
180
|
+
});
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
} catch (error) {}
|
|
185
|
+
return thumbnails;
|
|
186
|
+
}
|
|
187
|
+
parseFloat(value) {
|
|
188
|
+
if (!value) return null;
|
|
189
|
+
const num = parseFloat(value);
|
|
190
|
+
return isNaN(num) ? null : num;
|
|
191
|
+
}
|
|
192
|
+
parseInt(value) {
|
|
193
|
+
if (!value) return null;
|
|
194
|
+
const num = parseInt(value, 10);
|
|
195
|
+
return isNaN(num) ? null : num;
|
|
196
|
+
}
|
|
197
|
+
parseTime(value) {
|
|
198
|
+
if (!value) return null;
|
|
199
|
+
const match = value.match(/(?:(\d+)h)?(?:\s*(\d+)m)?(?:\s*(\d+)s)?/);
|
|
200
|
+
if (match && (match[1] || match[2] || match[3])) {
|
|
201
|
+
const hours = parseInt(match[1] || "0");
|
|
202
|
+
const minutes = parseInt(match[2] || "0");
|
|
203
|
+
const secs = parseInt(match[3] || "0");
|
|
204
|
+
return hours * 3600 + minutes * 60 + secs;
|
|
205
|
+
}
|
|
206
|
+
const seconds = parseFloat(value);
|
|
207
|
+
if (!isNaN(seconds)) return seconds;
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
parseFirstValue(value) {
|
|
211
|
+
if (!value) return null;
|
|
212
|
+
const firstValue = value.split(',')[0].trim();
|
|
213
|
+
const num = parseFloat(firstValue);
|
|
214
|
+
return isNaN(num) ? null : num;
|
|
215
|
+
}
|
|
216
|
+
parseFirstCsvValue(value) {
|
|
217
|
+
if (!value) return null;
|
|
218
|
+
const firstValue = value.split(/[;,]/)[0].trim();
|
|
219
|
+
return firstValue || null;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
//# sourceMappingURL=bgcode.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/parsers/bgcode.parser.ts"],"names":["BGCodeParser","parse","filePath","stats","fs","stat","fileName","path","basename","buffer","readFileHeader","metadata","parseHeader","blocks","parseBlocks","thumbnails","extractThumbnails","normalized","fileFormat","fileSize","size","producer","producedOn","produced_on","checksumType","checksum_type","gcodePrintTimeSeconds","parseTime","estimated_printing_time_normal_mode","estimated_printing_time","print_time","nozzleDiameterMm","parseFirstValue","nozzle_diameter","filamentDiameterMm","filament_diameter","filamentDensityGramsCm3","filament_density","filamentUsedMm","filament_used_mm","filamentUsedCm3","filament_used_cm3","filamentUsedGrams","filament_used_g","totalFilamentUsedGrams","layerHeight","parseFloat","layer_height","firstLayerHeight","first_layer_height","initial_layer_height","bedTemperature","bed_temperature","nozzleTemperature","temperature","fillDensity","fill_density","filamentType","parseFirstCsvValue","filament_type","printerModel","printer_model","slicerVersion","maxLayerZ","max_layer_z","totalLayers","parseInt","total_layers","layer_count","length","undefined","raw","_thumbnails","bytes","fileHandle","open","Buffer","alloc","read","close","magic","toString","Error","version","readUInt32LE","headerText","Math","min","extractMetadataFromText","text","lines","split","producerMatch","match","trim","line","key","toLowerCase","replace","value","_","content","unit","patterns","pattern","source","offset","blockCount","readUInt16LE","i","push","type","compressedSize","uncompressedSize","compression","error","width","height","format","num","isNaN","hours","minutes","secs","seconds","firstValue"],"mappings":";;;;+BA0BaA;;;eAAAA;;;kEA1BO;8DACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBf,MAAMA;IACX,MAAMC,MAAMC,QAAgB,EAA8B;QACxD,MAAMC,QAAQ,MAAMC,UAAGC,IAAI,CAACH;QAC5B,MAAMI,WAAWC,MAAKC,QAAQ,CAACN;QAG/B,MAAMO,SAAS,MAAM,IAAI,CAACC,cAAc,CAACR,UAAU;QAGnD,MAAMS,WAAW,IAAI,CAACC,WAAW,CAACH;QAClC,MAAMI,SAAS,IAAI,CAACC,WAAW,CAACL;QAChC,MAAMM,aAAa,IAAI,CAACC,iBAAiB,CAACP;QAE1C,MAAMQ,aAA6B;YACjCX;YACAY,YAAY;YACZC,UAAUhB,MAAMiB,IAAI;YACpBC,UAAUV,SAASU,QAAQ;YAC3BC,YAAYX,SAASY,WAAW;YAChCC,cAAcb,SAASc,aAAa;YACpCC,uBAAuB,IAAI,CAACC,SAAS,CACnChB,SAASiB,mCAAmC,IAC5CjB,SAASkB,uBAAuB,IAChClB,SAASmB,UAAU;YAErBC,kBAAkB,IAAI,CAACC,eAAe,CAACrB,SAASsB,eAAe;YAC/DC,oBAAoB,IAAI,CAACF,eAAe,CAACrB,SAASwB,iBAAiB,KAAK;YACxEC,yBAAyB,IAAI,CAACJ,eAAe,CAACrB,SAAS0B,gBAAgB;YACvEC,gBAAgB,IAAI,CAACN,eAAe,CAACrB,SAAS4B,gBAAgB;YAC9DC,iBAAiB,IAAI,CAACR,eAAe,CAACrB,SAAS8B,iBAAiB;YAChEC,mBAAmB,IAAI,CAACV,eAAe,CAACrB,SAASgC,eAAe;YAChEC,wBAAwB,IAAI,CAACZ,eAAe,CAACrB,SAASgC,eAAe;YACrEE,aAAa,IAAI,CAACC,UAAU,CAACnC,SAASoC,YAAY;YAClDC,kBAAkB,IAAI,CAACF,UAAU,CAACnC,SAASsC,kBAAkB,IAAItC,SAASuC,oBAAoB;YAC9FC,gBAAgB,IAAI,CAACnB,eAAe,CAACrB,SAASyC,eAAe;YAC7DC,mBAAmB,IAAI,CAACrB,eAAe,CAACrB,SAAS2C,WAAW;YAC5DC,aAAa5C,SAAS6C,YAAY,IAAI;YACtCC,cAAc,IAAI,CAACC,kBAAkB,CAAC/C,SAASgD,aAAa;YAC5DC,cAAcjD,SAASkD,aAAa,IAAI;YACxCC,eAAenD,SAASU,QAAQ,IAAI;YACpC0C,WAAW,IAAI,CAACjB,UAAU,CAACnC,SAASqD,WAAW;YAC/CC,aAAa,IAAI,CAACC,QAAQ,CAACvD,SAASwD,YAAY,IAAIxD,SAASyD,WAAW;YACxErD,YAAYA,WAAWsD,MAAM,GAAG,IAAItD,aAAauD;YACjDzD,QAAQA,OAAOwD,MAAM,GAAG,IAAIxD,SAASyD;QACvC;QAEA,OAAO;YACLC,KAAK;gBACHC,aAAazD;gBACbF;YACF;YACAI;QACF;IACF;IAEA,MAAcP,eAAeR,QAAgB,EAAEuE,KAAa,EAAmB;QAC7E,MAAMC,aAAa,MAAMtE,UAAGuE,IAAI,CAACzE,UAAU;QAC3C,IAAI;YACF,MAAMO,SAASmE,OAAOC,KAAK,CAACJ;YAC5B,MAAMC,WAAWI,IAAI,CAACrE,QAAQ,GAAGgE,OAAO;YACxC,OAAOhE;QACT,SAAU;YACR,MAAMiE,WAAWK,KAAK;QACxB;IACF;IAEQnE,YAAYH,MAAc,EAA0B;QAC1D,MAAME,WAAmC,CAAC;QAG1C,MAAMqE,QAAQvE,OAAOwE,QAAQ,CAAC,SAAS,GAAG;QAC1C,IAAID,UAAU,UAAUA,UAAU,QAAQ;YACxC,MAAM,IAAIE,MAAM,CAAC,kDAAkD,EAAEF,MAAM,6BAA6B,CAAC;QAC3G;QAGA,MAAMG,UAAU1E,OAAO2E,YAAY,CAAC;QACpCzE,SAASwE,OAAO,GAAGA,QAAQF,QAAQ;QAInC,MAAMI,aAAa5E,OAAOwE,QAAQ,CAAC,QAAQ,GAAGK,KAAKC,GAAG,CAAC9E,OAAO4D,MAAM,EAAE;QAGtE,IAAI,CAACmB,uBAAuB,CAACH,YAAY1E;QAEzC,OAAOA;IACT;IAEQ6E,wBAAwBC,IAAY,EAAE9E,QAAgC,EAAQ;QAEpF,MAAM+E,QAAQD,KAAKE,KAAK,CAAC;QAGzB,MAAMC,gBAAgBH,KAAKI,KAAK,CAAC;QACjC,IAAID,eAAe;YACjBjF,SAASU,QAAQ,GAAGuE,aAAa,CAAC,EAAE,CAACE,IAAI;QAC3C;QAEA,KAAK,MAAMC,QAAQL,MAAO;YAExB,MAAMG,QAAQE,KAAKF,KAAK,CAAC;YACzB,IAAIA,OAAO;gBACT,IAAIG,MAAMH,KAAK,CAAC,EAAE,CAACC,IAAI,GAAGG,WAAW,GAAGC,OAAO,CAAC,QAAQ;gBACxD,IAAIC,QAAQN,KAAK,CAAC,EAAE,CAACC,IAAI;gBAGzBE,MAAMA,IAAIE,OAAO,CAAC,gBAAgB,CAACE,GAAGC,UAAY,MAAMA,QAAQH,OAAO,CAAC,QAAQ;gBAGhFF,MAAMA,IAAIE,OAAO,CAAC,iBAAiB,CAACE,GAAGE,OAAS,MAAMA,KAAKJ,OAAO,CAAC,OAAO;gBAG1EF,MAAMA,IAAIE,OAAO,CAAC,OAAO;gBAGzBvF,QAAQ,CAACqF,IAAI,GAAGG;YAClB;QACF;QAGA,MAAMI,WAAW;YACf;YACA;YACA;YACA;YACA;YACA;YACA;SACD;QAED,KAAK,MAAMC,WAAWD,SAAU;YAC9B,MAAMV,QAAQJ,KAAKI,KAAK,CAACW;YACzB,IAAIX,OAAO;gBACT,MAAMG,MAAMQ,QAAQC,MAAM,CAACZ,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI;gBACnDlF,QAAQ,CAACqF,IAAI,GAAGH,KAAK,CAAC,EAAE,CAACC,IAAI;YAC/B;QACF;IACF;IAEQhF,YAAYL,MAAc,EAK/B;QACD,MAAMI,SAAqB,EAAE;QAI7B,IAAI;YACF,IAAI6F,SAAS;YACb,MAAMC,aAAarB,KAAKC,GAAG,CAAC9E,OAAOmG,YAAY,CAACF,SAAS;YAEzD,IAAK,IAAIG,IAAI,GAAGA,IAAIF,YAAYE,IAAK;gBAEnChG,OAAOiG,IAAI,CAAC;oBACVC,MAAM,CAAC,KAAK,EAAEF,GAAG;oBACjBG,gBAAgB;oBAChBC,kBAAkB;oBAClBC,aAAa;gBACf;YACF;QACF,EAAE,OAAOC,OAAO,CAEhB;QAEA,OAAOtG;IACT;IAEQG,kBAAkBP,MAAc,EAKrC;QACD,MAAMM,aAAyB,EAAE;QAIjC,IAAI;YAEF,IAAK,IAAI8F,IAAI,GAAGA,IAAIpG,OAAO4D,MAAM,GAAG,GAAGwC,IAAK;gBAC1C,IAAIpG,MAAM,CAACoG,EAAE,KAAK,QAAQpG,MAAM,CAACoG,IAAI,EAAE,KAAK,QACxCpG,MAAM,CAACoG,IAAI,EAAE,KAAK,QAAQpG,MAAM,CAACoG,IAAI,EAAE,KAAK,MAAM;oBAEpD9F,WAAW+F,IAAI,CAAC;wBACdM,OAAO;wBACPC,QAAQ;wBACRC,QAAQ;wBACRlG,MAAM;oBACR;oBACA;gBACF;YACF;QACF,EAAE,OAAO+F,OAAO,CAEhB;QAEA,OAAOpG;IACT;IAEQ+B,WAAWqD,KAAyB,EAAiB;QAC3D,IAAI,CAACA,OAAO,OAAO;QACnB,MAAMoB,MAAMzE,WAAWqD;QACvB,OAAOqB,MAAMD,OAAO,OAAOA;IAC7B;IAEQrD,SAASiC,KAAyB,EAAiB;QACzD,IAAI,CAACA,OAAO,OAAO;QACnB,MAAMoB,MAAMrD,SAASiC,OAAO;QAC5B,OAAOqB,MAAMD,OAAO,OAAOA;IAC7B;IAEQ5F,UAAUwE,KAAyB,EAAiB;QAC1D,IAAI,CAACA,OAAO,OAAO;QAGnB,MAAMN,QAAQM,MAAMN,KAAK,CAAC;QAC1B,IAAIA,SAAUA,CAAAA,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE,AAAD,GAAI;YAC/C,MAAM4B,QAAQvD,SAAS2B,KAAK,CAAC,EAAE,IAAI;YACnC,MAAM6B,UAAUxD,SAAS2B,KAAK,CAAC,EAAE,IAAI;YACrC,MAAM8B,OAAOzD,SAAS2B,KAAK,CAAC,EAAE,IAAI;YAClC,OAAO4B,QAAQ,OAAOC,UAAU,KAAKC;QACvC;QAGA,MAAMC,UAAU9E,WAAWqD;QAC3B,IAAI,CAACqB,MAAMI,UAAU,OAAOA;QAE5B,OAAO;IACT;IAMQ5F,gBAAgBmE,KAAyB,EAAiB;QAChE,IAAI,CAACA,OAAO,OAAO;QAEnB,MAAM0B,aAAa1B,MAAMR,KAAK,CAAC,IAAI,CAAC,EAAE,CAACG,IAAI;QAC3C,MAAMyB,MAAMzE,WAAW+E;QACvB,OAAOL,MAAMD,OAAO,OAAOA;IAC7B;IAMQ7D,mBAAmByC,KAAyB,EAAiB;QACnE,IAAI,CAACA,OAAO,OAAO;QAEnB,MAAM0B,aAAa1B,MAAMR,KAAK,CAAC,OAAO,CAAC,EAAE,CAACG,IAAI;QAC9C,OAAO+B,cAAc;IACvB;AACF"}
|