Просмотр исходного кода

initial work on zip packaging task

Hakim El Hattab 1 месяц назад
Родитель
Сommit
4506894770
4 измененных файлов с 174 добавлено и 4 удалено
  1. 3 1
      .gitignore
  2. 129 3
      package-lock.json
  3. 2 0
      package.json
  4. 40 0
      zip.js

+ 3 - 1
.gitignore

@@ -8,4 +8,6 @@ out/
 log/*.log
 tmp/**
 node_modules/
-.sass-cache
+.sass-cache
+reveal-js-presentation
+reveal-js-presentation.zip

+ 129 - 3
package-lock.json

@@ -9,9 +9,12 @@
 			"version": "6.0.0-rc.1",
 			"license": "MIT",
 			"devDependencies": {
+				"@types/glob": "^8.1.0",
+				"@types/jszip": "^3.4.1",
 				"fitty": "^2.4.2",
 				"glob": "^10.3.10",
 				"highlight.js": "^11.10.0",
+				"jszip": "^3.10.1",
 				"marked": "^4.3.0",
 				"node-qunit-puppeteer": "^2.2.0",
 				"qunit": "^2.22.0",
@@ -1358,12 +1361,37 @@
 			"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
 			"dev": true
 		},
+		"node_modules/@types/glob": {
+			"version": "8.1.0",
+			"resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz",
+			"integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==",
+			"dev": true,
+			"dependencies": {
+				"@types/minimatch": "^5.1.2",
+				"@types/node": "*"
+			}
+		},
+		"node_modules/@types/jszip": {
+			"version": "3.4.1",
+			"resolved": "https://registry.npmjs.org/@types/jszip/-/jszip-3.4.1.tgz",
+			"integrity": "sha512-TezXjmf3lj+zQ651r6hPqvSScqBLvyPI9FxdXBqpEwBijNGQ2NXpaFW/7joGzveYkKQUil7iiDHLo6LV71Pc0A==",
+			"deprecated": "This is a stub types definition. jszip provides its own type definitions, so you do not need this installed.",
+			"dev": true,
+			"dependencies": {
+				"jszip": "*"
+			}
+		},
+		"node_modules/@types/minimatch": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+			"integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
+			"dev": true
+		},
 		"node_modules/@types/node": {
 			"version": "22.9.0",
 			"resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
 			"integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
 			"dev": true,
-			"optional": true,
 			"dependencies": {
 				"undici-types": "~6.19.8"
 			}
@@ -1933,6 +1961,12 @@
 			"integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
 			"dev": true
 		},
+		"node_modules/core-util-is": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+			"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+			"dev": true
+		},
 		"node_modules/cosmiconfig": {
 			"version": "9.0.0",
 			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
@@ -2469,6 +2503,12 @@
 				}
 			]
 		},
+		"node_modules/immediate": {
+			"version": "3.0.6",
+			"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+			"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+			"dev": true
+		},
 		"node_modules/immutable": {
 			"version": "4.3.7",
 			"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
@@ -2500,6 +2540,12 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/inherits": {
+			"version": "2.0.4",
+			"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+			"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+			"dev": true
+		},
 		"node_modules/ip-address": {
 			"version": "9.0.5",
 			"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
@@ -2576,6 +2622,12 @@
 				"node": ">=0.12.0"
 			}
 		},
+		"node_modules/isarray": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+			"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+			"dev": true
+		},
 		"node_modules/isexe": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -2651,12 +2703,33 @@
 				"graceful-fs": "^4.1.6"
 			}
 		},
+		"node_modules/jszip": {
+			"version": "3.10.1",
+			"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+			"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+			"dev": true,
+			"dependencies": {
+				"lie": "~3.3.0",
+				"pako": "~1.0.2",
+				"readable-stream": "~2.3.6",
+				"setimmediate": "^1.0.5"
+			}
+		},
 		"node_modules/kolorist": {
 			"version": "1.8.0",
 			"resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz",
 			"integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
 			"dev": true
 		},
+		"node_modules/lie": {
+			"version": "3.3.0",
+			"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+			"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+			"dev": true,
+			"dependencies": {
+				"immediate": "~3.0.5"
+			}
+		},
 		"node_modules/lines-and-columns": {
 			"version": "1.2.4",
 			"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@@ -2883,6 +2956,12 @@
 			"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
 			"dev": true
 		},
+		"node_modules/pako": {
+			"version": "1.0.11",
+			"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+			"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+			"dev": true
+		},
 		"node_modules/parent-module": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -3020,6 +3099,12 @@
 				"node": "^10 || ^12 || >=14"
 			}
 		},
+		"node_modules/process-nextick-args": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+			"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+			"dev": true
+		},
 		"node_modules/progress": {
 			"version": "2.0.3",
 			"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -3137,6 +3222,21 @@
 				"node": ">=10"
 			}
 		},
+		"node_modules/readable-stream": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+			"dev": true,
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
 		"node_modules/readdirp": {
 			"version": "4.0.2",
 			"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
@@ -3231,6 +3331,12 @@
 				"fsevents": "~2.3.2"
 			}
 		},
+		"node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+			"dev": true
+		},
 		"node_modules/sass": {
 			"version": "1.80.6",
 			"resolved": "https://registry.npmjs.org/sass/-/sass-1.80.6.tgz",
@@ -3263,6 +3369,12 @@
 				"node": ">=10"
 			}
 		},
+		"node_modules/setimmediate": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+			"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+			"dev": true
+		},
 		"node_modules/shebang-command": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -3371,6 +3483,15 @@
 				"bare-events": "^2.2.0"
 			}
 		},
+		"node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dev": true,
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
+			}
+		},
 		"node_modules/string-argv": {
 			"version": "0.3.2",
 			"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
@@ -3620,8 +3741,7 @@
 			"version": "6.19.8",
 			"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
 			"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
-			"dev": true,
-			"optional": true
+			"dev": true
 		},
 		"node_modules/universalify": {
 			"version": "2.0.1",
@@ -3647,6 +3767,12 @@
 			"integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==",
 			"dev": true
 		},
+		"node_modules/util-deprecate": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+			"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+			"dev": true
+		},
 		"node_modules/vite": {
 			"version": "5.4.18",
 			"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.18.tgz",

+ 2 - 0
package.json

@@ -55,6 +55,7 @@
 		"build:core": "tsc && vite build && vite build -c vite.config.styles.ts",
 		"build:styles": "vite build -c vite.config.styles.ts",
 		"build": "tsc && vite build && vite build -c vite.config.styles.ts && vite build -c plugin/highlight/vite.config.ts && vite build -c plugin/markdown/vite.config.ts && vite build -c plugin/math/vite.config.ts && vite build -c plugin/notes/vite.config.ts && vite build -c plugin/search/vite.config.ts && vite build -c plugin/zoom/vite.config.ts",
+		"package": "node zip.js",
 		"test": "node test.js"
 	},
 	"author": {
@@ -78,6 +79,7 @@
 		"fitty": "^2.4.2",
 		"glob": "^10.3.10",
 		"highlight.js": "^11.10.0",
+		"jszip": "^3.10.1",
 		"marked": "^4.3.0",
 		"node-qunit-puppeteer": "^2.2.0",
 		"qunit": "^2.22.0",

+ 40 - 0
zip.js

@@ -0,0 +1,40 @@
+import fs from 'node:fs';
+import path from 'node:path';
+import JSZip from 'jszip';
+import {glob} from 'glob';
+
+async function main() {
+  const zip = new JSZip();
+  const filesToInclude = [
+    './index.html',
+    './dist/**',
+    './*/*.md'
+  ];
+
+  if (fs.existsSync('./lib')) filesToInclude.push('./lib/**');
+  if (fs.existsSync('./images')) filesToInclude.push('./images/**');
+  if (fs.existsSync('./slides')) filesToInclude.push('./slides/**');
+
+  for (const pattern of filesToInclude) {
+    const files = glob.sync(pattern, {
+      nodir: true,
+      dot: true,
+      ignore: ['./examples/**', './test/**']
+    });
+    for (const file of files) {
+      const filePath = path.resolve(file);
+      const relativePath = path.relative(process.cwd(), filePath);
+      const fileData = fs.readFileSync(filePath);
+      zip.file(relativePath, fileData);
+    }
+  }
+
+  const content = await zip.generateAsync({ type: 'nodebuffer' });
+  fs.writeFileSync('reveal-js-presentation.zip', content);
+  console.log('Presentation packaged successfully: reveal-js-presentation.zip');
+}
+
+main().catch(error => {
+  console.error('Error packaging presentation:', error);
+  process.exit(1);
+});