forked from pablodenadai/angular2-inline-template-style
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
94 lines (77 loc) · 2.15 KB
/
index.js
File metadata and controls
94 lines (77 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
'use strict';
var fs = require('fs');
var path = require('path');
var minify = require('html-minifier').minify;
var CleanCSS = require('clean-css');
module.exports = function (content, options) {
options = options || {};
options.base = options.base || './';
content = processStyleUrls(content, options);
content = processTemplateUrl(content, options);
return content;
};
function processStyleUrls(content, options) {
let re = /styleUrls\s*:\s*(\[[^](.[^]*?)\])/g;
let matches = content.match(re);
if (matches === null || matches.length <= 0) {
return content;
}
matches.forEach(function () {
let exec = re.exec(content);
let style = exec[0];
let urls = exec[1];
urls = urls.replace(/'/g, '"');
urls = JSON.parse(urls);
var result = '';
urls.forEach(function (url) {
let file = fs.readFileSync(path.join(options.base, url), 'utf-8');
if (options.compress) {
file = new CleanCSS().minify(file).styles;
} else {
file = file.replace(/[\r\n]/g, '');
}
result += file;
});
content = content.replace(style, 'styles: [\'' + result + '\']');
});
return content;
}
function processTemplateUrl(content, options) {
let re = /templateUrl\s*:\s*(?:"([^"]+)"|'([^']+)')/g;
let matches = content.match(re);
if (matches === null || matches.length <= 0) {
return content;
}
matches.forEach(function () {
let exec = re.exec(content);
let template = exec[0];
let quote;
let url;
if (exec[1]) {
url = exec[1];
quote = '"';
} else {
url = exec[2];
quote = '\'';
}
let file = fs.readFileSync(path.join(options.base, url), 'utf-8');
if (options.compress) {
file = minify(file,
{
collapseWhitespace: true,
removeComments: true,
/*
ng2 bindings break the parser for html-minifer, so the
following blocks the processing of ()="" and []="" attributes
*/
ignoreCustomFragments: [/\s\[.*\]=\"[^\"]*\"/, /\s\([^)"]+\)=\"[^\"]*\"/]
});
// escape quote chars
file = file.replace(new RegExp(quote, 'g'), '\\' + quote);
} else {
file = file.replace(/[\r\n]\s*/g, '');
}
content = content.replace(template, 'template: ' + quote + file + quote);
});
return content;
}