@liascript/exporter 3.3.1--1.0.10 → 3.3.3--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/README.md +0 -7
  2. package/dist/assets/capacitor/{index.65285fa9.js → index.54530cdd.js} +1 -1
  3. package/dist/assets/capacitor/index.html +1 -1
  4. package/dist/assets/capacitor/{jszip.min.5cd662bc.js → jszip.min.dfe97abc.js} +1 -1
  5. package/dist/assets/indexeddb/{index.11cfd3a5.js → index.e14ebc2b.js} +1 -1
  6. package/dist/assets/indexeddb/{index.2dc41135.js → index.e704211b.js} +1 -1
  7. package/dist/assets/indexeddb/index.html +1 -1
  8. package/dist/assets/pdf/{index.374859b7.js → index.c1ce18ee.js} +1 -1
  9. package/dist/assets/pdf/index.html +1 -1
  10. package/dist/assets/{scorm1.2/jszip.min.4fbcc13f.js → pdf/jszip.min.63142cc8.js} +1 -1
  11. package/dist/assets/scorm1.2/{index.eb385b4a.js → index.0a7eae2e.js} +1 -1
  12. package/dist/assets/scorm1.2/{index.ee6a673a.js → index.7e823f9b.js} +1 -1
  13. package/dist/assets/scorm1.2/index.html +1 -1
  14. package/dist/assets/{pdf/jszip.min.4fbcc13f.js → scorm1.2/jszip.min.63142cc8.js} +1 -1
  15. package/dist/assets/web/{index.68795b8d.js → index.beeaa029.js} +1 -1
  16. package/dist/assets/web/index.html +1 -1
  17. package/dist/assets/xapi/{index.720250aa.js → index.37324883.js} +1 -1
  18. package/dist/assets/xapi/index.html +1 -1
  19. package/dist/assets/xapi/{jszip.min.eaecf580.js → jszip.min.19c66d77.js} +1 -1
  20. package/dist/index.js +2 -2
  21. package/package.json +2 -1
  22. /package/dist/assets/{scorm1.2 → indexeddb}/jszip.min.19c66d77.js +0 -0
  23. /package/dist/assets/{web → indexeddb}/jszip.min.63142cc8.js +0 -0
  24. /package/dist/assets/{indexeddb → scorm1.2}/jszip.min.eaecf580.js +0 -0
  25. /package/dist/assets/{indexeddb → web}/jszip.min.4fbcc13f.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$util=require("util"),$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.1--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","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.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>
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}}const $e87da97f5f05ff96$var$execAsync=(0,$3MWDR$util.promisify)($3MWDR$child_process.exec);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{let n=r?`--branch ${r}`:"",o=`git clone --depth 1 ${n} "${e}" "${t}"`;console.log(`Cloning git repository: ${o}`);let{stdout:i,stderr:c}=await $e87da97f5f05ff96$var$execAsync(o);c&&!c.includes("Cloning into")&&console.warn("Git clone warnings:",c),i&&console.log("Git clone output:",i);let u=a?(0,$3MWDR$path.join)(t,a):t;try{await (0,$3MWDR$fspromises.stat)(u)}catch(e){throw Error(`Subdirectory '${a}' not found in cloned repository`)}return u}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{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}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liascript/exporter",
3
- "version": "3.3.1--1.0.10",
3
+ "version": "3.3.3--1.0.10",
4
4
  "description": "A generic exporter for LiaScript",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
@@ -76,6 +76,7 @@
76
76
  "epub-gen": "^0.1.0",
77
77
  "fastify": "^4.26.0",
78
78
  "fs-extra": "^11.3.3",
79
+ "isomorphic-git": "^1.38.4",
79
80
  "jsonld": "^9.0.0",
80
81
  "minimist": "^1.2.5",
81
82
  "node-fetch": "^2.7.0",