Files
j_kedzierski/scripts/find_first_person.ts

54 lines
2.0 KiB
TypeScript

import fs from 'fs'
import path from 'path'
const snapshotPath = path.join(process.cwd(), 'scripts', 'content-snapshot.json')
const snapshot = JSON.parse(fs.readFileSync(snapshotPath, 'utf-8'))
const firstPersonRegexPL = /(^|[\s.,?!:;])(zapewniam|przeprowadzę|przeanalizuję|pomogę|pomagam|odpowiem|mnie|ze mną|moim|mój|zajmuję|działam|przygotowuję|przesyłam|wyliczam|zajmę)([\s.,?!:;]|$)/i
const firstPersonRegexDE = /(^|[\s.,?!:;])(ich|mich|mir|mein|meine|meinen|helfe|kümmere|begleite|anbiete)([\s.,?!:;]|$)/i
const matches: any[] = []
function checkObject(obj: any, contextInfo: any) {
if (Array.isArray(obj)) {
obj.forEach((item, index) => checkObject(item, { ...contextInfo, index }))
} else if (obj !== null && typeof obj === 'object') {
// Pomiń blok Bio
if (obj.blockType === 'bio') {
return
}
for (const [key, value] of Object.entries(obj)) {
if (typeof value === 'string') {
const isMatchPL = contextInfo.locale === 'pl' && firstPersonRegexPL.test(value)
const isMatchDE = contextInfo.locale === 'de' && firstPersonRegexDE.test(value)
if (isMatchPL || isMatchDE) {
matches.push({
pageSlug: contextInfo.pageSlug,
blockType: obj.blockType || 'unknown',
field: key,
locale: contextInfo.locale,
text: value
})
}
} else {
checkObject(value, { ...contextInfo, field: key })
}
}
}
}
for (const page of snapshot.pages) {
if (page.pl) checkObject(page.pl.layout, { pageSlug: page.pl.slug || 'home', locale: 'pl' })
if (page.de) checkObject(page.de.layout, { pageSlug: page.de.slug || 'home', locale: 'de' })
}
for (const [slug, data] of Object.entries(snapshot.globals)) {
const typedData = data as any;
if (typedData.pl) checkObject(typedData.pl, { pageSlug: `global:${slug}`, locale: 'pl' })
if (typedData.de) checkObject(typedData.de, { pageSlug: `global:${slug}`, locale: 'de' })
}
console.log(JSON.stringify(matches, null, 2))