UNPKG

3.23 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var tslib_1 = require("tslib");
4var quoted_1 = tslib_1.__importDefault(require("../tree/quoted"));
5var url_1 = tslib_1.__importDefault(require("../tree/url"));
6var utils = tslib_1.__importStar(require("../utils"));
7var logger_1 = tslib_1.__importDefault(require("../logger"));
8exports.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 // detect the mimetype if not given
34 if (!mimetypeNode) {
35 mimetype = environment.mimeLookup(filePath);
36 if (mimetype === 'image/svg+xml') {
37 useBase64 = false;
38 }
39 else {
40 // use base 64 unless it's an ASCII or UTF-8 format
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//# sourceMappingURL=data-uri.js.map
\No newline at end of file