UNPKG

8.82 kBJavaScriptView Raw
1import dataUrls from "data-urls";
2import fs from "fs";
3import whatwgEncoding from "whatwg-encoding";
4// TODO: Find out why TSLint complains about whitespace
5// tslint:disable:whitespace
6/**
7 * Returns the string corresponding to the provided `url`.
8 *
9 * @param url URL for the text content.
10 */
11export async function getText(url) {
12 switch (url.protocol) {
13 case "data:":
14 return getTextByDataUrl(url);
15 case "file:":
16 return getTextByFileUrl(url);
17 default:
18 throw new Error(`UnsupportedProtocol ${url.protocol} for: ${url}`);
19 }
20}
21// tslint:enable
22/**
23 * Synchronous variant of `getText`.
24 */
25export function getTextSync(url) {
26 switch (url.protocol) {
27 case "data:":
28 return getTextByDataUrl(url);
29 case "file:":
30 return getTextByFileUrlSync(url);
31 default:
32 throw new Error(`UnsupportedProtocol ${url.protocol} for: ${url}`);
33 }
34}
35export function getTextByDataUrl(url) {
36 const parsed = dataUrls(url.toString());
37 if (parsed === null) {
38 throw new Error(`CannotParseDataUrl: ${url}`);
39 }
40 const charset = parsed.mimeType.parameters.get("charset");
41 let encodingName;
42 if (charset !== undefined) {
43 encodingName = whatwgEncoding.labelToName(charset);
44 }
45 else {
46 // Not sure what the default should be...
47 encodingName = "UTF-8";
48 }
49 if (encodingName === null) {
50 throw new Error(`Unable to resolve encoding for data URL: ${url}`);
51 }
52 return whatwgEncoding.decode(parsed.body, encodingName);
53}
54export async function getTextByFileUrl(url) {
55 return fs.promises.readFile(url, { encoding: "UTF-8" });
56}
57export function getTextByFileUrlSync(url) {
58 return fs.readFileSync(url, { encoding: "UTF-8" });
59}
60export function getTextSyncFromSourceStore(_sources) {
61 const cache = new Map();
62 return (url) => {
63 const cached = cache.get(url.toString());
64 if (typeof cached === "string") {
65 return cached;
66 }
67 const sourceText = getTextSync(url);
68 cache.set(url.toString(), sourceText);
69 return sourceText;
70 };
71}
72
73//# sourceMappingURL=data:application/json;charset=utf8;base64,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TUFBTSxLQUFLLFFBQVEsRUFBRTtZQUM5QixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsTUFBTSxVQUFVLEdBQVcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJmaWxlIjoiZ2V0LXRleHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGF0YVVybHMgZnJvbSBcImRhdGEtdXJsc1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHVybE1vZCBmcm9tIFwidXJsXCI7XG5pbXBvcnQgd2hhdHdnRW5jb2RpbmcgZnJvbSBcIndoYXR3Zy1lbmNvZGluZ1wiO1xuaW1wb3J0IHsgTnVsbGFibGVTb3VyY2VUZXh0IH0gZnJvbSBcIi4vc291cmNlLW1hcC9zb3VyY2Utc3RvcmVcIjtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBgc3RyaW5nYCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBVUkwgcmVjb3JkLlxuICovXG5leHBvcnQgdHlwZSBHZXRUZXh0ID0gKHVybDogUmVhZG9ubHk8dXJsTW9kLlVSTD4pID0+IFByb21pc2U8c3RyaW5nPjtcblxuLyoqXG4gKiBTeW5jaHJvbm91cyB2YXJpYW50IG9mIGBHZXRUZXh0YC5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0VGV4dFN5bmMgPSAodXJsOiBSZWFkb25seTx1cmxNb2QuVVJMPikgPT4gc3RyaW5nO1xuXG4vLyBUT0RPOiBGaW5kIG91dCB3aHkgVFNMaW50IGNvbXBsYWlucyBhYm91dCB3aGl0ZXNwYWNlXG4vLyB0c2xpbnQ6ZGlzYWJsZTp3aGl0ZXNwYWNlXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBgdXJsYC5cbiAqXG4gKiBAcGFyYW0gdXJsIFVSTCBmb3IgdGhlIHRleHQgY29udGVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFRleHQodXJsOiBSZWFkb25seTx1cmxNb2QuVVJMPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHN3aXRjaCAodXJsLnByb3RvY29sKSB7XG4gICAgY2FzZSBcImRhdGE6XCI6XG4gICAgICByZXR1cm4gZ2V0VGV4dEJ5RGF0YVVybCh1cmwpO1xuICAgIGNhc2UgXCJmaWxlOlwiOlxuICAgICAgcmV0dXJuIGdldFRleHRCeUZpbGVVcmwodXJsKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZFByb3RvY29sICR7dXJsLnByb3RvY29sfSBmb3I6ICR7dXJsfWApO1xuICB9XG59XG4vLyB0c2xpbnQ6ZW5hYmxlXG5cbi8qKlxuICogU3luY2hyb25vdXMgdmFyaWFudCBvZiBgZ2V0VGV4dGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0U3luYyh1cmw6IFJlYWRvbmx5PHVybE1vZC5VUkw+KTogc3RyaW5nIHtcbiAgc3dpdGNoICh1cmwucHJvdG9jb2wpIHtcbiAgICBjYXNlIFwiZGF0YTpcIjpcbiAgICAgIHJldHVybiBnZXRUZXh0QnlEYXRhVXJsKHVybCk7XG4gICAgY2FzZSBcImZpbGU6XCI6XG4gICAgICByZXR1cm4gZ2V0VGV4dEJ5RmlsZVVybFN5bmModXJsKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZFByb3RvY29sICR7dXJsLnByb3RvY29sfSBmb3I6ICR7dXJsfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0QnlEYXRhVXJsKHVybDogUmVhZG9ubHk8dXJsTW9kLlVSTD4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJzZWQ6IGRhdGFVcmxzLkRhdGFVUkwgfCBudWxsID0gZGF0YVVybHModXJsLnRvU3RyaW5nKCkpO1xuICBpZiAocGFyc2VkID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3RQYXJzZURhdGFVcmw6ICR7dXJsfWApO1xuICB9XG4gIGNvbnN0IGNoYXJzZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHBhcnNlZC5taW1lVHlwZS5wYXJhbWV0ZXJzLmdldChcImNoYXJzZXRcIik7XG4gIGxldCBlbmNvZGluZ05hbWU6IHN0cmluZyB8IG51bGw7XG4gIGlmIChjaGFyc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZ05hbWUgPSB3aGF0d2dFbmNvZGluZy5sYWJlbFRvTmFtZShjaGFyc2V0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBOb3Qgc3VyZSB3aGF0IHRoZSBkZWZhdWx0IHNob3VsZCBiZS4uLlxuICAgIGVuY29kaW5nTmFtZSA9IFwiVVRGLThcIjtcbiAgfVxuICBpZiAoZW5jb2RpbmdOYW1lID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBlbmNvZGluZyBmb3IgZGF0YSBVUkw6ICR7dXJsfWApO1xuICB9XG4gIHJldHVybiB3aGF0d2dFbmNvZGluZy5kZWNvZGUocGFyc2VkLmJvZHksIGVuY29kaW5nTmFtZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRUZXh0QnlGaWxlVXJsKHVybDogUmVhZG9ubHk8dXJsTW9kLlVSTD4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gZnMucHJvbWlzZXMucmVhZEZpbGUodXJsLCB7ZW5jb2Rpbmc6IFwiVVRGLThcIn0pIGFzIFByb21pc2U8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRCeUZpbGVVcmxTeW5jKHVybDogUmVhZG9ubHk8dXJsTW9kLlVSTD4pOiBzdHJpbmcge1xuICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKHVybCwge2VuY29kaW5nOiBcIlVURi04XCJ9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRTeW5jRnJvbVNvdXJjZVN0b3JlKF9zb3VyY2VzOiBJdGVyYWJsZTxbc3RyaW5nLCBOdWxsYWJsZVNvdXJjZVRleHRdPik6IEdldFRleHRTeW5jIHtcbiAgY29uc3QgY2FjaGU6IE1hcDxzdHJpbmcsIE51bGxhYmxlU291cmNlVGV4dD4gPSBuZXcgTWFwKCk7XG4gIHJldHVybiAodXJsOiBSZWFkb25seTx1cmxNb2QuVVJMPik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgY2FjaGVkOiBOdWxsYWJsZVNvdXJjZVRleHQgfCB1bmRlZmluZWQgPSBjYWNoZS5nZXQodXJsLnRvU3RyaW5nKCkpO1xuICAgIGlmICh0eXBlb2YgY2FjaGVkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2VUZXh0OiBzdHJpbmcgPSBnZXRUZXh0U3luYyh1cmwpO1xuICAgIGNhY2hlLnNldCh1cmwudG9TdHJpbmcoKSwgc291cmNlVGV4dCk7XG4gICAgcmV0dXJuIHNvdXJjZVRleHQ7XG4gIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9