@typestyles/eslint-plugin 0.0.0-unstable.f96b13308930 → 0.0.0-unstable.fe19d887abfe

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 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
- styles.class('card', {
37
+ style('card', {
38
38
  padding: '8px',
39
39
  paddingTop: '16px',
40
40
  });
41
41
 
42
42
  // ✅ pick one
43
- styles.class('card', { padding: '8px 8px 8px 16px' });
43
+ style('card', { padding: '8px 8px 8px 16px' });
44
44
  ```
45
45
 
46
- Applies to `styles.component`, `styles.class`, variant objects, and nested selectors inside those calls.
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
- styles.class('text', { lineHeight: '24' });
54
+ style('text', { lineHeight: '24' });
55
55
 
56
56
  // ✅
57
- styles.class('text', { lineHeight: 24 }); // → 24px where applicable
58
- styles.class('text', { lineHeight: '1.5' }); // unitless ratio as string
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
- styles.component('button', { base: { … } });
69
+ recipe('button', { base: { … } });
70
70
 
71
71
  // file-b.ts — ❌ collision
72
- styles.component('button', { base: { … } });
72
+ recipe('button', { base: { … } });
73
73
  ```
74
74
 
75
- Tracks `styles.component`, `styles.class`, `tokens.create`, `tokens.createTheme`, `keyframes.create`, and `global.style` / `global.fontFace` namespaces. Reports duplicates within a file and across files in the same ESLint run.
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 `styles.component` / `styles.class` namespaces. ESLint catches the issue earlier in the editor.
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 `styles.component()` call site. Treat them as project-level semver checks, similar to `no-duplicate-namespace`.
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
- - Only direct `styles.component()` / `binding.component()` calls are found
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 isDefaultStylesCall(node) {
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
- if (callee.object.type === "Identifier") {
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`) instead of the default `styles` export in publishable packages"
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
- unscopedInPackage: "Using the default `styles.{{method}}()` in a published package risks class-name collisions. Use `createTypeStyles({ scopeId: pkg.name })` or `createStyles({ scopeId })` instead."
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 (!isDefaultStylesCall(node)) return;
53
- const method = memberPropertyName(node.callee);
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: method ?? "class" }
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 { kind: "global.style", key: nameNode.value, nameNode };
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);
@@ -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":";;;;;;;;;;;;;AAEO,IAAM,aAAaA,iBAAA,CAAY,WAAA;AAAA,EACpC,CAAC,IAAA,KAAS,CAAA,mCAAA,EAAsC,IAAI,CAAA;AACtD,CAAA;;;ACDA,SAAS,mBAAmB,IAAA,EAAgD;AAC1E,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,KAAS,YAAA,IAAgB,CAAC,IAAA,CAAK,QAAA,EAAU,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA;AAChF,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,KAAS,SAAA,IAAa,OAAO,IAAA,CAAK,QAAA,CAAS,UAAU,QAAA,EAAU;AAC/E,IAAA,OAAO,KAAK,QAAA,CAAS,KAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,oBAAoB,IAAA,EAAwC;AACnE,EAAA,MAAM,EAAE,QAAO,GAAI,IAAA;AACnB,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,kBAAA,EAAoB,OAAO,KAAA;AAC/C,EAAA,MAAM,MAAA,GAAS,mBAAmB,MAAM,CAAA;AACxC,EAAA,IAAI,MAAA,KAAW,OAAA,IAAW,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAEzD,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,IAAA,KAAS,YAAA,EAAc;AACvC,IAAA,OAAO,MAAA,CAAO,OAAO,IAAA,KAAS,QAAA;AAAA,EAChC;AACA,EAAA,OAAO,KAAA;AACT;AAEO,IAAM,0BAA0B,UAAA,CAAW;AAAA,EAChD,IAAA,EAAM,6BAAA;AAAA,EACN,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,YAAA;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,WAAA,EACE;AAAA,KACJ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,iBAAA,EACE;AAAA,KACJ;AAAA,IACA,QAAQ;AAAC,GACX;AAAA,EACA,gBAAgB,EAAC;AAAA,EACjB,OAAO,OAAA,EAAS;AACd,IAAA,OAAO;AAAA,MACL,eAAe,IAAA,EAAM;AACnB,QAAA,IAAI,CAAC,mBAAA,CAAoB,IAAI,CAAA,EAAG;AAEhC,QAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,IAAA,CAAK,MAAmC,CAAA;AAE1E,QAAA,OAAA,CAAQ,MAAA,CAAO;AAAA,UACb,MAAM,IAAA,CAAK,MAAA;AAAA,UACX,SAAA,EAAW,mBAAA;AAAA,UACX,IAAA,EAAM,EAAE,MAAA,EAAQ,MAAA,IAAU,OAAA;AAAQ,SACnC,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF;AACF,CAAC;;;AChCD,SAASC,oBAAmB,IAAA,EAAgD;AAC1E,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,KAAS,YAAA,IAAgB,CAAC,IAAA,CAAK,QAAA,EAAU,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA;AAChF,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,KAAS,SAAA,IAAa,OAAO,IAAA,CAAK,QAAA,CAAS,UAAU,QAAA,EAAU;AAC/E,IAAA,OAAO,KAAK,QAAA,CAAS,KAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,eAAe,IAAA,EAAwD;AAC9E,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,YAAA,EAAc,OAAO,IAAA,CAAK,IAAA;AAC5C,EAAA,IAAI,IAAA,CAAK,SAAS,kBAAA,EAAoB;AACpC,IAAA,IAAI,KAAK,MAAA,CAAO,IAAA,KAAS,YAAA,EAAc,OAAO,KAAK,MAAA,CAAO,IAAA;AAC1D,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,kBAAA,EAAoB;AAC3C,MAAA,MAAM,KAAA,GAAQA,mBAAAA,CAAmB,IAAA,CAAK,MAAM,CAAA;AAC5C,MAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AACxC,MAAA,IAAI,SAAS,KAAA,EAAO,OAAO,CAAA,EAAG,KAAK,IAAI,KAAK,CAAA,CAAA;AAAA,IAC9C;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAA,CACP,MAAA,EACA,UAAA,EACA,MAAA,EACS;AACT,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,kBAAA,EAAoB,OAAO,KAAA;AAC/C,EAAA,MAAM,UAAA,GAAaA,oBAAmB,MAAM,CAAA;AAC5C,EAAA,IAAI,UAAA,KAAe,QAAQ,OAAO,KAAA;AAClC,EAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,cAAc,OAAO,MAAA,CAAO,OAAO,IAAA,KAAS,UAAA;AACvE,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAe,IAAA,EAAwE;AAC9F,EAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,iBAAiB,OAAO,IAAA;AACrD,EAAA,IAAI,MAAM,IAAA,KAAS,SAAA,IAAa,OAAO,KAAA,CAAM,KAAA,KAAU,UAAU,OAAO,KAAA;AACxE,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,iBAAiB,IAAA,EAAqD;AACpF,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAK,GAAI,IAAA;AAEpC,EAAA,IAAI,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA,EAAG;AAC3C,IAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,OAAO,EAAE,MAAM,cAAA,EAAgB,GAAA,EAAK,IAAI,QAAA,CAAS,KAAK,KAAK,QAAA,EAAS;AAAA,EACtE;AAEA,EAAA,IAAI,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAA,EAAG;AAC/C,IAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,OAAO,EAAE,MAAM,kBAAA,EAAoB,GAAA,EAAK,IAAI,QAAA,CAAS,KAAK,KAAK,QAAA,EAAS;AAAA,EAC1E;AAEA,EAAA,IAAI,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAA,EAAG;AAC/C,IAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,iBAAiB,OAAO,IAAA;AACrD,IAAA,IAAI,MAAM,IAAA,KAAS,SAAA,IAAa,OAAO,KAAA,CAAM,UAAU,QAAA,EAAU;AAC/D,MAAA,OAAO,EAAE,MAAM,kBAAA,EAAoB,GAAA,EAAK,IAAI,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA,EAAK,QAAA,EAAU,KAAA,EAAM;AAAA,IAC9E;AACA,IAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,IAAA,IAAI,OAAO,IAAA,KAAS,SAAA,IAAa,OAAO,KAAA,CAAM,UAAU,QAAA,EAAU;AAChE,MAAA,OAAO,EAAE,MAAM,kBAAA,EAAoB,GAAA,EAAK,IAAI,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA,EAAK,QAAA,EAAU,KAAA,EAAM;AAAA,IAC9E;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,QAAQ,CAAA,EAAG;AAC5C,IAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,OAAO,EAAE,MAAM,eAAA,EAAiB,GAAA,EAAK,UAAU,QAAA,CAAS,KAAK,IAAI,QAAA,EAAS;AAAA,EAC5E;AAEA,EAAA,IAAI,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,aAAa,CAAA,EAAG;AACjD,IAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,OAAO,EAAE,MAAM,oBAAA,EAAsB,GAAA,EAAK,SAAS,QAAA,CAAS,KAAK,IAAI,QAAA,EAAS;AAAA,EAChF;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,YAAA,IAAgB,MAAA,CAAO,SAAS,aAAA,EAAe;AACjE,IAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,OAAO,EAAE,MAAM,aAAA,EAAe,GAAA,EAAK,SAAS,QAAA,CAAS,KAAK,IAAI,QAAA,EAAS;AAAA,EACzE;AAEA,EAAA,IAAI,YAAA,CAAa,MAAA,EAAQ,WAAA,EAAa,QAAQ,CAAA,EAAG;AAC/C,IAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,OAAO,EAAE,MAAM,kBAAA,EAAoB,GAAA,EAAK,aAAa,QAAA,CAAS,KAAK,IAAI,QAAA,EAAS;AAAA,EAClF;AAEA,EAAA,IAAI,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA,EAAG;AAC3C,IAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,OAAO,EAAE,IAAA,EAAM,cAAA,EAAgB,GAAA,EAAK,QAAA,CAAS,OAAO,QAAA,EAAS;AAAA,EAC/D;AAEA,EAAA,IAAI,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,UAAU,CAAA,EAAG;AAC9C,IAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,IAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,IAAA,OAAO,EAAE,MAAM,iBAAA,EAAmB,GAAA,EAAK,aAAa,QAAA,CAAS,KAAK,IAAI,QAAA,EAAS;AAAA,EACjF;AAGA,EAAA,IAAI,MAAA,CAAO,SAAS,kBAAA,EAAoB;AACtC,IAAA,MAAM,MAAA,GAASA,oBAAmB,MAAM,CAAA;AACxC,IAAA,MAAM,IAAA,GAAO,eAAe,MAAM,CAAA;AAClC,IAAA,IAAI,MAAA,KAAW,WAAW,IAAA,EAAM;AAC9B,MAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,MAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,MAAA,OAAO,EAAE,MAAM,cAAA,EAAgB,GAAA,EAAK,IAAI,QAAA,CAAS,KAAK,KAAK,QAAA,EAAS;AAAA,IACtE;AACA,IAAA,IAAI,MAAA,KAAW,eAAe,IAAA,EAAM;AAClC,MAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,MAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,MAAA,OAAO,EAAE,MAAM,kBAAA,EAAoB,GAAA,EAAK,IAAI,QAAA,CAAS,KAAK,KAAK,QAAA,EAAS;AAAA,IAC1E;AACA,IAAA,IAAI,MAAA,KAAW,QAAA,IAAY,IAAA,EAAM,QAAA,CAAS,QAAQ,CAAA,EAAG;AACnD,MAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,MAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AACtB,MAAA,OAAO,EAAE,MAAM,eAAA,EAAiB,GAAA,EAAK,UAAU,QAAA,CAAS,KAAK,IAAI,QAAA,EAAS;AAAA,IAC5E;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,wBACd,IAAA,EAC6B;AAC7B,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,IAAA,EAAK,GAAI,IAAA;AACpC,EAAA,MAAM,UAAuC,EAAC;AAE9C,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAAqD;AACvE,IAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,IAAA,KAAS,eAAA,EAAiB;AAC1C,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,kBAAA,EAAoB,OAAA,CAAQ,KAAK,GAAG,CAAA;AACrD,IAAA,IAAI,IAAI,IAAA,KAAS,yBAAA,IAA6B,GAAA,CAAI,IAAA,CAAK,SAAS,kBAAA,EAAoB;AAClF,MAAA,OAAA,CAAQ,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,IACvB;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,MAAA,CAAO,SAAS,kBAAA,EAAoB;AACtC,IAAA,MAAM,MAAA,GAASA,oBAAmB,MAAM,CAAA;AACxC,IAAA,IAAI,MAAA,KAAW,OAAA,IAAW,MAAA,KAAW,WAAA,EAAa;AAChD,MAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAC,CAAA;AAClB,MAAA,OAAO,OAAA;AAAA,IACT;AACA,IAAA,IAAI,WAAW,WAAA,EAAa;AAC1B,MAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,MAAA,IAAI,SAAS,KAAA,CAAM,IAAA,KAAS,eAAA,IAAmB,KAAA,CAAM,SAAS,kBAAA,EAAoB;AAChF,QAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,MACpB;AACA,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;;;AC9KA,IAAM,iBAAA,uBAAwB,GAAA,EAA+B;AAOtD,IAAM,uBAAuB,UAAA,CAAW;AAAA,EAC7C,IAAA,EAAM,wBAAA;AAAA,EACN,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,WAAA,EACE;AAAA,KACJ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,eAAA,EACE,sFAAA;AAAA,MACF,oBAAA,EACE;AAAA,KACJ;AAAA,IACA,QAAQ;AAAC,GACX;AAAA,EACA,gBAAgB,EAAC;AAAA,EACjB,OAAO,OAAA,EAAS;AACd,IAAA,MAAM,QAAA,uBAAe,GAAA,EAA8C;AACnE,IAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AAEzB,IAAA,OAAO;AAAA,MACL,eAAe,IAAA,EAAM;AACnB,QAAA,MAAM,IAAA,GAAO,iBAAiB,IAAI,CAAA;AAClC,QAAA,IAAI,CAAC,IAAA,EAAM;AAEX,QAAA,MAAM,WAAA,GACJ,IAAA,CAAK,IAAA,KAAS,cAAA,IAAkB,IAAA,CAAK,IAAA,KAAS,kBAAA,GAC1C,IAAA,CAAK,QAAA,CAAS,KAAA,GACd,IAAA,CAAK,QAAA,CAAS,KAAA;AAEpB,QAAA,MAAM,IAAA,GAAO,KAAK,QAAA,CAAS,GAAA,EAAK,MAAM,IAAA,IAAQ,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAA,IAAQ,CAAA;AACtE,QAAA,MAAM,MAAA,GAAS,KAAK,QAAA,CAAS,GAAA,EAAK,MAAM,MAAA,IAAU,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,MAAA,IAAU,CAAA;AAE5E,QAAA,MAAM,WAAA,GAAc,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA;AACzC,QAAA,IAAI,WAAA,EAAa;AACf,UAAA,OAAA,CAAQ,MAAA,CAAO;AAAA,YACb,MAAM,IAAA,CAAK,QAAA;AAAA,YACX,SAAA,EAAW,iBAAA;AAAA,YACX,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,WAAA;AAAA,cACN,MAAM,IAAA,CAAK,IAAA;AAAA,cACX,IAAA,EAAM,MAAA,CAAO,WAAA,CAAY,IAAI;AAAA;AAC/B,WACD,CAAA;AACD,UAAA;AAAA,QACF;AACA,QAAA,QAAA,CAAS,IAAI,IAAA,CAAK,GAAA,EAAK,EAAE,IAAA,EAAM,QAAQ,CAAA;AAEvC,QAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA;AAClD,QAAA,IAAI,WAAA,IAAe,WAAA,CAAY,QAAA,KAAa,QAAA,EAAU;AACpD,UAAA,OAAA,CAAQ,MAAA,CAAO;AAAA,YACb,MAAM,IAAA,CAAK,QAAA;AAAA,YACX,SAAA,EAAW,sBAAA;AAAA,YACX,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,WAAA;AAAA,cACN,MAAM,IAAA,CAAK,IAAA;AAAA,cACX,WAAW,WAAA,CAAY,QAAA;AAAA,cACvB,IAAA,EAAM,MAAA,CAAO,WAAA,CAAY,IAAI;AAAA;AAC/B,WACD,CAAA;AACD,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,iBAAA,CAAkB,IAAI,IAAA,CAAK,GAAA,EAAK,EAAE,QAAA,EAAU,IAAA,EAAM,QAAQ,CAAA;AAAA,QAC5D;AAAA,MACF;AAAA,KACF;AAAA,EACF;AACF,CAAC;;;ACnFM,IAAM,mBAAA,uBAA0B,GAAA,CAAI;AAAA,EACzC,yBAAA;AAAA,EACA,aAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,gBAAA,GAAmB,gCAAA;AAElB,SAAS,mBAAmB,IAAA,EAAuB;AACxD,EAAA,IAAI,mBAAA,CAAoB,GAAA,CAAI,IAAI,CAAA,EAAG,OAAO,IAAA;AAC1C,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AACxC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,mBAAA,CAAoB,IAAI,KAAA,CAAM,CAAC,EAAE,WAAA,EAAY,GAAI,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,KAAA;AACT;AAGO,IAAM,sBAAA,GAAsE;AAAA,EACjF,OAAA,EAAS;AAAA,IACP,YAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,WAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,aAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,WAAA,EAAa;AAAA,IACX,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,WAAA,EAAa,CAAC,gBAAA,EAAkB,kBAAA,EAAoB,qBAAqB,iBAAiB,CAAA;AAAA,EAC1F,WAAA,EAAa,CAAC,gBAAA,EAAkB,kBAAA,EAAoB,qBAAqB,iBAAiB,CAAA;AAAA,EAC1F,SAAA,EAAW,CAAC,gBAAA,EAAkB,gBAAA,EAAkB,gBAAgB,CAAA;AAAA,EAChE,WAAA,EAAa,CAAC,kBAAA,EAAoB,kBAAA,EAAoB,kBAAkB,CAAA;AAAA,EACxE,YAAA,EAAc,CAAC,mBAAA,EAAqB,mBAAA,EAAqB,mBAAmB,CAAA;AAAA,EAC5E,UAAA,EAAY,CAAC,iBAAA,EAAmB,iBAAA,EAAmB,iBAAiB,CAAA;AAAA,EACpE,UAAA,EAAY;AAAA,IACV,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,oBAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,sBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,MAAM,CAAC,WAAA,EAAa,eAAe,YAAA,EAAc,UAAA,EAAY,cAAc,YAAY,CAAA;AAAA,EACvF,IAAA,EAAM,CAAC,UAAA,EAAY,YAAA,EAAc,WAAW,CAAA;AAAA,EAC5C,GAAA,EAAK,CAAC,QAAA,EAAU,WAAW,CAAA;AAAA,EAC3B,QAAA,EAAU,CAAC,WAAA,EAAa,WAAW,CAAA;AAAA,EACnC,UAAA,EAAY;AAAA,IACV,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,SAAA,EAAW;AAAA,IACT,eAAA;AAAA,IACA,mBAAA;AAAA,IACA,yBAAA;AAAA,IACA,gBAAA;AAAA,IACA,yBAAA;AAAA,IACA,oBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,OAAA,EAAS,CAAC,cAAA,EAAgB,cAAA,EAAgB,cAAc,CAAA;AAAA,EACxD,SAAA,EAAW,CAAC,eAAA,EAAiB,mBAAA,EAAqB,gBAAgB,CAAA;AAAA,EAClE,IAAA,EAAM;AAAA,IACJ,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA,mBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,YAAA,EAAc,CAAC,kBAAA,EAAoB,qBAAA,EAAuB,mBAAmB,CAAA;AAAA,EAC7E,KAAA,EAAO,CAAC,KAAA,EAAO,OAAA,EAAS,UAAU,MAAM,CAAA;AAAA,EACxC,UAAA,EAAY,CAAC,iBAAA,EAAmB,eAAe,CAAA;AAAA,EAC/C,WAAA,EAAa,CAAC,kBAAA,EAAoB,gBAAgB;AACpD,CAAA;AAGO,IAAM,qBAAA,GAAwB,iBAAA;AAE9B,SAAS,+BACd,aAAA,EACgD;AAChD,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,aAAa,CAAA;AAClC,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,YAA4D,EAAC;AAEnE,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,SAAA,GAAY,uBAAuB,GAAG,CAAA;AAC5C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,EAAG;AACtB,UAAA,MAAM,EAAA,GAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAC7B,UAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AACjB,YAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,YAAA,SAAA,CAAU,IAAA,CAAK,EAAE,SAAA,EAAW,GAAA,EAAK,UAAU,CAAA;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,SAAA;AACT;;;AC5LA,IAAM,sBAAA,GAAyB,WAAA;AAG/B,IAAM,yBAAA,uBAAgC,GAAA,CAAI;AAAA,EACxC,MAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEM,SAAS,qBAAqB,IAAA,EAAwC;AAC3E,EAAA,IAAI,IAAA,CAAK,UAAU,OAAO,IAAA;AAC1B,EAAA,IAAI,KAAK,GAAA,CAAI,IAAA,KAAS,YAAA,EAAc,OAAO,KAAK,GAAA,CAAI,IAAA;AACpD,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,KAAS,SAAA,IAAa,OAAO,IAAA,CAAK,GAAA,CAAI,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA,CAAK,GAAA,CAAI,KAAA;AACvF,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,iBAAiB,GAAA,EAAsB;AACrD,EAAA,IAAI,sBAAA,CAAuB,IAAA,CAAK,GAAG,CAAA,EAAG,OAAO,KAAA;AAC7C,EAAA,IAAI,yBAAA,CAA0B,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,KAAA;AAC/C,EAAA,OAAO,WAAA,CAAY,KAAK,GAAG,CAAA;AAC7B;AAKO,SAAS,wBAAwB,GAAA,EAA0C;AAChF,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,UAAA,EAAY;AACjC,IAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC9B,IAAA,MAAM,GAAA,GAAM,qBAAqB,IAAI,CAAA;AACrC,IAAA,IAAI,OAAO,gBAAA,CAAiB,GAAG,CAAA,EAAG,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,wBAAA,CACd,MACA,aAAA,EACM;AACN,EAAA,aAAA,CAAc,IAAI,CAAA;AAElB,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,UAAA,EAAY;AAClC,IAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC9B,IAAA,MAAM,GAAA,GAAM,qBAAqB,IAAI,CAAA;AACrC,IAAA,IAAI,CAAC,GAAA,EAAK;AAEV,IAAA,IAAI,sBAAA,CAAuB,IAAA,CAAK,GAAG,CAAA,EAAG;AACpC,MAAA,IAAI,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,kBAAA,EAAoB;AAC1C,QAAA,wBAAA,CAAyB,IAAA,CAAK,OAAO,aAAa,CAAA;AAAA,MACpD;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,KAAQ,UAAA,IAAc,IAAA,CAAK,KAAA,CAAM,SAAS,kBAAA,EAAoB;AAChE,MAAA,KAAA,MAAW,SAAA,IAAa,IAAA,CAAK,KAAA,CAAM,UAAA,EAAY;AAC7C,QAAA,IAAI,UAAU,IAAA,KAAS,UAAA,IAAc,SAAA,CAAU,KAAA,CAAM,SAAS,kBAAA,EAAoB;AAClF,QAAA,KAAA,MAAW,UAAA,IAAc,SAAA,CAAU,KAAA,CAAM,UAAA,EAAY;AACnD,UAAA,IAAI,WAAW,IAAA,KAAS,UAAA,IAAc,UAAA,CAAW,KAAA,CAAM,SAAS,kBAAA,EAAoB;AAClF,YAAA,wBAAA,CAAyB,UAAA,CAAW,OAAO,aAAa,CAAA;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,KAAQ,kBAAA,IAAsB,IAAA,CAAK,KAAA,CAAM,SAAS,iBAAA,EAAmB;AACvE,MAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU;AACzC,QAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,kBAAA,EAAoB;AACrD,QAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,UAAA,EAAY;AACvC,UAAA,IAAI,MAAA,CAAO,SAAS,UAAA,EAAY;AAChC,UAAA,MAAM,KAAA,GAAQ,qBAAqB,MAAM,CAAA;AACzC,UAAA,IAAI,KAAA,KAAU,KAAA,IAAS,MAAA,CAAO,KAAA,CAAM,SAAS,kBAAA,EAAoB;AAC/D,YAAA,wBAAA,CAAyB,MAAA,CAAO,OAAO,aAAa,CAAA;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CACG,yBAAA,CAA0B,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,kBAAA,KAC3D,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,kBAAA,EACpB;AACA,MAAA,wBAAA,CAAyB,IAAA,CAAK,OAAO,aAAa,CAAA;AAAA,IACpD;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB,IAAA,EAAoC;AACxE,EAAA,IAAI,IAAA,CAAK,SAAS,SAAA,IAAa,OAAO,KAAK,KAAA,KAAU,QAAA,SAAiB,IAAA,CAAK,KAAA;AAC3E,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,uBAAuB,IAAA,EAAoC;AACzE,EAAA,IAAI,IAAA,CAAK,SAAS,SAAA,IAAa,OAAO,KAAK,KAAA,KAAU,QAAA,SAAiB,IAAA,CAAK,KAAA;AAC3E,EAAA,OAAO,IAAA;AACT;;;AC5FO,IAAM,yBAAyB,UAAA,CAAW;AAAA,EAC/C,IAAA,EAAM,2BAAA;AAAA,EACN,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,WAAA,EACE;AAAA,KACJ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,gBAAA,EACE,uJAAA;AAAA,MACF,wBAAA,EACE;AAAA,KACJ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACV,8BAAA,EAAgC,EAAE,IAAA,EAAM,SAAA;AAAU,SACpD;AAAA,QACA,oBAAA,EAAsB;AAAA;AACxB;AACF,GACF;AAAA,EACA,cAAA,EAAgB,CAAC,EAAE,8BAAA,EAAgC,MAAM,CAAA;AAAA,EACzD,MAAA,CAAO,OAAA,EAAS,CAAC,OAAO,CAAA,EAAG;AAEzB,IAAA,MAAM,8BAAA,mBAAiC,IAAI,GAAA,CAAI,CAAC,YAAY,CAAC,CAAA;AAE7D,IAAA,SAAS,iBAAiB,GAAA,EAAgC;AACxD,MAAA,KAAA,MAAW,IAAA,IAAQ,IAAI,UAAA,EAAY;AACjC,QAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC9B,QAAA,MAAM,GAAA,GAAM,qBAAqB,IAAI,CAAA;AACrC,QAAA,IAAI,CAAC,GAAA,IAAO,CAAC,gBAAA,CAAiB,GAAG,CAAA,EAAG;AAEpC,QAAA,MAAM,WAAA,GAAc,qBAAA,CAAsB,IAAA,CAAK,KAAK,CAAA;AACpD,QAAA,IAAI,WAAA,IAAe,sBAAsB,IAAA,CAAK,WAAW,KAAK,CAAC,kBAAA,CAAmB,GAAG,CAAA,EAAG;AACtF,UAAA,OAAA,CAAQ,MAAA,CAAO;AAAA,YACb,MAAM,IAAA,CAAK,KAAA;AAAA,YACX,SAAA,EAAW,kBAAA;AAAA,YACX,IAAA,EAAM;AAAA,cACJ,QAAA,EAAU,GAAA;AAAA,cACV,KAAA,EAAO,WAAA;AAAA,cACP,OAAA,EAAS;AAAA;AACX,WACD,CAAA;AACD,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,OAAA,CAAQ,8BAAA,IAAkC,8BAAA,CAA+B,GAAA,CAAI,GAAG,CAAA,EAAG;AACrF,UAAA,MAAM,GAAA,GAAM,sBAAA,CAAuB,IAAA,CAAK,KAAK,CAAA;AAC7C,UAAA,IAAI,OAAO,IAAA,IAAQ,GAAA,IAAO,KAAK,MAAA,CAAO,SAAA,CAAU,GAAG,CAAA,EAAG;AACpD,YAAA,OAAA,CAAQ,MAAA,CAAO;AAAA,cACb,MAAM,IAAA,CAAK,KAAA;AAAA,cACX,SAAA,EAAW,0BAAA;AAAA,cACX,MAAM,EAAE,QAAA,EAAU,KAAK,KAAA,EAAO,MAAA,CAAO,GAAG,CAAA;AAAE,aAC3C,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,eAAe,IAAA,EAAM;AACnB,QAAA,KAAA,MAAW,QAAA,IAAY,uBAAA,CAAwB,IAAI,CAAA,EAAG;AACpD,UAAA,wBAAA,CAAyB,UAAU,gBAAgB,CAAA;AAAA,QACrD;AAAA,MACF,CAAA;AAAA,MACA,iBAAiB,IAAA,EAAM;AACrB,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,IACE,MAAA,EAAQ,IAAA,KAAS,UAAA,KAChB,MAAA,CAAO,GAAA,CAAI,SAAS,YAAA,IAAgB,MAAA,CAAO,GAAA,CAAI,IAAA,KAAS,SAAA,CAAA,EACzD;AACA,UAAA,MAAM,SAAA,GACJ,MAAA,CAAO,GAAA,CAAI,IAAA,KAAS,eAChB,MAAA,CAAO,GAAA,CAAI,IAAA,GACX,OAAO,OAAO,GAAA,CAAI,KAAA,KAAU,QAAA,GAC1B,MAAA,CAAO,IAAI,KAAA,GACX,IAAA;AACR,UAAA,IAAI,SAAA,KAAc,UAAU,SAAA,KAAc,IAAA,IAAQ,SAAS,IAAA,CAAK,SAAA,IAAa,EAAE,CAAA,EAAG;AAChF,YAAA,wBAAA,CAAyB,MAAM,gBAAgB,CAAA;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAAA,KACF;AAAA,EACF;AACF,CAAC;AClFD,IAAI,cAAA,GAAiB,KAAA;AACrB,IAAI,gBAAwC,EAAC;AAC7C,IAAI,cAAA,GAAiB,KAAA;AASrB,SAAS,wBAAA,CACP,SACA,OAAA,EACwB;AACxB,EAAA,IAAI,gBAAgB,OAAO,aAAA;AAE3B,EAAA,MAAM,OAAA,GAAUC,sBAAK,OAAA,CAAQ,OAAA,EAAS,WAAW,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC7E,EAAA,MAAM,eAAeA,qBAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,OAAA,EAAS,gBAAgBC,8BAA0B,CAAA;AAC9F,EAAA,MAAM,QAAA,GAAWC,iCAA6B,YAAY,CAAA;AAC1D,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,cAAA,GAAiB,IAAA;AACjB,IAAA,aAAA,GAAgB,EAAC;AACjB,IAAA,OAAO,aAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAUC,+BAAA,CAA4B,EAAE,OAAA,EAAS,CAAA;AACvD,EAAA,aAAA,GAAgBC,+BAAA,CAA4B,UAAU,OAAO,CAAA;AAC7D,EAAA,cAAA,GAAiB,IAAA;AACjB,EAAA,OAAO,aAAA;AACT;AAEO,IAAM,2BAA2B,UAAA,CAAmC;AAAA,EACzE,IAAA,EAAM,6BAAA;AAAA,EACN,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,WAAA,EACE;AAAA,KACJ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,OAAA,EACE;AAAA,KACJ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACV,YAAA,EAAc,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,UAC/B,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA;AAAS,SAC5B;AAAA,QACA,oBAAA,EAAsB;AAAA;AACxB;AACF,GACF;AAAA,EACA,cAAA,EAAgB,CAAC,EAAE,CAAA;AAAA,EACnB,MAAA,CAAO,OAAA,EAAS,CAAC,OAAO,CAAA,EAAG;AACzB,IAAA,MAAM,OAAA,GAAUJ,sBAAK,OAAA,CAAQ,OAAA,EAAS,WAAW,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC7E,IAAA,MAAM,eAAeA,qBAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,OAAA,EAAS,gBAAgBC,8BAA0B,CAAA;AAC9F,IAAA,IAAI,CAACC,gCAAA,CAA6B,YAAY,CAAA,EAAG;AAC/C,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,OAAO;AAAA,MACL,eAAe,IAAA,EAAM;AACnB,QAAA,IAAI,cAAA,EAAgB;AACpB,QAAA,cAAA,GAAiB,IAAA;AAEjB,QAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,OAAA,EAAS,OAAO,CAAA;AACzD,QAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,UAAA,OAAA,CAAQ,MAAA,CAAO;AAAA,YACb,IAAA;AAAA,YACA,SAAA,EAAW,SAAA;AAAA,YACX,IAAA,EAAM,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA;AAAU,WACpC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,KACF;AAAA,EACF;AACF,CAAC;;;AC1FM,IAAM,8BAA8B,UAAA,CAAW;AAAA,EACpD,IAAA,EAAM,gCAAA;AAAA,EACN,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM;AAAA,MACJ,WAAA,EACE;AAAA,KACJ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,QAAA,EACE;AAAA,KACJ;AAAA,IACA,QAAQ;AAAC,GACX;AAAA,EACA,gBAAgB,EAAC;AAAA,EACjB,OAAO,OAAA,EAAS;AACd,IAAA,SAAS,iBAAiB,GAAA,EAAgC;AACxD,MAAA,MAAM,aAAA,GAAgB,wBAAwB,GAAG,CAAA;AACjD,MAAA,MAAM,SAAA,GAAY,+BAA+B,aAAa,CAAA;AAC9D,MAAA,KAAA,MAAW,EAAE,SAAA,EAAW,QAAA,EAAS,IAAK,SAAA,EAAW;AAC/C,QAAA,OAAA,CAAQ,MAAA,CAAO;AAAA,UACb,IAAA,EAAM,GAAA;AAAA,UACN,SAAA,EAAW,UAAA;AAAA,UACX,IAAA,EAAM,EAAE,SAAA,EAAW,QAAA;AAAS,SAC7B,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,eAAe,IAAA,EAAM;AACnB,QAAA,KAAA,MAAW,QAAA,IAAY,uBAAA,CAAwB,IAAI,CAAA,EAAG;AACpD,UAAA,wBAAA,CAAyB,UAAU,gBAAgB,CAAA;AAAA,QACrD;AAAA,MACF,CAAA;AAAA,MACA,iBAAiB,IAAA,EAAM;AAErB,QAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,QAAA,IACE,MAAA,EAAQ,IAAA,KAAS,UAAA,KAChB,MAAA,CAAO,GAAA,CAAI,SAAS,YAAA,IAAgB,MAAA,CAAO,GAAA,CAAI,IAAA,KAAS,SAAA,CAAA,EACzD;AACA,UAAA,MAAM,SAAA,GACJ,MAAA,CAAO,GAAA,CAAI,IAAA,KAAS,eAChB,MAAA,CAAO,GAAA,CAAI,IAAA,GACX,OAAO,OAAO,GAAA,CAAI,KAAA,KAAU,QAAA,GAC1B,MAAA,CAAO,IAAI,KAAA,GACX,IAAA;AACR,UAAA,IAAI,SAAA,KAAc,UAAU,SAAA,KAAc,IAAA,IAAQ,SAAS,IAAA,CAAK,SAAA,IAAa,EAAE,CAAA,EAAG;AAChF,YAAA,wBAAA,CAAyB,MAAM,gBAAgB,CAAA;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAAA,KACF;AAAA,EACF;AACF,CAAC;;;ACtDM,IAAM,KAAA,GAAQ;AAAA,EACnB,6BAAA,EAA+B,uBAAA;AAAA,EAC/B,gCAAA,EAAkC,2BAAA;AAAA,EAClC,2BAAA,EAA6B,sBAAA;AAAA,EAC7B,wBAAA,EAA0B,oBAAA;AAAA,EAC1B,6BAAA,EAA+B;AACjC;AAUA,IAAM,MAAA,GAAS;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,2BAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA,EACA;AACF,CAAA;AAGO,IAAM,OAAA,GAAU;AAAA,EACrB,WAAA,EAAa;AAAA,IACX,OAAA,EAAS;AAAA,MACP,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAO;AAAA,MACL,4CAAA,EAA8C,OAAA;AAAA,MAC9C,uCAAA,EAAyC,OAAA;AAAA,MACzC,oCAAA,EAAsC;AAAA;AACxC,GACF;AAAA;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS;AAAA,MACP,aAAA,EAAe;AAAA,KACjB;AAAA,IACA,KAAA,EAAO;AAAA,MACL,4CAAA,EAA8C,OAAA;AAAA,MAC9C,uCAAA,EAAyC,OAAA;AAAA,MACzC,oCAAA,EAAsC,OAAA;AAAA,MACtC,yCAAA,EAA2C;AAAA;AAC7C;AAEJ;AAEA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA;AAEjC,IAAO,WAAA,GAAQ","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 isDefaultStylesCall(node) {
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
- if (callee.object.type === "Identifier") {
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`) instead of the default `styles` export in publishable packages"
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
- unscopedInPackage: "Using the default `styles.{{method}}()` in a published package risks class-name collisions. Use `createTypeStyles({ scopeId: pkg.name })` or `createStyles({ scopeId })` instead."
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 (!isDefaultStylesCall(node)) return;
45
- const method = memberPropertyName(node.callee);
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: method ?? "class" }
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 { kind: "global.style", key: nameNode.value, nameNode };
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.0.0-unstable.f96b13308930",
3
+ "version": "0.0.0-unstable.fe19d887abfe",
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.0.0-unstable.f96b13308930"
35
+ "@typestyles/cli": "0.0.0-unstable.fe19d887abfe"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^25.2.1",