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

moved common code into "common" directory

Former-commit-id: 3d470b41836018a4dc3dc6543846f4bec97ce6a8
Gildas 6 лет назад
Родитель
Сommit
db5e9b72ce

+ 63 - 0
cli/back-ends/common/scripts.js

@@ -0,0 +1,63 @@
+/*
+ * Copyright 2010-2019 Gildas Lormeau
+ * contact : gildas.lormeau <at> gmail.com
+ * 
+ * This file is part of SingleFile.
+ *
+ *   The code in this file is free software: you can redistribute it and/or 
+ *   modify it under the terms of the GNU Affero General Public License 
+ *   (GNU AGPL) as published by the Free Software Foundation, either version 3
+ *   of the License, or (at your option) any later version.
+ * 
+ *   The code in this file is distributed in the hope that it will be useful, 
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero 
+ *   General Public License for more details.
+ *
+ *   As additional permission under GNU AGPL version 3 section 7, you may 
+ *   distribute UNMODIFIED VERSIONS OF THIS file without the copy of the GNU 
+ *   AGPL normally required by section 4, provided you include this license 
+ *   notice and a URL through which recipients can access the Corresponding 
+ *   Source.
+ */
+
+/* global require, exports */
+
+const fs = require("fs");
+
+const SCRIPTS = [
+	"/lib/index.js",
+	"/lib/hooks/content/content-hooks.js",
+	"/lib/hooks/content/content-hooks-frames.js",
+	"/lib/frame-tree/content/content-frame-tree.js",
+	"/lib/lazy/content/content-lazy-loader.js",
+	"/lib/single-file/single-file-util.js",
+	"/lib/single-file/single-file-helper.js",
+	"/lib/single-file/vendor/css-tree.js",
+	"/lib/single-file/vendor/html-srcset-parser.js",
+	"/lib/single-file/vendor/css-minifier.js",
+	"/lib/single-file/vendor/css-font-property-parser.js",
+	"/lib/single-file/vendor/css-media-query-parser.js",
+	"/lib/single-file/modules/html-minifier.js",
+	"/lib/single-file/modules/css-fonts-minifier.js",
+	"/lib/single-file/modules/css-fonts-alt-minifier.js",
+	"/lib/single-file/modules/css-matched-rules.js",
+	"/lib/single-file/modules/css-medias-alt-minifier.js",
+	"/lib/single-file/modules/css-rules-minifier.js",
+	"/lib/single-file/modules/html-images-alt-minifier.js",
+	"/lib/single-file/modules/html-serializer.js",
+	"/lib/single-file/single-file-core.js",
+	"/lib/single-file/single-file.js",
+	"/common/index.js",
+	"/common/ui/content/content-infobar.js"
+];
+
+exports.get = async options => {
+	const scripts = (await Promise.all(SCRIPTS.concat(options.browserScripts).map(scriptPath => fs.readFileSync(require.resolve("../../.." + scriptPath)).toString()))).join("\n");
+	const fileContents = {
+		"/lib/hooks/content/content-hooks-web.js": fs.readFileSync(require.resolve("../../../lib/hooks/content/content-hooks-web.js")).toString(),
+		"/lib/hooks/content/content-hooks-frames-web.js": fs.readFileSync(require.resolve("../../../lib/hooks/content/content-hooks-frames-web.js")).toString(),
+		"/common/ui/content/content-infobar-web.js": fs.readFileSync(require.resolve("../../../common/ui/content/content-infobar-web.js")).toString()
+	};
+	return scripts + ";this.singlefile.lib.getFileContent = filename => (" + JSON.stringify(fileContents) + ")[filename];";
+};

+ 1 - 32
cli/back-ends/jsdom.js

@@ -23,7 +23,6 @@
 
 /* global require, exports */
 
-const fs = require("fs");
 const crypto = require("crypto");
 
 const { JSDOM, VirtualConsole } = require("jsdom");
@@ -31,30 +30,6 @@ const dataUri = require("strong-data-uri");
 const iconv = require("iconv-lite");
 const request = require("request-promise-native");
 
