Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion lib/builders/scripts.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

var debug = require('debug')('component-builder:scripts');
var relative = require('path').relative;
var path = require('path');
var relative = path.relative;
var requires = require('requires');
var fs = require('graceful-fs');
var url = require('url');
Expand Down Expand Up @@ -201,6 +202,12 @@ Scripts.prototype.register = function (file) {
+ '")';
});

// rewrite asset paths
js = assetPaths(js, function (asset) {
asset = relative(file.manifest.path, path.resolve(path.dirname(file.filename), asset));
return path.join(utils.rewriteUrl(file.branch), asset);
});

var name = file.name;
if (this.sourceMap || this.sourceURL) {
if (this.sourceMap && file.sourceMap) {
Expand Down Expand Up @@ -419,3 +426,14 @@ Scripts.prototype.lookupDependency = function (file, target) {
debug('could not resolve "%s" from "%s"', target, file.name)
return target
}



// private helpers

function assetPaths(source, replacer) {
return source.replace(/\/\* component:file \*\/\s+['"](\S+)['"]/g, function (match, p1) {
var replacement = replacer(p1);
return replacement ? JSON.stringify(replacement) : match;
});
}
1 change: 1 addition & 0 deletions test/fixtures/js-asset-path/assets/foo.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Hello World!
11 changes: 11 additions & 0 deletions test/fixtures/js-asset-path/component.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"name": "js-asset-path",
"scripts": [
"index.js",
"lib/index.js"
],
"files": [
"test.txt",
"assets/foo.txt"
]
}
1 change: 1 addition & 0 deletions test/fixtures/js-asset-path/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
var path = /* component:file */ "test.txt";
1 change: 1 addition & 0 deletions test/fixtures/js-asset-path/lib/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
var path = /* component:file */ "../assets/foo.txt";
1 change: 1 addition & 0 deletions test/fixtures/js-asset-path/test.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Lorem ipsum solor dit amet...
28 changes: 28 additions & 0 deletions test/scripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -425,3 +425,31 @@ describe('js-page.js', function () {
})
})

describe('js-asset-path', function () {
var tree;
var js = Builder.require;

it('should install', co(function* () {
tree = yield* resolve(fixture('js-asset-path'), options);
}))

it('should build', co(function* () {
js += yield build(tree).end();
}))

it('should execute', function () {
var ctx = vm.createContext();
vm.runInContext(js, ctx);
vm.runInContext('require("js-asset-path")', ctx);
})

it('should rewrite asset path comments', function () {
js.should.not.include('/* component:file */ "test.txt"');
js.should.include('"js-asset-path/test.txt"');
});

it("should be able to handle relative paths", function () {
js.should.not.include('/* component:file */ "../assets/foo.txt"');
js.should.include('"js-asset-path/assets/foo.txt"');
});
})