@master/eslint-plugin-css 2.0.0-rc.72 → 2.0.0-rc.74
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/LICENSE +21 -0
- package/dist/configs/base.d.ts +5 -2
- package/dist/configs/base.js +5 -0
- package/dist/configs/legacy.d.ts +5 -2
- package/dist/configs/legacy.js +9 -0
- package/dist/configs/recommended.d.ts +5 -2
- package/dist/configs/recommended.js +13 -0
- package/dist/create-rule.d.ts +11 -4
- package/dist/create-rule.js +5 -0
- package/dist/index.d.ts +13 -10
- package/dist/index.js +17 -0
- package/dist/plugin.d.ts +5 -2
- package/dist/plugin.js +26 -0
- package/dist/rules/no-conflicting-classes.d.ts +4 -2
- package/dist/rules/no-conflicting-classes.js +76 -0
- package/dist/rules/no-invalid-classes.d.ts +5 -3
- package/dist/rules/no-invalid-classes.js +41 -0
- package/dist/rules/no-unapproved-raw-values.d.ts +7 -5
- package/dist/rules/no-unapproved-raw-values.js +61 -0
- package/dist/rules/prefer-canonical-classes.d.ts +6 -3
- package/dist/rules/prefer-canonical-classes.js +79 -0
- package/dist/rules/sort-classes.d.ts +4 -2
- package/dist/rules/sort-classes.js +40 -0
- package/dist/settings-schema.d.ts +7 -4
- package/dist/settings-schema.js +27 -0
- package/dist/settings.d.ts +16 -13
- package/dist/settings.js +8 -0
- package/dist/utils/define-visitors.d.ts +14 -7
- package/dist/utils/define-visitors.js +107 -0
- package/dist/utils/is-same-or-child-path.d.ts +4 -1
- package/dist/utils/is-same-or-child-path.js +8 -0
- package/dist/utils/master-css.d.ts +6 -4
- package/dist/utils/master-css.js +6 -0
- package/dist/utils/resolve-class-node.d.ts +22 -18
- package/dist/utils/resolve-class-node.js +85 -0
- package/dist/utils/resolve-context.d.ts +16 -12
- package/dist/utils/resolve-context.js +69 -0
- package/dist/utils/with-visit-class-node.d.ts +8 -4
- package/dist/utils/with-visit-class-node.js +51 -0
- package/package.json +78 -1
- package/dist/configs/base.cjs +0 -11
- package/dist/configs/base.mjs +0 -9
- package/dist/configs/legacy.cjs +0 -17
- package/dist/configs/legacy.mjs +0 -15
- package/dist/configs/recommended.cjs +0 -15
- package/dist/configs/recommended.mjs +0 -13
- package/dist/create-rule.cjs +0 -7
- package/dist/create-rule.mjs +0 -5
- package/dist/index.cjs +0 -19
- package/dist/index.mjs +0 -17
- package/dist/plugin.cjs +0 -30
- package/dist/plugin.mjs +0 -27
- package/dist/rules/no-conflicting-classes.cjs +0 -101
- package/dist/rules/no-conflicting-classes.mjs +0 -99
- package/dist/rules/no-invalid-classes.cjs +0 -51
- package/dist/rules/no-invalid-classes.mjs +0 -49
- package/dist/rules/no-unapproved-raw-values.cjs +0 -77
- package/dist/rules/no-unapproved-raw-values.mjs +0 -75
- package/dist/rules/prefer-canonical-classes.cjs +0 -112
- package/dist/rules/prefer-canonical-classes.mjs +0 -110
- package/dist/rules/sort-classes.cjs +0 -53
- package/dist/rules/sort-classes.mjs +0 -51
- package/dist/settings-schema.cjs +0 -38
- package/dist/settings-schema.mjs +0 -32
- package/dist/settings.cjs +0 -10
- package/dist/settings.mjs +0 -8
- package/dist/utils/define-visitors.cjs +0 -125
- package/dist/utils/define-visitors.mjs +0 -123
- package/dist/utils/is-same-or-child-path.cjs +0 -10
- package/dist/utils/is-same-or-child-path.mjs +0 -8
- package/dist/utils/master-css.cjs +0 -14
- package/dist/utils/master-css.mjs +0 -7
- package/dist/utils/resolve-class-node.cjs +0 -98
- package/dist/utils/resolve-class-node.mjs +0 -96
- package/dist/utils/resolve-context.cjs +0 -78
- package/dist/utils/resolve-context.mjs +0 -76
- package/dist/utils/with-visit-class-node.cjs +0 -57
- package/dist/utils/with-visit-class-node.mjs +0 -55
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var cssLexer = require('@master/css-lexer');
|
|
4
|
-
|
|
5
|
-
function resolveClassNode(node, context) {
|
|
6
|
-
const { sourceCode } = context;
|
|
7
|
-
let value = null;
|
|
8
|
-
let raw = null;
|
|
9
|
-
let start = null;
|
|
10
|
-
let end = null;
|
|
11
|
-
let unescape = false;
|
|
12
|
-
switch(node.type){
|
|
13
|
-
case 'Literal':
|
|
14
|
-
value = node.value;
|
|
15
|
-
raw = node.raw;
|
|
16
|
-
start = node.range[0];
|
|
17
|
-
end = node.range[1];
|
|
18
|
-
break;
|
|
19
|
-
case 'VLiteral':
|
|
20
|
-
value = node.value;
|
|
21
|
-
raw = sourceCode.getText(node);
|
|
22
|
-
start = node.range[0];
|
|
23
|
-
end = node.range[1];
|
|
24
|
-
break;
|
|
25
|
-
case 'TextAttribute':
|
|
26
|
-
value = node.value;
|
|
27
|
-
start = node.valueSpan.fullStart.offset;
|
|
28
|
-
end = node.valueSpan.end.offset;
|
|
29
|
-
raw = sourceCode.getText({
|
|
30
|
-
...node,
|
|
31
|
-
range: [
|
|
32
|
-
start,
|
|
33
|
-
end
|
|
34
|
-
]
|
|
35
|
-
});
|
|
36
|
-
break;
|
|
37
|
-
case 'SvelteLiteral':
|
|
38
|
-
value = node.value;
|
|
39
|
-
raw = sourceCode.getText(node);
|
|
40
|
-
start = node.range[0];
|
|
41
|
-
end = node.range[1];
|
|
42
|
-
break;
|
|
43
|
-
case 'TemplateElement':
|
|
44
|
-
if (node.parent.expressions.length) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
value = node.value.cooked;
|
|
48
|
-
raw = node.value.raw;
|
|
49
|
-
start = node.range[0] + 1;
|
|
50
|
-
end = node.range[1] - 1;
|
|
51
|
-
unescape = '`';
|
|
52
|
-
break;
|
|
53
|
-
default:
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (typeof value !== 'string') {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
if (/^(['"`])([\s\S]*)\1$/.test(raw)) {
|
|
60
|
-
unescape = raw[0];
|
|
61
|
-
raw = raw.slice(1, -1);
|
|
62
|
-
start = start + 1;
|
|
63
|
-
end = end - 1;
|
|
64
|
-
}
|
|
65
|
-
const nodes = cssLexer.parseMasterCSSClassList(raw, {
|
|
66
|
-
preserveSpaces: true,
|
|
67
|
-
unescape
|
|
68
|
-
}).map((item)=>{
|
|
69
|
-
const startOffset = start + item.start;
|
|
70
|
-
const endOffset = start + item.end;
|
|
71
|
-
return {
|
|
72
|
-
type: item.type,
|
|
73
|
-
value: item.token,
|
|
74
|
-
raw: item.raw,
|
|
75
|
-
range: [
|
|
76
|
-
startOffset,
|
|
77
|
-
endOffset
|
|
78
|
-
],
|
|
79
|
-
loc: {
|
|
80
|
-
start: sourceCode.getLocFromIndex(startOffset),
|
|
81
|
-
end: sourceCode.getLocFromIndex(endOffset)
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
});
|
|
85
|
-
const classNodes = nodes.filter((node)=>node.type === 'class');
|
|
86
|
-
return {
|
|
87
|
-
nodes,
|
|
88
|
-
start,
|
|
89
|
-
end,
|
|
90
|
-
raw,
|
|
91
|
-
value,
|
|
92
|
-
unescape,
|
|
93
|
-
classNodes,
|
|
94
|
-
classValues: classNodes.map((node)=>node.value)
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
module.exports = resolveClassNode;
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { parseMasterCSSClassList } from '@master/css-lexer';
|
|
2
|
-
|
|
3
|
-
function resolveClassNode(node, context) {
|
|
4
|
-
const { sourceCode } = context;
|
|
5
|
-
let value = null;
|
|
6
|
-
let raw = null;
|
|
7
|
-
let start = null;
|
|
8
|
-
let end = null;
|
|
9
|
-
let unescape = false;
|
|
10
|
-
switch(node.type){
|
|
11
|
-
case 'Literal':
|
|
12
|
-
value = node.value;
|
|
13
|
-
raw = node.raw;
|
|
14
|
-
start = node.range[0];
|
|
15
|
-
end = node.range[1];
|
|
16
|
-
break;
|
|
17
|
-
case 'VLiteral':
|
|
18
|
-
value = node.value;
|
|
19
|
-
raw = sourceCode.getText(node);
|
|
20
|
-
start = node.range[0];
|
|
21
|
-
end = node.range[1];
|
|
22
|
-
break;
|
|
23
|
-
case 'TextAttribute':
|
|
24
|
-
value = node.value;
|
|
25
|
-
start = node.valueSpan.fullStart.offset;
|
|
26
|
-
end = node.valueSpan.end.offset;
|
|
27
|
-
raw = sourceCode.getText({
|
|
28
|
-
...node,
|
|
29
|
-
range: [
|
|
30
|
-
start,
|
|
31
|
-
end
|
|
32
|
-
]
|
|
33
|
-
});
|
|
34
|
-
break;
|
|
35
|
-
case 'SvelteLiteral':
|
|
36
|
-
value = node.value;
|
|
37
|
-
raw = sourceCode.getText(node);
|
|
38
|
-
start = node.range[0];
|
|
39
|
-
end = node.range[1];
|
|
40
|
-
break;
|
|
41
|
-
case 'TemplateElement':
|
|
42
|
-
if (node.parent.expressions.length) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
value = node.value.cooked;
|
|
46
|
-
raw = node.value.raw;
|
|
47
|
-
start = node.range[0] + 1;
|
|
48
|
-
end = node.range[1] - 1;
|
|
49
|
-
unescape = '`';
|
|
50
|
-
break;
|
|
51
|
-
default:
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (typeof value !== 'string') {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
if (/^(['"`])([\s\S]*)\1$/.test(raw)) {
|
|
58
|
-
unescape = raw[0];
|
|
59
|
-
raw = raw.slice(1, -1);
|
|
60
|
-
start = start + 1;
|
|
61
|
-
end = end - 1;
|
|
62
|
-
}
|
|
63
|
-
const nodes = parseMasterCSSClassList(raw, {
|
|
64
|
-
preserveSpaces: true,
|
|
65
|
-
unescape
|
|
66
|
-
}).map((item)=>{
|
|
67
|
-
const startOffset = start + item.start;
|
|
68
|
-
const endOffset = start + item.end;
|
|
69
|
-
return {
|
|
70
|
-
type: item.type,
|
|
71
|
-
value: item.token,
|
|
72
|
-
raw: item.raw,
|
|
73
|
-
range: [
|
|
74
|
-
startOffset,
|
|
75
|
-
endOffset
|
|
76
|
-
],
|
|
77
|
-
loc: {
|
|
78
|
-
start: sourceCode.getLocFromIndex(startOffset),
|
|
79
|
-
end: sourceCode.getLocFromIndex(endOffset)
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
});
|
|
83
|
-
const classNodes = nodes.filter((node)=>node.type === 'class');
|
|
84
|
-
return {
|
|
85
|
-
nodes,
|
|
86
|
-
start,
|
|
87
|
-
end,
|
|
88
|
-
raw,
|
|
89
|
-
value,
|
|
90
|
-
unescape,
|
|
91
|
-
classNodes,
|
|
92
|
-
classValues: classNodes.map((node)=>node.value)
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export { resolveClassNode as default };
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var settings = require('../settings.cjs');
|
|
4
|
-
var masterCss = require('./master-css.cjs');
|
|
5
|
-
var entries = require('@master/css-project/entries');
|
|
6
|
-
var manifestSync = require('@master/css-project/manifest-sync');
|
|
7
|
-
var path = require('node:path');
|
|
8
|
-
var node_fs = require('node:fs');
|
|
9
|
-
var isSameOrChildPath = require('./is-same-or-child-path.cjs');
|
|
10
|
-
var cssValidator = require('@master/css-validator');
|
|
11
|
-
|
|
12
|
-
const cssCaches = [];
|
|
13
|
-
const workspaceDirectoriesByCwd = new Map();
|
|
14
|
-
function getContextFilename(context) {
|
|
15
|
-
const filename = context.physicalFilename || context.filename;
|
|
16
|
-
if (!filename || filename.startsWith('<')) return;
|
|
17
|
-
const resolvedFilename = path.isAbsolute(filename) ? filename : path.resolve(context.cwd, filename);
|
|
18
|
-
return node_fs.existsSync(resolvedFilename) ? resolvedFilename : undefined;
|
|
19
|
-
}
|
|
20
|
-
function getWorkspaceDirectories(cwd) {
|
|
21
|
-
let directories = workspaceDirectoriesByCwd.get(cwd);
|
|
22
|
-
if (!directories) {
|
|
23
|
-
directories = entries.findMasterCSSWorkspaceDirectoriesSync(cwd);
|
|
24
|
-
workspaceDirectoriesByCwd.set(cwd, directories);
|
|
25
|
-
}
|
|
26
|
-
return directories;
|
|
27
|
-
}
|
|
28
|
-
function findNearestPackageDirectory(filename) {
|
|
29
|
-
let directory = path.dirname(filename);
|
|
30
|
-
const root = path.parse(directory).root;
|
|
31
|
-
while(directory !== root){
|
|
32
|
-
if (node_fs.existsSync(path.join(directory, 'package.json'))) return directory;
|
|
33
|
-
directory = path.dirname(directory);
|
|
34
|
-
}
|
|
35
|
-
return path.dirname(filename);
|
|
36
|
-
}
|
|
37
|
-
function resolveSearchDirectory(context, filename) {
|
|
38
|
-
const cwd = path.resolve(context.cwd || process.cwd());
|
|
39
|
-
const root = path.parse(cwd).root;
|
|
40
|
-
if (cwd !== root && isSameOrChildPath(cwd, filename)) return cwd;
|
|
41
|
-
return findNearestPackageDirectory(filename);
|
|
42
|
-
}
|
|
43
|
-
function resolveWorkspaceDirectory(context, filename) {
|
|
44
|
-
const cwd = resolveSearchDirectory(context, filename);
|
|
45
|
-
let closestDirectory;
|
|
46
|
-
for (const directory of getWorkspaceDirectories(cwd)){
|
|
47
|
-
if (isSameOrChildPath(directory, filename) && (!closestDirectory || directory.length > closestDirectory.length)) {
|
|
48
|
-
closestDirectory = directory;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return closestDirectory || cwd;
|
|
52
|
-
}
|
|
53
|
-
function resolvePlan(workspaceDir, manifest) {
|
|
54
|
-
const result = manifestSync.loadProjectManifestSync(workspaceDir);
|
|
55
|
-
return result.entries.length ? result.manifest : manifest;
|
|
56
|
-
}
|
|
57
|
-
function resolveContext(context) {
|
|
58
|
-
const resolvedSettings = Object.assign({}, settings, context.settings?.['@master/css']);
|
|
59
|
-
const filename = getContextFilename(context);
|
|
60
|
-
const workspaceDir = filename ? resolveWorkspaceDirectory(context, filename) : context.cwd || process.cwd();
|
|
61
|
-
let css = cssCaches.find((cache)=>cache.manifest === resolvedSettings.manifest && cache.cwd === workspaceDir)?.css;
|
|
62
|
-
if (!css) {
|
|
63
|
-
const manifest = filename ? resolvePlan(workspaceDir, resolvedSettings.manifest) : resolvedSettings.manifest;
|
|
64
|
-
css = cssValidator.createCSSWithNativeDeclarations(manifest || masterCss.defaultManifest);
|
|
65
|
-
cssCaches.push({
|
|
66
|
-
cwd: workspaceDir,
|
|
67
|
-
manifest: resolvedSettings.manifest,
|
|
68
|
-
css
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
return {
|
|
72
|
-
settings: resolvedSettings,
|
|
73
|
-
options: context.options[0] || {},
|
|
74
|
-
css
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
module.exports = resolveContext;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import settings from '../settings.mjs';
|
|
2
|
-
import { defaultManifest } from './master-css.mjs';
|
|
3
|
-
import { findMasterCSSWorkspaceDirectoriesSync } from '@master/css-project/entries';
|
|
4
|
-
import { loadProjectManifestSync } from '@master/css-project/manifest-sync';
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
import { existsSync } from 'node:fs';
|
|
7
|
-
import isSameOrChildPath from './is-same-or-child-path.mjs';
|
|
8
|
-
import { createCSSWithNativeDeclarations } from '@master/css-validator';
|
|
9
|
-
|
|
10
|
-
const cssCaches = [];
|
|
11
|
-
const workspaceDirectoriesByCwd = new Map();
|
|
12
|
-
function getContextFilename(context) {
|
|
13
|
-
const filename = context.physicalFilename || context.filename;
|
|
14
|
-
if (!filename || filename.startsWith('<')) return;
|
|
15
|
-
const resolvedFilename = path.isAbsolute(filename) ? filename : path.resolve(context.cwd, filename);
|
|
16
|
-
return existsSync(resolvedFilename) ? resolvedFilename : undefined;
|
|
17
|
-
}
|
|
18
|
-
function getWorkspaceDirectories(cwd) {
|
|
19
|
-
let directories = workspaceDirectoriesByCwd.get(cwd);
|
|
20
|
-
if (!directories) {
|
|
21
|
-
directories = findMasterCSSWorkspaceDirectoriesSync(cwd);
|
|
22
|
-
workspaceDirectoriesByCwd.set(cwd, directories);
|
|
23
|
-
}
|
|
24
|
-
return directories;
|
|
25
|
-
}
|
|
26
|
-
function findNearestPackageDirectory(filename) {
|
|
27
|
-
let directory = path.dirname(filename);
|
|
28
|
-
const root = path.parse(directory).root;
|
|
29
|
-
while(directory !== root){
|
|
30
|
-
if (existsSync(path.join(directory, 'package.json'))) return directory;
|
|
31
|
-
directory = path.dirname(directory);
|
|
32
|
-
}
|
|
33
|
-
return path.dirname(filename);
|
|
34
|
-
}
|
|
35
|
-
function resolveSearchDirectory(context, filename) {
|
|
36
|
-
const cwd = path.resolve(context.cwd || process.cwd());
|
|
37
|
-
const root = path.parse(cwd).root;
|
|
38
|
-
if (cwd !== root && isSameOrChildPath(cwd, filename)) return cwd;
|
|
39
|
-
return findNearestPackageDirectory(filename);
|
|
40
|
-
}
|
|
41
|
-
function resolveWorkspaceDirectory(context, filename) {
|
|
42
|
-
const cwd = resolveSearchDirectory(context, filename);
|
|
43
|
-
let closestDirectory;
|
|
44
|
-
for (const directory of getWorkspaceDirectories(cwd)){
|
|
45
|
-
if (isSameOrChildPath(directory, filename) && (!closestDirectory || directory.length > closestDirectory.length)) {
|
|
46
|
-
closestDirectory = directory;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return closestDirectory || cwd;
|
|
50
|
-
}
|
|
51
|
-
function resolvePlan(workspaceDir, manifest) {
|
|
52
|
-
const result = loadProjectManifestSync(workspaceDir);
|
|
53
|
-
return result.entries.length ? result.manifest : manifest;
|
|
54
|
-
}
|
|
55
|
-
function resolveContext(context) {
|
|
56
|
-
const resolvedSettings = Object.assign({}, settings, context.settings?.['@master/css']);
|
|
57
|
-
const filename = getContextFilename(context);
|
|
58
|
-
const workspaceDir = filename ? resolveWorkspaceDirectory(context, filename) : context.cwd || process.cwd();
|
|
59
|
-
let css = cssCaches.find((cache)=>cache.manifest === resolvedSettings.manifest && cache.cwd === workspaceDir)?.css;
|
|
60
|
-
if (!css) {
|
|
61
|
-
const manifest = filename ? resolvePlan(workspaceDir, resolvedSettings.manifest) : resolvedSettings.manifest;
|
|
62
|
-
css = createCSSWithNativeDeclarations(manifest || defaultManifest);
|
|
63
|
-
cssCaches.push({
|
|
64
|
-
cwd: workspaceDir,
|
|
65
|
-
manifest: resolvedSettings.manifest,
|
|
66
|
-
css
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
return {
|
|
70
|
-
settings: resolvedSettings,
|
|
71
|
-
options: context.options[0] || {},
|
|
72
|
-
css
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export { resolveContext as default };
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var resolveClassNode = require('./resolve-class-node.cjs');
|
|
4
|
-
|
|
5
|
-
function withVisitClassNode(visit, context) {
|
|
6
|
-
const visitNode = (node)=>{
|
|
7
|
-
if (!node) return;
|
|
8
|
-
switch(node.type){
|
|
9
|
-
case 'BinaryExpression':
|
|
10
|
-
case 'Identifier':
|
|
11
|
-
return;
|
|
12
|
-
case 'TemplateLiteral':
|
|
13
|
-
node.expressions?.forEach(visitNode);
|
|
14
|
-
node.quasis.forEach(visitNode);
|
|
15
|
-
return;
|
|
16
|
-
case 'JSXExpressionContainer':
|
|
17
|
-
visitNode(node.expression);
|
|
18
|
-
return;
|
|
19
|
-
case 'ConditionalExpression':
|
|
20
|
-
visitNode(node.consequent);
|
|
21
|
-
visitNode(node.alternate);
|
|
22
|
-
return;
|
|
23
|
-
case 'ArrayExpression':
|
|
24
|
-
node.elements.forEach((el)=>{
|
|
25
|
-
visitNode(el);
|
|
26
|
-
});
|
|
27
|
-
return;
|
|
28
|
-
case 'LogicalExpression':
|
|
29
|
-
visitNode(node.right);
|
|
30
|
-
return;
|
|
31
|
-
case 'ObjectExpression':
|
|
32
|
-
node.properties.forEach((prop)=>{
|
|
33
|
-
visitNode(prop);
|
|
34
|
-
});
|
|
35
|
-
return;
|
|
36
|
-
case 'Property':
|
|
37
|
-
if (node.shorthand) return;
|
|
38
|
-
if (node.value && [
|
|
39
|
-
'Literal',
|
|
40
|
-
'ArrayExpression',
|
|
41
|
-
'ObjectExpression'
|
|
42
|
-
].includes(node.value.type) && typeof node.value?.value !== 'boolean') {
|
|
43
|
-
visitNode(node.value);
|
|
44
|
-
} else if (node.key.type === 'Literal') {
|
|
45
|
-
visitNode(node.key);
|
|
46
|
-
}
|
|
47
|
-
return;
|
|
48
|
-
default:
|
|
49
|
-
const resolved = resolveClassNode(node, context);
|
|
50
|
-
if (!resolved) return;
|
|
51
|
-
visit(node, resolved);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
return visitNode;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
module.exports = withVisitClassNode;
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import resolveClassNode from './resolve-class-node.mjs';
|
|
2
|
-
|
|
3
|
-
function withVisitClassNode(visit, context) {
|
|
4
|
-
const visitNode = (node)=>{
|
|
5
|
-
if (!node) return;
|
|
6
|
-
switch(node.type){
|
|
7
|
-
case 'BinaryExpression':
|
|
8
|
-
case 'Identifier':
|
|
9
|
-
return;
|
|
10
|
-
case 'TemplateLiteral':
|
|
11
|
-
node.expressions?.forEach(visitNode);
|
|
12
|
-
node.quasis.forEach(visitNode);
|
|
13
|
-
return;
|
|
14
|
-
case 'JSXExpressionContainer':
|
|
15
|
-
visitNode(node.expression);
|
|
16
|
-
return;
|
|
17
|
-
case 'ConditionalExpression':
|
|
18
|
-
visitNode(node.consequent);
|
|
19
|
-
visitNode(node.alternate);
|
|
20
|
-
return;
|
|
21
|
-
case 'ArrayExpression':
|
|
22
|
-
node.elements.forEach((el)=>{
|
|
23
|
-
visitNode(el);
|
|
24
|
-
});
|
|
25
|
-
return;
|
|
26
|
-
case 'LogicalExpression':
|
|
27
|
-
visitNode(node.right);
|
|
28
|
-
return;
|
|
29
|
-
case 'ObjectExpression':
|
|
30
|
-
node.properties.forEach((prop)=>{
|
|
31
|
-
visitNode(prop);
|
|
32
|
-
});
|
|
33
|
-
return;
|
|
34
|
-
case 'Property':
|
|
35
|
-
if (node.shorthand) return;
|
|
36
|
-
if (node.value && [
|
|
37
|
-
'Literal',
|
|
38
|
-
'ArrayExpression',
|
|
39
|
-
'ObjectExpression'
|
|
40
|
-
].includes(node.value.type) && typeof node.value?.value !== 'boolean') {
|
|
41
|
-
visitNode(node.value);
|
|
42
|
-
} else if (node.key.type === 'Literal') {
|
|
43
|
-
visitNode(node.key);
|
|
44
|
-
}
|
|
45
|
-
return;
|
|
46
|
-
default:
|
|
47
|
-
const resolved = resolveClassNode(node, context);
|
|
48
|
-
if (!resolved) return;
|
|
49
|
-
visit(node, resolved);
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
return visitNode;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export { withVisitClassNode as default };
|