@liascript/exporter 3.3.3--1.0.10 → 3.3.4--1.0.10

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 (25) hide show
  1. package/dist/assets/capacitor/{index.54530cdd.js → index.824c7649.js} +1 -1
  2. package/dist/assets/capacitor/index.html +1 -1
  3. package/dist/assets/capacitor/{jszip.min.dfe97abc.js → jszip.min.9da0258d.js} +1 -1
  4. package/dist/assets/indexeddb/{index.e14ebc2b.js → index.11cfd3a5.js} +1 -1
  5. package/dist/assets/indexeddb/{index.e704211b.js → index.2dc41135.js} +1 -1
  6. package/dist/assets/indexeddb/index.html +1 -1
  7. package/dist/assets/indexeddb/{jszip.min.19c66d77.js → jszip.min.eaecf580.js} +1 -1
  8. package/dist/assets/pdf/{index.c1ce18ee.js → index.374859b7.js} +1 -1
  9. package/dist/assets/pdf/index.html +1 -1
  10. package/dist/assets/{scorm1.2/jszip.min.63142cc8.js → pdf/jszip.min.4fbcc13f.js} +1 -1
  11. package/dist/assets/scorm1.2/{index.7e823f9b.js → index.ee6a673a.js} +1 -1
  12. package/dist/assets/scorm1.2/index.html +1 -1
  13. package/dist/assets/{pdf/jszip.min.63142cc8.js → scorm1.2/jszip.min.4fbcc13f.js} +1 -1
  14. package/dist/assets/xapi/{index.37324883.js → index.720250aa.js} +1 -1
  15. package/dist/assets/xapi/{index.efbd1f0a.js → index.9225cbf5.js} +1 -1
  16. package/dist/assets/xapi/index.html +1 -1
  17. package/dist/assets/xapi/{jszip.min.19c66d77.js → jszip.min.eaecf580.js} +1 -1
  18. package/dist/index.js +2 -2
  19. package/dist/server/public/app.js +2 -7
  20. package/dist/server/public/index.html +7 -7
  21. package/dist/server/public/locales/de.json +1 -0
  22. package/dist/server/public/locales/en.json +1 -0
  23. package/package.json +1 -1
  24. /package/dist/assets/{xapi → indexeddb}/jszip.min.4fbcc13f.js +0 -0
  25. /package/dist/assets/{indexeddb → xapi}/jszip.min.63142cc8.js +0 -0
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- var $3MWDR$xhr2=require("xhr2"),$3MWDR$minimist=require("minimist"),$3MWDR$liascriptsimplescormpackager=require("@liascript/simple-scorm-packager"),$3MWDR$path=require("path"),$3MWDR$fsextra=require("fs-extra"),$3MWDR$nodefetch=require("node-fetch"),$3MWDR$temp=require("temp"),$3MWDR$archiver=require("archiver"),$3MWDR$simplybeautiful=require("simply-beautiful"),$3MWDR$fs=require("fs"),$3MWDR$jsonld=require("jsonld"),$3MWDR$child_process=require("child_process"),$3MWDR$puppeteer=require("puppeteer"),$3MWDR$os=require("os"),$3MWDR$turbodocxhtmltodocx=require("@turbodocx/html-to-docx"),$3MWDR$yaml=require("yaml"),$3MWDR$fastify=require("fastify"),$3MWDR$fastifymultipart=require("@fastify/multipart"),$3MWDR$fastifystatic=require("@fastify/static"),$3MWDR$open=require("open"),$3MWDR$fspromises=require("fs/promises"),$3MWDR$crypto=require("crypto"),$3MWDR$unzipper=require("unzipper"),$3MWDR$isomorphicgit=require("isomorphic-git"),$3MWDR$isomorphicgithttpnode=require("isomorphic-git/http/node"),$3MWDR$events=require("events"),$parcel$global=globalThis;function $parcel$interopDefault(e){return e&&e.__esModule?e.default:e}var $baf47dd03acf10c1$exports={};$baf47dd03acf10c1$exports=JSON.parse('{"name":"@liascript/exporter","version":"3.3.3--1.0.10","description":"A generic exporter for LiaScript","main":"dist/index.js","repository":{"type":"git","url":"git://github.com/liascript/liascript-exporter.git"},"bugs":{"url":"https://github.com/LiaScript/LiaScript-Exporter/issues","email":"LiaScript@web.de"},"homepage":"https://github.com/LiaScript/LiaScript-Exporter/README.md","bin":{"liascript-exporter":"dist/index.js","liaex":"dist/index.js"},"preferGlobal":true,"files":["dist/","README.md"],"scripts":{"__postinstall":"npx puppeteer browsers install chrome","__preinstall":"cd LiaScript && npm i && npm run build:scorm1.2 && cp -r dist ../assets/scorm1.2","build:assets":"npm run clean && npm run asset:scorm1.2 && npm run asset:scorm2004 && npm run asset:xapi && npm run asset:web && npm run asset:indexeddb && npm run asset:pdf && npm run asset:capacitor && npm run asset:logo && npm run fix:file","build:docker":"docker build -t liascript/exporter:latest .","clean":"rm -rf dist/assets/*","asset:logo":"cp -r LiaScript/resources dist","asset:web":"cd LiaScript && npm i && npm run build:base && cp -r dist ../dist/assets/web","asset:pdf":"cd LiaScript && git stash && git checkout feat/fullPage && rm -rf node_modules && npm i && npm run build:pdf && cp -r dist ../dist/assets/pdf && git checkout development && rm -rf node_modules && npm i","asset:scorm1.2":"cd LiaScript && npm i && npm run build:scorm1.2 && cp -r dist ../dist/assets/scorm1.2","asset:scorm2004":"cd LiaScript && npm i && npm run build:scorm2004 && cp -r dist ../dist/assets/scorm2004","asset:indexeddb":"cd LiaScript && npm i && npm run build:indexeddb && cp -r dist ../dist/assets/indexeddb","asset:xapi":"cd LiaScript && npm i && npm run build:xapi && cp -r dist ../dist/assets/xapi","asset:capacitor":"cd LiaScript && git stash && git checkout feat/capacitor8 && rm -rf node_modules && npm i && npm run build:indexeddb && cp -r dist ../dist/assets/capacitor && git checkout development && rm -rf node_modules && npm i","asset:deduplicate":"./scripts/deduplicate-assets.sh","build":"npx parcel build --no-cache --no-source-maps src/index.ts && npm run shebang && npm run copy:public && npm run copy:presets","build:all":"npm run clean && npm run build:assets && npm run asset:deduplicate && cp -r dist/assets/common/* dist/assets/pdf && npm run build && npm run minify","build:debug":"npx parcel build --target node --no-minify --log-level 5 src/index.ts","watch":"npx parcel serve --no-cache --no-source-maps src/index.ts --out-dir dist --out-file index.js","copy:public":"node scripts/copy-files.js","copy:presets":"node scripts/copy-files.js presets","run:moodle":"cd docker/moodle && docker-compose up","run:ilias":"cd docker/ilias && docker-compose up","fix:file":"find dist/ -type f -name \\"*.js\\" -exec sed -i -r \'s/\\\\/\\\\(https\\\\?\\\\|file\\\\|ftp\\\\|\\\\(chrome\\\\|moz\\\\|safari-web\\\\)-extension\\\\):\\\\\\\\\\\\/\\\\\\\\\\\\/\\\\[/\\\\/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\\\\\\\\\\\/\\\\\\\\\\\\/\\\\\\\\\\\\/?[/g\' {} +","shebang":"node scripts/add-shebang.js","minify":"echo \'\'; printf \'%-60s %12s %12s %12s %10s\\\\n\' \'File\' \'Before\' \'After\' \'Reduced\' \'Savings\'; printf \'%-60s %12s %12s %12s %10s\\\\n\' \'----\' \'------\' \'-----\' \'-------\' \'-------\'; find dist -name \\"*.js\\" -print0 | xargs -0 -P 4 -I {} sh -c \'before=$(wc -c < {}); minify {} > {}.min && after=$(wc -c < {}.min); if [ ${after} -lt ${before} ]; then mv {}.min {}; reduction=$((${before}-${after})); percent=$(awk \\"BEGIN {printf \\\\\\"%.1f\\\\\\", ${reduction}/${before}*100}\\"); printf \\"%-60s %12s %12s %12s %9s%%\\\\n\\" \\"{}\\" \\"${before}\\" \\"${after}\\" \\"${reduction}\\" \\"${percent}\\"; else rm {}.min; printf \\"%-60s %12s %12s %12s %10s\\\\n\\" \\"{}\\" \\"${before}\\" \\"${after}\\" \\"-\\" \\"0.0%\\"; fi\'","electron:dev":"NODE_ENV=development electron electron/main.js","electron:build":"npm run build && electron-builder --config electron-builder.json","electron:build:quick":"npm run build && electron-builder --linux AppImage --x64 --config electron-builder.json","electron:build:win":"npm run build && electron-builder --win --config electron-builder.json","electron:build:mac":"npm run build && electron-builder --mac --config electron-builder.json","electron:build:linux":"npm run build && electron-builder --linux --config electron-builder.json","electron:build:all":"npm run build && electron-builder --win --mac --linux --config electron-builder.json","electron:pack":"npm run build && electron-builder --dir --config electron-builder.json"},"keywords":["LiaScript","SCORM","OER","Markdown","OER"],"author":"André Dietrich <Andre.Dietrich@informatik.tu-freiberg.de>","license":"ISC","dependencies":{"@fastify/multipart":"^8.1.0","@fastify/static":"^7.0.1","@lesjoursfr/html-to-epub":"^6.0.1","@liascript/simple-scorm-packager":"^0.3.0","@turbodocx/html-to-docx":"^1.20.1","archiver":"^7.0.1","electron-updater":"^6.8.9","epub-gen":"^0.1.0","fastify":"^4.26.0","fs-extra":"^11.3.3","isomorphic-git":"^1.38.4","jsonld":"^9.0.0","minimist":"^1.2.5","node-fetch":"^2.7.0","open":"^8.4.2","path":"^0.12.7","pino-pretty":"^13.0.0","puppeteer":"^24.34.0","simply-beautiful":"^1.0.1","temp":"^0.9.4","ts-node":"^10.9.2","typescript":"^5.9.3","unzipper":"^0.12.3","xhr2":"^0.2.1","yaml":"^2.8.2"},"devDependencies":{"@parcel/transformer-elm":"^2.16.3","@types/fs-extra":"^11.0.4","@types/node":"^20.19.27","@types/temp":"^0.9.1","@types/unzipper":"^0.10.11","electron":"^30.5.1","electron-builder":"^24.9.1","elm":"^0.19.1-6","parcel":"^2.16.3"},"puppeteer":{"chrome-headless-shell":{"skipDownload":true}},"engines":{"node":">= 12"},"targets":{"main":{"context":"node","optimize":true}}}');const $731e8d697db57a6f$var$GREEN="\x1b[32m",$731e8d697db57a6f$var$CYAN="\x1b[36m",$731e8d697db57a6f$var$YELLOW="\x1b[33m",$731e8d697db57a6f$var$RESET="\x1b[0m";function $731e8d697db57a6f$export$25e837046d67abc2(e){return`\x1b[32m${e}${$731e8d697db57a6f$var$RESET}`}function $731e8d697db57a6f$export$4b1de71c2aee5d84(e){return`\x1b[36m${e}${$731e8d697db57a6f$var$RESET}`}function $731e8d697db57a6f$export$46e4a324ac90507f(e){return $731e8d697db57a6f$export$425327af25286e5e($731e8d697db57a6f$export$73ba5813cda80a49(`\x1b[33m${e}${$731e8d697db57a6f$var$RESET}`))}function $731e8d697db57a6f$export$73ba5813cda80a49(e){return`\x1b[1m${e}${$731e8d697db57a6f$var$RESET}`}function $731e8d697db57a6f$export$5540da1282cbf565(e){return`\x1b[3m${e}${$731e8d697db57a6f$var$RESET}`}function $731e8d697db57a6f$export$425327af25286e5e(e){return`\x1b[4m${e}${$731e8d697db57a6f$var$RESET}`}function $731e8d697db57a6f$export$ae50443ffc990749(e,t,r,a=28){let n="",o=Math.max(0,a-(n=e?e.includes("\n")?$731e8d697db57a6f$export$25e837046d67abc2(e.replace("\n",""))+" "+$731e8d697db57a6f$export$73ba5813cda80a49($731e8d697db57a6f$export$4b1de71c2aee5d84(t)):$731e8d697db57a6f$export$25e837046d67abc2(e)+" "+$731e8d697db57a6f$export$73ba5813cda80a49($731e8d697db57a6f$export$4b1de71c2aee5d84(t)):$731e8d697db57a6f$export$73ba5813cda80a49($731e8d697db57a6f$export$4b1de71c2aee5d84(t))).replace(/\x1b\[\d+m/g,"").length),i=80-a,c=r.split(" "),u=[],s="";for(let e of c)(s+e).length>i&&s.length>0?(u.push(s.trim()),s=e+" "):s+=e+" ";s.trim().length>0&&u.push(s.trim()),console.log(n+" ".repeat(o)+u[0]);for(let e=1;e<u.length;e++)console.log(" ".repeat(a)+u[e])}function $731e8d697db57a6f$export$a80b3bd66acc52ff(e,t=0){let r=80-t,a=e.split(" "),n=[],o="";for(let e of a)(o+e).length>r&&o.length>0?(n.push(o.trim()),o=e+" "):o+=e+" ";o.trim().length>0&&n.push(o.trim());for(let e=0;e<n.length;e++)console.log(" ".repeat(t)+$731e8d697db57a6f$export$5540da1282cbf565(n[e]))}"use strict";const $070fc7e985d52a73$var$TEMP_DIR_PREFIX="lia",$070fc7e985d52a73$var$DIST_DIR_RELATIVE_PATH="../../dist",$070fc7e985d52a73$var$ZIP_COMPRESSION_LEVEL=9,$070fc7e985d52a73$var$RANDOM_STRING_LENGTH=16,$070fc7e985d52a73$var$RANDOM_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",$070fc7e985d52a73$var$BEAUTIFY_OPTIONS={indent_size:4,space_before_conditional:!0,jslint_happy:!0,max_char:0};function $070fc7e985d52a73$export$6b76988456c0292f(){return new Promise((e,t)=>{$3MWDR$temp.mkdir("lia",function(r,a){r?t(r):e(a)})})}function $070fc7e985d52a73$export$7f7b8152cc673abe(){let e=process.argv[1],t=$3MWDR$fs.realpathSync(e);return $3MWDR$path.dirname(t)}function $070fc7e985d52a73$export$e772c8ff12451969(e){return new Promise(t=>setTimeout(t,e))}function $070fc7e985d52a73$export$552bfb764b5cd2b4(e,t){return new Promise((r,a)=>{$3MWDR$fsextra.writeFile(e,t,function(e){e?a(e):r("ok")})})}function $070fc7e985d52a73$export$3032dc2899b8ea9b(e){return function(t,r){for(let r of $3MWDR$path.relative($3MWDR$path.resolve(e),t).split($3MWDR$path.sep))if(r.startsWith(".")||"node_modules"===r)return!1;return!0}}function $070fc7e985d52a73$export$31a09876afc8115c(e,t){return $070fc7e985d52a73$export$a976684a0efeb93f(`<script src="https://code.responsivevoice.org/responsivevoice.js?key=${e}"></script>`,t)}function $070fc7e985d52a73$export$a976684a0efeb93f(e,t,r=!1){return"boolean"==typeof r?r?t.replace("<head>","<head>"+e):t.replace("</head>",e+"</head>"):r.startsWith("</")?t.replace(r,e+r):t.replace(r,r+e)}function $070fc7e985d52a73$export$bab98af026af71ac(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("file://")}async function $070fc7e985d52a73$export$8cde213409fd6377(e,t,r,a,n,o){return await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(e,t),$070fc7e985d52a73$export$1b80ed980367b7c1(`<!DOCTYPE html>
3
+ var $3MWDR$xhr2=require("xhr2"),$3MWDR$minimist=require("minimist"),$3MWDR$liascriptsimplescormpackager=require("@liascript/simple-scorm-packager"),$3MWDR$path=require("path"),$3MWDR$fsextra=require("fs-extra"),$3MWDR$nodefetch=require("node-fetch"),$3MWDR$temp=require("temp"),$3MWDR$archiver=require("archiver"),$3MWDR$simplybeautiful=require("simply-beautiful"),$3MWDR$fs=require("fs"),$3MWDR$jsonld=require("jsonld"),$3MWDR$child_process=require("child_process"),$3MWDR$puppeteer=require("puppeteer"),$3MWDR$os=require("os"),$3MWDR$turbodocxhtmltodocx=require("@turbodocx/html-to-docx"),$3MWDR$yaml=require("yaml"),$3MWDR$fastify=require("fastify"),$3MWDR$fastifymultipart=require("@fastify/multipart"),$3MWDR$fastifystatic=require("@fastify/static"),$3MWDR$open=require("open"),$3MWDR$fspromises=require("fs/promises"),$3MWDR$crypto=require("crypto"),$3MWDR$unzipper=require("unzipper"),$3MWDR$isomorphicgit=require("isomorphic-git"),$3MWDR$isomorphicgithttpnode=require("isomorphic-git/http/node"),$3MWDR$events=require("events"),$parcel$global=globalThis;function $parcel$interopDefault(e){return e&&e.__esModule?e.default:e}var $baf47dd03acf10c1$exports={};$baf47dd03acf10c1$exports=JSON.parse('{"name":"@liascript/exporter","version":"3.3.4--1.0.10","description":"A generic exporter for LiaScript","main":"dist/index.js","repository":{"type":"git","url":"git://github.com/liascript/liascript-exporter.git"},"bugs":{"url":"https://github.com/LiaScript/LiaScript-Exporter/issues","email":"LiaScript@web.de"},"homepage":"https://github.com/LiaScript/LiaScript-Exporter/README.md","bin":{"liascript-exporter":"dist/index.js","liaex":"dist/index.js"},"preferGlobal":true,"files":["dist/","README.md"],"scripts":{"__postinstall":"npx puppeteer browsers install chrome","__preinstall":"cd LiaScript && npm i && npm run build:scorm1.2 && cp -r dist ../assets/scorm1.2","build:assets":"npm run clean && npm run asset:scorm1.2 && npm run asset:scorm2004 && npm run asset:xapi && npm run asset:web && npm run asset:indexeddb && npm run asset:pdf && npm run asset:capacitor && npm run asset:logo && npm run fix:file","build:docker":"docker build -t liascript/exporter:latest .","clean":"rm -rf dist/assets/*","asset:logo":"cp -r LiaScript/resources dist","asset:web":"cd LiaScript && npm i && npm run build:base && cp -r dist ../dist/assets/web","asset:pdf":"cd LiaScript && git stash && git checkout feat/fullPage && rm -rf node_modules && npm i && npm run build:pdf && cp -r dist ../dist/assets/pdf && git checkout development && rm -rf node_modules && npm i","asset:scorm1.2":"cd LiaScript && npm i && npm run build:scorm1.2 && cp -r dist ../dist/assets/scorm1.2","asset:scorm2004":"cd LiaScript && npm i && npm run build:scorm2004 && cp -r dist ../dist/assets/scorm2004","asset:indexeddb":"cd LiaScript && npm i && npm run build:indexeddb && cp -r dist ../dist/assets/indexeddb","asset:xapi":"cd LiaScript && npm i && npm run build:xapi && cp -r dist ../dist/assets/xapi","asset:capacitor":"cd LiaScript && git stash && git checkout feat/capacitor8 && rm -rf node_modules && npm i && npm run build:indexeddb && cp -r dist ../dist/assets/capacitor && git checkout development && rm -rf node_modules && npm i","asset:deduplicate":"./scripts/deduplicate-assets.sh","build":"npx parcel build --no-cache --no-source-maps src/index.ts && npm run shebang && npm run copy:public && npm run copy:presets","build:all":"npm run clean && npm run build:assets && npm run asset:deduplicate && cp -r dist/assets/common/* dist/assets/pdf && npm run build && npm run minify","build:debug":"npx parcel build --target node --no-minify --log-level 5 src/index.ts","watch":"npx parcel serve --no-cache --no-source-maps src/index.ts --out-dir dist --out-file index.js","copy:public":"node scripts/copy-files.js","copy:presets":"node scripts/copy-files.js presets","run:moodle":"cd docker/moodle && docker-compose up","run:ilias":"cd docker/ilias && docker-compose up","fix:file":"find dist/ -type f -name \\"*.js\\" -exec sed -i -r \'s/\\\\/\\\\(https\\\\?\\\\|file\\\\|ftp\\\\|\\\\(chrome\\\\|moz\\\\|safari-web\\\\)-extension\\\\):\\\\\\\\\\\\/\\\\\\\\\\\\/\\\\[/\\\\/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\\\\\\\\\\\/\\\\\\\\\\\\/\\\\\\\\\\\\/?[/g\' {} +","shebang":"node scripts/add-shebang.js","minify":"echo \'\'; printf \'%-60s %12s %12s %12s %10s\\\\n\' \'File\' \'Before\' \'After\' \'Reduced\' \'Savings\'; printf \'%-60s %12s %12s %12s %10s\\\\n\' \'----\' \'------\' \'-----\' \'-------\' \'-------\'; find dist -name \\"*.js\\" -print0 | xargs -0 -P 4 -I {} sh -c \'before=$(wc -c < {}); minify {} > {}.min && after=$(wc -c < {}.min); if [ ${after} -lt ${before} ]; then mv {}.min {}; reduction=$((${before}-${after})); percent=$(awk \\"BEGIN {printf \\\\\\"%.1f\\\\\\", ${reduction}/${before}*100}\\"); printf \\"%-60s %12s %12s %12s %9s%%\\\\n\\" \\"{}\\" \\"${before}\\" \\"${after}\\" \\"${reduction}\\" \\"${percent}\\"; else rm {}.min; printf \\"%-60s %12s %12s %12s %10s\\\\n\\" \\"{}\\" \\"${before}\\" \\"${after}\\" \\"-\\" \\"0.0%\\"; fi\'","electron:dev":"NODE_ENV=development electron electron/main.js","electron:build":"npm run build && electron-builder --config electron-builder.json","electron:build:quick":"npm run build && electron-builder --linux AppImage --x64 --config electron-builder.json","electron:build:win":"npm run build && electron-builder --win --config electron-builder.json","electron:build:mac":"npm run build && electron-builder --mac --config electron-builder.json","electron:build:linux":"npm run build && electron-builder --linux --config electron-builder.json","electron:build:all":"npm run build && electron-builder --win --mac --linux --config electron-builder.json","electron:pack":"npm run build && electron-builder --dir --config electron-builder.json"},"keywords":["LiaScript","SCORM","OER","Markdown","OER"],"author":"André Dietrich <Andre.Dietrich@informatik.tu-freiberg.de>","license":"ISC","dependencies":{"@fastify/multipart":"^8.1.0","@fastify/static":"^7.0.1","@lesjoursfr/html-to-epub":"^6.0.1","@liascript/simple-scorm-packager":"^0.3.0","@turbodocx/html-to-docx":"^1.20.1","archiver":"^7.0.1","electron-updater":"^6.8.9","epub-gen":"^0.1.0","fastify":"^4.26.0","fs-extra":"^11.3.3","isomorphic-git":"^1.38.4","jsonld":"^9.0.0","minimist":"^1.2.5","node-fetch":"^2.7.0","open":"^8.4.2","path":"^0.12.7","pino-pretty":"^13.0.0","puppeteer":"^24.34.0","simply-beautiful":"^1.0.1","temp":"^0.9.4","ts-node":"^10.9.2","typescript":"^5.9.3","unzipper":"^0.12.3","xhr2":"^0.2.1","yaml":"^2.8.2"},"devDependencies":{"@parcel/transformer-elm":"^2.16.3","@types/fs-extra":"^11.0.4","@types/node":"^20.19.27","@types/temp":"^0.9.1","@types/unzipper":"^0.10.11","electron":"^30.5.1","electron-builder":"^24.9.1","elm":"^0.19.1-6","parcel":"^2.16.3"},"puppeteer":{"chrome-headless-shell":{"skipDownload":true}},"engines":{"node":">= 12"},"targets":{"main":{"context":"node","optimize":true}}}');const $731e8d697db57a6f$var$GREEN="\x1b[32m",$731e8d697db57a6f$var$CYAN="\x1b[36m",$731e8d697db57a6f$var$YELLOW="\x1b[33m",$731e8d697db57a6f$var$RESET="\x1b[0m";function $731e8d697db57a6f$export$25e837046d67abc2(e){return`\x1b[32m${e}${$731e8d697db57a6f$var$RESET}`}function $731e8d697db57a6f$export$4b1de71c2aee5d84(e){return`\x1b[36m${e}${$731e8d697db57a6f$var$RESET}`}function $731e8d697db57a6f$export$46e4a324ac90507f(e){return $731e8d697db57a6f$export$425327af25286e5e($731e8d697db57a6f$export$73ba5813cda80a49(`\x1b[33m${e}${$731e8d697db57a6f$var$RESET}`))}function $731e8d697db57a6f$export$73ba5813cda80a49(e){return`\x1b[1m${e}${$731e8d697db57a6f$var$RESET}`}function $731e8d697db57a6f$export$5540da1282cbf565(e){return`\x1b[3m${e}${$731e8d697db57a6f$var$RESET}`}function $731e8d697db57a6f$export$425327af25286e5e(e){return`\x1b[4m${e}${$731e8d697db57a6f$var$RESET}`}function $731e8d697db57a6f$export$ae50443ffc990749(e,t,r,a=28){let n="",o=Math.max(0,a-(n=e?e.includes("\n")?$731e8d697db57a6f$export$25e837046d67abc2(e.replace("\n",""))+" "+$731e8d697db57a6f$export$73ba5813cda80a49($731e8d697db57a6f$export$4b1de71c2aee5d84(t)):$731e8d697db57a6f$export$25e837046d67abc2(e)+" "+$731e8d697db57a6f$export$73ba5813cda80a49($731e8d697db57a6f$export$4b1de71c2aee5d84(t)):$731e8d697db57a6f$export$73ba5813cda80a49($731e8d697db57a6f$export$4b1de71c2aee5d84(t))).replace(/\x1b\[\d+m/g,"").length),i=80-a,c=r.split(" "),u=[],s="";for(let e of c)(s+e).length>i&&s.length>0?(u.push(s.trim()),s=e+" "):s+=e+" ";s.trim().length>0&&u.push(s.trim()),console.log(n+" ".repeat(o)+u[0]);for(let e=1;e<u.length;e++)console.log(" ".repeat(a)+u[e])}function $731e8d697db57a6f$export$a80b3bd66acc52ff(e,t=0){let r=80-t,a=e.split(" "),n=[],o="";for(let e of a)(o+e).length>r&&o.length>0?(n.push(o.trim()),o=e+" "):o+=e+" ";o.trim().length>0&&n.push(o.trim());for(let e=0;e<n.length;e++)console.log(" ".repeat(t)+$731e8d697db57a6f$export$5540da1282cbf565(n[e]))}"use strict";const $070fc7e985d52a73$var$TEMP_DIR_PREFIX="lia",$070fc7e985d52a73$var$DIST_DIR_RELATIVE_PATH="../../dist",$070fc7e985d52a73$var$ZIP_COMPRESSION_LEVEL=9,$070fc7e985d52a73$var$RANDOM_STRING_LENGTH=16,$070fc7e985d52a73$var$RANDOM_CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",$070fc7e985d52a73$var$BEAUTIFY_OPTIONS={indent_size:4,space_before_conditional:!0,jslint_happy:!0,max_char:0};function $070fc7e985d52a73$export$6b76988456c0292f(){return new Promise((e,t)=>{$3MWDR$temp.mkdir("lia",function(r,a){r?t(r):e(a)})})}function $070fc7e985d52a73$export$7f7b8152cc673abe(){let e=process.argv[1],t=$3MWDR$fs.realpathSync(e);return $3MWDR$path.dirname(t)}function $070fc7e985d52a73$export$e772c8ff12451969(e){return new Promise(t=>setTimeout(t,e))}function $070fc7e985d52a73$export$552bfb764b5cd2b4(e,t){return new Promise((r,a)=>{$3MWDR$fsextra.writeFile(e,t,function(e){e?a(e):r("ok")})})}function $070fc7e985d52a73$export$3032dc2899b8ea9b(e){return function(t,r){for(let r of $3MWDR$path.relative($3MWDR$path.resolve(e),t).split($3MWDR$path.sep))if(r.startsWith(".")||"node_modules"===r)return!1;return!0}}function $070fc7e985d52a73$export$31a09876afc8115c(e,t){return $070fc7e985d52a73$export$a976684a0efeb93f(`<script src="https://code.responsivevoice.org/responsivevoice.js?key=${e}"></script>`,t)}function $070fc7e985d52a73$export$a976684a0efeb93f(e,t,r=!1){return"boolean"==typeof r?r?t.replace("<head>","<head>"+e):t.replace("</head>",e+"</head>"):r.startsWith("</")?t.replace(r,e+r):t.replace(r,r+e)}function $070fc7e985d52a73$export$bab98af026af71ac(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("file://")}async function $070fc7e985d52a73$export$8cde213409fd6377(e,t,r,a,n,o){return await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(e,t),$070fc7e985d52a73$export$1b80ed980367b7c1(`<!DOCTYPE html>
4
4
  <html style="height:100%; overflow: hidden">
5
5
  <head>
6
6
  ${a}
@@ -669,7 +669,7 @@ ${o}
669
669
  window.LIA = {}
670
670
  }
671
671
  window.LIA.defaultCourseURL = "${$3MWDR$path.basename(t)}"
672
- </script>`,e)}function $6316d14f44a21285$var$updateMetadata(e,t,r){var a,n,o,i,c,u;let s=e;try{let e=null==(a=t.lia)?void 0:a.str_title;e&&(s=s.replace("<title>Lia</title>",`<title>${e}</title><meta property="og:title" content="${e}"> <meta name="twitter:title" content="${e}">`),console.log("updating title ..."))}catch(e){r.push({step:"Update title",error:e,critical:!1})}try{let e=null==(i=t.lia)||null==(o=i.definition)||null==(n=o.macro)?void 0:n.comment;e&&(s=s.replace('<meta name="description" content="LiaScript is a service for running free and interactive online courses, build with its own Markup-language. So check out the following course ;-)">',`<meta name="description" content="${e}"><meta property="og:description" content="${e}"><meta name="twitter:description" content="${e}">`),console.log("updating description ..."))}catch(e){r.push({step:"Update description",error:e,critical:!1})}try{let e=null==(u=t.lia)||null==(c=u.definition)?void 0:c.logo;e&&(s=$070fc7e985d52a73$export$a976684a0efeb93f(`<meta property="og:image" content="${e}"><meta name="twitter:image" content="${e}">`,s),console.log("updating logo ..."))}catch(e){r.push({step:"Update logo",error:e,critical:!1})}return s}async function $6316d14f44a21285$var$writeOutput(e,t,r,a,n,o){try{n["web-iframe"]?(await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(e,$6316d14f44a21285$var$START_HTML_FILE),t),await $070fc7e985d52a73$export$8cde213409fd6377(e,$6316d14f44a21285$var$HTML_FILE,r,a,n.style,$6316d14f44a21285$var$START_HTML_FILE)):(t=$070fc7e985d52a73$export$a976684a0efeb93f(a,t),t=$070fc7e985d52a73$export$1b80ed980367b7c1(t),await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(e,$6316d14f44a21285$var$HTML_FILE),t))}catch(e){throw o.push({step:"Write output",error:e,critical:!0}),e}}async function $6316d14f44a21285$var$finalizeOutput(e,t){t["web-zip"]?await $070fc7e985d52a73$export$8901015135f2fb22(e,t.output):(await $3MWDR$fsextra.ensureDir(t.output),await $3MWDR$fsextra.copy(e,t.output,{filter:$070fc7e985d52a73$export$3032dc2899b8ea9b(e),overwrite:!0}),await $3MWDR$fsextra.remove(e))}var $2e8a8687471857f8$export$b7ce4444e8ed02dc=function(e){return e.JSON="json",e.FULL_JSON="fulljson",e}({}),$2e8a8687471857f8$export$d8c230555f857aaf=function(e){return e.DEBUG="debug",e.FILE="file",e.TEMPLATE="template",e}({});class $1ecd50621e2824d1$export$a46f15a9a9fee68a{async run(e){let t=$53c0743dc086b130$exports.Elm.Worker.init({flags:{cmd:""}});this.setupHelperPort(t,e),this.setupOutputPort(t,e),await this.initiateExport(t,e)}setupHelperPort(e,t){e.ports.helper.subscribe(async([r,a])=>{switch(r){case $2e8a8687471857f8$export$d8c230555f857aaf.DEBUG:console.warn("DEBUG",a);break;case $2e8a8687471857f8$export$d8c230555f857aaf.FILE:let n=$parcel$interopDefault($3MWDR$path).resolve($parcel$interopDefault($3MWDR$path).dirname(t.input),a);console.warn("loading:",n);let o=$parcel$interopDefault($3MWDR$fsextra).readFileSync(n,"utf8");e.ports.input.send([$2e8a8687471857f8$export$d8c230555f857aaf.TEMPLATE,a,o]);break;default:console.warn("unknown command:",r,a)}})}setupOutputPort(e,t){e.ports.output.subscribe(r=>{let[a,n]=r;a?this.handleExportOutput(t,n,e):console.warn("Export failed:",n)})}handleExportOutput(e,t,r){switch(e.format){case $2e8a8687471857f8$export$b7ce4444e8ed02dc.JSON:case $2e8a8687471857f8$export$b7ce4444e8ed02dc.FULL_JSON:this.exportJson(e,t);break;case"rdf":$58867fee6a9ce3e2$export$372e2d09604f52f0(e,JSON.parse(t));break;case $455519058ce391fd$export$d9468344d3651243:this.exportScorm12(e,JSON.parse(t));break;case $f3a76b91a4865d74$export$d9468344d3651243:this.exportScorm2004(e,JSON.parse(t));break;case"ims":$7eeb04a4e678ba02$export$372e2d09604f52f0(e,JSON.parse(t));break;case"web":$6316d14f44a21285$export$372e2d09604f52f0(e,JSON.parse(t));break;case"pdf":$2358171a5699e480$export$372e2d09604f52f0(e);break;case $02e6fd5277cb1195$export$d9468344d3651243:$02e6fd5277cb1195$export$372e2d09604f52f0(e,JSON.parse(t));break;case $8c3498a62706068d$export$d9468344d3651243:$8c3498a62706068d$export$372e2d09604f52f0(e);break;case $42514d84790f50f1$export$d9468344d3651243:$42514d84790f50f1$export$372e2d09604f52f0(e,JSON.parse(t));break;case $b3496016a321b67a$export$d9468344d3651243:$b3496016a321b67a$export$372e2d09604f52f0(e,JSON.parse(t));break;case $6e87a9adb423ec83$export$d9468344d3651243:this.handleProjectExport(e,JSON.parse(t),r);break;default:console.warn("unknown output format",e.format)}}exportJson(e,t){$parcel$interopDefault($3MWDR$fsextra).writeFile(e.output+".json",t,function(e){e&&console.error(e)})}exportScorm12(e,t){(e["scorm-embed"]||e["lia-subfolder"])&&(e["scorm-embed"]=this.embed),$455519058ce391fd$export$372e2d09604f52f0(e,t)}exportScorm2004(e,t){(e["scorm-embed"]||e["lia-subfolder"])&&(e["scorm-embed"]=this.embed),$f3a76b91a4865d74$export$372e2d09604f52f0(e,t)}handleProjectExport(e,t,r){if(this.collection)try{$6e87a9adb423ec83$export$6930dbd384916ad6(this.collection,t);let a=$6e87a9adb423ec83$export$ee97db0b1eaef5b1(this.collection);a?(console.warn("loading:",a),r.ports.input.send([$2e8a8687471857f8$export$b7ce4444e8ed02dc.FULL_JSON,a])):$6e87a9adb423ec83$export$372e2d09604f52f0(e,this.collection)}catch(e){console.warn("project export error:",e)}}async initiateExport(e,t){try{let r=this.determineInternalFormat(t.format);t.format===$6e87a9adb423ec83$export$d9468344d3651243?await this.handleProjectInput(e,t,r):$070fc7e985d52a73$export$bab98af026af71ac(t.input)?"pdf"===t.format?await $2358171a5699e480$export$372e2d09604f52f0(t):t.format===$8c3498a62706068d$export$d9468344d3651243?await $8c3498a62706068d$export$372e2d09604f52f0(t):"rdf"===t.format?await this.handleUrlInput(e,t,r):console.warn("URLs are not allowed as input"):await this.handleFileInput(e,t,r)}catch(e){console.error(e)}}determineInternalFormat(e){return e==$455519058ce391fd$export$d9468344d3651243||e==$f3a76b91a4865d74$export$d9468344d3651243||"pdf"==e||e==$02e6fd5277cb1195$export$d9468344d3651243||e==$8c3498a62706068d$export$d9468344d3651243||"web"==e||"ims"==e||e==$42514d84790f50f1$export$d9468344d3651243||"rdf"==e||e==$b3496016a321b67a$export$d9468344d3651243||e==$6e87a9adb423ec83$export$d9468344d3651243||e==$02e6fd5277cb1195$export$d9468344d3651243?$2e8a8687471857f8$export$b7ce4444e8ed02dc.FULL_JSON:e}async handleProjectInput(e,t,r){let a=$parcel$interopDefault($3MWDR$fsextra).readFileSync(t.input,"utf8");if(this.collection=$parcel$interopDefault($3MWDR$yaml).parse(a),this.collection){let a=$6e87a9adb423ec83$export$ee97db0b1eaef5b1(this.collection);null===a?$6e87a9adb423ec83$export$372e2d09604f52f0(t,this.collection):(console.warn("loading:",a),e.ports.input.send([r,a]))}}async handleFileInput(e,t,r){let a=$parcel$interopDefault($3MWDR$fsextra).readFileSync(t.input,"utf8");this.embed=a,e.ports.input.send([r,a])}async handleUrlInput(e,t,r){let a=await $parcel$interopDefault($3MWDR$nodefetch)(t.input,{}),n=await a.text();n&&e.ports.input.send([r,n])}constructor(){this.collection=null,this.embed=void 0}}async function $e87da97f5f05ff96$export$6411c5cbab21135b(e,t){return new Promise((r,a)=>{(0,$3MWDR$fs.createReadStream)(e).pipe($parcel$interopDefault($3MWDR$unzipper).Extract({path:t})).on("close",r).on("error",a)})}async function $e87da97f5f05ff96$var$findMarkdownFiles(e,t=[]){for(let r of(await (0,$3MWDR$fspromises.readdir)(e))){let a=(0,$3MWDR$path.join)(e,r),n=await (0,$3MWDR$fspromises.stat)(a);n.isDirectory()?r.startsWith(".")||"node_modules"===r||"dist"===r||"build"===r||await $e87da97f5f05ff96$var$findMarkdownFiles(a,t):n.isFile()&&".md"===(0,$3MWDR$path.extname)(r).toLowerCase()&&t.push(a)}return t}async function $e87da97f5f05ff96$export$8bdb062a90752518(e){let t=await $e87da97f5f05ff96$var$findMarkdownFiles(e);if(0===t.length)return null;let r=t.find(e=>{var t;return"readme.md"===(null==(t=e.split("/").pop())?void 0:t.toLowerCase())});return r||t[0]}function $e87da97f5f05ff96$export$a0c027876dc9c378(e){return".zip"===(0,$3MWDR$path.extname)(e).toLowerCase()}async function $e87da97f5f05ff96$export$932e912380fe3c6f(e,t,r,a){try{console.log(`Cloning git repository: ${e}${r?` (branch: ${r})`:""}`),await $parcel$interopDefault($3MWDR$isomorphicgit).clone({fs:$parcel$interopDefault($3MWDR$fs),http:$parcel$interopDefault($3MWDR$isomorphicgithttpnode),dir:t,url:e,ref:r,singleBranch:!0,depth:1});let n=a?(0,$3MWDR$path.join)(t,a):t;try{await (0,$3MWDR$fspromises.stat)(n)}catch(e){throw Error(`Subdirectory '${a}' not found in cloned repository`)}return n}catch(e){throw console.error("Git clone failed:",e),Error(`Failed to clone git repository: ${e.message}`)}}async function $e87da97f5f05ff96$export$395d666fc5698bcd(e){try{await (0,$3MWDR$fspromises.rm)(e,{recursive:!0,force:!0})}catch(t){console.warn(`Failed to remove directory ${e}:`,t)}}var $0f35a80f13da4532$var$$parcel$__dirname=$3MWDR$path.resolve(__dirname,"../src/server/routes");const $0f35a80f13da4532$export$2cdb3bba44f39bdb=async e=>{e.get("/presets",async(e,t)=>{try{let e="";if(process.versions.electron)if($0f35a80f13da4532$var$$parcel$__dirname.includes("src/server"))e=(0,$3MWDR$path.join)($0f35a80f13da4532$var$$parcel$__dirname,"..","..","presets.yaml");else{let t=process.resourcesPath||(0,$3MWDR$path.join)($0f35a80f13da4532$var$$parcel$__dirname,"../..");e=(0,$3MWDR$path.join)(t,"app.asar.unpacked","dist","presets.yaml")}else{let t=(0,$3MWDR$path.dirname)((0,$3MWDR$fs.realpathSync)(process.argv[1])),r=[(0,$3MWDR$path.join)(t,"presets.yaml"),(0,$3MWDR$path.join)(process.cwd(),"dist","presets.yaml"),(0,$3MWDR$path.join)(process.cwd(),"src","presets.yaml")];for(let t of r)try{await (0,$3MWDR$fspromises.readFile)(t,"utf-8"),e=t;break}catch{}e||(e=r[0])}let t=await (0,$3MWDR$fspromises.readFile)(e,"utf-8"),r=$3MWDR$yaml.parse(t);if(!r||!r.presets)throw Error("Invalid presets file structure");return{presets:r.presets}}catch(e){return console.error("Failed to load presets:",e),t.code(500).send({error:"Failed to load presets configuration"})}}),e.post("/export",async(t,r)=>{try{let a=await t.body,n={source:{},target:{},options:{}};if(t.isMultipart()){let a=t.parts(),o=[],i=(0,$3MWDR$crypto.randomUUID)(),c=(0,$3MWDR$path.join)((0,$3MWDR$os.tmpdir)(),"liaex-uploads",i);for await(let e of(await (0,$3MWDR$fspromises.mkdir)(c,{recursive:!0}),a))if("file"===e.type){let t=(0,$3MWDR$path.join)(c,e.filename),r=await e.toBuffer();await (0,$3MWDR$fspromises.writeFile)(t,new Uint8Array(r)),o.push({filename:e.filename,path:t,mimetype:e.mimetype})}else{let t=e.fieldname,r=e.value;if("preset"===t)n.target.preset=r;else if("format"===t)n.target.format=r;else if("gitUrl"===t)n.source.gitUrl=r;else if("gitBranch"===t)n.source.gitBranch=r;else if("gitSubdir"===t)n.source.gitSubdir=r;else if("gitFile"===t)n.source.gitFile=r;else if(t.startsWith("option_")){let e=t.substring(7);n.options[e]=r}}if(o.length>0){n.source.type="upload",n.source.files=o,n.source.uploadDir=c;let t=o.find(e=>$e87da97f5f05ff96$export$a0c027876dc9c378(e.filename));if(t){e.log.info(`Extracting ZIP file: ${t.filename}`);let a=(0,$3MWDR$path.join)(c,"extracted");await (0,$3MWDR$fspromises.mkdir)(a,{recursive:!0}),await $e87da97f5f05ff96$export$6411c5cbab21135b(t.path,a),e.log.info(`ZIP extracted to: ${a}`);let o=await $e87da97f5f05ff96$export$8bdb062a90752518(a);if(!o)return r.code(400).send({error:"No markdown file found in ZIP archive. Please include a README.md or any .md file."});e.log.info(`Found main markdown: ${o}`),n.source.mainFile=o,n.source.extractedFrom=t.filename}}else{if(!n.source.gitUrl)return r.code(400).send({error:"No files uploaded and no git URL provided"});n.source.type="git",e.log.info(`Cloning git repository: ${n.source.gitUrl}`);let t=(0,$3MWDR$crypto.randomUUID)(),a=(0,$3MWDR$path.join)((0,$3MWDR$os.tmpdir)(),"liaex-git",t);await (0,$3MWDR$fspromises.mkdir)(a,{recursive:!0});try{let t=await $e87da97f5f05ff96$export$932e912380fe3c6f(n.source.gitUrl,a,n.source.gitBranch,n.source.gitSubdir);e.log.info(`Git repository cloned to: ${t}`);let o=null;if(n.source.gitFile){let e=(0,$3MWDR$path.join)(t,n.source.gitFile);try{await (0,$3MWDR$fspromises.access)(e),o=e}catch{return r.code(400).send({error:`Specified file not found in repository: ${n.source.gitFile}`})}}else if(!(o=await $e87da97f5f05ff96$export$8bdb062a90752518(t)))return r.code(400).send({error:"No markdown file found in Git repository. Please include a README.md or any .md file."});e.log.info(`Found main markdown: ${o}`),n.source.mainFile=o,n.source.cloneDir=a,n.source.repoPath=t}catch(t){return e.log.error(`Failed to clone git repository: ${t.message}`),r.code(400).send({error:`Failed to clone git repository: ${t.message}`})}}}else{if(!a.gitUrl)return r.code(400).send({error:"Invalid request format"});n.source.type="git",n.source.gitUrl=a.gitUrl,n.source.gitBranch=a.gitBranch,n.source.gitSubdir=a.gitSubdir,n.source.gitFile=a.gitFile,n.target=a.target||{},n.options=a.options||{}}let o=$f6a6722fcde1ce8b$export$c8ba420abe2b422f.addJob(n);return r.send(o)}catch(t){return e.log.error(t),r.code(500).send({error:"Failed to create export job",message:t.message})}}),e.get("/job/:jobId",async(e,t)=>{let{jobId:r}=e.params,a=$f6a6722fcde1ce8b$export$c8ba420abe2b422f.getJob(r);if(!a)return t.code(404).send({error:"Job not found"});let n=$f6a6722fcde1ce8b$export$c8ba420abe2b422f.getQueuePosition(r);return t.send({job:a,queuePosition:n})}),e.get("/queue",async(e,t)=>t.send($f6a6722fcde1ce8b$export$c8ba420abe2b422f.getQueueStatus())),e.get("/download/:jobId",async(t,r)=>{let{jobId:a}=t.params,n=$f6a6722fcde1ce8b$export$c8ba420abe2b422f.getJob(a);if(!n)return r.code(404).send({error:"Job not found"});if("completed"!==n.status)return r.code(400).send({error:"Job not completed yet"});if(!n.result||!n.result.outputPath)return r.code(404).send({error:"Export file not found"});try{let e=await (0,$3MWDR$fspromises.readFile)(n.result.outputPath),t=n.result.filename||(0,$3MWDR$path.basename)(n.result.outputPath),a="application/octet-stream";return t.endsWith(".zip")?a="application/zip":t.endsWith(".pdf")?a="application/pdf":t.endsWith(".apk")?a="application/vnd.android.package-archive":t.endsWith(".epub")?a="application/epub+zip":t.endsWith(".docx")?a="application/vnd.openxmlformats-officedocument.wordprocessingml.document":t.endsWith(".html")&&(a="text/html"),r.header("Content-Disposition",`attachment; filename="${t}"`),r.type(a),r.send(e)}catch(t){return e.log.error(t),r.code(500).send({error:"Failed to download file",message:t.message})}})};var $54ebfb3440440ead$var$$parcel$__dirname=$3MWDR$path.resolve(__dirname,"../src/server/queue");class $54ebfb3440440ead$export$17699a8dbc199223 extends $3MWDR$events.EventEmitter{addJob(e){let t={...e,id:(0,$3MWDR$crypto.randomUUID)(),status:"queued",createdAt:new Date};this.queue.push(t);let r=this.queue.length+ +!!this.currentJob;return this.emit("job-added",t),this.isProcessing||this.processNext(),{jobId:t.id,queuePosition:r}}getJob(e){var t;if((null==(t=this.currentJob)?void 0:t.id)===e)return this.currentJob;let r=this.queue.find(t=>t.id===e);return r||this.completedJobs.get(e)}getQueuePosition(e){var t;if((null==(t=this.currentJob)?void 0:t.id)===e)return 0;let r=this.queue.findIndex(t=>t.id===e);return r>=0?r+1:-1}async processNext(){if(!this.isProcessing&&0!==this.queue.length){this.isProcessing=!0,this.currentJob=this.queue.shift(),this.currentJob.status="processing",this.currentJob.startedAt=new Date,this.emit("job-started",this.currentJob);try{await this.performExport(this.currentJob),this.currentJob.status="completed",this.currentJob.completedAt=new Date,this.emit("job-completed",this.currentJob)}catch(e){this.currentJob.status="failed",this.currentJob.error=e.message,this.currentJob.completedAt=new Date,this.emit("job-failed",this.currentJob)}finally{if(this.currentJob&&(this.completedJobs.set(this.currentJob.id,this.currentJob),this.completedJobs.size>this.maxCompletedJobs)){let e=this.completedJobs.keys().next().value;e&&this.completedJobs.delete(e)}this.currentJob=null,this.isProcessing=!1,this.queue.length>0&&setImmediate(()=>this.processNext())}}}async loadPresets(){if(!this.presetsConfig)try{let e=$3MWDR$path.join($54ebfb3440440ead$var$$parcel$__dirname,"..","..","dist"),t=$3MWDR$path.join(e,"presets.yaml");try{await $3MWDR$fsextra.readFile(t,"utf-8")}catch{t=$3MWDR$path.join(process.cwd(),"dist","presets.yaml")}let r=await $3MWDR$fsextra.readFile(t,"utf-8");this.presetsConfig=$3MWDR$yaml.parse(r),console.log("Loaded presets configuration")}catch(e){console.error("Failed to load presets:",e),this.presetsConfig={presets:[]}}}async performExport(e){return new Promise(async(t,r)=>{try{var a,n,o;let i,c,u;if(await this.loadPresets(),"upload"===e.source.type&&e.source.files&&e.source.files.length>0)if(e.source.mainFile)i=e.source.mainFile,console.log(`Using main markdown from ZIP: ${i}`);else{let t=e.source.files.find(e=>"README.md"===e.filename||e.filename.toLowerCase().endsWith(".md"));i=t?t.path:e.source.files[0].path}else if("git"===e.source.type&&e.source.gitUrl)if(e.source.mainFile)i=e.source.mainFile,console.log(`Using main markdown from Git: ${i}`);else throw Error("No main file found in Git repository");else throw Error("No valid input source");let s={};if(e.target.preset){let t=null==(o=this.presetsConfig.presets)?void 0:o.find(t=>t.id===e.target.preset);t?(c=t.format||"scorm2004",s=t.options||{},console.log(`Using preset '${e.target.preset}' with format '${c}' and options:`,s)):(console.warn(`Preset '${e.target.preset}' not found, using default format`),c="scorm2004")}else c=e.target.format||"web";let l={...s,...e.options||{}};delete l.format;let d=$3MWDR$path.join((0,$3MWDR$os.tmpdir)(),"liaex-exports",e.id);await $3MWDR$fsextra.ensureDir(d);let f=$3MWDR$path.join(d,"export"),p=["--input",i,"--format",c,"--output",f],$={"scorm1.2":["scorm","mastery","typical","responsi","translate","debugging","remove","lia"],scorm2004:["scorm","mastery","typical","responsi","translate","debugging","remove","lia"],xapi:["xapi","lia"],ims:["ims","lia"],web:["web"],pdf:["pdf"],android:["android"],ios:["ios"],epub:["epub"],docx:["docx"],json:["json"],rdf:["rdf"],h5p:["h5p"]}[c]||[],b={"scorm1.2":e=>{let t=e.replace(/([A-Z])/g,"-$1").toLowerCase();return"liaSubfolder"===e?"lia-subfolder":"masteryScore"===e?"scorm-masteryScore":"typicalDuration"===e?"scorm-typicalDuration":"scormOrganization"===e?"scorm-organization":"scormIframe"===e?"scorm-iframe":"scormEmbed"===e?"scorm-embed":"scormAlwaysActive"===e?"scorm-alwaysActive":e.startsWith("scorm")||["mastery-score","typical-duration"].includes(t)?t:`scorm-${t}`},scorm2004:e=>{let t=e.replace(/([A-Z])/g,"-$1").toLowerCase();return"liaSubfolder"===e?"lia-subfolder":"masteryScore"===e?"scorm-masteryScore":"typicalDuration"===e?"scorm-typicalDuration":"scormOrganization"===e?"scorm-organization":"scormIframe"===e?"scorm-iframe":"scormEmbed"===e?"scorm-embed":"scormAlwaysActive"===e?"scorm-alwaysActive":t}}[c]||(e=>e.includes("-")?e:e.replace(/([A-Z])/g,"-$1").toLowerCase());for(let[e,t]of Object.entries(l)){let r=e.toLowerCase();if($.length>0){let t=$.some(e=>r.startsWith(e)),a=["xapi","web","pdf","epub","docx","android","ios","ims","json","rdf","h5p","app","package"].some(e=>!$.includes(e)&&r.startsWith(e));if(!t||a){console.log(`[DEBUG] SKIPPING option: ${e}`);continue}}let a=b(e),n=`--${a}`;!0===t||"true"===t?p.push(n):!1===t||"false"===t||null!=t&&""!==t&&p.push(n,String(t))}if(process.versions.electron)if(($54ebfb3440440ead$var$$parcel$__dirname.includes("src/server")||$54ebfb3440440ead$var$$parcel$__dirname.includes("src\\server"))&&!$54ebfb3440440ead$var$$parcel$__dirname.includes("app.asar"))u=$3MWDR$path.join(process.cwd(),"dist","index.js");else{let e=$54ebfb3440440ead$var$$parcel$__dirname.replace(/app\.asar([/\\]|$)/,"app.asar.unpacked$1"),t=e.indexOf("resources");if(t>=0){let r=e.substring(0,t+9);u=$3MWDR$path.join(r,"app.asar.unpacked","dist","index.js")}else{let t=e.split($3MWDR$path.sep),r=t.indexOf("app.asar.unpacked"),a=r>=0?t.slice(0,r+1).join($3MWDR$path.sep):e;u=$3MWDR$path.join(a,"dist","index.js")}}else u=process.argv[1];let h=process.execPath;console.log(`Starting export process for job ${e.id}: ${h} ${u} ${p.join(" ")}`);let m=(0,$3MWDR$child_process.spawn)(h,[u,...p],{stdio:["ignore","pipe","pipe"],detached:!1,cwd:d,env:{...process.env,ELECTRON_RUN_AS_NODE:"1"}}),g="",v="";null==(a=m.stdout)||a.on("data",t=>{g+=t.toString(),console.log(`[Job ${e.id}] ${t.toString().trim()}`)}),null==(n=m.stderr)||n.on("data",t=>{v+=t.toString(),console.error(`[Job ${e.id}] ${t.toString().trim()}`)}),m.on("error",t=>{console.error(`Export process error for job ${e.id}:`,t),r(t)}),m.on("close",async a=>{if(0!==a)return void r(Error(`Export process exited with code ${a}. stderr: ${v}`));try{await new Promise(e=>setTimeout(e,1e3)),console.log(`Looking for output files in: ${d}`);let r=await $3MWDR$fsextra.readdir(d);console.log(`Files in output directory: ${r.join(", ")}`);let a=r.find(e=>e.endsWith(".zip")||e.endsWith(".html")||e.endsWith(".pdf")||e.endsWith(".epub")||e.endsWith(".docx")||e.endsWith(".json")||e.endsWith(".jsonld")||e.endsWith(".nq")||e.endsWith(".apk"));if(!a)throw Error(`Export completed but no output file was generated. Found files: ${r.join(", ")} in directory: ${d}`);let n=$3MWDR$path.join(d,a);e.result={outputPath:n,filename:a},console.log(`Export completed: ${e.id} -> ${n}`);try{"git"===e.source.type&&e.source.cloneDir&&(console.log(`Cleaning up git clone: ${e.source.cloneDir}`),await $e87da97f5f05ff96$export$395d666fc5698bcd(e.source.cloneDir)),"upload"===e.source.type&&e.source.uploadDir&&(console.log(`Cleaning up upload directory: ${e.source.uploadDir}`),await $e87da97f5f05ff96$export$395d666fc5698bcd(e.source.uploadDir))}catch(t){console.warn(`Cleanup warning for job ${e.id}:`,t)}t()}catch(e){r(e)}})}catch(t){console.error(`Export failed for job ${e.id}:`,t);try{"git"===e.source.type&&e.source.cloneDir&&await $e87da97f5f05ff96$export$395d666fc5698bcd(e.source.cloneDir),"upload"===e.source.type&&e.source.uploadDir&&await $e87da97f5f05ff96$export$395d666fc5698bcd(e.source.uploadDir)}catch(t){console.warn(`Cleanup error after failed job ${e.id}:`,t)}r(t)}})}getQueueStatus(){return{currentJob:this.currentJob,queueLength:this.queue.length,queue:this.queue.map(e=>({id:e.id,status:e.status,createdAt:e.createdAt}))}}constructor(...e){super(...e),this.queue=[],this.currentJob=null,this.completedJobs=new Map,this.isProcessing=!1,this.maxCompletedJobs=100,this.presetsConfig=null}}var $f6a6722fcde1ce8b$var$$parcel$__dirname=$3MWDR$path.resolve(__dirname,"../src/server");const $f6a6722fcde1ce8b$export$c8ba420abe2b422f=new $54ebfb3440440ead$export$17699a8dbc199223;function $f6a6722fcde1ce8b$var$getLocalIP(){let e=$parcel$interopDefault($3MWDR$os).networkInterfaces();for(let t of Object.keys(e)){let r=e[t];if(r){for(let e of r)if("IPv4"===e.family&&!e.internal)return e.address}}return"127.0.0.1"}async function $f6a6722fcde1ce8b$export$86e1e39a5e8f80d4(e=3e3,t=!1,r=!1){let a,n="development"===process.env.NODE_ENV?{level:"info",transport:{target:"pino-pretty",options:{translateTime:"HH:MM:ss Z",ignore:"pid,hostname"}}}:{level:"info"},o=$parcel$interopDefault($3MWDR$fastify)({logger:n});if(await o.register($parcel$interopDefault($3MWDR$fastifymultipart),{limits:{fileSize:0x6400000}}),$f6a6722fcde1ce8b$var$$parcel$__dirname.includes("app.asar"))console.log("Running from ASAR, using unpacked path:",a=$f6a6722fcde1ce8b$var$$parcel$__dirname.replace("app.asar","app.asar.unpacked")+"/public");else{let e=(0,$3MWDR$fs.realpathSync)(process.argv[1]),t=(0,$3MWDR$path.join)(e,".."),r=[(0,$3MWDR$path.join)(t,"server","public"),(0,$3MWDR$path.join)($f6a6722fcde1ce8b$var$$parcel$__dirname,"public"),(0,$3MWDR$path.join)(process.cwd(),"dist","server","public"),(0,$3MWDR$path.join)(process.cwd(),"src","server","public")];a=r.find(e=>(0,$3MWDR$fs.existsSync)(e))||r[0]}console.log("Serving static files from:",a),await o.register($parcel$interopDefault($3MWDR$fastifystatic),{root:a,prefix:"/"}),await o.register($0f35a80f13da4532$export$2cdb3bba44f39bdb,{prefix:"/api"});let i=async()=>{console.log("\nShutting down server..."),await o.close(),process.exit(0)};process.on("SIGTERM",i),process.on("SIGINT",i);try{await o.listen({port:e,host:"0.0.0.0"});let a=o.server.address().port;if(t)return console.log(`Server started on http://localhost:${a}`),o;let n=$f6a6722fcde1ce8b$var$getLocalIP();console.log(`
672
+ </script>`,e)}function $6316d14f44a21285$var$updateMetadata(e,t,r){var a,n,o,i,c,u;let s=e;try{let e=null==(a=t.lia)?void 0:a.str_title;e&&(s=s.replace("<title>Lia</title>",`<title>${e}</title><meta property="og:title" content="${e}"> <meta name="twitter:title" content="${e}">`),console.log("updating title ..."))}catch(e){r.push({step:"Update title",error:e,critical:!1})}try{let e=null==(i=t.lia)||null==(o=i.definition)||null==(n=o.macro)?void 0:n.comment;e&&(s=s.replace('<meta name="description" content="LiaScript is a service for running free and interactive online courses, build with its own Markup-language. So check out the following course ;-)">',`<meta name="description" content="${e}"><meta property="og:description" content="${e}"><meta name="twitter:description" content="${e}">`),console.log("updating description ..."))}catch(e){r.push({step:"Update description",error:e,critical:!1})}try{let e=null==(u=t.lia)||null==(c=u.definition)?void 0:c.logo;e&&(s=$070fc7e985d52a73$export$a976684a0efeb93f(`<meta property="og:image" content="${e}"><meta name="twitter:image" content="${e}">`,s),console.log("updating logo ..."))}catch(e){r.push({step:"Update logo",error:e,critical:!1})}return s}async function $6316d14f44a21285$var$writeOutput(e,t,r,a,n,o){try{n["web-iframe"]?(await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(e,$6316d14f44a21285$var$START_HTML_FILE),t),await $070fc7e985d52a73$export$8cde213409fd6377(e,$6316d14f44a21285$var$HTML_FILE,r,a,n.style,$6316d14f44a21285$var$START_HTML_FILE)):(t=$070fc7e985d52a73$export$a976684a0efeb93f(a,t),t=$070fc7e985d52a73$export$1b80ed980367b7c1(t),await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(e,$6316d14f44a21285$var$HTML_FILE),t))}catch(e){throw o.push({step:"Write output",error:e,critical:!0}),e}}async function $6316d14f44a21285$var$finalizeOutput(e,t){t["web-zip"]?await $070fc7e985d52a73$export$8901015135f2fb22(e,t.output):(await $3MWDR$fsextra.ensureDir(t.output),await $3MWDR$fsextra.copy(e,t.output,{filter:$070fc7e985d52a73$export$3032dc2899b8ea9b(e),overwrite:!0}),await $3MWDR$fsextra.remove(e))}var $2e8a8687471857f8$export$b7ce4444e8ed02dc=function(e){return e.JSON="json",e.FULL_JSON="fulljson",e}({}),$2e8a8687471857f8$export$d8c230555f857aaf=function(e){return e.DEBUG="debug",e.FILE="file",e.TEMPLATE="template",e}({});class $1ecd50621e2824d1$export$a46f15a9a9fee68a{async run(e){let t=$53c0743dc086b130$exports.Elm.Worker.init({flags:{cmd:""}});this.setupHelperPort(t,e),this.setupOutputPort(t,e),await this.initiateExport(t,e)}setupHelperPort(e,t){e.ports.helper.subscribe(async([r,a])=>{switch(r){case $2e8a8687471857f8$export$d8c230555f857aaf.DEBUG:console.warn("DEBUG",a);break;case $2e8a8687471857f8$export$d8c230555f857aaf.FILE:let n=$parcel$interopDefault($3MWDR$path).resolve($parcel$interopDefault($3MWDR$path).dirname(t.input),a);console.warn("loading:",n);let o=$parcel$interopDefault($3MWDR$fsextra).readFileSync(n,"utf8");e.ports.input.send([$2e8a8687471857f8$export$d8c230555f857aaf.TEMPLATE,a,o]);break;default:console.warn("unknown command:",r,a)}})}setupOutputPort(e,t){e.ports.output.subscribe(r=>{let[a,n]=r;a?this.handleExportOutput(t,n,e):console.warn("Export failed:",n)})}handleExportOutput(e,t,r){switch(e.format){case $2e8a8687471857f8$export$b7ce4444e8ed02dc.JSON:case $2e8a8687471857f8$export$b7ce4444e8ed02dc.FULL_JSON:this.exportJson(e,t);break;case"rdf":$58867fee6a9ce3e2$export$372e2d09604f52f0(e,JSON.parse(t));break;case $455519058ce391fd$export$d9468344d3651243:this.exportScorm12(e,JSON.parse(t));break;case $f3a76b91a4865d74$export$d9468344d3651243:this.exportScorm2004(e,JSON.parse(t));break;case"ims":$7eeb04a4e678ba02$export$372e2d09604f52f0(e,JSON.parse(t));break;case"web":$6316d14f44a21285$export$372e2d09604f52f0(e,JSON.parse(t));break;case"pdf":$2358171a5699e480$export$372e2d09604f52f0(e);break;case $02e6fd5277cb1195$export$d9468344d3651243:$02e6fd5277cb1195$export$372e2d09604f52f0(e,JSON.parse(t));break;case $8c3498a62706068d$export$d9468344d3651243:$8c3498a62706068d$export$372e2d09604f52f0(e);break;case $42514d84790f50f1$export$d9468344d3651243:$42514d84790f50f1$export$372e2d09604f52f0(e,JSON.parse(t));break;case $b3496016a321b67a$export$d9468344d3651243:$b3496016a321b67a$export$372e2d09604f52f0(e,JSON.parse(t));break;case $6e87a9adb423ec83$export$d9468344d3651243:this.handleProjectExport(e,JSON.parse(t),r);break;default:console.warn("unknown output format",e.format)}}exportJson(e,t){$parcel$interopDefault($3MWDR$fsextra).writeFile(e.output+".json",t,function(e){e&&console.error(e)})}exportScorm12(e,t){(e["scorm-embed"]||e["lia-subfolder"])&&(e["scorm-embed"]=this.embed),$455519058ce391fd$export$372e2d09604f52f0(e,t)}exportScorm2004(e,t){(e["scorm-embed"]||e["lia-subfolder"])&&(e["scorm-embed"]=this.embed),$f3a76b91a4865d74$export$372e2d09604f52f0(e,t)}handleProjectExport(e,t,r){if(this.collection)try{$6e87a9adb423ec83$export$6930dbd384916ad6(this.collection,t);let a=$6e87a9adb423ec83$export$ee97db0b1eaef5b1(this.collection);a?(console.warn("loading:",a),r.ports.input.send([$2e8a8687471857f8$export$b7ce4444e8ed02dc.FULL_JSON,a])):$6e87a9adb423ec83$export$372e2d09604f52f0(e,this.collection)}catch(e){console.warn("project export error:",e)}}async initiateExport(e,t){try{let r=this.determineInternalFormat(t.format);t.format===$6e87a9adb423ec83$export$d9468344d3651243?await this.handleProjectInput(e,t,r):$070fc7e985d52a73$export$bab98af026af71ac(t.input)?"pdf"===t.format?await $2358171a5699e480$export$372e2d09604f52f0(t):t.format===$8c3498a62706068d$export$d9468344d3651243?await $8c3498a62706068d$export$372e2d09604f52f0(t):"rdf"===t.format?await this.handleUrlInput(e,t,r):console.warn("URLs are not allowed as input"):await this.handleFileInput(e,t,r)}catch(e){console.error(e)}}determineInternalFormat(e){return e==$455519058ce391fd$export$d9468344d3651243||e==$f3a76b91a4865d74$export$d9468344d3651243||"pdf"==e||e==$02e6fd5277cb1195$export$d9468344d3651243||e==$8c3498a62706068d$export$d9468344d3651243||"web"==e||"ims"==e||e==$42514d84790f50f1$export$d9468344d3651243||"rdf"==e||e==$b3496016a321b67a$export$d9468344d3651243||e==$6e87a9adb423ec83$export$d9468344d3651243||e==$02e6fd5277cb1195$export$d9468344d3651243?$2e8a8687471857f8$export$b7ce4444e8ed02dc.FULL_JSON:e}async handleProjectInput(e,t,r){let a=$parcel$interopDefault($3MWDR$fsextra).readFileSync(t.input,"utf8");if(this.collection=$parcel$interopDefault($3MWDR$yaml).parse(a),this.collection){let a=$6e87a9adb423ec83$export$ee97db0b1eaef5b1(this.collection);null===a?$6e87a9adb423ec83$export$372e2d09604f52f0(t,this.collection):(console.warn("loading:",a),e.ports.input.send([r,a]))}}async handleFileInput(e,t,r){let a=$parcel$interopDefault($3MWDR$fsextra).readFileSync(t.input,"utf8");this.embed=a,e.ports.input.send([r,a])}async handleUrlInput(e,t,r){let a=await $parcel$interopDefault($3MWDR$nodefetch)(t.input,{}),n=await a.text();n&&e.ports.input.send([r,n])}constructor(){this.collection=null,this.embed=void 0}}async function $e87da97f5f05ff96$export$6411c5cbab21135b(e,t){return new Promise((r,a)=>{(0,$3MWDR$fs.createReadStream)(e).pipe($parcel$interopDefault($3MWDR$unzipper).Extract({path:t})).on("close",r).on("error",a)})}async function $e87da97f5f05ff96$var$findMarkdownFiles(e,t=[]){for(let r of(await (0,$3MWDR$fspromises.readdir)(e))){let a=(0,$3MWDR$path.join)(e,r),n=await (0,$3MWDR$fspromises.stat)(a);n.isDirectory()?r.startsWith(".")||"node_modules"===r||"dist"===r||"build"===r||await $e87da97f5f05ff96$var$findMarkdownFiles(a,t):n.isFile()&&".md"===(0,$3MWDR$path.extname)(r).toLowerCase()&&t.push(a)}return t}async function $e87da97f5f05ff96$export$8bdb062a90752518(e){let t=await $e87da97f5f05ff96$var$findMarkdownFiles(e);if(0===t.length)return null;let r=t.find(e=>{var t;return"readme.md"===(null==(t=e.split("/").pop())?void 0:t.toLowerCase())});return r||t[0]}function $e87da97f5f05ff96$export$a0c027876dc9c378(e){return".zip"===(0,$3MWDR$path.extname)(e).toLowerCase()}async function $e87da97f5f05ff96$export$932e912380fe3c6f(e,t,r,a){try{/^https?:\/\//i.test(e)||(e=`https://${e.replace(/^\/+/,"")}`),console.log(`Cloning git repository: ${e}${r?` (branch: ${r})`:""}`),await $parcel$interopDefault($3MWDR$isomorphicgit).clone({fs:$parcel$interopDefault($3MWDR$fs),http:$parcel$interopDefault($3MWDR$isomorphicgithttpnode),dir:t,url:e,ref:r,singleBranch:!0,depth:1});let n=a?(0,$3MWDR$path.join)(t,a):t;try{await (0,$3MWDR$fspromises.stat)(n)}catch(e){throw Error(`Subdirectory '${a}' not found in cloned repository`)}return n}catch(e){throw console.error("Git clone failed:",e),Error(`Failed to clone git repository: ${e.message}`)}}async function $e87da97f5f05ff96$export$395d666fc5698bcd(e){try{await (0,$3MWDR$fspromises.rm)(e,{recursive:!0,force:!0})}catch(t){console.warn(`Failed to remove directory ${e}:`,t)}}var $0f35a80f13da4532$var$$parcel$__dirname=$3MWDR$path.resolve(__dirname,"../src/server/routes");const $0f35a80f13da4532$export$2cdb3bba44f39bdb=async e=>{e.get("/presets",async(e,t)=>{try{let e="";if(process.versions.electron)if($0f35a80f13da4532$var$$parcel$__dirname.includes("src/server"))e=(0,$3MWDR$path.join)($0f35a80f13da4532$var$$parcel$__dirname,"..","..","presets.yaml");else{let t=process.resourcesPath||(0,$3MWDR$path.join)($0f35a80f13da4532$var$$parcel$__dirname,"../..");e=(0,$3MWDR$path.join)(t,"app.asar.unpacked","dist","presets.yaml")}else{let t=(0,$3MWDR$path.dirname)((0,$3MWDR$fs.realpathSync)(process.argv[1])),r=[(0,$3MWDR$path.join)(t,"presets.yaml"),(0,$3MWDR$path.join)(process.cwd(),"dist","presets.yaml"),(0,$3MWDR$path.join)(process.cwd(),"src","presets.yaml")];for(let t of r)try{await (0,$3MWDR$fspromises.readFile)(t,"utf-8"),e=t;break}catch{}e||(e=r[0])}let t=await (0,$3MWDR$fspromises.readFile)(e,"utf-8"),r=$3MWDR$yaml.parse(t);if(!r||!r.presets)throw Error("Invalid presets file structure");return{presets:r.presets}}catch(e){return console.error("Failed to load presets:",e),t.code(500).send({error:"Failed to load presets configuration"})}}),e.post("/export",async(t,r)=>{try{let a=await t.body,n={source:{},target:{},options:{}};if(t.isMultipart()){let a=t.parts(),o=[],i=(0,$3MWDR$crypto.randomUUID)(),c=(0,$3MWDR$path.join)((0,$3MWDR$os.tmpdir)(),"liaex-uploads",i);for await(let e of(await (0,$3MWDR$fspromises.mkdir)(c,{recursive:!0}),a))if("file"===e.type){let t=(0,$3MWDR$path.join)(c,e.filename),r=await e.toBuffer();await (0,$3MWDR$fspromises.writeFile)(t,new Uint8Array(r)),o.push({filename:e.filename,path:t,mimetype:e.mimetype})}else{let t=e.fieldname,r=e.value;if("preset"===t)n.target.preset=r;else if("format"===t)n.target.format=r;else if("gitUrl"===t)n.source.gitUrl=r;else if("gitBranch"===t)n.source.gitBranch=r;else if("gitSubdir"===t)n.source.gitSubdir=r;else if("gitFile"===t)n.source.gitFile=r;else if(t.startsWith("option_")){let e=t.substring(7);n.options[e]=r}}if(o.length>0){n.source.type="upload",n.source.files=o,n.source.uploadDir=c;let t=o.find(e=>$e87da97f5f05ff96$export$a0c027876dc9c378(e.filename));if(t){e.log.info(`Extracting ZIP file: ${t.filename}`);let a=(0,$3MWDR$path.join)(c,"extracted");await (0,$3MWDR$fspromises.mkdir)(a,{recursive:!0}),await $e87da97f5f05ff96$export$6411c5cbab21135b(t.path,a),e.log.info(`ZIP extracted to: ${a}`);let o=await $e87da97f5f05ff96$export$8bdb062a90752518(a);if(!o)return r.code(400).send({error:"No markdown file found in ZIP archive. Please include a README.md or any .md file."});e.log.info(`Found main markdown: ${o}`),n.source.mainFile=o,n.source.extractedFrom=t.filename}}else{if(!n.source.gitUrl)return r.code(400).send({error:"No files uploaded and no git URL provided"});n.source.type="git",e.log.info(`Cloning git repository: ${n.source.gitUrl}`);let t=(0,$3MWDR$crypto.randomUUID)(),a=(0,$3MWDR$path.join)((0,$3MWDR$os.tmpdir)(),"liaex-git",t);await (0,$3MWDR$fspromises.mkdir)(a,{recursive:!0});try{let t=await $e87da97f5f05ff96$export$932e912380fe3c6f(n.source.gitUrl,a,n.source.gitBranch,n.source.gitSubdir);e.log.info(`Git repository cloned to: ${t}`);let o=null;if(n.source.gitFile){let e=(0,$3MWDR$path.join)(t,n.source.gitFile);try{await (0,$3MWDR$fspromises.access)(e),o=e}catch{return r.code(400).send({error:`Specified file not found in repository: ${n.source.gitFile}`})}}else if(!(o=await $e87da97f5f05ff96$export$8bdb062a90752518(t)))return r.code(400).send({error:"No markdown file found in Git repository. Please include a README.md or any .md file."});e.log.info(`Found main markdown: ${o}`),n.source.mainFile=o,n.source.cloneDir=a,n.source.repoPath=t}catch(t){return e.log.error(`Failed to clone git repository: ${t.message}`),r.code(400).send({error:`Failed to clone git repository: ${t.message}`})}}}else{if(!a.gitUrl)return r.code(400).send({error:"Invalid request format"});n.source.type="git",n.source.gitUrl=a.gitUrl,n.source.gitBranch=a.gitBranch,n.source.gitSubdir=a.gitSubdir,n.source.gitFile=a.gitFile,n.target=a.target||{},n.options=a.options||{}}let o=$f6a6722fcde1ce8b$export$c8ba420abe2b422f.addJob(n);return r.send(o)}catch(t){return e.log.error(t),r.code(500).send({error:"Failed to create export job",message:t.message})}}),e.get("/job/:jobId",async(e,t)=>{let{jobId:r}=e.params,a=$f6a6722fcde1ce8b$export$c8ba420abe2b422f.getJob(r);if(!a)return t.code(404).send({error:"Job not found"});let n=$f6a6722fcde1ce8b$export$c8ba420abe2b422f.getQueuePosition(r);return t.send({job:a,queuePosition:n})}),e.get("/queue",async(e,t)=>t.send($f6a6722fcde1ce8b$export$c8ba420abe2b422f.getQueueStatus())),e.get("/download/:jobId",async(t,r)=>{let{jobId:a}=t.params,n=$f6a6722fcde1ce8b$export$c8ba420abe2b422f.getJob(a);if(!n)return r.code(404).send({error:"Job not found"});if("completed"!==n.status)return r.code(400).send({error:"Job not completed yet"});if(!n.result||!n.result.outputPath)return r.code(404).send({error:"Export file not found"});try{let e=await (0,$3MWDR$fspromises.readFile)(n.result.outputPath),t=n.result.filename||(0,$3MWDR$path.basename)(n.result.outputPath),a="application/octet-stream";return t.endsWith(".zip")?a="application/zip":t.endsWith(".pdf")?a="application/pdf":t.endsWith(".apk")?a="application/vnd.android.package-archive":t.endsWith(".epub")?a="application/epub+zip":t.endsWith(".docx")?a="application/vnd.openxmlformats-officedocument.wordprocessingml.document":t.endsWith(".html")&&(a="text/html"),r.header("Content-Disposition",`attachment; filename="${t}"`),r.type(a),r.send(e)}catch(t){return e.log.error(t),r.code(500).send({error:"Failed to download file",message:t.message})}})};var $54ebfb3440440ead$var$$parcel$__dirname=$3MWDR$path.resolve(__dirname,"../src/server/queue");class $54ebfb3440440ead$export$17699a8dbc199223 extends $3MWDR$events.EventEmitter{addJob(e){let t={...e,id:(0,$3MWDR$crypto.randomUUID)(),status:"queued",createdAt:new Date};this.queue.push(t);let r=this.queue.length+ +!!this.currentJob;return this.emit("job-added",t),this.isProcessing||this.processNext(),{jobId:t.id,queuePosition:r}}getJob(e){var t;if((null==(t=this.currentJob)?void 0:t.id)===e)return this.currentJob;let r=this.queue.find(t=>t.id===e);return r||this.completedJobs.get(e)}getQueuePosition(e){var t;if((null==(t=this.currentJob)?void 0:t.id)===e)return 0;let r=this.queue.findIndex(t=>t.id===e);return r>=0?r+1:-1}async processNext(){if(!this.isProcessing&&0!==this.queue.length){this.isProcessing=!0,this.currentJob=this.queue.shift(),this.currentJob.status="processing",this.currentJob.startedAt=new Date,this.emit("job-started",this.currentJob);try{await this.performExport(this.currentJob),this.currentJob.status="completed",this.currentJob.completedAt=new Date,this.emit("job-completed",this.currentJob)}catch(e){this.currentJob.status="failed",this.currentJob.error=e.message,this.currentJob.completedAt=new Date,this.emit("job-failed",this.currentJob)}finally{if(this.currentJob&&(this.completedJobs.set(this.currentJob.id,this.currentJob),this.completedJobs.size>this.maxCompletedJobs)){let e=this.completedJobs.keys().next().value;e&&this.completedJobs.delete(e)}this.currentJob=null,this.isProcessing=!1,this.queue.length>0&&setImmediate(()=>this.processNext())}}}async loadPresets(){if(!this.presetsConfig)try{let e=$3MWDR$path.join($54ebfb3440440ead$var$$parcel$__dirname,"..","..","dist"),t=$3MWDR$path.join(e,"presets.yaml");try{await $3MWDR$fsextra.readFile(t,"utf-8")}catch{t=$3MWDR$path.join(process.cwd(),"dist","presets.yaml")}let r=await $3MWDR$fsextra.readFile(t,"utf-8");this.presetsConfig=$3MWDR$yaml.parse(r),console.log("Loaded presets configuration")}catch(e){console.error("Failed to load presets:",e),this.presetsConfig={presets:[]}}}async performExport(e){return new Promise(async(t,r)=>{try{var a,n,o;let i,c,u;if(await this.loadPresets(),"upload"===e.source.type&&e.source.files&&e.source.files.length>0)if(e.source.mainFile)i=e.source.mainFile,console.log(`Using main markdown from ZIP: ${i}`);else{let t=e.source.files.find(e=>"README.md"===e.filename||e.filename.toLowerCase().endsWith(".md"));i=t?t.path:e.source.files[0].path}else if("git"===e.source.type&&e.source.gitUrl)if(e.source.mainFile)i=e.source.mainFile,console.log(`Using main markdown from Git: ${i}`);else throw Error("No main file found in Git repository");else throw Error("No valid input source");let s={};if(e.target.preset){let t=null==(o=this.presetsConfig.presets)?void 0:o.find(t=>t.id===e.target.preset);t?(c=t.format||"scorm2004",s=t.options||{},console.log(`Using preset '${e.target.preset}' with format '${c}' and options:`,s)):(console.warn(`Preset '${e.target.preset}' not found, using default format`),c="scorm2004")}else c=e.target.format||"web";let l={...s,...e.options||{}};delete l.format;let d=$3MWDR$path.join((0,$3MWDR$os.tmpdir)(),"liaex-exports",e.id);await $3MWDR$fsextra.ensureDir(d);let f=$3MWDR$path.join(d,"export"),p=["--input",i,"--format",c,"--output",f],$={"scorm1.2":["scorm","mastery","typical","responsi","translate","debugging","remove","lia"],scorm2004:["scorm","mastery","typical","responsi","translate","debugging","remove","lia"],xapi:["xapi","lia"],ims:["ims","lia"],web:["web"],pdf:["pdf"],android:["android"],ios:["ios"],epub:["epub"],docx:["docx"],json:["json"],rdf:["rdf"],h5p:["h5p"]}[c]||[],b={"scorm1.2":e=>{let t=e.replace(/([A-Z])/g,"-$1").toLowerCase();return"liaSubfolder"===e?"lia-subfolder":"masteryScore"===e?"scorm-masteryScore":"typicalDuration"===e?"scorm-typicalDuration":"scormOrganization"===e?"scorm-organization":"scormIframe"===e?"scorm-iframe":"scormEmbed"===e?"scorm-embed":"scormAlwaysActive"===e?"scorm-alwaysActive":e.startsWith("scorm")||["mastery-score","typical-duration"].includes(t)?t:`scorm-${t}`},scorm2004:e=>{let t=e.replace(/([A-Z])/g,"-$1").toLowerCase();return"liaSubfolder"===e?"lia-subfolder":"masteryScore"===e?"scorm-masteryScore":"typicalDuration"===e?"scorm-typicalDuration":"scormOrganization"===e?"scorm-organization":"scormIframe"===e?"scorm-iframe":"scormEmbed"===e?"scorm-embed":"scormAlwaysActive"===e?"scorm-alwaysActive":t}}[c]||(e=>e.includes("-")?e:e.replace(/([A-Z])/g,"-$1").toLowerCase());for(let[e,t]of Object.entries(l)){let r=e.toLowerCase();if($.length>0){let t=$.some(e=>r.startsWith(e)),a=["xapi","web","pdf","epub","docx","android","ios","ims","json","rdf","h5p","app","package"].some(e=>!$.includes(e)&&r.startsWith(e));if(!t||a){console.log(`[DEBUG] SKIPPING option: ${e}`);continue}}let a=b(e),n=`--${a}`;!0===t||"true"===t?p.push(n):!1===t||"false"===t||null!=t&&""!==t&&p.push(n,String(t))}if(process.versions.electron)if(($54ebfb3440440ead$var$$parcel$__dirname.includes("src/server")||$54ebfb3440440ead$var$$parcel$__dirname.includes("src\\server"))&&!$54ebfb3440440ead$var$$parcel$__dirname.includes("app.asar"))u=$3MWDR$path.join(process.cwd(),"dist","index.js");else{let e=$54ebfb3440440ead$var$$parcel$__dirname.replace(/app\.asar([/\\]|$)/,"app.asar.unpacked$1"),t=e.indexOf("resources");if(t>=0){let r=e.substring(0,t+9);u=$3MWDR$path.join(r,"app.asar.unpacked","dist","index.js")}else{let t=e.split($3MWDR$path.sep),r=t.indexOf("app.asar.unpacked"),a=r>=0?t.slice(0,r+1).join($3MWDR$path.sep):e;u=$3MWDR$path.join(a,"dist","index.js")}}else u=process.argv[1];let h=process.execPath;console.log(`Starting export process for job ${e.id}: ${h} ${u} ${p.join(" ")}`);let m=(0,$3MWDR$child_process.spawn)(h,[u,...p],{stdio:["ignore","pipe","pipe"],detached:!1,cwd:d,env:{...process.env,ELECTRON_RUN_AS_NODE:"1"}}),g="",v="";null==(a=m.stdout)||a.on("data",t=>{g+=t.toString(),console.log(`[Job ${e.id}] ${t.toString().trim()}`)}),null==(n=m.stderr)||n.on("data",t=>{v+=t.toString(),console.error(`[Job ${e.id}] ${t.toString().trim()}`)}),m.on("error",t=>{console.error(`Export process error for job ${e.id}:`,t),r(t)}),m.on("close",async a=>{if(0!==a)return void r(Error(`Export process exited with code ${a}. stderr: ${v}`));try{await new Promise(e=>setTimeout(e,1e3)),console.log(`Looking for output files in: ${d}`);let r=await $3MWDR$fsextra.readdir(d);console.log(`Files in output directory: ${r.join(", ")}`);let a=r.find(e=>e.endsWith(".zip")||e.endsWith(".html")||e.endsWith(".pdf")||e.endsWith(".epub")||e.endsWith(".docx")||e.endsWith(".json")||e.endsWith(".jsonld")||e.endsWith(".nq")||e.endsWith(".apk"));if(!a)throw Error(`Export completed but no output file was generated. Found files: ${r.join(", ")} in directory: ${d}`);let n=$3MWDR$path.join(d,a);e.result={outputPath:n,filename:a},console.log(`Export completed: ${e.id} -> ${n}`);try{"git"===e.source.type&&e.source.cloneDir&&(console.log(`Cleaning up git clone: ${e.source.cloneDir}`),await $e87da97f5f05ff96$export$395d666fc5698bcd(e.source.cloneDir)),"upload"===e.source.type&&e.source.uploadDir&&(console.log(`Cleaning up upload directory: ${e.source.uploadDir}`),await $e87da97f5f05ff96$export$395d666fc5698bcd(e.source.uploadDir))}catch(t){console.warn(`Cleanup warning for job ${e.id}:`,t)}t()}catch(e){r(e)}})}catch(t){console.error(`Export failed for job ${e.id}:`,t);try{"git"===e.source.type&&e.source.cloneDir&&await $e87da97f5f05ff96$export$395d666fc5698bcd(e.source.cloneDir),"upload"===e.source.type&&e.source.uploadDir&&await $e87da97f5f05ff96$export$395d666fc5698bcd(e.source.uploadDir)}catch(t){console.warn(`Cleanup error after failed job ${e.id}:`,t)}r(t)}})}getQueueStatus(){return{currentJob:this.currentJob,queueLength:this.queue.length,queue:this.queue.map(e=>({id:e.id,status:e.status,createdAt:e.createdAt}))}}constructor(...e){super(...e),this.queue=[],this.currentJob=null,this.completedJobs=new Map,this.isProcessing=!1,this.maxCompletedJobs=100,this.presetsConfig=null}}var $f6a6722fcde1ce8b$var$$parcel$__dirname=$3MWDR$path.resolve(__dirname,"../src/server");const $f6a6722fcde1ce8b$export$c8ba420abe2b422f=new $54ebfb3440440ead$export$17699a8dbc199223;function $f6a6722fcde1ce8b$var$getLocalIP(){let e=$parcel$interopDefault($3MWDR$os).networkInterfaces();for(let t of Object.keys(e)){let r=e[t];if(r){for(let e of r)if("IPv4"===e.family&&!e.internal)return e.address}}return"127.0.0.1"}async function $f6a6722fcde1ce8b$export$86e1e39a5e8f80d4(e=3e3,t=!1,r=!1){let a,n="development"===process.env.NODE_ENV?{level:"info",transport:{target:"pino-pretty",options:{translateTime:"HH:MM:ss Z",ignore:"pid,hostname"}}}:{level:"info"},o=$parcel$interopDefault($3MWDR$fastify)({logger:n});if(await o.register($parcel$interopDefault($3MWDR$fastifymultipart),{limits:{fileSize:0x6400000}}),$f6a6722fcde1ce8b$var$$parcel$__dirname.includes("app.asar"))console.log("Running from ASAR, using unpacked path:",a=$f6a6722fcde1ce8b$var$$parcel$__dirname.replace("app.asar","app.asar.unpacked")+"/public");else{let e=(0,$3MWDR$fs.realpathSync)(process.argv[1]),t=(0,$3MWDR$path.join)(e,".."),r=[(0,$3MWDR$path.join)(t,"server","public"),(0,$3MWDR$path.join)($f6a6722fcde1ce8b$var$$parcel$__dirname,"public"),(0,$3MWDR$path.join)(process.cwd(),"dist","server","public"),(0,$3MWDR$path.join)(process.cwd(),"src","server","public")];a=r.find(e=>(0,$3MWDR$fs.existsSync)(e))||r[0]}console.log("Serving static files from:",a),await o.register($parcel$interopDefault($3MWDR$fastifystatic),{root:a,prefix:"/"}),await o.register($0f35a80f13da4532$export$2cdb3bba44f39bdb,{prefix:"/api"});let i=async()=>{console.log("\nShutting down server..."),await o.close(),process.exit(0)};process.on("SIGTERM",i),process.on("SIGINT",i);try{await o.listen({port:e,host:"0.0.0.0"});let a=o.server.address().port;if(t)return console.log(`Server started on http://localhost:${a}`),o;let n=$f6a6722fcde1ce8b$var$getLocalIP();console.log(`
673
673
  \u{2554}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2550}\u{2557}
