UNPKG

yarle-evernote-to-md

Version:

Yet Another Rope Ladder from Evernote

183 lines 8.61 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.getClosestFileName = exports.getNotebookName = exports.getNoteName = exports.getUniqueId = exports.getZettelKastelId = exports.getExtension = exports.getExtensionFromMime = exports.getExtensionFromResourceFileName = exports.getNoteFileName = exports.getFilePrefix = exports.getResourceFileProperties = exports.getFileIndex = exports.normalizeFilenameString = void 0; const unique_filename_1 = __importDefault(require("unique-filename")); const sanitize_filename_1 = __importDefault(require("sanitize-filename")); const fs = __importStar(require("fs")); const moment_1 = __importDefault(require("moment")); const path = __importStar(require("path")); const mime = __importStar(require("mime-types")); const nanoid_1 = require("nanoid"); const yarle_1 = require("../yarle"); const output_format_1 = require("./../output-format"); const content_utils_1 = require("./content-utils"); const escape_string_regexp_1 = require("./escape-string-regexp"); const is_logseq_journal_1 = require("./is-logseq-journal"); const fastest_levenshtein_1 = require("fastest-levenshtein"); const applyCharacterMapSafely = (title) => { return applyCharacterMap(title).replace(/[/\\?%*:|"<>\[\]\+]/g, '-'); }; const applyCharacterMap = (title) => { let appliedTitle = title; try { for (const key of Object.keys(yarle_1.yarleOptions.replacementCharacterMap)) { const replacement = yarle_1.yarleOptions.replacementCharacterMap[key]; const regex = new RegExp((0, escape_string_regexp_1.escapeStringRegexp)(key), 'g'); appliedTitle = appliedTitle.replace(regex, replacement); } } catch (e) { console.log(e); } console.log(appliedTitle); return appliedTitle; }; const normalizeFilenameString = (title) => { // Allow setting a specific replacement character for file and resource names // Default to a retrocompatible value const normalizedTitle = (0, sanitize_filename_1.default)(applyCharacterMap(title), { replacement: yarle_1.yarleOptions.replacementChar || '_' }).replace(/[\[\]\#\^]/g, '').replace(/^\./g, ''); console.log(normalizedTitle); return normalizedTitle; ; }; exports.normalizeFilenameString = normalizeFilenameString; const getFileIndex = (dstPath, fileNamePrefix) => { const index = fs .readdirSync(dstPath) .filter(file => { // make sure we get the first copy with no count suffix or the copies whose filename changed // drop the extension to compare with filename prefix const filePrefix = file.split('.').slice(0, -1).join('.'); return filePrefix.toLowerCase().startsWith(fileNamePrefix.toLowerCase()); }) .length; return index; }; exports.getFileIndex = getFileIndex; const getResourceFileProperties = (workDir, resource) => { const UNKNOWNFILENAME = yarle_1.yarleOptions.useUniqueUnknownFileNames ? (0, unique_filename_1.default)('', 'unknown_filename') : 'unknown_filename'; let extension = (0, exports.getExtension)(resource); let fileName = UNKNOWNFILENAME; if (resource['resource-attributes'] && resource['resource-attributes']['file-name']) { const fileNamePrefix = resource['resource-attributes']['file-name'].substr(0, 50); const lastIdx = fileNamePrefix.lastIndexOf('.'); fileName = lastIdx !== -1 ? fileNamePrefix.slice(0, lastIdx) : fileNamePrefix; fileNamePrefix.includes('.') ? fileNamePrefix.split('.').slice(0, -1).join('.') : fileNamePrefix; } fileName = applyCharacterMapSafely(fileName); extension = applyCharacterMapSafely(extension); if (yarle_1.yarleOptions.sanitizeResourceNameSpaces) { fileName = fileName.replace(/ /g, yarle_1.yarleOptions.replacementChar); } if (yarle_1.yarleOptions.urlEncodeFileNamesAndLinks && yarle_1.yarleOptions.outputFormat === output_format_1.OutputFormat.ObsidianMD) { fileName = encodeURI(fileName); } const index = (0, exports.getFileIndex)(workDir, fileName); const fileNameWithIndex = index > 0 ? `${fileName}.${index}` : fileName; return { fileName: `${fileNameWithIndex}.${extension}`, extension, index, }; }; exports.getResourceFileProperties = getResourceFileProperties; const getFilePrefix = (note) => { return (0, exports.normalizeFilenameString)(note['noteName'] ? `${note['noteName'].toString()}` : 'Untitled'); }; exports.getFilePrefix = getFilePrefix; const getNoteFileName = (dstPath, note, extension = 'md') => { return `${(0, exports.getNoteName)(dstPath, note)}.${extension}`; }; exports.getNoteFileName = getNoteFileName; const getExtensionFromResourceFileName = (resource) => { if (!(resource['resource-attributes'] && resource['resource-attributes']['file-name'])) { return undefined; } const splitFileName = resource['resource-attributes']['file-name'].split('.'); return splitFileName.length > 1 ? splitFileName[splitFileName.length - 1] : undefined; }; exports.getExtensionFromResourceFileName = getExtensionFromResourceFileName; const getExtensionFromMime = (resource) => { const mimeType = resource.mime; if (!mimeType) { return undefined; } return mime.extension(mimeType); }; exports.getExtensionFromMime = getExtensionFromMime; const getExtension = (resource) => { const UNKNOWNEXTENSION = 'dat'; return (0, exports.getExtensionFromResourceFileName)(resource) || (0, exports.getExtensionFromMime)(resource) || UNKNOWNEXTENSION; }; exports.getExtension = getExtension; const getZettelKastelId = (note, dstPath) => { return (0, moment_1.default)(note['created']).format('YYYYMMDDHHmm'); }; exports.getZettelKastelId = getZettelKastelId; const getUniqueId = () => { return (0, nanoid_1.nanoid)(5); }; exports.getUniqueId = getUniqueId; const getNoteName = (dstPath, note) => { let noteName; if (yarle_1.yarleOptions.isZettelkastenNeeded || yarle_1.yarleOptions.useZettelIdAsFilename) { const zettelPrefix = (0, exports.getZettelKastelId)(note, dstPath); const nextIndex = (0, exports.getFileIndex)(dstPath, zettelPrefix); const separator = ' '; noteName = (nextIndex !== 0) ? `${zettelPrefix}.${nextIndex}` : zettelPrefix; if (!yarle_1.yarleOptions.useZettelIdAsFilename) { noteName += (0, exports.getFilePrefix)(note) !== 'Untitled' ? `${separator}${(0, exports.getFilePrefix)(note)}` : ''; } } else { const fileNamePrefix = (0, exports.getFilePrefix)(note); const nextIndex = (0, exports.getFileIndex)(dstPath, fileNamePrefix); noteName = (nextIndex === 0) ? fileNamePrefix : `${fileNamePrefix}.${nextIndex}`; } if ((0, is_logseq_journal_1.isLogseqJournal)(yarle_1.yarleOptions)) { return (0, content_utils_1.getCreationTime)(note); } return noteName; }; exports.getNoteName = getNoteName; const getNotebookName = (enexFile) => { const notebookName = (0, exports.normalizeFilenameString)(path.basename(enexFile, '.enex')); return notebookName; }; exports.getNotebookName = getNotebookName; const getClosestFileName = (text, allconvertedFiles) => { return (0, fastest_levenshtein_1.closest)(text, allconvertedFiles); }; exports.getClosestFileName = getClosestFileName; //# sourceMappingURL=filename-utils.js.map