UNPKG

@liascript/exporter

Version:
110 lines (103 loc) 361 kB
#!/usr/bin/env node 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.1.0--1.0.3","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 && npm run asset:deduplicate && cp -r dist/assets/common/* dist/assets/pdf","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 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","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,r,t,n=28){let a="",o=Math.max(0,n-(a=e?e.includes("\n")?$731e8d697db57a6f$export$25e837046d67abc2(e.replace("\n",""))+" "+$731e8d697db57a6f$export$73ba5813cda80a49($731e8d697db57a6f$export$4b1de71c2aee5d84(r)):$731e8d697db57a6f$export$25e837046d67abc2(e)+" "+$731e8d697db57a6f$export$73ba5813cda80a49($731e8d697db57a6f$export$4b1de71c2aee5d84(r)):$731e8d697db57a6f$export$73ba5813cda80a49($731e8d697db57a6f$export$4b1de71c2aee5d84(r))).replace(/\x1b\[\d+m/g,"").length),i=80-n,c=t.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(a+" ".repeat(o)+u[0]);for(let e=1;e<u.length;e++)console.log(" ".repeat(n)+u[e])}function $731e8d697db57a6f$export$a80b3bd66acc52ff(e,r=0){let t=80-r,n=e.split(" "),a=[],o="";for(let e of n)(o+e).length>t&&o.length>0?(a.push(o.trim()),o=e+" "):o+=e+" ";o.trim().length>0&&a.push(o.trim());for(let e=0;e<a.length;e++)console.log(" ".repeat(r)+$731e8d697db57a6f$export$5540da1282cbf565(a[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,r)=>{$3MWDR$temp.mkdir("lia",function(t,n){t?r(t):e(n)})})}function $070fc7e985d52a73$export$7f7b8152cc673abe(){let e=process.argv[1],r=$3MWDR$fs.realpathSync(e);return $3MWDR$path.dirname(r)}function $070fc7e985d52a73$export$e772c8ff12451969(e){return new Promise(r=>setTimeout(r,e))}function $070fc7e985d52a73$export$552bfb764b5cd2b4(e,r){return new Promise((t,n)=>{$3MWDR$fsextra.writeFile(e,r,function(e){e?n(e):t("ok")})})}function $070fc7e985d52a73$export$3032dc2899b8ea9b(e){return function(r,t){for(let t of $3MWDR$path.relative($3MWDR$path.resolve(e),r).split($3MWDR$path.sep))if(t.startsWith(".")||"node_modules"===t)return!1;return!0}}function $070fc7e985d52a73$export$31a09876afc8115c(e,r){return $070fc7e985d52a73$export$a976684a0efeb93f(`<script src="https://code.responsivevoice.org/responsivevoice.js?key=${e}"></script>`,r)}function $070fc7e985d52a73$export$a976684a0efeb93f(e,r,t=!1){return"boolean"==typeof t?t?r.replace("<head>","<head>"+e):r.replace("</head>",e+"</head>"):t.startsWith("</")?r.replace(t,e+t):r.replace(t,t+e)}function $070fc7e985d52a73$export$bab98af026af71ac(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("file://")}async function $070fc7e985d52a73$export$8cde213409fd6377(e,r,t,n,a,o){return await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(e,r),$070fc7e985d52a73$export$1b80ed980367b7c1(`<!DOCTYPE html> <html style="height:100%; overflow: hidden"> <head> ${n} </head> <body style="height:100%; margin: 0px"> <iframe id="lia-container" src="" style="${a||"border: 0px; width: 100%; height: 100%"}"></iframe> <script> let path = window.location.pathname.replace("start.html", "") let iframe = document.getElementById("lia-container") if (iframe) { const src = path + "${o||"index.html"}?" + path + "${t.replace("./","")}" iframe.src = src } </script> </body> </html> `)),"ok"}async function $070fc7e985d52a73$export$8901015135f2fb22(e,r){return new Promise((t,n)=>{let a=$3MWDR$fsextra.createWriteStream($3MWDR$path.dirname(r)+"/"+$3MWDR$path.basename(r+".zip")),o=$3MWDR$archiver("zip",{zlib:{level:9}});a.on("close",function(){console.log(o.pointer()+" total bytes"),console.log("archiver has been finalized and the output file descriptor has closed."),t()}),a.on("end",function(){console.log("Data has been drained")}),o.on("warning",function(e){"ENOENT"===e.code?console.warn("Archive warning:",e):n(e)}),o.on("error",function(e){n(e)}),o.pipe(a),o.directory(e,!1),o.finalize()})}function $070fc7e985d52a73$export$4385e60b38654f68(e=16){let r="";for(let t=0;t<e;t++)r+=$070fc7e985d52a73$var$RANDOM_CHARS.charAt(Math.floor(Math.random()*$070fc7e985d52a73$var$RANDOM_CHARS.length));return r}function $070fc7e985d52a73$export$feac2a21aec844b7(e){let r=e.match(/raw\.githubusercontent\.com\/([^\/]+)\/([^\/]+)\/(?:refs\/heads\/)?([^\/]+)\/(.*)/i);if((null==r?void 0:r.length)===5){let[e,t,n,a,o]=r,i=`https://github.com/${t}/${n}`;return{url:i,branch:a,path:o,cmd:`git clone --branch ${a} ${i} tmp`}}return null}async function $070fc7e985d52a73$export$fe2591be8b7e59ce(e){let r=new URL("LICENSE",e).href;return await $070fc7e985d52a73$var$checkFileExists(r)}function $070fc7e985d52a73$export$e0588e7b8006558e(e){let r=e.split("/");return r.pop(),r.join("/")}async function $070fc7e985d52a73$var$checkFileExists(e){try{let r=await $parcel$interopDefault($3MWDR$nodefetch)(e,{method:"HEAD"});return 200===r.status}catch(e){return console.warn(`Error checking if file exists: ${e}`),!1}}function $070fc7e985d52a73$export$1b80ed980367b7c1(e){return $3MWDR$simplybeautiful.html(e,$070fc7e985d52a73$var$BEAUTIFY_OPTIONS)}const $58867fee6a9ce3e2$var$SCHEMA_ORG_CONTEXT="http://schema.org/",$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS={TYPE:"http://schema.org/@type",ID:"http://schema.org/@id",NAME:"http://schema.org/name",URL:"http://schema.org/url",AUTHOR:"http://schema.org/author",EMAIL:"http://schema.org/email",DESCRIPTION:"http://schema.org/description",KEYWORDS:"http://schema.org/keywords",VERSION:"http://schema.org/version",IN_LANGUAGE:"http://schema.org/inLanguage",IMAGE:"http://schema.org/image",LICENSE:"http://schema.org/license",EDUCATIONAL_LEVEL:"http://schema.org/educationalLevel"},$58867fee6a9ce3e2$var$SCHEMA_TYPES={PERSON:"Person",IMAGE_OBJECT:"ImageObject",COURSE:"Course"},$58867fee6a9ce3e2$var$LIASCRIPT_COURSE_URL="https://LiaScript.github.io/course/?";function $58867fee6a9ce3e2$export$34512e3b2db52a4e(){console.log(""),console.log($731e8d697db57a6f$export$46e4a324ac90507f("RDF settings:"),"\n"),$731e8d697db57a6f$export$a80b3bd66acc52ff("RDF (Resource Description Framework) export generates structured metadata for your LiaScript course or your project-yaml in standard linked data formats. This helps with course discovery and enables semantic web applications to understand your content. Available output formats are n-quads and JSON-LD."),console.log("\nLearn more:"),console.log("- RDF: https://www.w3.org/RDF/"),console.log("- N-Quads: https://www.w3.org/TR/n-quads/"),console.log("- JSON-LD: https://json-ld.org/"),console.log(""),$731e8d697db57a6f$export$ae50443ffc990749(null,"--rdf-format"," Output format n-quads, json-ld (defaults to json-ld)."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--rdf-preview"," Output the result to the console."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--rdf-url"," Refer to an external URL when parsing a local project."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--rdf-type"," Course from schema.org is applied as default, overwrite this with EducationalResource, etc."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--rdf-license"," Add a license-URL, otherwise if url was provided as input, this will check for an existing LICENSE file."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--rdf-educationalLevel"," Typically beginner, intermediate or advanced, and formal sets of level indicators."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--rdf-template"," Use a URL or json-file as a template.")}const $58867fee6a9ce3e2$export$d9468344d3651243="rdf";async function $58867fee6a9ce3e2$export$372e2d09604f52f0(e,r){try{let t=await $58867fee6a9ce3e2$export$98e6a39c04603d36(e,r);if("n-quads"===e["rdf-format"]){let r=await $3MWDR$jsonld.toRDF(t,{format:"application/n-quads"});e["rdf-preview"]?console.log(r):await $3MWDR$fsextra.writeFile(e.output+".nq",r)}else t=$58867fee6a9ce3e2$var$clean(t),e["rdf-preview"]?console.log(JSON.stringify(t,null,2)):await $3MWDR$fsextra.writeFile(e.output+".jsonld",JSON.stringify(t,null,2))}catch(e){throw console.error("Error exporting RDF:",e),e}}async function $58867fee6a9ce3e2$export$bc237d627614fc48(e,r){try{let t=await $58867fee6a9ce3e2$export$98e6a39c04603d36(e,r);return t=await $3MWDR$jsonld.compact(t,$58867fee6a9ce3e2$var$SCHEMA_ORG_CONTEXT),t=$58867fee6a9ce3e2$var$clean(t),`<script type="application/ld+json"> ${JSON.stringify(t,null,2)} </script>`}catch(e){throw console.error("Error generating RDF script tag:",e),e}}async function $58867fee6a9ce3e2$export$8e16b83750b44988(e){try{return await $3MWDR$jsonld.compact(e,$58867fee6a9ce3e2$var$SCHEMA_ORG_CONTEXT)}catch(e){throw console.error("Error compacting JSON-LD document:",e),e}}async function $58867fee6a9ce3e2$var$loadTemplate(e){if(!e)return{};try{let r;if($070fc7e985d52a73$export$bab98af026af71ac(e)){let t=await $parcel$interopDefault($3MWDR$nodefetch)(e,{});if(!t.ok)throw Error(`Failed to fetch template: ${t.statusText}`);r=await t.json()}else{let t=await $3MWDR$fsextra.readFile(e,"utf8");r=JSON.parse(t)}if(r)return await $3MWDR$jsonld.expand(r);return console.warn("could not load template from:",e),{}}catch(e){throw console.error("Error loading template:",e),e}}function $58867fee6a9ce3e2$var$setCoreProperties(e,r,t){e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.NAME]=r.lia.str_title,e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.TYPE]=e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.TYPE]||t||$58867fee6a9ce3e2$var$SCHEMA_TYPES.COURSE}function $58867fee6a9ce3e2$var$resolveBaseURL(e,r){return $070fc7e985d52a73$export$bab98af026af71ac(e)||r?$070fc7e985d52a73$export$e0588e7b8006558e(r||e):null}function $58867fee6a9ce3e2$var$setURLProperties(e,r,t){if($070fc7e985d52a73$export$bab98af026af71ac(r)||t){let n=t||r;return e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.ID]=e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.ID]||n,e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.URL]=e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.URL]||"https://LiaScript.github.io/course/?"+n,$58867fee6a9ce3e2$var$resolveBaseURL(r,t)}return null}async function $58867fee6a9ce3e2$var$enrichMetadata(e,r,t,n){return e=$58867fee6a9ce3e2$var$logoInformation(e=$58867fee6a9ce3e2$var$langInformation(e=$58867fee6a9ce3e2$var$baseInformation(e,r),r),r,t),e=await $58867fee6a9ce3e2$var$licenseInformation(e,n,t),n["rdf-educationalLevel"]&&(e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.EDUCATIONAL_LEVEL]=n["rdf-educationalLevel"]),e}async function $58867fee6a9ce3e2$export$98e6a39c04603d36(e,r){try{let t=await $58867fee6a9ce3e2$var$loadTemplate(e["rdf-template"]);$58867fee6a9ce3e2$var$setCoreProperties(t,r,e["rdf-type"]);let n=$58867fee6a9ce3e2$var$setURLProperties(t,e.input,e["rdf-url"]);return t=await $58867fee6a9ce3e2$var$enrichMetadata(t,r.lia.definition,n,e),t=await $3MWDR$jsonld.compact(t,$58867fee6a9ce3e2$var$SCHEMA_ORG_CONTEXT),$58867fee6a9ce3e2$var$clean(t)}catch(e){throw console.error("Error parsing LiaScript to RDF:",e),e}}function $58867fee6a9ce3e2$var$baseInformation(e,r){var t,n,a;if((null==r?void 0:r.author)||(null==r?void 0:r.email)){let t={[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.TYPE]:$58867fee6a9ce3e2$var$SCHEMA_TYPES.PERSON};(null==r?void 0:r.author)&&(t[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.NAME]=null==r?void 0:r.author),(null==r?void 0:r.email)&&(t[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.EMAIL]=null==r?void 0:r.email),e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.AUTHOR]=e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.AUTHOR]||t}if((null==(t=r.macro)?void 0:t.comment)&&(e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.DESCRIPTION]=e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.DESCRIPTION]||(null==(n=r.macro)?void 0:n.comment)),null==(a=r.macro)?void 0:a.tags)if("string"==typeof e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.KEYWORDS])e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.KEYWORDS]+=", "+r.macro.tags;else{let t=r.macro.tags.split(",").map(e=>e.trim());void 0===e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.KEYWORDS]?e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.KEYWORDS]=t:e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.KEYWORDS]=e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.KEYWORDS].concat(t)}return(null==r?void 0:r.version)&&(e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.VERSION]=e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.VERSION]||(null==r?void 0:r.version)),e}function $58867fee6a9ce3e2$var$langInformation(e,r){return(null==r?void 0:r.language)&&(e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.IN_LANGUAGE]=e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.IN_LANGUAGE]||r.language),e}function $58867fee6a9ce3e2$var$logoInformation(e,r,t){if(null==r?void 0:r.logo){let n=null;$070fc7e985d52a73$export$bab98af026af71ac(null==r?void 0:r.logo)?n=null==r?void 0:r.logo:t&&(n=new URL(null==r?void 0:r.logo,t).href),n&&(e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.IMAGE]=e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.IMAGE]||{[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.TYPE]:$58867fee6a9ce3e2$var$SCHEMA_TYPES.IMAGE_OBJECT,[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.URL]:n})}return e}async function $58867fee6a9ce3e2$var$licenseInformation(e,r,t){let n=null;if(r["rdf-license"])n=r["rdf-license"];else if(t&&await $070fc7e985d52a73$export$fe2591be8b7e59ce(t))try{n=new URL("LICENSE",t).href}catch(e){console.warn("Could not create a URL for the LICENSE file, using base URL as license URL.",t)}return n&&(e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.LICENSE]=e[$58867fee6a9ce3e2$var$SCHEMA_ORG_PROPS.LICENSE]||n),e}function $58867fee6a9ce3e2$var$clean(e){return e&&"object"==typeof e?Array.isArray(e)?e.map(e=>$58867fee6a9ce3e2$var$clean(e)):Object.keys(e).reduce((r,t)=>{let n=e[t];return t.startsWith("schema:")?r[t.split(":").pop()||t]=n:r[t]=$58867fee6a9ce3e2$var$clean(n),r},{}):e}function $455519058ce391fd$export$34512e3b2db52a4e(){console.log(""),console.log($731e8d697db57a6f$export$46e4a324ac90507f("SCORM settings:"),"\n"),$731e8d697db57a6f$export$a80b3bd66acc52ff("SCORM (Sharable Content Object Reference Model) 1.2 & 2004 are standards for e-learning content that can be imported into LMS platforms like Moodle, Blackboard, and others."),console.log("\nLearn more: https://scorm.com/scorm-explained/\n"),console.log("Known SCORM configurations per LMS:\n https://www.npmjs.com/package/@liascript/exporter#scorm-examples\n"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--scorm-organization"," set the organization title"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--scorm-masteryScore"," set the scorm masteryScore (a value between 0 -- 100), default is 0"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--scorm-typicalDuration"," set the scorm duration, default is PT0H5M0S"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--scorm-iframe"," use an iframe, when a SCORM starting parameter is not working"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--scorm-embed"," embed the Markdown into the JS code, use in Moodle 4 to handle restrictions with dynamic loading")}const $455519058ce391fd$export$d9468344d3651243="scorm1.2";async function $455519058ce391fd$export$372e2d09604f52f0(e,r){let t=await $070fc7e985d52a73$export$6b76988456c0292f(),n=$070fc7e985d52a73$export$7f7b8152cc673abe(),a=$3MWDR$path.join(t,"pro");await $3MWDR$fsextra.copy($3MWDR$path.join(n,"./assets/scorm1.2"),a),await $3MWDR$fsextra.copy($3MWDR$path.join(n,"./assets/common"),a);let o=$3MWDR$fsextra.readFileSync($3MWDR$path.join(a,"index.html"),"utf8");e.key&&(o=$070fc7e985d52a73$export$31a09876afc8115c(e.key,o)),o=$070fc7e985d52a73$export$a976684a0efeb93f('<script src="config.js"><\/script>',o),await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(a,"config.js"),"window.config_ = "+JSON.stringify({task:r.task,quiz:r.quiz,survey:r.survey})+";");let i=await $58867fee6a9ce3e2$export$bc237d627614fc48(e,r);e["scorm-iframe"]&&await $070fc7e985d52a73$export$8cde213409fd6377(a,"start.html",e.readme,i,e.style),e["scorm-embed"]&&(o=$070fc7e985d52a73$export$a976684a0efeb93f('<script src="course.js"><\/script>',o,!0),await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(a,"course.js"),'window["liascript_course"] = '+JSON.stringify(e["scorm-embed"])));try{o=$070fc7e985d52a73$export$a976684a0efeb93f(i,o),await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(a,"index.html"),o)}catch(e){console.warn(e);return}await $3MWDR$fsextra.copy(e.path,a,{filter:$070fc7e985d52a73$export$3032dc2899b8ea9b(e.path)});let c={version:"1.2",organization:e["scorm-organization"]||"LiaScript",title:r.lia.str_title,language:r.lia.definition.language,masteryScore:e["scorm-masteryScore"]||0,startingPage:e["scorm-iframe"]?"start.html":"index.html",startingParameters:e["scorm-iframe"]||e["scorm-embed"]?void 0:e.readme,source:$3MWDR$path.join(t,"pro"),package:{version:r.lia.definition.version,zip:!0,appendTimeToOutput:!1,name:$3MWDR$path.basename(e.output),author:r.lia.definition.author,outputFolder:$3MWDR$path.dirname(e.output),filename:$3MWDR$path.basename(e.output+".zip"),description:r.lia.comment,typicalDuration:e["scorm-typicalDuration"]||"PT0H5M0S",vcard:{author:r.lia.definition.author,org:e["scorm-organization"]||"LiaScript",mail:r.lia.definition.email}}};await $3MWDR$liascriptsimplescormpackager(c)}function $7eeb04a4e678ba02$export$34512e3b2db52a4e(){console.log(""),console.log($731e8d697db57a6f$export$46e4a324ac90507f("IMS settings:"),"\n"),$731e8d697db57a6f$export$a80b3bd66acc52ff("IMS (Instructional Management Systems) Content Package is an interoperable standard format for packaging learning content between different LMSes."),console.log("\nLearn more: https://www.imsglobal.org/content/packaging/index.html\n"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--ims-indexeddb"," Use IndexedDB to store data persistently"),console.log(""),console.log($731e8d697db57a6f$export$46e4a324ac90507f("WEB settings:"),"\n"),$731e8d697db57a6f$export$a80b3bd66acc52ff("Pack the project into a self contained web project that can be hosted everywhere."),console.log(""),$731e8d697db57a6f$export$ae50443ffc990749(null,"--web-iframe"," Use an iframed version to hide the course URL."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--web-indexeddb"," This will allow to store data within the browser using indexeddb, you can optionally pass a unique key (by default one is generated randomly)."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--web-zip"," By default the result is not zipped, you can change this with this parameter.")}const $7eeb04a4e678ba02$export$d9468344d3651243="ims";async function $7eeb04a4e678ba02$export$372e2d09604f52f0(e,r){"string"==typeof r&&(r=JSON.parse(r));let t=$070fc7e985d52a73$export$7f7b8152cc673abe(),n=await $070fc7e985d52a73$export$6b76988456c0292f(),a=$3MWDR$path.join(n,"pro");await $3MWDR$fsextra.copy($3MWDR$path.join(t,e["ims-indexeddb"]?"./assets/indexeddb":"./assets/web"),a),await $3MWDR$fsextra.copy($3MWDR$path.join(t,"./assets/common"),a);let o=$3MWDR$fsextra.readFileSync($3MWDR$path.join(a,"index.html"),"utf8");e.key&&(o=$070fc7e985d52a73$export$31a09876afc8115c(e.key,o));try{await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(a,"index.html"),o)}catch(e){console.warn(e);return}if(await $7eeb04a4e678ba02$var$manifest(a,r.lia),await $3MWDR$fsextra.copy(e.path,a,{filter:$070fc7e985d52a73$export$3032dc2899b8ea9b(e.path)}),e["ims-indexeddb"]){let r=$070fc7e985d52a73$export$4385e60b38654f68(20)+".md",t=$3MWDR$path.join(a,e.readme),n=$3MWDR$path.join($3MWDR$path.dirname(t),r);e.readme=e.readme.replace($3MWDR$path.basename(e.readme),r),await $3MWDR$fsextra.move(t,n)}let i=await $58867fee6a9ce3e2$export$bc237d627614fc48(e,r);await $070fc7e985d52a73$export$8cde213409fd6377(a,"start.html",e.readme,i,e.style),await $070fc7e985d52a73$export$8901015135f2fb22(a,e.output)}async function $7eeb04a4e678ba02$var$manifest(e,r){let t="";try{let e=r.definition.macro.tags.split(",").map(e=>e.trim());for(let n=0;n<e.length;n++)t+=`<imsmd:langstring xml:lang="${r.definition.language}">${e[n]}</imsmd:langstring>`}catch(e){}await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(e,"imsmanifest.xml"),`<manifest xmlns="http://www.imsglobal.org/xsd/imscp_v1p1" xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 http://www.imsglobal.org/xsd/imscp_v1p1.xsd http://www.imsglobal.org/xsd/imsmd_v1p2 http://www.imsglobal.org/xsd/imsmd_v1p2.xsd " identifier="Manifest5-CEC3D3-3201-DF8E-8F42-3CEED12F4197" version="IMS CP 1.1.4"> <metadata> <schema>IMS Content</schema> <schemaversion>1.1.4</schemaversion> <imsmd:lom> <imsmd:general> <imsmd:title> <imsmd:langstring xml:lang="${r.definition.language}">${r.str_title}</imsmd:langstring> </imsmd:title> <imsmd:language>${r.definition.language}</imsmd:language> <imsmd:description> <imsmd:langstring xml:lang="${r.definition.language}">${r.comment}</imsmd:langstring> </imsmd:description> <imsmd:keyword> ${t} </imsmd:keyword> </imsmd:general> <imsmd:lifecycle> <imsmd:version> <imsmd:langstring xml:lang="${r.definition.language}">${r.definition.version}</imsmd:langstring> </imsmd:version> </imsmd:lifecycle> </imsmd:lom> </metadata> <organizations default="TOC1"> <organization identifier="TOC1" structure="hierarchical"> <title>All Lessons</title> <item identifier="ITEM1" identifierref="LIASCRIPT"> <title>LiaScript - Course</title> </item> </organization> </organizations> <resources> <resource identifier="LIASCRIPT" type="webcontent" href="start.html"> <file href="start.html" /> </resource> </resources> </manifest>`)}var $42514d84790f50f1$require$exec=$3MWDR$child_process.exec;function $42514d84790f50f1$export$34512e3b2db52a4e(){console.log(""),console.log($731e8d697db57a6f$export$46e4a324ac90507f("Android settings:"),"\n"),$731e8d697db57a6f$export$a80b3bd66acc52ff("Android export generates a native Android application (.apk) from your LiaScript course using Capacitor. This requires the Android SDK to be installed on your system.\n"),console.log("\nLearn more:"),console.log("- Capacitor: https://capacitorjs.com/"),console.log("- Android SDK: https://developer.android.com/studio"),console.log(""),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-sdk"," Specify sdk.dir which is required for building."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-appName"," Name of the App (Main-title is used as default)."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-appId"," Required to identify your App reverse url such as io.github.liascript"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-icon"," Optional icon with 1024x1024 px"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-iconBackgroundColor"," Optional background color for the icon"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-iconBackgroundColorDark"," Optional background color for the icon in dark mode"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-release"," Create release APK build (requires signing setup)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-bundle"," Create release AAB bundle for Play Store (requires signing setup)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-keystore"," Path to keystore file for signing"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-keystorePassword"," Keystore password (or use KEYSTORE_PASSWORD env var)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-keyAlias"," Key alias (default: release, or use KEY_ALIAS env var)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-keyPassword"," Key password (or use KEY_PASSWORD env var)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--android-preview"," Open course in Android-Studio")}const $42514d84790f50f1$export$d9468344d3651243="android";async function $42514d84790f50f1$export$372e2d09604f52f0(e,r){let t=await $070fc7e985d52a73$export$6b76988456c0292f(),n=$070fc7e985d52a73$export$7f7b8152cc673abe();await $3MWDR$fsextra.copy($3MWDR$path.join(n,"./assets/capacitor"),$3MWDR$path.join(t,"./www")),await $3MWDR$fsextra.copy($3MWDR$path.join(n,"./assets/common"),$3MWDR$path.join(t,"./www")),await $3MWDR$fsextra.copy($3MWDR$path.join(n,"./resources"),$3MWDR$path.join(t,"./assets")),e["android-preview"]?await $3MWDR$fsextra.symlink($3MWDR$path.resolve(e.path),$3MWDR$path.join(t,"./www/res"),"dir"):await $3MWDR$fsextra.copy($3MWDR$path.resolve(e.path),$3MWDR$path.join(t,"./www/res"),{filter:$070fc7e985d52a73$export$3032dc2899b8ea9b(e.path)});let a=$3MWDR$path.join(n,"./capacitor-cache");$3MWDR$fsextra.existsSync(a)?(console.log("Using cached Capacitor dependencies for Android export"),await $3MWDR$fsextra.copy(a,t)):(a=null,await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(t,"package.json"),`{ "scripts": { "build": "npx cap sync android" }, "dependencies": { "@capacitor/cli": "^8.0.0", "@capacitor-community/text-to-speech": "git+https://github.com/capacitor-community/text-to-speech.git#v8.0.0", "@capacitor/android": "^8.0.0", "@capacitor/assets": "^3.0.5", "@capacitor/core": "^8.0.0" }, "engines": { "node": ">= 12" } }`)),await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(t,"capacitor.config.ts"),`import { CapacitorConfig } from '@capacitor/cli' const config: CapacitorConfig = { appId: "${e["android-appId"]}", appName: "${e["android-appName"]||r.lia.str_title}", webDir: 'www', server: { androidScheme: 'http' }, plugins: { SystemBars: { insetsHandling: 'css', style: 'light', overlaysWebView: true, backgroundColor: '#00000000', }, }, } export default config`);let o=$3MWDR$fsextra.readFileSync($3MWDR$path.join(t,"www/index.html"),"utf8");o=$070fc7e985d52a73$export$a976684a0efeb93f(`<script> if (!window.LIA) { window.LIA = {} } window.LIA.defaultCourseURL = "./res/${$3MWDR$path.basename(e.readme)}"</script>`,o,"<body>");try{await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(t,"www/index.html"),o)}catch(e){console.warn(e);return}$42514d84790f50f1$var$execute([a?'echo "Using cached Capacitor dependencies"':"npm i","npx cap add android","npx cap sync",`npx @capacitor/assets generate --iconBackgroundColor '${e["android-iconBackgroundColor"]||"#bbbbbb"}' --iconBackgroundColorDark '${e["android-iconBackgroundColorDark"]||"#555555"}'`],t,async function(){await $42514d84790f50f1$var$sdk(t,e["android-sdk"]),e["android-preview"]?$42514d84790f50f1$var$execute(["npx cap open android"],t,()=>{console.log("ready")}):e["android-bundle"]?(await $42514d84790f50f1$var$configureSigning(t,e),$42514d84790f50f1$var$execute(["./gradlew bundleRelease --stacktrace"],$3MWDR$path.join(t,"android"),function(){let r=$3MWDR$path.join(t,"android/app/build/outputs/bundle/release/app-release.aab");$3MWDR$fsextra.existsSync(r)?(console.warn("✅ AAB bundle created successfully"),$3MWDR$fsextra.copySync(r,e.output+".aab"),console.log(`\u{2705} Signed AAB: ${e.output}.aab`)):(console.error("❌ AAB file not found. Build may have failed."),process.exit(1))})):e["android-release"]?(await $42514d84790f50f1$var$configureSigning(t,e),$42514d84790f50f1$var$execute(["./gradlew assembleRelease --stacktrace"],$3MWDR$path.join(t,"android"),function(){console.warn("✅ APK created successfully"),$3MWDR$fsextra.copySync($3MWDR$path.join(t,"android/app/build/outputs/apk/release/app-release.apk"),e.output+".apk")})):$42514d84790f50f1$var$execute(["./gradlew assembleDebug --stacktrace"],$3MWDR$path.join(t,"android"),function(){console.warn("✅ Debug APK created"),$3MWDR$fsextra.copySync($3MWDR$path.join(t,"android/app/build/outputs/apk/debug/app-debug.apk"),e.output+".apk")})})}async function $42514d84790f50f1$var$sdk(e,r){let t=$3MWDR$path.join(e,"android");try{let e=process.env.JAVA_HOME||"/usr/lib/jvm/java-21-openjdk-amd64";await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(t,"gradle.properties"),`# Project-wide Gradle settings. org.gradle.java.home=${e} org.gradle.jvmargs=-Xmx1536m android.useAndroidX=true`)}catch(e){console.warn("Warning: Could not write gradle.properties:",e)}if(r)try{await $070fc7e985d52a73$export$552bfb764b5cd2b4($3MWDR$path.join(t,"local.properties"),`sdk.dir=${r}`)}catch(e){console.warn("Warning: Could not write local.properties:",e)}}async function $42514d84790f50f1$var$configureSigning(e,r){let t=$3MWDR$path.join(e,"android"),n=$3MWDR$path.join(t,"app/build.gradle"),a=r["android-keystore"]||process.env.KEYSTORE_FILE,o=r["android-keystorePassword"]||process.env.KEYSTORE_PASSWORD,i=r["android-keyAlias"]||process.env.KEY_ALIAS||"release",c=r["android-keyPassword"]||process.env.KEY_PASSWORD||o;if(!a)throw console.error("ERROR: Keystore file not specified!"),console.error("Use --android-keystore or set KEYSTORE_FILE environment variable"),Error("Keystore file required for signed builds");if(!$3MWDR$fsextra.existsSync(a))throw console.error(`ERROR: Keystore file not found: ${a}`),Error("Keystore file does not exist");if(!o||!c)throw console.error("ERROR: Keystore passwords not provided!"),console.error("Use --android-keystorePassword and --android-keyPassword"),console.error("Or set KEYSTORE_PASSWORD and KEY_PASSWORD environment variables"),Error("Keystore passwords required for signed builds");console.log(`Configuring signing with keystore: ${a}`);let u=$3MWDR$fsextra.readFileSync(n,"utf8"),s=` signingConfigs { release { storeFile file("${a}") storePassword "${o}" keyAlias "${i}" keyPassword "${c}" } } `;u=(u=u.replace(/android\s*\{/,`android { ${s}`)).replace(/buildTypes\s*\{[\s\S]*?release\s*\{/,e=>e+"\n signingConfig signingConfigs.release"),await $070fc7e985d52a73$export$552bfb764b5cd2b4(n,u),console.log("Signing configuration added to build.gradle")}function $42514d84790f50f1$var$execute(e,r,t){let n=e.shift();n?(console.log("exec:",n),$42514d84790f50f1$require$exec(n,{cwd:r},async(a,o,i)=>{a?console.error(`\u{274C} Command failed: ${a.message}`):(i&&!n.includes("gradlew")&&console.warn(`stderr: ${i}`),o&&!n.includes("gradlew")&&console.log(`stdout: ${o}`),$42514d84790f50f1$var$execute(e,r,t))})):t()}const $2358171a5699e480$var$DEFAULT_TIMEOUT_MS=15e3,$2358171a5699e480$var$DEFAULT_MARGIN_TOP=80,$2358171a5699e480$var$DEFAULT_MARGIN_BOTTOM=80,$2358171a5699e480$var$DEFAULT_MARGIN_LEFT=30,$2358171a5699e480$var$DEFAULT_MARGIN_RIGHT=30,$2358171a5699e480$var$DEFAULT_SCALE=1,$2358171a5699e480$var$DEFAULT_FORMAT="a4",$2358171a5699e480$var$DEFAULT_PRINT_BACKGROUND=!0,$2358171a5699e480$var$DEFAULT_DISPLAY_HEADER_FOOTER=!1,$2358171a5699e480$var$DEFAULT_LANDSCAPE=!1,$2358171a5699e480$var$DEFAULT_OMIT_BACKGROUND=!1;function $2358171a5699e480$export$34512e3b2db52a4e(){console.log(""),console.log($731e8d697db57a6f$export$46e4a324ac90507f("PDF settings:"),"\n"),$731e8d697db57a6f$export$a80b3bd66acc52ff("PDF export generates printable documents from your LiaScript course using Puppeteer, a headless Chrome browser automation tool. This allows for high-quality rendering of all course elements including interactive content."),console.log("\nLearn more: https://pptr.dev/ \n"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-stylesheet"," Inject an local CSS for changing the appearance."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-theme"," LiaScript themes: default, turquoise, blue, red, yellow"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-timeout"," Set an additional time horizon to wait until finished (default 15000 ms)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-preview"," Open preview-browser (default false), print not possible"),console.log(""),console.log($731e8d697db57a6f$export$5540da1282cbf565("The following are puppeteer specific settings.")),console.log("\nLearn more:\n https://github.com/puppeteer/puppeteer/blob/main/docs/api.md#pagepdfoptions\n"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-scale"," Scale of the webpage rendering. Defaults to 1. Scale amount must be between 0.1 and 2."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-displayHeaderFooter"," Display header and footer. Defaults to false."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-headerTemplate"," HTML template for the print header, inject classes date, title, url, pageNumber, totalPages"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-footerTemplate"," HTML template for the print footer. Should use the same format as the headerTemplate"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-printBackground"," Print background graphics. Defaults to false"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-landscape"," Paper orientation. Defaults to false."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-pageRanges",' Paper ranges to print, e.g., "1-5, 8, 11-13"'),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-format"," Paper format. If set, takes priority over width or height options. Defaults to a4."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-width"," Paper width, accepts values labeled with units."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-height"," Paper height, accepts values labeled with units."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-margin-top"," Top margin, accepts values labeled with units."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-margin-right"," Right margin, accepts values labeled with units."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-margin-bottom"," Bottom margin, accepts values labeled with units."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-margin-left"," Left margin, accepts values labeled with units. "),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-preferCSSPageSize"," Give any CSS @page size declared in the page priority over what is declared in width and height or format options."),$731e8d697db57a6f$export$ae50443ffc990749(null,"--pdf-omitBackground"," Hides default white background and allows capturing screenshots with transparency. Defaults to true. ")}const $2358171a5699e480$export$d9468344d3651243="pdf";async function $2358171a5699e480$export$372e2d09604f52f0(e){let r=$070fc7e985d52a73$export$7f7b8152cc673abe(),t=`file://${r}/assets/pdf/index.html?`;$070fc7e985d52a73$export$bab98af026af71ac(e.input)?t+=e.input:t+="file://"+$3MWDR$path.resolve(e.input);let n=null,a=null;try{let o,i={pipe:!0,args:["--no-sandbox","--disable-web-security","--disable-features=IsolateOrigins","--disable-site-isolation-trials","--unhandled-rejections=strict","--disable-features=BlockInsecurePrivateNetworkRequests","--allow-file-access-from-files","--enable-local-file-accesses","--enable-features=ExperimentalJavaScript"],headless:!e["pdf-preview"]};process.env.PUPPETEER_EXECUTABLE_PATH?i.executablePath=process.env.PUPPETEER_EXECUTABLE_PATH:i.channel="chrome";try{n=await $parcel$interopDefault($3MWDR$puppeteer).launch(i)}catch(e){throw Error(`Failed to launch browser. Make sure Chrome is installed. ${e}`)}a=await n.newPage(),console.log("Loading course content... This may take a while for large courses."),a.on("dialog",async e=>{console.log(`[Dialog ${e.type()}]: ${e.message()}`),await e.accept()});let c=new Promise(e=>{o=e});if(a.on("console",e=>{let r=e.text();r.startsWith("__RENDER_DONE__")&&(console.log("got render done signal:",r),o())}),await a.setExtraHTTPHeaders({referer:"https://liascript.github.io/"}),await a.goto(t,{waitUntil:"networkidle2",timeout:15e3}),e["pdf-stylesheet"]){let t=$3MWDR$path.resolve(r+"/../",e["pdf-stylesheet"]);try{await a.evaluate(async e=>{let r=document.createElement("link");r.rel="stylesheet",r.href=e;let t=new Promise((e,t)=>{r.onload=e,r.onerror=t});document.head.appendChild(r),await t},t)}catch(r){throw Error(`Failed to load custom stylesheet from '${e["pdf-stylesheet"]}': ${r}`)}}if(e["pdf-theme"])try{await a.evaluate(async e=>{document.documentElement.classList.remove("lia-theme-default"),document.documentElement.classList.add("lia-theme-"+e)},e["pdf-theme"])}catch(r){throw Error(`Failed to apply theme '${e["pdf-theme"]}': ${r}`)}e["pdf-preview"]?console.log("Preview mode enabled - browser will remain open"):(await c,e["pdf-timeout"]&&await $070fc7e985d52a73$export$e772c8ff12451969(e["pdf-timeout"]),await $2358171a5699e480$var$toPDF(e,a))}catch(e){throw console.error("PDF export failed:",e.message),Error(`Failed to export PDF: ${e.message}`)}finally{if(e["pdf-preview"])console.log("Browser kept open for preview. Close manually when done.");else{if(a)try{await a.close()}catch(e){console.error("Failed to close page:",e)}if(n)try{await n.close()}catch(e){console.error("Failed to close browser:",e)}}}}async function $2358171a5699e480$var$toPDF(e,r){try{await r.emulateMediaType("screen")}catch(e){throw Error(`Failed to emulate media type: ${e}`)}try{var t,n,a,o,i,c,u,s;await r.pdf({path:e.output+".pdf",format:e["pdf-format"]||"a4",printBackground:null==(t=e["pdf-printBackground"])||t,displayHeaderFooter:null!=(n=e["pdf-displayHeaderFooter"])&&n,margin:{top:e["pdf-margin-top"]||80,bottom:e["pdf-margin-bottom"]||80,left:e["pdf-margin-left"]||30,right:e["pdf-margin-right"]||30},scale:null!=(a=e["pdf-scale"])?a:1,headerTemplate:e["pdf-headerTemplate"],footerTemplate:null!=(o=e["pdf-footerTemplate"])?o:"",landscape:null!=(i=e["pdf-landscape"])&&i,width:null!=(c=e["pdf-width"])?c:"",height:null!=(u=e["pdf-height"])?u:"",pageRanges:e["pdf-pageRanges"],preferCSSPageSize:e["pdf-preferCSSPageSize"],omitBackground:null!=(s=e["pdf-omitBackground"])&&s}),console.log(`PDF successfully generated: ${e.output}.pdf`)}catch(r){throw Error(`Failed to generate PDF at '${e.output}.pdf': ${r.message}`)}}const $02e6fd5277cb1195$var$DEFAULT_TIMEOUT_MS=15e3,$02e6fd5277cb1195$var$DEFAULT_EPUB_VERSION=3,$02e6fd5277cb1195$var$DEFAULT_LANG="en",$02e6fd5277cb1195$var$DEFAULT_TOC_TITLE="Table Of Contents",$02e6fd5277cb1195$var$DEFAULT_APPEND_CHAPTER_TITLES=!0,$02e6fd5277cb1195$var$DEFAULT_HIDE_TOC=!1;function $02e6fd5277cb1195$export$34512e3b2db52a4e(){console.log(""),console.log($731e8d697db57a6f$export$46e4a324ac90507f("EPUB settings:"),"\n"),$731e8d697db57a6f$export$a80b3bd66acc52ff("EPUB export generates e-books from your LiaScript course using Puppeteer to render the content and the @lesjoursfr/html-to-epub library to create the EPUB file. This allows for high-quality e-books compatible with most e-readers."),console.log("\nLearn more: https://www.npmjs.com/package/@lesjoursfr/html-to-epub \n"),console.log($731e8d697db57a6f$export$46e4a324ac90507f("Required settings:"),"\n"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-title"," Title of the book (required)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-author"," Author name(s), semicolon-separated for multiple authors"),console.log(""),console.log($731e8d697db57a6f$export$46e4a324ac90507f("Optional settings:"),"\n"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-publisher"," Publisher name"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-cover"," Path to cover image (absolute path or URL)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-description"," Book description"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-language"," Language code in 2 letters (default: en)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-version"," EPUB version: 2 or 3 (default: 3)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-stylesheet"," Path to custom CSS file for styling"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-theme"," LiaScript theme: default, turquoise, blue, red, yellow"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-toc-title",` Title for table of contents (default: "${$02e6fd5277cb1195$var$DEFAULT_TOC_TITLE}")`),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-hide-toc"," Hide table of contents in the generated EPUB (default: false)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-timeout"," Additional wait time for rendering in ms (default: 15000)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-fonts"," Comma-separated paths to custom font files to embed"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-chapter-title"," Custom title for the main chapter (default: course title)"),$731e8d697db57a6f$export$ae50443ffc990749(null,"--epub-preview"," Open preview browser for debugging (default: false)")}const $02e6fd5277cb1195$export$d9468344d3651243="epub";async function $02e6fd5277cb1195$export$372e2d09604f52f0(e,r){let t=$070fc7e985d52a73$export$7f7b8152cc673abe(),n=`file://${t}/assets/pdf/index.html?`;$070fc7e985d52a73$export$bab98af026af71ac(e.input)?n+=e.input:n+="file://"+$3MWDR$path.resolve(e.input);let a=null,o=null;try{let i,c={pipe:!0,args:["--no-sandbox","--disable-web-security","--disable-features=IsolateOrigins","--disable-site-isolation-trials","--unhandled-rejections=strict","--disable-features=BlockInsecurePrivateNetworkRequests","--allow-file-access-from-files","--enable-local-file-accesses","--enable-features=ExperimentalJavaScript"],headless:!e["epub-preview"]};process.env.PUPPETEER_EXECUTABLE_PATH?c.executablePath=process.env.PUPPETEER_EXECUTABLE_PATH:c.channel="chrome";try{a=await $parcel$interopDefault($3MWDR$puppeteer).launch(c)}catch(e){throw Error(`Failed to launch br