UNPKG

ovm

Version:

OVM is a CLI application for managing Obsidian vaults.

159 lines 6.63 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createTestPlugin = exports.normalizeHelpOutput = exports.replaceVersionInfo = exports.createMockDirent = exports.destroyVault = exports.getTestCommonWithVaultPathFlags = exports.getTestCommonFlags = exports.setupVault = exports.destroyConfigMockFile = exports.getTestConfigFilePath = void 0; const fs_1 = require("fs"); const fs_extra_1 = __importDefault(require("fs-extra")); const promises_1 = __importDefault(require("fs/promises")); const os_1 = require("os"); const path_1 = __importDefault(require("path")); const index_1 = require("../services/config/index"); const constants_1 = require("./constants"); const logger_1 = require("./logger"); const getTestConfigFilePath = (vaultPath) => { if ((0, os_1.platform)() === 'win32') { return path_1.default.win32.join(vaultPath, constants_1.OVM_CONFIG_FILENAME); } return path_1.default.join(vaultPath, constants_1.OVM_CONFIG_FILENAME); }; exports.getTestConfigFilePath = getTestConfigFilePath; const destroyConfigMockFile = (path) => { const normalizedPath = path.normalize('NFC'); if (normalizedPath && (0, fs_1.existsSync)(normalizedPath)) { fs_extra_1.default.rmSync(normalizedPath, { force: true }); } }; exports.destroyConfigMockFile = destroyConfigMockFile; const setupVault = async (overrideConfig) => { const vaultName = `ovm-test-vault-${Date.now()}-${Math.floor(Math.random() * 1000)}`; const vaultPath = path_1.default.join((0, os_1.tmpdir)(), vaultName); const configFilePath = path_1.default.join(vaultPath, constants_1.OVM_CONFIG_FILENAME); const normalizedPath = path_1.default.normalize(vaultPath); if (!(0, fs_1.existsSync)(normalizedPath)) { fs_extra_1.default.mkdirpSync(normalizedPath); } const configDir = path_1.default.dirname(configFilePath); if (!(0, fs_1.existsSync)(configDir)) { fs_extra_1.default.mkdirpSync(configDir); } const obsidianDir = path_1.default.resolve(normalizedPath, '.obsidian'); if (!(0, fs_1.existsSync)(obsidianDir)) { fs_extra_1.default.mkdirpSync(obsidianDir); } const normalizedVaultCommunityPluginsPath = path_1.default.resolve(obsidianDir, 'community-plugins.json'); if (!(0, fs_1.existsSync)(normalizedVaultCommunityPluginsPath)) { fs_extra_1.default.writeFileSync(normalizedVaultCommunityPluginsPath, JSON.stringify([])); } const config = await (0, index_1.createDefaultConfig)(configFilePath, overrideConfig ?? index_1.ConfigSchema.parse({ plugins: [], sync: { files: [] } })); return { vault: { name: vaultName, path: normalizedPath }, config: { ...config, ...{ path: configFilePath } }, }; }; exports.setupVault = setupVault; const getTestCommonFlags = (configFilePath) => ({ debug: false, timestamp: false, config: configFilePath, }); exports.getTestCommonFlags = getTestCommonFlags; const getTestCommonWithVaultPathFlags = (configFilePath, vaultPath) => ({ debug: false, timestamp: false, config: configFilePath, path: vaultPath, output: 'json', }); exports.getTestCommonWithVaultPathFlags = getTestCommonWithVaultPathFlags; const destroyVault = (vaultPath) => { const normalizedPath = path_1.default.normalize(vaultPath); if (normalizedPath && (0, fs_1.existsSync)(normalizedPath)) { fs_extra_1.default.emptyDirSync(normalizedPath); promises_1.default.rmdir(normalizedPath); } const customLogsPath = path_1.default.normalize(logger_1.CUSTOM_COMMAND_LOGGER_FILE); if (customLogsPath && (0, fs_1.existsSync)(customLogsPath)) { fs_extra_1.default.rmSync(customLogsPath, { force: true }); } }; exports.destroyVault = destroyVault; const createMockDirent = (name, isDirectory) => ({ name, isDirectory: () => isDirectory, isFile: () => !isDirectory, isBlockDevice: () => false, isCharacterDevice: () => false, isSymbolicLink: () => false, isFIFO: () => false, isSocket: () => false, parentPath: '', path: '', }); exports.createMockDirent = createMockDirent; const replaceVersionInfo = (input) => { return input.replace(/ovm\/[\d.]+(?:-[\w.]+)?\s+\w+-\w+\s+node-v[\d.]+/, 'ovm/X.X.X platform-arch node-vX.X.X'); }; exports.replaceVersionInfo = replaceVersionInfo; const normalizeHelpOutput = (input) => { const normalized = (0, exports.replaceVersionInfo)(input); const lines = normalized.split('\n'); const result = []; let pendingLine = ''; for (const line of lines) { if (line.trim() === '') { if (pendingLine) { result.push(pendingLine); pendingLine = ''; } result.push(''); continue; } if (line.match(/^[A-Z]+$/)) { if (pendingLine) { result.push(pendingLine); pendingLine = ''; } result.push(line); continue; } if (line.match(/^\s+/)) { const match = line.match(/^(\s*)/); const leadingSpaces = match ? match[1].length : 0; const content = line.trim(); if (content) { const normalizedContent = content.replace(/\s+/g, ' '); if (leadingSpaces > 4 && pendingLine) { pendingLine += ` ${normalizedContent}`; } else { if (pendingLine) { result.push(pendingLine); } pendingLine = ` ${normalizedContent}`; } } continue; } if (pendingLine) { result.push(pendingLine); pendingLine = ''; } const normalizedLine = line.replace(/\s+/g, ' ').trim(); result.push(normalizedLine); } if (pendingLine) { result.push(pendingLine); } return result.join('\n'); }; exports.normalizeHelpOutput = normalizeHelpOutput; const createTestPlugin = (vaultPath, pluginId, pluginName) => { const pluginDir = path_1.default.join(vaultPath, '.obsidian', 'plugins', pluginId); (0, fs_1.mkdirSync)(pluginDir, { recursive: true }); (0, fs_1.writeFileSync)(path_1.default.join(pluginDir, 'manifest.json'), JSON.stringify({ id: pluginId, name: pluginName || pluginId })); return pluginDir; }; exports.createTestPlugin = createTestPlugin; //# sourceMappingURL=testing.js.map