mirror of
https://github.com/RSSNext/Folo.git
synced 2026-10-22 08:26:43 +08:00
2131cec389
Store copy for 12 listing locales, plus the tooling that captures the apps with a demo account and renders the App Store, Google Play and Microsoft Store screenshots and the README banner. Raw captures and rendered images stay out of the repository (store-assets/.gitignore). store-assets is a private workspace package, so playwright, sharp, pathe and the other script dependencies are declared instead of resolved through hoisting, and turbo typechecks it. The lockfile only gains its importer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
// Lists the app captures each UI locale still needs for the decks:
|
|
// tsx store-assets/scripts/check-captures.ts
|
|
import { existsSync } from "node:fs"
|
|
|
|
import { join } from "pathe"
|
|
|
|
import { decks } from "../src/decks"
|
|
import { appUiLocales } from "../src/locales"
|
|
|
|
const root = join(import.meta.dirname, "..")
|
|
|
|
let incomplete = 0
|
|
for (const locale of appUiLocales) {
|
|
const missing = new Set<string>()
|
|
for (const deck of decks) {
|
|
for (const slide of deck.slides) {
|
|
const shots: [string, string][] = [
|
|
...slide.shots.map((shot): [string, string] => [deck.captureDevice, shot]),
|
|
...(slide.companion
|
|
? [[slide.companion.device, slide.companion.shot] as [string, string]]
|
|
: []),
|
|
...(slide.callouts ?? []).map((c): [string, string] => [deck.captureDevice, c.shot]),
|
|
]
|
|
for (const [device, shot] of shots) {
|
|
if (!existsSync(join(root, "captures", locale, device, `${shot}.png`))) {
|
|
missing.add(`${device}/${shot}`)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// The Google Play feature graphic shows the Android timeline.
|
|
if (!existsSync(join(root, "captures", locale, "android", "timeline.png"))) {
|
|
missing.add("android/timeline")
|
|
}
|
|
if (missing.size > 0) incomplete++
|
|
console.log(`${locale}: ${[...missing].sort().join(", ") || "complete"}`)
|
|
}
|
|
process.exitCode = incomplete > 0 ? 1 : 0
|