ovm
Version:
OVM is a CLI application for managing Obsidian vaults.
159 lines • 6.63 kB
JavaScript
;
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