@localeguard/core 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/check.d.ts +1 -1
- package/dist/src/check.d.ts.map +1 -1
- package/dist/src/check.js +8 -2
- package/dist/src/check.js.map +1 -1
- package/dist/src/flatten.d.ts +9 -1
- package/dist/src/flatten.d.ts.map +1 -1
- package/dist/src/flatten.js +9 -5
- package/dist/src/flatten.js.map +1 -1
- package/dist/src/framework.d.ts +18 -0
- package/dist/src/framework.d.ts.map +1 -0
- package/dist/src/framework.js +65 -0
- package/dist/src/framework.js.map +1 -0
- package/dist/src/glob.d.ts +20 -0
- package/dist/src/glob.d.ts.map +1 -0
- package/dist/src/glob.js +133 -0
- package/dist/src/glob.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/key-usage.d.ts +23 -0
- package/dist/src/key-usage.d.ts.map +1 -0
- package/dist/src/key-usage.js +85 -0
- package/dist/src/key-usage.js.map +1 -0
- package/dist/src/locale-parser/load.d.ts +3 -1
- package/dist/src/locale-parser/load.d.ts.map +1 -1
- package/dist/src/locale-parser/load.js +4 -1
- package/dist/src/locale-parser/load.js.map +1 -1
- package/dist/src/reporters/markdown.js +4 -0
- package/dist/src/reporters/markdown.js.map +1 -1
- package/dist/src/reporters/sarif.d.ts.map +1 -1
- package/dist/src/reporters/sarif.js +3 -1
- package/dist/src/reporters/sarif.js.map +1 -1
- package/dist/src/reporters/text.js +4 -0
- package/dist/src/reporters/text.js.map +1 -1
- package/dist/src/types.d.ts +26 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +8 -0
- package/dist/src/types.js.map +1 -1
- package/package.json +1 -1
package/dist/src/check.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export interface RunCheckOptions {
|
|
|
15
15
|
/** Absolute project root; reported file paths are relative to this. */
|
|
16
16
|
rootDir: string;
|
|
17
17
|
}
|
|
18
|
-
export declare function runCheck(
|
|
18
|
+
export declare function runCheck(rawConfig: LocaleGuardConfig, opts: RunCheckOptions): CheckResult;
|
|
19
19
|
export interface SummarizeParams {
|
|
20
20
|
sourceLocale: string;
|
|
21
21
|
sourceKeyCount: number;
|
package/dist/src/check.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/check.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/check.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,KAAK,EACL,SAAS,EACT,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,qBAAa,gBAAiB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,GAAG,WAAW,CAqGzF;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,eAAe,GAAG,UAAU,CAuCpF;AAID,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAYhD"}
|
package/dist/src/check.js
CHANGED
|
@@ -13,6 +13,7 @@ exports.LocaleGuardError = void 0;
|
|
|
13
13
|
exports.runCheck = runCheck;
|
|
14
14
|
exports.summarizeIssues = summarizeIssues;
|
|
15
15
|
exports.sortIssues = sortIssues;
|
|
16
|
+
const framework_1 = require("./framework");
|
|
16
17
|
const compare_1 = require("./key-comparator/compare");
|
|
17
18
|
const load_1 = require("./locale-parser/load");
|
|
18
19
|
const placeholder_1 = require("./placeholder-validator/placeholder");
|
|
@@ -24,10 +25,15 @@ class LocaleGuardError extends Error {
|
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
exports.LocaleGuardError = LocaleGuardError;
|
|
27
|
-
function runCheck(
|
|
28
|
+
function runCheck(rawConfig, opts) {
|
|
29
|
+
const config = (0, framework_1.applyFramework)(rawConfig);
|
|
28
30
|
const issues = [];
|
|
29
31
|
const missingLocales = [];
|
|
30
|
-
const loadOpts = {
|
|
32
|
+
const loadOpts = {
|
|
33
|
+
rootDir: opts.rootDir,
|
|
34
|
+
localesPath: config.localesPath,
|
|
35
|
+
messageFormat: config.messageFormat,
|
|
36
|
+
};
|
|
31
37
|
const source = (0, load_1.loadLocale)(config.sourceLocale, loadOpts);
|
|
32
38
|
if (!source.found) {
|
|
33
39
|
throw new LocaleGuardError(`Source locale "${config.sourceLocale}" not found under "${config.localesPath}". ` +
|
package/dist/src/check.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/check.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/check.ts"],"names":[],"mappings":"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"}
|
package/dist/src/flatten.d.ts
CHANGED
|
@@ -6,5 +6,13 @@
|
|
|
6
6
|
* objects and arrays are recursed into.
|
|
7
7
|
*/
|
|
8
8
|
import type { JsonPrimitive, JsonValue } from "./types";
|
|
9
|
-
export
|
|
9
|
+
export interface FlattenOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Treat FormatJS/react-intl message descriptors — objects with a string
|
|
12
|
+
* `defaultMessage` — as message leaves (key = path, value = `defaultMessage`)
|
|
13
|
+
* rather than recursing into them.
|
|
14
|
+
*/
|
|
15
|
+
messageDescriptors?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function flatten(value: JsonValue, options?: FlattenOptions): Map<string, JsonPrimitive>;
|
|
10
18
|
//# sourceMappingURL=flatten.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../src/flatten.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAExD,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../src/flatten.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,cAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAIlG"}
|
package/dist/src/flatten.js
CHANGED
|
@@ -8,21 +8,25 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.flatten = flatten;
|
|
11
|
-
function flatten(value,
|
|
11
|
+
function flatten(value, options = {}) {
|
|
12
12
|
const out = new Map();
|
|
13
|
-
walk(value,
|
|
13
|
+
walk(value, "", out, options);
|
|
14
14
|
return out;
|
|
15
15
|
}
|
|
16
|
-
function walk(value, path, out) {
|
|
16
|
+
function walk(value, path, out, options) {
|
|
17
17
|
if (value !== null && typeof value === "object") {
|
|
18
18
|
if (Array.isArray(value)) {
|
|
19
19
|
value.forEach((item, index) => {
|
|
20
|
-
walk(item, path ? `${path}.${index}` : String(index), out);
|
|
20
|
+
walk(item, path ? `${path}.${index}` : String(index), out, options);
|
|
21
21
|
});
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
+
if (options.messageDescriptors && typeof value.defaultMessage === "string") {
|
|
25
|
+
out.set(path, value.defaultMessage);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
24
28
|
for (const [key, child] of Object.entries(value)) {
|
|
25
|
-
walk(child, path ? `${path}.${key}` : key, out);
|
|
29
|
+
walk(child, path ? `${path}.${key}` : key, out, options);
|
|
26
30
|
}
|
|
27
31
|
return;
|
|
28
32
|
}
|
package/dist/src/flatten.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flatten.js","sourceRoot":"","sources":["../../src/flatten.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"flatten.js","sourceRoot":"","sources":["../../src/flatten.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAaH,0BAIC;AAJD,SAAgB,OAAO,CAAC,KAAgB,EAAE,UAA0B,EAAE;IACpE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,IAAI,CACX,KAAgB,EAChB,IAAY,EACZ,GAA+B,EAC/B,OAAuB;IAEvB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC5B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACtE,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,kBAAkB,IAAI,OAAQ,KAAmC,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YAC1G,GAAG,CAAC,GAAG,CAAC,IAAI,EAAG,KAAmC,CAAC,cAAwB,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO;IACT,CAAC;IACD,0CAA0C;IAC1C,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework presets. Selecting a `framework` in the config fills in sensible
|
|
3
|
+
* defaults for translation functions/components and the locale message format,
|
|
4
|
+
* which a user can still override explicitly.
|
|
5
|
+
*/
|
|
6
|
+
import type { Framework, LocaleGuardConfig, MessageFormat } from "./types";
|
|
7
|
+
export interface FrameworkPreset {
|
|
8
|
+
translationFunctions: string[];
|
|
9
|
+
translationComponents: string[];
|
|
10
|
+
messageFormat: MessageFormat;
|
|
11
|
+
}
|
|
12
|
+
export declare const FRAMEWORK_PRESETS: Record<Framework, FrameworkPreset>;
|
|
13
|
+
/**
|
|
14
|
+
* Return a config with framework-preset defaults filled in for any fields the
|
|
15
|
+
* user did not set explicitly. Idempotent; a no-op when `framework` is unset.
|
|
16
|
+
*/
|
|
17
|
+
export declare function applyFramework(config: LocaleGuardConfig): LocaleGuardConfig;
|
|
18
|
+
//# sourceMappingURL=framework.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../src/framework.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,eAAe,CAuChE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAS3E"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Framework presets. Selecting a `framework` in the config fills in sensible
|
|
4
|
+
* defaults for translation functions/components and the locale message format,
|
|
5
|
+
* which a user can still override explicitly.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.FRAMEWORK_PRESETS = void 0;
|
|
9
|
+
exports.applyFramework = applyFramework;
|
|
10
|
+
exports.FRAMEWORK_PRESETS = {
|
|
11
|
+
"react-i18next": {
|
|
12
|
+
translationFunctions: ["t", "i18n.t"],
|
|
13
|
+
translationComponents: ["Trans"],
|
|
14
|
+
messageFormat: "plain",
|
|
15
|
+
},
|
|
16
|
+
"react-intl": {
|
|
17
|
+
// FormatJS: intl.formatMessage(...) and <FormattedMessage> / <FormattedHTMLMessage>.
|
|
18
|
+
translationFunctions: ["formatMessage", "intl.formatMessage", "$t"],
|
|
19
|
+
translationComponents: ["FormattedMessage", "FormattedHTMLMessage", "Trans"],
|
|
20
|
+
messageFormat: "icu-descriptor",
|
|
21
|
+
},
|
|
22
|
+
"next-intl": {
|
|
23
|
+
// App Router next-intl: useTranslations()/getTranslations() -> t(), ICU {var}
|
|
24
|
+
// syntax, plain nested-namespace messages (messages/{locale}.json). It has no
|
|
25
|
+
// <Trans>-style wrapper component. (For Pages Router next-i18next, use the
|
|
26
|
+
// "react-i18next" preset — it is react-i18next under the hood.)
|
|
27
|
+
translationFunctions: ["t", "useTranslations", "getTranslations"],
|
|
28
|
+
translationComponents: [],
|
|
29
|
+
messageFormat: "plain",
|
|
30
|
+
},
|
|
31
|
+
"vue-i18n": {
|
|
32
|
+
// Vue I18n: t()/$t()/tc(), <i18n-t> component, plain nested JSON messages,
|
|
33
|
+
// single-brace {var} interpolation (and "a | b | c" pluralization, which is
|
|
34
|
+
// plain text to the parity check). NOTE: hardcoded-text detection in .vue
|
|
35
|
+
// <template> blocks is not yet supported — only locale-file checks apply.
|
|
36
|
+
translationFunctions: ["t", "$t", "tc", "$tc"],
|
|
37
|
+
translationComponents: ["i18n-t", "I18nT"],
|
|
38
|
+
messageFormat: "plain",
|
|
39
|
+
},
|
|
40
|
+
"ngx-translate": {
|
|
41
|
+
// Angular ngx-translate: TranslateService.instant/get(), `translate` pipe and
|
|
42
|
+
// directive, plain nested JSON (assets/i18n/{lang}.json), {{var}} interpolation.
|
|
43
|
+
// Template hardcoded-text detection is out of scope. (For *native* Angular
|
|
44
|
+
// i18n, which uses XLIFF/XMB files, see the roadmap.)
|
|
45
|
+
translationFunctions: ["instant", "get", "stream", "translate"],
|
|
46
|
+
translationComponents: [],
|
|
47
|
+
messageFormat: "plain",
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Return a config with framework-preset defaults filled in for any fields the
|
|
52
|
+
* user did not set explicitly. Idempotent; a no-op when `framework` is unset.
|
|
53
|
+
*/
|
|
54
|
+
function applyFramework(config) {
|
|
55
|
+
if (!config.framework)
|
|
56
|
+
return config;
|
|
57
|
+
const preset = exports.FRAMEWORK_PRESETS[config.framework];
|
|
58
|
+
return {
|
|
59
|
+
...config,
|
|
60
|
+
translationFunctions: config.translationFunctions ?? preset.translationFunctions,
|
|
61
|
+
translationComponents: config.translationComponents ?? preset.translationComponents,
|
|
62
|
+
messageFormat: config.messageFormat ?? preset.messageFormat,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=framework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../../src/framework.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAuDH,wCASC;AAtDY,QAAA,iBAAiB,GAAuC;IACnE,eAAe,EAAE;QACf,oBAAoB,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC;QACrC,qBAAqB,EAAE,CAAC,OAAO,CAAC;QAChC,aAAa,EAAE,OAAO;KACvB;IACD,YAAY,EAAE;QACZ,qFAAqF;QACrF,oBAAoB,EAAE,CAAC,eAAe,EAAE,oBAAoB,EAAE,IAAI,CAAC;QACnE,qBAAqB,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,OAAO,CAAC;QAC5E,aAAa,EAAE,gBAAgB;KAChC;IACD,WAAW,EAAE;QACX,8EAA8E;QAC9E,8EAA8E;QAC9E,2EAA2E;QAC3E,gEAAgE;QAChE,oBAAoB,EAAE,CAAC,GAAG,EAAE,iBAAiB,EAAE,iBAAiB,CAAC;QACjE,qBAAqB,EAAE,EAAE;QACzB,aAAa,EAAE,OAAO;KACvB;IACD,UAAU,EAAE;QACV,2EAA2E;QAC3E,4EAA4E;QAC5E,0EAA0E;QAC1E,0EAA0E;QAC1E,oBAAoB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;QAC9C,qBAAqB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC1C,aAAa,EAAE,OAAO;KACvB;IACD,eAAe,EAAE;QACf,8EAA8E;QAC9E,iFAAiF;QACjF,2EAA2E;QAC3E,sDAAsD;QACtD,oBAAoB,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC;QAC/D,qBAAqB,EAAE,EAAE;QACzB,aAAa,EAAE,OAAO;KACvB;CACF,CAAC;AAEF;;;GAGG;AACH,SAAgB,cAAc,CAAC,MAAyB;IACtD,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC;IACrC,MAAM,MAAM,GAAG,yBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,OAAO;QACL,GAAG,MAAM;QACT,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,oBAAoB;QAChF,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,MAAM,CAAC,qBAAqB;QACnF,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa;KAC5D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal glob-based file discovery (zero dependencies).
|
|
3
|
+
*
|
|
4
|
+
* Supports the subset of glob syntax LocaleGuard configs use:
|
|
5
|
+
* - `**` matches any number of path segments
|
|
6
|
+
* - `*` matches anything except a path separator
|
|
7
|
+
* - `?` matches a single non-separator character
|
|
8
|
+
* - `{a,b}` matches any of the comma-separated alternatives
|
|
9
|
+
*
|
|
10
|
+
* Paths are matched in POSIX form relative to the root directory.
|
|
11
|
+
*/
|
|
12
|
+
export declare function globToRegExp(glob: string): RegExp;
|
|
13
|
+
export interface FindFilesOptions {
|
|
14
|
+
rootDir: string;
|
|
15
|
+
include: string[];
|
|
16
|
+
ignore?: string[];
|
|
17
|
+
}
|
|
18
|
+
/** Return absolute paths of files under `rootDir` matching the patterns. */
|
|
19
|
+
export declare function findFiles(opts: FindFilesOptions): string[];
|
|
20
|
+
//# sourceMappingURL=glob.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAsCjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE,CA6B1D"}
|
package/dist/src/glob.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal glob-based file discovery (zero dependencies).
|
|
4
|
+
*
|
|
5
|
+
* Supports the subset of glob syntax LocaleGuard configs use:
|
|
6
|
+
* - `**` matches any number of path segments
|
|
7
|
+
* - `*` matches anything except a path separator
|
|
8
|
+
* - `?` matches a single non-separator character
|
|
9
|
+
* - `{a,b}` matches any of the comma-separated alternatives
|
|
10
|
+
*
|
|
11
|
+
* Paths are matched in POSIX form relative to the root directory.
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.globToRegExp = globToRegExp;
|
|
48
|
+
exports.findFiles = findFiles;
|
|
49
|
+
const fs = __importStar(require("node:fs"));
|
|
50
|
+
const path = __importStar(require("node:path"));
|
|
51
|
+
const ALWAYS_SKIP = new Set(["node_modules", ".git", "dist", "build", "coverage"]);
|
|
52
|
+
function escapeLiteral(text) {
|
|
53
|
+
return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
54
|
+
}
|
|
55
|
+
function globToRegExp(glob) {
|
|
56
|
+
let re = "";
|
|
57
|
+
let i = 0;
|
|
58
|
+
while (i < glob.length) {
|
|
59
|
+
const c = glob[i];
|
|
60
|
+
if (c === "*") {
|
|
61
|
+
if (glob[i + 1] === "*") {
|
|
62
|
+
if (glob[i + 2] === "/") {
|
|
63
|
+
re += "(?:[^/]+/)*"; // **/ — zero or more segments
|
|
64
|
+
i += 3;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
re += ".*"; // ** — anything, including separators
|
|
68
|
+
i += 2;
|
|
69
|
+
}
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
re += "[^/]*";
|
|
73
|
+
i += 1;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (c === "?") {
|
|
77
|
+
re += "[^/]";
|
|
78
|
+
i += 1;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (c === "{") {
|
|
82
|
+
const end = glob.indexOf("}", i);
|
|
83
|
+
if (end !== -1) {
|
|
84
|
+
const alts = glob.slice(i + 1, end).split(",").map(escapeLiteral);
|
|
85
|
+
re += `(?:${alts.join("|")})`;
|
|
86
|
+
i = end + 1;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
re += escapeLiteral(c);
|
|
91
|
+
i += 1;
|
|
92
|
+
}
|
|
93
|
+
return new RegExp(`^${re}$`);
|
|
94
|
+
}
|
|
95
|
+
/** Return absolute paths of files under `rootDir` matching the patterns. */
|
|
96
|
+
function findFiles(opts) {
|
|
97
|
+
const includeRe = opts.include.map(globToRegExp);
|
|
98
|
+
const ignoreRe = (opts.ignore ?? []).map(globToRegExp);
|
|
99
|
+
const results = [];
|
|
100
|
+
const walk = (dir) => {
|
|
101
|
+
let entries;
|
|
102
|
+
try {
|
|
103
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
for (const entry of entries) {
|
|
109
|
+
const abs = path.join(dir, entry.name);
|
|
110
|
+
const rel = toPosix(path.relative(opts.rootDir, abs));
|
|
111
|
+
if (entry.isDirectory()) {
|
|
112
|
+
if (ALWAYS_SKIP.has(entry.name))
|
|
113
|
+
continue;
|
|
114
|
+
if (ignoreRe.some((re) => re.test(rel)))
|
|
115
|
+
continue;
|
|
116
|
+
walk(abs);
|
|
117
|
+
}
|
|
118
|
+
else if (entry.isFile()) {
|
|
119
|
+
if (ignoreRe.some((re) => re.test(rel)))
|
|
120
|
+
continue;
|
|
121
|
+
if (includeRe.some((re) => re.test(rel)))
|
|
122
|
+
results.push(abs);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
walk(opts.rootDir);
|
|
127
|
+
results.sort();
|
|
128
|
+
return results;
|
|
129
|
+
}
|
|
130
|
+
function toPosix(p) {
|
|
131
|
+
return p.split(path.sep).join("/");
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=glob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/glob.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWH,oCAsCC;AASD,8BA6BC;AArFD,4CAA8B;AAC9B,gDAAkC;AAElC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAEnF,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACxB,EAAE,IAAI,aAAa,CAAC,CAAC,8BAA8B;oBACnD,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;qBAAM,CAAC;oBACN,EAAE,IAAI,IAAI,CAAC,CAAC,sCAAsC;oBAClD,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;gBACD,SAAS;YACX,CAAC;YACD,EAAE,IAAI,OAAO,CAAC;YACd,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,EAAE,IAAI,MAAM,CAAC;YACb,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAClE,EAAE,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC9B,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBACZ,SAAS;YACX,CAAC;QACH,CAAC;QACD,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC;AAQD,4EAA4E;AAC5E,SAAgB,SAAS,CAAC,IAAsB;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC1C,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAAE,SAAS;gBAClD,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAAE,SAAS;gBAClD,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -2,11 +2,18 @@
|
|
|
2
2
|
* @localeguard/core — public API.
|
|
3
3
|
*/
|
|
4
4
|
export * from "./types";
|
|
5
|
+
export { FRAMEWORK_PRESETS, applyFramework } from "./framework";
|
|
6
|
+
export type { FrameworkPreset } from "./framework";
|
|
5
7
|
export { parseJson, JsonParseError } from "./json/parse";
|
|
6
8
|
export type { ParsedJson } from "./json/parse";
|
|
7
9
|
export { flatten } from "./flatten";
|
|
10
|
+
export type { FlattenOptions } from "./flatten";
|
|
11
|
+
export { findFiles, globToRegExp } from "./glob";
|
|
12
|
+
export type { FindFilesOptions } from "./glob";
|
|
8
13
|
export { compareKeys } from "./key-comparator/compare";
|
|
9
14
|
export type { KeyDiff } from "./key-comparator/compare";
|
|
15
|
+
export { checkKeyUsage } from "./key-usage";
|
|
16
|
+
export type { KeyUsageOptions } from "./key-usage";
|
|
10
17
|
export { extractPlaceholders, comparePlaceholders, } from "./placeholder-validator/placeholder";
|
|
11
18
|
export type { PlaceholderDiff } from "./placeholder-validator/placeholder";
|
|
12
19
|
export { loadLocale } from "./locale-parser/load";
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAClF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAClF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -17,15 +17,23 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
17
17
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.formatSarif = exports.formatMarkdown = exports.formatJson = exports.formatText = exports.LocaleGuardError = exports.sortIssues = exports.summarizeIssues = exports.runCheck = exports.loadLocale = exports.comparePlaceholders = exports.extractPlaceholders = exports.compareKeys = exports.flatten = exports.JsonParseError = exports.parseJson = void 0;
|
|
20
|
+
exports.formatSarif = exports.formatMarkdown = exports.formatJson = exports.formatText = exports.LocaleGuardError = exports.sortIssues = exports.summarizeIssues = exports.runCheck = exports.loadLocale = exports.comparePlaceholders = exports.extractPlaceholders = exports.checkKeyUsage = exports.compareKeys = exports.globToRegExp = exports.findFiles = exports.flatten = exports.JsonParseError = exports.parseJson = exports.applyFramework = exports.FRAMEWORK_PRESETS = void 0;
|
|
21
21
|
__exportStar(require("./types"), exports);
|
|
22
|
+
var framework_1 = require("./framework");
|
|
23
|
+
Object.defineProperty(exports, "FRAMEWORK_PRESETS", { enumerable: true, get: function () { return framework_1.FRAMEWORK_PRESETS; } });
|
|
24
|
+
Object.defineProperty(exports, "applyFramework", { enumerable: true, get: function () { return framework_1.applyFramework; } });
|
|
22
25
|
var parse_1 = require("./json/parse");
|
|
23
26
|
Object.defineProperty(exports, "parseJson", { enumerable: true, get: function () { return parse_1.parseJson; } });
|
|
24
27
|
Object.defineProperty(exports, "JsonParseError", { enumerable: true, get: function () { return parse_1.JsonParseError; } });
|
|
25
28
|
var flatten_1 = require("./flatten");
|
|
26
29
|
Object.defineProperty(exports, "flatten", { enumerable: true, get: function () { return flatten_1.flatten; } });
|
|
30
|
+
var glob_1 = require("./glob");
|
|
31
|
+
Object.defineProperty(exports, "findFiles", { enumerable: true, get: function () { return glob_1.findFiles; } });
|
|
32
|
+
Object.defineProperty(exports, "globToRegExp", { enumerable: true, get: function () { return glob_1.globToRegExp; } });
|
|
27
33
|
var compare_1 = require("./key-comparator/compare");
|
|
28
34
|
Object.defineProperty(exports, "compareKeys", { enumerable: true, get: function () { return compare_1.compareKeys; } });
|
|
35
|
+
var key_usage_1 = require("./key-usage");
|
|
36
|
+
Object.defineProperty(exports, "checkKeyUsage", { enumerable: true, get: function () { return key_usage_1.checkKeyUsage; } });
|
|
29
37
|
var placeholder_1 = require("./placeholder-validator/placeholder");
|
|
30
38
|
Object.defineProperty(exports, "extractPlaceholders", { enumerable: true, get: function () { return placeholder_1.extractPlaceholders; } });
|
|
31
39
|
Object.defineProperty(exports, "comparePlaceholders", { enumerable: true, get: function () { return placeholder_1.comparePlaceholders; } });
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,sCAAyD;AAAhD,kGAAA,SAAS,OAAA;AAAE,uGAAA,cAAc,OAAA;AAElC,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,yCAAgE;AAAvD,8GAAA,iBAAiB,OAAA;AAAE,2GAAA,cAAc,OAAA;AAE1C,sCAAyD;AAAhD,kGAAA,SAAS,OAAA;AAAE,uGAAA,cAAc,OAAA;AAElC,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAEhB,+BAAiD;AAAxC,iGAAA,SAAS,OAAA;AAAE,oGAAA,YAAY,OAAA;AAEhC,oDAAuD;AAA9C,sGAAA,WAAW,OAAA;AAEpB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAEtB,mEAG6C;AAF3C,kHAAA,mBAAmB,OAAA;AACnB,kHAAA,mBAAmB,OAAA;AAGrB,6CAAkD;AAAzC,kGAAA,UAAU,OAAA;AAEnB,iCAAkF;AAAzE,iGAAA,QAAQ,OAAA;AAAE,wGAAA,eAAe,OAAA;AAAE,mGAAA,UAAU,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AAEhE,yCAA8C;AAArC,kGAAA,UAAU,OAAA;AAEnB,yCAA8C;AAArC,kGAAA,UAAU,OAAA;AACnB,iDAAsD;AAA7C,0GAAA,cAAc,OAAA;AAEvB,2CAAgD;AAAvC,oGAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compare translation-key references found in source code against the source
|
|
3
|
+
* locale's keys.
|
|
4
|
+
*
|
|
5
|
+
* - `undefined-key`: a literal key used in code that is missing from the
|
|
6
|
+
* source locale (a real defect — it renders the raw key).
|
|
7
|
+
* - `unused-key`: a key defined in the locale but never referenced in code
|
|
8
|
+
* (opt-in; skipped when dynamic key usage is detected, since those keys
|
|
9
|
+
* cannot be resolved statically).
|
|
10
|
+
*
|
|
11
|
+
* Matching is deliberately conservative to keep false positives low — see
|
|
12
|
+
* `matchKey` for how namespaces (next-intl `useTranslations`, react-i18next
|
|
13
|
+
* `ns:key`, and default-namespace directory layouts) are resolved.
|
|
14
|
+
*/
|
|
15
|
+
import type { Issue, KeyReference, LocaleEntry } from "./types";
|
|
16
|
+
export interface KeyUsageOptions {
|
|
17
|
+
/** Report keys defined in the locale but never referenced. */
|
|
18
|
+
unusedKeys?: boolean;
|
|
19
|
+
/** True when at least one dynamic (non-literal) key usage was seen. */
|
|
20
|
+
hasDynamicKeys?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function checkKeyUsage(sourceEntries: Map<string, LocaleEntry>, references: KeyReference[], options?: KeyUsageOptions): Issue[];
|
|
23
|
+
//# sourceMappingURL=key-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-usage.d.ts","sourceRoot":"","sources":["../../src/key-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAC3B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACvC,UAAU,EAAE,YAAY,EAAE,EAC1B,OAAO,GAAE,eAAoB,GAC5B,KAAK,EAAE,CAoDT"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Compare translation-key references found in source code against the source
|
|
4
|
+
* locale's keys.
|
|
5
|
+
*
|
|
6
|
+
* - `undefined-key`: a literal key used in code that is missing from the
|
|
7
|
+
* source locale (a real defect — it renders the raw key).
|
|
8
|
+
* - `unused-key`: a key defined in the locale but never referenced in code
|
|
9
|
+
* (opt-in; skipped when dynamic key usage is detected, since those keys
|
|
10
|
+
* cannot be resolved statically).
|
|
11
|
+
*
|
|
12
|
+
* Matching is deliberately conservative to keep false positives low — see
|
|
13
|
+
* `matchKey` for how namespaces (next-intl `useTranslations`, react-i18next
|
|
14
|
+
* `ns:key`, and default-namespace directory layouts) are resolved.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.checkKeyUsage = checkKeyUsage;
|
|
18
|
+
const types_1 = require("./types");
|
|
19
|
+
function checkKeyUsage(sourceEntries, references, options = {}) {
|
|
20
|
+
const issues = [];
|
|
21
|
+
const sourceKeys = new Set(sourceEntries.keys());
|
|
22
|
+
// Map of the part after a "namespace:" prefix back to the full key, so a bare
|
|
23
|
+
// reference can resolve to a namespaced key without knowing the namespace.
|
|
24
|
+
const bySuffix = new Map();
|
|
25
|
+
for (const key of sourceKeys) {
|
|
26
|
+
const colon = key.indexOf(":");
|
|
27
|
+
if (colon !== -1)
|
|
28
|
+
bySuffix.set(key.slice(colon + 1), key);
|
|
29
|
+
}
|
|
30
|
+
const referenced = new Set();
|
|
31
|
+
for (const ref of references) {
|
|
32
|
+
const matched = matchKey(ref, sourceKeys, bySuffix);
|
|
33
|
+
if (matched) {
|
|
34
|
+
referenced.add(matched);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (!isSpecific(ref))
|
|
38
|
+
continue; // too ambiguous to flag safely
|
|
39
|
+
const resolved = ref.namespace ? `${ref.namespace}.${ref.key}` : ref.key;
|
|
40
|
+
issues.push({
|
|
41
|
+
type: "undefined-key",
|
|
42
|
+
severity: types_1.SEVERITY_BY_TYPE["undefined-key"],
|
|
43
|
+
key: resolved,
|
|
44
|
+
file: ref.file,
|
|
45
|
+
line: ref.line,
|
|
46
|
+
message: `Translation key "${resolved}" is used in code but not defined in the source locale.`,
|
|
47
|
+
suggestion: "Add the key to the source locale, or fix the typo in the code.",
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Unused keys: opt-in, and only meaningful when we actually collected
|
|
51
|
+
// references and saw no dynamic usage that could hide a key.
|
|
52
|
+
if (options.unusedKeys && !options.hasDynamicKeys && references.length > 0) {
|
|
53
|
+
for (const [key, entry] of sourceEntries) {
|
|
54
|
+
if (referenced.has(key))
|
|
55
|
+
continue;
|
|
56
|
+
issues.push({
|
|
57
|
+
type: "unused-key",
|
|
58
|
+
severity: types_1.SEVERITY_BY_TYPE["unused-key"],
|
|
59
|
+
key,
|
|
60
|
+
file: entry.file,
|
|
61
|
+
line: entry.line,
|
|
62
|
+
message: `Key "${key}" is defined in the source locale but never referenced in code.`,
|
|
63
|
+
suggestion: "Remove it if it is dead, or confirm it is used via a dynamic key.",
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return issues;
|
|
68
|
+
}
|
|
69
|
+
function matchKey(ref, sourceKeys, bySuffix) {
|
|
70
|
+
const candidates = [ref.key];
|
|
71
|
+
if (ref.namespace) {
|
|
72
|
+
candidates.push(`${ref.namespace}.${ref.key}`, `${ref.namespace}:${ref.key}`);
|
|
73
|
+
}
|
|
74
|
+
for (const candidate of candidates) {
|
|
75
|
+
if (sourceKeys.has(candidate))
|
|
76
|
+
return candidate;
|
|
77
|
+
}
|
|
78
|
+
// Default/unspecified namespace: match a "namespace:key" entry by its key part.
|
|
79
|
+
return bySuffix.get(ref.key) ?? null;
|
|
80
|
+
}
|
|
81
|
+
/** Only flag references specific enough to be confident about (avoid noise). */
|
|
82
|
+
function isSpecific(ref) {
|
|
83
|
+
return ref.key.includes(".") || ref.key.includes(":") || ref.namespace != null;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=key-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-usage.js","sourceRoot":"","sources":["../../src/key-usage.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;AAYH,sCAwDC;AAlED,mCAA2C;AAU3C,SAAgB,aAAa,CAC3B,aAAuC,EACvC,UAA0B,EAC1B,UAA2B,EAAE;IAE7B,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAEjD,8EAA8E;IAC9E,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,+BAA+B;QAE/D,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,wBAAgB,CAAC,eAAe,CAAC;YAC3C,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,oBAAoB,QAAQ,yDAAyD;YAC9F,UAAU,EAAE,gEAAgE;SAC7E,CAAC,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,6DAA6D;IAC7D,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;YACzC,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,wBAAgB,CAAC,YAAY,CAAC;gBACxC,GAAG;gBACH,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,QAAQ,GAAG,iEAAiE;gBACrF,UAAU,EAAE,mEAAmE;aAChF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CACf,GAAiB,EACjB,UAAuB,EACvB,QAA6B;IAE7B,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAClD,CAAC;IACD,gFAAgF;IAChF,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AACvC,CAAC;AAED,gFAAgF;AAChF,SAAS,UAAU,CAAC,GAAiB;IACnC,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC;AACjF,CAAC"}
|
|
@@ -8,12 +8,14 @@
|
|
|
8
8
|
* When namespaces are used, keys are qualified as `namespace:key` so they stay
|
|
9
9
|
* distinct across files.
|
|
10
10
|
*/
|
|
11
|
-
import type { LoadedLocale } from "../types";
|
|
11
|
+
import type { LoadedLocale, MessageFormat } from "../types";
|
|
12
12
|
export interface LoadOptions {
|
|
13
13
|
/** Absolute project root; reported file paths are relative to this. */
|
|
14
14
|
rootDir: string;
|
|
15
15
|
/** Locales directory, relative to `rootDir`. */
|
|
16
16
|
localesPath: string;
|
|
17
|
+
/** How locale-file values are interpreted (defaults to "plain"). */
|
|
18
|
+
messageFormat?: MessageFormat;
|
|
17
19
|
}
|
|
18
20
|
export declare function loadLocale(locale: string, opts: LoadOptions): LoadedLocale;
|
|
19
21
|
//# sourceMappingURL=load.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/locale-parser/load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAS,YAAY,EAAe,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/locale-parser/load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAS,YAAY,EAAe,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AA+BD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,YAAY,CAoE1E"}
|
|
@@ -121,7 +121,10 @@ function loadLocale(locale, opts) {
|
|
|
121
121
|
suggestion: "Remove the duplicate; only the last value is kept.",
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
|
-
|
|
124
|
+
const flat = (0, flatten_1.flatten)(parsed.value, {
|
|
125
|
+
messageDescriptors: opts.messageFormat === "icu-descriptor",
|
|
126
|
+
});
|
|
127
|
+
for (const [flatKey, value] of flat) {
|
|
125
128
|
const fqKey = qualify(namespace, flatKey);
|
|
126
129
|
entries.set(fqKey, {
|
|
127
130
|
value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/locale-parser/load.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/locale-parser/load.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,10 @@ function summaryParts(result) {
|
|
|
58
58
|
parts.push(`**${t["duplicate-key"]}** duplicate`);
|
|
59
59
|
if (t["invalid-json"])
|
|
60
60
|
parts.push(`**${t["invalid-json"]}** invalid-json`);
|
|
61
|
+
if (t["undefined-key"])
|
|
62
|
+
parts.push(`**${t["undefined-key"]}** undefined key`);
|
|
63
|
+
if (t["unused-key"])
|
|
64
|
+
parts.push(`**${t["unused-key"]}** unused key`);
|
|
61
65
|
if (t["hardcoded-string"])
|
|
62
66
|
parts.push(`**${t["hardcoded-string"]}** hardcoded text`);
|
|
63
67
|
if (t["hardcoded-attribute"])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/reporters/markdown.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/reporters/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sarif.d.ts","sourceRoot":"","sources":["../../../src/reporters/sarif.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"sarif.d.ts","sourceRoot":"","sources":["../../../src/reporters/sarif.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAkBD,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,GAAE,oBAAyB,GAAG,MAAM,CAyCxF"}
|
|
@@ -14,6 +14,8 @@ const RULE_DESCRIPTIONS = {
|
|
|
14
14
|
"extra-key": "A key exists in a target locale but not in the source locale.",
|
|
15
15
|
"duplicate-key": "A key is declared more than once within a file.",
|
|
16
16
|
"placeholder-mismatch": "Interpolation variables differ between source and target.",
|
|
17
|
+
"undefined-key": "A translation key used in code is missing from the source locale.",
|
|
18
|
+
"unused-key": "A locale key is never referenced in code.",
|
|
17
19
|
"hardcoded-string": "Hardcoded, user-facing JSX text that should be localized.",
|
|
18
20
|
"hardcoded-attribute": "Hardcoded localizable attribute value (aria-label, title, alt, placeholder).",
|
|
19
21
|
};
|
|
@@ -49,7 +51,7 @@ function formatSarif(result, opts = {}) {
|
|
|
49
51
|
driver: {
|
|
50
52
|
name: "LocaleGuard",
|
|
51
53
|
informationUri: "https://github.com/isamrish/localeguard",
|
|
52
|
-
version: opts.toolVersion ?? "0.
|
|
54
|
+
version: opts.toolVersion ?? "0.3.0",
|
|
53
55
|
rules,
|
|
54
56
|
},
|
|
55
57
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sarif.js","sourceRoot":"","sources":["../../../src/reporters/sarif.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"sarif.js","sourceRoot":"","sources":["../../../src/reporters/sarif.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAyBH,kCAyCC;AAhED,oCAAuC;AAOvC,MAAM,iBAAiB,GAA8B;IACnD,cAAc,EAAE,gCAAgC;IAChD,aAAa,EAAE,6DAA6D;IAC5E,WAAW,EAAE,+DAA+D;IAC5E,eAAe,EAAE,iDAAiD;IAClE,sBAAsB,EAAE,2DAA2D;IACnF,eAAe,EAAE,mEAAmE;IACpF,YAAY,EAAE,2CAA2C;IACzD,kBAAkB,EAAE,2DAA2D;IAC/E,qBAAqB,EAAE,8EAA8E;CACtG,CAAC;AAEF,SAAS,UAAU,CAAC,KAAY;IAC9B,OAAO,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,SAAgB,WAAW,CAAC,MAAmB,EAAE,OAA6B,EAAE;IAC9E,MAAM,KAAK,GAAG,mBAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,EAAE;QACF,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;QACtB,gBAAgB,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAAE;QACjD,oBAAoB,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE;KAC1E,CAAC,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,EAAE,KAAK,CAAC,IAAI;QAClB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;QACxB,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE;QAChC,SAAS,EAAE;YACT;gBACE,gBAAgB,EAAE;oBAChB,gBAAgB,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBAC5C,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE;iBACpD;aACF;SACF;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,KAAK,GAAG;QACZ,OAAO,EAAE,+CAA+C;QACxD,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE;wBACN,IAAI,EAAE,aAAa;wBACnB,cAAc,EAAE,yCAAyC;wBACzD,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,OAAO;wBACpC,KAAK;qBACN;iBACF;gBACD,OAAO;aACR;SACF;KACF,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAC9B,OAAO,EAAE;SACN,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
|
|
@@ -68,6 +68,10 @@ function summaryLine(result, c) {
|
|
|
68
68
|
parts.push(`${t["duplicate-key"]} duplicate`);
|
|
69
69
|
if (t["invalid-json"])
|
|
70
70
|
parts.push(`${t["invalid-json"]} invalid-json`);
|
|
71
|
+
if (t["undefined-key"])
|
|
72
|
+
parts.push(`${t["undefined-key"]} undefined-key`);
|
|
73
|
+
if (t["unused-key"])
|
|
74
|
+
parts.push(`${t["unused-key"]} unused-key`);
|
|
71
75
|
if (t["hardcoded-string"])
|
|
72
76
|
parts.push(`${t["hardcoded-string"]} hardcoded-text`);
|
|
73
77
|
if (t["hardcoded-attribute"])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/reporters/text.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/reporters/text.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export type IssueSeverity = "error" | "warning";
|
|
|
12
12
|
* placeholder-mismatch.
|
|
13
13
|
* - Source-code checks (Phase 2): hardcoded-string, hardcoded-attribute.
|
|
14
14
|
*/
|
|
15
|
-
export type IssueType = "invalid-json" | "missing-key" | "extra-key" | "duplicate-key" | "placeholder-mismatch" | "hardcoded-string" | "hardcoded-attribute";
|
|
15
|
+
export type IssueType = "invalid-json" | "missing-key" | "extra-key" | "duplicate-key" | "placeholder-mismatch" | "undefined-key" | "unused-key" | "hardcoded-string" | "hardcoded-attribute";
|
|
16
16
|
/** Every issue type, in display order. */
|
|
17
17
|
export declare const ISSUE_TYPES: IssueType[];
|
|
18
18
|
export interface Issue {
|
|
@@ -32,7 +32,20 @@ export interface Issue {
|
|
|
32
32
|
/** Actionable remediation hint shown in reports. */
|
|
33
33
|
suggestion?: string;
|
|
34
34
|
}
|
|
35
|
+
/** Supported framework presets (fill in sensible defaults for other fields). */
|
|
36
|
+
export type Framework = "react-i18next" | "react-intl" | "next-intl" | "vue-i18n" | "ngx-translate";
|
|
37
|
+
/**
|
|
38
|
+
* How values in a locale file are interpreted.
|
|
39
|
+
* - "plain": leaf strings are messages; nested objects are namespaces.
|
|
40
|
+
* - "icu-descriptor": FormatJS/react-intl objects with a string `defaultMessage`
|
|
41
|
+
* are messages (the key is the message id; `defaultMessage` is the string).
|
|
42
|
+
*/
|
|
43
|
+
export type MessageFormat = "plain" | "icu-descriptor";
|
|
35
44
|
export interface LocaleGuardConfig {
|
|
45
|
+
/** Optional framework preset; fills defaults for the fields below. */
|
|
46
|
+
framework?: Framework;
|
|
47
|
+
/** How locale-file values are interpreted (defaults to "plain"). */
|
|
48
|
+
messageFormat?: MessageFormat;
|
|
36
49
|
/** Reference locale every other locale is compared against. */
|
|
37
50
|
sourceLocale: string;
|
|
38
51
|
/** Target locales to validate. */
|
|
@@ -49,6 +62,18 @@ export interface LocaleGuardConfig {
|
|
|
49
62
|
ignore?: string[];
|
|
50
63
|
/** Issue types that should fail the check (non-zero exit). */
|
|
51
64
|
blockOn?: IssueType[];
|
|
65
|
+
/** Opt in to reporting locale keys never referenced in code (default false). */
|
|
66
|
+
unusedKeys?: boolean;
|
|
67
|
+
}
|
|
68
|
+
/** A literal translation-key reference found in source code. */
|
|
69
|
+
export interface KeyReference {
|
|
70
|
+
/** The literal key as written, e.g. "app.title" or "common:save". */
|
|
71
|
+
key: string;
|
|
72
|
+
/** Namespace in scope (from useTranslations/useTranslation), if resolved. */
|
|
73
|
+
namespace?: string;
|
|
74
|
+
/** File the reference was found in, relative to the project root. */
|
|
75
|
+
file: string;
|
|
76
|
+
line: number;
|
|
52
77
|
}
|
|
53
78
|
/** A single translation entry resolved from a locale file. */
|
|
54
79
|
export interface LocaleEntry {
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,aAAa,GACb,WAAW,GACX,eAAe,GACf,sBAAsB,GACtB,kBAAkB,GAClB,qBAAqB,CAAC;AAE1B,0CAA0C;AAC1C,eAAO,MAAM,WAAW,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.js
CHANGED
|
@@ -11,6 +11,8 @@ exports.ISSUE_TYPES = [
|
|
|
11
11
|
"missing-key",
|
|
12
12
|
"extra-key",
|
|
13
13
|
"placeholder-mismatch",
|
|
14
|
+
"undefined-key",
|
|
15
|
+
"unused-key",
|
|
14
16
|
"hardcoded-string",
|
|
15
17
|
"hardcoded-attribute",
|
|
16
18
|
];
|
|
@@ -19,6 +21,7 @@ exports.DEFAULT_BLOCK_ON = [
|
|
|
19
21
|
"missing-key",
|
|
20
22
|
"duplicate-key",
|
|
21
23
|
"placeholder-mismatch",
|
|
24
|
+
"undefined-key",
|
|
22
25
|
];
|
|
23
26
|
/** Fixed severity per issue type for this release. */
|
|
24
27
|
exports.SEVERITY_BY_TYPE = {
|
|
@@ -27,6 +30,11 @@ exports.SEVERITY_BY_TYPE = {
|
|
|
27
30
|
"extra-key": "warning",
|
|
28
31
|
"duplicate-key": "error",
|
|
29
32
|
"placeholder-mismatch": "error",
|
|
33
|
+
// A literal key referenced in code but absent from the source locale is a
|
|
34
|
+
// genuine defect (it will render the raw key).
|
|
35
|
+
"undefined-key": "error",
|
|
36
|
+
// Unused keys are reported but non-blocking, and the check is opt-in.
|
|
37
|
+
"unused-key": "warning",
|
|
30
38
|
// Hardcoded text is reported but non-blocking by default: it is more
|
|
31
39
|
// prone to false positives, so teams opt in via `blockOn`.
|
|
32
40
|
"hardcoded-string": "warning",
|
package/dist/src/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAwBH,0CAA0C;AAC7B,QAAA,WAAW,GAAgB;IACtC,cAAc;IACd,eAAe;IACf,aAAa;IACb,WAAW;IACX,sBAAsB;IACtB,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,qBAAqB;CACtB,CAAC;AA4GW,QAAA,gBAAgB,GAAgB;IAC3C,cAAc;IACd,aAAa;IACb,eAAe;IACf,sBAAsB;IACtB,eAAe;CAChB,CAAC;AAEF,sDAAsD;AACzC,QAAA,gBAAgB,GAAqC;IAChE,cAAc,EAAE,OAAO;IACvB,aAAa,EAAE,OAAO;IACtB,WAAW,EAAE,SAAS;IACtB,eAAe,EAAE,OAAO;IACxB,sBAAsB,EAAE,OAAO;IAC/B,0EAA0E;IAC1E,+CAA+C;IAC/C,eAAe,EAAE,OAAO;IACxB,sEAAsE;IACtE,YAAY,EAAE,SAAS;IACvB,qEAAqE;IACrE,2DAA2D;IAC3D,kBAAkB,EAAE,SAAS;IAC7B,qBAAqB,EAAE,SAAS;CACjC,CAAC"}
|
package/package.json
CHANGED