66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const RE2 = require('re2');
 | 
						|
const { MigrationInterface, QueryRunner } = require("typeorm");
 | 
						|
 | 
						|
module.exports = 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();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |