yarle-evernote-to-md
Version:
Yet Another Rope Ladder from Evernote
183 lines • 8.61 kB
JavaScript
;
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