Skip to content

Commit 9e7d3b4

Browse files
ocavueljharb
authored andcommitted
Add types/rules/jsx-no-literals.d.ts to avoid error TS2309: An export assignment cannot be used in a module with other exported elements.
1 parent f33003c commit 9e7d3b4

File tree

3 files changed

+64
-52
lines changed

3 files changed

+64
-52
lines changed

lib/rules/jsx-no-literals.js

+13-51
Original file line numberDiff line numberDiff line change
@@ -66,51 +66,13 @@ const commonPropertiesSchema = {
6666
};
6767

6868
/**
69-
* @typedef RawElementConfigProperties
70-
* @property {boolean} [noStrings]
71-
* @property {string[]} [allowedStrings]
72-
* @property {boolean} [ignoreProps]
73-
* @property {boolean} [noAttributeStrings]
74-
*
75-
* @typedef RawOverrideConfigProperties
76-
* @property {boolean} [allowElement]
77-
* @property {boolean} [applyToNestedElements=true]
78-
*
79-
* @typedef {RawElementConfigProperties} RawElementConfig
80-
* @typedef {RawElementConfigProperties & RawElementConfigProperties} RawOverrideConfig
81-
*
82-
* @typedef RawElementOverrides
83-
* @property {Record<string, RawOverrideConfig>} [elementOverrides]
84-
*
85-
* @typedef {RawElementConfig & RawElementOverrides} RawConfig
86-
*
87-
* ----------------------------------------------------------------------
88-
*
89-
* @typedef ElementConfigType
90-
* @property {'element'} type
91-
*
92-
* @typedef ElementConfigProperties
93-
* @property {boolean} noStrings
94-
* @property {Set<string>} allowedStrings
95-
* @property {boolean} ignoreProps
96-
* @property {boolean} noAttributeStrings
97-
*
98-
* @typedef OverrideConfigProperties
99-
* @property {'override'} type
100-
* @property {string} name
101-
* @property {boolean} allowElement
102-
* @property {boolean} applyToNestedElements
103-
*
104-
* @typedef {ElementConfigType & ElementConfigProperties} ElementConfig
105-
* @typedef {OverrideConfigProperties & ElementConfigProperties} OverrideConfig
106-
*
107-
* @typedef ElementOverrides
108-
* @property {Record<string, OverrideConfig>} elementOverrides
109-
*
110-
* @typedef {ElementConfig & ElementOverrides} Config
111-
* @typedef {Config | OverrideConfig} ResolvedConfig
69+
* @typedef {import("../../types/rules/jsx-no-literals").RawConfig} RawConfig
70+
* @typedef {import("../../types/rules/jsx-no-literals").ElementConfig} ElementConfig
71+
* @typedef {import("../../types/rules/jsx-no-literals").OverrideConfig} OverrideConfig
72+
* @typedef {import("../../types/rules/jsx-no-literals").Config} Config
73+
* @typedef {import("../../types/rules/jsx-no-literals").ResolvedConfig} ResolvedConfig
11274
*/
113-
75+
11476
/**
11577
* Normalizes the element portion of the config
11678
* @param {RawConfig} config
@@ -131,10 +93,10 @@ function normalizeElementConfig(config) {
13193
/**
13294
* Normalizes the config and applies default values to all config options
13395
* @param {RawConfig} config
134-
* @returns {Config}
96+
* @returns {import('./jsx-no-literals').Config}
13597
*/
13698
function normalizeConfig(config) {
137-
/** @type {Config} */
99+
/** @type {import('./jsx-no-literals').Config} */
138100
const normalizedConfig = Object.assign(normalizeElementConfig(config), {
139101
elementOverrides: {},
140102
});
@@ -344,7 +306,7 @@ module.exports = {
344306
* Determines whether a given node's value and its immediate parent are
345307
* viable text nodes that can/should be reported on
346308
* @param {ASTNode} node
347-
* @param {ResolvedConfig} resolvedConfig
309+
* @param {import('./jsx-no-literals').ResolvedConfig} resolvedConfig
348310
* @returns {boolean}
349311
*/
350312
function isViableTextNode(node, resolvedConfig) {
@@ -376,7 +338,7 @@ module.exports = {
376338
* need to traverse the ancestor tree to determine if an ancestor's config
377339
* will also apply to the current node.
378340
* @param {ASTNode} node
379-
* @returns {OverrideConfig | undefined}
341+
* @returns {import('./jsx-no-literals').OverrideConfig | undefined}
380342
*/
381343
function getOverrideConfig(node) {
382344
if (!hasElementOverrides) {
@@ -410,7 +372,7 @@ module.exports = {
410372
}
411373

412374
/**
413-
* @param {ResolvedConfig} resolvedConfig
375+
* @param {import('./jsx-no-literals').ResolvedConfig} resolvedConfig
414376
* @returns {boolean}
415377
*/
416378
function shouldAllowElement(resolvedConfig) {
@@ -419,7 +381,7 @@ module.exports = {
419381

420382
/**
421383
* @param {boolean} ancestorIsJSXElement
422-
* @param {ResolvedConfig} resolvedConfig
384+
* @param {import('./jsx-no-literals').ResolvedConfig} resolvedConfig
423385
* @returns {string}
424386
*/
425387
function defaultMessageId(ancestorIsJSXElement, resolvedConfig) {
@@ -437,7 +399,7 @@ module.exports = {
437399
/**
438400
* @param {ASTNode} node
439401
* @param {string} messageId
440-
* @param {ResolvedConfig} resolvedConfig
402+
* @param {import('./jsx-no-literals').ResolvedConfig} resolvedConfig
441403
*/
442404
function reportLiteralNode(node, messageId, resolvedConfig) {
443405
report(context, messages[messageId], messageId, {

tsconfig.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@
1919
"alwaysStrict": false, /* Parse in strict mode and emit "use strict" for each source file. */
2020
"resolveJsonModule": true
2121
},
22-
"include": ["lib"],
22+
"include": ["lib", "types"],
2323
}

types/rules/jsx-no-literals.d.ts

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
type RawElementConfig = {
2+
noStrings?: boolean;
3+
allowedStrings?: string[];
4+
ignoreProps?: boolean;
5+
noAttributeStrings?: boolean;
6+
};
7+
8+
type RawOverrideConfig = {
9+
allowElement?: boolean;
10+
applyToNestedElements?: boolean;
11+
};
12+
13+
interface RawElementOverrides {
14+
elementOverrides?: Record<string, RawOverrideConfig>;
15+
}
16+
17+
export type RawConfig = RawElementConfig & RawElementOverrides;
18+
19+
interface ElementConfigType {
20+
type: 'element';
21+
}
22+
23+
interface ElementConfigProperties {
24+
noStrings: boolean;
25+
allowedStrings: Set<string>;
26+
ignoreProps: boolean;
27+
noAttributeStrings: boolean;
28+
}
29+
30+
interface OverrideConfigProperties {
31+
type: 'override';
32+
name: string;
33+
allowElement: boolean;
34+
applyToNestedElements: boolean;
35+
}
36+
37+
export type ElementConfig = {
38+
type: 'element';
39+
} & ElementConfigProperties;
40+
41+
export type OverrideConfig = OverrideConfigProperties & ElementConfigProperties;
42+
43+
interface ElementOverrides {
44+
elementOverrides: Record<string, OverrideConfig>;
45+
}
46+
47+
export type Config = ElementConfig & ElementOverrides;
48+
49+
export type ResolvedConfig = Config | OverrideConfig;
50+

0 commit comments

Comments
 (0)