youtube-likes-downloader
Version:
Download all liked videos from youtube
51 lines • 2.26 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validate = validate;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const logger_1 = require("@anmiles/logger");
const zod_tools_1 = require("@anmiles/zod-tools");
const schema_1 = require("./types/schema");
const formatTitle_1 = require("./utils/formatTitle");
const paths_1 = require("./utils/paths");
function validate(profile) {
const allFiles = {};
const outputDir = (0, paths_1.getOutputDir)(profile);
fs_1.default.ensureDir(outputDir, { create: true });
fs_1.default.recurse(outputDir, {
file: (filepath, filename) => {
let { name, ext } = path_1.default.parse(filename);
if (ext === '.json') {
name = name.replace(/\.info$/, '');
ext = `.info${ext}`;
}
const file = allFiles[name] ??= { exts: [], newName: undefined };
file.exts.push(ext);
if (ext === '.info.json') {
// TODO: fs - replace readJSON "as" with zod validation
const infoObject = fs_1.default.readJSON(filepath);
const info = (0, zod_tools_1.validate)(infoObject, schema_1.videoInfoSchema);
file.newName = (0, formatTitle_1.formatTitle)(info).toFilename();
}
},
}, { depth: 1 });
Object.entries(allFiles).forEach(([name, { exts, newName }]) => {
if (!newName) {
throw new Error(`New name cannot be defined, probably ${name}.info.json does not exist`);
}
if (name !== newName) {
(0, logger_1.warn)('Rename');
(0, logger_1.log)(`\tOld name: ${name}`);
(0, logger_1.log)(`\tNew name: ${newName}`);
for (const ext of exts) {
const filename = path_1.default.join(outputDir, name);
const newFilename = path_1.default.join(outputDir, newName);
fs_1.default.renameSync(filename + ext, newFilename + ext);
}
}
});
}
//# sourceMappingURL=validate.js.map