aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAjay Ramachandran <[email protected]>2020-02-04 01:32:58 -0500
committerAjay Ramachandran <[email protected]>2020-02-04 01:32:58 -0500
commit09a33c4252242f5184522af9973940c5a4954431 (patch)
tree8a2f284b55b871ae02d0f3a59f09eef43f20abfa
parentda364b49f01f4af913319f83d4adeef8a9312132 (diff)
downloadSponsorBlock-09a33c4252242f5184522af9973940c5a4954431.tar.gz
SponsorBlock-09a33c4252242f5184522af9973940c5a4954431.zip
Added manifest building.
-rw-r--r--.github/workflows/ci.yml8
-rw-r--r--manifest/chrome-manifest-extra.json8
-rw-r--r--manifest/firefox-manifest-extra.json (renamed from public/firefox_manifest-extra.json)0
-rw-r--r--manifest/manifest.json71
-rw-r--r--package.json12
-rw-r--r--public/help/index_en.html2
-rw-r--r--public/manifest.json73
-rw-r--r--webpack/webpack.common.js12
-rw-r--r--webpack/webpack.dev.js2
-rw-r--r--webpack/webpack.manifest.js65
-rw-r--r--webpack/webpack.prod.js11
11 files changed, 173 insertions, 91 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4a1ed900..fa1969c1 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -18,17 +18,15 @@ jobs:
# Create Chrome artifacts
- name: Create Chrome artifacts
- run: npm run build
+ run: npm run build:chrome
- uses: actions/upload-artifact@v1
with:
name: Chrome Extension
path: dist
# Create Firefox artifacts
- - name: Move manifest
- run: mv ./dist/manifest.json ./dist/manifest.json.original
- - name: Combine manifest for Firefox
- run: jq -s '.[0] * .[1]' ./dist/manifest.json.original ./dist/firefox_manifest-extra.json > manifest.json
+ - name: Create Firefox artifacts
+ run: npm run build:firefox
- uses: actions/upload-artifact@v1
with:
name: Firefox Extension
diff --git a/manifest/chrome-manifest-extra.json b/manifest/chrome-manifest-extra.json
new file mode 100644
index 00000000..8fe52df2
--- /dev/null
+++ b/manifest/chrome-manifest-extra.json
@@ -0,0 +1,8 @@
+{
+ "optional_permissions": [
+ "declarativeContent"
+ ],
+ "background": {
+ "persistent": false
+ }
+}
diff --git a/public/firefox_manifest-extra.json b/manifest/firefox-manifest-extra.json
index f481cb1c..f481cb1c 100644
--- a/public/firefox_manifest-extra.json
+++ b/manifest/firefox-manifest-extra.json
diff --git a/manifest/manifest.json b/manifest/manifest.json
new file mode 100644
index 00000000..b0d094be
--- /dev/null
+++ b/manifest/manifest.json
@@ -0,0 +1,71 @@
+{
+ "name": "__MSG_fullName__",
+ "short_name": "__MSG_Name__",
+ "version": "1.2.5",
+ "default_locale": "en",
+ "description": "__MSG_Description__",
+ "content_scripts": [
+ {
+ "run_at": "document_start",
+ "matches": [
+ "https://*.youtube.com/*",
+ "https://www.youtube-nocookie.com/embed/*"
+ ],
+ "all_frames": true,
+ "js": [
+ "./js/vendor.js",
+ "./js/content.js"
+ ],
+ "css": [
+ "content.css",
+ "./libs/Source+Sans+Pro.css",
+ "popup.css"
+ ]
+ }
+ ],
+ "web_accessible_resources": [
+ "icons/LogoSponsorBlocker256px.png",
+ "icons/IconSponsorBlocker256px.png",
+ "icons/PlayerStartIconSponsorBlocker256px.png",
+ "icons/PlayerStopIconSponsorBlocker256px.png",
+ "icons/PlayerUploadIconSponsorBlocker256px.png",
+ "icons/PlayerUploadFailedIconSponsorBlocker256px.png",
+ "icons/upvote.png",
+ "icons/downvote.png",
+ "icons/report.png",
+ "icons/close.png",
+ "icons/PlayerInfoIconSponsorBlocker256px.png",
+ "icons/PlayerDeleteIconSponsorBlocker256px.png",
+ "popup.html"
+ ],
+ "permissions": [
+ "storage",
+ "notifications",
+ "https://sponsor.ajay.app/*"
+ ],
+ "optional_permissions": [
+ "*://*/*"
+ ],
+ "browser_action": {
+ "default_title": "__MSG_Name__",
+ "default_popup": "popup.html"
+ },
+ "background": {
+ "scripts":[
+ "./js/vendor.js",
+ "./js/background.js"
+ ]
+ },
+ "icons": {
+ "16": "icons/IconSponsorBlocker16px.png",
+ "32": "icons/IconSponsorBlocker32px.png",
+ "64": "icons/LogoSponsorBlocker64px.png",
+ "128": "icons/LogoSponsorBlocker128px.png",
+ "256": "icons/LogoSponsorBlocker256px.png"
+ },
+ "options_ui": {
+ "page": "options/options.html",
+ "open_in_tab": true
+ },
+ "manifest_version": 2
+} \ No newline at end of file
diff --git a/package.json b/package.json
index 3d7bb426..de621e89 100644
--- a/package.json
+++ b/package.json
@@ -26,10 +26,14 @@
"web-run": "npm run web-run:chrome",
"web-run:firefox": "cd dist && web-ext run --start-url https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm",
"web-run:chrome": "cd dist && web-ext run --start-url https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm -t chromium",
- "build:watch": "webpack --config webpack/webpack.dev.js --watch",
- "dev": "concurrently \"npm run web-run\" \"npm run build:watch\"",
- "dev:firefox": "concurrently \"npm run web-run:firefox\" \"npm run build:watch\"",
- "build": "webpack --config webpack/webpack.prod.js",
+ "build": "npm run build:chrome",
+ "build:chrome": "webpack --env.browser=chrome --config webpack/webpack.prod.js",
+ "build:firefox": "webpack --env.browser=firefox --config webpack/webpack.prod.js",
+ "build:watch": "npm run build:chrome:watch",
+ "build:watch:chrome": "webpack --env.browser=chrome --config webpack/webpack.dev.js --watch",
+ "build:watch:firefox": "webpack --env.browser=firefox --config webpack/webpack.dev.js --watch",
+ "dev": "npm run build && concurrently \"npm run web-run\" \"npm run build:watch\"",
+ "dev:firefox": "npm run build:firefox && concurrently \"npm run web-run:firefox\" \"npm run build:watch:firefox\"",
"clean": "rimraf dist",
"test": "npx jest"
},
diff --git a/public/help/index_en.html b/public/help/index_en.html
index ec7cd521..43d43c2c 100644
--- a/public/help/index_en.html
+++ b/public/help/index_en.html
@@ -10,7 +10,7 @@
<body>
<div id="title">
- <img src="https://github.com/ajayyy/SponsorBlock/raw/master/icons/LogoSponsorBlocker256px.png" height="80" class="profilepic"/>
+ <img src="../icons/LogoSponsorBlocker256px.png" height="80" class="profilepic"/>
SponsorBlock
</div>
diff --git a/public/manifest.json b/public/manifest.json
deleted file mode 100644
index 7331e54b..00000000
--- a/public/manifest.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "name": "__MSG_fullName__",
- "short_name": "__MSG_Name__",
- "version": "1.2.5",
- "default_locale": "en",
- "description": "__MSG_Description__",
- "content_scripts": [
- {
- "run_at": "document_start",
- "matches": [
- "https://*.youtube.com/*",
- "https://www.youtube-nocookie.com/embed/*"
- ],
- "all_frames": true,
- "js": [
- "./js/vendor.js",
- "./js/content.js"
- ],
- "css": [
- "content.css",
- "./libs/Source+Sans+Pro.css",
- "popup.css"
- ]
- }
- ],
- "web_accessible_resources": [
- "icons/LogoSponsorBlocker256px.png",
- "icons/IconSponsorBlocker256px.png",
- "icons/PlayerStartIconSponsorBlocker256px.png",
- "icons/PlayerStopIconSponsorBlocker256px.png",
- "icons/PlayerUploadIconSponsorBlocker256px.png",
- "icons/PlayerUploadFailedIconSponsorBlocker256px.png",
- "icons/upvote.png",
- "icons/downvote.png",
- "icons/report.png",
- "icons/close.png",
- "icons/PlayerInfoIconSponsorBlocker256px.png",
- "icons/PlayerDeleteIconSponsorBlocker256px.png",
- "popup.html"
- ],
- "permissions": [
- "storage",
- "notifications",
- "https://sponsor.ajay.app/*"
- ],
- "optional_permissions": [
- "*://*/*",
- "declarativeContent"
- ],
- "browser_action": {
- "default_title": "__MSG_Name__",
- "default_popup": "popup.html"
- },
- "background": {
- "scripts":[
- "./js/vendor.js",
- "./js/background.js"
- ],
- "persistent": false
- },
- "icons": {
- "16": "icons/IconSponsorBlocker16px.png",
- "32": "icons/IconSponsorBlocker32px.png",
- "64": "icons/LogoSponsorBlocker64px.png",
- "128": "icons/LogoSponsorBlocker128px.png",
- "256": "icons/LogoSponsorBlocker256px.png"
- },
- "options_ui": {
- "page": "options/options.html",
- "open_in_tab": true
- },
- "manifest_version": 2
-}
diff --git a/webpack/webpack.common.js b/webpack/webpack.common.js
index 70ea347a..162c8b50 100644
--- a/webpack/webpack.common.js
+++ b/webpack/webpack.common.js
@@ -1,9 +1,10 @@
const webpack = require("webpack");
const path = require('path');
const CopyPlugin = require('copy-webpack-plugin');
+const BuildManifest = require('./webpack.manifest');
const srcDir = '../src/';
-module.exports = {
+module.exports = env => ({
entry: {
popup: path.join(__dirname, srcDir + 'popup.ts'),
background: path.join(__dirname, srcDir + 'background.ts'),
@@ -34,11 +35,14 @@ module.exports = {
},
plugins: [
// exclude locale files in moment
- new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
new CopyPlugin([
- { from: '.', to: '../' }
+ { from: '.', to: '../', ignore: ['manifest.json'] }
],
{context: 'public' }
),
+ new BuildManifest({
+ browser: env.browser,
+ pretty: env.mode === "production"
+ })
]
-};
+});
diff --git a/webpack/webpack.dev.js b/webpack/webpack.dev.js
index 274eb28d..6ceabb83 100644
--- a/webpack/webpack.dev.js
+++ b/webpack/webpack.dev.js
@@ -1,7 +1,7 @@
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
-module.exports = merge(common, {
+module.exports = env => merge(common(env), {
devtool: 'inline-source-map',
mode: 'development'
}); \ No newline at end of file
diff --git a/webpack/webpack.manifest.js b/webpack/webpack.manifest.js
new file mode 100644
index 00000000..08e48b29
--- /dev/null
+++ b/webpack/webpack.manifest.js
@@ -0,0 +1,65 @@
+const webpack = require("webpack");
+const path = require('path');
+const CopyPlugin = require('copy-webpack-plugin');
+const validateOptions = require('schema-utils');
+
+const fs = require('fs');
+
+const manifest = require("../manifest/manifest.json");
+const firefoxManifestExtra = require("../manifest/firefox-manifest-extra.json");
+const chromeManifestExtra = require("../manifest/chrome-manifest-extra.json");
+
+// schema for options object
+const schema = {
+ type: 'object',
+ properties: {
+ browser: {
+ type: 'string'
+ },
+ pretty: {
+ type: 'boolean'
+ }
+ }
+};
+
+class BuildManifest {
+ constructor (options = {}) {
+ validateOptions(schema, options, "Build Manifest Plugin");
+
+ this.options = options;
+ }
+
+ apply(compiler) {
+ const distManifestFile = path.resolve(__dirname, "../dist/manifest.json");
+
+ // Add missing manifest elements
+ if (this.options.browser.toLowerCase() === "firefox") {
+ mergeObjects(manifest, firefoxManifestExtra);
+ } else if (this.options.browser.toLowerCase() === "chrome" || this.options.browser.toLowerCase() === "chromium") {
+ mergeObjects(manifest, chromeManifestExtra);
+ }
+
+ let result = JSON.stringify(manifest);
+ if (this.options.pretty) result = JSON.stringify(manifest, null, 2);
+
+ fs.writeFileSync(distManifestFile, result);
+ }
+}
+
+function mergeObjects(object1, object2) {
+ for (const key in object2) {
+ if (key in object1) {
+ if (Array.isArray(object1[key])) {
+ object1[key] = object1[key].concat(object2[key]);
+ } else if (typeof object1[key] == 'object') {
+ mergeObjects(object1[key], object2[key]);
+ } else {
+ object1[key] = object2[key];
+ }
+ } else {
+ object1[key] = object2[key];
+ }
+ }
+}
+
+module.exports = BuildManifest; \ No newline at end of file
diff --git a/webpack/webpack.prod.js b/webpack/webpack.prod.js
index daa65f51..65be616f 100644
--- a/webpack/webpack.prod.js
+++ b/webpack/webpack.prod.js
@@ -1,6 +1,11 @@
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
-module.exports = merge(common, {
- mode: 'production'
-}); \ No newline at end of file
+module.exports = env => {
+ let mode = "production";
+ env.mode = mode;
+
+ return merge(common(env), {
+ mode
+ });
+}; \ No newline at end of file