Skip to content

Commit 98e7081

Browse files
committed
Create a manifest
1 parent e014a24 commit 98e7081

File tree

9 files changed

+65
-7
lines changed

9 files changed

+65
-7
lines changed

lib/build-bundler.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ module.exports = ({ source, target, fingerprint, configDir }) => {
2323
return createFile(targetPath, content).then(_ => {
2424
return {
2525
changed: true,
26+
target: path.relative(configDir, sourcePath),
2627
output: path.relative(configDir, targetPath)
2728
};
2829
});

lib/build-manifest-writer.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
let { createFile } = require("faucet-pipeline-util");
2+
let { basename } = require("path");
3+
4+
// Create a writer for a manifest
5+
//
6+
// The writer writes the manifest, always extending the previous manifest
7+
// so that it also support partial builds in a watch process
8+
module.exports = manifestConfig => {
9+
if(manifestConfig === false) {
10+
return results => Promise.resolve(results);
11+
}
12+
13+
let manifest = {};
14+
return results => {
15+
let filteredResults = results.filter(result => result.changed);
16+
if(filteredResults.length === 0) {
17+
return results;
18+
}
19+
20+
manifest = updateManifest(filteredResults, manifest, manifestConfig);
21+
return writeManifest(filteredResults, manifest, manifestConfig);
22+
};
23+
};
24+
25+
function updateManifest(results, manifest, { baseURI }) {
26+
return results.reduce((acc, result) => {
27+
acc[result.target] = baseURI(result.output, basename(result.output));
28+
return acc;
29+
}, manifest);
30+
}
31+
32+
function writeManifest(results, manifest, manifestConfig) {
33+
return createFile(manifestConfig.file, `${JSON.stringify(manifest)}\n`).
34+
then(_ => results);
35+
}

lib/build-reporter.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// Reports the results of the run
44
module.exports = _ => {
55
return results => {
6-
results.reduce((acc, cur) => acc.concat(cur)).forEach(res => {
6+
results.forEach(res => {
77
if(res.changed) {
88
console.log(`✓ ${res.output}`); // eslint-disable-line no-console
99
}

lib/index.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
let buildConfig = require("./build-config");
22
let buildBundler = require("./build-bundler");
33
let buildReporter = require("./build-reporter");
4+
let buildManifestWriter = require("./build-manifest-writer");
45

56
module.exports = (rawConfig, configDir, { watcher, fingerprint }) => {
67
let config = buildConfig(rawConfig, configDir, fingerprint);
@@ -17,9 +18,16 @@ module.exports = (rawConfig, configDir, { watcher, fingerprint }) => {
1718
function buildBundleAll(config) {
1819
let bundlers = config.bundles.map(bundleConfig => buildBundler(bundleConfig));
1920
let report = buildReporter();
21+
let writeManifest = buildManifestWriter(config.manifest);
2022

2123
return files => {
22-
Promise.all(bundlers.map(bundler => bundler(files))).then(report);
24+
Promise.all(bundlers.map(bundler => bundler(files))).
25+
then(flatten).
26+
then(writeManifest).
27+
then(report);
2328
};
24-
// TODO: Manifest
29+
}
30+
31+
function flatten(arr) {
32+
return arr.reduce((acc, cur) => acc.concat(cur));
2533
}

test/run

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ begin "./test_basic"
5858
assert_identical "./dist/test.txt" "./src/test.txt"
5959
end
6060

61-
# Once again with fingerprinting
62-
begin "./test_basic"
61+
begin "./test_fingerprint"
6362
faucet
6463
assert_identical "./dist/test-e59ff97941044f85df5297e1c302d260.txt" "./src/test.txt"
64+
assert_identical "./dist/manifest.json" "./expected.json"
6565
end

test/test_basic/expected.css

Lines changed: 0 additions & 2 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"src/test.txt":"/assets/dist/test-e59ff97941044f85df5297e1c302d260.txt"}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"use strict";
2+
3+
module.exports = {
4+
static: {
5+
manifest: {
6+
file: "./dist/manifest.json",
7+
baseURI: "/assets"
8+
},
9+
bundles: [{
10+
source: "src",
11+
target: "dist"
12+
}]
13+
}
14+
};

test/test_fingerprint/src/test.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Hello World

0 commit comments

Comments
 (0)