boss-css 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,7 +23,7 @@ const plugin = {
23
23
  [require_prefer_unitless_values.default.name]: require_prefer_unitless_values.default
24
24
  }
25
25
  };
26
- const plugins = [plugin.meta.name];
26
+ const plugins = { [plugin.meta.name]: plugin };
27
27
  const globalOptions = { languageOptions: { globals: { $$: "readonly" } } };
28
28
  const createConfig = (name, getRules) => ({
29
29
  [`${name}-error`]: {
@@ -23,7 +23,7 @@ const plugin = {
23
23
  [prefer_unitless_values_default.name]: prefer_unitless_values_default
24
24
  }
25
25
  };
26
- const plugins = [plugin.meta.name];
26
+ const plugins = { [plugin.meta.name]: plugin };
27
27
  const globalOptions = { languageOptions: { globals: { $$: "readonly" } } };
28
28
  const createConfig = (name, getRules) => ({
29
29
  [`${name}-error`]: {
@@ -4,6 +4,7 @@ const require_defaults = require('../utils/defaults.cjs');
4
4
  const require_format = require('../utils/format.cjs');
5
5
  const require_boss_classes = require('../utils/boss-classes.cjs');
6
6
  const require_order = require('../utils/order.cjs');
7
+ const require_context = require('../utils/context.cjs');
7
8
  let boss_css_merge = require("boss-css/merge");
8
9
 
9
10
  //#region src/eslint-plugin/rules/format-classnames.js
@@ -30,13 +31,14 @@ const formatClassList = (merge, literal, options) => {
30
31
  return next;
31
32
  };
32
33
  const create = (context) => {
33
- const sourceCode = context.getSourceCode();
34
+ const sourceCode = require_context.getSourceCode(context);
34
35
  const options = {
35
36
  ...defaultOptions,
36
37
  ...context.options[0] || {}
37
38
  };
38
39
  const patterns = createPatterns(options);
39
40
  const merge = (0, boss_css_merge.createBossMerge)(options.merge || {});
41
+ if (!sourceCode) return {};
40
42
  const reportLiteral = (literal) => {
41
43
  if (!literal || !literal.canFix) return;
42
44
  const next = formatClassList(merge, literal, options);
@@ -3,6 +3,7 @@ import { DEFAULT_ATTRIBUTE_PATTERNS, DEFAULT_CALLEE_PATTERNS, DEFAULT_TAG_PATTER
3
3
  import { buildLiteralReplacement } from "../utils/format.mjs";
4
4
  import { splitClassList } from "../utils/boss-classes.mjs";
5
5
  import { sortTokens } from "../utils/order.mjs";
6
+ import { getSourceCode } from "../utils/context.mjs";
6
7
  import { createBossMerge } from "boss-css/merge";
7
8
 
8
9
  //#region src/eslint-plugin/rules/format-classnames.js
@@ -29,13 +30,14 @@ const formatClassList = (merge, literal, options) => {
29
30
  return next;
30
31
  };
31
32
  const create = (context) => {
32
- const sourceCode = context.getSourceCode();
33
+ const sourceCode = getSourceCode(context);
33
34
  const options = {
34
35
  ...defaultOptions,
35
36
  ...context.options[0] || {}
36
37
  };
37
38
  const patterns = createPatterns(options);
38
39
  const merge = createBossMerge(options.merge || {});
40
+ if (!sourceCode) return {};
39
41
  const reportLiteral = (literal) => {
40
42
  if (!literal || !literal.canFix) return;
41
43
  const next = formatClassList(merge, literal, options);
@@ -1,6 +1,7 @@
1
1
  const require_ast = require('../utils/ast.cjs');
2
2
  const require_defaults = require('../utils/defaults.cjs');
3
3
  const require_boss_classes = require('../utils/boss-classes.cjs');
4
+ const require_context = require('../utils/context.cjs');
4
5
 
5
6
  //#region src/eslint-plugin/rules/no-unknown-classes.js
6
7
  const RULE_NAME = "no-unknown-classes";
@@ -21,12 +22,13 @@ const createPatterns = (options) => ({
21
22
  tags: require_ast.compilePatterns(options.tags)
22
23
  });
23
24
  const create = (context) => {
24
- const sourceCode = context.getSourceCode();
25
+ const sourceCode = require_context.getSourceCode(context);
25
26
  const options = {
26
27
  ...defaultOptions,
27
28
  ...context.options[0] || {}
28
29
  };
29
30
  const patterns = createPatterns(options);
31
+ if (!sourceCode) return {};
30
32
  const reportInvalid = (literal) => {
31
33
  if (!literal || !literal.value) return;
32
34
  const invalid = require_boss_classes.findInvalidTokens(literal.value, options);
@@ -1,6 +1,7 @@
1
1
  import { collectClassLiteralsFromExpression, compilePatterns, getCalleeName, getJSXAttributeName, getLiteralInfo, matchesPattern } from "../utils/ast.mjs";
2
2
  import { DEFAULT_ATTRIBUTE_PATTERNS, DEFAULT_CALLEE_PATTERNS, DEFAULT_TAG_PATTERNS, DEFAULT_VARIABLE_PATTERNS } from "../utils/defaults.mjs";
3
3
  import { findInvalidTokens } from "../utils/boss-classes.mjs";
4
+ import { getSourceCode } from "../utils/context.mjs";
4
5
 
5
6
  //#region src/eslint-plugin/rules/no-unknown-classes.js
6
7
  const RULE_NAME = "no-unknown-classes";
@@ -21,12 +22,13 @@ const createPatterns = (options) => ({
21
22
  tags: compilePatterns(options.tags)
22
23
  });
23
24
  const create = (context) => {
24
- const sourceCode = context.getSourceCode();
25
+ const sourceCode = getSourceCode(context);
25
26
  const options = {
26
27
  ...defaultOptions,
27
28
  ...context.options[0] || {}
28
29
  };
29
30
  const patterns = createPatterns(options);
31
+ if (!sourceCode) return {};
30
32
  const reportInvalid = (literal) => {
31
33
  if (!literal || !literal.value) return;
32
34
  const invalid = findInvalidTokens(literal.value, options);
@@ -2,6 +2,7 @@ const require_ast = require('../utils/ast.cjs');
2
2
  const require_defaults = require('../utils/defaults.cjs');
3
3
  const require_api = require('../utils/api.cjs');
4
4
  const require_boss_classes = require('../utils/boss-classes.cjs');
5
+ const require_context = require('../utils/context.cjs');
5
6
 
6
7
  //#region src/eslint-plugin/rules/prefer-token-values.js
7
8
  const RULE_NAME = "prefer-token-values";
@@ -94,7 +95,7 @@ const resolveTokenValue = (groupValues, tokenPath) => {
94
95
  return current;
95
96
  };
96
97
  const create = (context) => {
97
- const sourceCode = context.getSourceCode();
98
+ const sourceCode = require_context.getSourceCode(context);
98
99
  const options = {
99
100
  ...defaultOptions,
100
101
  ...context.options[0] || {}
@@ -105,6 +106,7 @@ const create = (context) => {
105
106
  const { api } = require_api.getApi();
106
107
  const tokenGroups = api?.tokens && typeof api.tokens === "object" ? api.tokens : null;
107
108
  if (!api || !tokenGroups) return {};
109
+ if (!sourceCode) return {};
108
110
  const reportTokenUsage = (node, propName, tokenKey) => {
109
111
  context.report({
110
112
  node,
@@ -2,6 +2,7 @@ import { getJSXAttributeName, getJSXRootName, getLiteralInfo } from "../utils/as
2
2
  import { DEFAULT_COMPONENTS } from "../utils/defaults.mjs";
3
3
  import { getApi } from "../utils/api.mjs";
4
4
  import { getContextSet, isCssPropName } from "../utils/boss-classes.mjs";
5
+ import { getSourceCode } from "../utils/context.mjs";
5
6
 
6
7
  //#region src/eslint-plugin/rules/prefer-token-values.js
7
8
  const RULE_NAME = "prefer-token-values";
@@ -94,7 +95,7 @@ const resolveTokenValue = (groupValues, tokenPath) => {
94
95
  return current;
95
96
  };
96
97
  const create = (context) => {
97
- const sourceCode = context.getSourceCode();
98
+ const sourceCode = getSourceCode(context);
98
99
  const options = {
99
100
  ...defaultOptions,
100
101
  ...context.options[0] || {}
@@ -105,6 +106,7 @@ const create = (context) => {
105
106
  const { api } = getApi();
106
107
  const tokenGroups = api?.tokens && typeof api.tokens === "object" ? api.tokens : null;
107
108
  if (!api || !tokenGroups) return {};
109
+ if (!sourceCode) return {};
108
110
  const reportTokenUsage = (node, propName, tokenKey) => {
109
111
  context.report({
110
112
  node,
@@ -3,6 +3,7 @@ const require_defaults = require('../utils/defaults.cjs');
3
3
  const require_format = require('../utils/format.cjs');
4
4
  const require_api = require('../utils/api.cjs');
5
5
  const require_boss_classes = require('../utils/boss-classes.cjs');
6
+ const require_context = require('../utils/context.cjs');
6
7
 
7
8
  //#region src/eslint-plugin/rules/prefer-unitless-values.js
8
9
  const RULE_NAME = "prefer-unitless-values";
@@ -118,7 +119,7 @@ const analyzeClassList = (classList, unit, extraProps) => {
118
119
  };
119
120
  };
120
121
  const create = (context) => {
121
- const sourceCode = context.getSourceCode();
122
+ const sourceCode = require_context.getSourceCode(context);
122
123
  const options = {
123
124
  ...defaultOptions,
124
125
  ...context.options[0] || {}
@@ -128,6 +129,7 @@ const create = (context) => {
128
129
  const { api } = require_api.getApi();
129
130
  const unit = normalizeUnit(options.unit) || normalizeUnit(api?.unit) || "px";
130
131
  if (!unit) return {};
132
+ if (!sourceCode) return {};
131
133
  const reportLiteral = (literal) => {
132
134
  if (!literal || !literal.value) return;
133
135
  const { issues, nextClassList } = analyzeClassList(literal.value, unit, extraProps);
@@ -3,6 +3,7 @@ import { DEFAULT_ATTRIBUTE_PATTERNS, DEFAULT_CALLEE_PATTERNS, DEFAULT_TAG_PATTER
3
3
  import { buildLiteralReplacement } from "../utils/format.mjs";
4
4
  import { getApi } from "../utils/api.mjs";
5
5
  import { isCssPropName, parseGroupedSelector, splitClassList, splitFragments } from "../utils/boss-classes.mjs";
6
+ import { getSourceCode } from "../utils/context.mjs";
6
7
 
7
8
  //#region src/eslint-plugin/rules/prefer-unitless-values.js
8
9
  const RULE_NAME = "prefer-unitless-values";
@@ -118,7 +119,7 @@ const analyzeClassList = (classList, unit, extraProps) => {
118
119
  };
119
120
  };
120
121
  const create = (context) => {
121
- const sourceCode = context.getSourceCode();
122
+ const sourceCode = getSourceCode(context);
122
123
  const options = {
123
124
  ...defaultOptions,
124
125
  ...context.options[0] || {}
@@ -128,6 +129,7 @@ const create = (context) => {
128
129
  const { api } = getApi();
129
130
  const unit = normalizeUnit(options.unit) || normalizeUnit(api?.unit) || "px";
130
131
  if (!unit) return {};
132
+ if (!sourceCode) return {};
131
133
  const reportLiteral = (literal) => {
132
134
  if (!literal || !literal.value) return;
133
135
  const { issues, nextClassList } = analyzeClassList(literal.value, unit, extraProps);
@@ -1,6 +1,7 @@
1
1
  const require_ast = require('../utils/ast.cjs');
2
2
  const require_defaults = require('../utils/defaults.cjs');
3
3
  const require_boss_classes = require('../utils/boss-classes.cjs');
4
+ const require_context = require('../utils/context.cjs');
4
5
 
5
6
  //#region src/eslint-plugin/rules/props-only.js
6
7
  const RULE_NAME = "props-only";
@@ -21,12 +22,13 @@ const createPatterns = (options) => ({
21
22
  tags: require_ast.compilePatterns(options.tags)
22
23
  });
23
24
  const create = (context) => {
24
- const sourceCode = context.getSourceCode();
25
+ const sourceCode = require_context.getSourceCode(context);
25
26
  const options = {
26
27
  ...defaultOptions,
27
28
  ...context.options[0] || {}
28
29
  };
29
30
  const patterns = createPatterns(options);
31
+ if (!sourceCode) return {};
30
32
  const reportLiteral = (literal) => {
31
33
  if (!literal || !literal.value) return;
32
34
  if (!require_boss_classes.containsBossToken(literal.value, options)) return;
@@ -1,6 +1,7 @@
1
1
  import { collectClassLiteralsFromExpression, compilePatterns, getCalleeName, getJSXAttributeName, getLiteralInfo, matchesPattern } from "../utils/ast.mjs";
2
2
  import { DEFAULT_ATTRIBUTE_PATTERNS, DEFAULT_CALLEE_PATTERNS, DEFAULT_TAG_PATTERNS, DEFAULT_VARIABLE_PATTERNS } from "../utils/defaults.mjs";
3
3
  import { containsBossToken } from "../utils/boss-classes.mjs";
4
+ import { getSourceCode } from "../utils/context.mjs";
4
5
 
5
6
  //#region src/eslint-plugin/rules/props-only.js
6
7
  const RULE_NAME = "props-only";
@@ -21,12 +22,13 @@ const createPatterns = (options) => ({
21
22
  tags: compilePatterns(options.tags)
22
23
  });
23
24
  const create = (context) => {
24
- const sourceCode = context.getSourceCode();
25
+ const sourceCode = getSourceCode(context);
25
26
  const options = {
26
27
  ...defaultOptions,
27
28
  ...context.options[0] || {}
28
29
  };
29
30
  const patterns = createPatterns(options);
31
+ if (!sourceCode) return {};
30
32
  const reportLiteral = (literal) => {
31
33
  if (!literal || !literal.value) return;
32
34
  if (!containsBossToken(literal.value, options)) return;
@@ -0,0 +1,9 @@
1
+
2
+ //#region src/eslint-plugin/utils/context.js
3
+ const getSourceCode = (context) => {
4
+ if (typeof context?.getSourceCode === "function") return context.getSourceCode();
5
+ return context?.sourceCode ?? null;
6
+ };
7
+
8
+ //#endregion
9
+ exports.getSourceCode = getSourceCode;
@@ -0,0 +1,8 @@
1
+ //#region src/eslint-plugin/utils/context.js
2
+ const getSourceCode = (context) => {
3
+ if (typeof context?.getSourceCode === "function") return context.getSourceCode();
4
+ return context?.sourceCode ?? null;
5
+ };
6
+
7
+ //#endregion
8
+ export { getSourceCode };
@@ -141,7 +141,15 @@ type BossComponentProps<C> = C extends keyof BossIntrinsicElements
141
141
  type AsProp<C extends BossElementType> = {
142
142
  as?: C
143
143
  }
144
- type PolymorphicComponentProp<C extends BossElementType, Props = {}> = Props & BossComponentProps<C> & AsProp<C>
144
+ type BossMergedProps<Props, ComponentProps> = Omit<Props, keyof ComponentProps> &
145
+ Omit<ComponentProps, keyof Props> & {
146
+ [K in Extract<keyof ComponentProps, keyof Props>]?: ComponentProps[K] | Props[K]
147
+ }
148
+ type PolymorphicComponentProp<C extends BossElementType, Props = {}> = BossMergedProps<
149
+ Props,
150
+ BossComponentProps<C>
151
+ > &
152
+ AsProp<C>
145
153
  type PolymorphicComponentPropWithRef<C extends BossElementType, Props = {}> = PolymorphicComponentProp<C, Props> & {
146
154
  ref?: unknown
147
155
  }
@@ -140,7 +140,15 @@ type BossComponentProps<C> = C extends keyof BossIntrinsicElements
140
140
  type AsProp<C extends BossElementType> = {
141
141
  as?: C
142
142
  }
143
- type PolymorphicComponentProp<C extends BossElementType, Props = {}> = Props & BossComponentProps<C> & AsProp<C>
143
+ type BossMergedProps<Props, ComponentProps> = Omit<Props, keyof ComponentProps> &
144
+ Omit<ComponentProps, keyof Props> & {
145
+ [K in Extract<keyof ComponentProps, keyof Props>]?: ComponentProps[K] | Props[K]
146
+ }
147
+ type PolymorphicComponentProp<C extends BossElementType, Props = {}> = BossMergedProps<
148
+ Props,
149
+ BossComponentProps<C>
150
+ > &
151
+ AsProp<C>
144
152
  type PolymorphicComponentPropWithRef<C extends BossElementType, Props = {}> = PolymorphicComponentProp<C, Props> & {
145
153
  ref?: unknown
146
154
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "boss-css",
3
- "version": "0.0.18",
3
+ "version": "0.0.19",
4
4
  "description": "Polymorphic, usage-driven CSS-in-JS.",
5
5
  "bin": {
6
6
  "boss": "./dist/cli/index.cjs",
@@ -275,6 +275,7 @@
275
275
  "@types/jsdom": "^27.0.0",
276
276
  "@types/node": "^25.0.9",
277
277
  "@types/react": "^19.2.8",
278
+ "eslint": "^10.0.2",
278
279
  "postcss": "^8.5.6",
279
280
  "preact": "^10.28.2",
280
281
  "prettier": "^3.8.0",