674
674
  \u{2551} \u{2551}
675
675
  \u{2551} \u{1F680} LiaScript Export Server \u{2551}
@@ -19,6 +19,8 @@ function initializeNumberInputs() {
19
19
  },
20
20
  { id: 'pdfScale', min: 0.1, max: 2, isInteger: false, value: 1 },
21
21
  { id: 'pdfTimeout', min: 1000, max: null, isInteger: true, value: 15000 },
22
+ { id: 'docxFontSize', min: 10, max: 100, isInteger: true, value: null },
23
+ { id: 'docxTimeout', min: 1000, max: 120000, isInteger: true, value: null },
22
24
  ]
23
25
 
24
26
  numberInputs.forEach((config) => {
@@ -217,13 +219,6 @@ function initializeTabs() {
217
219
 
218
220
  tab.classList.add('active')
219
221
  document.getElementById(`${targetTab}-panel`).classList.add('active')
220
-
221
- // Clear validation states
222
- if (targetTab === 'upload') {
223
- document.getElementById('gitUrl').removeAttribute('required')
224
- } else {
225
- document.getElementById('gitUrl').setAttribute('required', 'required')
226
- }
227
222
  })
228
223
  })
229
224
  }
@@ -106,7 +106,9 @@
106
106
  type="text"
107
107
  id="gitUrl"
