1 | var fs = require('graceful-fs')
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | exports.exists = function* (filename) {
|
13 | try {
|
14 | return yield fs.stat.bind(null, filename);
|
15 | } catch (err) {
|
16 | if (err.code === 'ENOENT') throw new Error('file "' + filename + '" does not exist.');
|
17 | throw err;
|
18 | }
|
19 | }
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 | exports.unlink = function* (filename) {
|
29 | try {
|
30 | yield fs.unlink.bind(null, filename);
|
31 | } catch (err) {
|
32 | if (err.code === 'ENOENT') return;
|
33 | throw err;
|
34 | }
|
35 | }
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 | exports.rewriteUrl = function (branch) {
|
49 | if (branch.type === 'local') return (branch.relativePath || branch.name).replace(/\\/g, '/');
|
50 | if (branch.type === 'dependency') return branch.name + '/' + branch.ref;
|
51 | }
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 | exports.stripLeading = function (x) {
|
62 | if (x.slice(0, 2) === './') return x.slice(2);
|
63 | return x;
|
64 | }
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 | exports.isGeneratorFunction = function (obj) {
|
75 | return obj
|
76 | && obj.constructor
|
77 | && 'GeneratorFunction' === obj.constructor.name;
|
78 | }
|
79 |
|
80 |
|
81 |
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 | var cssPropertyMatcher = /@import[^;]*|[;\s]?\*?[a-zA-Z\-]+\s*\:\#?[^;}]*url\(\s*['"]?[^'"\)\s]+['"]?\s*\)[^;}]*/g;
|
93 |
|
94 |
|
95 |
|
96 |
|
97 | var urlMatcher = /url\(\s*['"]?([^)'"]+)['"]?\s*\)/g;
|
98 |
|
99 | var defaults = {
|
100 | excludeProperties: ['behavior', '*behavior']
|
101 | };
|
102 |
|
103 | exports.rewriteCSSURLs = function rewriteCSSURLs(css, settings, rewriterFn) {
|
104 |
|
105 | if (typeof settings === 'function') {
|
106 | rewriterFn = settings;
|
107 | settings = defaults;
|
108 | }
|
109 |
|
110 |
|
111 | var result = css.toString().replace(cssPropertyMatcher, function(property) {
|
112 |
|
113 |
|
114 |
|
115 | if (settings.excludeProperties.length) {
|
116 | var propertyName = property.split(':')[0].replace(/^\s+|\s+$/g, '');
|
117 |
|
118 | for (var i = settings.excludeProperties.length - 1; i >= 0; i--) {
|
119 | if (propertyName.indexOf(settings.excludeProperties[i]) === 0) {
|
120 | return property;
|
121 | }
|
122 | }
|
123 | }
|
124 |
|
125 |
|
126 | return property.replace(urlMatcher, function(urlFunc, justURL) {
|
127 | return urlFunc.replace(justURL, rewriterFn(justURL));
|
128 | });
|
129 | });
|
130 |
|
131 | return result;
|
132 | };
|