UNPKG

9.37 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const data_urls_1 = __importDefault(require("data-urls"));
7const fs_1 = __importDefault(require("fs"));
8const whatwg_encoding_1 = __importDefault(require("whatwg-encoding"));
9// TODO: Find out why TSLint complains about whitespace
10// tslint:disable:whitespace
11/**
12 * Returns the string corresponding to the provided `url`.
13 *
14 * @param url URL for the text content.
15 */
16async function getText(url) {
17 switch (url.protocol) {
18 case "data:":
19 return getTextByDataUrl(url);
20 case "file:":
21 return getTextByFileUrl(url);
22 default:
23 throw new Error(`UnsupportedProtocol ${url.protocol} for: ${url}`);
24 }
25}
26exports.getText = getText;
27// tslint:enable
28/**
29 * Synchronous variant of `getText`.
30 */
31function getTextSync(url) {
32 switch (url.protocol) {
33 case "data:":
34 return getTextByDataUrl(url);
35 case "file:":
36 return getTextByFileUrlSync(url);
37 default:
38 throw new Error(`UnsupportedProtocol ${url.protocol} for: ${url}`);
39 }
40}
41exports.getTextSync = getTextSync;
42function getTextByDataUrl(url) {
43 const parsed = data_urls_1.default(url.toString());
44 if (parsed === null) {
45 throw new Error(`CannotParseDataUrl: ${url}`);
46 }
47 const charset = parsed.mimeType.parameters.get("charset");
48 let encodingName;
49 if (charset !== undefined) {
50 encodingName = whatwg_encoding_1.default.labelToName(charset);
51 }
52 else {
53 // Not sure what the default should be...
54 encodingName = "UTF-8";
55 }
56 if (encodingName === null) {
57 throw new Error(`Unable to resolve encoding for data URL: ${url}`);
58 }
59 return whatwg_encoding_1.default.decode(parsed.body, encodingName);
60}
61exports.getTextByDataUrl = getTextByDataUrl;
62async function getTextByFileUrl(url) {
63 return fs_1.default.promises.readFile(url, { encoding: "UTF-8" });
64}
65exports.getTextByFileUrl = getTextByFileUrl;
66function getTextByFileUrlSync(url) {
67 return fs_1.default.readFileSync(url, { encoding: "UTF-8" });
68}
69exports.getTextByFileUrlSync = getTextByFileUrlSync;
70function getTextSyncFromSourceStore(_sources) {
71 const cache = new Map();
72 return (url) => {
73 const cached = cache.get(url.toString());
74 if (typeof cached === "string") {
75 return cached;
76 }
77 const sourceText = getTextSync(url);
78 cache.set(url.toString(), sourceText);
79 return sourceText;
80 };
81}
82exports.getTextSyncFromSourceStore = getTextSyncFromSourceStore;
83
84//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsTUFBTSxVQUFVLEdBQVcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFYRCxnRUFXQyIsImZpbGUiOiJnZXQtdGV4dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkYXRhVXJscyBmcm9tIFwiZGF0YS11cmxzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgdXJsTW9kIGZyb20gXCJ1cmxcIjtcbmltcG9ydCB3aGF0d2dFbmNvZGluZyBmcm9tIFwid2hhdHdnLWVuY29kaW5nXCI7XG5pbXBvcnQgeyBOdWxsYWJsZVNvdXJjZVRleHQgfSBmcm9tIFwiLi9zb3VyY2UtbWFwL3NvdXJjZS1zdG9yZVwiO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGBzdHJpbmdgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIFVSTCByZWNvcmQuXG4gKi9cbmV4cG9ydCB0eXBlIEdldFRleHQgPSAodXJsOiBSZWFkb25seTx1cmxNb2QuVVJMPikgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4vKipcbiAqIFN5bmNocm9ub3VzIHZhcmlhbnQgb2YgYEdldFRleHRgLlxuICovXG5leHBvcnQgdHlwZSBHZXRUZXh0U3luYyA9ICh1cmw6IFJlYWRvbmx5PHVybE1vZC5VUkw+KSA9PiBzdHJpbmc7XG5cbi8vIFRPRE86IEZpbmQgb3V0IHdoeSBUU0xpbnQgY29tcGxhaW5zIGFib3V0IHdoaXRlc3BhY2Vcbi8vIHRzbGludDpkaXNhYmxlOndoaXRlc3BhY2Vcbi8qKlxuICogUmV0dXJucyB0aGUgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIGB1cmxgLlxuICpcbiAqIEBwYXJhbSB1cmwgVVJMIGZvciB0aGUgdGV4dCBjb250ZW50LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VGV4dCh1cmw6IFJlYWRvbmx5PHVybE1vZC5VUkw+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgc3dpdGNoICh1cmwucHJvdG9jb2wpIHtcbiAgICBjYXNlIFwiZGF0YTpcIjpcbiAgICAgIHJldHVybiBnZXRUZXh0QnlEYXRhVXJsKHVybCk7XG4gICAgY2FzZSBcImZpbGU6XCI6XG4gICAgICByZXR1cm4gZ2V0VGV4dEJ5RmlsZVVybCh1cmwpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkUHJvdG9jb2wgJHt1cmwucHJvdG9jb2x9IGZvcjogJHt1cmx9YCk7XG4gIH1cbn1cbi8vIHRzbGludDplbmFibGVcblxuLyoqXG4gKiBTeW5jaHJvbm91cyB2YXJpYW50IG9mIGBnZXRUZXh0YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRTeW5jKHVybDogUmVhZG9ubHk8dXJsTW9kLlVSTD4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKHVybC5wcm90b2NvbCkge1xuICAgIGNhc2UgXCJkYXRhOlwiOlxuICAgICAgcmV0dXJuIGdldFRleHRCeURhdGFVcmwodXJsKTtcbiAgICBjYXNlIFwiZmlsZTpcIjpcbiAgICAgIHJldHVybiBnZXRUZXh0QnlGaWxlVXJsU3luYyh1cmwpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkUHJvdG9jb2wgJHt1cmwucHJvdG9jb2x9IGZvcjogJHt1cmx9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRCeURhdGFVcmwodXJsOiBSZWFkb25seTx1cmxNb2QuVVJMPik6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnNlZDogZGF0YVVybHMuRGF0YVVSTCB8IG51bGwgPSBkYXRhVXJscyh1cmwudG9TdHJpbmcoKSk7XG4gIGlmIChwYXJzZWQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdFBhcnNlRGF0YVVybDogJHt1cmx9YCk7XG4gIH1cbiAgY29uc3QgY2hhcnNldDogc3RyaW5nIHwgdW5kZWZpbmVkID0gcGFyc2VkLm1pbWVUeXBlLnBhcmFtZXRlcnMuZ2V0KFwiY2hhcnNldFwiKTtcbiAgbGV0IGVuY29kaW5nTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgaWYgKGNoYXJzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nTmFtZSA9IHdoYXR3Z0VuY29kaW5nLmxhYmVsVG9OYW1lKGNoYXJzZXQpO1xuICB9IGVsc2Uge1xuICAgIC8vIE5vdCBzdXJlIHdoYXQgdGhlIGRlZmF1bHQgc2hvdWxkIGJlLi4uXG4gICAgZW5jb2RpbmdOYW1lID0gXCJVVEYtOFwiO1xuICB9XG4gIGlmIChlbmNvZGluZ05hbWUgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZXNvbHZlIGVuY29kaW5nIGZvciBkYXRhIFVSTDogJHt1cmx9YCk7XG4gIH1cbiAgcmV0dXJuIHdoYXR3Z0VuY29kaW5nLmRlY29kZShwYXJzZWQuYm9keSwgZW5jb2RpbmdOYW1lKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFRleHRCeUZpbGVVcmwodXJsOiBSZWFkb25seTx1cmxNb2QuVVJMPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBmcy5wcm9taXNlcy5yZWFkRmlsZSh1cmwsIHtlbmNvZGluZzogXCJVVEYtOFwifSkgYXMgUHJvbWlzZTxzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dEJ5RmlsZVVybFN5bmModXJsOiBSZWFkb25seTx1cmxNb2QuVVJMPik6IHN0cmluZyB7XG4gIHJldHVybiBmcy5yZWFkRmlsZVN5bmModXJsLCB7ZW5jb2Rpbmc6IFwiVVRGLThcIn0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dFN5bmNGcm9tU291cmNlU3RvcmUoX3NvdXJjZXM6IEl0ZXJhYmxlPFtzdHJpbmcsIE51bGxhYmxlU291cmNlVGV4dF0+KTogR2V0VGV4dFN5bmMge1xuICBjb25zdCBjYWNoZTogTWFwPHN0cmluZywgTnVsbGFibGVTb3VyY2VUZXh0PiA9IG5ldyBNYXAoKTtcbiAgcmV0dXJuICh1cmw6IFJlYWRvbmx5PHVybE1vZC5VUkw+KTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBjYWNoZWQ6IE51bGxhYmxlU291cmNlVGV4dCB8IHVuZGVmaW5lZCA9IGNhY2hlLmdldCh1cmwudG9TdHJpbmcoKSk7XG4gICAgaWYgKHR5cGVvZiBjYWNoZWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZVRleHQ6IHN0cmluZyA9IGdldFRleHRTeW5jKHVybCk7XG4gICAgY2FjaGUuc2V0KHVybC50b1N0cmluZygpLCBzb3VyY2VUZXh0KTtcbiAgICByZXR1cm4gc291cmNlVGV4dDtcbiAgfTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=