Skip to content
This repository has been archived by the owner on Jan 17, 2023. It is now read-only.

Commit

Permalink
WIP concatenate files and use source maps, to fix #3097
Browse files Browse the repository at this point in the history
Note: source maps don't actually work yet, for unknown reasons
  • Loading branch information
ianb committed Aug 22, 2017
1 parent c7d9f77 commit 036e81a
Show file tree
Hide file tree
Showing 6 changed files with 109 additions and 3 deletions.
8 changes: 7 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ raven_source := $(shell node -e 'console.log(require.resolve("raven-js/dist/rave
l10n_source := $(wildcard locales/*)
l10n_dest := $(l10n_source:%/webextension.properties=addon/webextension/_locales/%/messages.json)

selector_source := $(shell ./bin/build-scripts/concat-selector-files.js --deps)

## General transforms:
# These cover standard ways of building files given a source

Expand Down Expand Up @@ -88,7 +90,11 @@ build/%.html: %.html
cp $< $@

.PHONY: addon
addon: npm set_backend set_sentry addon/webextension/manifest.json addon/install.rdf addon_locales addon/webextension/build/shot.js addon/webextension/build/inlineSelectionCss.js addon/webextension/build/raven.js addon/webextension/build/onboardingCss.js addon/webextension/build/onboardingHtml.js addon/webextension/build/buildSettings.js
addon: npm set_backend set_sentry addon/webextension/manifest.json addon/install.rdf addon_locales addon/webextension/build/shot.js addon/webextension/build/inlineSelectionCss.js addon/webextension/build/raven.js addon/webextension/build/onboardingCss.js addon/webextension/build/onboardingHtml.js addon/webextension/build/buildSettings.js addon/webextension/build/selector.js

addon/webextension/build/selector.js: $(selector_source)
# Note this also regenerates addon/webextension/build/selectorWithOnboarding.js
./bin/build-scripts/concat-selector-files.js

$(VENV): bin/require.pip
virtualenv -p python2.7 $(VENV)
Expand Down
29 changes: 29 additions & 0 deletions addon/webextension/background/selectorFiles.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"standardScripts": [
"build/buildSettings.js",
"log.js",
"catcher.js",
"assertIsTrusted.js",
"assertIsBlankDocument.js",
"background/selectorLoader.js",
"selector/callBackground.js",
"selector/util.js"
],
"selectorScripts": [
"clipboard.js",
"makeUuid.js",
"build/shot.js",
"randomString.js",
"domainFromUrl.js",
"build/inlineSelectionCss.js",
"selector/documentMetadata.js",
"selector/ui.js",
"selector/shooter.js",
"selector/uicontrol.js"
],
"onboardingScripts": [
"build/onboardingCss.js",
"build/onboardingHtml.js",
"onboarding/slides.js"
]
}
6 changes: 4 additions & 2 deletions addon/webextension/background/selectorLoader.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,11 @@ this.selectorLoader = (function() {
let promise;
loadingTabs.add(tabId);
if (hasSeenOnboarding) {
promise = executeModules(tabId, standardScripts.concat(selectorScripts));
promise = executeModules(tabId, ["build/selector.js"]);
// promise = executeModules(tabId, standardScripts.concat(selectorScripts));
} else {
promise = executeModules(tabId, standardScripts.concat(onboardingScripts).concat(selectorScripts));
promise = executeModules(tabId, ["build/selectorWithOnboarding.js"]);
// promise = executeModules(tabId, standardScripts.concat(onboardingScripts).concat(selectorScripts));
}
return promise.then((result) => {
loadingTabs.delete(tabId);
Expand Down
3 changes: 3 additions & 0 deletions addon/webextension/selector/ui.js
Original file line number Diff line number Diff line change
Expand Up @@ -728,11 +728,14 @@ this.ui = (function() { // eslint-disable-line no-unused-vars
};

exports.triggerDownload = function(url, filename) {
throw new Error("bad download");
return catcher.watchPromise(callBackground("downloadShot", {url, filename}));
};

exports.unload = exports.remove;

console.log("My problem is:", (new Error()).stack);

return exports;
})();
null;
64 changes: 64 additions & 0 deletions bin/build-scripts/concat-selector-files.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/usr/bin/env node

const fs = require("fs");
const path = require('path');
const Concat = require("concat-with-sourcemaps");

const base = path.dirname(path.dirname(__dirname));
const filesJson = require(path.join(base, "addon/webextension/background/selectorFiles.json"));
const selectorFilename = path.join(base, "addon/webextension/build/selector.js");
const onboardingFilename = path.join(base, "addon/webextension/build/selectorWithOnboarding.js");

if (process.argv.length <= 2 || process.argv.includes("-h") || process.argv.includes("--help")) {
console.log("Usage:")
console.log(" concat-selector-files.js --deps")
console.log(" Echos out all the files that this script depends on")
console.log(" concat-selector-files.js")
console.log(" Writes files:")
console.log(` ${selectorFilename}`);
console.log(` ${onboardingFilename}`);
}

if (process.argv.includes("--deps")) {
for (let key in filesJson) {
for (let name of filesJson[key]) {
console.log(path.join("addon/webextension/", name));
}
}
process.exit();
}

let plan = {
[selectorFilename]: ["standardScripts", "selectorScripts"],
[onboardingFilename]: ["standardScripts", "onboardingScripts", "selectorScripts"]
};

for (let outputFilename in plan) {
let sourceKeys = plan[outputFilename];
let concat = new Concat(true, path.basename(outputFilename), "\n");
for (let key of sourceKeys) {
console.log("parts", key, outputFilename, Object.keys(filesJson), filesJson[key]);
for (let name of filesJson[key]) {
let filename = path.join("addon/webextension", name);
let content = fs.readFileSync(path.join(base, filename), {encoding: "UTF-8"});
concat.add("../" + name, content);
}
}
console.log("Result:", outputFilename);
console.log(concat.content.length);
console.log(concat.sourceMap);
// let base64Map = Buffer.from(concat.sourceMap).toString('base64');
// let dataUrl = `data:application/json;charset=utf-8;base64,${base64Map}`;
let basename = path.basename(outputFilename);
let mappingName = basename + ".map.json";
let trailer = `
/*
//# sourceMappingURL=${mappingName}
*/
`;
trailer = Buffer.from(trailer);
let totalContent = Buffer.concat([concat.content, trailer]);
fs.writeFileSync(outputFilename, totalContent);
let mappingFullFilename = outputFilename + ".map.json";
fs.writeFileSync(mappingFullFilename, concat.sourceMap);
}
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"react-dom": "15.6.1",
"react-masonry-component": "5.0.7",
"rimraf": "2.6.1",
"sourcemapify": "^1.1.2",
"universal-analytics": "0.4.13",
"uuid": "3.1.0",
"valid-url": "1.0.9",
Expand All @@ -53,6 +54,7 @@
"babel-preset-react": "6.24.1",
"body-parser": "1.17.2",
"browserify": "14.4.0",
"concat-with-sourcemaps": "^1.0.4",
"david": "11.0.0",
"eslint": "4.3.0",
"eslint-plugin-mozilla": "0.4.2",
Expand Down

0 comments on commit 036e81a

Please sign in to comment.