style: lint

This commit is contained in:
Slinetrac
2025-11-06 12:14:30 +08:00
Unverified
parent c76d33a103
commit 1ce192dfeb
17 changed files with 285 additions and 257 deletions

View File

@@ -928,9 +928,7 @@ function loadLocales() {
try {
data[file.namespace] = JSON.parse(raw);
} catch (error) {
console.warn(
`Warning: failed to parse ${file.path}: ${error.message}`,
);
console.warn(`Warning: failed to parse ${file.path}: ${error.message}`);
data[file.namespace] = {};
}
}
@@ -983,9 +981,8 @@ function toModuleIdentifier(namespace, seen) {
]);
const base =
namespace
.replace(/[^a-zA-Z0-9_$]/g, "_")
.replace(/^[^a-zA-Z_$]+/, "") || "ns";
namespace.replace(/[^a-zA-Z0-9_$]/g, "_").replace(/^[^a-zA-Z_$]+/, "") ||
"ns";
let candidate = base;
let counter = 1;
@@ -1142,10 +1139,7 @@ function processLocale(
return {
locale: locale.name,
file:
locale.format === "single-file"
? locale.files[0].path
: locale.dir,
file: locale.format === "single-file" ? locale.files[0].path : locale.dir,
totalKeys: flattened.size,
expectedKeys: expectedTotal,
unusedKeys: unused,

View File

@@ -16,7 +16,14 @@ async function ensureDir(dirPath) {
await fs.mkdir(dirPath, { recursive: true });
}
const RESERVED = new Set(["default", "function", "var", "let", "const", "import"]);
const RESERVED = new Set([
"default",
"function",
"var",
"let",
"const",
"import",
]);
function toIdentifier(namespace, taken) {
let base = namespace
@@ -61,11 +68,7 @@ async function splitLocaleFile(filePath, lang) {
const taken = new Set();
for (const [namespace, value] of namespaces) {
if (
typeof value !== "object" ||
value === null ||
Array.isArray(value)
) {
if (typeof value !== "object" || value === null || Array.isArray(value)) {
throw new Error(
`Locale ${lang} namespace "${namespace}" must be an object`,
);

View File

@@ -245,4 +245,4 @@ iter_on_empty_collections = "deny"
# fallible_impl_from = "deny" // 过于激进,暂时不开启
equatable_if_let = "deny"
collection_is_never_read = "deny"
branches_sharing_code = "deny"
branches_sharing_code = "deny"

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -1,27 +1,27 @@
import shared from "./shared.json";
import connections from "./connections.json";
import home from "./home.json";
import layout from "./layout.json";
import logs from "./logs.json";
import profiles from "./profiles.json";
import proxies from "./proxies.json";
import connections from "./connections.json";
import tests from "./tests.json";
import logs from "./logs.json";
import rules from "./rules.json";
import home from "./home.json";
import unlock from "./unlock.json";
import settings from "./settings.json";
import layout from "./layout.json";
import shared from "./shared.json";
import tests from "./tests.json";
import unlock from "./unlock.json";
const resources = {
"shared": shared,
"profiles": profiles,
"proxies": proxies,
"connections": connections,
"tests": tests,
"logs": logs,
"rules": rules,
"home": home,
"unlock": unlock,
"settings": settings,
"layout": layout,
shared: shared,
profiles: profiles,
proxies: proxies,
connections: connections,
tests: tests,
logs: logs,
rules: rules,
home: home,
unlock: unlock,
settings: settings,
layout: layout,
};
export default resources;

View File

@@ -17,6 +17,24 @@ export const supportedLanguages = [
"zhtw",
];
const FALLBACK_LANGUAGE = "zh";
type LocaleModule = {
default: Record<string, unknown>;
};
const localeModules = import.meta.glob<LocaleModule>("@/locales/*/index.ts");
const localeLoaders = Object.entries(localeModules).reduce<
Record<string, () => Promise<LocaleModule>>
>((acc, [path, loader]) => {
const match = path.match(/[/\\]locales[/\\]([^/\\]+)[/\\]index\.ts$/);
if (match) {
acc[match[1]] = loader;
}
return acc;
}, {});
export const languages: Record<string, any> = supportedLanguages.reduce(
(acc, lang) => {
acc[lang] = {};
@@ -27,14 +45,27 @@ export const languages: Record<string, any> = supportedLanguages.reduce(
export const loadLanguage = async (language: string) => {
try {
const module = await import(`@/locales/${language}/index.ts`);
const loader = localeLoaders[language];
if (!loader) {
throw new Error(`Locale loader not found for language "${language}"`);
}
const module = await loader();
return module.default;
} catch (error) {
console.warn(
`Failed to load language ${language}, fallback to zh, ${error}`,
);
const fallback = await import("@/locales/zh/index.ts");
return fallback.default;
if (language !== FALLBACK_LANGUAGE) {
console.warn(
`Failed to load language ${language}, fallback to ${FALLBACK_LANGUAGE}, ${error}`,
);
const fallbackLoader = localeLoaders[FALLBACK_LANGUAGE];
if (!fallbackLoader) {
throw new Error(
`Fallback language "${FALLBACK_LANGUAGE}" resources are missing.`,
);
}
const fallback = await fallbackLoader();
return fallback.default;
}
throw error;
}
};