* feat(rank-tracking): allow explicit language selection * fix(rank-tracking): remove duplicate country picker and fix LocationSelect handler The modal rendered two country pickers: a stale native <select> with a broken empty onChange and the new LocationSelect combobox. The LocationSelect handler also treated its numeric argument as a DOM event (Number(e.target.value) -> NaN). Remove the dead <select> and pass the location code through directly. * feat(rank-tracking): offer the full DataForSEO SERP language list The language picker only listed the ~43 languages that happened to be a country's default, so users could not track e.g. Hindi, Chinese (Simplified), Tamil, or Urdu. Expand LANGUAGE_OPTIONS to the full set of languages the DataForSEO SERP (Google) API accepts (sourced live from /v3/serp/google/languages), dropping the deprecated 'iw' Hebrew duplicate and the redundant 'no' (Norway uses 'nb', which both SERP and Labs accept). Mismatched location+language pairs are accepted by SERP and invalid codes fail at zero cost, so the wider list adds no charged-but-failed risk. Also drop the now-unused LOCATION_OPTIONS re-export from the client shim. * docs(rank-tracking): cite DataForSEO source for the language list Note where LANGUAGE_OPTIONS comes from (/v3/serp/google/languages) and how it relates to the country list (the Labs locations_and_languages endpoint), plus the intentional deviations from the raw endpoint. * chore(knip): treat scripts/** as entry points The standalone CLI/dev scripts under scripts/ are invoked via package.json scripts (tsx/node), not imported, so knip flagged all six as unused files. Add scripts/** to knip entry so ci:check passes. (Pre-existing on main; bundled here to keep the branch's ci:check green.) * feat(rank-tracking): filter language picker to the country's supported languages Showing all 128 languages for every country was noise. Restrict the picker to the languages DataForSEO actually supports for the selected country via a new getLanguageOptions() helper, backed by a per-country map from the Labs locations_and_languages endpoint. Most countries expose only their default language; the ~20 genuinely multilingual ones (US en/es, Canada en/fr, Switzerland de/fr/it, India en/hi, etc.) list their real set. googleAdsOnly countries have no per-country language data, so they show their default only. The Language select is disabled when a country offers a single language. LANGUAGE_OPTIONS becomes the internal master list (no longer exported). --------- Co-authored-by: Ben Senescu <44480372+bensenescu@users.noreply.github.com> Co-authored-by: Ben Senescu <bensenescu@gmail.com>
29 lines
897 B
JSON
29 lines
897 B
JSON
{
|
|
"entry": [
|
|
// Detect Tanstack Start Routes
|
|
"cli-auth.ts",
|
|
"src/start.ts",
|
|
"src/server.ts",
|
|
"src/router.tsx",
|
|
"src/routes/**/*.ts",
|
|
"src/routes/**/*.tsx",
|
|
// Drizzle config (plugin disabled due to cloudflare:workers import issues)
|
|
"drizzle.config.ts",
|
|
// DB schema — exports consumed via `import * as schema` / drizzle()
|
|
"src/db/index.ts",
|
|
"src/db/app.schema.ts",
|
|
"src/db/better-auth-schema.ts",
|
|
// Standalone CLI/dev scripts, invoked via package.json scripts
|
|
"scripts/**",
|
|
],
|
|
"project": ["**/*.{js,mjs,ts,tsx}", "!src/routeTree.gen.ts", "!web/**"],
|
|
"ignore": ["drizzle-prod.config.ts"],
|
|
// Disable Drizzle plugin - it tries to load drizzle.config.ts which imports cloudflare:workers
|
|
"drizzle": false,
|
|
"ignoreDependencies": [
|
|
// Tailwindcss used via @tailwindcss/vite plugin
|
|
"tailwindcss",
|
|
"daisyui",
|
|
],
|
|
}
|