i18next-cli 1.46.4 → 1.47.1
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/README.md +198 -3
- package/dist/cjs/cli.js +50 -1
- package/dist/cjs/extractor/core/extractor.js +27 -18
- package/dist/cjs/extractor/core/translation-manager.js +10 -3
- package/dist/cjs/extractor/parsers/call-expression-handler.js +9 -1
- package/dist/cjs/extractor/parsers/jsx-handler.js +10 -1
- package/dist/cjs/index.js +5 -0
- package/dist/cjs/init.js +68 -12
- package/dist/cjs/instrumenter/core/instrumenter.js +1633 -0
- package/dist/cjs/instrumenter/core/key-generator.js +71 -0
- package/dist/cjs/instrumenter/core/string-detector.js +290 -0
- package/dist/cjs/instrumenter/core/transformer.js +339 -0
- package/dist/cjs/linter.js +8 -9
- package/dist/cjs/utils/jsx-attributes.js +131 -0
- package/dist/esm/cli.js +50 -1
- package/dist/esm/extractor/core/extractor.js +27 -18
- package/dist/esm/extractor/core/translation-manager.js +10 -3
- package/dist/esm/extractor/parsers/call-expression-handler.js +9 -1
- package/dist/esm/extractor/parsers/jsx-handler.js +10 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/init.js +68 -12
- package/dist/esm/instrumenter/core/instrumenter.js +1630 -0
- package/dist/esm/instrumenter/core/key-generator.js +68 -0
- package/dist/esm/instrumenter/core/string-detector.js +288 -0
- package/dist/esm/instrumenter/core/transformer.js +336 -0
- package/dist/esm/linter.js +8 -9
- package/dist/esm/utils/jsx-attributes.js +121 -0
- package/package.json +2 -1
- package/types/cli.d.ts.map +1 -1
- package/types/extractor/core/extractor.d.ts.map +1 -1
- package/types/extractor/core/translation-manager.d.ts.map +1 -1
- package/types/extractor/parsers/call-expression-handler.d.ts.map +1 -1
- package/types/extractor/parsers/jsx-handler.d.ts.map +1 -1
- package/types/index.d.ts +2 -1
- package/types/index.d.ts.map +1 -1
- package/types/init.d.ts.map +1 -1
- package/types/instrumenter/core/instrumenter.d.ts +16 -0
- package/types/instrumenter/core/instrumenter.d.ts.map +1 -0
- package/types/instrumenter/core/key-generator.d.ts +30 -0
- package/types/instrumenter/core/key-generator.d.ts.map +1 -0
- package/types/instrumenter/core/string-detector.d.ts +27 -0
- package/types/instrumenter/core/string-detector.d.ts.map +1 -0
- package/types/instrumenter/core/transformer.d.ts +31 -0
- package/types/instrumenter/core/transformer.d.ts.map +1 -0
- package/types/instrumenter/index.d.ts +6 -0
- package/types/instrumenter/index.d.ts.map +1 -0
- package/types/linter.d.ts.map +1 -1
- package/types/types.d.ts +285 -1
- package/types/types.d.ts.map +1 -1
- package/types/utils/jsx-attributes.d.ts +68 -0
- package/types/utils/jsx-attributes.d.ts.map +1 -0
package/dist/esm/linter.js
CHANGED
|
@@ -6,6 +6,7 @@ import { EventEmitter } from 'node:events';
|
|
|
6
6
|
import { styleText } from 'node:util';
|
|
7
7
|
import { ConsoleLogger } from './utils/logger.js';
|
|
8
8
|
import { createSpinnerLike } from './utils/wrap-ora.js';
|
|
9
|
+
import { acceptedTags, translatableAttributes, ignoredTags, ignoredAttributeLowerSet } from './utils/jsx-attributes.js';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Loads all translation values from the primary locale's JSON files and returns
|
|
@@ -72,8 +73,8 @@ async function loadPrimaryTranslationValues(config) {
|
|
|
72
73
|
function extractInterpolationKeys(str, config) {
|
|
73
74
|
const prefix = config.extract.interpolationPrefix ?? '{{';
|
|
74
75
|
const suffix = config.extract.interpolationSuffix ?? '}}';
|
|
75
|
-
// Regex to match {{key}}
|
|
76
|
-
const regex = new RegExp(`${prefix.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')}\\s*([\\w.-]+)\\s
|
|
76
|
+
// Regex to match {{key}} or {{key, format}} (i18next formatting syntax)
|
|
77
|
+
const regex = new RegExp(`${prefix.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')}\\s*([\\w.-]+)\\s*(?:,[^}]*)?${suffix.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')}`, 'g');
|
|
77
78
|
const keys = [];
|
|
78
79
|
let match;
|
|
79
80
|
while ((match = regex.exec(str))) {
|
|
@@ -244,12 +245,10 @@ function lintInterpolationParams(ast, code, config, translationValues) {
|
|
|
244
245
|
}
|
|
245
246
|
return issues;
|
|
246
247
|
}
|
|
247
|
-
const recommendedAcceptedTags =
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
const
|
|
251
|
-
const defaultIgnoredAttributes = ['className', 'key', 'id', 'style', 'href', 'i18nKey', 'defaults', 'type', 'target'].map(s => s.toLowerCase());
|
|
252
|
-
const defaultIgnoredTags = ['script', 'style', 'code'];
|
|
248
|
+
const recommendedAcceptedTags = acceptedTags.map(s => s.toLowerCase());
|
|
249
|
+
const recommendedAcceptedAttributes = translatableAttributes.map(s => s.toLowerCase());
|
|
250
|
+
const defaultIgnoredAttributes = ignoredAttributeLowerSet;
|
|
251
|
+
const defaultIgnoredTags = ignoredTags;
|
|
253
252
|
class Linter extends EventEmitter {
|
|
254
253
|
config;
|
|
255
254
|
logger;
|
|
@@ -564,7 +563,7 @@ function findHardcodedStrings(ast, code, config) {
|
|
|
564
563
|
};
|
|
565
564
|
const transComponents = (config.extract.transComponents || ['Trans']).map((s) => s.toLowerCase());
|
|
566
565
|
const customIgnoredTags = (config?.lint?.ignoredTags || config.extract.ignoredTags || []).map((s) => s.toLowerCase());
|
|
567
|
-
const allIgnoredTags = new Set([...transComponents, ...defaultIgnoredTags.map(s => s.toLowerCase()), ...customIgnoredTags]);
|
|
566
|
+
const allIgnoredTags = new Set([...transComponents, ...defaultIgnoredTags.map((s) => s.toLowerCase()), ...customIgnoredTags]);
|
|
568
567
|
const customIgnoredAttributes = (config?.lint?.ignoredAttributes || config.extract.ignoredAttributes || []).map((s) => s.toLowerCase());
|
|
569
568
|
const ignoredAttributes = new Set([...defaultIgnoredAttributes, ...customIgnoredAttributes]);
|
|
570
569
|
const lintAcceptedTags = config?.lint?.acceptedTags ? config.lint.acceptedTags : null;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for JSX / HTML attribute classification.
|
|
3
|
+
*
|
|
4
|
+
* Used by both the **linter** and the **instrumenter** to consistently decide
|
|
5
|
+
* which JSX attribute values are user-facing (translatable) and which are
|
|
6
|
+
* technical / non-translatable.
|
|
7
|
+
*
|
|
8
|
+
* Having a single source of truth avoids drift between the linter's
|
|
9
|
+
* `defaultIgnoredAttributes` / `recommendedAcceptedAttributes` and the
|
|
10
|
+
* instrumenter's `SKIP_JSX_ATTRIBUTES` / `TRANSLATABLE_ATTRIBUTES`.
|
|
11
|
+
*/
|
|
12
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
13
|
+
// Translatable attributes
|
|
14
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* JSX/HTML attribute names whose values are typically user-visible and
|
|
17
|
+
* should be translated.
|
|
18
|
+
*
|
|
19
|
+
* This is the recommended accepted-list for the linter **and** the set used
|
|
20
|
+
* by the instrumenter's string-detector to allow attribute values through.
|
|
21
|
+
*
|
|
22
|
+
* Exported from the public API as `recommendedAcceptedAttributes`.
|
|
23
|
+
*/
|
|
24
|
+
const translatableAttributes = [
|
|
25
|
+
'abbr', 'accesskey', 'alt',
|
|
26
|
+
'aria-description', 'aria-label', 'aria-placeholder',
|
|
27
|
+
'aria-roledescription', 'aria-valuetext',
|
|
28
|
+
'content', 'description',
|
|
29
|
+
'label', 'placeholder',
|
|
30
|
+
'summary', 'caption', 'title'
|
|
31
|
+
];
|
|
32
|
+
/**
|
|
33
|
+
* Pre-built Set (lower-cased) for fast membership checks in hot loops.
|
|
34
|
+
*/
|
|
35
|
+
const translatableAttributeSet = new Set(translatableAttributes.map(s => s.toLowerCase()));
|
|
36
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
37
|
+
// Non-translatable (ignored) attributes
|
|
38
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
39
|
+
/**
|
|
40
|
+
* JSX attribute names whose values are **never** user-facing.
|
|
41
|
+
*
|
|
42
|
+
* The linter uses these as `defaultIgnoredAttributes`, and the instrumenter
|
|
43
|
+
* skips recursing into them entirely so that e.g. `className={...}` is
|
|
44
|
+
* never wrapped in `t()`.
|
|
45
|
+
*
|
|
46
|
+
* Event-handler attributes (on*) are handled separately via a prefix check
|
|
47
|
+
* rather than being enumerated here, but a representative set is included
|
|
48
|
+
* for the instrumenter's early-exit guard which does a Set lookup.
|
|
49
|
+
*/
|
|
50
|
+
const ignoredAttributes = [
|
|
51
|
+
// CSS / styling
|
|
52
|
+
'className', 'class', 'style',
|
|
53
|
+
// Identity / keys
|
|
54
|
+
'key', 'id', 'htmlFor', 'for', 'name',
|
|
55
|
+
// Links & resources
|
|
56
|
+
'href', 'src', 'srcSet', 'action',
|
|
57
|
+
// HTML form / behaviour
|
|
58
|
+
'type', 'target', 'rel', 'role', 'method', 'encType',
|
|
59
|
+
'autoComplete', 'autoFocus', 'tabIndex',
|
|
60
|
+
// Testing
|
|
61
|
+
'data-testid', 'data-cy',
|
|
62
|
+
// i18next-specific (already instrumented / extractor config)
|
|
63
|
+
'i18nKey', 'defaults', 'ns', 'defaultValue',
|
|
64
|
+
// Event handlers (representative set — the instrumenter also does a
|
|
65
|
+
// prefix check for `on[A-Z]`)
|
|
66
|
+
'onChange', 'onClick', 'onSubmit', 'onFocus', 'onBlur',
|
|
67
|
+
'onKeyDown', 'onKeyUp', 'onMouseEnter', 'onMouseLeave',
|
|
68
|
+
// React internals
|
|
69
|
+
'ref', 'dangerouslySetInnerHTML', 'suppressHydrationWarning'
|
|
70
|
+
];
|
|
71
|
+
/**
|
|
72
|
+
* Pre-built Set for fast membership checks.
|
|
73
|
+
* Values are stored in their original casing — the instrumenter checks the
|
|
74
|
+
* raw SWC attribute name. The linter lower-cases before lookup.
|
|
75
|
+
*/
|
|
76
|
+
const ignoredAttributeSet = new Set(ignoredAttributes);
|
|
77
|
+
/**
|
|
78
|
+
* Same set, lower-cased — used by the linter which normalises attr names.
|
|
79
|
+
*/
|
|
80
|
+
const ignoredAttributeLowerSet = new Set(ignoredAttributes.map(s => s.toLowerCase()));
|
|
81
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
82
|
+
// Translatable object properties (instrumenter-specific)
|
|
83
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
84
|
+
/**
|
|
85
|
+
* Object / JSON property names whose values are typically user-visible and
|
|
86
|
+
* should be translated. Used by the instrumenter's string-detector to give
|
|
87
|
+
* a confidence boost.
|
|
88
|
+
*/
|
|
89
|
+
const translatableProperties = [
|
|
90
|
+
'label', 'title', 'description', 'text', 'message', 'placeholder',
|
|
91
|
+
'caption', 'summary', 'heading', 'subheading', 'subtitle', 'tooltip',
|
|
92
|
+
'hint', 'helpText', 'errorMessage', 'successMessage', 'name'
|
|
93
|
+
];
|
|
94
|
+
const translatablePropertySet = new Set(translatableProperties);
|
|
95
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
96
|
+
// Ignored tags (linter + potential future instrumenter use)
|
|
97
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
98
|
+
/**
|
|
99
|
+
* HTML/JSX tags whose content should be ignored when linting for hardcoded
|
|
100
|
+
* strings (e.g. `<script>`, `<style>`, `<code>`).
|
|
101
|
+
*/
|
|
102
|
+
const ignoredTags = ['script', 'style', 'code'];
|
|
103
|
+
/**
|
|
104
|
+
* Recommended accepted tags — the set of tags the linter considers as
|
|
105
|
+
* potentially containing translatable content.
|
|
106
|
+
*
|
|
107
|
+
* Exported from the public API as `recommendedAcceptedTags`.
|
|
108
|
+
*/
|
|
109
|
+
const acceptedTags = [
|
|
110
|
+
'a', 'abbr', 'address', 'article', 'aside', 'bdi', 'bdo', 'blockquote',
|
|
111
|
+
'button', 'caption', 'cite', 'code', 'data', 'dd', 'del', 'details',
|
|
112
|
+
'dfn', 'dialog', 'div', 'dt', 'em', 'figcaption', 'footer',
|
|
113
|
+
'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header',
|
|
114
|
+
'img', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'mark', 'nav',
|
|
115
|
+
'option', 'output', 'p', 'pre', 'q', 's', 'samp', 'section', 'small',
|
|
116
|
+
'span', 'strong', 'sub', 'summary', 'sup', 'td', 'textarea', 'th',
|
|
117
|
+
'time', 'title', 'var'
|
|
118
|
+
];
|
|
119
|
+
new Set(acceptedTags.map(s => s.toLowerCase()));
|
|
120
|
+
|
|
121
|
+
export { acceptedTags, ignoredAttributeLowerSet, ignoredAttributeSet, ignoredAttributes, ignoredTags, translatableAttributeSet, translatableAttributes, translatableProperties, translatablePropertySet };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "i18next-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.47.1",
|
|
4
4
|
"description": "A unified, high-performance i18next CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -79,6 +79,7 @@
|
|
|
79
79
|
"inquirer": "13.3.0",
|
|
80
80
|
"jiti": "2.6.1",
|
|
81
81
|
"jsonc-parser": "3.3.1",
|
|
82
|
+
"magic-string": "0.30.12",
|
|
82
83
|
"minimatch": "10.2.4",
|
|
83
84
|
"ora": "9.3.0",
|
|
84
85
|
"react": "^19.2.4",
|
package/types/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmBnC,QAAA,MAAM,OAAO,SAAgB,CAAA;AA2U7B,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/extractor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMtF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAK5C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,OAAO,CAAC;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/extractor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMtF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAK5C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,OAAO,CAAC;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CA6E1D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,MAAM,GAAE,MAA4B,EACpC,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CA8Gf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,OAAO,CAAE,MAAM,EAAE,oBAAoB,EAAE,EAAE,uBAA+B,EAAE,GAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAO,sDAO3I"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translation-manager.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/translation-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"translation-manager.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/translation-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAw3B3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EAC/B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,oBAAoB,EAC5B,EACE,uBAA+B,EAC/B,OAAe,EACf,MAA4B,EAC7B,GAAE;IACD,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA8J9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-expression-handler.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/call-expression-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA6C,MAAM,WAAW,CAAA;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAgB,SAAS,EAAE,MAAM,aAAa,CAAA;AACvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAM1D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,kBAAkB,CAAoB;IACvC,UAAU,cAAoB;IACrC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAc;gBAGlC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,EAAE,MAAM,MAAM;IAU9B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI;IAgYxG;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,oBAAoB;IA6E5B,OAAO,CAAC,wBAAwB;IAyEhC;;;;;;OAMG;IACH,OAAO,CAAC,4BAA4B;IA8BpC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,sBAAsB;IA2C9B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"call-expression-handler.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/call-expression-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA6C,MAAM,WAAW,CAAA;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAgB,SAAS,EAAE,MAAM,aAAa,CAAA;AACvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAM1D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,kBAAkB,CAAoB;IACvC,UAAU,cAAoB;IACrC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAc;gBAGlC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,EAAE,MAAM,MAAM;IAU9B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,GAAG,IAAI;IAgYxG;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,oBAAoB;IA6E5B,OAAO,CAAC,wBAAwB;IAyEhC;;;;;;OAMG;IACH,OAAO,CAAC,4BAA4B;IA8BpC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,sBAAsB;IA2C9B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,gBAAgB;IAyMxB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;CA2BxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-handler.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/jsx-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAgB,MAAM,aAAa,CAAA;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAI1D,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAc;gBAGlC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,EAAE,MAAM,MAAM;IAS9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;;;;;;;OAQG;IACH,gBAAgB,CAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,GAAG,IAAI;IAwUjI;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,0BAA0B;
|
|
1
|
+
{"version":3,"file":"jsx-handler.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/jsx-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,WAAW,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAgB,MAAM,aAAa,CAAA;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAI1D,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAc;gBAGlC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,MAAM,MAAM,EAC5B,cAAc,EAAE,MAAM,MAAM;IAS9B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;;;;;;;OAQG;IACH,gBAAgB,CAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,GAAG,IAAI;IAwUjI;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,0BAA0B;IAkIlC;;;;;;;;;OASG;IACH,OAAO,CAAC,cAAc;CAevB"}
|
package/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { I18nextToolkitConfig, Plugin, LinterPlugin, LintPluginContext, LintIssue, PluginContext, ExtractedKey, TranslationResult, ExtractedKeysMap, RenameKeyResult, Logger, } from './types';
|
|
1
|
+
export type { I18nextToolkitConfig, Plugin, LinterPlugin, InstrumenterPlugin, LintPluginContext, LintIssue, PluginContext, ExtractedKey, TranslationResult, ExtractedKeysMap, RenameKeyResult, Logger, InstrumenterOptions, CandidateString, TransformResult, FileInstrumentationResult, InstrumentationResults, ComponentBoundary, FileScanResult, CustomCandidateScorer, InstrumentPluginContext } from './types';
|
|
2
2
|
export { defineConfig } from './config';
|
|
3
3
|
export { extract, findKeys, getTranslations, runExtractor } from './extractor';
|
|
4
4
|
export { runLinter, recommendedAcceptedTags, recommendedAcceptedAttributes } from './linter';
|
|
@@ -6,4 +6,5 @@ export { runSyncer } from './syncer';
|
|
|
6
6
|
export { runStatus } from './status';
|
|
7
7
|
export { runTypesGenerator } from './types-generator';
|
|
8
8
|
export { runRenameKey } from './rename-key';
|
|
9
|
+
export { runInstrumenter, writeExtractedKeys } from './instrumenter';
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,MAAM,EACN,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,MAAM,EACN,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EACL,OAAO,EACP,QAAQ,EACR,eAAe,EACf,YAAY,EACb,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAA;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/types/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAiEA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,OAAO,kBAyI5B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Logger, I18nextToolkitConfig, InstrumenterOptions, CandidateString, InstrumentationResults } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Main orchestrator for the instrument command.
|
|
4
|
+
* Scans source files for hardcoded strings and instruments them with i18next calls.
|
|
5
|
+
*
|
|
6
|
+
* @param config - Toolkit configuration
|
|
7
|
+
* @param options - Instrumentation options (dry-run, interactive, etc.)
|
|
8
|
+
* @param logger - Logger instance
|
|
9
|
+
* @returns Instrumentation results
|
|
10
|
+
*/
|
|
11
|
+
export declare function runInstrumenter(config: I18nextToolkitConfig, options: InstrumenterOptions, logger?: Logger): Promise<InstrumentationResults>;
|
|
12
|
+
/**
|
|
13
|
+
* Extracts and writes translation keys discovered during instrumentation.
|
|
14
|
+
*/
|
|
15
|
+
export declare function writeExtractedKeys(candidates: CandidateString[], config: I18nextToolkitConfig, namespace?: string, logger?: Logger): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=instrumenter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumenter.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/instrumenter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,EAA6B,sBAAsB,EAAiE,MAAM,aAAa,CAAA;AAUvN;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,GAAE,MAA4B,GACnC,OAAO,CAAC,sBAAsB,CAAC,CA8MjC;AA81CD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,oBAAoB,EAC5B,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,GAAE,MAA4B,GACnC,OAAO,CAAC,IAAI,CAAC,CAoDf"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates camelCase keys from English string content.
|
|
3
|
+
*
|
|
4
|
+
* Examples:
|
|
5
|
+
* "Welcome back" → "welcomeBack"
|
|
6
|
+
* "Hello, World!" → "helloWorld"
|
|
7
|
+
* "You have 3 items" → "youHave3Items"
|
|
8
|
+
*
|
|
9
|
+
* @param content - The string content to derive a key from
|
|
10
|
+
* @returns camelCase key
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateKeyFromContent(content: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Interface for tracking generated keys and managing collisions
|
|
15
|
+
*/
|
|
16
|
+
export interface KeyRegistry {
|
|
17
|
+
keys: Map<string, string>;
|
|
18
|
+
add(key: string, content: string): string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Creates a new key registry with collision detection.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createKeyRegistry(): KeyRegistry;
|
|
24
|
+
/**
|
|
25
|
+
* Sanitizes a generated key to be valid according to i18next conventions.
|
|
26
|
+
* Removes invalid characters and ensures it's a valid JavaScript identifier
|
|
27
|
+
* that can be used as an object key.
|
|
28
|
+
*/
|
|
29
|
+
export declare function sanitizeKey(key: string): string;
|
|
30
|
+
//# sourceMappingURL=key-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-generator.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/key-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAuB/D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACzB,GAAG,CAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAC3C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAK,WAAW,CAmChD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAWhD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { I18nextToolkitConfig, CandidateString } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Detects if a string is a candidate for translation based on confidence heuristics.
|
|
4
|
+
* Returns null if the string should be skipped, otherwise returns a CandidateString
|
|
5
|
+
* with a confidence score.
|
|
6
|
+
*
|
|
7
|
+
* When a custom scorer is provided via `config.extract.instrumentScorer`, it is
|
|
8
|
+
* called after the built-in skip checks. The scorer can:
|
|
9
|
+
* - Return a number (0-1) to override the confidence score
|
|
10
|
+
* - Return `null` to force-skip the candidate
|
|
11
|
+
* - Return `undefined` to fall back to the built-in heuristic
|
|
12
|
+
*
|
|
13
|
+
* **Important:** This uses heuristic-based detection and will not catch 100% of cases.
|
|
14
|
+
* False positives and false negatives are expected. The results serve as a starting point
|
|
15
|
+
* for manual review and refinement. Always review the generated transformations before
|
|
16
|
+
* committing them to your codebase.
|
|
17
|
+
*
|
|
18
|
+
* @param content - The string content to evaluate
|
|
19
|
+
* @param offset - Byte offset in file (normalized)
|
|
20
|
+
* @param endOffset - End byte offset in file
|
|
21
|
+
* @param file - Source file path
|
|
22
|
+
* @param code - Full source code for context
|
|
23
|
+
* @param config - Toolkit configuration
|
|
24
|
+
* @returns CandidateString with confidence score, or null if should be skipped
|
|
25
|
+
*/
|
|
26
|
+
export declare function detectCandidate(content: string, offset: number, endOffset: number, file: string, code: string, config: Omit<I18nextToolkitConfig, 'plugins'>): CandidateString | null;
|
|
27
|
+
//# sourceMappingURL=string-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string-detector.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/string-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAIxE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,GAC5C,eAAe,GAAG,IAAI,CAgDxB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { I18nextToolkitConfig, CandidateString, TransformResult, ComponentBoundary, LanguageChangeSite } from '../../types';
|
|
2
|
+
interface TransformerOptions {
|
|
3
|
+
isDryRun?: boolean;
|
|
4
|
+
hasReact: boolean;
|
|
5
|
+
isPrimaryLanguageFile: boolean;
|
|
6
|
+
config: Omit<I18nextToolkitConfig, 'plugins'>;
|
|
7
|
+
/** Detected React function component boundaries (used for hook injection) */
|
|
8
|
+
components?: ComponentBoundary[];
|
|
9
|
+
/** Target namespace for extracted keys (omit to use defaultNS) */
|
|
10
|
+
namespace?: string;
|
|
11
|
+
/** Detected language-change call sites to augment with i18n.changeLanguage() */
|
|
12
|
+
languageChangeSites?: LanguageChangeSite[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Transforms a source file, replacing candidate strings with instrumented code.
|
|
16
|
+
* Also injects useTranslation() hooks into React function components that
|
|
17
|
+
* contain transformed strings.
|
|
18
|
+
*
|
|
19
|
+
* @param content - Original source code
|
|
20
|
+
* @param file - File path
|
|
21
|
+
* @param candidates - Candidate strings to transform
|
|
22
|
+
* @param options - Transformation options
|
|
23
|
+
* @returns TransformResult with modified content and diff
|
|
24
|
+
*/
|
|
25
|
+
export declare function transformFile(content: string, file: string, candidates: CandidateString[], options: TransformerOptions): TransformResult;
|
|
26
|
+
/**
|
|
27
|
+
* Generates a unified diff showing what changed.
|
|
28
|
+
*/
|
|
29
|
+
export declare function generateDiff(original: string, modified: string, filePath: string): string;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../src/instrumenter/core/transformer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhI,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAA;IAC7C,6EAA6E;IAC7E,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAChC,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,eAAe,EAAE,EAC7B,OAAO,EAAE,kBAAkB,GAC1B,eAAe,CA6KjB;AAyKD;;GAEG;AACH,wBAAgB,YAAY,CAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB1F"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { InstrumenterOptions, CandidateString, TransformResult, FileInstrumentationResult, InstrumentationResults, ComponentBoundary, FileScanResult, LanguageChangeSite, CustomCandidateScorer, InstrumentPluginContext, InstrumenterPlugin } from '../types';
|
|
2
|
+
export { runInstrumenter, writeExtractedKeys } from './core/instrumenter';
|
|
3
|
+
export { detectCandidate } from './core/string-detector';
|
|
4
|
+
export { generateKeyFromContent, createKeyRegistry } from './core/key-generator';
|
|
5
|
+
export { transformFile, generateDiff } from './core/transformer';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/instrumenter/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA"}
|
package/types/linter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,SAAS,EAA6B,MAAM,SAAS,CAAA;AAwPjG,KAAK,cAAc,GAAG;IACpB,QAAQ,EAAE;QAAC;YACT,OAAO,EAAE,MAAM,CAAC;SACjB;KAAC,CAAC;IACH,IAAI,EAAE;QAAC;YACL,OAAO,EAAE,OAAO,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;SACpC;KAAC,CAAC;IACH,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;CACvB,CAAA;AAED,eAAO,MAAM,uBAAuB,EAAE,MAAM,EAAiD,CAAA;AAC7F,eAAO,MAAM,6BAA6B,EAAE,MAAM,EAAqD,CAAA;AAKvG,qBAAa,MAAO,SAAQ,YAAY,CAAC,cAAc,CAAC;IACtD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAQ;gBAET,MAAM,EAAE,oBAAoB,EAAE,MAAM,GAAE,MAA4B;IAM/E,SAAS,CAAE,KAAK,EAAE,OAAO;IAanB,GAAG;;;;;;;IA2GT,OAAO,CAAC,uBAAuB;YAOjB,qBAAqB;IAWnC,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,0BAA0B;YAUpB,qBAAqB;YAgBrB,uBAAuB;CAgBtC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,SAAS,CAAE,MAAM,EAAE,oBAAoB;;;;;;GAE5D;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,iBAkCnD"}
|