108
108
  name="gitUrl"
109
- placeholder="https://github.com/user/repo.git"
109
+ autocomplete="off"
110
+ data-i18n-placeholder="git.repoUrlPlaceholder"
111
+ placeholder="github.com/user/repo"
110
112
  />
111
113
  </div>
112
114
  <div class="form-row">
@@ -1315,12 +1317,11 @@
1315
1317
  >Font Size</label
1316
1318
  >
1317
1319
  <input
1318
- type="number"
1320
+ type="text"
1321
+ inputmode="numeric"
1319
1322
  id="docxFontSize"
1320
1323
  name="option_docx-font-size"
1321
1324
  placeholder="22"
1322
- min="10"
1323
- max="100"
1324
1325
  />
1325
1326
  <span class="hint" data-i18n="settings.docx.fontSizeHint"
1326
1327
  >Font size in half-points (22 = 11pt)</span
@@ -1412,12 +1413,11 @@
1412
1413
  >Timeout (ms)</label
1413
1414
  >
1414
1415
  <input
1415
- type="number"
1416
+ type="text"
1417
+ inputmode="numeric"
1416
1418
  id="docxTimeout"
1417
1419
  name="option_docx-timeout"
1418
1420
  placeholder="15000"
1419
- min="1000"
1420
- max="120000"
1421
1421
  />
