71 lines
1.7 KiB
JavaScript
71 lines
1.7 KiB
JavaScript
|
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();
|
||
|
}
|
||
|
}
|
||
|
}
|