zyzz 0.0.18 → 0.0.19
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/oxlint/index.d.ts +6 -0
- package/dist/oxlint/index.d.ts.map +1 -0
- package/dist/oxlint/index.js +18 -0
- package/dist/oxlint/index.js.map +1 -0
- package/dist/oxlint/internal/Bindings.d.ts +20 -0
- package/dist/oxlint/internal/Bindings.d.ts.map +1 -0
- package/dist/oxlint/internal/Bindings.js +203 -0
- package/dist/oxlint/internal/Bindings.js.map +1 -0
- package/dist/oxlint/internal/Declarations.d.ts +19 -0
- package/dist/oxlint/internal/Declarations.d.ts.map +1 -0
- package/dist/oxlint/internal/Declarations.js +114 -0
- package/dist/oxlint/internal/Declarations.js.map +1 -0
- package/dist/oxlint/rules/noConflictingProps.d.ts +5 -0
- package/dist/oxlint/rules/noConflictingProps.d.ts.map +1 -0
- package/dist/oxlint/rules/noConflictingProps.js +45 -0
- package/dist/oxlint/rules/noConflictingProps.js.map +1 -0
- package/dist/oxlint/rules/noUnused.d.ts +5 -0
- package/dist/oxlint/rules/noUnused.d.ts.map +1 -0
- package/dist/oxlint/rules/noUnused.js +62 -0
- package/dist/oxlint/rules/noUnused.js.map +1 -0
- package/dist/oxlint/rules/restrictedProperties.d.ts +5 -0
- package/dist/oxlint/rules/restrictedProperties.d.ts.map +1 -0
- package/dist/oxlint/rules/restrictedProperties.js +82 -0
- package/dist/oxlint/rules/restrictedProperties.js.map +1 -0
- package/dist/oxlint/rules/useLogicalProperties.d.ts +5 -0
- package/dist/oxlint/rules/useLogicalProperties.d.ts.map +1 -0
- package/dist/oxlint/rules/useLogicalProperties.js +76 -0
- package/dist/oxlint/rules/useLogicalProperties.js.map +1 -0
- package/dist/oxlint/rules/validStyles.d.ts +5 -0
- package/dist/oxlint/rules/validStyles.d.ts.map +1 -0
- package/dist/oxlint/rules/validStyles.js +75 -0
- package/dist/oxlint/rules/validStyles.js.map +1 -0
- package/package.json +7 -1
- package/src/oxlint/index.ts +21 -0
- package/src/oxlint/internal/Bindings.ts +270 -0
- package/src/oxlint/internal/Declarations.ts +137 -0
- package/src/oxlint/rules/noConflictingProps.ts +52 -0
- package/src/oxlint/rules/noUnused.ts +67 -0
- package/src/oxlint/rules/restrictedProperties.ts +92 -0
- package/src/oxlint/rules/useLogicalProperties.ts +81 -0
- package/src/oxlint/rules/validStyles.ts +88 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Exposes opt-in Oxlint rules for Zyzz web authoring. @module */
|
|
2
|
+
import type { Plugin } from '@oxlint/plugins';
|
|
3
|
+
/** Register through jsPlugins and enable individual zyzz/* rules in the lint configuration. */
|
|
4
|
+
declare const plugin: Plugin;
|
|
5
|
+
export default plugin;
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/oxlint/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAO7C,+FAA+F;AAC/F,QAAA,MAAM,MAAM,EAAE,MASb,CAAA;eAEc,MAAM"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { noConflictingProps } from './rules/noConflictingProps.js';
|
|
2
|
+
import { noUnused } from './rules/noUnused.js';
|
|
3
|
+
import { restrictedProperties } from './rules/restrictedProperties.js';
|
|
4
|
+
import { useLogicalProperties } from './rules/useLogicalProperties.js';
|
|
5
|
+
import { validStyles } from './rules/validStyles.js';
|
|
6
|
+
/** Register through jsPlugins and enable individual zyzz/* rules in the lint configuration. */
|
|
7
|
+
const plugin = {
|
|
8
|
+
meta: { name: 'zyzz' },
|
|
9
|
+
rules: {
|
|
10
|
+
'no-conflicting-props': noConflictingProps,
|
|
11
|
+
'no-unused': noUnused,
|
|
12
|
+
'restricted-properties': restrictedProperties,
|
|
13
|
+
'use-logical-properties': useLogicalProperties,
|
|
14
|
+
'valid-styles': validStyles,
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
export default plugin;
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oxlint/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,+FAA+F;AAC/F,MAAM,MAAM,GAAW;IACrB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IACtB,KAAK,EAAE;QACL,sBAAsB,EAAE,kBAAkB;QAC1C,WAAW,EAAE,QAAQ;QACrB,uBAAuB,EAAE,oBAAoB;QAC7C,wBAAwB,EAAE,oBAAoB;QAC9C,cAAc,EAAE,WAAW;KAC5B;CACF,CAAA;AAED,eAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Resolves immutable authoring bindings without loading or evaluating modules. @module */
|
|
2
|
+
import type { Context, ESTree, Variable } from '@oxlint/plugins';
|
|
3
|
+
/** A recognized helper or locally declared style. */
|
|
4
|
+
export type Binding = {
|
|
5
|
+
readonly kind: 'config' | 'configFactory' | 'configNamespace' | 'cx' | 'definition' | 'module' | 'style' | 'variants';
|
|
6
|
+
readonly themed: boolean;
|
|
7
|
+
};
|
|
8
|
+
/** Resolves helpers using lexical scope, configuration filenames, and explicit import sources. */
|
|
9
|
+
export declare function create(context: Context): {
|
|
10
|
+
expression: (node: ESTree.Node, seen?: Set<ESTree.Node>) => ESTree.Node;
|
|
11
|
+
resolve: (node: ESTree.Node, seen?: Set<ESTree.Node>) => Binding | undefined;
|
|
12
|
+
variable: (node: Extract<ESTree.Node, {
|
|
13
|
+
type: 'Identifier';
|
|
14
|
+
}>) => Variable | undefined;
|
|
15
|
+
};
|
|
16
|
+
/** Resolves only literal property names, never computed identifiers. */
|
|
17
|
+
export declare function key(node: ESTree.ObjectProperty | ESTree.BindingProperty | ESTree.MemberExpression): string | undefined;
|
|
18
|
+
/** Removes type-only wrappers while retaining the original source node. */
|
|
19
|
+
export declare function unwrap(node: ESTree.Node): ESTree.Node;
|
|
20
|
+
//# sourceMappingURL=Bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bindings.d.ts","sourceRoot":"","sources":["../../../src/oxlint/internal/Bindings.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAEhE,qDAAqD;AACrD,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EACT,QAAQ,GACR,eAAe,GACf,iBAAiB,GACjB,IAAI,GACJ,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,UAAU,CAAA;IACd,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,kGAAkG;AAClG,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO;uBAkF7B,MAAM,CAAC,IAAI,8BAEhB,MAAM,CAAC,IAAI;oBAkCN,MAAM,CAAC,IAAI,8BAEhB,OAAO,GAAG,SAAS;qBA7Gd,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC,KACjD,QAAQ,GAAG,SAAS;EAoNxB;AAED,wEAAwE;AACxE,wBAAgB,GAAG,CACjB,IAAI,EACA,MAAM,CAAC,cAAc,GACrB,MAAM,CAAC,eAAe,GACtB,MAAM,CAAC,gBAAgB,GAC1B,MAAM,GAAG,SAAS,CAMpB;AAED,2EAA2E;AAC3E,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAUrD"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/** Resolves helpers using lexical scope, configuration filenames, and explicit import sources. */
|
|
2
|
+
export function create(context) {
|
|
3
|
+
const settings = context.settings.zyzz;
|
|
4
|
+
const imports = new Set(['zyzz', 'zyzz/default']);
|
|
5
|
+
if (settings && typeof settings === 'object' && !Array.isArray(settings)) {
|
|
6
|
+
const sources = settings.imports;
|
|
7
|
+
if (Array.isArray(sources))
|
|
8
|
+
for (const source of sources)
|
|
9
|
+
if (typeof source === 'string')
|
|
10
|
+
imports.add(source);
|
|
11
|
+
}
|
|
12
|
+
function variable(node) {
|
|
13
|
+
let scope = context.sourceCode.getScope(node);
|
|
14
|
+
while (scope) {
|
|
15
|
+
const found = scope.set.get(node.name);
|
|
16
|
+
if (found)
|
|
17
|
+
return found;
|
|
18
|
+
if (!scope.upper)
|
|
19
|
+
break;
|
|
20
|
+
scope = scope.upper;
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
function initializer(node) {
|
|
25
|
+
const binding = variable(node);
|
|
26
|
+
if (!binding || binding.defs.length !== 1)
|
|
27
|
+
return undefined;
|
|
28
|
+
const definition = binding.defs[0];
|
|
29
|
+
if (definition.node.type !== 'VariableDeclarator')
|
|
30
|
+
return undefined;
|
|
31
|
+
if (definition.node.parent.type !== 'VariableDeclaration' ||
|
|
32
|
+
definition.node.parent.kind !== 'const')
|
|
33
|
+
return undefined;
|
|
34
|
+
if (binding.references.some((reference) => reference.isWrite() && !reference.init))
|
|
35
|
+
return undefined;
|
|
36
|
+
if (definition.node.id.type !== 'Identifier')
|
|
37
|
+
return undefined;
|
|
38
|
+
const input = definition.node.init && unwrap(definition.node.init);
|
|
39
|
+
if (input?.type === 'ArrayExpression' ||
|
|
40
|
+
input?.type === 'ObjectExpression') {
|
|
41
|
+
const mutable = binding.references.some((reference) => {
|
|
42
|
+
let value = reference.identifier;
|
|
43
|
+
while (value.parent &&
|
|
44
|
+
((value.parent.type === 'MemberExpression' &&
|
|
45
|
+
value.parent.object === value) ||
|
|
46
|
+
unwrap(value.parent) === value))
|
|
47
|
+
value = value.parent;
|
|
48
|
+
const parent = value.parent;
|
|
49
|
+
if (parent?.type === 'ArrayExpression' ||
|
|
50
|
+
(parent?.type === 'Property' && parent.value === value))
|
|
51
|
+
return true;
|
|
52
|
+
if (parent?.type === 'AssignmentExpression' && parent.left === value)
|
|
53
|
+
return true;
|
|
54
|
+
if (parent?.type === 'UpdateExpression' ||
|
|
55
|
+
(parent?.type === 'UnaryExpression' && parent.operator === 'delete'))
|
|
56
|
+
return true;
|
|
57
|
+
if (parent?.type === 'CallExpression') {
|
|
58
|
+
if (parent.callee === value)
|
|
59
|
+
return true;
|
|
60
|
+
const callee = resolve(parent.callee);
|
|
61
|
+
return callee?.kind !== 'style' && callee?.kind !== 'variants';
|
|
62
|
+
}
|
|
63
|
+
return parent?.type === 'VariableDeclarator' && parent.init === value;
|
|
64
|
+
});
|
|
65
|
+
if (mutable)
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
return definition.node.init ?? undefined;
|
|
69
|
+
}
|
|
70
|
+
function expression(node, seen = new Set()) {
|
|
71
|
+
node = unwrap(node);
|
|
72
|
+
if (seen.has(node))
|
|
73
|
+
return node;
|
|
74
|
+
seen.add(node);
|
|
75
|
+
if (node.type === 'Identifier') {
|
|
76
|
+
const init = initializer(node);
|
|
77
|
+
if (init)
|
|
78
|
+
return expression(init, seen);
|
|
79
|
+
}
|
|
80
|
+
return node;
|
|
81
|
+
}
|
|
82
|
+
function member(binding, name) {
|
|
83
|
+
if (!binding || !name)
|
|
84
|
+
return undefined;
|
|
85
|
+
if (binding.kind === 'module') {
|
|
86
|
+
if (!binding.themed && name === 'Config')
|
|
87
|
+
return { kind: 'configNamespace', themed: true };
|
|
88
|
+
if (name === 'style' ||
|
|
89
|
+
name === 'variants' ||
|
|
90
|
+
(!binding.themed && name === 'cx'))
|
|
91
|
+
return { kind: name, themed: binding.themed };
|
|
92
|
+
}
|
|
93
|
+
if (binding.kind === 'configNamespace' && name === 'create')
|
|
94
|
+
return { kind: 'configFactory', themed: true };
|
|
95
|
+
if (binding.kind === 'config' && (name === 'style' || name === 'variants'))
|
|
96
|
+
return { kind: name, themed: true };
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
function resolve(node, seen = new Set()) {
|
|
100
|
+
node = unwrap(node);
|
|
101
|
+
if (seen.has(node))
|
|
102
|
+
return undefined;
|
|
103
|
+
seen.add(node);
|
|
104
|
+
if (node.type === 'Identifier') {
|
|
105
|
+
const binding = variable(node);
|
|
106
|
+
if (!binding || binding.defs.length !== 1)
|
|
107
|
+
return undefined;
|
|
108
|
+
const definition = binding.defs[0];
|
|
109
|
+
const declaration = definition.node;
|
|
110
|
+
if (definition.type === 'ImportBinding') {
|
|
111
|
+
const parent = declaration.parent;
|
|
112
|
+
if (parent?.type !== 'ImportDeclaration' ||
|
|
113
|
+
parent.importKind === 'type' ||
|
|
114
|
+
(!imports.has(parent.source.value) &&
|
|
115
|
+
!/(?:^|\/)zyzz\.config\.[^/]+$/.test(parent.source.value)))
|
|
116
|
+
return undefined;
|
|
117
|
+
const module = {
|
|
118
|
+
kind: 'module',
|
|
119
|
+
themed: parent.source.value !== 'zyzz',
|
|
120
|
+
};
|
|
121
|
+
if (declaration.type === 'ImportNamespaceSpecifier')
|
|
122
|
+
return module;
|
|
123
|
+
if (declaration.type === 'ImportSpecifier' &&
|
|
124
|
+
declaration.importKind !== 'type')
|
|
125
|
+
return member(module, declaration.imported.type === 'Identifier'
|
|
126
|
+
? declaration.imported.name
|
|
127
|
+
: declaration.imported.value);
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
if (declaration.type !== 'VariableDeclarator' ||
|
|
131
|
+
!declaration.init ||
|
|
132
|
+
declaration.parent.type !== 'VariableDeclaration' ||
|
|
133
|
+
declaration.parent.kind !== 'const')
|
|
134
|
+
return undefined;
|
|
135
|
+
if (binding.references.some((reference) => reference.isWrite() && !reference.init))
|
|
136
|
+
return undefined;
|
|
137
|
+
if (declaration.id.type === 'Identifier')
|
|
138
|
+
return resolve(declaration.init, seen);
|
|
139
|
+
if (declaration.id.type === 'ObjectPattern') {
|
|
140
|
+
const property = declaration.id.properties.find((property) => property.type === 'Property' &&
|
|
141
|
+
property.value.type === 'Identifier' &&
|
|
142
|
+
property.value.name === node.name);
|
|
143
|
+
if (property?.type === 'Property')
|
|
144
|
+
return member(resolve(declaration.init, seen), key(property));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (node.type === 'MemberExpression') {
|
|
148
|
+
const name = key(node);
|
|
149
|
+
const known = member(resolve(node.object, new Set(seen)), name);
|
|
150
|
+
if (known)
|
|
151
|
+
return known;
|
|
152
|
+
if (node.object.type !== 'Identifier' || !name)
|
|
153
|
+
return undefined;
|
|
154
|
+
const namespace = variable(node.object);
|
|
155
|
+
if (!namespace || namespace.defs.length !== 1)
|
|
156
|
+
return undefined;
|
|
157
|
+
const declaration = namespace.defs[0].node;
|
|
158
|
+
if (declaration.type !== 'TSModuleDeclaration' ||
|
|
159
|
+
declaration.body?.type !== 'TSModuleBlock')
|
|
160
|
+
return undefined;
|
|
161
|
+
for (const statement of declaration.body.body) {
|
|
162
|
+
if (statement.type !== 'ExportNamedDeclaration' ||
|
|
163
|
+
statement.declaration?.type !== 'VariableDeclaration' ||
|
|
164
|
+
statement.declaration.kind !== 'const')
|
|
165
|
+
continue;
|
|
166
|
+
for (const entry of statement.declaration.declarations)
|
|
167
|
+
if (entry.id.type === 'Identifier' &&
|
|
168
|
+
entry.id.name === name &&
|
|
169
|
+
entry.init)
|
|
170
|
+
return resolve(entry.init, seen);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (node.type === 'CallExpression') {
|
|
174
|
+
const callee = resolve(node.callee, seen);
|
|
175
|
+
if (callee?.kind === 'configFactory')
|
|
176
|
+
return { kind: 'config', themed: true };
|
|
177
|
+
if (callee?.kind === 'style' || callee?.kind === 'variants')
|
|
178
|
+
return { kind: 'definition', themed: callee.themed };
|
|
179
|
+
}
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
return { expression, resolve, variable };
|
|
183
|
+
}
|
|
184
|
+
/** Resolves only literal property names, never computed identifiers. */
|
|
185
|
+
export function key(node) {
|
|
186
|
+
const property = node.type === 'Property' ? node.key : node.property;
|
|
187
|
+
if (!node.computed && property.type === 'Identifier')
|
|
188
|
+
return property.name;
|
|
189
|
+
if (property.type === 'Literal' && typeof property.value === 'string')
|
|
190
|
+
return property.value;
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
/** Removes type-only wrappers while retaining the original source node. */
|
|
194
|
+
export function unwrap(node) {
|
|
195
|
+
while (node.type === 'TSAsExpression' ||
|
|
196
|
+
node.type === 'TSSatisfiesExpression' ||
|
|
197
|
+
node.type === 'TSNonNullExpression' ||
|
|
198
|
+
node.type === 'TSTypeAssertion' ||
|
|
199
|
+
node.type === 'ParenthesizedExpression')
|
|
200
|
+
node = node.expression;
|
|
201
|
+
return node;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=Bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bindings.js","sourceRoot":"","sources":["../../../src/oxlint/internal/Bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Visits declaration positions in styles and recipes without evaluating expressions. @module */
|
|
2
|
+
import type { ESTree } from '@oxlint/plugins';
|
|
3
|
+
import * as Bindings from './Bindings.js';
|
|
4
|
+
/** Callbacks for known declaration blocks and malformed literal structures. */
|
|
5
|
+
export type Visitors = {
|
|
6
|
+
readonly declaration: (property: ESTree.ObjectProperty, name: string) => void;
|
|
7
|
+
readonly invalid?: ((node: ESTree.Node, message: string) => void) | undefined;
|
|
8
|
+
};
|
|
9
|
+
/** Traverses actual style positions, excluding variant selections and callback internals. */
|
|
10
|
+
export declare function visit(node: ESTree.Node, options: {
|
|
11
|
+
readonly bindings: ReturnType<typeof Bindings.create>;
|
|
12
|
+
readonly recipe: boolean;
|
|
13
|
+
readonly visitors: Visitors;
|
|
14
|
+
}): void;
|
|
15
|
+
/** Extracts known scalar values and fallback arrays without executing user code. */
|
|
16
|
+
export declare function literal(node: ESTree.Node, bindings: ReturnType<typeof Bindings.create>, seen?: Set<ESTree.Node>): {
|
|
17
|
+
readonly value: unknown;
|
|
18
|
+
} | undefined;
|
|
19
|
+
//# sourceMappingURL=Declarations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Declarations.d.ts","sourceRoot":"","sources":["../../../src/oxlint/internal/Declarations.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAGzC,+EAA+E;AAC/E,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;CAC9E,CAAA;AAED,6FAA6F;AAC7F,wBAAgB,KAAK,CACnB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,OAAO,EAAE;IACP,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAA;IACrD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAC5B,QAqFF;AAED,oFAAoF;AACpF,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,QAAQ,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,EAC5C,IAAI,mBAAyB,GAC5B;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CA0BzC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import * as Bindings from './Bindings.js';
|
|
2
|
+
import * as Condition from '../../internal/Condition.js';
|
|
3
|
+
/** Traverses actual style positions, excluding variant selections and callback internals. */
|
|
4
|
+
export function visit(node, options) {
|
|
5
|
+
const { bindings, visitors } = options;
|
|
6
|
+
const seen = new Set();
|
|
7
|
+
function object(node, callback) {
|
|
8
|
+
node = bindings.expression(node);
|
|
9
|
+
if (seen.has(node))
|
|
10
|
+
return;
|
|
11
|
+
seen.add(node);
|
|
12
|
+
if (node.type === 'ObjectExpression')
|
|
13
|
+
callback(node);
|
|
14
|
+
else if (node.type === 'Literal' || node.type === 'ArrayExpression')
|
|
15
|
+
visitors.invalid?.(node, 'Expected a style object.');
|
|
16
|
+
}
|
|
17
|
+
function entries(node, callback) {
|
|
18
|
+
object(node, (node) => {
|
|
19
|
+
for (const property of node.properties) {
|
|
20
|
+
if (property.type === 'SpreadElement') {
|
|
21
|
+
entries(property.argument, callback);
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (property.kind !== 'init' || property.method) {
|
|
25
|
+
visitors.invalid?.(property, 'Style objects require data properties, not methods or accessors.');
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
callback(property);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function style(node) {
|
|
33
|
+
node = bindings.expression(node);
|
|
34
|
+
if (node.type === 'ArrowFunctionExpression') {
|
|
35
|
+
if (seen.has(node))
|
|
36
|
+
return;
|
|
37
|
+
seen.add(node);
|
|
38
|
+
if (node.body.type !== 'BlockStatement')
|
|
39
|
+
style(node.body);
|
|
40
|
+
else
|
|
41
|
+
for (const statement of node.body.body)
|
|
42
|
+
if (statement.type === 'ReturnStatement' && statement.argument)
|
|
43
|
+
style(statement.argument);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
entries(node, (property) => {
|
|
47
|
+
const name = Bindings.key(property);
|
|
48
|
+
if (!name)
|
|
49
|
+
return;
|
|
50
|
+
if (name === 'selectors')
|
|
51
|
+
entries(property.value, (selector) => style(selector.value));
|
|
52
|
+
else if (name === 'targets')
|
|
53
|
+
entries(property.value, (target) => {
|
|
54
|
+
if (Bindings.key(target) === 'web')
|
|
55
|
+
style(target.value);
|
|
56
|
+
});
|
|
57
|
+
else if (Condition.is(name))
|
|
58
|
+
style(property.value);
|
|
59
|
+
else if (name !== 'vars' && name !== 'variables')
|
|
60
|
+
visitors.declaration(property, name);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (!options.recipe)
|
|
64
|
+
style(node);
|
|
65
|
+
else
|
|
66
|
+
entries(node, (property) => {
|
|
67
|
+
const name = Bindings.key(property);
|
|
68
|
+
if (name === 'base')
|
|
69
|
+
style(property.value);
|
|
70
|
+
else if (name === 'variants')
|
|
71
|
+
entries(property.value, (axis) => entries(axis.value, (choice) => style(choice.value)));
|
|
72
|
+
else if (name === 'compoundVariants') {
|
|
73
|
+
const value = bindings.expression(property.value);
|
|
74
|
+
if (value.type === 'ArrayExpression')
|
|
75
|
+
for (const entry of value.elements)
|
|
76
|
+
if (entry && entry.type !== 'SpreadElement')
|
|
77
|
+
entries(entry, (property) => {
|
|
78
|
+
if (Bindings.key(property) === 'style')
|
|
79
|
+
style(property.value);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/** Extracts known scalar values and fallback arrays without executing user code. */
|
|
85
|
+
export function literal(node, bindings, seen = new Set()) {
|
|
86
|
+
node = bindings.expression(node);
|
|
87
|
+
if (seen.has(node))
|
|
88
|
+
return undefined;
|
|
89
|
+
seen = new Set(seen).add(node);
|
|
90
|
+
if (node.type === 'Literal')
|
|
91
|
+
return { value: node.value };
|
|
92
|
+
if (node.type === 'TemplateLiteral' && node.expressions.length === 0)
|
|
93
|
+
return { value: node.quasis[0]?.value.cooked };
|
|
94
|
+
if (node.type === 'UnaryExpression' &&
|
|
95
|
+
(node.operator === '-' || node.operator === '+')) {
|
|
96
|
+
const operand = literal(node.argument, bindings, seen);
|
|
97
|
+
if (typeof operand?.value === 'number')
|
|
98
|
+
return { value: node.operator === '-' ? -operand.value : operand.value };
|
|
99
|
+
}
|
|
100
|
+
if (node.type === 'ArrayExpression') {
|
|
101
|
+
const values = [];
|
|
102
|
+
for (const entry of node.elements) {
|
|
103
|
+
if (!entry || entry.type === 'SpreadElement')
|
|
104
|
+
return undefined;
|
|
105
|
+
const result = literal(entry, bindings, seen);
|
|
106
|
+
if (!result)
|
|
107
|
+
return undefined;
|
|
108
|
+
values.push(result.value);
|
|
109
|
+
}
|
|
110
|
+
return { value: values };
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=Declarations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Declarations.js","sourceRoot":"","sources":["../../../src/oxlint/internal/Declarations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Finds JSX attributes that overwrite known Zyzz application props. @module */
|
|
2
|
+
import type { Rule } from '@oxlint/plugins';
|
|
3
|
+
/** Reports competing style spreads and explicit styling attributes without rewriting JSX. */
|
|
4
|
+
export declare const noConflictingProps: Rule;
|
|
5
|
+
//# sourceMappingURL=noConflictingProps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noConflictingProps.d.ts","sourceRoot":"","sources":["../../../src/oxlint/rules/noConflictingProps.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,OAAO,KAAK,EAAU,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGnD,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,EAAE,IA8ChC,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as Bindings from '../internal/Bindings.js';
|
|
2
|
+
/** Reports competing style spreads and explicit styling attributes without rewriting JSX. */
|
|
3
|
+
export const noConflictingProps = {
|
|
4
|
+
meta: {
|
|
5
|
+
messages: {
|
|
6
|
+
attribute: "Pass '{{property}}' into the Zyzz style call to merge styling props.",
|
|
7
|
+
spread: 'Compose Zyzz applications with cx() instead of overwriting them with multiple JSX spreads.',
|
|
8
|
+
},
|
|
9
|
+
schema: [],
|
|
10
|
+
type: 'problem',
|
|
11
|
+
},
|
|
12
|
+
create(context) {
|
|
13
|
+
const bindings = Bindings.create(context);
|
|
14
|
+
function application(node) {
|
|
15
|
+
node = bindings.expression(node);
|
|
16
|
+
if (node.type !== 'CallExpression')
|
|
17
|
+
return false;
|
|
18
|
+
const binding = bindings.resolve(node.callee);
|
|
19
|
+
return binding?.kind === 'definition' || binding?.kind === 'cx';
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
JSXOpeningElement(node) {
|
|
23
|
+
const spreads = node.attributes.filter((attribute) => attribute.type === 'JSXSpreadAttribute' &&
|
|
24
|
+
application(attribute.argument));
|
|
25
|
+
if (!spreads.length)
|
|
26
|
+
return;
|
|
27
|
+
for (const attribute of node.attributes) {
|
|
28
|
+
if (attribute.type !== 'JSXAttribute' ||
|
|
29
|
+
attribute.name.type !== 'JSXIdentifier')
|
|
30
|
+
continue;
|
|
31
|
+
const property = attribute.name.name;
|
|
32
|
+
if (property === 'className' || property === 'style')
|
|
33
|
+
context.report({
|
|
34
|
+
data: { property },
|
|
35
|
+
messageId: 'attribute',
|
|
36
|
+
node: attribute,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
for (const spread of spreads.slice(1))
|
|
40
|
+
context.report({ messageId: 'spread', node: spread });
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=noConflictingProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noConflictingProps.js","sourceRoot":"","sources":["../../../src/oxlint/rules/noConflictingProps.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAA;AAEnD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,SAAS,EACP,sEAAsE;YACxE,MAAM,EACJ,4FAA4F;SAC/F;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,SAAS;KAChB;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACzC,SAAS,WAAW,CAAC,IAAiB;YACpC,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAChC,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB;gBAAE,OAAO,KAAK,CAAA;YAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC7C,OAAO,OAAO,EAAE,IAAI,KAAK,YAAY,IAAI,OAAO,EAAE,IAAI,KAAK,IAAI,CAAA;QACjE,CAAC;QACD,OAAO;YACL,iBAAiB,CAAC,IAAI;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CACpC,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,IAAI,KAAK,oBAAoB;oBACvC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAClC,CAAA;gBACD,IAAI,CAAC,OAAO,CAAC,MAAM;oBAAE,OAAM;gBAC3B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACxC,IACE,SAAS,CAAC,IAAI,KAAK,cAAc;wBACjC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe;wBAEvC,SAAQ;oBACV,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAA;oBACpC,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,OAAO;wBAClD,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,EAAE,QAAQ,EAAE;4BAClB,SAAS,EAAE,WAAW;4BACtB,IAAI,EAAE,SAAS;yBAChB,CAAC,CAAA;gBACN,CAAC;gBACD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;oBACnC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;YACzD,CAAC;SACF,CAAA;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Finds unused style members in local TypeScript namespaces. @module */
|
|
2
|
+
import type { Rule } from '@oxlint/plugins';
|
|
3
|
+
/** Leaves module exports and escaped namespaces available to unknown consumers. */
|
|
4
|
+
export declare const noUnused: Rule;
|
|
5
|
+
//# sourceMappingURL=noUnused.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noUnused.d.ts","sourceRoot":"","sources":["../../../src/oxlint/rules/noUnused.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,KAAK,EAAU,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGnD,mFAAmF;AACnF,eAAO,MAAM,QAAQ,EAAE,IA6DtB,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as Bindings from '../internal/Bindings.js';
|
|
2
|
+
/** Leaves module exports and escaped namespaces available to unknown consumers. */
|
|
3
|
+
export const noUnused = {
|
|
4
|
+
meta: {
|
|
5
|
+
messages: { unused: "Style '{{name}}' is never used." },
|
|
6
|
+
schema: [],
|
|
7
|
+
type: 'suggestion',
|
|
8
|
+
},
|
|
9
|
+
create(context) {
|
|
10
|
+
const bindings = Bindings.create(context);
|
|
11
|
+
const declarations = [];
|
|
12
|
+
return {
|
|
13
|
+
VariableDeclarator(node) {
|
|
14
|
+
if (node.id.type === 'Identifier' &&
|
|
15
|
+
node.init &&
|
|
16
|
+
bindings.resolve(node.init)?.kind === 'definition')
|
|
17
|
+
declarations.push(node);
|
|
18
|
+
},
|
|
19
|
+
'Program:exit'() {
|
|
20
|
+
for (const declaration of declarations) {
|
|
21
|
+
if (declaration.id.type !== 'Identifier')
|
|
22
|
+
continue;
|
|
23
|
+
let parent = declaration.parent;
|
|
24
|
+
while (parent.type === 'VariableDeclaration' ||
|
|
25
|
+
parent.type === 'ExportNamedDeclaration')
|
|
26
|
+
parent = parent.parent;
|
|
27
|
+
if (parent.type !== 'TSModuleBlock' ||
|
|
28
|
+
parent.parent.type !== 'TSModuleDeclaration')
|
|
29
|
+
continue;
|
|
30
|
+
const namespace = parent.parent;
|
|
31
|
+
if (namespace.id.type !== 'Identifier')
|
|
32
|
+
continue;
|
|
33
|
+
// Nested and exported namespaces may have consumers outside this local scope.
|
|
34
|
+
if (namespace.parent.type !== 'Program')
|
|
35
|
+
continue;
|
|
36
|
+
const variable = bindings.variable(declaration.id);
|
|
37
|
+
const owner = bindings.variable(namespace.id);
|
|
38
|
+
if (!variable || !owner || owner.defs.length !== 1)
|
|
39
|
+
continue;
|
|
40
|
+
if (variable.references.some((reference) => reference.isRead()))
|
|
41
|
+
continue;
|
|
42
|
+
const used = owner.references.some((reference) => {
|
|
43
|
+
if (!reference.isRead())
|
|
44
|
+
return false;
|
|
45
|
+
const member = reference.identifier.parent;
|
|
46
|
+
return (member.type !== 'MemberExpression' ||
|
|
47
|
+
member.object !== reference.identifier ||
|
|
48
|
+
Bindings.key(member) === undefined ||
|
|
49
|
+
Bindings.key(member) === variable.name);
|
|
50
|
+
});
|
|
51
|
+
if (!used)
|
|
52
|
+
context.report({
|
|
53
|
+
data: { name: `${namespace.id.name}.${variable.name}` },
|
|
54
|
+
messageId: 'unused',
|
|
55
|
+
node: declaration.id,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=noUnused.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noUnused.js","sourceRoot":"","sources":["../../../src/oxlint/rules/noUnused.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Applies explicit project restrictions to known web declarations. @module */
|
|
2
|
+
import type { Rule } from '@oxlint/plugins';
|
|
3
|
+
/** Reports forbidden properties or literal values outside an explicit allowlist. */
|
|
4
|
+
export declare const restrictedProperties: Rule;
|
|
5
|
+
//# sourceMappingURL=restrictedProperties.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restrictedProperties.d.ts","sourceRoot":"","sources":["../../../src/oxlint/rules/restrictedProperties.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAI3C,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,EAAE,IAqFlC,CAAA"}
|