UNPKG

yarle-evernote-to-md

Version:

Yet Another Rope Ladder from Evernote

158 lines 8.39 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getShortLinkIfPossible = exports.wikiStyleLinksRule = exports.removeDoubleBackSlashes = exports.removeBrackets = void 0; const marked_1 = __importDefault(require("marked")); const _ = __importStar(require("lodash")); const filename_utils_1 = require("../filename-utils"); const output_format_1 = require("../../output-format"); const yarle_1 = require("../../yarle"); const turndown_service_1 = require("../turndown-service"); const runtime_properties_1 = require("../../runtime-properties"); const filter_by_nodename_1 = require("./filter-by-nodename"); const get_attribute_proxy_1 = require("./get-attribute-proxy"); const is_toc_1 = require("./../../utils/is-toc"); const is_hepta_or_obsidian_output_1 = require("./../../utils/is-hepta-or-obsidian-output"); const sanitize_filename_1 = __importDefault(require("sanitize-filename")); const removeBrackets = (str) => { return str.replace(/\[|\]/g, ''); }; exports.removeBrackets = removeBrackets; const removeDoubleBackSlashes = (str) => { return str.replace(/\\/g, ''); }; exports.removeDoubleBackSlashes = removeDoubleBackSlashes; const isEvernoteLink = (value) => { let url; try { url = new URL(value); } catch (e) { return false; } // NOTE: URL automatically converts to lowercase if (url.protocol === 'evernote:') { // Internal link format: evernote:///view/92167309/s714/00ba720b-e3f1-49fd-9b43-5d915a3bca8a/00ba720b-e3f1-49fd-9b43-5d915a3bca8a/ const pathSpl = url.pathname.split('/').filter(Boolean); // Split and removes empty strings if (pathSpl[0] !== 'view' || pathSpl.length < 4) return false; return true; } else if ((url.protocol === 'http:' || url.protocol === 'https:') && url.host === 'www.evernote.com') { // External link format: https://www.evernote.com/shard/s714/nl/92167309/00ba720b-e3f1-49fd-9b43-5d915a3bca8a/ const pathSpl = url.pathname.split('/').filter(Boolean); // Removes empty strings if (pathSpl[0] !== 'shard' || pathSpl.length < 5) return false; return true; } return false; }; const getEvernoteUniqueId = (value) => { if (yarle_1.yarleOptions.keepEvernoteLinkIfNoNoteFound) return value; const urlSpl = value.split('/').reverse(); return ((urlSpl[0] !== '') ? [urlSpl[0], urlSpl[1]] : [urlSpl[1], urlSpl[2]]).join('/'); }; exports.wikiStyleLinksRule = { filter: (0, filter_by_nodename_1.filterByNodeName)('A'), replacement: (content, node) => { var _a; const nodeProxy = (0, get_attribute_proxy_1.getAttributeProxy)(node); let internalTurndownedContent = (0, turndown_service_1.getTurndownService)(yarle_1.yarleOptions).turndown((0, exports.removeBrackets)(node.innerHTML)); internalTurndownedContent = (0, exports.removeDoubleBackSlashes)(internalTurndownedContent); if (!nodeProxy.href) { return (node.innerHTML === '' || !node.innerHTML) ? '' : internalTurndownedContent; } const lexer = new marked_1.default.Lexer({}); const tokens = lexer.lex(internalTurndownedContent); const extension = yarle_1.yarleOptions.addExtensionToInternalLinks ? '.md' : ''; let token = { mdKeyword: '', text: internalTurndownedContent, }; if (tokens.length > 0 && tokens[0]['type'] === 'heading') { token = tokens[0]; token['mdKeyword'] = `${'#'.repeat(tokens[0]['depth'])} `; } const value = nodeProxy.href ? nodeProxy.href.value : internalTurndownedContent; const type = nodeProxy.type ? nodeProxy.type.value : undefined; const realValue = yarle_1.yarleOptions.urlEncodeFileNamesAndLinks ? encodeURI(value) : value; const isYarleResource = Boolean(node.getAttribute('yarle-file-resource')); if (type === 'file' || isYarleResource) { return (0, is_hepta_or_obsidian_output_1.isHeptaOrObsidianOutput)() ? `![[${realValue}]]` : (0, exports.getShortLinkIfPossible)(token, value); } const isValueEvernoteLink = isEvernoteLink(value); if (value.match(/^(https?:|tel:|www\.|file:|busycalevent:|ftp:|mailto:)/) && !isValueEvernoteLink) { return (0, exports.getShortLinkIfPossible)(token, value); } const displayName = (0, sanitize_filename_1.default)(token['text'], { replacement: yarle_1.yarleOptions.replacementChar || '_' }).replace(/[\[\]\#\^]/g, ''); const mdKeyword = token['mdKeyword']; // handle ObsidianMD internal link display name const omitObsidianLinksDisplayName = (0, is_hepta_or_obsidian_output_1.isHeptaOrObsidianOutput)() && ((_a = yarle_1.yarleOptions.obsidianSettings) === null || _a === void 0 ? void 0 : _a.omitLinkDisplayName); const renderedObsidianDisplayName = omitObsidianLinksDisplayName ? '' : `|${displayName}`; if (isValueEvernoteLink) { const fileName = (0, filename_utils_1.normalizeFilenameString)(token['text']); const noteIdNameMap = runtime_properties_1.RuntimePropertiesSingleton.getInstance(); const uniqueEnd = (0, filename_utils_1.getUniqueId)(); const id = getEvernoteUniqueId(value); if ((0, is_toc_1.isTOC)(noteIdNameMap.getCurrentNoteName())) { noteIdNameMap.addItemToTOCMap({ id, url: value, title: fileName, uniqueEnd }); } else { noteIdNameMap.addItemToMap({ id, url: value, title: fileName, uniqueEnd }); } const linkedNoteId = id; // todo add evernotelink value if ((0, is_hepta_or_obsidian_output_1.isHeptaOrObsidianOutput)() && !yarle_1.yarleOptions.keepEvernoteLinkIfNoNoteFound) { return `${mdKeyword}[[${linkedNoteId}${extension}${renderedObsidianDisplayName}]]`; } if (yarle_1.yarleOptions.keepEvernoteLinkIfNoNoteFound) { return `<YARLE_EVERNOTE_LINK>${mdKeyword}[[${linkedNoteId}${extension}${renderedObsidianDisplayName}]]<-->[${displayName}](${linkedNoteId}${extension})</YARLE_EVERNOTE_LINK>`; } return `${mdKeyword}[${displayName}](${linkedNoteId}${extension})`; } return ((0, is_hepta_or_obsidian_output_1.isHeptaOrObsidianOutput)()) ? `${mdKeyword}[[${realValue}${renderedObsidianDisplayName}]]` : (yarle_1.yarleOptions.outputFormat === output_format_1.OutputFormat.StandardMD || yarle_1.yarleOptions.outputFormat === output_format_1.OutputFormat.LogSeqMD) ? `${mdKeyword}[${displayName}](${realValue})` : `${mdKeyword}[[${realValue}]]`; }, }; const getShortLinkIfPossible = (token, value) => { return (!token['text'] || _.unescape(token['text']) === _.unescape(value)) ? yarle_1.yarleOptions.generateNakedUrls ? value : `<${value}>` : `${token['mdKeyword']}[${token['text']}](${value})`; }; exports.getShortLinkIfPossible = getShortLinkIfPossible; //# sourceMappingURL=internal-links-rule.js.map