-
-
Notifications
You must be signed in to change notification settings - Fork 608
/
Copy pathapi.js
98 lines (79 loc) · 2.4 KB
/
api.js
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
95
96
97
98
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
// css base code, injected by the css-loader
// eslint-disable-next-line func-names
module.exports = function(useSourceMap) {
const list = [];
// return the list of modules as css string
list.toString = function toString() {
return this.map((item) => {
const content = cssWithMappingToString(item, useSourceMap);
if (item[2]) {
return `@media ${item[2]} {${content}}`;
}
return content;
}).join('');
};
// import a list of modules into the list
// eslint-disable-next-line func-names
list.i = function(modules, mediaQuery, dedupe) {
if (typeof modules === 'string') {
// eslint-disable-next-line no-param-reassign
modules = [[null, modules, '']];
}
const alreadyImportedModules = {};
if (dedupe) {
for (let i = 0; i < this.length; i++) {
// eslint-disable-next-line prefer-destructuring
const id = this[i][0];
if (id != null) {
alreadyImportedModules[id] = true;
}
}
}
for (let i = 0; i < modules.length; i++) {
const item = [].concat(modules[i]);
if (dedupe && alreadyImportedModules[item[0]]) {
// eslint-disable-next-line no-continue
continue;
}
if (mediaQuery) {
if (!item[2]) {
item[2] = mediaQuery;
} else {
item[2] = `${mediaQuery} and ${item[2]}`;
}
}
list.push(item);
}
};
return list;
};
function cssWithMappingToString(item, useSourceMap) {
const content = item[1] || '';
// eslint-disable-next-line prefer-destructuring
const cssMapping = item[3];
if (!cssMapping) {
return content;
}
if (useSourceMap && typeof btoa === 'function') {
const sourceMapping = toComment(cssMapping);
const sourceURLs = cssMapping.sources.map(
(source) => `/*# sourceURL=${cssMapping.sourceRoot || ''}${source} */`
);
return [content]
.concat(sourceURLs)
.concat([sourceMapping])
.join('\n');
}
return [content].join('\n');
}
// Adapted from convert-source-map (MIT)
function toComment(sourceMap) {
// eslint-disable-next-line no-undef
const base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
const data = `sourceMappingURL=data:application/json;charset=utf-8;base64,${base64}`;
return `/*# ${data} */`;
}