diff options
-rw-r--r-- | package-lock.json | 6 | ||||
-rw-r--r-- | package.json | 3 | ||||
-rwxr-xr-x | package.sh | 20 | ||||
-rw-r--r-- | script/package.js | 55 |
4 files changed, 63 insertions, 21 deletions
diff --git a/package-lock.json b/package-lock.json index 7e88990..0d5ffd8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -199,6 +199,12 @@ } } }, + "adm-zip": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", + "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", + "dev": true + }, "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", diff --git a/package.json b/package.json index 47ec787..05e3ff5 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "scripts": { "start": "webpack -w --debug --devtool inline-source-map", "build": "NODE_ENV=production webpack --progress --display-error-details", - "package": "npm run build && ./package.sh", + "package": "npm run build && node script/package.js", "lint": "eslint --ext .jsx,.js src", "test": "karma start" }, @@ -19,6 +19,7 @@ }, "homepage": "https://github.com/ueokande/vim-vixen", "devDependencies": { + "adm-zip": "^0.4.7", "babel-cli": "^6.24.1", "babel-eslint": "^8.0.2", "babel-loader": "^7.1.1", diff --git a/package.sh b/package.sh deleted file mode 100755 index 34535ba..0000000 --- a/package.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -MANIFEST="manifest.json" - -version=$(jq -r '.version' $MANIFEST) - -icons=$(jq -r '.icons[]' $MANIFEST) -content_scripts=$(jq -r '.content_scripts[].js[]' $MANIFEST) -background_scripts=$(jq -r '.background.scripts[]' $MANIFEST) -web_accessible_resources=$(jq -r '.web_accessible_resources[]' $MANIFEST) -options_ui=$(jq -r '.options_ui.page' $MANIFEST) -options_scripts="" -for html in $options_ui; do - scripts=$(grep -Po "(?<=src=['\"])[^'\"]*" "$html") - for js in $scripts; do - options_scripts="$options_scripts $(dirname $html)/$js" - done -done - -zip ${version}.zip $MANIFEST $icons $content_scripts $background_scripts $web_accessible_resources $options_ui $options_scripts diff --git a/script/package.js b/script/package.js new file mode 100644 index 0000000..0128f0f --- /dev/null +++ b/script/package.js @@ -0,0 +1,55 @@ +let path = require('path'); +let fs = require('fs'); +let AdmZip = require('adm-zip'); +let manifest = require('../manifest'); + +manifest.iconFiles = function() { + return Object.keys(this.icons).map(key => this.icons[key]); +}; + +manifest.contentScriptFiles = function() { + let files = this.content_scripts.map(entry => entry.js); + return [].concat.apply([], files); +}; + +manifest.backgroundScriptFiles = function() { + return this.background.scripts; + +}; + +manifest.webAccessibleResourceFiles = function() { + return this.web_accessible_resources; +}; + +manifest.optionFiles = function() { + let uiFile = this.options_ui.page; + let dir = path.dirname(uiFile); + let html = fs.readFileSync(uiFile, 'utf-8'); + + let files = [uiFile]; + let regex = /<\s*script\s+src\s*=\s*'(.*)'\s*>/g; + let match = regex.exec(html); + while (match) { + files.push(path.join(dir, match[1])); + match = regex.exec(html); + } + return files; +}; + +let files = [] + .concat('manifest.json') + .concat(manifest.iconFiles()) + .concat(manifest.contentScriptFiles()) + .concat(manifest.backgroundScriptFiles()) + .concat(manifest.webAccessibleResourceFiles()) + .concat(manifest.optionFiles()); +let zip = new AdmZip(); +let output = `${manifest.version}.zip`; +console.log(output); +for (let f of files) { + let dir = path.dirname(f); + zip.addLocalFile(f, dir); + console.log('=>', path.join(dir, f)); +} + +zip.writeZip(output); |