@ikas/component-cli 1.4.0-beta.114 → 1.4.0-beta.116
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/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +314 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +2 -0
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +1 -0
- package/dist/commands/publish.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/websocket-server.d.ts +7 -0
- package/dist/utils/websocket-server.d.ts.map +1 -1
- package/dist/utils/websocket-server.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/create.d.ts +0 -4
- package/dist/commands/create.d.ts.map +0 -1
- package/dist/commands/create.js +0 -176
- package/dist/commands/create.js.map +0 -1
- package/dist/utils/__tests__/detect-theme-global-name-lookup.test.d.ts +0 -2
- package/dist/utils/__tests__/detect-theme-global-name-lookup.test.d.ts.map +0 -1
- package/dist/utils/__tests__/detect-theme-global-name-lookup.test.js +0 -83
- package/dist/utils/__tests__/detect-theme-global-name-lookup.test.js.map +0 -1
- package/dist/utils/detect-theme-global-name-lookup.d.ts +0 -38
- package/dist/utils/detect-theme-global-name-lookup.d.ts.map +0 -1
- package/dist/utils/detect-theme-global-name-lookup.js +0 -173
- package/dist/utils/detect-theme-global-name-lookup.js.map +0 -1
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import * as ts from "typescript";
|
|
2
|
-
// SDK accessors that return a LIST of tokens, each carrying a non-unique `name`.
|
|
3
|
-
// `getThemeSetting`/`getThemeSettingValue` are intentionally excluded: they take a
|
|
4
|
-
// stable key argument, not a name, so they cannot be name-filtered. Duplicated here
|
|
5
|
-
// (not imported from editor-core) because the CLI ships standalone to npm — same
|
|
6
|
-
// convention as the duplicated CSS scoper in compile.ts.
|
|
7
|
-
const LIST_ACCESSORS = new Set([
|
|
8
|
-
"getThemeColors",
|
|
9
|
-
"getThemeKeyframes",
|
|
10
|
-
"getThemeTypography",
|
|
11
|
-
"getThemeBreakpoints",
|
|
12
|
-
"getThemeSettings",
|
|
13
|
-
"getThemeColorSchemes",
|
|
14
|
-
]);
|
|
15
|
-
// Array methods that take a per-element predicate/callback where a `.name` compare
|
|
16
|
-
// would live. `map`/`forEach`/`reduce` are included because a name compare can hide
|
|
17
|
-
// in any of them (e.g. `getThemeColors().map(c => c.name === target ? ... : ...)`).
|
|
18
|
-
const ARRAY_CALLBACK_METHODS = new Set([
|
|
19
|
-
"find",
|
|
20
|
-
"filter",
|
|
21
|
-
"some",
|
|
22
|
-
"every",
|
|
23
|
-
"findIndex",
|
|
24
|
-
"findLast",
|
|
25
|
-
"findLastIndex",
|
|
26
|
-
"forEach",
|
|
27
|
-
"map",
|
|
28
|
-
"flatMap",
|
|
29
|
-
"reduce",
|
|
30
|
-
]);
|
|
31
|
-
// Token properties whose comparison signals a by-name lookup. `name` and the
|
|
32
|
-
// settings token's `displayName` are the human labels; everything stable
|
|
33
|
-
// (`id`/`ref`/`cssVar`/`className`) is fine and intentionally NOT listed.
|
|
34
|
-
const NAME_PROPS = new Set(["name", "displayName"]);
|
|
35
|
-
/** The accessor name if `node` is (or unwraps to) a call to a LIST_ACCESSOR, else undefined. */
|
|
36
|
-
function listAccessorOf(node) {
|
|
37
|
-
// Unwrap `getThemeColorSchemes().values` / `.schemes` and parenthesized forms so the
|
|
38
|
-
// underlying accessor call is still recognized.
|
|
39
|
-
let expr = node;
|
|
40
|
-
if (ts.isParenthesizedExpression(expr))
|
|
41
|
-
expr = expr.expression;
|
|
42
|
-
if (ts.isPropertyAccessExpression(expr))
|
|
43
|
-
expr = expr.expression;
|
|
44
|
-
if (ts.isParenthesizedExpression(expr))
|
|
45
|
-
expr = expr.expression;
|
|
46
|
-
if (!ts.isCallExpression(expr))
|
|
47
|
-
return undefined;
|
|
48
|
-
const callee = expr.expression;
|
|
49
|
-
const name = ts.isIdentifier(callee)
|
|
50
|
-
? callee.text
|
|
51
|
-
: ts.isPropertyAccessExpression(callee)
|
|
52
|
-
? callee.name.text
|
|
53
|
-
: undefined;
|
|
54
|
-
return name && LIST_ACCESSORS.has(name) ? name : undefined;
|
|
55
|
-
}
|
|
56
|
-
/** Collect local `const x = getTheme*()` bindings so var-stored results are also tracked. */
|
|
57
|
-
function collectAccessorBoundVars(sourceFile) {
|
|
58
|
-
const bound = new Map();
|
|
59
|
-
const visit = (node) => {
|
|
60
|
-
if (ts.isVariableDeclaration(node) &&
|
|
61
|
-
node.initializer &&
|
|
62
|
-
ts.isIdentifier(node.name)) {
|
|
63
|
-
const accessor = listAccessorOf(node.initializer);
|
|
64
|
-
if (accessor)
|
|
65
|
-
bound.set(node.name.text, accessor);
|
|
66
|
-
}
|
|
67
|
-
ts.forEachChild(node, visit);
|
|
68
|
-
};
|
|
69
|
-
visit(sourceFile);
|
|
70
|
-
return bound;
|
|
71
|
-
}
|
|
72
|
-
/** True if the callback compares its iterated element's `.name`/`.displayName`. */
|
|
73
|
-
function callbackComparesName(callback, sourceFile) {
|
|
74
|
-
if (!ts.isArrowFunction(callback) && !ts.isFunctionExpression(callback))
|
|
75
|
-
return false;
|
|
76
|
-
const firstParam = callback.parameters[0];
|
|
77
|
-
if (!firstParam)
|
|
78
|
-
return false;
|
|
79
|
-
// Element accessed as `param.name` — the common `c => c.name === ...` form.
|
|
80
|
-
const paramName = ts.isIdentifier(firstParam.name) ? firstParam.name.text : undefined;
|
|
81
|
-
// Element destructured as `({ name }) => name === ...`.
|
|
82
|
-
const destructuredNames = new Set();
|
|
83
|
-
if (ts.isObjectBindingPattern(firstParam.name)) {
|
|
84
|
-
for (const el of firstParam.name.elements) {
|
|
85
|
-
const prop = el.propertyName ?? el.name;
|
|
86
|
-
if (ts.isIdentifier(prop) && NAME_PROPS.has(prop.text)) {
|
|
87
|
-
if (ts.isIdentifier(el.name))
|
|
88
|
-
destructuredNames.add(el.name.text);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (!paramName && destructuredNames.size === 0)
|
|
93
|
-
return false;
|
|
94
|
-
let found = false;
|
|
95
|
-
const visit = (node) => {
|
|
96
|
-
if (found)
|
|
97
|
-
return;
|
|
98
|
-
// `param.name` / `param.displayName` referenced anywhere in the body.
|
|
99
|
-
if (paramName &&
|
|
100
|
-
ts.isPropertyAccessExpression(node) &&
|
|
101
|
-
ts.isIdentifier(node.expression) &&
|
|
102
|
-
node.expression.text === paramName &&
|
|
103
|
-
NAME_PROPS.has(node.name.text)) {
|
|
104
|
-
found = true;
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
// A destructured `name`/`displayName` identifier used in an equality compare.
|
|
108
|
-
if (destructuredNames.size > 0 && ts.isBinaryExpression(node)) {
|
|
109
|
-
const op = node.operatorToken.kind;
|
|
110
|
-
const isEq = op === ts.SyntaxKind.EqualsEqualsEqualsToken ||
|
|
111
|
-
op === ts.SyntaxKind.EqualsEqualsToken ||
|
|
112
|
-
op === ts.SyntaxKind.ExclamationEqualsEqualsToken ||
|
|
113
|
-
op === ts.SyntaxKind.ExclamationEqualsToken;
|
|
114
|
-
if (isEq) {
|
|
115
|
-
for (const side of [node.left, node.right]) {
|
|
116
|
-
if (ts.isIdentifier(side) && destructuredNames.has(side.text)) {
|
|
117
|
-
found = true;
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
ts.forEachChild(node, visit);
|
|
124
|
-
};
|
|
125
|
-
visit(callback);
|
|
126
|
-
return found;
|
|
127
|
-
}
|
|
128
|
-
function oneLineSnippet(node, sourceFile) {
|
|
129
|
-
const text = node.getText(sourceFile).replace(/\s+/g, " ").trim();
|
|
130
|
-
return text.length > 120 ? `${text.slice(0, 117)}...` : text;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Scan one source file's text and return findings for any by-name theme-global
|
|
134
|
-
* lookup. Resilient: a parse failure yields no findings (the lint never blocks a build).
|
|
135
|
-
*/
|
|
136
|
-
export function detectThemeGlobalNameLookup(sourceText, fileName) {
|
|
137
|
-
if (!sourceText.includes("getTheme"))
|
|
138
|
-
return [];
|
|
139
|
-
const findings = [];
|
|
140
|
-
try {
|
|
141
|
-
const sourceFile = ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.Latest,
|
|
142
|
-
/* setParentNodes */ true, fileName.endsWith(".tsx") || fileName.endsWith(".jsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
143
|
-
const boundVars = collectAccessorBoundVars(sourceFile);
|
|
144
|
-
const visit = (node) => {
|
|
145
|
-
// Looking for `<arraySource>.<method>(<callback>)`.
|
|
146
|
-
if (ts.isCallExpression(node) &&
|
|
147
|
-
ts.isPropertyAccessExpression(node.expression) &&
|
|
148
|
-
ARRAY_CALLBACK_METHODS.has(node.expression.name.text) &&
|
|
149
|
-
node.arguments.length > 0) {
|
|
150
|
-
const arraySource = node.expression.expression;
|
|
151
|
-
// (a) direct chain on an accessor call, or (b) a var bound to an accessor result.
|
|
152
|
-
const accessor = listAccessorOf(arraySource) ??
|
|
153
|
-
(ts.isIdentifier(arraySource) ? boundVars.get(arraySource.text) : undefined);
|
|
154
|
-
if (accessor && callbackComparesName(node.arguments[0], sourceFile)) {
|
|
155
|
-
const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
|
|
156
|
-
findings.push({
|
|
157
|
-
file: fileName,
|
|
158
|
-
line: line + 1,
|
|
159
|
-
accessor,
|
|
160
|
-
snippet: oneLineSnippet(node, sourceFile),
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
ts.forEachChild(node, visit);
|
|
165
|
-
};
|
|
166
|
-
visit(sourceFile);
|
|
167
|
-
}
|
|
168
|
-
catch {
|
|
169
|
-
return [];
|
|
170
|
-
}
|
|
171
|
-
return findings;
|
|
172
|
-
}
|
|
173
|
-
//# sourceMappingURL=detect-theme-global-name-lookup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"detect-theme-global-name-lookup.js","sourceRoot":"","sources":["../../src/utils/detect-theme-global-name-lookup.ts"],"names":[],"mappings":"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"}
|