-const SCRIPTS = [
-	"../../lib/index.js",
-	"../../lib/hooks/content/content-hooks.js",
-	"../../lib/frame-tree/content/content-frame-tree.js",
-	"../../lib/single-file/single-file-util.js",
-	"../../lib/single-file/single-file-helper.js",
-	"../../lib/single-file/vendor/css-tree.js",
-	"../../lib/single-file/vendor/html-srcset-parser.js",
-	"../../lib/single-file/vendor/css-minifier.js",
-	"../../lib/single-file/vendor/css-font-property-parser.js",
-	"../../lib/single-file/vendor/css-media-query-parser.js",
-	"../../lib/single-file/modules/html-minifier.js",
-	"../../lib/single-file/modules/css-fonts-minifier.js",
-	"../../lib/single-file/modules/css-fonts-alt-minifier.js",
-	"../../lib/single-file/modules/css-matched-rules.js",
-	"../../lib/single-file/modules/css-medias-alt-minifier.js",
-	"../../lib/single-file/modules/css-rules-minifier.js",
-	"../../lib/single-file/modules/html-images-alt-minifier.js",
-	"../../lib/single-file/modules/html-serializer.js",
-	"../../lib/single-file/single-file-core.js",
-	"../../common/index.js",
-	"../../common/ui/content/content-infobar.js"
-];
-
 exports.getPageData = async options => {
 	const pageContent = (await request({
 		method: "GET",
@@ -86,13 +61,7 @@ exports.getPageData = async options => {
 		options.insertFaviconLink = true;
 		const win = dom.window;
 		const doc = win.document;
-		let scripts = (await Promise.all(SCRIPTS.concat(options.browserScripts).map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString()))).join("\n");
-		const fileContents = {
-			"/lib/hooks/content/content-hooks-web.js": fs.readFileSync(require.resolve("../../lib/hooks/content/content-hooks-web.js")).toString(),
-			"/lib/hooks/content/content-hooks-frames-web.js": fs.readFileSync(require.resolve("../../lib/hooks/content/content-hooks-frames-web.js")).toString(),
-			"/common/ui/content/content-infobar-web.js": fs.readFileSync(require.resolve("../../common/ui/content/content-infobar-web.js")).toString()
-		};
-		scripts = scripts + ";this.singlefile.lib.getFileContent = filename => (" + JSON.stringify(fileContents) + ")[filename];";
+		const scripts = await require("./common/scripts.js").get(options);
 		dom.window.eval(scripts);
 		if (dom.window.document.readyState == "loading") {
 			await new Promise(resolve => win.document.onload = resolve);

+ 1 - 36
cli/back-ends/puppeteer.js

@@ -23,37 +23,8 @@
 
 /* global singlefile, require, exports, document, window */
 
-const fs = require("fs");
-
 const puppeteer = require("puppeteer-core");
 
-const SCRIPTS = [
-	"../../lib/index.js",
-	"../../lib/hooks/content/content-hooks.js",
-	"../../lib/hooks/content/content-hooks-frames.js",
-	"../../lib/frame-tree/content/content-frame-tree.js",
-	"../../lib/lazy/content/content-lazy-loader.js",
-	"../../lib/single-file/single-file-util.js",
-	"../../lib/single-file/single-file-helper.js",
-	"../../lib/single-file/vendor/css-tree.js",
-	"../../lib/single-file/vendor/html-srcset-parser.js",
-	"../../lib/single-file/vendor/css-minifier.js",
-	"../../lib/single-file/vendor/css-font-property-parser.js",
-	"../../lib/single-file/vendor/css-media-query-parser.js",
-	"../../lib/single-file/modules/html-minifier.js",
-	"../../lib/single-file/modules/css-fonts-minifier.js",
-	"../../lib/single-file/modules/css-fonts-alt-minifier.js",
-	"../../lib/single-file/modules/css-matched-rules.js",
-	"../../lib/single-file/modules/css-medias-alt-minifier.js",
-	"../../lib/single-file/modules/css-rules-minifier.js",
-	"../../lib/single-file/modules/html-images-alt-minifier.js",
-	"../../lib/single-file/modules/html-serializer.js",
-	"../../lib/single-file/single-file-core.js",
-	"../../lib/single-file/single-file.js",
-	"../../common/index.js",
-	"../../common/ui/content/content-infobar.js"
-];
-
 exports.getPageData = async options => {
 	const browserOptions = {};
 	if (options.browserHeadless !== undefined) {
@@ -89,13 +60,7 @@ exports.getPageData = async options => {
 		if (options.browserBypassCSP === undefined || options.browserBypassCSP) {
 			await page.setBypassCSP(true);
 		}
-		let scripts = SCRIPTS.concat(options.browserScripts).map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString()).join("\n");
-		const fileContents = {
-			"/lib/hooks/content/content-hooks-web.js": fs.readFileSync(require.resolve("../../lib/hooks/content/content-hooks-web.js")).toString(),
-			"/lib/hooks/content/content-hooks-frames-web.js": fs.readFileSync(require.resolve("../../lib/hooks/content/content-hooks-frames-web.js")).toString(),
-			"/common/ui/content/content-infobar-web.js": fs.readFileSync(require.resolve("../../common/ui/content/content-infobar-web.js")).toString()
-		};
-		scripts = scripts + ";this.singlefile.lib.getFileContent = filename => (" + JSON.stringify(fileContents) + ")[filename];";
+		const scripts = await require("./common/scripts.js").get(options);
 		await page.evaluateOnNewDocument(scripts);
 		if (options.browserDebug) {
 			await page.waitFor(3000);

+ 1 - 35
cli/back-ends/webdriver-chromium.js

@@ -23,39 +23,11 @@
 
 /* global __dirname, require, exports, process, setTimeout, clearTimeout, Buffer */
 
-const fs = require("fs");
 const path = require("path");
 
 const chrome = require("selenium-webdriver/chrome");
 const { Builder } = require("selenium-webdriver");
 
-const SCRIPTS = [
-	"../../lib/index.js",
-	"../../lib/hooks/content/content-hooks.js",
-	"../../lib/hooks/content/content-hooks-frames.js",
-	"../../lib/frame-tree/content/content-frame-tree.js",
-	"../../lib/lazy/content/content-lazy-loader.js",
-	"../../lib/single-file/single-file-util.js",
-	"../../lib/single-file/single-file-helper.js",
-	"../../lib/single-file/vendor/css-tree.js",
-	"../../lib/single-file/vendor/html-srcset-parser.js",
-	"../../lib/single-file/vendor/css-minifier.js",
-	"../../lib/single-file/vendor/css-font-property-parser.js",
-	"../../lib/single-file/vendor/css-media-query-parser.js",
-	"../../lib/single-file/modules/html-minifier.js",
-	"../../lib/single-file/modules/css-fonts-minifier.js",
-	"../../lib/single-file/modules/css-fonts-alt-minifier.js",
-	"../../lib/single-file/modules/css-matched-rules.js",
-	"../../lib/single-file/modules/css-medias-alt-minifier.js",
-	"../../lib/single-file/modules/css-rules-minifier.js",
-	"../../lib/single-file/modules/html-images-alt-minifier.js",
-	"../../lib/single-file/modules/html-serializer.js",
-	"../../lib/single-file/single-file-core.js",
-	"../../lib/single-file/single-file.js",
-	"../../common/index.js",
-	"../../common/ui/content/content-infobar.js"
-];
-
 exports.getPageData = async options => {
 	let driver;
 	try {
@@ -114,13 +86,7 @@ exports.getPageData = async options => {
 				window.setSize(options.browserWidth, options.browserHeight);
 			}
 		}
-		let scripts = SCRIPTS.concat(options.browserScripts).map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString()).join("\n");
-		const fileContents = {
-			"/lib/hooks/content/content-hooks-web.js": fs.readFileSync(require.resolve("../../lib/hooks/content/content-hooks-web.js")).toString(),
-			"/lib/hooks/content/content-hooks-frames-web.js": fs.readFileSync(require.resolve("../../lib/hooks/content/content-hooks-frames-web.js")).toString(),
-			"/common/ui/content/content-infobar-web.js": fs.readFileSync(require.resolve("../../common/ui/content/content-infobar-web.js")).toString()
-		};
-		scripts = scripts + ";this.singlefile.lib.getFileContent = filename => (" + JSON.stringify(fileContents) + ")[filename];";
+		const scripts = await require("./common/scripts.js").get(options);
 		if (options.browserDebug) {
 			await driver.sleep(3000);
 		}

+ 1 - 35
cli/back-ends/webdriver-gecko.js

@@ -23,39 +23,11 @@
 
 /* global __dirname, require, exports, process, setTimeout, clearTimeout */
 
-const fs = require("fs");
 const path = require("path");
 
 const firefox = require("selenium-webdriver/firefox");
 const { Builder, By, Key } = require("selenium-webdriver");
 
-const SCRIPTS = [
-	"../../lib/index.js",
-	"../../lib/hooks/content/content-hooks.js",
-	"../../lib/hooks/content/content-hooks-frames.js",
-	"../../lib/frame-tree/content/content-frame-tree.js",
-	"../../lib/lazy/content/content-lazy-loader.js",
-	"../../lib/single-file/single-file-util.js",
-	"../../lib/single-file/single-file-helper.js",
-	"../../lib/single-file/vendor/css-tree.js",
-	"../../lib/single-file/vendor/html-srcset-parser.js",
-	"../../lib/single-file/vendor/css-minifier.js",
-	"../../lib/single-file/vendor/css-font-property-parser.js",
-	"../../lib/single-file/vendor/css-media-query-parser.js",
-	"../../lib/single-file/modules/html-minifier.js",
-	"../../lib/single-file/modules/css-fonts-minifier.js",
-	"../../lib/single-file/modules/css-fonts-alt-minifier.js",
-	"../../lib/single-file/modules/css-matched-rules.js",
-	"../../lib/single-file/modules/css-medias-alt-minifier.js",
-	"../../lib/single-file/modules/css-rules-minifier.js",
-	"../../lib/single-file/modules/html-images-alt-minifier.js",
-	"../../lib/single-file/modules/html-serializer.js",
-	"../../lib/single-file/single-file-core.js",
-	"../../lib/single-file/single-file.js",
-	"../../common/index.js",
-	"../../common/ui/content/content-infobar.js"
-];
-
 exports.getPageData = async options => {
 	let driver;
 	try {
@@ -104,13 +76,7 @@ exports.getPageData = async options => {
 				window.setSize(options.browserWidth, options.browserHeight);
 			}
 		}
-		let scripts = SCRIPTS.concat(options.browserScripts).map(scriptPath => fs.readFileSync(require.resolve(scriptPath)).toString().replace(/\n(this)\.([^ ]+) = (this)\.([^ ]+) \|\|/g, "\nwindow.$2 = window.$4 ||")).join("\n");
-		const fileContents = {
-			"/lib/hooks/content/content-hooks-web.js": fs.readFileSync(require.resolve("../../lib/hooks/content/content-hooks-web.js")).toString(),
-			"/lib/hooks/content/content-hooks-frames-web.js": fs.readFileSync(require.resolve("../../lib/hooks/content/content-hooks-frames-web.js")).toString(),
-			"/common/ui/content/content-infobar-web.js": fs.readFileSync(require.resolve("../../common/ui/content/content-infobar-web.js")).toString()
-		};
-		scripts = scripts + ";this.singlefile.lib.getFileContent = filename => (" + JSON.stringify(fileContents) + ")[filename];";
+		const scripts = await require("./common/scripts.js").get(options);
 		if (options.browserDebug) {
 			await driver.findElement(By.css("html")).sendKeys(Key.SHIFT + Key.F5);
 			await driver.sleep(3000);