@typestyles/eslint-plugin 0.3.1 → 0.4.1
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/README.md +13 -13
- package/dist/index.cjs +75 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +75 -15
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -34,16 +34,16 @@ Disallows mixing CSS shorthand and longhand in the same style object.
|
|
|
34
34
|
|
|
35
35
|
```ts
|
|
36
36
|
// ❌ paddingTop is ignored unpredictably
|
|
37
|
-
|
|
37
|
+
style('card', {
|
|
38
38
|
padding: '8px',
|
|
39
39
|
paddingTop: '16px',
|
|
40
40
|
});
|
|
41
41
|
|
|
42
42
|
// ✅ pick one
|
|
43
|
-
|
|
43
|
+
style('card', { padding: '8px 8px 8px 16px' });
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
Applies to `
|
|
46
|
+
Applies to `recipe`, `style`, variant objects, and nested selectors inside those calls. Also applies to legacy `styles.component` / `styles.class` on `createStyles()` instances.
|
|
47
47
|
|
|
48
48
|
### `@typestyles/no-invalid-unitless-value`
|
|
49
49
|
|
|
@@ -51,11 +51,11 @@ Catches bare number **strings** on properties that need units. TypeStyles auto-a
|
|
|
51
51
|
|
|
52
52
|
```ts
|
|
53
53
|
// ❌ emits invalid `line-height: 24px` is fine, but `"24"` as string does not get px
|
|
54
|
-
|
|
54
|
+
style('text', { lineHeight: '24' });
|
|
55
55
|
|
|
56
56
|
// ✅
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
style('text', { lineHeight: 24 }); // → 24px where applicable
|
|
58
|
+
style('text', { lineHeight: '1.5' }); // unitless ratio as string
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
Optional rule option `checkSuspiciousUnitlessNumbers` warns when a numeric literal is used on truly unitless properties (e.g. `lineHeight: 24` vs `lineHeight: 1.5`).
|
|
@@ -66,15 +66,15 @@ Disallows reusing the same logical namespace across the project:
|
|
|
66
66
|
|
|
67
67
|
```ts
|
|
68
68
|
// file-a.ts
|
|
69
|
-
|
|
69
|
+
recipe('button', { base: { … } });
|
|
70
70
|
|
|
71
71
|
// file-b.ts — ❌ collision
|
|
72
|
-
|
|
72
|
+
recipe('button', { base: { … } });
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
Tracks `
|
|
75
|
+
Tracks `recipe`, `style`, `hash`, `tokens.create`, `tokens.createTheme`, `keyframes.create`, and `global.rule` / `global.fontFace` (and legacy `styles.component`, `styles.class`, `global.style` where used). Reports duplicates within a file and across files in the same ESLint run.
|
|
76
76
|
|
|
77
|
-
> Bundler plugins (`@typestyles/vite`, etc.) also fail the build on duplicate `
|
|
77
|
+
> Bundler plugins (`@typestyles/vite`, etc.) also fail the build on duplicate `recipe` / `style` namespaces. ESLint catches the issue earlier in the editor.
|
|
78
78
|
|
|
79
79
|
### `@typestyles/no-removed-public-classname` (opt-in)
|
|
80
80
|
|
|
@@ -89,13 +89,13 @@ Guards **publishable** design systems against semver-breaking semantic class ren
|
|
|
89
89
|
|
|
90
90
|
Adding new class names never fails — only removals or renames do.
|
|
91
91
|
|
|
92
|
-
**Diagnostics** are reported once per ESLint run (on `Program:exit`), not at the specific `
|
|
92
|
+
**Diagnostics** are reported once per ESLint run (on `Program:exit`), not at the specific `recipe()` call site. Treat them as project-level semver checks, similar to `no-duplicate-namespace`.
|
|
93
93
|
|
|
94
94
|
**Static analysis limits** (best-effort, not exhaustive):
|
|
95
95
|
|
|
96
96
|
- Namespace must be a **string literal** — variables and template literals are skipped
|
|
97
|
-
-
|
|
98
|
-
- Projects with multiple `createStyles({ scopeId })` configs only infer a default binding when all configs agree
|
|
97
|
+
- Direct `recipe()` / `style()` calls and legacy `styles.component()` / `binding.component()` on `createStyles` bindings are found
|
|
98
|
+
- Projects with multiple `createTypeStyles({ scopeId })` / `createStyles({ scopeId })` configs only infer a default binding when all configs agree
|
|
99
99
|
|
|
100
100
|
## Enable individual rules
|
|
101
101
|
|
package/dist/index.cjs
CHANGED
|
@@ -23,25 +23,42 @@ function memberPropertyName(node) {
|
|
|
23
23
|
}
|
|
24
24
|
return null;
|
|
25
25
|
}
|
|
26
|
-
function
|
|
26
|
+
function objectHasScopeId(arg) {
|
|
27
|
+
if (!arg || arg.type !== "ObjectExpression") return false;
|
|
28
|
+
for (const prop of arg.properties) {
|
|
29
|
+
if (prop.type === "Property" && !prop.computed && prop.key.type === "Identifier" && prop.key.name === "scopeId") {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
function isUnscopedFactoryCall(node) {
|
|
36
|
+
const { callee, arguments: args } = node;
|
|
37
|
+
if (callee.type !== "Identifier") return false;
|
|
38
|
+
if (callee.name !== "createTypeStyles" && callee.name !== "createStyles") return false;
|
|
39
|
+
if (args.length === 0) return true;
|
|
40
|
+
const first = args[0];
|
|
41
|
+
if (first.type === "SpreadElement") return false;
|
|
42
|
+
if (first.type === "ObjectExpression") return !objectHasScopeId(first);
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
function isLegacyDefaultStylesCall(node) {
|
|
27
46
|
const { callee } = node;
|
|
28
47
|
if (callee.type !== "MemberExpression") return false;
|
|
29
48
|
const method = memberPropertyName(callee);
|
|
30
|
-
if (method !== "class" && method !== "component") return false;
|
|
31
|
-
|
|
32
|
-
return callee.object.name === "styles";
|
|
33
|
-
}
|
|
34
|
-
return false;
|
|
49
|
+
if (method !== "class" && method !== "component" && method !== "hashClass") return false;
|
|
50
|
+
return callee.object.type === "Identifier" && callee.object.name === "styles";
|
|
35
51
|
}
|
|
36
52
|
var noDefaultScopeInPackage = createRule({
|
|
37
53
|
name: "no-default-scope-in-package",
|
|
38
54
|
meta: {
|
|
39
55
|
type: "suggestion",
|
|
40
56
|
docs: {
|
|
41
|
-
description: "Require a scoped styles factory (`createTypeStyles`/`createStyles` with `scopeId`)
|
|
57
|
+
description: "Require a scoped styles factory (`createTypeStyles`/`createStyles` with `scopeId`) in publishable packages \u2014 flags unscoped factory calls and legacy `styles.*` usage"
|
|
42
58
|
},
|
|
43
59
|
messages: {
|
|
44
|
-
|
|
60
|
+
unscopedFactory: "`{{factory}}()` without `scopeId` in a published package risks class-name collisions. Pass `scopeId` (e.g. `createTypeStyles({ scopeId: pkg.name })`).",
|
|
61
|
+
unscopedInPackage: "Using the legacy unscoped `styles.{{method}}()` API in a published package risks class-name collisions. Use `createTypeStyles({ scopeId: pkg.name })` and call `style` / `hash` / `recipe` from that instance."
|
|
45
62
|
},
|
|
46
63
|
schema: []
|
|
47
64
|
},
|
|
@@ -49,12 +66,21 @@ var noDefaultScopeInPackage = createRule({
|
|
|
49
66
|
create(context) {
|
|
50
67
|
return {
|
|
51
68
|
CallExpression(node) {
|
|
52
|
-
if (
|
|
53
|
-
|
|
69
|
+
if (isUnscopedFactoryCall(node)) {
|
|
70
|
+
const factory = node.callee.name;
|
|
71
|
+
context.report({
|
|
72
|
+
node: node.callee,
|
|
73
|
+
messageId: "unscopedFactory",
|
|
74
|
+
data: { factory }
|
|
75
|
+
});
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (!isLegacyDefaultStylesCall(node)) return;
|
|
79
|
+
const method = memberPropertyName(node.callee) ?? "class";
|
|
54
80
|
context.report({
|
|
55
81
|
node: node.callee,
|
|
56
82
|
messageId: "unscopedInPackage",
|
|
57
|
-
data: { method
|
|
83
|
+
data: { method }
|
|
58
84
|
});
|
|
59
85
|
}
|
|
60
86
|
};
|
|
@@ -96,6 +122,28 @@ function firstStringArg(args) {
|
|
|
96
122
|
}
|
|
97
123
|
function getNamespaceCall(node) {
|
|
98
124
|
const { callee, arguments: args } = node;
|
|
125
|
+
if (callee.type === "Identifier" && callee.name === "style") {
|
|
126
|
+
const nameNode = firstStringArg(args);
|
|
127
|
+
if (!nameNode) return null;
|
|
128
|
+
return { kind: "style", key: `.${nameNode.value}-`, nameNode };
|
|
129
|
+
}
|
|
130
|
+
if (callee.type === "Identifier" && callee.name === "recipe") {
|
|
131
|
+
const nameNode = firstStringArg(args);
|
|
132
|
+
if (!nameNode) return null;
|
|
133
|
+
return { kind: "recipe", key: `.${nameNode.value}-`, nameNode };
|
|
134
|
+
}
|
|
135
|
+
if (callee.type === "Identifier" && callee.name === "hash") {
|
|
136
|
+
const first = args[0];
|
|
137
|
+
if (!first || first.type === "SpreadElement") return null;
|
|
138
|
+
if (args[1]?.type === "ObjectExpression") {
|
|
139
|
+
for (const prop of args[1].properties) {
|
|
140
|
+
if (prop.type === "Property" && prop.key.type === "Identifier" && prop.key.name === "label" && prop.value.type === "Literal" && typeof prop.value.value === "string") {
|
|
141
|
+
return { kind: "hash", key: `.${prop.value.value}-`, nameNode: prop.value };
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
99
147
|
if (isMemberCall(callee, "styles", "class")) {
|
|
100
148
|
const nameNode = firstStringArg(args);
|
|
101
149
|
if (!nameNode) return null;
|
|
@@ -138,10 +186,14 @@ function getNamespaceCall(node) {
|
|
|
138
186
|
if (!nameNode) return null;
|
|
139
187
|
return { kind: "keyframes.create", key: `keyframes:${nameNode.value}`, nameNode };
|
|
140
188
|
}
|
|
141
|
-
if (isMemberCall(callee, "global", "style")) {
|
|
189
|
+
if (isMemberCall(callee, "global", "rule") || isMemberCall(callee, "global", "style")) {
|
|
142
190
|
const nameNode = firstStringArg(args);
|
|
143
191
|
if (!nameNode) return null;
|
|
144
|
-
return {
|
|
192
|
+
return {
|
|
193
|
+
kind: isMemberCall(callee, "global", "rule") ? "global.rule" : "global.style",
|
|
194
|
+
key: nameNode.value,
|
|
195
|
+
nameNode
|
|
196
|
+
};
|
|
145
197
|
}
|
|
146
198
|
if (isMemberCall(callee, "global", "fontFace")) {
|
|
147
199
|
const nameNode = firstStringArg(args);
|
|
@@ -179,13 +231,21 @@ function getStyleObjectArguments(node) {
|
|
|
179
231
|
objects.push(arg.body);
|
|
180
232
|
}
|
|
181
233
|
};
|
|
234
|
+
if (callee.type === "Identifier" && (callee.name === "style" || callee.name === "recipe")) {
|
|
235
|
+
pushObject(args[1]);
|
|
236
|
+
return objects;
|
|
237
|
+
}
|
|
238
|
+
if (callee.type === "Identifier" && callee.name === "hash") {
|
|
239
|
+
pushObject(args[0]);
|
|
240
|
+
return objects;
|
|
241
|
+
}
|
|
182
242
|
if (callee.type === "MemberExpression") {
|
|
183
243
|
const method = memberPropertyName2(callee);
|
|
184
|
-
if (method === "class" || method === "component") {
|
|
244
|
+
if (method === "class" || method === "component" || method === "rule" || method === "style") {
|
|
185
245
|
pushObject(args[1]);
|
|
186
246
|
return objects;
|
|
187
247
|
}
|
|
188
|
-
if (method === "hashClass") {
|
|
248
|
+
if (method === "hashClass" || method === "rules") {
|
|
189
249
|
const first = args[0];
|
|
190
250
|
if (first && first.type !== "SpreadElement" && first.type === "ObjectExpression") {
|
|
191
251
|
objects.push(first);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/create-rule.ts","../src/rules/no-default-scope-in-package.ts","../src/utils/style-calls.ts","../src/rules/no-duplicate-namespace.ts","../src/utils/css-properties.ts","../src/utils/style-ast.ts","../src/rules/no-invalid-unitless-value.ts","../src/rules/no-removed-public-classname.ts","../src/rules/no-shorthand-longhand-conflict.ts","../src/index.ts"],"names":["ESLintUtils","memberPropertyName","path","PUBLIC_CLASSNAMES_SNAPSHOT","loadPublicClassNamesSnapshot","collectPublicClassNamesSync","diffRemovedPublicClassNames"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ESLintUtils } from '@typescript-eslint/utils';\n\nexport const createRule = ESLintUtils.RuleCreator(\n (name) => `https://typestyles.dev/docs/eslint#${name}`,\n);\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\n\nfunction memberPropertyName(node: TSESTree.MemberExpression): string | null {\n if (node.property.type === 'Identifier' && !node.computed) return node.property.name;\n if (node.property.type === 'Literal' && typeof node.property.value === 'string') {\n return node.property.value;\n }\n return null;\n}\n\nfunction isDefaultStylesCall(node: TSESTree.CallExpression): boolean {\n const { callee } = node;\n if (callee.type !== 'MemberExpression') return false;\n const method = memberPropertyName(callee);\n if (method !== 'class' && method !== 'component') return false;\n\n if (callee.object.type === 'Identifier') {\n return callee.object.name === 'styles';\n }\n return false;\n}\n\nexport const noDefaultScopeInPackage = createRule({\n name: 'no-default-scope-in-package',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Require a scoped styles factory (`createTypeStyles`/`createStyles` with `scopeId`) instead of the default `styles` export in publishable packages',\n },\n messages: {\n unscopedInPackage:\n 'Using the default `styles.{{method}}()` in a published package risks class-name collisions. Use `createTypeStyles({ scopeId: pkg.name })` or `createStyles({ scopeId })` instead.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n CallExpression(node) {\n if (!isDefaultStylesCall(node)) return;\n\n const method = memberPropertyName(node.callee as TSESTree.MemberExpression);\n\n context.report({\n node: node.callee,\n messageId: 'unscopedInPackage',\n data: { method: method ?? 'class' },\n });\n },\n };\n },\n});\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nexport type NamespaceKind =\n | 'styles.class'\n | 'styles.component'\n | 'styles.hashClass'\n | 'tokens.create'\n | 'tokens.createTheme'\n | 'createTheme'\n | 'keyframes.create'\n | 'global.style'\n | 'global.fontFace';\n\nexport interface NamespaceCall {\n kind: NamespaceKind;\n /** Logical namespace key used for duplicate detection. */\n key: string;\n /** AST node for the namespace string literal (for reporting). */\n nameNode: TSESTree.StringLiteral;\n}\n\nfunction memberPropertyName(node: TSESTree.MemberExpression): string | null {\n if (node.property.type === 'Identifier' && !node.computed) return node.property.name;\n if (node.property.type === 'Literal' && typeof node.property.value === 'string') {\n return node.property.value;\n }\n return null;\n}\n\nfunction calleeRootName(node: TSESTree.CallExpression['callee']): string | null {\n if (node.type === 'Identifier') return node.name;\n if (node.type === 'MemberExpression') {\n if (node.object.type === 'Identifier') return node.object.name;\n if (node.object.type === 'MemberExpression') {\n const inner = memberPropertyName(node.object);\n const outer = calleeRootName(node.object);\n if (outer && inner) return `${outer}.${inner}`;\n }\n }\n return null;\n}\n\nfunction isMemberCall(\n callee: TSESTree.CallExpression['callee'],\n objectName: string,\n method: string,\n): boolean {\n if (callee.type !== 'MemberExpression') return false;\n const methodName = memberPropertyName(callee);\n if (methodName !== method) return false;\n if (callee.object.type === 'Identifier') return callee.object.name === objectName;\n return false;\n}\n\nfunction firstStringArg(args: TSESTree.CallExpressionArgument[]): TSESTree.StringLiteral | null {\n const first = args[0];\n if (!first || first.type === 'SpreadElement') return null;\n if (first.type === 'Literal' && typeof first.value === 'string') return first;\n return null;\n}\n\n/**\n * Detect TypeStyles namespace registrations from call expressions.\n * Matches API shape (e.g. `styles.class('card', …)`) regardless of import alias.\n */\nexport function getNamespaceCall(node: TSESTree.CallExpression): NamespaceCall | null {\n const { callee, arguments: args } = node;\n\n if (isMemberCall(callee, 'styles', 'class')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.class', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (isMemberCall(callee, 'styles', 'component')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.component', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (isMemberCall(callee, 'styles', 'hashClass')) {\n const first = args[0];\n if (!first || first.type === 'SpreadElement') return null;\n if (first.type === 'Literal' && typeof first.value === 'string') {\n return { kind: 'styles.hashClass', key: `.${first.value}-`, nameNode: first };\n }\n const label = args[1];\n if (label?.type === 'Literal' && typeof label.value === 'string') {\n return { kind: 'styles.hashClass', key: `.${label.value}-`, nameNode: label };\n }\n return null;\n }\n\n if (isMemberCall(callee, 'tokens', 'create')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.create', key: `tokens:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'tokens', 'createTheme')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.createTheme', key: `theme:${nameNode.value}`, nameNode };\n }\n\n if (callee.type === 'Identifier' && callee.name === 'createTheme') {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'createTheme', key: `theme:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'keyframes', 'create')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'keyframes.create', key: `keyframes:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'global', 'style')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'global.style', key: nameNode.value, nameNode };\n }\n\n if (isMemberCall(callee, 'global', 'fontFace')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'global.fontFace', key: `font-face:${nameNode.value}`, nameNode };\n }\n\n // `myStyles.class` / `myTokens.create` from createStyles/createTokens bindings\n if (callee.type === 'MemberExpression') {\n const method = memberPropertyName(callee);\n const root = calleeRootName(callee);\n if (method === 'class' && root) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.class', key: `.${nameNode.value}-`, nameNode };\n }\n if (method === 'component' && root) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.component', key: `.${nameNode.value}-`, nameNode };\n }\n if (method === 'create' && root?.endsWith('tokens')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.create', key: `tokens:${nameNode.value}`, nameNode };\n }\n }\n\n return null;\n}\n\n/** Extract style object literals passed to TypeStyles style APIs. */\nexport function getStyleObjectArguments(\n node: TSESTree.CallExpression,\n): TSESTree.ObjectExpression[] {\n const { callee, arguments: args } = node;\n const objects: TSESTree.ObjectExpression[] = [];\n\n const pushObject = (arg: TSESTree.CallExpressionArgument | undefined) => {\n if (!arg || arg.type === 'SpreadElement') return;\n if (arg.type === 'ObjectExpression') objects.push(arg);\n if (arg.type === 'ArrowFunctionExpression' && arg.body.type === 'ObjectExpression') {\n objects.push(arg.body);\n }\n };\n\n if (callee.type === 'MemberExpression') {\n const method = memberPropertyName(callee);\n if (method === 'class' || method === 'component') {\n pushObject(args[1]);\n return objects;\n }\n if (method === 'hashClass') {\n const first = args[0];\n if (first && first.type !== 'SpreadElement' && first.type === 'ObjectExpression') {\n objects.push(first);\n }\n return objects;\n }\n }\n\n return objects;\n}\n","import { createRule } from '../utils/create-rule';\nimport { getNamespaceCall } from '../utils/style-calls';\n\ninterface NamespaceLocation {\n filename: string;\n line: number;\n column: number;\n}\n\n/** Cross-file registry for a single ESLint CLI run (best-effort; not shared across workers). */\nconst namespaceRegistry = new Map<string, NamespaceLocation>();\n\n/** @internal Test hook */\nexport function resetNamespaceRegistry(): void {\n namespaceRegistry.clear();\n}\n\nexport const noDuplicateNamespace = createRule({\n name: 'no-duplicate-namespace',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow reusing the same TypeStyles namespace (`styles.class`, `styles.component`, `tokens.create`, …) across the project',\n },\n messages: {\n duplicateInFile:\n 'Namespace `{{name}}` ({{kind}}) is already registered in this file at line {{line}}.',\n duplicateAcrossFiles:\n 'Namespace `{{name}}` ({{kind}}) is already registered in `{{otherFile}}` at line {{line}}.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const fileSeen = new Map<string, { line: number; column: number }>();\n const filename = context.filename;\n\n return {\n CallExpression(node) {\n const call = getNamespaceCall(node);\n if (!call) return;\n\n const displayName =\n call.kind === 'styles.class' || call.kind === 'styles.component'\n ? call.nameNode.value\n : call.nameNode.value;\n\n const line = call.nameNode.loc?.start.line ?? node.loc?.start.line ?? 0;\n const column = call.nameNode.loc?.start.column ?? node.loc?.start.column ?? 0;\n\n const priorInFile = fileSeen.get(call.key);\n if (priorInFile) {\n context.report({\n node: call.nameNode,\n messageId: 'duplicateInFile',\n data: {\n name: displayName,\n kind: call.kind,\n line: String(priorInFile.line),\n },\n });\n return;\n }\n fileSeen.set(call.key, { line, column });\n\n const priorGlobal = namespaceRegistry.get(call.key);\n if (priorGlobal && priorGlobal.filename !== filename) {\n context.report({\n node: call.nameNode,\n messageId: 'duplicateAcrossFiles',\n data: {\n name: displayName,\n kind: call.kind,\n otherFile: priorGlobal.filename,\n line: String(priorGlobal.line),\n },\n });\n return;\n }\n\n if (!priorGlobal) {\n namespaceRegistry.set(call.key, { filename, line, column });\n }\n },\n };\n },\n});\n","/**\n * CSS properties that accept unitless numbers in TypeStyles serialization.\n * Keep in sync with `packages/typestyles/src/css.ts`.\n */\nexport const UNITLESS_PROPERTIES = new Set([\n 'animationIterationCount',\n 'aspectRatio',\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'fontSizeAdjust',\n 'fontWeight',\n 'gridArea',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnSpan',\n 'gridColumnStart',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowSpan',\n 'gridRowStart',\n 'initialLetter',\n 'lineClamp',\n 'lineHeight',\n 'maskBorderOutset',\n 'maskBorderSlice',\n 'maskBorderWidth',\n 'opacity',\n 'order',\n 'orphans',\n 'scale',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n]);\n\nconst VENDOR_PREFIX_RE = /^(Webkit|Moz|ms|O)([A-Z])(.*)$/;\n\nexport function isUnitlessProperty(prop: string): boolean {\n if (UNITLESS_PROPERTIES.has(prop)) return true;\n const match = VENDOR_PREFIX_RE.exec(prop);\n if (match) {\n return UNITLESS_PROPERTIES.has(match[2].toLowerCase() + match[3]);\n }\n return false;\n}\n\n/** Shorthand property → longhands that must not appear in the same style object. */\nexport const SHORTHAND_TO_LONGHANDS: Readonly<Record<string, readonly string[]>> = {\n padding: [\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'paddingInline',\n 'paddingBlock',\n 'paddingInlineStart',\n 'paddingInlineEnd',\n 'paddingBlockStart',\n 'paddingBlockEnd',\n ],\n margin: [\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'marginInline',\n 'marginBlock',\n 'marginInlineStart',\n 'marginInlineEnd',\n 'marginBlockStart',\n 'marginBlockEnd',\n ],\n border: [\n 'borderWidth',\n 'borderStyle',\n 'borderColor',\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n 'borderInline',\n 'borderBlock',\n ],\n borderWidth: [\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderInlineWidth',\n 'borderBlockWidth',\n ],\n borderStyle: ['borderTopStyle', 'borderRightStyle', 'borderBottomStyle', 'borderLeftStyle'],\n borderColor: ['borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'],\n borderTop: ['borderTopWidth', 'borderTopStyle', 'borderTopColor'],\n borderRight: ['borderRightWidth', 'borderRightStyle', 'borderRightColor'],\n borderBottom: ['borderBottomWidth', 'borderBottomStyle', 'borderBottomColor'],\n borderLeft: ['borderLeftWidth', 'borderLeftStyle', 'borderLeftColor'],\n background: [\n 'backgroundColor',\n 'backgroundImage',\n 'backgroundPosition',\n 'backgroundSize',\n 'backgroundRepeat',\n 'backgroundAttachment',\n 'backgroundOrigin',\n 'backgroundClip',\n ],\n font: ['fontStyle', 'fontVariant', 'fontWeight', 'fontSize', 'lineHeight', 'fontFamily'],\n flex: ['flexGrow', 'flexShrink', 'flexBasis'],\n gap: ['rowGap', 'columnGap'],\n overflow: ['overflowX', 'overflowY'],\n transition: [\n 'transitionProperty',\n 'transitionDuration',\n 'transitionTimingFunction',\n 'transitionDelay',\n ],\n animation: [\n 'animationName',\n 'animationDuration',\n 'animationTimingFunction',\n 'animationDelay',\n 'animationIterationCount',\n 'animationDirection',\n 'animationFillMode',\n 'animationPlayState',\n ],\n outline: ['outlineWidth', 'outlineStyle', 'outlineColor'],\n listStyle: ['listStyleType', 'listStylePosition', 'listStyleImage'],\n grid: [\n 'gridTemplateRows',\n 'gridTemplateColumns',\n 'gridTemplateAreas',\n 'gridAutoRows',\n 'gridAutoColumns',\n 'gridAutoFlow',\n ],\n gridTemplate: ['gridTemplateRows', 'gridTemplateColumns', 'gridTemplateAreas'],\n inset: ['top', 'right', 'bottom', 'left'],\n insetBlock: ['insetBlockStart', 'insetBlockEnd'],\n insetInline: ['insetInlineStart', 'insetInlineEnd'],\n};\n\n/** Bare numeric strings (no CSS unit) that emit invalid CSS when serialized. */\nexport const BARE_NUMBER_STRING_RE = /^-?\\d+(\\.\\d+)?$/;\n\nexport function findShorthandLonghandConflicts(\n propertyNames: readonly string[],\n): Array<{ shorthand: string; longhand: string }> {\n const keys = new Set(propertyNames);\n const seen = new Set<string>();\n const conflicts: Array<{ shorthand: string; longhand: string }> = [];\n\n for (const key of keys) {\n const longhands = SHORTHAND_TO_LONGHANDS[key];\n if (longhands) {\n for (const longhand of longhands) {\n if (keys.has(longhand)) {\n const id = `${key}|${longhand}`;\n if (!seen.has(id)) {\n seen.add(id);\n conflicts.push({ shorthand: key, longhand });\n }\n }\n }\n }\n }\n\n return conflicts;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nconst NESTED_SELECTOR_KEY_RE = /^(&|@|\\[)/;\n\n/** Keys that wrap nested style objects in component configs. */\nconst COMPONENT_STRUCTURAL_KEYS = new Set([\n 'base',\n 'variants',\n 'defaultVariants',\n 'compoundVariants',\n 'slots',\n]);\n\nexport function getStaticPropertyKey(prop: TSESTree.Property): string | null {\n if (prop.computed) return null;\n if (prop.key.type === 'Identifier') return prop.key.name;\n if (prop.key.type === 'Literal' && typeof prop.key.value === 'string') return prop.key.value;\n return null;\n}\n\nexport function isCssPropertyKey(key: string): boolean {\n if (NESTED_SELECTOR_KEY_RE.test(key)) return false;\n if (COMPONENT_STRUCTURAL_KEYS.has(key)) return false;\n return /^[a-zA-Z]/.test(key);\n}\n\n/**\n * Collect CSS property names declared at the top level of a style object literal.\n */\nexport function collectCssPropertyNames(obj: TSESTree.ObjectExpression): string[] {\n const names: string[] = [];\n for (const prop of obj.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (key && isCssPropertyKey(key)) names.push(key);\n }\n return names;\n}\n\n/**\n * Visit each style object literal in a TypeStyles style/config tree.\n * Recurses into pseudos, at-rules, component `base` / `variants`, and slot objects.\n */\nexport function visitStyleObjectLiterals(\n node: TSESTree.ObjectExpression,\n onStyleObject: (obj: TSESTree.ObjectExpression) => void,\n): void {\n onStyleObject(node);\n\n for (const prop of node.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (!key) continue;\n\n if (NESTED_SELECTOR_KEY_RE.test(key)) {\n if (prop.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(prop.value, onStyleObject);\n }\n continue;\n }\n\n if (key === 'variants' && prop.value.type === 'ObjectExpression') {\n for (const groupProp of prop.value.properties) {\n if (groupProp.type !== 'Property' || groupProp.value.type !== 'ObjectExpression') continue;\n for (const optionProp of groupProp.value.properties) {\n if (optionProp.type === 'Property' && optionProp.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(optionProp.value, onStyleObject);\n }\n }\n }\n continue;\n }\n\n if (key === 'compoundVariants' && prop.value.type === 'ArrayExpression') {\n for (const element of prop.value.elements) {\n if (!element || element.type !== 'ObjectExpression') continue;\n for (const cvProp of element.properties) {\n if (cvProp.type !== 'Property') continue;\n const cvKey = getStaticPropertyKey(cvProp);\n if (cvKey === 'css' && cvProp.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(cvProp.value, onStyleObject);\n }\n }\n }\n continue;\n }\n\n if (\n (COMPONENT_STRUCTURAL_KEYS.has(key) || prop.value.type === 'ObjectExpression') &&\n prop.value.type === 'ObjectExpression'\n ) {\n visitStyleObjectLiterals(prop.value, onStyleObject);\n }\n }\n}\n\nexport function getStringLiteralValue(node: TSESTree.Node): string | null {\n if (node.type === 'Literal' && typeof node.value === 'string') return node.value;\n return null;\n}\n\nexport function getNumericLiteralValue(node: TSESTree.Node): number | null {\n if (node.type === 'Literal' && typeof node.value === 'number') return node.value;\n return null;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\nimport { BARE_NUMBER_STRING_RE, isUnitlessProperty } from '../utils/css-properties';\nimport {\n getNumericLiteralValue,\n getStaticPropertyKey,\n getStringLiteralValue,\n isCssPropertyKey,\n visitStyleObjectLiterals,\n} from '../utils/style-ast';\nimport { getStyleObjectArguments } from '../utils/style-calls';\n\nexport const noInvalidUnitlessValue = createRule({\n name: 'no-invalid-unitless-value',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow bare numeric strings on properties that require CSS units (TypeStyles only auto-appends `px` to numbers, not strings)',\n },\n messages: {\n bareNumberString:\n '`{{property}}` is set to bare number string `{{value}}`, which emits invalid CSS. Use a number (`{{numeric}}`) or a value with units (`{{value}}px`).',\n suspiciousUnitlessNumber:\n '`{{property}}` is unitless in CSS — numeric `{{value}}` is emitted without a unit. Use a ratio (e.g. `1.5`) or an explicit length (`\"24px\"`).',\n },\n schema: [\n {\n type: 'object',\n properties: {\n checkSuspiciousUnitlessNumbers: { type: 'boolean' },\n },\n additionalProperties: false,\n },\n ],\n },\n defaultOptions: [{ checkSuspiciousUnitlessNumbers: true }],\n create(context, [options]) {\n /** Properties where a large integer usually means the author meant a length, not a unitless ratio. */\n const SUSPICIOUS_UNITLESS_PROPERTIES = new Set(['lineHeight']);\n\n function checkStyleObject(obj: TSESTree.ObjectExpression) {\n for (const prop of obj.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (!key || !isCssPropertyKey(key)) continue;\n\n const stringValue = getStringLiteralValue(prop.value);\n if (stringValue && BARE_NUMBER_STRING_RE.test(stringValue) && !isUnitlessProperty(key)) {\n context.report({\n node: prop.value,\n messageId: 'bareNumberString',\n data: {\n property: key,\n value: stringValue,\n numeric: stringValue,\n },\n });\n continue;\n }\n\n if (options.checkSuspiciousUnitlessNumbers && SUSPICIOUS_UNITLESS_PROPERTIES.has(key)) {\n const num = getNumericLiteralValue(prop.value);\n if (num != null && num >= 8 && Number.isInteger(num)) {\n context.report({\n node: prop.value,\n messageId: 'suspiciousUnitlessNumber',\n data: { property: key, value: String(num) },\n });\n }\n }\n }\n }\n\n return {\n CallExpression(node) {\n for (const styleObj of getStyleObjectArguments(node)) {\n visitStyleObjectLiterals(styleObj, checkStyleObject);\n }\n },\n ObjectExpression(node) {\n const parent = node.parent;\n if (\n parent?.type === 'Property' &&\n (parent.key.type === 'Identifier' || parent.key.type === 'Literal')\n ) {\n const parentKey =\n parent.key.type === 'Identifier'\n ? parent.key.name\n : typeof parent.key.value === 'string'\n ? parent.key.value\n : null;\n if (parentKey === 'from' || parentKey === 'to' || /^\\d+%$/.test(parentKey ?? '')) {\n visitStyleObjectLiterals(node, checkStyleObject);\n }\n }\n },\n };\n },\n});\n","import path from 'node:path';\nimport { createRule } from '../utils/create-rule';\nimport {\n PUBLIC_CLASSNAMES_SNAPSHOT,\n collectPublicClassNamesSync,\n diffRemovedPublicClassNames,\n loadPublicClassNamesSnapshot,\n type PublicClassNameEntry,\n} from '@typestyles/cli';\n\ntype RuleOptions = [\n {\n snapshotFile?: string;\n rootDir?: string;\n }?,\n];\n\nlet comparisonDone = false;\nlet cachedRemoved: PublicClassNameEntry[] = [];\nlet reportsEmitted = false;\n\n/** @internal Test hook */\nexport function resetRemovedPublicClassnameState(): void {\n comparisonDone = false;\n cachedRemoved = [];\n reportsEmitted = false;\n}\n\nfunction resolveRemovedClassNames(\n context: Parameters<NonNullable<ReturnType<typeof createRule>['create']>>[0],\n options: RuleOptions[0],\n): PublicClassNameEntry[] {\n if (comparisonDone) return cachedRemoved;\n\n const rootDir = path.resolve(options?.rootDir ?? context.cwd ?? process.cwd());\n const snapshotPath = path.resolve(rootDir, options?.snapshotFile ?? PUBLIC_CLASSNAMES_SNAPSHOT);\n const snapshot = loadPublicClassNamesSnapshot(snapshotPath);\n if (!snapshot) {\n comparisonDone = true;\n cachedRemoved = [];\n return cachedRemoved;\n }\n\n const current = collectPublicClassNamesSync({ rootDir });\n cachedRemoved = diffRemovedPublicClassNames(snapshot, current);\n comparisonDone = true;\n return cachedRemoved;\n}\n\nexport const noRemovedPublicClassname = createRule<RuleOptions, 'removed'>({\n name: 'no-removed-public-classname',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow removing or renaming semantic class names listed in `.typestyles-public-classnames.json`',\n },\n messages: {\n removed:\n 'Public class name `{{className}}` was removed or renamed. This is a breaking change — restore the name or regenerate the snapshot with `typestyles snapshot --write` after a deliberate semver bump.',\n },\n schema: [\n {\n type: 'object',\n properties: {\n snapshotFile: { type: 'string' },\n rootDir: { type: 'string' },\n },\n additionalProperties: false,\n },\n ],\n },\n defaultOptions: [{}],\n create(context, [options]) {\n const rootDir = path.resolve(options?.rootDir ?? context.cwd ?? process.cwd());\n const snapshotPath = path.resolve(rootDir, options?.snapshotFile ?? PUBLIC_CLASSNAMES_SNAPSHOT);\n if (!loadPublicClassNamesSnapshot(snapshotPath)) {\n return {};\n }\n\n return {\n 'Program:exit'(node) {\n if (reportsEmitted) return;\n reportsEmitted = true;\n\n const removed = resolveRemovedClassNames(context, options);\n for (const entry of removed) {\n context.report({\n node,\n messageId: 'removed',\n data: { className: entry.className },\n });\n }\n },\n };\n },\n});\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\nimport { findShorthandLonghandConflicts } from '../utils/css-properties';\nimport { collectCssPropertyNames, visitStyleObjectLiterals } from '../utils/style-ast';\nimport { getStyleObjectArguments } from '../utils/style-calls';\n\nexport const noShorthandLonghandConflict = createRule({\n name: 'no-shorthand-longhand-conflict',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow mixing CSS shorthand and longhand properties in the same TypeStyles style object',\n },\n messages: {\n conflict:\n '`{{shorthand}}` and `{{longhand}}` must not appear in the same style object — the longhand is ignored or overridden unpredictably.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n function checkStyleObject(obj: TSESTree.ObjectExpression) {\n const propertyNames = collectCssPropertyNames(obj);\n const conflicts = findShorthandLonghandConflicts(propertyNames);\n for (const { shorthand, longhand } of conflicts) {\n context.report({\n node: obj,\n messageId: 'conflict',\n data: { shorthand, longhand },\n });\n }\n }\n\n return {\n CallExpression(node) {\n for (const styleObj of getStyleObjectArguments(node)) {\n visitStyleObjectLiterals(styleObj, checkStyleObject);\n }\n },\n ObjectExpression(node) {\n // Keyframe stops: `{ from: { opacity: 0 }, to: { opacity: 1 } }`\n const parent = node.parent;\n if (\n parent?.type === 'Property' &&\n (parent.key.type === 'Identifier' || parent.key.type === 'Literal')\n ) {\n const parentKey =\n parent.key.type === 'Identifier'\n ? parent.key.name\n : typeof parent.key.value === 'string'\n ? parent.key.value\n : null;\n if (parentKey === 'from' || parentKey === 'to' || /^\\d+%$/.test(parentKey ?? '')) {\n visitStyleObjectLiterals(node, checkStyleObject);\n }\n }\n },\n };\n },\n});\n","import { noDefaultScopeInPackage } from './rules/no-default-scope-in-package';\nimport { noDuplicateNamespace } from './rules/no-duplicate-namespace';\nimport { noInvalidUnitlessValue } from './rules/no-invalid-unitless-value';\nimport { noRemovedPublicClassname } from './rules/no-removed-public-classname';\nimport { noShorthandLonghandConflict } from './rules/no-shorthand-longhand-conflict';\n\nexport const rules = {\n 'no-default-scope-in-package': noDefaultScopeInPackage,\n 'no-shorthand-longhand-conflict': noShorthandLonghandConflict,\n 'no-invalid-unitless-value': noInvalidUnitlessValue,\n 'no-duplicate-namespace': noDuplicateNamespace,\n 'no-removed-public-classname': noRemovedPublicClassname,\n};\n\nexport {\n noDefaultScopeInPackage,\n noShorthandLonghandConflict,\n noInvalidUnitlessValue,\n noDuplicateNamespace,\n noRemovedPublicClassname,\n};\n\nconst plugin = {\n meta: {\n name: '@typestyles/eslint-plugin',\n version: '0.1.0',\n },\n rules,\n};\n\n/** Flat-config preset for TypeStyles projects. */\nexport const configs = {\n recommended: {\n plugins: {\n '@typestyles': plugin,\n },\n rules: {\n '@typestyles/no-shorthand-longhand-conflict': 'error',\n '@typestyles/no-invalid-unitless-value': 'error',\n '@typestyles/no-duplicate-namespace': 'error',\n },\n },\n /** Preset for publishable packages — adds `no-default-scope-in-package`. */\n package: {\n plugins: {\n '@typestyles': plugin,\n },\n rules: {\n '@typestyles/no-shorthand-longhand-conflict': 'error',\n '@typestyles/no-invalid-unitless-value': 'error',\n '@typestyles/no-duplicate-namespace': 'error',\n '@typestyles/no-default-scope-in-package': 'error',\n },\n },\n};\n\nObject.assign(plugin, { configs });\n\nexport default plugin;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/create-rule.ts","../src/rules/no-default-scope-in-package.ts","../src/utils/style-calls.ts","../src/rules/no-duplicate-namespace.ts","../src/utils/css-properties.ts","../src/utils/style-ast.ts","../src/rules/no-invalid-unitless-value.ts","../src/rules/no-removed-public-classname.ts","../src/rules/no-shorthand-longhand-conflict.ts","../src/index.ts"],"names":["ESLintUtils","memberPropertyName","path","PUBLIC_CLASSNAMES_SNAPSHOT","loadPublicClassNamesSnapshot","collectPublicClassNamesSync","diffRemovedPublicClassNames"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ESLintUtils } from '@typescript-eslint/utils';\n\nexport const createRule = ESLintUtils.RuleCreator(\n (name) => `https://typestyles.dev/docs/eslint#${name}`,\n);\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\n\nfunction memberPropertyName(node: TSESTree.MemberExpression): string | null {\n if (node.property.type === 'Identifier' && !node.computed) return node.property.name;\n if (node.property.type === 'Literal' && typeof node.property.value === 'string') {\n return node.property.value;\n }\n return null;\n}\n\nfunction objectHasScopeId(arg: TSESTree.CallExpressionArgument | undefined): boolean {\n if (!arg || arg.type !== 'ObjectExpression') return false;\n for (const prop of arg.properties) {\n if (\n prop.type === 'Property' &&\n !prop.computed &&\n prop.key.type === 'Identifier' &&\n prop.key.name === 'scopeId'\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isUnscopedFactoryCall(node: TSESTree.CallExpression): boolean {\n const { callee, arguments: args } = node;\n if (callee.type !== 'Identifier') return false;\n if (callee.name !== 'createTypeStyles' && callee.name !== 'createStyles') return false;\n // createTypeStyles() / createStyles() or options object without scopeId\n if (args.length === 0) return true;\n const first = args[0];\n if (first.type === 'SpreadElement') return false; // can't statically prove\n if (first.type === 'ObjectExpression') return !objectHasScopeId(first);\n // Non-literal options (variable / call) — skip to avoid false positives\n return false;\n}\n\nfunction isLegacyDefaultStylesCall(node: TSESTree.CallExpression): boolean {\n const { callee } = node;\n if (callee.type !== 'MemberExpression') return false;\n const method = memberPropertyName(callee);\n if (method !== 'class' && method !== 'component' && method !== 'hashClass') return false;\n return callee.object.type === 'Identifier' && callee.object.name === 'styles';\n}\n\nexport const noDefaultScopeInPackage = createRule({\n name: 'no-default-scope-in-package',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Require a scoped styles factory (`createTypeStyles`/`createStyles` with `scopeId`) in publishable packages — flags unscoped factory calls and legacy `styles.*` usage',\n },\n messages: {\n unscopedFactory:\n '`{{factory}}()` without `scopeId` in a published package risks class-name collisions. Pass `scopeId` (e.g. `createTypeStyles({ scopeId: pkg.name })`).',\n unscopedInPackage:\n 'Using the legacy unscoped `styles.{{method}}()` API in a published package risks class-name collisions. Use `createTypeStyles({ scopeId: pkg.name })` and call `style` / `hash` / `recipe` from that instance.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n CallExpression(node) {\n if (isUnscopedFactoryCall(node)) {\n const factory = (node.callee as TSESTree.Identifier).name;\n context.report({\n node: node.callee,\n messageId: 'unscopedFactory',\n data: { factory },\n });\n return;\n }\n\n if (!isLegacyDefaultStylesCall(node)) return;\n\n const method = memberPropertyName(node.callee as TSESTree.MemberExpression) ?? 'class';\n\n context.report({\n node: node.callee,\n messageId: 'unscopedInPackage',\n data: { method },\n });\n },\n };\n },\n});\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nexport type NamespaceKind =\n | 'style'\n | 'recipe'\n | 'hash'\n | 'styles.class'\n | 'styles.component'\n | 'styles.hashClass'\n | 'tokens.create'\n | 'tokens.createTheme'\n | 'createTheme'\n | 'keyframes.create'\n | 'global.rule'\n | 'global.style'\n | 'global.fontFace';\n\nexport interface NamespaceCall {\n kind: NamespaceKind;\n /** Logical namespace key used for duplicate detection. */\n key: string;\n /** AST node for the namespace string literal (for reporting). */\n nameNode: TSESTree.StringLiteral;\n}\n\nfunction memberPropertyName(node: TSESTree.MemberExpression): string | null {\n if (node.property.type === 'Identifier' && !node.computed) return node.property.name;\n if (node.property.type === 'Literal' && typeof node.property.value === 'string') {\n return node.property.value;\n }\n return null;\n}\n\nfunction calleeRootName(node: TSESTree.CallExpression['callee']): string | null {\n if (node.type === 'Identifier') return node.name;\n if (node.type === 'MemberExpression') {\n if (node.object.type === 'Identifier') return node.object.name;\n if (node.object.type === 'MemberExpression') {\n const inner = memberPropertyName(node.object);\n const outer = calleeRootName(node.object);\n if (outer && inner) return `${outer}.${inner}`;\n }\n }\n return null;\n}\n\nfunction isMemberCall(\n callee: TSESTree.CallExpression['callee'],\n objectName: string,\n method: string,\n): boolean {\n if (callee.type !== 'MemberExpression') return false;\n const methodName = memberPropertyName(callee);\n if (methodName !== method) return false;\n if (callee.object.type === 'Identifier') return callee.object.name === objectName;\n return false;\n}\n\nfunction firstStringArg(args: TSESTree.CallExpressionArgument[]): TSESTree.StringLiteral | null {\n const first = args[0];\n if (!first || first.type === 'SpreadElement') return null;\n if (first.type === 'Literal' && typeof first.value === 'string') return first;\n return null;\n}\n\n/**\n * Detect TypeStyles namespace registrations from call expressions.\n * Matches API shape (e.g. `style('card', …)` / `recipe('button', …)`) regardless of import alias.\n */\nexport function getNamespaceCall(node: TSESTree.CallExpression): NamespaceCall | null {\n const { callee, arguments: args } = node;\n\n if (callee.type === 'Identifier' && callee.name === 'style') {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'style', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (callee.type === 'Identifier' && callee.name === 'recipe') {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'recipe', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (callee.type === 'Identifier' && callee.name === 'hash') {\n const first = args[0];\n if (!first || first.type === 'SpreadElement') return null;\n // hash(props, { label }) — label may be in options object; skip keying when absent\n if (args[1]?.type === 'ObjectExpression') {\n for (const prop of args[1].properties) {\n if (\n prop.type === 'Property' &&\n prop.key.type === 'Identifier' &&\n prop.key.name === 'label' &&\n prop.value.type === 'Literal' &&\n typeof prop.value.value === 'string'\n ) {\n return { kind: 'hash', key: `.${prop.value.value}-`, nameNode: prop.value };\n }\n }\n }\n return null;\n }\n\n if (isMemberCall(callee, 'styles', 'class')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.class', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (isMemberCall(callee, 'styles', 'component')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.component', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (isMemberCall(callee, 'styles', 'hashClass')) {\n const first = args[0];\n if (!first || first.type === 'SpreadElement') return null;\n if (first.type === 'Literal' && typeof first.value === 'string') {\n return { kind: 'styles.hashClass', key: `.${first.value}-`, nameNode: first };\n }\n const label = args[1];\n if (label?.type === 'Literal' && typeof label.value === 'string') {\n return { kind: 'styles.hashClass', key: `.${label.value}-`, nameNode: label };\n }\n return null;\n }\n\n if (isMemberCall(callee, 'tokens', 'create')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.create', key: `tokens:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'tokens', 'createTheme')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.createTheme', key: `theme:${nameNode.value}`, nameNode };\n }\n\n if (callee.type === 'Identifier' && callee.name === 'createTheme') {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'createTheme', key: `theme:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'keyframes', 'create')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'keyframes.create', key: `keyframes:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'global', 'rule') || isMemberCall(callee, 'global', 'style')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return {\n kind: isMemberCall(callee, 'global', 'rule') ? 'global.rule' : 'global.style',\n key: nameNode.value,\n nameNode,\n };\n }\n\n if (isMemberCall(callee, 'global', 'fontFace')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'global.fontFace', key: `font-face:${nameNode.value}`, nameNode };\n }\n\n // `myStyles.class` / `myTokens.create` from createStyles/createTokens bindings\n if (callee.type === 'MemberExpression') {\n const method = memberPropertyName(callee);\n const root = calleeRootName(callee);\n if (method === 'class' && root) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.class', key: `.${nameNode.value}-`, nameNode };\n }\n if (method === 'component' && root) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.component', key: `.${nameNode.value}-`, nameNode };\n }\n if (method === 'create' && root?.endsWith('tokens')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.create', key: `tokens:${nameNode.value}`, nameNode };\n }\n }\n\n return null;\n}\n\n/** Extract style object literals passed to TypeStyles style APIs. */\nexport function getStyleObjectArguments(\n node: TSESTree.CallExpression,\n): TSESTree.ObjectExpression[] {\n const { callee, arguments: args } = node;\n const objects: TSESTree.ObjectExpression[] = [];\n\n const pushObject = (arg: TSESTree.CallExpressionArgument | undefined) => {\n if (!arg || arg.type === 'SpreadElement') return;\n if (arg.type === 'ObjectExpression') objects.push(arg);\n if (arg.type === 'ArrowFunctionExpression' && arg.body.type === 'ObjectExpression') {\n objects.push(arg.body);\n }\n };\n\n if (callee.type === 'Identifier' && (callee.name === 'style' || callee.name === 'recipe')) {\n pushObject(args[1]);\n return objects;\n }\n\n if (callee.type === 'Identifier' && callee.name === 'hash') {\n pushObject(args[0]);\n return objects;\n }\n\n if (callee.type === 'MemberExpression') {\n const method = memberPropertyName(callee);\n if (method === 'class' || method === 'component' || method === 'rule' || method === 'style') {\n pushObject(args[1]);\n return objects;\n }\n if (method === 'hashClass' || method === 'rules') {\n const first = args[0];\n if (first && first.type !== 'SpreadElement' && first.type === 'ObjectExpression') {\n objects.push(first);\n }\n return objects;\n }\n }\n\n return objects;\n}\n","import { createRule } from '../utils/create-rule';\nimport { getNamespaceCall } from '../utils/style-calls';\n\ninterface NamespaceLocation {\n filename: string;\n line: number;\n column: number;\n}\n\n/** Cross-file registry for a single ESLint CLI run (best-effort; not shared across workers). */\nconst namespaceRegistry = new Map<string, NamespaceLocation>();\n\n/** @internal Test hook */\nexport function resetNamespaceRegistry(): void {\n namespaceRegistry.clear();\n}\n\nexport const noDuplicateNamespace = createRule({\n name: 'no-duplicate-namespace',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow reusing the same TypeStyles namespace (`styles.class`, `styles.component`, `tokens.create`, …) across the project',\n },\n messages: {\n duplicateInFile:\n 'Namespace `{{name}}` ({{kind}}) is already registered in this file at line {{line}}.',\n duplicateAcrossFiles:\n 'Namespace `{{name}}` ({{kind}}) is already registered in `{{otherFile}}` at line {{line}}.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const fileSeen = new Map<string, { line: number; column: number }>();\n const filename = context.filename;\n\n return {\n CallExpression(node) {\n const call = getNamespaceCall(node);\n if (!call) return;\n\n const displayName =\n call.kind === 'styles.class' || call.kind === 'styles.component'\n ? call.nameNode.value\n : call.nameNode.value;\n\n const line = call.nameNode.loc?.start.line ?? node.loc?.start.line ?? 0;\n const column = call.nameNode.loc?.start.column ?? node.loc?.start.column ?? 0;\n\n const priorInFile = fileSeen.get(call.key);\n if (priorInFile) {\n context.report({\n node: call.nameNode,\n messageId: 'duplicateInFile',\n data: {\n name: displayName,\n kind: call.kind,\n line: String(priorInFile.line),\n },\n });\n return;\n }\n fileSeen.set(call.key, { line, column });\n\n const priorGlobal = namespaceRegistry.get(call.key);\n if (priorGlobal && priorGlobal.filename !== filename) {\n context.report({\n node: call.nameNode,\n messageId: 'duplicateAcrossFiles',\n data: {\n name: displayName,\n kind: call.kind,\n otherFile: priorGlobal.filename,\n line: String(priorGlobal.line),\n },\n });\n return;\n }\n\n if (!priorGlobal) {\n namespaceRegistry.set(call.key, { filename, line, column });\n }\n },\n };\n },\n});\n","/**\n * CSS properties that accept unitless numbers in TypeStyles serialization.\n * Keep in sync with `packages/typestyles/src/css.ts`.\n */\nexport const UNITLESS_PROPERTIES = new Set([\n 'animationIterationCount',\n 'aspectRatio',\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'fontSizeAdjust',\n 'fontWeight',\n 'gridArea',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnSpan',\n 'gridColumnStart',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowSpan',\n 'gridRowStart',\n 'initialLetter',\n 'lineClamp',\n 'lineHeight',\n 'maskBorderOutset',\n 'maskBorderSlice',\n 'maskBorderWidth',\n 'opacity',\n 'order',\n 'orphans',\n 'scale',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n]);\n\nconst VENDOR_PREFIX_RE = /^(Webkit|Moz|ms|O)([A-Z])(.*)$/;\n\nexport function isUnitlessProperty(prop: string): boolean {\n if (UNITLESS_PROPERTIES.has(prop)) return true;\n const match = VENDOR_PREFIX_RE.exec(prop);\n if (match) {\n return UNITLESS_PROPERTIES.has(match[2].toLowerCase() + match[3]);\n }\n return false;\n}\n\n/** Shorthand property → longhands that must not appear in the same style object. */\nexport const SHORTHAND_TO_LONGHANDS: Readonly<Record<string, readonly string[]>> = {\n padding: [\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'paddingInline',\n 'paddingBlock',\n 'paddingInlineStart',\n 'paddingInlineEnd',\n 'paddingBlockStart',\n 'paddingBlockEnd',\n ],\n margin: [\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'marginInline',\n 'marginBlock',\n 'marginInlineStart',\n 'marginInlineEnd',\n 'marginBlockStart',\n 'marginBlockEnd',\n ],\n border: [\n 'borderWidth',\n 'borderStyle',\n 'borderColor',\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n 'borderInline',\n 'borderBlock',\n ],\n borderWidth: [\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderInlineWidth',\n 'borderBlockWidth',\n ],\n borderStyle: ['borderTopStyle', 'borderRightStyle', 'borderBottomStyle', 'borderLeftStyle'],\n borderColor: ['borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'],\n borderTop: ['borderTopWidth', 'borderTopStyle', 'borderTopColor'],\n borderRight: ['borderRightWidth', 'borderRightStyle', 'borderRightColor'],\n borderBottom: ['borderBottomWidth', 'borderBottomStyle', 'borderBottomColor'],\n borderLeft: ['borderLeftWidth', 'borderLeftStyle', 'borderLeftColor'],\n background: [\n 'backgroundColor',\n 'backgroundImage',\n 'backgroundPosition',\n 'backgroundSize',\n 'backgroundRepeat',\n 'backgroundAttachment',\n 'backgroundOrigin',\n 'backgroundClip',\n ],\n font: ['fontStyle', 'fontVariant', 'fontWeight', 'fontSize', 'lineHeight', 'fontFamily'],\n flex: ['flexGrow', 'flexShrink', 'flexBasis'],\n gap: ['rowGap', 'columnGap'],\n overflow: ['overflowX', 'overflowY'],\n transition: [\n 'transitionProperty',\n 'transitionDuration',\n 'transitionTimingFunction',\n 'transitionDelay',\n ],\n animation: [\n 'animationName',\n 'animationDuration',\n 'animationTimingFunction',\n 'animationDelay',\n 'animationIterationCount',\n 'animationDirection',\n 'animationFillMode',\n 'animationPlayState',\n ],\n outline: ['outlineWidth', 'outlineStyle', 'outlineColor'],\n listStyle: ['listStyleType', 'listStylePosition', 'listStyleImage'],\n grid: [\n 'gridTemplateRows',\n 'gridTemplateColumns',\n 'gridTemplateAreas',\n 'gridAutoRows',\n 'gridAutoColumns',\n 'gridAutoFlow',\n ],\n gridTemplate: ['gridTemplateRows', 'gridTemplateColumns', 'gridTemplateAreas'],\n inset: ['top', 'right', 'bottom', 'left'],\n insetBlock: ['insetBlockStart', 'insetBlockEnd'],\n insetInline: ['insetInlineStart', 'insetInlineEnd'],\n};\n\n/** Bare numeric strings (no CSS unit) that emit invalid CSS when serialized. */\nexport const BARE_NUMBER_STRING_RE = /^-?\\d+(\\.\\d+)?$/;\n\nexport function findShorthandLonghandConflicts(\n propertyNames: readonly string[],\n): Array<{ shorthand: string; longhand: string }> {\n const keys = new Set(propertyNames);\n const seen = new Set<string>();\n const conflicts: Array<{ shorthand: string; longhand: string }> = [];\n\n for (const key of keys) {\n const longhands = SHORTHAND_TO_LONGHANDS[key];\n if (longhands) {\n for (const longhand of longhands) {\n if (keys.has(longhand)) {\n const id = `${key}|${longhand}`;\n if (!seen.has(id)) {\n seen.add(id);\n conflicts.push({ shorthand: key, longhand });\n }\n }\n }\n }\n }\n\n return conflicts;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nconst NESTED_SELECTOR_KEY_RE = /^(&|@|\\[)/;\n\n/** Keys that wrap nested style objects in component configs. */\nconst COMPONENT_STRUCTURAL_KEYS = new Set([\n 'base',\n 'variants',\n 'defaultVariants',\n 'compoundVariants',\n 'slots',\n]);\n\nexport function getStaticPropertyKey(prop: TSESTree.Property): string | null {\n if (prop.computed) return null;\n if (prop.key.type === 'Identifier') return prop.key.name;\n if (prop.key.type === 'Literal' && typeof prop.key.value === 'string') return prop.key.value;\n return null;\n}\n\nexport function isCssPropertyKey(key: string): boolean {\n if (NESTED_SELECTOR_KEY_RE.test(key)) return false;\n if (COMPONENT_STRUCTURAL_KEYS.has(key)) return false;\n return /^[a-zA-Z]/.test(key);\n}\n\n/**\n * Collect CSS property names declared at the top level of a style object literal.\n */\nexport function collectCssPropertyNames(obj: TSESTree.ObjectExpression): string[] {\n const names: string[] = [];\n for (const prop of obj.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (key && isCssPropertyKey(key)) names.push(key);\n }\n return names;\n}\n\n/**\n * Visit each style object literal in a TypeStyles style/config tree.\n * Recurses into pseudos, at-rules, component `base` / `variants`, and slot objects.\n */\nexport function visitStyleObjectLiterals(\n node: TSESTree.ObjectExpression,\n onStyleObject: (obj: TSESTree.ObjectExpression) => void,\n): void {\n onStyleObject(node);\n\n for (const prop of node.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (!key) continue;\n\n if (NESTED_SELECTOR_KEY_RE.test(key)) {\n if (prop.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(prop.value, onStyleObject);\n }\n continue;\n }\n\n if (key === 'variants' && prop.value.type === 'ObjectExpression') {\n for (const groupProp of prop.value.properties) {\n if (groupProp.type !== 'Property' || groupProp.value.type !== 'ObjectExpression') continue;\n for (const optionProp of groupProp.value.properties) {\n if (optionProp.type === 'Property' && optionProp.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(optionProp.value, onStyleObject);\n }\n }\n }\n continue;\n }\n\n if (key === 'compoundVariants' && prop.value.type === 'ArrayExpression') {\n for (const element of prop.value.elements) {\n if (!element || element.type !== 'ObjectExpression') continue;\n for (const cvProp of element.properties) {\n if (cvProp.type !== 'Property') continue;\n const cvKey = getStaticPropertyKey(cvProp);\n if (cvKey === 'css' && cvProp.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(cvProp.value, onStyleObject);\n }\n }\n }\n continue;\n }\n\n if (\n (COMPONENT_STRUCTURAL_KEYS.has(key) || prop.value.type === 'ObjectExpression') &&\n prop.value.type === 'ObjectExpression'\n ) {\n visitStyleObjectLiterals(prop.value, onStyleObject);\n }\n }\n}\n\nexport function getStringLiteralValue(node: TSESTree.Node): string | null {\n if (node.type === 'Literal' && typeof node.value === 'string') return node.value;\n return null;\n}\n\nexport function getNumericLiteralValue(node: TSESTree.Node): number | null {\n if (node.type === 'Literal' && typeof node.value === 'number') return node.value;\n return null;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\nimport { BARE_NUMBER_STRING_RE, isUnitlessProperty } from '../utils/css-properties';\nimport {\n getNumericLiteralValue,\n getStaticPropertyKey,\n getStringLiteralValue,\n isCssPropertyKey,\n visitStyleObjectLiterals,\n} from '../utils/style-ast';\nimport { getStyleObjectArguments } from '../utils/style-calls';\n\nexport const noInvalidUnitlessValue = createRule({\n name: 'no-invalid-unitless-value',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow bare numeric strings on properties that require CSS units (TypeStyles only auto-appends `px` to numbers, not strings)',\n },\n messages: {\n bareNumberString:\n '`{{property}}` is set to bare number string `{{value}}`, which emits invalid CSS. Use a number (`{{numeric}}`) or a value with units (`{{value}}px`).',\n suspiciousUnitlessNumber:\n '`{{property}}` is unitless in CSS — numeric `{{value}}` is emitted without a unit. Use a ratio (e.g. `1.5`) or an explicit length (`\"24px\"`).',\n },\n schema: [\n {\n type: 'object',\n properties: {\n checkSuspiciousUnitlessNumbers: { type: 'boolean' },\n },\n additionalProperties: false,\n },\n ],\n },\n defaultOptions: [{ checkSuspiciousUnitlessNumbers: true }],\n create(context, [options]) {\n /** Properties where a large integer usually means the author meant a length, not a unitless ratio. */\n const SUSPICIOUS_UNITLESS_PROPERTIES = new Set(['lineHeight']);\n\n function checkStyleObject(obj: TSESTree.ObjectExpression) {\n for (const prop of obj.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (!key || !isCssPropertyKey(key)) continue;\n\n const stringValue = getStringLiteralValue(prop.value);\n if (stringValue && BARE_NUMBER_STRING_RE.test(stringValue) && !isUnitlessProperty(key)) {\n context.report({\n node: prop.value,\n messageId: 'bareNumberString',\n data: {\n property: key,\n value: stringValue,\n numeric: stringValue,\n },\n });\n continue;\n }\n\n if (options.checkSuspiciousUnitlessNumbers && SUSPICIOUS_UNITLESS_PROPERTIES.has(key)) {\n const num = getNumericLiteralValue(prop.value);\n if (num != null && num >= 8 && Number.isInteger(num)) {\n context.report({\n node: prop.value,\n messageId: 'suspiciousUnitlessNumber',\n data: { property: key, value: String(num) },\n });\n }\n }\n }\n }\n\n return {\n CallExpression(node) {\n for (const styleObj of getStyleObjectArguments(node)) {\n visitStyleObjectLiterals(styleObj, checkStyleObject);\n }\n },\n ObjectExpression(node) {\n const parent = node.parent;\n if (\n parent?.type === 'Property' &&\n (parent.key.type === 'Identifier' || parent.key.type === 'Literal')\n ) {\n const parentKey =\n parent.key.type === 'Identifier'\n ? parent.key.name\n : typeof parent.key.value === 'string'\n ? parent.key.value\n : null;\n if (parentKey === 'from' || parentKey === 'to' || /^\\d+%$/.test(parentKey ?? '')) {\n visitStyleObjectLiterals(node, checkStyleObject);\n }\n }\n },\n };\n },\n});\n","import path from 'node:path';\nimport { createRule } from '../utils/create-rule';\nimport {\n PUBLIC_CLASSNAMES_SNAPSHOT,\n collectPublicClassNamesSync,\n diffRemovedPublicClassNames,\n loadPublicClassNamesSnapshot,\n type PublicClassNameEntry,\n} from '@typestyles/cli';\n\ntype RuleOptions = [\n {\n snapshotFile?: string;\n rootDir?: string;\n }?,\n];\n\nlet comparisonDone = false;\nlet cachedRemoved: PublicClassNameEntry[] = [];\nlet reportsEmitted = false;\n\n/** @internal Test hook */\nexport function resetRemovedPublicClassnameState(): void {\n comparisonDone = false;\n cachedRemoved = [];\n reportsEmitted = false;\n}\n\nfunction resolveRemovedClassNames(\n context: Parameters<NonNullable<ReturnType<typeof createRule>['create']>>[0],\n options: RuleOptions[0],\n): PublicClassNameEntry[] {\n if (comparisonDone) return cachedRemoved;\n\n const rootDir = path.resolve(options?.rootDir ?? context.cwd ?? process.cwd());\n const snapshotPath = path.resolve(rootDir, options?.snapshotFile ?? PUBLIC_CLASSNAMES_SNAPSHOT);\n const snapshot = loadPublicClassNamesSnapshot(snapshotPath);\n if (!snapshot) {\n comparisonDone = true;\n cachedRemoved = [];\n return cachedRemoved;\n }\n\n const current = collectPublicClassNamesSync({ rootDir });\n cachedRemoved = diffRemovedPublicClassNames(snapshot, current);\n comparisonDone = true;\n return cachedRemoved;\n}\n\nexport const noRemovedPublicClassname = createRule<RuleOptions, 'removed'>({\n name: 'no-removed-public-classname',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow removing or renaming semantic class names listed in `.typestyles-public-classnames.json`',\n },\n messages: {\n removed:\n 'Public class name `{{className}}` was removed or renamed. This is a breaking change — restore the name or regenerate the snapshot with `typestyles snapshot --write` after a deliberate semver bump.',\n },\n schema: [\n {\n type: 'object',\n properties: {\n snapshotFile: { type: 'string' },\n rootDir: { type: 'string' },\n },\n additionalProperties: false,\n },\n ],\n },\n defaultOptions: [{}],\n create(context, [options]) {\n const rootDir = path.resolve(options?.rootDir ?? context.cwd ?? process.cwd());\n const snapshotPath = path.resolve(rootDir, options?.snapshotFile ?? PUBLIC_CLASSNAMES_SNAPSHOT);\n if (!loadPublicClassNamesSnapshot(snapshotPath)) {\n return {};\n }\n\n return {\n 'Program:exit'(node) {\n if (reportsEmitted) return;\n reportsEmitted = true;\n\n const removed = resolveRemovedClassNames(context, options);\n for (const entry of removed) {\n context.report({\n node,\n messageId: 'removed',\n data: { className: entry.className },\n });\n }\n },\n };\n },\n});\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\nimport { findShorthandLonghandConflicts } from '../utils/css-properties';\nimport { collectCssPropertyNames, visitStyleObjectLiterals } from '../utils/style-ast';\nimport { getStyleObjectArguments } from '../utils/style-calls';\n\nexport const noShorthandLonghandConflict = createRule({\n name: 'no-shorthand-longhand-conflict',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow mixing CSS shorthand and longhand properties in the same TypeStyles style object',\n },\n messages: {\n conflict:\n '`{{shorthand}}` and `{{longhand}}` must not appear in the same style object — the longhand is ignored or overridden unpredictably.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n function checkStyleObject(obj: TSESTree.ObjectExpression) {\n const propertyNames = collectCssPropertyNames(obj);\n const conflicts = findShorthandLonghandConflicts(propertyNames);\n for (const { shorthand, longhand } of conflicts) {\n context.report({\n node: obj,\n messageId: 'conflict',\n data: { shorthand, longhand },\n });\n }\n }\n\n return {\n CallExpression(node) {\n for (const styleObj of getStyleObjectArguments(node)) {\n visitStyleObjectLiterals(styleObj, checkStyleObject);\n }\n },\n ObjectExpression(node) {\n // Keyframe stops: `{ from: { opacity: 0 }, to: { opacity: 1 } }`\n const parent = node.parent;\n if (\n parent?.type === 'Property' &&\n (parent.key.type === 'Identifier' || parent.key.type === 'Literal')\n ) {\n const parentKey =\n parent.key.type === 'Identifier'\n ? parent.key.name\n : typeof parent.key.value === 'string'\n ? parent.key.value\n : null;\n if (parentKey === 'from' || parentKey === 'to' || /^\\d+%$/.test(parentKey ?? '')) {\n visitStyleObjectLiterals(node, checkStyleObject);\n }\n }\n },\n };\n },\n});\n","import { noDefaultScopeInPackage } from './rules/no-default-scope-in-package';\nimport { noDuplicateNamespace } from './rules/no-duplicate-namespace';\nimport { noInvalidUnitlessValue } from './rules/no-invalid-unitless-value';\nimport { noRemovedPublicClassname } from './rules/no-removed-public-classname';\nimport { noShorthandLonghandConflict } from './rules/no-shorthand-longhand-conflict';\n\nexport const rules = {\n 'no-default-scope-in-package': noDefaultScopeInPackage,\n 'no-shorthand-longhand-conflict': noShorthandLonghandConflict,\n 'no-invalid-unitless-value': noInvalidUnitlessValue,\n 'no-duplicate-namespace': noDuplicateNamespace,\n 'no-removed-public-classname': noRemovedPublicClassname,\n};\n\nexport {\n noDefaultScopeInPackage,\n noShorthandLonghandConflict,\n noInvalidUnitlessValue,\n noDuplicateNamespace,\n noRemovedPublicClassname,\n};\n\nconst plugin = {\n meta: {\n name: '@typestyles/eslint-plugin',\n version: '0.1.0',\n },\n rules,\n};\n\n/** Flat-config preset for TypeStyles projects. */\nexport const configs = {\n recommended: {\n plugins: {\n '@typestyles': plugin,\n },\n rules: {\n '@typestyles/no-shorthand-longhand-conflict': 'error',\n '@typestyles/no-invalid-unitless-value': 'error',\n '@typestyles/no-duplicate-namespace': 'error',\n },\n },\n /** Preset for publishable packages — adds `no-default-scope-in-package`. */\n package: {\n plugins: {\n '@typestyles': plugin,\n },\n rules: {\n '@typestyles/no-shorthand-longhand-conflict': 'error',\n '@typestyles/no-invalid-unitless-value': 'error',\n '@typestyles/no-duplicate-namespace': 'error',\n '@typestyles/no-default-scope-in-package': 'error',\n },\n },\n};\n\nObject.assign(plugin, { configs });\n\nexport default plugin;\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _typescript_eslint_utils_ts_eslint from '@typescript-eslint/utils/ts-eslint';
|
|
2
2
|
|
|
3
|
-
declare const noDefaultScopeInPackage: _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
3
|
+
declare const noDefaultScopeInPackage: _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedFactory" | "unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
4
4
|
name: string;
|
|
5
5
|
};
|
|
6
6
|
|
|
@@ -29,7 +29,7 @@ declare const noShorthandLonghandConflict: _typescript_eslint_utils_ts_eslint.Ru
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
declare const rules: {
|
|
32
|
-
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
32
|
+
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedFactory" | "unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
33
33
|
name: string;
|
|
34
34
|
};
|
|
35
35
|
'no-shorthand-longhand-conflict': _typescript_eslint_utils_ts_eslint.RuleModule<"conflict", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
@@ -57,7 +57,7 @@ declare const plugin: {
|
|
|
57
57
|
version: string;
|
|
58
58
|
};
|
|
59
59
|
rules: {
|
|
60
|
-
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
60
|
+
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedFactory" | "unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
61
61
|
name: string;
|
|
62
62
|
};
|
|
63
63
|
'no-shorthand-longhand-conflict': _typescript_eslint_utils_ts_eslint.RuleModule<"conflict", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
@@ -89,7 +89,7 @@ declare const configs: {
|
|
|
89
89
|
version: string;
|
|
90
90
|
};
|
|
91
91
|
rules: {
|
|
92
|
-
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
92
|
+
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedFactory" | "unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
93
93
|
name: string;
|
|
94
94
|
};
|
|
95
95
|
'no-shorthand-longhand-conflict': _typescript_eslint_utils_ts_eslint.RuleModule<"conflict", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
@@ -127,7 +127,7 @@ declare const configs: {
|
|
|
127
127
|
version: string;
|
|
128
128
|
};
|
|
129
129
|
rules: {
|
|
130
|
-
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
130
|
+
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedFactory" | "unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
131
131
|
name: string;
|
|
132
132
|
};
|
|
133
133
|
'no-shorthand-longhand-conflict': _typescript_eslint_utils_ts_eslint.RuleModule<"conflict", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _typescript_eslint_utils_ts_eslint from '@typescript-eslint/utils/ts-eslint';
|
|
2
2
|
|
|
3
|
-
declare const noDefaultScopeInPackage: _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
3
|
+
declare const noDefaultScopeInPackage: _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedFactory" | "unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
4
4
|
name: string;
|
|
5
5
|
};
|
|
6
6
|
|
|
@@ -29,7 +29,7 @@ declare const noShorthandLonghandConflict: _typescript_eslint_utils_ts_eslint.Ru
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
declare const rules: {
|
|
32
|
-
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
32
|
+
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedFactory" | "unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
33
33
|
name: string;
|
|
34
34
|
};
|
|
35
35
|
'no-shorthand-longhand-conflict': _typescript_eslint_utils_ts_eslint.RuleModule<"conflict", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
@@ -57,7 +57,7 @@ declare const plugin: {
|
|
|
57
57
|
version: string;
|
|
58
58
|
};
|
|
59
59
|
rules: {
|
|
60
|
-
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
60
|
+
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedFactory" | "unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
61
61
|
name: string;
|
|
62
62
|
};
|
|
63
63
|
'no-shorthand-longhand-conflict': _typescript_eslint_utils_ts_eslint.RuleModule<"conflict", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
@@ -89,7 +89,7 @@ declare const configs: {
|
|
|
89
89
|
version: string;
|
|
90
90
|
};
|
|
91
91
|
rules: {
|
|
92
|
-
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
92
|
+
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedFactory" | "unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
93
93
|
name: string;
|
|
94
94
|
};
|
|
95
95
|
'no-shorthand-longhand-conflict': _typescript_eslint_utils_ts_eslint.RuleModule<"conflict", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
@@ -127,7 +127,7 @@ declare const configs: {
|
|
|
127
127
|
version: string;
|
|
128
128
|
};
|
|
129
129
|
rules: {
|
|
130
|
-
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
130
|
+
'no-default-scope-in-package': _typescript_eslint_utils_ts_eslint.RuleModule<"unscopedFactory" | "unscopedInPackage", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
131
131
|
name: string;
|
|
132
132
|
};
|
|
133
133
|
'no-shorthand-longhand-conflict': _typescript_eslint_utils_ts_eslint.RuleModule<"conflict", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
package/dist/index.js
CHANGED
|
@@ -15,25 +15,42 @@ function memberPropertyName(node) {
|
|
|
15
15
|
}
|
|
16
16
|
return null;
|
|
17
17
|
}
|
|
18
|
-
function
|
|
18
|
+
function objectHasScopeId(arg) {
|
|
19
|
+
if (!arg || arg.type !== "ObjectExpression") return false;
|
|
20
|
+
for (const prop of arg.properties) {
|
|
21
|
+
if (prop.type === "Property" && !prop.computed && prop.key.type === "Identifier" && prop.key.name === "scopeId") {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
function isUnscopedFactoryCall(node) {
|
|
28
|
+
const { callee, arguments: args } = node;
|
|
29
|
+
if (callee.type !== "Identifier") return false;
|
|
30
|
+
if (callee.name !== "createTypeStyles" && callee.name !== "createStyles") return false;
|
|
31
|
+
if (args.length === 0) return true;
|
|
32
|
+
const first = args[0];
|
|
33
|
+
if (first.type === "SpreadElement") return false;
|
|
34
|
+
if (first.type === "ObjectExpression") return !objectHasScopeId(first);
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
function isLegacyDefaultStylesCall(node) {
|
|
19
38
|
const { callee } = node;
|
|
20
39
|
if (callee.type !== "MemberExpression") return false;
|
|
21
40
|
const method = memberPropertyName(callee);
|
|
22
|
-
if (method !== "class" && method !== "component") return false;
|
|
23
|
-
|
|
24
|
-
return callee.object.name === "styles";
|
|
25
|
-
}
|
|
26
|
-
return false;
|
|
41
|
+
if (method !== "class" && method !== "component" && method !== "hashClass") return false;
|
|
42
|
+
return callee.object.type === "Identifier" && callee.object.name === "styles";
|
|
27
43
|
}
|
|
28
44
|
var noDefaultScopeInPackage = createRule({
|
|
29
45
|
name: "no-default-scope-in-package",
|
|
30
46
|
meta: {
|
|
31
47
|
type: "suggestion",
|
|
32
48
|
docs: {
|
|
33
|
-
description: "Require a scoped styles factory (`createTypeStyles`/`createStyles` with `scopeId`)
|
|
49
|
+
description: "Require a scoped styles factory (`createTypeStyles`/`createStyles` with `scopeId`) in publishable packages \u2014 flags unscoped factory calls and legacy `styles.*` usage"
|
|
34
50
|
},
|
|
35
51
|
messages: {
|
|
36
|
-
|
|
52
|
+
unscopedFactory: "`{{factory}}()` without `scopeId` in a published package risks class-name collisions. Pass `scopeId` (e.g. `createTypeStyles({ scopeId: pkg.name })`).",
|
|
53
|
+
unscopedInPackage: "Using the legacy unscoped `styles.{{method}}()` API in a published package risks class-name collisions. Use `createTypeStyles({ scopeId: pkg.name })` and call `style` / `hash` / `recipe` from that instance."
|
|
37
54
|
},
|
|
38
55
|
schema: []
|
|
39
56
|
},
|
|
@@ -41,12 +58,21 @@ var noDefaultScopeInPackage = createRule({
|
|
|
41
58
|
create(context) {
|
|
42
59
|
return {
|
|
43
60
|
CallExpression(node) {
|
|
44
|
-
if (
|
|
45
|
-
|
|
61
|
+
if (isUnscopedFactoryCall(node)) {
|
|
62
|
+
const factory = node.callee.name;
|
|
63
|
+
context.report({
|
|
64
|
+
node: node.callee,
|
|
65
|
+
messageId: "unscopedFactory",
|
|
66
|
+
data: { factory }
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (!isLegacyDefaultStylesCall(node)) return;
|
|
71
|
+
const method = memberPropertyName(node.callee) ?? "class";
|
|
46
72
|
context.report({
|
|
47
73
|
node: node.callee,
|
|
48
74
|
messageId: "unscopedInPackage",
|
|
49
|
-
data: { method
|
|
75
|
+
data: { method }
|
|
50
76
|
});
|
|
51
77
|
}
|
|
52
78
|
};
|
|
@@ -88,6 +114,28 @@ function firstStringArg(args) {
|
|
|
88
114
|
}
|
|
89
115
|
function getNamespaceCall(node) {
|
|
90
116
|
const { callee, arguments: args } = node;
|
|
117
|
+
if (callee.type === "Identifier" && callee.name === "style") {
|
|
118
|
+
const nameNode = firstStringArg(args);
|
|
119
|
+
if (!nameNode) return null;
|
|
120
|
+
return { kind: "style", key: `.${nameNode.value}-`, nameNode };
|
|
121
|
+
}
|
|
122
|
+
if (callee.type === "Identifier" && callee.name === "recipe") {
|
|
123
|
+
const nameNode = firstStringArg(args);
|
|
124
|
+
if (!nameNode) return null;
|
|
125
|
+
return { kind: "recipe", key: `.${nameNode.value}-`, nameNode };
|
|
126
|
+
}
|
|
127
|
+
if (callee.type === "Identifier" && callee.name === "hash") {
|
|
128
|
+
const first = args[0];
|
|
129
|
+
if (!first || first.type === "SpreadElement") return null;
|
|
130
|
+
if (args[1]?.type === "ObjectExpression") {
|
|
131
|
+
for (const prop of args[1].properties) {
|
|
132
|
+
if (prop.type === "Property" && prop.key.type === "Identifier" && prop.key.name === "label" && prop.value.type === "Literal" && typeof prop.value.value === "string") {
|
|
133
|
+
return { kind: "hash", key: `.${prop.value.value}-`, nameNode: prop.value };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
91
139
|
if (isMemberCall(callee, "styles", "class")) {
|
|
92
140
|
const nameNode = firstStringArg(args);
|
|
93
141
|
if (!nameNode) return null;
|
|
@@ -130,10 +178,14 @@ function getNamespaceCall(node) {
|
|
|
130
178
|
if (!nameNode) return null;
|
|
131
179
|
return { kind: "keyframes.create", key: `keyframes:${nameNode.value}`, nameNode };
|
|
132
180
|
}
|
|
133
|
-
if (isMemberCall(callee, "global", "style")) {
|
|
181
|
+
if (isMemberCall(callee, "global", "rule") || isMemberCall(callee, "global", "style")) {
|
|
134
182
|
const nameNode = firstStringArg(args);
|
|
135
183
|
if (!nameNode) return null;
|
|
136
|
-
return {
|
|
184
|
+
return {
|
|
185
|
+
kind: isMemberCall(callee, "global", "rule") ? "global.rule" : "global.style",
|
|
186
|
+
key: nameNode.value,
|
|
187
|
+
nameNode
|
|
188
|
+
};
|
|
137
189
|
}
|
|
138
190
|
if (isMemberCall(callee, "global", "fontFace")) {
|
|
139
191
|
const nameNode = firstStringArg(args);
|
|
@@ -171,13 +223,21 @@ function getStyleObjectArguments(node) {
|
|
|
171
223
|
objects.push(arg.body);
|
|
172
224
|
}
|
|
173
225
|
};
|
|
226
|
+
if (callee.type === "Identifier" && (callee.name === "style" || callee.name === "recipe")) {
|
|
227
|
+
pushObject(args[1]);
|
|
228
|
+
return objects;
|
|
229
|
+
}
|
|
230
|
+
if (callee.type === "Identifier" && callee.name === "hash") {
|
|
231
|
+
pushObject(args[0]);
|
|
232
|
+
return objects;
|
|
233
|
+
}
|
|
174
234
|
if (callee.type === "MemberExpression") {
|
|
175
235
|
const method = memberPropertyName2(callee);
|
|
176
|
-
if (method === "class" || method === "component") {
|
|
236
|
+
if (method === "class" || method === "component" || method === "rule" || method === "style") {
|
|
177
237
|
pushObject(args[1]);
|
|
178
238
|
return objects;
|
|
179
239
|
}
|
|
180
|
-
if (method === "hashClass") {
|
|
240
|
+
if (method === "hashClass" || method === "rules") {
|
|
181
241
|
const first = args[0];
|
|
182
242
|
if (first && first.type !== "SpreadElement" && first.type === "ObjectExpression") {
|
|
183
243
|
objects.push(first);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/create-rule.ts","../src/rules/no-default-scope-in-package.ts","../src/utils/style-calls.ts","../src/rules/no-duplicate-namespace.ts","../src/utils/css-properties.ts","../src/utils/style-ast.ts","../src/rules/no-invalid-unitless-value.ts","../src/rules/no-removed-public-classname.ts","../src/rules/no-shorthand-longhand-conflict.ts","../src/index.ts"],"names":["memberPropertyName"],"mappings":"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","file":"index.js","sourcesContent":["import { ESLintUtils } from '@typescript-eslint/utils';\n\nexport const createRule = ESLintUtils.RuleCreator(\n (name) => `https://typestyles.dev/docs/eslint#${name}`,\n);\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\n\nfunction memberPropertyName(node: TSESTree.MemberExpression): string | null {\n if (node.property.type === 'Identifier' && !node.computed) return node.property.name;\n if (node.property.type === 'Literal' && typeof node.property.value === 'string') {\n return node.property.value;\n }\n return null;\n}\n\nfunction isDefaultStylesCall(node: TSESTree.CallExpression): boolean {\n const { callee } = node;\n if (callee.type !== 'MemberExpression') return false;\n const method = memberPropertyName(callee);\n if (method !== 'class' && method !== 'component') return false;\n\n if (callee.object.type === 'Identifier') {\n return callee.object.name === 'styles';\n }\n return false;\n}\n\nexport const noDefaultScopeInPackage = createRule({\n name: 'no-default-scope-in-package',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Require a scoped styles factory (`createTypeStyles`/`createStyles` with `scopeId`) instead of the default `styles` export in publishable packages',\n },\n messages: {\n unscopedInPackage:\n 'Using the default `styles.{{method}}()` in a published package risks class-name collisions. Use `createTypeStyles({ scopeId: pkg.name })` or `createStyles({ scopeId })` instead.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n CallExpression(node) {\n if (!isDefaultStylesCall(node)) return;\n\n const method = memberPropertyName(node.callee as TSESTree.MemberExpression);\n\n context.report({\n node: node.callee,\n messageId: 'unscopedInPackage',\n data: { method: method ?? 'class' },\n });\n },\n };\n },\n});\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nexport type NamespaceKind =\n | 'styles.class'\n | 'styles.component'\n | 'styles.hashClass'\n | 'tokens.create'\n | 'tokens.createTheme'\n | 'createTheme'\n | 'keyframes.create'\n | 'global.style'\n | 'global.fontFace';\n\nexport interface NamespaceCall {\n kind: NamespaceKind;\n /** Logical namespace key used for duplicate detection. */\n key: string;\n /** AST node for the namespace string literal (for reporting). */\n nameNode: TSESTree.StringLiteral;\n}\n\nfunction memberPropertyName(node: TSESTree.MemberExpression): string | null {\n if (node.property.type === 'Identifier' && !node.computed) return node.property.name;\n if (node.property.type === 'Literal' && typeof node.property.value === 'string') {\n return node.property.value;\n }\n return null;\n}\n\nfunction calleeRootName(node: TSESTree.CallExpression['callee']): string | null {\n if (node.type === 'Identifier') return node.name;\n if (node.type === 'MemberExpression') {\n if (node.object.type === 'Identifier') return node.object.name;\n if (node.object.type === 'MemberExpression') {\n const inner = memberPropertyName(node.object);\n const outer = calleeRootName(node.object);\n if (outer && inner) return `${outer}.${inner}`;\n }\n }\n return null;\n}\n\nfunction isMemberCall(\n callee: TSESTree.CallExpression['callee'],\n objectName: string,\n method: string,\n): boolean {\n if (callee.type !== 'MemberExpression') return false;\n const methodName = memberPropertyName(callee);\n if (methodName !== method) return false;\n if (callee.object.type === 'Identifier') return callee.object.name === objectName;\n return false;\n}\n\nfunction firstStringArg(args: TSESTree.CallExpressionArgument[]): TSESTree.StringLiteral | null {\n const first = args[0];\n if (!first || first.type === 'SpreadElement') return null;\n if (first.type === 'Literal' && typeof first.value === 'string') return first;\n return null;\n}\n\n/**\n * Detect TypeStyles namespace registrations from call expressions.\n * Matches API shape (e.g. `styles.class('card', …)`) regardless of import alias.\n */\nexport function getNamespaceCall(node: TSESTree.CallExpression): NamespaceCall | null {\n const { callee, arguments: args } = node;\n\n if (isMemberCall(callee, 'styles', 'class')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.class', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (isMemberCall(callee, 'styles', 'component')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.component', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (isMemberCall(callee, 'styles', 'hashClass')) {\n const first = args[0];\n if (!first || first.type === 'SpreadElement') return null;\n if (first.type === 'Literal' && typeof first.value === 'string') {\n return { kind: 'styles.hashClass', key: `.${first.value}-`, nameNode: first };\n }\n const label = args[1];\n if (label?.type === 'Literal' && typeof label.value === 'string') {\n return { kind: 'styles.hashClass', key: `.${label.value}-`, nameNode: label };\n }\n return null;\n }\n\n if (isMemberCall(callee, 'tokens', 'create')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.create', key: `tokens:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'tokens', 'createTheme')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.createTheme', key: `theme:${nameNode.value}`, nameNode };\n }\n\n if (callee.type === 'Identifier' && callee.name === 'createTheme') {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'createTheme', key: `theme:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'keyframes', 'create')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'keyframes.create', key: `keyframes:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'global', 'style')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'global.style', key: nameNode.value, nameNode };\n }\n\n if (isMemberCall(callee, 'global', 'fontFace')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'global.fontFace', key: `font-face:${nameNode.value}`, nameNode };\n }\n\n // `myStyles.class` / `myTokens.create` from createStyles/createTokens bindings\n if (callee.type === 'MemberExpression') {\n const method = memberPropertyName(callee);\n const root = calleeRootName(callee);\n if (method === 'class' && root) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.class', key: `.${nameNode.value}-`, nameNode };\n }\n if (method === 'component' && root) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.component', key: `.${nameNode.value}-`, nameNode };\n }\n if (method === 'create' && root?.endsWith('tokens')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.create', key: `tokens:${nameNode.value}`, nameNode };\n }\n }\n\n return null;\n}\n\n/** Extract style object literals passed to TypeStyles style APIs. */\nexport function getStyleObjectArguments(\n node: TSESTree.CallExpression,\n): TSESTree.ObjectExpression[] {\n const { callee, arguments: args } = node;\n const objects: TSESTree.ObjectExpression[] = [];\n\n const pushObject = (arg: TSESTree.CallExpressionArgument | undefined) => {\n if (!arg || arg.type === 'SpreadElement') return;\n if (arg.type === 'ObjectExpression') objects.push(arg);\n if (arg.type === 'ArrowFunctionExpression' && arg.body.type === 'ObjectExpression') {\n objects.push(arg.body);\n }\n };\n\n if (callee.type === 'MemberExpression') {\n const method = memberPropertyName(callee);\n if (method === 'class' || method === 'component') {\n pushObject(args[1]);\n return objects;\n }\n if (method === 'hashClass') {\n const first = args[0];\n if (first && first.type !== 'SpreadElement' && first.type === 'ObjectExpression') {\n objects.push(first);\n }\n return objects;\n }\n }\n\n return objects;\n}\n","import { createRule } from '../utils/create-rule';\nimport { getNamespaceCall } from '../utils/style-calls';\n\ninterface NamespaceLocation {\n filename: string;\n line: number;\n column: number;\n}\n\n/** Cross-file registry for a single ESLint CLI run (best-effort; not shared across workers). */\nconst namespaceRegistry = new Map<string, NamespaceLocation>();\n\n/** @internal Test hook */\nexport function resetNamespaceRegistry(): void {\n namespaceRegistry.clear();\n}\n\nexport const noDuplicateNamespace = createRule({\n name: 'no-duplicate-namespace',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow reusing the same TypeStyles namespace (`styles.class`, `styles.component`, `tokens.create`, …) across the project',\n },\n messages: {\n duplicateInFile:\n 'Namespace `{{name}}` ({{kind}}) is already registered in this file at line {{line}}.',\n duplicateAcrossFiles:\n 'Namespace `{{name}}` ({{kind}}) is already registered in `{{otherFile}}` at line {{line}}.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const fileSeen = new Map<string, { line: number; column: number }>();\n const filename = context.filename;\n\n return {\n CallExpression(node) {\n const call = getNamespaceCall(node);\n if (!call) return;\n\n const displayName =\n call.kind === 'styles.class' || call.kind === 'styles.component'\n ? call.nameNode.value\n : call.nameNode.value;\n\n const line = call.nameNode.loc?.start.line ?? node.loc?.start.line ?? 0;\n const column = call.nameNode.loc?.start.column ?? node.loc?.start.column ?? 0;\n\n const priorInFile = fileSeen.get(call.key);\n if (priorInFile) {\n context.report({\n node: call.nameNode,\n messageId: 'duplicateInFile',\n data: {\n name: displayName,\n kind: call.kind,\n line: String(priorInFile.line),\n },\n });\n return;\n }\n fileSeen.set(call.key, { line, column });\n\n const priorGlobal = namespaceRegistry.get(call.key);\n if (priorGlobal && priorGlobal.filename !== filename) {\n context.report({\n node: call.nameNode,\n messageId: 'duplicateAcrossFiles',\n data: {\n name: displayName,\n kind: call.kind,\n otherFile: priorGlobal.filename,\n line: String(priorGlobal.line),\n },\n });\n return;\n }\n\n if (!priorGlobal) {\n namespaceRegistry.set(call.key, { filename, line, column });\n }\n },\n };\n },\n});\n","/**\n * CSS properties that accept unitless numbers in TypeStyles serialization.\n * Keep in sync with `packages/typestyles/src/css.ts`.\n */\nexport const UNITLESS_PROPERTIES = new Set([\n 'animationIterationCount',\n 'aspectRatio',\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'fontSizeAdjust',\n 'fontWeight',\n 'gridArea',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnSpan',\n 'gridColumnStart',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowSpan',\n 'gridRowStart',\n 'initialLetter',\n 'lineClamp',\n 'lineHeight',\n 'maskBorderOutset',\n 'maskBorderSlice',\n 'maskBorderWidth',\n 'opacity',\n 'order',\n 'orphans',\n 'scale',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n]);\n\nconst VENDOR_PREFIX_RE = /^(Webkit|Moz|ms|O)([A-Z])(.*)$/;\n\nexport function isUnitlessProperty(prop: string): boolean {\n if (UNITLESS_PROPERTIES.has(prop)) return true;\n const match = VENDOR_PREFIX_RE.exec(prop);\n if (match) {\n return UNITLESS_PROPERTIES.has(match[2].toLowerCase() + match[3]);\n }\n return false;\n}\n\n/** Shorthand property → longhands that must not appear in the same style object. */\nexport const SHORTHAND_TO_LONGHANDS: Readonly<Record<string, readonly string[]>> = {\n padding: [\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'paddingInline',\n 'paddingBlock',\n 'paddingInlineStart',\n 'paddingInlineEnd',\n 'paddingBlockStart',\n 'paddingBlockEnd',\n ],\n margin: [\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'marginInline',\n 'marginBlock',\n 'marginInlineStart',\n 'marginInlineEnd',\n 'marginBlockStart',\n 'marginBlockEnd',\n ],\n border: [\n 'borderWidth',\n 'borderStyle',\n 'borderColor',\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n 'borderInline',\n 'borderBlock',\n ],\n borderWidth: [\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderInlineWidth',\n 'borderBlockWidth',\n ],\n borderStyle: ['borderTopStyle', 'borderRightStyle', 'borderBottomStyle', 'borderLeftStyle'],\n borderColor: ['borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'],\n borderTop: ['borderTopWidth', 'borderTopStyle', 'borderTopColor'],\n borderRight: ['borderRightWidth', 'borderRightStyle', 'borderRightColor'],\n borderBottom: ['borderBottomWidth', 'borderBottomStyle', 'borderBottomColor'],\n borderLeft: ['borderLeftWidth', 'borderLeftStyle', 'borderLeftColor'],\n background: [\n 'backgroundColor',\n 'backgroundImage',\n 'backgroundPosition',\n 'backgroundSize',\n 'backgroundRepeat',\n 'backgroundAttachment',\n 'backgroundOrigin',\n 'backgroundClip',\n ],\n font: ['fontStyle', 'fontVariant', 'fontWeight', 'fontSize', 'lineHeight', 'fontFamily'],\n flex: ['flexGrow', 'flexShrink', 'flexBasis'],\n gap: ['rowGap', 'columnGap'],\n overflow: ['overflowX', 'overflowY'],\n transition: [\n 'transitionProperty',\n 'transitionDuration',\n 'transitionTimingFunction',\n 'transitionDelay',\n ],\n animation: [\n 'animationName',\n 'animationDuration',\n 'animationTimingFunction',\n 'animationDelay',\n 'animationIterationCount',\n 'animationDirection',\n 'animationFillMode',\n 'animationPlayState',\n ],\n outline: ['outlineWidth', 'outlineStyle', 'outlineColor'],\n listStyle: ['listStyleType', 'listStylePosition', 'listStyleImage'],\n grid: [\n 'gridTemplateRows',\n 'gridTemplateColumns',\n 'gridTemplateAreas',\n 'gridAutoRows',\n 'gridAutoColumns',\n 'gridAutoFlow',\n ],\n gridTemplate: ['gridTemplateRows', 'gridTemplateColumns', 'gridTemplateAreas'],\n inset: ['top', 'right', 'bottom', 'left'],\n insetBlock: ['insetBlockStart', 'insetBlockEnd'],\n insetInline: ['insetInlineStart', 'insetInlineEnd'],\n};\n\n/** Bare numeric strings (no CSS unit) that emit invalid CSS when serialized. */\nexport const BARE_NUMBER_STRING_RE = /^-?\\d+(\\.\\d+)?$/;\n\nexport function findShorthandLonghandConflicts(\n propertyNames: readonly string[],\n): Array<{ shorthand: string; longhand: string }> {\n const keys = new Set(propertyNames);\n const seen = new Set<string>();\n const conflicts: Array<{ shorthand: string; longhand: string }> = [];\n\n for (const key of keys) {\n const longhands = SHORTHAND_TO_LONGHANDS[key];\n if (longhands) {\n for (const longhand of longhands) {\n if (keys.has(longhand)) {\n const id = `${key}|${longhand}`;\n if (!seen.has(id)) {\n seen.add(id);\n conflicts.push({ shorthand: key, longhand });\n }\n }\n }\n }\n }\n\n return conflicts;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nconst NESTED_SELECTOR_KEY_RE = /^(&|@|\\[)/;\n\n/** Keys that wrap nested style objects in component configs. */\nconst COMPONENT_STRUCTURAL_KEYS = new Set([\n 'base',\n 'variants',\n 'defaultVariants',\n 'compoundVariants',\n 'slots',\n]);\n\nexport function getStaticPropertyKey(prop: TSESTree.Property): string | null {\n if (prop.computed) return null;\n if (prop.key.type === 'Identifier') return prop.key.name;\n if (prop.key.type === 'Literal' && typeof prop.key.value === 'string') return prop.key.value;\n return null;\n}\n\nexport function isCssPropertyKey(key: string): boolean {\n if (NESTED_SELECTOR_KEY_RE.test(key)) return false;\n if (COMPONENT_STRUCTURAL_KEYS.has(key)) return false;\n return /^[a-zA-Z]/.test(key);\n}\n\n/**\n * Collect CSS property names declared at the top level of a style object literal.\n */\nexport function collectCssPropertyNames(obj: TSESTree.ObjectExpression): string[] {\n const names: string[] = [];\n for (const prop of obj.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (key && isCssPropertyKey(key)) names.push(key);\n }\n return names;\n}\n\n/**\n * Visit each style object literal in a TypeStyles style/config tree.\n * Recurses into pseudos, at-rules, component `base` / `variants`, and slot objects.\n */\nexport function visitStyleObjectLiterals(\n node: TSESTree.ObjectExpression,\n onStyleObject: (obj: TSESTree.ObjectExpression) => void,\n): void {\n onStyleObject(node);\n\n for (const prop of node.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (!key) continue;\n\n if (NESTED_SELECTOR_KEY_RE.test(key)) {\n if (prop.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(prop.value, onStyleObject);\n }\n continue;\n }\n\n if (key === 'variants' && prop.value.type === 'ObjectExpression') {\n for (const groupProp of prop.value.properties) {\n if (groupProp.type !== 'Property' || groupProp.value.type !== 'ObjectExpression') continue;\n for (const optionProp of groupProp.value.properties) {\n if (optionProp.type === 'Property' && optionProp.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(optionProp.value, onStyleObject);\n }\n }\n }\n continue;\n }\n\n if (key === 'compoundVariants' && prop.value.type === 'ArrayExpression') {\n for (const element of prop.value.elements) {\n if (!element || element.type !== 'ObjectExpression') continue;\n for (const cvProp of element.properties) {\n if (cvProp.type !== 'Property') continue;\n const cvKey = getStaticPropertyKey(cvProp);\n if (cvKey === 'css' && cvProp.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(cvProp.value, onStyleObject);\n }\n }\n }\n continue;\n }\n\n if (\n (COMPONENT_STRUCTURAL_KEYS.has(key) || prop.value.type === 'ObjectExpression') &&\n prop.value.type === 'ObjectExpression'\n ) {\n visitStyleObjectLiterals(prop.value, onStyleObject);\n }\n }\n}\n\nexport function getStringLiteralValue(node: TSESTree.Node): string | null {\n if (node.type === 'Literal' && typeof node.value === 'string') return node.value;\n return null;\n}\n\nexport function getNumericLiteralValue(node: TSESTree.Node): number | null {\n if (node.type === 'Literal' && typeof node.value === 'number') return node.value;\n return null;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\nimport { BARE_NUMBER_STRING_RE, isUnitlessProperty } from '../utils/css-properties';\nimport {\n getNumericLiteralValue,\n getStaticPropertyKey,\n getStringLiteralValue,\n isCssPropertyKey,\n visitStyleObjectLiterals,\n} from '../utils/style-ast';\nimport { getStyleObjectArguments } from '../utils/style-calls';\n\nexport const noInvalidUnitlessValue = createRule({\n name: 'no-invalid-unitless-value',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow bare numeric strings on properties that require CSS units (TypeStyles only auto-appends `px` to numbers, not strings)',\n },\n messages: {\n bareNumberString:\n '`{{property}}` is set to bare number string `{{value}}`, which emits invalid CSS. Use a number (`{{numeric}}`) or a value with units (`{{value}}px`).',\n suspiciousUnitlessNumber:\n '`{{property}}` is unitless in CSS — numeric `{{value}}` is emitted without a unit. Use a ratio (e.g. `1.5`) or an explicit length (`\"24px\"`).',\n },\n schema: [\n {\n type: 'object',\n properties: {\n checkSuspiciousUnitlessNumbers: { type: 'boolean' },\n },\n additionalProperties: false,\n },\n ],\n },\n defaultOptions: [{ checkSuspiciousUnitlessNumbers: true }],\n create(context, [options]) {\n /** Properties where a large integer usually means the author meant a length, not a unitless ratio. */\n const SUSPICIOUS_UNITLESS_PROPERTIES = new Set(['lineHeight']);\n\n function checkStyleObject(obj: TSESTree.ObjectExpression) {\n for (const prop of obj.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (!key || !isCssPropertyKey(key)) continue;\n\n const stringValue = getStringLiteralValue(prop.value);\n if (stringValue && BARE_NUMBER_STRING_RE.test(stringValue) && !isUnitlessProperty(key)) {\n context.report({\n node: prop.value,\n messageId: 'bareNumberString',\n data: {\n property: key,\n value: stringValue,\n numeric: stringValue,\n },\n });\n continue;\n }\n\n if (options.checkSuspiciousUnitlessNumbers && SUSPICIOUS_UNITLESS_PROPERTIES.has(key)) {\n const num = getNumericLiteralValue(prop.value);\n if (num != null && num >= 8 && Number.isInteger(num)) {\n context.report({\n node: prop.value,\n messageId: 'suspiciousUnitlessNumber',\n data: { property: key, value: String(num) },\n });\n }\n }\n }\n }\n\n return {\n CallExpression(node) {\n for (const styleObj of getStyleObjectArguments(node)) {\n visitStyleObjectLiterals(styleObj, checkStyleObject);\n }\n },\n ObjectExpression(node) {\n const parent = node.parent;\n if (\n parent?.type === 'Property' &&\n (parent.key.type === 'Identifier' || parent.key.type === 'Literal')\n ) {\n const parentKey =\n parent.key.type === 'Identifier'\n ? parent.key.name\n : typeof parent.key.value === 'string'\n ? parent.key.value\n : null;\n if (parentKey === 'from' || parentKey === 'to' || /^\\d+%$/.test(parentKey ?? '')) {\n visitStyleObjectLiterals(node, checkStyleObject);\n }\n }\n },\n };\n },\n});\n","import path from 'node:path';\nimport { createRule } from '../utils/create-rule';\nimport {\n PUBLIC_CLASSNAMES_SNAPSHOT,\n collectPublicClassNamesSync,\n diffRemovedPublicClassNames,\n loadPublicClassNamesSnapshot,\n type PublicClassNameEntry,\n} from '@typestyles/cli';\n\ntype RuleOptions = [\n {\n snapshotFile?: string;\n rootDir?: string;\n }?,\n];\n\nlet comparisonDone = false;\nlet cachedRemoved: PublicClassNameEntry[] = [];\nlet reportsEmitted = false;\n\n/** @internal Test hook */\nexport function resetRemovedPublicClassnameState(): void {\n comparisonDone = false;\n cachedRemoved = [];\n reportsEmitted = false;\n}\n\nfunction resolveRemovedClassNames(\n context: Parameters<NonNullable<ReturnType<typeof createRule>['create']>>[0],\n options: RuleOptions[0],\n): PublicClassNameEntry[] {\n if (comparisonDone) return cachedRemoved;\n\n const rootDir = path.resolve(options?.rootDir ?? context.cwd ?? process.cwd());\n const snapshotPath = path.resolve(rootDir, options?.snapshotFile ?? PUBLIC_CLASSNAMES_SNAPSHOT);\n const snapshot = loadPublicClassNamesSnapshot(snapshotPath);\n if (!snapshot) {\n comparisonDone = true;\n cachedRemoved = [];\n return cachedRemoved;\n }\n\n const current = collectPublicClassNamesSync({ rootDir });\n cachedRemoved = diffRemovedPublicClassNames(snapshot, current);\n comparisonDone = true;\n return cachedRemoved;\n}\n\nexport const noRemovedPublicClassname = createRule<RuleOptions, 'removed'>({\n name: 'no-removed-public-classname',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow removing or renaming semantic class names listed in `.typestyles-public-classnames.json`',\n },\n messages: {\n removed:\n 'Public class name `{{className}}` was removed or renamed. This is a breaking change — restore the name or regenerate the snapshot with `typestyles snapshot --write` after a deliberate semver bump.',\n },\n schema: [\n {\n type: 'object',\n properties: {\n snapshotFile: { type: 'string' },\n rootDir: { type: 'string' },\n },\n additionalProperties: false,\n },\n ],\n },\n defaultOptions: [{}],\n create(context, [options]) {\n const rootDir = path.resolve(options?.rootDir ?? context.cwd ?? process.cwd());\n const snapshotPath = path.resolve(rootDir, options?.snapshotFile ?? PUBLIC_CLASSNAMES_SNAPSHOT);\n if (!loadPublicClassNamesSnapshot(snapshotPath)) {\n return {};\n }\n\n return {\n 'Program:exit'(node) {\n if (reportsEmitted) return;\n reportsEmitted = true;\n\n const removed = resolveRemovedClassNames(context, options);\n for (const entry of removed) {\n context.report({\n node,\n messageId: 'removed',\n data: { className: entry.className },\n });\n }\n },\n };\n },\n});\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\nimport { findShorthandLonghandConflicts } from '../utils/css-properties';\nimport { collectCssPropertyNames, visitStyleObjectLiterals } from '../utils/style-ast';\nimport { getStyleObjectArguments } from '../utils/style-calls';\n\nexport const noShorthandLonghandConflict = createRule({\n name: 'no-shorthand-longhand-conflict',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow mixing CSS shorthand and longhand properties in the same TypeStyles style object',\n },\n messages: {\n conflict:\n '`{{shorthand}}` and `{{longhand}}` must not appear in the same style object — the longhand is ignored or overridden unpredictably.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n function checkStyleObject(obj: TSESTree.ObjectExpression) {\n const propertyNames = collectCssPropertyNames(obj);\n const conflicts = findShorthandLonghandConflicts(propertyNames);\n for (const { shorthand, longhand } of conflicts) {\n context.report({\n node: obj,\n messageId: 'conflict',\n data: { shorthand, longhand },\n });\n }\n }\n\n return {\n CallExpression(node) {\n for (const styleObj of getStyleObjectArguments(node)) {\n visitStyleObjectLiterals(styleObj, checkStyleObject);\n }\n },\n ObjectExpression(node) {\n // Keyframe stops: `{ from: { opacity: 0 }, to: { opacity: 1 } }`\n const parent = node.parent;\n if (\n parent?.type === 'Property' &&\n (parent.key.type === 'Identifier' || parent.key.type === 'Literal')\n ) {\n const parentKey =\n parent.key.type === 'Identifier'\n ? parent.key.name\n : typeof parent.key.value === 'string'\n ? parent.key.value\n : null;\n if (parentKey === 'from' || parentKey === 'to' || /^\\d+%$/.test(parentKey ?? '')) {\n visitStyleObjectLiterals(node, checkStyleObject);\n }\n }\n },\n };\n },\n});\n","import { noDefaultScopeInPackage } from './rules/no-default-scope-in-package';\nimport { noDuplicateNamespace } from './rules/no-duplicate-namespace';\nimport { noInvalidUnitlessValue } from './rules/no-invalid-unitless-value';\nimport { noRemovedPublicClassname } from './rules/no-removed-public-classname';\nimport { noShorthandLonghandConflict } from './rules/no-shorthand-longhand-conflict';\n\nexport const rules = {\n 'no-default-scope-in-package': noDefaultScopeInPackage,\n 'no-shorthand-longhand-conflict': noShorthandLonghandConflict,\n 'no-invalid-unitless-value': noInvalidUnitlessValue,\n 'no-duplicate-namespace': noDuplicateNamespace,\n 'no-removed-public-classname': noRemovedPublicClassname,\n};\n\nexport {\n noDefaultScopeInPackage,\n noShorthandLonghandConflict,\n noInvalidUnitlessValue,\n noDuplicateNamespace,\n noRemovedPublicClassname,\n};\n\nconst plugin = {\n meta: {\n name: '@typestyles/eslint-plugin',\n version: '0.1.0',\n },\n rules,\n};\n\n/** Flat-config preset for TypeStyles projects. */\nexport const configs = {\n recommended: {\n plugins: {\n '@typestyles': plugin,\n },\n rules: {\n '@typestyles/no-shorthand-longhand-conflict': 'error',\n '@typestyles/no-invalid-unitless-value': 'error',\n '@typestyles/no-duplicate-namespace': 'error',\n },\n },\n /** Preset for publishable packages — adds `no-default-scope-in-package`. */\n package: {\n plugins: {\n '@typestyles': plugin,\n },\n rules: {\n '@typestyles/no-shorthand-longhand-conflict': 'error',\n '@typestyles/no-invalid-unitless-value': 'error',\n '@typestyles/no-duplicate-namespace': 'error',\n '@typestyles/no-default-scope-in-package': 'error',\n },\n },\n};\n\nObject.assign(plugin, { configs });\n\nexport default plugin;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/create-rule.ts","../src/rules/no-default-scope-in-package.ts","../src/utils/style-calls.ts","../src/rules/no-duplicate-namespace.ts","../src/utils/css-properties.ts","../src/utils/style-ast.ts","../src/rules/no-invalid-unitless-value.ts","../src/rules/no-removed-public-classname.ts","../src/rules/no-shorthand-longhand-conflict.ts","../src/index.ts"],"names":["memberPropertyName"],"mappings":"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","file":"index.js","sourcesContent":["import { ESLintUtils } from '@typescript-eslint/utils';\n\nexport const createRule = ESLintUtils.RuleCreator(\n (name) => `https://typestyles.dev/docs/eslint#${name}`,\n);\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\n\nfunction memberPropertyName(node: TSESTree.MemberExpression): string | null {\n if (node.property.type === 'Identifier' && !node.computed) return node.property.name;\n if (node.property.type === 'Literal' && typeof node.property.value === 'string') {\n return node.property.value;\n }\n return null;\n}\n\nfunction objectHasScopeId(arg: TSESTree.CallExpressionArgument | undefined): boolean {\n if (!arg || arg.type !== 'ObjectExpression') return false;\n for (const prop of arg.properties) {\n if (\n prop.type === 'Property' &&\n !prop.computed &&\n prop.key.type === 'Identifier' &&\n prop.key.name === 'scopeId'\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isUnscopedFactoryCall(node: TSESTree.CallExpression): boolean {\n const { callee, arguments: args } = node;\n if (callee.type !== 'Identifier') return false;\n if (callee.name !== 'createTypeStyles' && callee.name !== 'createStyles') return false;\n // createTypeStyles() / createStyles() or options object without scopeId\n if (args.length === 0) return true;\n const first = args[0];\n if (first.type === 'SpreadElement') return false; // can't statically prove\n if (first.type === 'ObjectExpression') return !objectHasScopeId(first);\n // Non-literal options (variable / call) — skip to avoid false positives\n return false;\n}\n\nfunction isLegacyDefaultStylesCall(node: TSESTree.CallExpression): boolean {\n const { callee } = node;\n if (callee.type !== 'MemberExpression') return false;\n const method = memberPropertyName(callee);\n if (method !== 'class' && method !== 'component' && method !== 'hashClass') return false;\n return callee.object.type === 'Identifier' && callee.object.name === 'styles';\n}\n\nexport const noDefaultScopeInPackage = createRule({\n name: 'no-default-scope-in-package',\n meta: {\n type: 'suggestion',\n docs: {\n description:\n 'Require a scoped styles factory (`createTypeStyles`/`createStyles` with `scopeId`) in publishable packages — flags unscoped factory calls and legacy `styles.*` usage',\n },\n messages: {\n unscopedFactory:\n '`{{factory}}()` without `scopeId` in a published package risks class-name collisions. Pass `scopeId` (e.g. `createTypeStyles({ scopeId: pkg.name })`).',\n unscopedInPackage:\n 'Using the legacy unscoped `styles.{{method}}()` API in a published package risks class-name collisions. Use `createTypeStyles({ scopeId: pkg.name })` and call `style` / `hash` / `recipe` from that instance.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n return {\n CallExpression(node) {\n if (isUnscopedFactoryCall(node)) {\n const factory = (node.callee as TSESTree.Identifier).name;\n context.report({\n node: node.callee,\n messageId: 'unscopedFactory',\n data: { factory },\n });\n return;\n }\n\n if (!isLegacyDefaultStylesCall(node)) return;\n\n const method = memberPropertyName(node.callee as TSESTree.MemberExpression) ?? 'class';\n\n context.report({\n node: node.callee,\n messageId: 'unscopedInPackage',\n data: { method },\n });\n },\n };\n },\n});\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nexport type NamespaceKind =\n | 'style'\n | 'recipe'\n | 'hash'\n | 'styles.class'\n | 'styles.component'\n | 'styles.hashClass'\n | 'tokens.create'\n | 'tokens.createTheme'\n | 'createTheme'\n | 'keyframes.create'\n | 'global.rule'\n | 'global.style'\n | 'global.fontFace';\n\nexport interface NamespaceCall {\n kind: NamespaceKind;\n /** Logical namespace key used for duplicate detection. */\n key: string;\n /** AST node for the namespace string literal (for reporting). */\n nameNode: TSESTree.StringLiteral;\n}\n\nfunction memberPropertyName(node: TSESTree.MemberExpression): string | null {\n if (node.property.type === 'Identifier' && !node.computed) return node.property.name;\n if (node.property.type === 'Literal' && typeof node.property.value === 'string') {\n return node.property.value;\n }\n return null;\n}\n\nfunction calleeRootName(node: TSESTree.CallExpression['callee']): string | null {\n if (node.type === 'Identifier') return node.name;\n if (node.type === 'MemberExpression') {\n if (node.object.type === 'Identifier') return node.object.name;\n if (node.object.type === 'MemberExpression') {\n const inner = memberPropertyName(node.object);\n const outer = calleeRootName(node.object);\n if (outer && inner) return `${outer}.${inner}`;\n }\n }\n return null;\n}\n\nfunction isMemberCall(\n callee: TSESTree.CallExpression['callee'],\n objectName: string,\n method: string,\n): boolean {\n if (callee.type !== 'MemberExpression') return false;\n const methodName = memberPropertyName(callee);\n if (methodName !== method) return false;\n if (callee.object.type === 'Identifier') return callee.object.name === objectName;\n return false;\n}\n\nfunction firstStringArg(args: TSESTree.CallExpressionArgument[]): TSESTree.StringLiteral | null {\n const first = args[0];\n if (!first || first.type === 'SpreadElement') return null;\n if (first.type === 'Literal' && typeof first.value === 'string') return first;\n return null;\n}\n\n/**\n * Detect TypeStyles namespace registrations from call expressions.\n * Matches API shape (e.g. `style('card', …)` / `recipe('button', …)`) regardless of import alias.\n */\nexport function getNamespaceCall(node: TSESTree.CallExpression): NamespaceCall | null {\n const { callee, arguments: args } = node;\n\n if (callee.type === 'Identifier' && callee.name === 'style') {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'style', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (callee.type === 'Identifier' && callee.name === 'recipe') {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'recipe', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (callee.type === 'Identifier' && callee.name === 'hash') {\n const first = args[0];\n if (!first || first.type === 'SpreadElement') return null;\n // hash(props, { label }) — label may be in options object; skip keying when absent\n if (args[1]?.type === 'ObjectExpression') {\n for (const prop of args[1].properties) {\n if (\n prop.type === 'Property' &&\n prop.key.type === 'Identifier' &&\n prop.key.name === 'label' &&\n prop.value.type === 'Literal' &&\n typeof prop.value.value === 'string'\n ) {\n return { kind: 'hash', key: `.${prop.value.value}-`, nameNode: prop.value };\n }\n }\n }\n return null;\n }\n\n if (isMemberCall(callee, 'styles', 'class')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.class', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (isMemberCall(callee, 'styles', 'component')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.component', key: `.${nameNode.value}-`, nameNode };\n }\n\n if (isMemberCall(callee, 'styles', 'hashClass')) {\n const first = args[0];\n if (!first || first.type === 'SpreadElement') return null;\n if (first.type === 'Literal' && typeof first.value === 'string') {\n return { kind: 'styles.hashClass', key: `.${first.value}-`, nameNode: first };\n }\n const label = args[1];\n if (label?.type === 'Literal' && typeof label.value === 'string') {\n return { kind: 'styles.hashClass', key: `.${label.value}-`, nameNode: label };\n }\n return null;\n }\n\n if (isMemberCall(callee, 'tokens', 'create')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.create', key: `tokens:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'tokens', 'createTheme')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.createTheme', key: `theme:${nameNode.value}`, nameNode };\n }\n\n if (callee.type === 'Identifier' && callee.name === 'createTheme') {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'createTheme', key: `theme:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'keyframes', 'create')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'keyframes.create', key: `keyframes:${nameNode.value}`, nameNode };\n }\n\n if (isMemberCall(callee, 'global', 'rule') || isMemberCall(callee, 'global', 'style')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return {\n kind: isMemberCall(callee, 'global', 'rule') ? 'global.rule' : 'global.style',\n key: nameNode.value,\n nameNode,\n };\n }\n\n if (isMemberCall(callee, 'global', 'fontFace')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'global.fontFace', key: `font-face:${nameNode.value}`, nameNode };\n }\n\n // `myStyles.class` / `myTokens.create` from createStyles/createTokens bindings\n if (callee.type === 'MemberExpression') {\n const method = memberPropertyName(callee);\n const root = calleeRootName(callee);\n if (method === 'class' && root) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.class', key: `.${nameNode.value}-`, nameNode };\n }\n if (method === 'component' && root) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'styles.component', key: `.${nameNode.value}-`, nameNode };\n }\n if (method === 'create' && root?.endsWith('tokens')) {\n const nameNode = firstStringArg(args);\n if (!nameNode) return null;\n return { kind: 'tokens.create', key: `tokens:${nameNode.value}`, nameNode };\n }\n }\n\n return null;\n}\n\n/** Extract style object literals passed to TypeStyles style APIs. */\nexport function getStyleObjectArguments(\n node: TSESTree.CallExpression,\n): TSESTree.ObjectExpression[] {\n const { callee, arguments: args } = node;\n const objects: TSESTree.ObjectExpression[] = [];\n\n const pushObject = (arg: TSESTree.CallExpressionArgument | undefined) => {\n if (!arg || arg.type === 'SpreadElement') return;\n if (arg.type === 'ObjectExpression') objects.push(arg);\n if (arg.type === 'ArrowFunctionExpression' && arg.body.type === 'ObjectExpression') {\n objects.push(arg.body);\n }\n };\n\n if (callee.type === 'Identifier' && (callee.name === 'style' || callee.name === 'recipe')) {\n pushObject(args[1]);\n return objects;\n }\n\n if (callee.type === 'Identifier' && callee.name === 'hash') {\n pushObject(args[0]);\n return objects;\n }\n\n if (callee.type === 'MemberExpression') {\n const method = memberPropertyName(callee);\n if (method === 'class' || method === 'component' || method === 'rule' || method === 'style') {\n pushObject(args[1]);\n return objects;\n }\n if (method === 'hashClass' || method === 'rules') {\n const first = args[0];\n if (first && first.type !== 'SpreadElement' && first.type === 'ObjectExpression') {\n objects.push(first);\n }\n return objects;\n }\n }\n\n return objects;\n}\n","import { createRule } from '../utils/create-rule';\nimport { getNamespaceCall } from '../utils/style-calls';\n\ninterface NamespaceLocation {\n filename: string;\n line: number;\n column: number;\n}\n\n/** Cross-file registry for a single ESLint CLI run (best-effort; not shared across workers). */\nconst namespaceRegistry = new Map<string, NamespaceLocation>();\n\n/** @internal Test hook */\nexport function resetNamespaceRegistry(): void {\n namespaceRegistry.clear();\n}\n\nexport const noDuplicateNamespace = createRule({\n name: 'no-duplicate-namespace',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow reusing the same TypeStyles namespace (`styles.class`, `styles.component`, `tokens.create`, …) across the project',\n },\n messages: {\n duplicateInFile:\n 'Namespace `{{name}}` ({{kind}}) is already registered in this file at line {{line}}.',\n duplicateAcrossFiles:\n 'Namespace `{{name}}` ({{kind}}) is already registered in `{{otherFile}}` at line {{line}}.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n const fileSeen = new Map<string, { line: number; column: number }>();\n const filename = context.filename;\n\n return {\n CallExpression(node) {\n const call = getNamespaceCall(node);\n if (!call) return;\n\n const displayName =\n call.kind === 'styles.class' || call.kind === 'styles.component'\n ? call.nameNode.value\n : call.nameNode.value;\n\n const line = call.nameNode.loc?.start.line ?? node.loc?.start.line ?? 0;\n const column = call.nameNode.loc?.start.column ?? node.loc?.start.column ?? 0;\n\n const priorInFile = fileSeen.get(call.key);\n if (priorInFile) {\n context.report({\n node: call.nameNode,\n messageId: 'duplicateInFile',\n data: {\n name: displayName,\n kind: call.kind,\n line: String(priorInFile.line),\n },\n });\n return;\n }\n fileSeen.set(call.key, { line, column });\n\n const priorGlobal = namespaceRegistry.get(call.key);\n if (priorGlobal && priorGlobal.filename !== filename) {\n context.report({\n node: call.nameNode,\n messageId: 'duplicateAcrossFiles',\n data: {\n name: displayName,\n kind: call.kind,\n otherFile: priorGlobal.filename,\n line: String(priorGlobal.line),\n },\n });\n return;\n }\n\n if (!priorGlobal) {\n namespaceRegistry.set(call.key, { filename, line, column });\n }\n },\n };\n },\n});\n","/**\n * CSS properties that accept unitless numbers in TypeStyles serialization.\n * Keep in sync with `packages/typestyles/src/css.ts`.\n */\nexport const UNITLESS_PROPERTIES = new Set([\n 'animationIterationCount',\n 'aspectRatio',\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'columns',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'fontSizeAdjust',\n 'fontWeight',\n 'gridArea',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnSpan',\n 'gridColumnStart',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowSpan',\n 'gridRowStart',\n 'initialLetter',\n 'lineClamp',\n 'lineHeight',\n 'maskBorderOutset',\n 'maskBorderSlice',\n 'maskBorderWidth',\n 'opacity',\n 'order',\n 'orphans',\n 'scale',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n]);\n\nconst VENDOR_PREFIX_RE = /^(Webkit|Moz|ms|O)([A-Z])(.*)$/;\n\nexport function isUnitlessProperty(prop: string): boolean {\n if (UNITLESS_PROPERTIES.has(prop)) return true;\n const match = VENDOR_PREFIX_RE.exec(prop);\n if (match) {\n return UNITLESS_PROPERTIES.has(match[2].toLowerCase() + match[3]);\n }\n return false;\n}\n\n/** Shorthand property → longhands that must not appear in the same style object. */\nexport const SHORTHAND_TO_LONGHANDS: Readonly<Record<string, readonly string[]>> = {\n padding: [\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'paddingInline',\n 'paddingBlock',\n 'paddingInlineStart',\n 'paddingInlineEnd',\n 'paddingBlockStart',\n 'paddingBlockEnd',\n ],\n margin: [\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'marginInline',\n 'marginBlock',\n 'marginInlineStart',\n 'marginInlineEnd',\n 'marginBlockStart',\n 'marginBlockEnd',\n ],\n border: [\n 'borderWidth',\n 'borderStyle',\n 'borderColor',\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n 'borderInline',\n 'borderBlock',\n ],\n borderWidth: [\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderInlineWidth',\n 'borderBlockWidth',\n ],\n borderStyle: ['borderTopStyle', 'borderRightStyle', 'borderBottomStyle', 'borderLeftStyle'],\n borderColor: ['borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'],\n borderTop: ['borderTopWidth', 'borderTopStyle', 'borderTopColor'],\n borderRight: ['borderRightWidth', 'borderRightStyle', 'borderRightColor'],\n borderBottom: ['borderBottomWidth', 'borderBottomStyle', 'borderBottomColor'],\n borderLeft: ['borderLeftWidth', 'borderLeftStyle', 'borderLeftColor'],\n background: [\n 'backgroundColor',\n 'backgroundImage',\n 'backgroundPosition',\n 'backgroundSize',\n 'backgroundRepeat',\n 'backgroundAttachment',\n 'backgroundOrigin',\n 'backgroundClip',\n ],\n font: ['fontStyle', 'fontVariant', 'fontWeight', 'fontSize', 'lineHeight', 'fontFamily'],\n flex: ['flexGrow', 'flexShrink', 'flexBasis'],\n gap: ['rowGap', 'columnGap'],\n overflow: ['overflowX', 'overflowY'],\n transition: [\n 'transitionProperty',\n 'transitionDuration',\n 'transitionTimingFunction',\n 'transitionDelay',\n ],\n animation: [\n 'animationName',\n 'animationDuration',\n 'animationTimingFunction',\n 'animationDelay',\n 'animationIterationCount',\n 'animationDirection',\n 'animationFillMode',\n 'animationPlayState',\n ],\n outline: ['outlineWidth', 'outlineStyle', 'outlineColor'],\n listStyle: ['listStyleType', 'listStylePosition', 'listStyleImage'],\n grid: [\n 'gridTemplateRows',\n 'gridTemplateColumns',\n 'gridTemplateAreas',\n 'gridAutoRows',\n 'gridAutoColumns',\n 'gridAutoFlow',\n ],\n gridTemplate: ['gridTemplateRows', 'gridTemplateColumns', 'gridTemplateAreas'],\n inset: ['top', 'right', 'bottom', 'left'],\n insetBlock: ['insetBlockStart', 'insetBlockEnd'],\n insetInline: ['insetInlineStart', 'insetInlineEnd'],\n};\n\n/** Bare numeric strings (no CSS unit) that emit invalid CSS when serialized. */\nexport const BARE_NUMBER_STRING_RE = /^-?\\d+(\\.\\d+)?$/;\n\nexport function findShorthandLonghandConflicts(\n propertyNames: readonly string[],\n): Array<{ shorthand: string; longhand: string }> {\n const keys = new Set(propertyNames);\n const seen = new Set<string>();\n const conflicts: Array<{ shorthand: string; longhand: string }> = [];\n\n for (const key of keys) {\n const longhands = SHORTHAND_TO_LONGHANDS[key];\n if (longhands) {\n for (const longhand of longhands) {\n if (keys.has(longhand)) {\n const id = `${key}|${longhand}`;\n if (!seen.has(id)) {\n seen.add(id);\n conflicts.push({ shorthand: key, longhand });\n }\n }\n }\n }\n }\n\n return conflicts;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\n\nconst NESTED_SELECTOR_KEY_RE = /^(&|@|\\[)/;\n\n/** Keys that wrap nested style objects in component configs. */\nconst COMPONENT_STRUCTURAL_KEYS = new Set([\n 'base',\n 'variants',\n 'defaultVariants',\n 'compoundVariants',\n 'slots',\n]);\n\nexport function getStaticPropertyKey(prop: TSESTree.Property): string | null {\n if (prop.computed) return null;\n if (prop.key.type === 'Identifier') return prop.key.name;\n if (prop.key.type === 'Literal' && typeof prop.key.value === 'string') return prop.key.value;\n return null;\n}\n\nexport function isCssPropertyKey(key: string): boolean {\n if (NESTED_SELECTOR_KEY_RE.test(key)) return false;\n if (COMPONENT_STRUCTURAL_KEYS.has(key)) return false;\n return /^[a-zA-Z]/.test(key);\n}\n\n/**\n * Collect CSS property names declared at the top level of a style object literal.\n */\nexport function collectCssPropertyNames(obj: TSESTree.ObjectExpression): string[] {\n const names: string[] = [];\n for (const prop of obj.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (key && isCssPropertyKey(key)) names.push(key);\n }\n return names;\n}\n\n/**\n * Visit each style object literal in a TypeStyles style/config tree.\n * Recurses into pseudos, at-rules, component `base` / `variants`, and slot objects.\n */\nexport function visitStyleObjectLiterals(\n node: TSESTree.ObjectExpression,\n onStyleObject: (obj: TSESTree.ObjectExpression) => void,\n): void {\n onStyleObject(node);\n\n for (const prop of node.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (!key) continue;\n\n if (NESTED_SELECTOR_KEY_RE.test(key)) {\n if (prop.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(prop.value, onStyleObject);\n }\n continue;\n }\n\n if (key === 'variants' && prop.value.type === 'ObjectExpression') {\n for (const groupProp of prop.value.properties) {\n if (groupProp.type !== 'Property' || groupProp.value.type !== 'ObjectExpression') continue;\n for (const optionProp of groupProp.value.properties) {\n if (optionProp.type === 'Property' && optionProp.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(optionProp.value, onStyleObject);\n }\n }\n }\n continue;\n }\n\n if (key === 'compoundVariants' && prop.value.type === 'ArrayExpression') {\n for (const element of prop.value.elements) {\n if (!element || element.type !== 'ObjectExpression') continue;\n for (const cvProp of element.properties) {\n if (cvProp.type !== 'Property') continue;\n const cvKey = getStaticPropertyKey(cvProp);\n if (cvKey === 'css' && cvProp.value.type === 'ObjectExpression') {\n visitStyleObjectLiterals(cvProp.value, onStyleObject);\n }\n }\n }\n continue;\n }\n\n if (\n (COMPONENT_STRUCTURAL_KEYS.has(key) || prop.value.type === 'ObjectExpression') &&\n prop.value.type === 'ObjectExpression'\n ) {\n visitStyleObjectLiterals(prop.value, onStyleObject);\n }\n }\n}\n\nexport function getStringLiteralValue(node: TSESTree.Node): string | null {\n if (node.type === 'Literal' && typeof node.value === 'string') return node.value;\n return null;\n}\n\nexport function getNumericLiteralValue(node: TSESTree.Node): number | null {\n if (node.type === 'Literal' && typeof node.value === 'number') return node.value;\n return null;\n}\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\nimport { BARE_NUMBER_STRING_RE, isUnitlessProperty } from '../utils/css-properties';\nimport {\n getNumericLiteralValue,\n getStaticPropertyKey,\n getStringLiteralValue,\n isCssPropertyKey,\n visitStyleObjectLiterals,\n} from '../utils/style-ast';\nimport { getStyleObjectArguments } from '../utils/style-calls';\n\nexport const noInvalidUnitlessValue = createRule({\n name: 'no-invalid-unitless-value',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow bare numeric strings on properties that require CSS units (TypeStyles only auto-appends `px` to numbers, not strings)',\n },\n messages: {\n bareNumberString:\n '`{{property}}` is set to bare number string `{{value}}`, which emits invalid CSS. Use a number (`{{numeric}}`) or a value with units (`{{value}}px`).',\n suspiciousUnitlessNumber:\n '`{{property}}` is unitless in CSS — numeric `{{value}}` is emitted without a unit. Use a ratio (e.g. `1.5`) or an explicit length (`\"24px\"`).',\n },\n schema: [\n {\n type: 'object',\n properties: {\n checkSuspiciousUnitlessNumbers: { type: 'boolean' },\n },\n additionalProperties: false,\n },\n ],\n },\n defaultOptions: [{ checkSuspiciousUnitlessNumbers: true }],\n create(context, [options]) {\n /** Properties where a large integer usually means the author meant a length, not a unitless ratio. */\n const SUSPICIOUS_UNITLESS_PROPERTIES = new Set(['lineHeight']);\n\n function checkStyleObject(obj: TSESTree.ObjectExpression) {\n for (const prop of obj.properties) {\n if (prop.type !== 'Property') continue;\n const key = getStaticPropertyKey(prop);\n if (!key || !isCssPropertyKey(key)) continue;\n\n const stringValue = getStringLiteralValue(prop.value);\n if (stringValue && BARE_NUMBER_STRING_RE.test(stringValue) && !isUnitlessProperty(key)) {\n context.report({\n node: prop.value,\n messageId: 'bareNumberString',\n data: {\n property: key,\n value: stringValue,\n numeric: stringValue,\n },\n });\n continue;\n }\n\n if (options.checkSuspiciousUnitlessNumbers && SUSPICIOUS_UNITLESS_PROPERTIES.has(key)) {\n const num = getNumericLiteralValue(prop.value);\n if (num != null && num >= 8 && Number.isInteger(num)) {\n context.report({\n node: prop.value,\n messageId: 'suspiciousUnitlessNumber',\n data: { property: key, value: String(num) },\n });\n }\n }\n }\n }\n\n return {\n CallExpression(node) {\n for (const styleObj of getStyleObjectArguments(node)) {\n visitStyleObjectLiterals(styleObj, checkStyleObject);\n }\n },\n ObjectExpression(node) {\n const parent = node.parent;\n if (\n parent?.type === 'Property' &&\n (parent.key.type === 'Identifier' || parent.key.type === 'Literal')\n ) {\n const parentKey =\n parent.key.type === 'Identifier'\n ? parent.key.name\n : typeof parent.key.value === 'string'\n ? parent.key.value\n : null;\n if (parentKey === 'from' || parentKey === 'to' || /^\\d+%$/.test(parentKey ?? '')) {\n visitStyleObjectLiterals(node, checkStyleObject);\n }\n }\n },\n };\n },\n});\n","import path from 'node:path';\nimport { createRule } from '../utils/create-rule';\nimport {\n PUBLIC_CLASSNAMES_SNAPSHOT,\n collectPublicClassNamesSync,\n diffRemovedPublicClassNames,\n loadPublicClassNamesSnapshot,\n type PublicClassNameEntry,\n} from '@typestyles/cli';\n\ntype RuleOptions = [\n {\n snapshotFile?: string;\n rootDir?: string;\n }?,\n];\n\nlet comparisonDone = false;\nlet cachedRemoved: PublicClassNameEntry[] = [];\nlet reportsEmitted = false;\n\n/** @internal Test hook */\nexport function resetRemovedPublicClassnameState(): void {\n comparisonDone = false;\n cachedRemoved = [];\n reportsEmitted = false;\n}\n\nfunction resolveRemovedClassNames(\n context: Parameters<NonNullable<ReturnType<typeof createRule>['create']>>[0],\n options: RuleOptions[0],\n): PublicClassNameEntry[] {\n if (comparisonDone) return cachedRemoved;\n\n const rootDir = path.resolve(options?.rootDir ?? context.cwd ?? process.cwd());\n const snapshotPath = path.resolve(rootDir, options?.snapshotFile ?? PUBLIC_CLASSNAMES_SNAPSHOT);\n const snapshot = loadPublicClassNamesSnapshot(snapshotPath);\n if (!snapshot) {\n comparisonDone = true;\n cachedRemoved = [];\n return cachedRemoved;\n }\n\n const current = collectPublicClassNamesSync({ rootDir });\n cachedRemoved = diffRemovedPublicClassNames(snapshot, current);\n comparisonDone = true;\n return cachedRemoved;\n}\n\nexport const noRemovedPublicClassname = createRule<RuleOptions, 'removed'>({\n name: 'no-removed-public-classname',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow removing or renaming semantic class names listed in `.typestyles-public-classnames.json`',\n },\n messages: {\n removed:\n 'Public class name `{{className}}` was removed or renamed. This is a breaking change — restore the name or regenerate the snapshot with `typestyles snapshot --write` after a deliberate semver bump.',\n },\n schema: [\n {\n type: 'object',\n properties: {\n snapshotFile: { type: 'string' },\n rootDir: { type: 'string' },\n },\n additionalProperties: false,\n },\n ],\n },\n defaultOptions: [{}],\n create(context, [options]) {\n const rootDir = path.resolve(options?.rootDir ?? context.cwd ?? process.cwd());\n const snapshotPath = path.resolve(rootDir, options?.snapshotFile ?? PUBLIC_CLASSNAMES_SNAPSHOT);\n if (!loadPublicClassNamesSnapshot(snapshotPath)) {\n return {};\n }\n\n return {\n 'Program:exit'(node) {\n if (reportsEmitted) return;\n reportsEmitted = true;\n\n const removed = resolveRemovedClassNames(context, options);\n for (const entry of removed) {\n context.report({\n node,\n messageId: 'removed',\n data: { className: entry.className },\n });\n }\n },\n };\n },\n});\n","import type { TSESTree } from '@typescript-eslint/utils';\nimport { createRule } from '../utils/create-rule';\nimport { findShorthandLonghandConflicts } from '../utils/css-properties';\nimport { collectCssPropertyNames, visitStyleObjectLiterals } from '../utils/style-ast';\nimport { getStyleObjectArguments } from '../utils/style-calls';\n\nexport const noShorthandLonghandConflict = createRule({\n name: 'no-shorthand-longhand-conflict',\n meta: {\n type: 'problem',\n docs: {\n description:\n 'Disallow mixing CSS shorthand and longhand properties in the same TypeStyles style object',\n },\n messages: {\n conflict:\n '`{{shorthand}}` and `{{longhand}}` must not appear in the same style object — the longhand is ignored or overridden unpredictably.',\n },\n schema: [],\n },\n defaultOptions: [],\n create(context) {\n function checkStyleObject(obj: TSESTree.ObjectExpression) {\n const propertyNames = collectCssPropertyNames(obj);\n const conflicts = findShorthandLonghandConflicts(propertyNames);\n for (const { shorthand, longhand } of conflicts) {\n context.report({\n node: obj,\n messageId: 'conflict',\n data: { shorthand, longhand },\n });\n }\n }\n\n return {\n CallExpression(node) {\n for (const styleObj of getStyleObjectArguments(node)) {\n visitStyleObjectLiterals(styleObj, checkStyleObject);\n }\n },\n ObjectExpression(node) {\n // Keyframe stops: `{ from: { opacity: 0 }, to: { opacity: 1 } }`\n const parent = node.parent;\n if (\n parent?.type === 'Property' &&\n (parent.key.type === 'Identifier' || parent.key.type === 'Literal')\n ) {\n const parentKey =\n parent.key.type === 'Identifier'\n ? parent.key.name\n : typeof parent.key.value === 'string'\n ? parent.key.value\n : null;\n if (parentKey === 'from' || parentKey === 'to' || /^\\d+%$/.test(parentKey ?? '')) {\n visitStyleObjectLiterals(node, checkStyleObject);\n }\n }\n },\n };\n },\n});\n","import { noDefaultScopeInPackage } from './rules/no-default-scope-in-package';\nimport { noDuplicateNamespace } from './rules/no-duplicate-namespace';\nimport { noInvalidUnitlessValue } from './rules/no-invalid-unitless-value';\nimport { noRemovedPublicClassname } from './rules/no-removed-public-classname';\nimport { noShorthandLonghandConflict } from './rules/no-shorthand-longhand-conflict';\n\nexport const rules = {\n 'no-default-scope-in-package': noDefaultScopeInPackage,\n 'no-shorthand-longhand-conflict': noShorthandLonghandConflict,\n 'no-invalid-unitless-value': noInvalidUnitlessValue,\n 'no-duplicate-namespace': noDuplicateNamespace,\n 'no-removed-public-classname': noRemovedPublicClassname,\n};\n\nexport {\n noDefaultScopeInPackage,\n noShorthandLonghandConflict,\n noInvalidUnitlessValue,\n noDuplicateNamespace,\n noRemovedPublicClassname,\n};\n\nconst plugin = {\n meta: {\n name: '@typestyles/eslint-plugin',\n version: '0.1.0',\n },\n rules,\n};\n\n/** Flat-config preset for TypeStyles projects. */\nexport const configs = {\n recommended: {\n plugins: {\n '@typestyles': plugin,\n },\n rules: {\n '@typestyles/no-shorthand-longhand-conflict': 'error',\n '@typestyles/no-invalid-unitless-value': 'error',\n '@typestyles/no-duplicate-namespace': 'error',\n },\n },\n /** Preset for publishable packages — adds `no-default-scope-in-package`. */\n package: {\n plugins: {\n '@typestyles': plugin,\n },\n rules: {\n '@typestyles/no-shorthand-longhand-conflict': 'error',\n '@typestyles/no-invalid-unitless-value': 'error',\n '@typestyles/no-duplicate-namespace': 'error',\n '@typestyles/no-default-scope-in-package': 'error',\n },\n },\n};\n\nObject.assign(plugin, { configs });\n\nexport default plugin;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typestyles/eslint-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "ESLint rules for TypeStyles style objects and namespace usage",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@typescript-eslint/utils": "^8.54.0",
|
|
35
|
-
"@typestyles/cli": "0.
|
|
35
|
+
"@typestyles/cli": "0.3.1"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "^25.2.1",
|