Skip to content

Commit 947375f

Browse files
committed
add support for asset-url, closes #3
This allows users to look up URLs for assets in the manifest
1 parent 3d442f7 commit 947375f

File tree

9 files changed

+68
-1
lines changed

9 files changed

+68
-1
lines changed

lib/asset-url.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
let postcss = require("postcss");
2+
let helpers = require("postcss-message-helpers");
3+
let ASSET_URL_PATTERN = /asset-url\(['"]?(.*?)['"]?\)/;
4+
5+
module.exports = postcss.plugin("faucet-pipeline-css", ({ manifest }) => {
6+
return declarationWalker(node => replaceAssetURL(node, manifest));
7+
});
8+
9+
function replaceAssetURL(node, manifest) {
10+
if(!node.value) {
11+
return;
12+
}
13+
14+
if(ASSET_URL_PATTERN.test(node.value)) {
15+
node.value = node.value.replace(ASSET_URL_PATTERN,
16+
(match, url) => `url("${manifest.get(url)}")`);
17+
}
18+
}
19+
20+
function declarationWalker(fn) {
21+
return style => {
22+
style.walkDecls(node => {
23+
helpers.try(() => fn(node), node.source);
24+
});
25+
};
26+
}

lib/make-postcss.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
let postcss = require("postcss");
22
let atImport = require("postcss-import");
3+
let assetURL = require("./asset-url");
34
let { promisify } = require("faucet-pipeline-core/lib/util");
45
let readFile = promisify(require("fs").readFile);
56

@@ -9,7 +10,8 @@ module.exports = function(input, target, assetManager, sourcemaps, browsers, com
910
// console.error(`compiling CSS ${repr(filepath)} for ${browsers.join(", ")}`);
1011

1112
let plugins = [
12-
atImport()
13+
atImport(),
14+
assetURL({ manifest: assetManager.manifest })
1315
];
1416

1517
if(compact) {

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@
2323
"postcss": "~7.0.13",
2424
"postcss-discard-comments": "~4.0.1",
2525
"postcss-import": "~12.0.1",
26+
"postcss-message-helpers": "~2.0.0",
2627
"postcss-normalize-whitespace": "~4.0.1"
2728
},
2829
"devDependencies": {
2930
"eslint-config-fnd": "^1.6.0",
3031
"eslint-plugin-import": "^2.13.0",
32+
"faucet-pipeline-static": "^1.0.0",
3133
"json-diff": "^0.5.2",
3234
"npm-run-all": "^4.1.5",
3335
"release-util-fnd": "^1.1.1"

test/run

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,9 @@ begin "$root/test_sourcemap"
3434
assert_identical_sourcemap "./dist/bundle.css" "./expected.css" "./expected.css.map"
3535
end
3636

37+
begin "$root/test_static_integration"
38+
faucet
39+
assert_identical "./dist/bundle.css" "./expected.css"
40+
end
41+
3742
echo; echo "SUCCESS: all tests passed"
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.bla {
2+
background: url("/assets/dist/spacer.gif");
3+
color: green;
4+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"dist/spacer.gif":"/assets/dist/spacer-d89746888da2d9510b64a9f031eaecd5.gif","dist/bundle.css":"/assets/dist/bundle-3166b72ba211e69a0aab5bf612ded7d3.css"}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"use strict";
2+
let path = require("path");
3+
4+
module.exports = {
5+
css: [{
6+
source: "./src/index.css",
7+
target: "./dist/bundle.css"
8+
}],
9+
static: [{
10+
source: "./src/spacer.gif",
11+
target: "./dist/spacer.gif"
12+
}],
13+
manifest: {
14+
target: "./dist/manifest.json",
15+
value: f => `/assets/${f}`
16+
},
17+
plugins: {
18+
css: {
19+
plugin: path.resolve("../.."),
20+
bucket: "styles"
21+
}
22+
}
23+
};
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.bla {
2+
background: asset-url("dist/spacer.gif");
3+
color: green;
4+
}
42 Bytes
Loading

0 commit comments

Comments
 (0)