import RE2 from "re2";
export class convertHardMutes1644010796173 {
    name = "convertHardMutes1644010796173";
    async up(queryRunner) {
        let entries = await queryRunner.query(`SELECT "userId", "mutedWords" FROM "user_profile" WHERE "userHost" IS NULL`);
        for(let i = 0; i < entries.length; i++){
            let words = entries[i].mutedWords.map((line)=>{
                if (typeof line === "string") return [];
                const regexp = line.join(" ").match(/^\/(.+)\/(.*)$/);
                if (regexp) {
                    // convert regexp's
                    try {
                        new RE2(regexp[1], regexp[2]);
                        return `/${regexp[1]}/${regexp[2]}`;
                    } catch (err) {
                        // invalid regex, ignore it
                        return [];
                    }
                } else {
                    // remove empty segments
                    return line.filter((x)=>x !== "");
                }
            })// remove empty lines
            .filter((x)=>!(Array.isArray(x) && x.length === 0));
            await queryRunner.connection.createQueryBuilder().update("user_profile").set({
                mutedWords: words
            }).where("userId = :id", {
                id: entries[i].userId
            }).execute();
        }
    }
    async down(queryRunner) {
        let entries = await queryRunner.query(`SELECT "userId", "mutedWords" FROM "user_profile"`);
        for(let i = 0; i < entries.length; i++){
            let words = entries[i].mutedWords.map((line)=>{
                if (Array.isArray(line)) {
                    return line;
                } else {
                    // do not split regex at spaces again
                    return [
                        line
                    ];
                }
            })// remove empty lines
            .filter((x)=>!(Array.isArray(x) && x.length === 0));
            await queryRunner.connection.createQueryBuilder().update("user_profile").set({
                mutedWords: words
            }).where("userId = :id", {
                id: entries[i].userId
            }).execute();
        }
    }
}
