@devup-ui/eslint-plugin 1.0.0 → 1.0.2
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/configs/recommended.cjs +1 -1
- package/dist/configs/recommended.d.ts +2 -0
- package/dist/configs/recommended.d.ts.map +1 -1
- package/dist/configs/recommended.js +10 -7
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/rules/index.cjs +1 -1
- package/dist/rules/index.d.ts +1 -0
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +10 -8
- package/dist/rules/no-duplicate-value/index.cjs +1 -1
- package/dist/rules/no-duplicate-value/index.js +8 -8
- package/dist/rules/no-useless-responsive/index.cjs +1 -1
- package/dist/rules/no-useless-responsive/index.d.ts.map +1 -1
- package/dist/rules/no-useless-responsive/index.js +3 -0
- package/dist/rules/no-useless-tailing-nulls/index.cjs +1 -1
- package/dist/rules/no-useless-tailing-nulls/index.js +10 -11
- package/dist/rules/style-order-range/index.cjs +1 -0
- package/dist/rules/style-order-range/index.d.ts +3 -0
- package/dist/rules/style-order-range/index.d.ts.map +1 -0
- package/dist/rules/style-order-range/index.js +95 -0
- package/dist/utils/import-storage.cjs +1 -1
- package/dist/utils/import-storage.js +21 -26
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../rules/css-utils-literal-only/index.cjs"),s=require("../rules/no-duplicate-value/index.cjs"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("../rules/css-utils-literal-only/index.cjs"),s=require("../rules/no-duplicate-value/index.cjs"),r=require("../rules/no-useless-responsive/index.cjs"),l=require("../rules/no-useless-tailing-nulls/index.cjs"),u=require("../rules/style-order-range/index.cjs"),i=[{plugins:{"@devup-ui":{rules:{"no-useless-tailing-nulls":l.noUselessTailingNulls,"css-utils-literal-only":e.cssUtilsLiteralOnly,"no-duplicate-value":s.noDuplicateValue,"no-useless-responsive":r.noUselessResponsive,"style-order-range":u.styleOrderRange}}},rules:{"@devup-ui/no-useless-tailing-nulls":"error","@devup-ui/css-utils-literal-only":"error","@devup-ui/no-duplicate-value":"error","@devup-ui/no-useless-responsive":"error","@devup-ui/style-order-range":"error"}}];exports.default=i;
|
|
@@ -7,6 +7,7 @@ declare const _default: {
|
|
|
7
7
|
'css-utils-literal-only': RuleModule<"cssUtilsLiteralOnly", [], unknown, RuleListener>;
|
|
8
8
|
'no-duplicate-value': RuleModule<"duplicateValue", [], unknown, RuleListener>;
|
|
9
9
|
'no-useless-responsive': RuleModule<"uselessResponsive", [], unknown, RuleListener>;
|
|
10
|
+
'style-order-range': RuleModule<"styleOrderRange", [], unknown, RuleListener>;
|
|
10
11
|
};
|
|
11
12
|
};
|
|
12
13
|
};
|
|
@@ -15,6 +16,7 @@ declare const _default: {
|
|
|
15
16
|
'@devup-ui/css-utils-literal-only': string;
|
|
16
17
|
'@devup-ui/no-duplicate-value': string;
|
|
17
18
|
'@devup-ui/no-useless-responsive': string;
|
|
19
|
+
'@devup-ui/style-order-range': string;
|
|
18
20
|
};
|
|
19
21
|
}[];
|
|
20
22
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommended.d.ts","sourceRoot":"","sources":["../../src/configs/recommended.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recommended.d.ts","sourceRoot":"","sources":["../../src/configs/recommended.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAQA,wBAqBC"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { cssUtilsLiteralOnly as e } from "../rules/css-utils-literal-only/index.js";
|
|
2
2
|
import { noDuplicateValue as s } from "../rules/no-duplicate-value/index.js";
|
|
3
|
-
import { noUselessResponsive as
|
|
4
|
-
import { noUselessTailingNulls as
|
|
5
|
-
|
|
3
|
+
import { noUselessResponsive as r } from "../rules/no-useless-responsive/index.js";
|
|
4
|
+
import { noUselessTailingNulls as l } from "../rules/no-useless-tailing-nulls/index.js";
|
|
5
|
+
import { styleOrderRange as o } from "../rules/style-order-range/index.js";
|
|
6
|
+
const a = [
|
|
6
7
|
{
|
|
7
8
|
plugins: {
|
|
8
9
|
"@devup-ui": {
|
|
9
10
|
rules: {
|
|
10
|
-
"no-useless-tailing-nulls":
|
|
11
|
+
"no-useless-tailing-nulls": l,
|
|
11
12
|
"css-utils-literal-only": e,
|
|
12
13
|
"no-duplicate-value": s,
|
|
13
|
-
"no-useless-responsive":
|
|
14
|
+
"no-useless-responsive": r,
|
|
15
|
+
"style-order-range": o
|
|
14
16
|
}
|
|
15
17
|
}
|
|
16
18
|
},
|
|
@@ -18,10 +20,11 @@ const t = [
|
|
|
18
20
|
"@devup-ui/no-useless-tailing-nulls": "error",
|
|
19
21
|
"@devup-ui/css-utils-literal-only": "error",
|
|
20
22
|
"@devup-ui/no-duplicate-value": "error",
|
|
21
|
-
"@devup-ui/no-useless-responsive": "error"
|
|
23
|
+
"@devup-ui/no-useless-responsive": "error",
|
|
24
|
+
"@devup-ui/style-order-range": "error"
|
|
22
25
|
}
|
|
23
26
|
}
|
|
24
27
|
];
|
|
25
28
|
export {
|
|
26
|
-
|
|
29
|
+
a as default
|
|
27
30
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare const configs: {
|
|
|
9
9
|
'css-utils-literal-only': RuleModule<"cssUtilsLiteralOnly", [], unknown, RuleListener>;
|
|
10
10
|
'no-duplicate-value': RuleModule<"duplicateValue", [], unknown, RuleListener>;
|
|
11
11
|
'no-useless-responsive': RuleModule<"uselessResponsive", [], unknown, RuleListener>;
|
|
12
|
+
'style-order-range': RuleModule<"styleOrderRange", [], unknown, RuleListener>;
|
|
12
13
|
};
|
|
13
14
|
};
|
|
14
15
|
};
|
|
@@ -17,6 +18,7 @@ export declare const configs: {
|
|
|
17
18
|
'@devup-ui/css-utils-literal-only': string;
|
|
18
19
|
'@devup-ui/no-duplicate-value': string;
|
|
19
20
|
'@devup-ui/no-useless-responsive': string;
|
|
21
|
+
'@devup-ui/style-order-range': string;
|
|
20
22
|
};
|
|
21
23
|
}[];
|
|
22
24
|
};
|
|
@@ -30,6 +32,7 @@ declare const _default: {
|
|
|
30
32
|
'css-utils-literal-only': RuleModule<"cssUtilsLiteralOnly", [], unknown, RuleListener>;
|
|
31
33
|
'no-duplicate-value': RuleModule<"duplicateValue", [], unknown, RuleListener>;
|
|
32
34
|
'no-useless-responsive': RuleModule<"uselessResponsive", [], unknown, RuleListener>;
|
|
35
|
+
'style-order-range': RuleModule<"styleOrderRange", [], unknown, RuleListener>;
|
|
33
36
|
};
|
|
34
37
|
};
|
|
35
38
|
};
|
|
@@ -38,6 +41,7 @@ declare const _default: {
|
|
|
38
41
|
'@devup-ui/css-utils-literal-only': string;
|
|
39
42
|
'@devup-ui/no-duplicate-value': string;
|
|
40
43
|
'@devup-ui/no-useless-responsive': string;
|
|
44
|
+
'@devup-ui/style-order-range': string;
|
|
41
45
|
};
|
|
42
46
|
}[];
|
|
43
47
|
};
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAEhC,eAAO,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAEhC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;CAEnB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAED,wBAEC"}
|
package/dist/rules/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./css-utils-literal-only/index.cjs"),s=require("./no-duplicate-value/index.cjs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./css-utils-literal-only/index.cjs"),s=require("./no-duplicate-value/index.cjs"),n=require("./no-useless-responsive/index.cjs"),i=require("./no-useless-tailing-nulls/index.cjs"),l=require("./style-order-range/index.cjs");exports.cssUtilsLiteralOnly=e.cssUtilsLiteralOnly;exports.noDuplicateValue=s.noDuplicateValue;exports.noUselessResponsive=n.noUselessResponsive;exports.noUselessTailingNulls=i.noUselessTailingNulls;exports.styleOrderRange=l.styleOrderRange;
|
package/dist/rules/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA"}
|
package/dist/rules/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { cssUtilsLiteralOnly as
|
|
2
|
-
import { noDuplicateValue as
|
|
3
|
-
import { noUselessResponsive as
|
|
4
|
-
import { noUselessTailingNulls as
|
|
1
|
+
import { cssUtilsLiteralOnly as r } from "./css-utils-literal-only/index.js";
|
|
2
|
+
import { noDuplicateValue as l } from "./no-duplicate-value/index.js";
|
|
3
|
+
import { noUselessResponsive as n } from "./no-useless-responsive/index.js";
|
|
4
|
+
import { noUselessTailingNulls as i } from "./no-useless-tailing-nulls/index.js";
|
|
5
|
+
import { styleOrderRange as f } from "./style-order-range/index.js";
|
|
5
6
|
export {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
r as cssUtilsLiteralOnly,
|
|
8
|
+
l as noDuplicateValue,
|
|
9
|
+
n as noUselessResponsive,
|
|
10
|
+
i as noUselessTailingNulls,
|
|
11
|
+
f as styleOrderRange
|
|
10
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("@typescript-eslint/utils"),r=require("../../utils/import-storage.cjs"),c=i.ESLintUtils.RuleCreator(l=>`https://github.com/dev-five-git/devup-ui/tree/main/packages/eslint-plugin/src/rules/${l}`);function s(l,a){for(let t=0;t<l.elements.length;t++){const e=l.elements[t];if(e?.type===i.AST_NODE_TYPES.Literal){if(t===0)continue;const n=l.elements[t-1];n?.type===i.AST_NODE_TYPES.Literal&&e.value===n.value&&e.value!==null&&a.report({node:l,messageId:"duplicateValue",data:{value:e.value},fix(u){return u.replaceText(e,"null")}})}}}const o=c({name:"no-duplicate-value",defaultOptions:[],meta:{schema:[],messages:{duplicateValue:"Duplicate value found: {{value}}."},type:"problem",fixable:"code",docs:{description:"No duplicate value."}},create(l){const a=new r.ImportStorage;let t=null;return{ImportDeclaration(e){a.addImportByDeclaration(e)},CallExpression(e){a.checkContextType(e)==="UTIL"&&e.arguments.length===1&&e.arguments[0].type===i.AST_NODE_TYPES.ObjectExpression&&(t=e)},"CallExpression:exit"(e){t===e&&(t=null)},JSXOpeningElement(e){a.checkContextType(e)==="COMPONENT"&&(t=e)},"JSXOpeningElement:exit"(e){t===e&&(t=null)},ArrayExpression(e){t&&s(e,l)}}}});exports.noDuplicateValue=o;
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { ESLintUtils as
|
|
1
|
+
import { ESLintUtils as u, AST_NODE_TYPES as i } from "@typescript-eslint/utils";
|
|
2
2
|
import { ImportStorage as p } from "../../utils/import-storage.js";
|
|
3
|
-
const c =
|
|
3
|
+
const c = u.RuleCreator(
|
|
4
4
|
(l) => `https://github.com/dev-five-git/devup-ui/tree/main/packages/eslint-plugin/src/rules/${l}`
|
|
5
5
|
);
|
|
6
6
|
function o(l, a) {
|
|
7
7
|
for (let t = 0; t < l.elements.length; t++) {
|
|
8
8
|
const e = l.elements[t];
|
|
9
|
-
if (
|
|
9
|
+
if (e?.type === i.Literal) {
|
|
10
10
|
if (t === 0) continue;
|
|
11
|
-
const
|
|
12
|
-
|
|
11
|
+
const n = l.elements[t - 1];
|
|
12
|
+
n?.type === i.Literal && e.value === n.value && e.value !== null && a.report({
|
|
13
13
|
node: l,
|
|
14
14
|
messageId: "duplicateValue",
|
|
15
15
|
data: {
|
|
16
16
|
value: e.value
|
|
17
17
|
},
|
|
18
|
-
fix(
|
|
19
|
-
return
|
|
18
|
+
fix(r) {
|
|
19
|
+
return r.replaceText(e, "null");
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
22
|
}
|
|
@@ -44,7 +44,7 @@ const f = c({
|
|
|
44
44
|
a.addImportByDeclaration(e);
|
|
45
45
|
},
|
|
46
46
|
CallExpression(e) {
|
|
47
|
-
a.checkContextType(e) === "UTIL" && e.arguments.length === 1 && e.arguments[0].type ===
|
|
47
|
+
a.checkContextType(e) === "UTIL" && e.arguments.length === 1 && e.arguments[0].type === i.ObjectExpression && (t = e);
|
|
48
48
|
},
|
|
49
49
|
"CallExpression:exit"(e) {
|
|
50
50
|
t === e && (t = null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("@typescript-eslint/utils"),o=require("../../utils/import-storage.cjs"),l=r.ESLintUtils.RuleCreator(t=>`https://github.com/dev-five-git/devup-ui/tree/main/packages/eslint-plugin/src/rules/${t}`);function a(t,n,s){if(t.elements.length!==1)return;const e=t.elements[0];for(const i of n)switch(i.type){case r.AST_NODE_TYPES.ConditionalExpression:if(n.indexOf(i.test)!==-1)return;break;case r.AST_NODE_TYPES.JSXExpressionContainer:case r.AST_NODE_TYPES.Property:case r.AST_NODE_TYPES.JSXOpeningElement:case r.AST_NODE_TYPES.CallExpression:case r.AST_NODE_TYPES.ObjectExpression:case r.AST_NODE_TYPES.JSXAttribute:break;default:return}s.report({node:t,messageId:"uselessResponsive",fix(i){return i.replaceText(t,s.sourceCode.getText(e))}})}const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("@typescript-eslint/utils"),o=require("../../utils/import-storage.cjs"),l=r.ESLintUtils.RuleCreator(t=>`https://github.com/dev-five-git/devup-ui/tree/main/packages/eslint-plugin/src/rules/${t}`);function a(t,n,s){if(t.elements.length!==1)return;const e=t.elements[0];for(const i of n)switch(i.type){case r.AST_NODE_TYPES.ConditionalExpression:if(n.indexOf(i.test)!==-1)return;break;case r.AST_NODE_TYPES.JSXExpressionContainer:case r.AST_NODE_TYPES.Property:case r.AST_NODE_TYPES.JSXOpeningElement:case r.AST_NODE_TYPES.CallExpression:case r.AST_NODE_TYPES.ObjectExpression:case r.AST_NODE_TYPES.JSXAttribute:break;default:return}s.report({node:t,messageId:"uselessResponsive",fix(i){return i.replaceText(t,s.sourceCode.getText(e))}})}const p=l({name:"no-useless-responsive",defaultOptions:[],meta:{schema:[],messages:{uselessResponsive:"Responsive are useless. Remove them."},type:"problem",fixable:"code",docs:{description:"No useless responsive."}},create(t){const n=new o.ImportStorage;let s=null;return{ImportDeclaration(e){n.addImportByDeclaration(e)},CallExpression(e){n.checkContextType(e)==="UTIL"&&e.arguments.length===1&&e.arguments[0].type===r.AST_NODE_TYPES.ObjectExpression&&(s=e)},"CallExpression:exit"(e){s===e&&(s=null)},JSXOpeningElement(e){n.checkContextType(e)==="COMPONENT"&&(s=e)},"JSXOpeningElement:exit"(e){s===e&&(s=null)},Property(e){s&&e.key.type===r.AST_NODE_TYPES.Identifier&&e.key.name==="imports"&&(s=null)},ArrayExpression(e){s&&a(e,t.sourceCode.getAncestors(e).slice(t.sourceCode.getAncestors(s).length),t)}}}});exports.noUselessResponsive=p;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/no-useless-responsive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAEZ,MAAM,0BAA0B,CAAA;AA4CjC,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/no-useless-responsive/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAEZ,MAAM,0BAA0B,CAAA;AA4CjC,eAAO,MAAM,mBAAmB,oFAqE9B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("@typescript-eslint/utils"),r=require("../../utils/import-storage.cjs"),a=n.ESLintUtils.RuleCreator(l=>`https://github.com/dev-five-git/devup-ui/tree/main/packages/eslint-plugin/src/rules/${l}`);function u(l,s){let t=0;for(let e=l.elements.length-1;e>=0;e--){const i=l.elements[e];if(i?.type===n.AST_NODE_TYPES.Literal&&i.value===null)t++;else break}t!==0&&s.report({node:l,messageId:"uselessTailingNulls",fix(e){return e.removeRange([l.elements.length>t?l.elements[l.elements.length-t-1].range[1]:l.elements[0].range[0],l.elements[l.elements.length-1].range[1]])}})}const g=a({name:"no-useless-tailing-nulls",defaultOptions:[],meta:{schema:[],messages:{uselessTailingNulls:"Trailing nulls are useless. Remove them."},type:"problem",fixable:"code",docs:{description:"No useless tailing nulls."}},create(l){const s=new r.ImportStorage;let t=null;return{ImportDeclaration(e){s.addImportByDeclaration(e)},CallExpression(e){s.checkContextType(e)==="UTIL"&&e.arguments.length===1&&e.arguments[0].type===n.AST_NODE_TYPES.ObjectExpression&&(t=e)},"CallExpression:exit"(e){t===e&&(t=null)},JSXOpeningElement(e){s.checkContextType(e)==="COMPONENT"&&(t=e)},"JSXOpeningElement:exit"(e){t===e&&(t=null)},ArrayExpression(e){t&&e.parent?.type!==n.AST_NODE_TYPES.MemberExpression&&u(e,l)}}}});exports.noUselessTailingNulls=g;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { ESLintUtils as r, AST_NODE_TYPES as
|
|
1
|
+
import { ESLintUtils as r, AST_NODE_TYPES as n } from "@typescript-eslint/utils";
|
|
2
2
|
import { ImportStorage as a } from "../../utils/import-storage.js";
|
|
3
3
|
const u = r.RuleCreator(
|
|
4
4
|
(l) => `https://github.com/dev-five-git/devup-ui/tree/main/packages/eslint-plugin/src/rules/${l}`
|
|
5
5
|
);
|
|
6
|
-
function m(l,
|
|
6
|
+
function m(l, s) {
|
|
7
7
|
let t = 0;
|
|
8
8
|
for (let e = l.elements.length - 1; e >= 0; e--) {
|
|
9
|
-
const
|
|
10
|
-
if (
|
|
9
|
+
const i = l.elements[e];
|
|
10
|
+
if (i?.type === n.Literal && i.value === null)
|
|
11
11
|
t++;
|
|
12
12
|
else
|
|
13
13
|
break;
|
|
14
14
|
}
|
|
15
|
-
t !== 0 &&
|
|
15
|
+
t !== 0 && s.report({
|
|
16
16
|
node: l,
|
|
17
17
|
messageId: "uselessTailingNulls",
|
|
18
18
|
fix(e) {
|
|
@@ -38,27 +38,26 @@ const o = u({
|
|
|
38
38
|
}
|
|
39
39
|
},
|
|
40
40
|
create(l) {
|
|
41
|
-
const
|
|
41
|
+
const s = new a();
|
|
42
42
|
let t = null;
|
|
43
43
|
return {
|
|
44
44
|
ImportDeclaration(e) {
|
|
45
|
-
|
|
45
|
+
s.addImportByDeclaration(e);
|
|
46
46
|
},
|
|
47
47
|
CallExpression(e) {
|
|
48
|
-
|
|
48
|
+
s.checkContextType(e) === "UTIL" && e.arguments.length === 1 && e.arguments[0].type === n.ObjectExpression && (t = e);
|
|
49
49
|
},
|
|
50
50
|
"CallExpression:exit"(e) {
|
|
51
51
|
t === e && (t = null);
|
|
52
52
|
},
|
|
53
53
|
JSXOpeningElement(e) {
|
|
54
|
-
|
|
54
|
+
s.checkContextType(e) === "COMPONENT" && (t = e);
|
|
55
55
|
},
|
|
56
56
|
"JSXOpeningElement:exit"(e) {
|
|
57
57
|
t === e && (t = null);
|
|
58
58
|
},
|
|
59
59
|
ArrayExpression(e) {
|
|
60
|
-
|
|
61
|
-
t && ((s = e.parent) == null ? void 0 : s.type) !== i.MemberExpression && m(e, l);
|
|
60
|
+
t && e.parent?.type !== n.MemberExpression && m(e, l);
|
|
62
61
|
}
|
|
63
62
|
};
|
|
64
63
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("@typescript-eslint/utils"),u=require("../../utils/import-storage.cjs"),s=a.ESLintUtils.RuleCreator(t=>`https://github.com/dev-five-git/devup-ui/tree/main/packages/eslint-plugin/src/rules/${t}`);function i(t,l){let r=null;if(t.type===a.AST_NODE_TYPES.Literal){if(typeof t.value=="number")r=t.value;else if(typeof t.value=="string"){const e=parseInt(t.value,10);isNaN(e)||(r=e)}}else if(t.type===a.AST_NODE_TYPES.UnaryExpression)if(t.argument.type===a.AST_NODE_TYPES.Literal&&typeof t.argument.value=="number"&&(t.operator==="-"||t.operator==="+"))r=t.operator==="-"?-t.argument.value:t.argument.value;else{l.report({node:t,messageId:"styleOrderRange"});return}else if(t.type===a.AST_NODE_TYPES.TemplateLiteral){if(t.expressions.length>0){l.report({node:t,messageId:"styleOrderRange"});return}else if(r=parseInt(t.quasis[0].value.raw,10),isNaN(r)){l.report({node:t,messageId:"styleOrderRange"});return}}(r===null||r<1||r>254)&&l.report({node:t,messageId:"styleOrderRange"})}const p=s({name:"style-order-range",defaultOptions:[],meta:{schema:[],messages:{styleOrderRange:"styleOrder prop must be a number greater than 0 and less than 255."},type:"problem",docs:{description:"Ensures styleOrder prop is within valid range (0 < value < 255)."}},create(t){const l=new u.ImportStorage;let r=null;return{ImportDeclaration(e){l.addImportByDeclaration(e)},CallExpression(e){l.checkContextType(e)==="UTIL"&&e.arguments.length===1&&e.arguments[0].type===a.AST_NODE_TYPES.ObjectExpression&&(r=e)},"CallExpression:exit"(e){r===e&&(r=null)},Property(e){if(r&&e.key.type===a.AST_NODE_TYPES.Identifier&&e.key.name==="styleOrder"){const n=e.value;n.type!==a.AST_NODE_TYPES.AssignmentPattern&&n.type!==a.AST_NODE_TYPES.TSEmptyBodyFunctionExpression&&i(n,t)}},JSXOpeningElement(e){l.checkContextType(e)==="COMPONENT"&&(r=e)},"JSXOpeningElement:exit"(e){r===e&&(r=null)},JSXAttribute(e){if(r&&!(e.name.type!==a.AST_NODE_TYPES.JSXIdentifier||e.name.name!=="styleOrder"||!e.value))if(e.value.type===a.AST_NODE_TYPES.JSXExpressionContainer){const n=e.value.expression;n.type!==a.AST_NODE_TYPES.JSXEmptyExpression&&i(n,t)}else e.value.type===a.AST_NODE_TYPES.Literal&&i(e.value,t)}}}});exports.styleOrderRange=p;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/style-order-range/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAEZ,MAAM,0BAA0B,CAAA;AAuEjC,eAAO,MAAM,eAAe,kFAuF1B,CAAA"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { ESLintUtils as u, AST_NODE_TYPES as a } from "@typescript-eslint/utils";
|
|
2
|
+
import { ImportStorage as s } from "../../utils/import-storage.js";
|
|
3
|
+
const p = u.RuleCreator(
|
|
4
|
+
(t) => `https://github.com/dev-five-git/devup-ui/tree/main/packages/eslint-plugin/src/rules/${t}`
|
|
5
|
+
);
|
|
6
|
+
function i(t, l) {
|
|
7
|
+
let r = null;
|
|
8
|
+
if (t.type === a.Literal) {
|
|
9
|
+
if (typeof t.value == "number")
|
|
10
|
+
r = t.value;
|
|
11
|
+
else if (typeof t.value == "string") {
|
|
12
|
+
const e = parseInt(t.value, 10);
|
|
13
|
+
isNaN(e) || (r = e);
|
|
14
|
+
}
|
|
15
|
+
} else if (t.type === a.UnaryExpression)
|
|
16
|
+
if (t.argument.type === a.Literal && typeof t.argument.value == "number" && (t.operator === "-" || t.operator === "+"))
|
|
17
|
+
r = t.operator === "-" ? -t.argument.value : t.argument.value;
|
|
18
|
+
else {
|
|
19
|
+
l.report({
|
|
20
|
+
node: t,
|
|
21
|
+
messageId: "styleOrderRange"
|
|
22
|
+
});
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
else if (t.type === a.TemplateLiteral) {
|
|
26
|
+
if (t.expressions.length > 0) {
|
|
27
|
+
l.report({
|
|
28
|
+
node: t,
|
|
29
|
+
messageId: "styleOrderRange"
|
|
30
|
+
});
|
|
31
|
+
return;
|
|
32
|
+
} else if (r = parseInt(t.quasis[0].value.raw, 10), isNaN(r)) {
|
|
33
|
+
l.report({
|
|
34
|
+
node: t,
|
|
35
|
+
messageId: "styleOrderRange"
|
|
36
|
+
});
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
(r === null || r < 1 || r > 254) && l.report({
|
|
41
|
+
node: t,
|
|
42
|
+
messageId: "styleOrderRange"
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const g = p({
|
|
46
|
+
name: "style-order-range",
|
|
47
|
+
defaultOptions: [],
|
|
48
|
+
meta: {
|
|
49
|
+
schema: [],
|
|
50
|
+
messages: {
|
|
51
|
+
styleOrderRange: "styleOrder prop must be a number greater than 0 and less than 255."
|
|
52
|
+
},
|
|
53
|
+
type: "problem",
|
|
54
|
+
docs: {
|
|
55
|
+
description: "Ensures styleOrder prop is within valid range (0 < value < 255)."
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
create(t) {
|
|
59
|
+
const l = new s();
|
|
60
|
+
let r = null;
|
|
61
|
+
return {
|
|
62
|
+
ImportDeclaration(e) {
|
|
63
|
+
l.addImportByDeclaration(e);
|
|
64
|
+
},
|
|
65
|
+
CallExpression(e) {
|
|
66
|
+
l.checkContextType(e) === "UTIL" && e.arguments.length === 1 && e.arguments[0].type === a.ObjectExpression && (r = e);
|
|
67
|
+
},
|
|
68
|
+
"CallExpression:exit"(e) {
|
|
69
|
+
r === e && (r = null);
|
|
70
|
+
},
|
|
71
|
+
Property(e) {
|
|
72
|
+
if (r && e.key.type === a.Identifier && e.key.name === "styleOrder") {
|
|
73
|
+
const n = e.value;
|
|
74
|
+
n.type !== a.AssignmentPattern && n.type !== a.TSEmptyBodyFunctionExpression && i(n, t);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
JSXOpeningElement(e) {
|
|
78
|
+
l.checkContextType(e) === "COMPONENT" && (r = e);
|
|
79
|
+
},
|
|
80
|
+
"JSXOpeningElement:exit"(e) {
|
|
81
|
+
r === e && (r = null);
|
|
82
|
+
},
|
|
83
|
+
JSXAttribute(e) {
|
|
84
|
+
if (r && !(e.name.type !== a.JSXIdentifier || e.name.name !== "styleOrder" || !e.value))
|
|
85
|
+
if (e.value.type === a.JSXExpressionContainer) {
|
|
86
|
+
const n = e.value.expression;
|
|
87
|
+
n.type !== a.JSXEmptyExpression && i(n, t);
|
|
88
|
+
} else e.value.type === a.Literal && i(e.value, t);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
export {
|
|
94
|
+
g as styleOrderRange
|
|
95
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@typescript-eslint/utils"),i={css:"css",globalCss:"globalCss",keyframes:"keyframes",Box:"Box",Button:"Button",Text:"Text",Image:"Image",Flex:"Flex",Grid:"Grid",Center:"Center",VStack:"VStack",Input:"Input"};class a{imports={};importObject=new Set;addImportByDeclaration(e){if(e.source.value==="@devup-ui/react")for(const r of e.specifiers)switch(r.type){case t.AST_NODE_TYPES.ImportSpecifier:this.addImport(r.local.name,r.imported.type===t.AST_NODE_TYPES.Literal?r.imported.value:r.imported.name);break;case t.AST_NODE_TYPES.ImportDefaultSpecifier:this.importObject.add(r.local.name);break;case t.AST_NODE_TYPES.ImportNamespaceSpecifier:this.importObject.add(r.local.name);break}}addImport(e,r){this.imports[e]=r}checkContextType(e){switch(e.type){case t.AST_NODE_TYPES.JSXOpeningElement:{if(this.checkDevupUIComponent(e.name))return"COMPONENT";break}case t.AST_NODE_TYPES.CallExpression:{if(this.checkDevupUIUtil(e))return"UTIL";break}}}checkDevupUIUtil(e){return e.callee.type===t.AST_NODE_TYPES.Identifier&&e.callee.name in this.imports||e.callee.type===t.AST_NODE_TYPES.MemberExpression&&e.callee.object.type===t.AST_NODE_TYPES.Identifier&&this.importObject.has(e.callee.object.name)&&e.callee.property.type===t.AST_NODE_TYPES.Identifier&&e.callee.property.name in i}checkDevupUIComponent(e){return e.type===t.AST_NODE_TYPES.JSXIdentifier&&e.name in this.imports||e.type===t.AST_NODE_TYPES.JSXMemberExpression&&e.object.type===t.AST_NODE_TYPES.JSXIdentifier&&this.importObject.has(e.object.name)&&e.property.name in i}}exports.ImportStorage=a;
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var a = (i, e, t) => s(i, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
-
import { AST_NODE_TYPES as r } from "@typescript-eslint/utils";
|
|
5
|
-
const p = {
|
|
1
|
+
import { AST_NODE_TYPES as t } from "@typescript-eslint/utils";
|
|
2
|
+
const i = {
|
|
6
3
|
css: "css",
|
|
7
4
|
globalCss: "globalCss",
|
|
8
5
|
keyframes: "keyframes",
|
|
@@ -16,40 +13,38 @@ const p = {
|
|
|
16
13
|
VStack: "VStack",
|
|
17
14
|
Input: "Input"
|
|
18
15
|
};
|
|
19
|
-
class
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
a(this, "importObject", /* @__PURE__ */ new Set());
|
|
23
|
-
}
|
|
16
|
+
class c {
|
|
17
|
+
imports = {};
|
|
18
|
+
importObject = /* @__PURE__ */ new Set();
|
|
24
19
|
addImportByDeclaration(e) {
|
|
25
20
|
if (e.source.value === "@devup-ui/react")
|
|
26
|
-
for (const
|
|
27
|
-
switch (
|
|
28
|
-
case
|
|
21
|
+
for (const r of e.specifiers)
|
|
22
|
+
switch (r.type) {
|
|
23
|
+
case t.ImportSpecifier:
|
|
29
24
|
this.addImport(
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
r.local.name,
|
|
26
|
+
r.imported.type === t.Literal ? r.imported.value : r.imported.name
|
|
32
27
|
);
|
|
33
28
|
break;
|
|
34
|
-
case
|
|
35
|
-
this.importObject.add(
|
|
29
|
+
case t.ImportDefaultSpecifier:
|
|
30
|
+
this.importObject.add(r.local.name);
|
|
36
31
|
break;
|
|
37
|
-
case
|
|
38
|
-
this.importObject.add(
|
|
32
|
+
case t.ImportNamespaceSpecifier:
|
|
33
|
+
this.importObject.add(r.local.name);
|
|
39
34
|
break;
|
|
40
35
|
}
|
|
41
36
|
}
|
|
42
|
-
addImport(e,
|
|
43
|
-
this.imports[e] =
|
|
37
|
+
addImport(e, r) {
|
|
38
|
+
this.imports[e] = r;
|
|
44
39
|
}
|
|
45
40
|
checkContextType(e) {
|
|
46
41
|
switch (e.type) {
|
|
47
|
-
case
|
|
42
|
+
case t.JSXOpeningElement: {
|
|
48
43
|
if (this.checkDevupUIComponent(e.name))
|
|
49
44
|
return "COMPONENT";
|
|
50
45
|
break;
|
|
51
46
|
}
|
|
52
|
-
case
|
|
47
|
+
case t.CallExpression: {
|
|
53
48
|
if (this.checkDevupUIUtil(e))
|
|
54
49
|
return "UTIL";
|
|
55
50
|
break;
|
|
@@ -57,12 +52,12 @@ class l {
|
|
|
57
52
|
}
|
|
58
53
|
}
|
|
59
54
|
checkDevupUIUtil(e) {
|
|
60
|
-
return e.callee.type ===
|
|
55
|
+
return e.callee.type === t.Identifier && e.callee.name in this.imports || e.callee.type === t.MemberExpression && e.callee.object.type === t.Identifier && this.importObject.has(e.callee.object.name) && e.callee.property.type === t.Identifier && e.callee.property.name in i;
|
|
61
56
|
}
|
|
62
57
|
checkDevupUIComponent(e) {
|
|
63
|
-
return e.type ===
|
|
58
|
+
return e.type === t.JSXIdentifier && e.name in this.imports || e.type === t.JSXMemberExpression && e.object.type === t.JSXIdentifier && this.importObject.has(e.object.name) && e.property.name in i;
|
|
64
59
|
}
|
|
65
60
|
}
|
|
66
61
|
export {
|
|
67
|
-
|
|
62
|
+
c as ImportStorage
|
|
68
63
|
};
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"react",
|
|
18
18
|
"eslint"
|
|
19
19
|
],
|
|
20
|
-
"version": "1.0.
|
|
20
|
+
"version": "1.0.2",
|
|
21
21
|
"main": "dist/index.cjs",
|
|
22
22
|
"type": "module",
|
|
23
23
|
"publishConfig": {
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
"dist"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"typescript-eslint": "^8.
|
|
38
|
-
"@typescript-eslint/utils": "^8.
|
|
37
|
+
"typescript-eslint": "^8.45",
|
|
38
|
+
"@typescript-eslint/utils": "^8.45"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@typescript-eslint/rule-tester": "^8.
|
|
42
|
-
"typescript": "^5.9.
|
|
41
|
+
"@typescript-eslint/rule-tester": "^8.45",
|
|
42
|
+
"typescript": "^5.9.3",
|
|
43
43
|
"vite": "^7.1.7",
|
|
44
44
|
"vite-plugin-dts": "^4.5.4"
|
|
45
45
|
},
|