1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var tslib_1 = require("tslib");
|
4 | var quoted_1 = tslib_1.__importDefault(require("../tree/quoted"));
|
5 | var url_1 = tslib_1.__importDefault(require("../tree/url"));
|
6 | var utils = tslib_1.__importStar(require("../utils"));
|
7 | var logger_1 = tslib_1.__importDefault(require("../logger"));
|
8 | exports.default = (function (environment) {
|
9 | var fallback = function (functionThis, node) { return new url_1.default(node, functionThis.index, functionThis.currentFileInfo).eval(functionThis.context); };
|
10 | return { 'data-uri': function (mimetypeNode, filePathNode) {
|
11 | if (!filePathNode) {
|
12 | filePathNode = mimetypeNode;
|
13 | mimetypeNode = null;
|
14 | }
|
15 | var mimetype = mimetypeNode && mimetypeNode.value;
|
16 | var filePath = filePathNode.value;
|
17 | var currentFileInfo = this.currentFileInfo;
|
18 | var currentDirectory = currentFileInfo.rewriteUrls ?
|
19 | currentFileInfo.currentDirectory : currentFileInfo.entryPath;
|
20 | var fragmentStart = filePath.indexOf('#');
|
21 | var fragment = '';
|
22 | if (fragmentStart !== -1) {
|
23 | fragment = filePath.slice(fragmentStart);
|
24 | filePath = filePath.slice(0, fragmentStart);
|
25 | }
|
26 | var context = utils.clone(this.context);
|
27 | context.rawBuffer = true;
|
28 | var fileManager = environment.getFileManager(filePath, currentDirectory, context, environment, true);
|
29 | if (!fileManager) {
|
30 | return fallback(this, filePathNode);
|
31 | }
|
32 | var useBase64 = false;
|
33 |
|
34 | if (!mimetypeNode) {
|
35 | mimetype = environment.mimeLookup(filePath);
|
36 | if (mimetype === 'image/svg+xml') {
|
37 | useBase64 = false;
|
38 | }
|
39 | else {
|
40 |
|
41 | var charset = environment.charsetLookup(mimetype);
|
42 | useBase64 = ['US-ASCII', 'UTF-8'].indexOf(charset) < 0;
|
43 | }
|
44 | if (useBase64) {
|
45 | mimetype += ';base64';
|
46 | }
|
47 | }
|
48 | else {
|
49 | useBase64 = /;base64$/.test(mimetype);
|
50 | }
|
51 | var fileSync = fileManager.loadFileSync(filePath, currentDirectory, context, environment);
|
52 | if (!fileSync.contents) {
|
53 | logger_1.default.warn("Skipped data-uri embedding of " + filePath + " because file not found");
|
54 | return fallback(this, filePathNode || mimetypeNode);
|
55 | }
|
56 | var buf = fileSync.contents;
|
57 | if (useBase64 && !environment.encodeBase64) {
|
58 | return fallback(this, filePathNode);
|
59 | }
|
60 | buf = useBase64 ? environment.encodeBase64(buf) : encodeURIComponent(buf);
|
61 | var uri = "data:" + mimetype + "," + buf + fragment;
|
62 | return new url_1.default(new quoted_1.default("\"" + uri + "\"", uri, false, this.index, this.currentFileInfo), this.index, this.currentFileInfo);
|
63 | } };
|
64 | });
|
65 |
|
\ | No newline at end of file |