1422
1422
  <span class="hint" data-i18n="settings.docx.timeoutHint"
1423
1423
  >Wait time for complete loading (15000 = 15 seconds)</span
@@ -13,6 +13,7 @@
13
13
  "files.remove": "Entfernen",
14
14
  "git.repoUrl": "Repository-URL",
15
15
  "git.repoUrlRequired": "Repository-URL *",
16
+ "git.repoUrlPlaceholder": "github.com/user/repo",
16
17
  "git.branch": "Branch / Tag",
17
18
  "git.branchPlaceholder": "main",
18
19
  "git.subdirectory": "Unterverzeichnis",
@@ -13,6 +13,7 @@
13
13
  "files.remove": "Remove",
14
14
  "git.repoUrl": "Repository URL",
15
15
  "git.repoUrlRequired": "Repository URL *",
16
+ "git.repoUrlPlaceholder": "github.com/user/repo",
16
17
  "git.branch": "Branch / Tag",
17
18
  "git.branchPlaceholder": "main",
18
19
  "git.subdirectory": "Subdirectory",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liascript/exporter",
3
- "version": "3.3.3--1.0.10",
3
+ "version": "3.3.4--1.0.10",
4
4
  "description": "A generic exporter for LiaScript",
5
5
  "main": "dist/index.js",
6
6
  "repository": {