@culur/config-stylelint 1.6.5 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/factory-B33e_UAZ.mjs +264 -0
  3. package/dist/factory-B33e_UAZ.mjs.map +1 -0
  4. package/dist/factory-BNS_YTTh.cjs +269 -0
  5. package/dist/factory-BNS_YTTh.cjs.map +1 -0
  6. package/dist/factory.cjs +2 -10
  7. package/dist/factory.d.cts +5 -4
  8. package/dist/factory.d.mts +8 -0
  9. package/dist/factory.mjs +2 -0
  10. package/dist/shareable-configs/auto.cjs +10 -9
  11. package/dist/shareable-configs/auto.cjs.map +1 -1
  12. package/dist/shareable-configs/auto.d.cts +4 -5
  13. package/dist/shareable-configs/auto.d.mts +5 -0
  14. package/dist/shareable-configs/auto.mjs +13 -0
  15. package/dist/shareable-configs/auto.mjs.map +1 -0
  16. package/dist/shareable-configs/none.cjs +8 -9
  17. package/dist/shareable-configs/none.cjs.map +1 -1
  18. package/dist/shareable-configs/none.d.cts +4 -5
  19. package/dist/shareable-configs/none.d.mts +5 -0
  20. package/dist/shareable-configs/none.mjs +11 -0
  21. package/dist/shareable-configs/none.mjs.map +1 -0
  22. package/dist/shareable-configs/sass-vue.cjs +8 -9
  23. package/dist/shareable-configs/sass-vue.cjs.map +1 -1
  24. package/dist/shareable-configs/sass-vue.d.cts +4 -5
  25. package/dist/shareable-configs/sass-vue.d.mts +5 -0
  26. package/dist/shareable-configs/sass-vue.mjs +11 -0
  27. package/dist/shareable-configs/sass-vue.mjs.map +1 -0
  28. package/dist/shareable-configs/sass.cjs +8 -9
  29. package/dist/shareable-configs/sass.cjs.map +1 -1
  30. package/dist/shareable-configs/sass.d.cts +4 -5
  31. package/dist/shareable-configs/sass.d.mts +5 -0
  32. package/dist/shareable-configs/sass.mjs +11 -0
  33. package/dist/shareable-configs/sass.mjs.map +1 -0
  34. package/dist/shareable-configs/tailwind3-sass-vue.cjs +8 -9
  35. package/dist/shareable-configs/tailwind3-sass-vue.cjs.map +1 -1
  36. package/dist/shareable-configs/tailwind3-sass-vue.d.cts +4 -5
  37. package/dist/shareable-configs/tailwind3-sass-vue.d.mts +5 -0
  38. package/dist/shareable-configs/tailwind3-sass-vue.mjs +11 -0
  39. package/dist/shareable-configs/tailwind3-sass-vue.mjs.map +1 -0
  40. package/dist/shareable-configs/tailwind3-sass.cjs +8 -9
  41. package/dist/shareable-configs/tailwind3-sass.cjs.map +1 -1
  42. package/dist/shareable-configs/tailwind3-sass.d.cts +4 -5
  43. package/dist/shareable-configs/tailwind3-sass.d.mts +5 -0
  44. package/dist/shareable-configs/tailwind3-sass.mjs +11 -0
  45. package/dist/shareable-configs/tailwind3-sass.mjs.map +1 -0
  46. package/dist/shareable-configs/tailwind3.cjs +8 -9
  47. package/dist/shareable-configs/tailwind3.cjs.map +1 -1
  48. package/dist/shareable-configs/tailwind3.d.cts +4 -5
  49. package/dist/shareable-configs/tailwind3.d.mts +5 -0
  50. package/dist/shareable-configs/tailwind3.mjs +11 -0
  51. package/dist/shareable-configs/tailwind3.mjs.map +1 -0
  52. package/dist/shareable-configs/tailwind4-vue.cjs +8 -9
  53. package/dist/shareable-configs/tailwind4-vue.cjs.map +1 -1
  54. package/dist/shareable-configs/tailwind4-vue.d.cts +4 -5
  55. package/dist/shareable-configs/tailwind4-vue.d.mts +5 -0
  56. package/dist/shareable-configs/tailwind4-vue.mjs +11 -0
  57. package/dist/shareable-configs/tailwind4-vue.mjs.map +1 -0
  58. package/dist/shareable-configs/tailwind4.cjs +8 -9
  59. package/dist/shareable-configs/tailwind4.cjs.map +1 -1
  60. package/dist/shareable-configs/tailwind4.d.cts +4 -5
  61. package/dist/shareable-configs/tailwind4.d.mts +5 -0
  62. package/dist/shareable-configs/tailwind4.mjs +11 -0
  63. package/dist/shareable-configs/tailwind4.mjs.map +1 -0
  64. package/dist/shareable-configs/vue.cjs +8 -9
  65. package/dist/shareable-configs/vue.cjs.map +1 -1
  66. package/dist/shareable-configs/vue.d.cts +4 -5
  67. package/dist/shareable-configs/vue.d.mts +5 -0
  68. package/dist/shareable-configs/vue.mjs +11 -0
  69. package/dist/shareable-configs/vue.mjs.map +1 -0
  70. package/package.json +19 -18
  71. package/src/__tests__/describe-rule-or-config.ts +5 -12
  72. package/src/configs/css.test.ts +8 -0
  73. package/src/configs/scss.test.ts +7 -0
  74. package/src/configs/shared.test.ts +7 -0
  75. package/src/configs/vue.test.ts +17 -0
  76. package/src/factory.test.ts +30 -0
  77. package/src/rules/at-rule-no-unknown.test.ts +48 -0
  78. package/src/rules/declaration-block-no-redundant-longhand-properties.test.ts +36 -0
  79. package/src/rules/dollar-variable-pattern.test.ts +27 -0
  80. package/src/rules/function-no-unknown.test.ts +44 -0
  81. package/src/rules/function-no-unknown.ts +2 -1
  82. package/src/rules/import-notation.test.ts +16 -0
  83. package/src/rules/order.test.ts +53 -0
  84. package/src/rules/order.ts +3 -1
  85. package/src/rules/selector-pseudo-class-no-unknown.test.ts +40 -0
  86. package/src/shareable-configs/shareable-configs.test.ts +25 -0
  87. package/src/utils/index.ts +1 -4
  88. package/src/utils/utils.test.ts +46 -0
  89. package/src/utils/utils.ts +11 -6
  90. package/dist/chunk-4NUI5NSE.js +0 -12
  91. package/dist/chunk-4NUI5NSE.js.map +0 -1
  92. package/dist/chunk-4YAD5VQL.js +0 -12
  93. package/dist/chunk-4YAD5VQL.js.map +0 -1
  94. package/dist/chunk-5UBWHXRE.js +0 -12
  95. package/dist/chunk-5UBWHXRE.js.map +0 -1
  96. package/dist/chunk-6OBN7KHD.js +0 -294
  97. package/dist/chunk-6OBN7KHD.js.map +0 -1
  98. package/dist/chunk-7ZUITFGA.js +0 -12
  99. package/dist/chunk-7ZUITFGA.js.map +0 -1
  100. package/dist/chunk-AFCQFKUH.js +0 -13
  101. package/dist/chunk-AFCQFKUH.js.map +0 -1
  102. package/dist/chunk-BHT5EOA2.cjs +0 -14
  103. package/dist/chunk-BHT5EOA2.cjs.map +0 -1
  104. package/dist/chunk-EQCVQC35.js +0 -31
  105. package/dist/chunk-EQCVQC35.js.map +0 -1
  106. package/dist/chunk-EWMD7NRS.cjs +0 -35
  107. package/dist/chunk-EWMD7NRS.cjs.map +0 -1
  108. package/dist/chunk-FWOPRDUM.js +0 -12
  109. package/dist/chunk-FWOPRDUM.js.map +0 -1
  110. package/dist/chunk-GCV5C6BZ.cjs +0 -14
  111. package/dist/chunk-GCV5C6BZ.cjs.map +0 -1
  112. package/dist/chunk-IA64Z5UZ.cjs +0 -14
  113. package/dist/chunk-IA64Z5UZ.cjs.map +0 -1
  114. package/dist/chunk-J25EZAJ4.js +0 -12
  115. package/dist/chunk-J25EZAJ4.js.map +0 -1
  116. package/dist/chunk-JYXCCHVU.cjs +0 -14
  117. package/dist/chunk-JYXCCHVU.cjs.map +0 -1
  118. package/dist/chunk-MIEGJBQU.js +0 -12
  119. package/dist/chunk-MIEGJBQU.js.map +0 -1
  120. package/dist/chunk-OENPZ3K4.cjs +0 -14
  121. package/dist/chunk-OENPZ3K4.cjs.map +0 -1
  122. package/dist/chunk-R2TQLDIH.cjs +0 -14
  123. package/dist/chunk-R2TQLDIH.cjs.map +0 -1
  124. package/dist/chunk-RD436EBS.cjs +0 -14
  125. package/dist/chunk-RD436EBS.cjs.map +0 -1
  126. package/dist/chunk-TB3LMVRG.js +0 -12
  127. package/dist/chunk-TB3LMVRG.js.map +0 -1
  128. package/dist/chunk-TKBQZWT7.cjs +0 -14
  129. package/dist/chunk-TKBQZWT7.cjs.map +0 -1
  130. package/dist/chunk-VZLSZBBN.js +0 -12
  131. package/dist/chunk-VZLSZBBN.js.map +0 -1
  132. package/dist/chunk-XZC4I6JL.cjs +0 -15
  133. package/dist/chunk-XZC4I6JL.cjs.map +0 -1
  134. package/dist/chunk-YZM2MVV3.cjs +0 -14
  135. package/dist/chunk-YZM2MVV3.cjs.map +0 -1
  136. package/dist/chunk-ZQACBLEL.cjs +0 -296
  137. package/dist/chunk-ZQACBLEL.cjs.map +0 -1
  138. package/dist/factory.cjs.map +0 -1
  139. package/dist/factory.d.ts +0 -6
  140. package/dist/factory.js +0 -4
  141. package/dist/factory.js.map +0 -1
  142. package/dist/magic-string.es-6P4WW7RB.js +0 -1307
  143. package/dist/magic-string.es-6P4WW7RB.js.map +0 -1
  144. package/dist/magic-string.es-PN2DQOGS.cjs +0 -1313
  145. package/dist/magic-string.es-PN2DQOGS.cjs.map +0 -1
  146. package/dist/shareable-configs/auto.d.ts +0 -5
  147. package/dist/shareable-configs/auto.js +0 -5
  148. package/dist/shareable-configs/auto.js.map +0 -1
  149. package/dist/shareable-configs/none.d.ts +0 -5
  150. package/dist/shareable-configs/none.js +0 -5
  151. package/dist/shareable-configs/none.js.map +0 -1
  152. package/dist/shareable-configs/sass-vue.d.ts +0 -5
  153. package/dist/shareable-configs/sass-vue.js +0 -5
  154. package/dist/shareable-configs/sass-vue.js.map +0 -1
  155. package/dist/shareable-configs/sass.d.ts +0 -5
  156. package/dist/shareable-configs/sass.js +0 -5
  157. package/dist/shareable-configs/sass.js.map +0 -1
  158. package/dist/shareable-configs/tailwind3-sass-vue.d.ts +0 -5
  159. package/dist/shareable-configs/tailwind3-sass-vue.js +0 -5
  160. package/dist/shareable-configs/tailwind3-sass-vue.js.map +0 -1
  161. package/dist/shareable-configs/tailwind3-sass.d.ts +0 -5
  162. package/dist/shareable-configs/tailwind3-sass.js +0 -5
  163. package/dist/shareable-configs/tailwind3-sass.js.map +0 -1
  164. package/dist/shareable-configs/tailwind3.d.ts +0 -5
  165. package/dist/shareable-configs/tailwind3.js +0 -5
  166. package/dist/shareable-configs/tailwind3.js.map +0 -1
  167. package/dist/shareable-configs/tailwind4-vue.d.ts +0 -5
  168. package/dist/shareable-configs/tailwind4-vue.js +0 -5
  169. package/dist/shareable-configs/tailwind4-vue.js.map +0 -1
  170. package/dist/shareable-configs/tailwind4.d.ts +0 -5
  171. package/dist/shareable-configs/tailwind4.js +0 -5
  172. package/dist/shareable-configs/tailwind4.js.map +0 -1
  173. package/dist/shareable-configs/vue.d.ts +0 -5
  174. package/dist/shareable-configs/vue.js +0 -5
  175. package/dist/shareable-configs/vue.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,53 @@
1
1
  # @culur/config-stylelint
2
2
 
3
+ ## 1.7.1
4
+
5
+ ### Patch Changes
6
+
7
+ - ⚙️ Update dependencies ([`9a88e8f`](https://github.com/culur/culur/commit/9a88e8fd9ba1f143ad679572e599de18cf68bb33)) ([@renovate](https://github.com/apps/renovate)):
8
+ - `dependencies`:
9
+ - `stylelint-scss@^7.1.1`
10
+ - `devDependencies`:
11
+ - `postcss@^8.5.15`
12
+ - `stylelint@^17.12.0`
13
+
14
+ - ⚙️ Update dependencies ([`1cb4759`](https://github.com/culur/culur/commit/1cb475982905de1f2b2bffc9daf9193343129f99)) ([@renovate](https://github.com/apps/renovate)):
15
+ - `dependencies`:
16
+ - `stylelint-config-clean-order@^10.0.0`
17
+ - `stylelint-selector-bem-pattern@^5.0.0`
18
+
19
+ - 📦 Update workspace dependencies:
20
+ - [`@culur/utils-packages@1.3.0`](https://github.com/culur/culur/tree/main/packages/utils-packages#readme)
21
+
22
+ ## 1.7.0
23
+
24
+ ### Minor Changes
25
+
26
+ - ⚙️ Migrate build system from `tsup` to `tsdown` across all packages ([`83b3791`](https://github.com/culur/culur/commit/83b379149b9e9536f4cd161976762afb35b6b61a)) ([@phamhongphuc](https://github.com/phamhongphuc)).
27
+
28
+ ### Patch Changes
29
+
30
+ - ✨ Rename `ConfigRulePrimaryOption` and `ConfigRuleSecondaryOptions` to `Primary` and `Secondary` ([`cd6d18a`](https://github.com/culur/culur/commit/cd6d18a54a082ca44e90d557bf93f92bf1166bf4)) ([@phamhongphuc](https://github.com/phamhongphuc)).
31
+ Inline `Primary` and `Secondary` type definitions from `stylelint` source code to avoid direct dependency imports.
32
+
33
+ - ✨ Remove `baseUrl` and add `paths` in `tsconfig.json` to maintain compatibility with TypeScript 6 ([`926521c`](https://github.com/culur/culur/commit/926521c4545630ed5adfee614740ac6b9fa708b0)) ([@phamhongphuc](https://github.com/phamhongphuc)).
34
+
35
+ - 🎨 Format code ([`2e1b21c`](https://github.com/culur/culur/commit/2e1b21cffc3cec6b3896070af071519dc5a8ccfc)) ([@phamhongphuc](https://github.com/phamhongphuc)).
36
+
37
+ - 📦 Update dependencies ([`9ad8540`](https://github.com/culur/culur/commit/9ad85406891191012385edf0f8e31ee653e9ecbe)) ([@renovate](https://github.com/apps/renovate)):
38
+ - `dependencies`:
39
+ - `stylelint-order@^8.1.1`
40
+
41
+ - ⚙️ Update dependencies ([`5c2c972`](https://github.com/culur/culur/commit/5c2c9722dc9366e8d2208d01a6cc55f8772e0b16)) ([@renovate](https://github.com/apps/renovate)):
42
+ - `devDependencies`:
43
+ - `dedent@^1.7.2`
44
+ - `postcss@^8.5.8`
45
+
46
+ - ⚙️ Added `stylelint` to `devDependencies` and updated `peerDependencies` to support Stylelint 17 ([`ea635d6`](https://github.com/culur/culur/commit/ea635d60a6e2bdf0eee9651c462143edb05b35db)) ([@phamhongphuc](https://github.com/phamhongphuc)).
47
+
48
+ - 📦 Update workspace dependencies:
49
+ - [`@culur/utils-packages@1.3.0`](https://github.com/culur/culur/tree/main/packages/utils-packages#readme)
50
+
3
51
  ## 1.6.5
4
52
 
5
53
  ### Patch Changes
@@ -0,0 +1,264 @@
1
+ //#region src/utils/utils.ts
2
+ const defineRule = (rule) => rule;
3
+ const defineRules = (rule) => rule;
4
+ const mergeConfigs = (...configsOrNull) => {
5
+ const configs = configsOrNull.filter((c) => !!c);
6
+ return {
7
+ plugins: [...new Set(configs.flatMap((c) => c.plugins ?? []))],
8
+ overrides: [...new Set(configs.flatMap((c) => c.overrides ?? []))],
9
+ extends: configs.flatMap((c) => c.extends ?? []).filter((item, index, arr) => arr.lastIndexOf(item) === index),
10
+ rules: configs.reduce((acc, config) => ({
11
+ ...acc,
12
+ ...config.rules
13
+ }), {}),
14
+ ...configs.reduce((acc, { plugins: _p, overrides: _o, extends: _e, rules: _r, ...config }) => ({
15
+ ...acc,
16
+ ...config
17
+ }), {})
18
+ };
19
+ };
20
+ const isInRange = (version, ...versions) => typeof version === "number" && versions.includes(version);
21
+ //#endregion
22
+ //#region src/rules/at-rule-no-unknown.ts
23
+ const getIgnoreAtRulesByTailwindVersion = (tailwindVersion) => {
24
+ switch (tailwindVersion) {
25
+ case 0: return [
26
+ "tailwind",
27
+ "apply",
28
+ "variants",
29
+ "responsive",
30
+ "screen"
31
+ ];
32
+ case 1:
33
+ case 2: return [
34
+ "tailwind",
35
+ "apply",
36
+ "layer",
37
+ "variants",
38
+ "responsive",
39
+ "screen"
40
+ ];
41
+ case 3: return [
42
+ "tailwind",
43
+ "layer",
44
+ "apply",
45
+ "config"
46
+ ];
47
+ case 4: return [
48
+ "import",
49
+ "theme",
50
+ "source",
51
+ "utility",
52
+ "variant",
53
+ "custom-variant",
54
+ "apply",
55
+ "reference",
56
+ "config",
57
+ "plugin"
58
+ ];
59
+ default: return [];
60
+ }
61
+ };
62
+ const atRuleNoUnknownRule = (packages) => defineRule([true, { ignoreAtRules: getIgnoreAtRulesByTailwindVersion(packages.tailwind) }]);
63
+ const atRuleNoUnknownCSS = (packages) => defineRules({ "at-rule-no-unknown": atRuleNoUnknownRule(packages) });
64
+ const atRuleNoUnknownSCSS = (packages) => defineRules({
65
+ "at-rule-no-unknown": null,
66
+ "scss/at-rule-no-unknown": atRuleNoUnknownRule(packages)
67
+ });
68
+ const declarationBlockNoRedundantLonghandProperties = defineRules({ "declaration-block-no-redundant-longhand-properties": defineRule([true, { ignoreShorthands: ["grid-template"] }]) });
69
+ //#endregion
70
+ //#region src/rules/function-no-unknown.ts
71
+ const getIgnoreFunctionsByTailwindVersion = (tailwindVersion) => {
72
+ switch (tailwindVersion) {
73
+ case 0: return ["config"];
74
+ case 1: return ["theme"];
75
+ case 2: return ["screen", "theme"];
76
+ case 3: return ["theme", "screen"];
77
+ case 4: return [
78
+ "--alpha",
79
+ "--spacing",
80
+ "theme"
81
+ ];
82
+ default: return [];
83
+ }
84
+ };
85
+ const sassFunctionRegex = /^(list|math|color)\..+/;
86
+ const getIgnoreFunctions = (packages) => [
87
+ ...getIgnoreFunctionsByTailwindVersion(packages.tailwind),
88
+ ...packages.sass ? [sassFunctionRegex] : [],
89
+ ...packages.vue ? ["v-bind"] : []
90
+ ];
91
+ function functionNoUnknownRule(packages) {
92
+ return defineRule([true, { ignoreFunctions: getIgnoreFunctions(packages) }]);
93
+ }
94
+ const functionNoUnknown = (packages) => defineRules({ "function-no-unknown": functionNoUnknownRule(packages) });
95
+ //#endregion
96
+ //#region src/rules/import-notation.ts
97
+ const importNotationCSS = (packages) => defineRules(isInRange(packages.tailwind, 4) ? { "import-notation": null } : {});
98
+ //#endregion
99
+ //#region src/rules/order.ts
100
+ const definePrimaryOption = (...options) => options.filter((option) => !!option);
101
+ const blockRuleRegex = /^&::[\w-]+/;
102
+ const orderRule = (packages) => defineRule([definePrimaryOption(
103
+ //! import
104
+ packages.sass && {
105
+ type: "at-rule",
106
+ name: "use"
107
+ },
108
+ packages.sass && {
109
+ type: "at-rule",
110
+ name: "forward"
111
+ },
112
+ packages.sass && {
113
+ type: "at-rule",
114
+ name: "import"
115
+ },
116
+ isInRange(packages.tailwind, 4) && {
117
+ type: "at-rule",
118
+ name: "import"
119
+ },
120
+ isInRange(packages.tailwind, 4) && {
121
+ type: "at-rule",
122
+ name: "source"
123
+ },
124
+ isInRange(packages.tailwind, 4) && {
125
+ type: "at-rule",
126
+ name: "reference"
127
+ },
128
+ //! root
129
+ isInRange(packages.tailwind, 0, 1, 2, 3) && {
130
+ type: "at-rule",
131
+ name: "tailwind"
132
+ },
133
+ isInRange(packages.tailwind, 3, 4) && {
134
+ type: "at-rule",
135
+ name: "config"
136
+ },
137
+ isInRange(packages.tailwind, 4) && {
138
+ type: "at-rule",
139
+ name: "plugin"
140
+ },
141
+ isInRange(packages.tailwind, 1, 2, 3) && {
142
+ type: "at-rule",
143
+ name: "layer"
144
+ },
145
+ //! variables
146
+ "dollar-variables",
147
+ "at-variables",
148
+ {
149
+ type: "at-rule",
150
+ hasBlock: false
151
+ },
152
+ "custom-properties",
153
+ //! tailwind
154
+ isInRange(packages.tailwind, 4) && {
155
+ type: "at-rule",
156
+ name: "theme"
157
+ },
158
+ isInRange(packages.tailwind, 4) && {
159
+ type: "at-rule",
160
+ name: "custom-variant"
161
+ },
162
+ //! functions, methods
163
+ packages.sass && {
164
+ type: "at-rule",
165
+ name: "function"
166
+ },
167
+ packages.sass && {
168
+ type: "at-rule",
169
+ name: "mixin"
170
+ },
171
+ isInRange(packages.tailwind, 4) && {
172
+ type: "at-rule",
173
+ name: "utility"
174
+ },
175
+ //! declarations
176
+ packages.sass && {
177
+ type: "at-rule",
178
+ name: "extend"
179
+ },
180
+ packages.sass && {
181
+ type: "at-rule",
182
+ name: "include"
183
+ },
184
+ isInRange(packages.tailwind, 0, 1, 2, 3, 4) && {
185
+ type: "at-rule",
186
+ name: "apply"
187
+ },
188
+ "less-mixins",
189
+ "declarations",
190
+ //! block rules
191
+ {
192
+ type: "rule",
193
+ selector: blockRuleRegex
194
+ },
195
+ "rules",
196
+ //! blocks nested
197
+ packages.sass && {
198
+ type: "at-rule",
199
+ name: "at-root"
200
+ },
201
+ isInRange(packages.tailwind, 0, 1, 2) && {
202
+ type: "at-rule",
203
+ name: "responsive"
204
+ },
205
+ isInRange(packages.tailwind, 0, 1, 2) && {
206
+ type: "at-rule",
207
+ name: "variants"
208
+ },
209
+ isInRange(packages.tailwind, 0, 1, 2) && {
210
+ type: "at-rule",
211
+ name: "screen"
212
+ },
213
+ isInRange(packages.tailwind, 4) && {
214
+ type: "at-rule",
215
+ name: "variants"
216
+ },
217
+ {
218
+ type: "at-rule",
219
+ hasBlock: true
220
+ }
221
+ ), { unspecified: "bottom" }]);
222
+ const order = (packages) => defineRules({ "order/order": orderRule(packages) });
223
+ const selectorPseudoClassNoUnknown = defineRules({ "selector-pseudo-class-no-unknown": defineRule([true, { ignorePseudoClasses: ["global", "local"] }]) });
224
+ //#endregion
225
+ //#region src/configs/css.ts
226
+ const configCss = (packages) => ({
227
+ extends: ["stylelint-config-standard", "stylelint-config-clean-order"],
228
+ plugins: ["stylelint-order", "stylelint-selector-bem-pattern"],
229
+ rules: {
230
+ ...atRuleNoUnknownCSS(packages),
231
+ ...declarationBlockNoRedundantLonghandProperties,
232
+ ...functionNoUnknown(packages),
233
+ ...importNotationCSS(packages),
234
+ ...order(packages),
235
+ ...selectorPseudoClassNoUnknown,
236
+ "declaration-empty-line-before": null
237
+ }
238
+ });
239
+ const dollarVariablePatternSCSS = defineRules({ "scss/dollar-variable-pattern": defineRule(["^(-{0,2}?[a-z][a-z0-9]*)(-[a-z0-9]+)*$", { message: "Expected variable to be kebab-case" }]) });
240
+ //#endregion
241
+ //#region src/configs/scss.ts
242
+ const configScss = (packages) => ({
243
+ extends: ["stylelint-config-standard-scss"],
244
+ rules: {
245
+ ...atRuleNoUnknownSCSS(packages),
246
+ ...dollarVariablePatternSCSS
247
+ }
248
+ });
249
+ //#endregion
250
+ //#region src/configs/shared.ts
251
+ const configShared = () => ({ extends: ["stylelint-config-html"] });
252
+ //#endregion
253
+ //#region src/configs/vue.ts
254
+ const configVue = (packages) => ({ extends: [packages.sass ? "stylelint-config-standard-vue/scss" : "stylelint-config-standard-vue"] });
255
+ //#endregion
256
+ //#region src/factory.ts
257
+ function defineConfig(packages, config) {
258
+ const packages_ = packages ?? {};
259
+ return mergeConfigs(configShared(), configCss(packages_), packages_.sass && configScss(packages_), packages_.vue && configVue(packages_), config);
260
+ }
261
+ //#endregion
262
+ export { defineConfig as t };
263
+
264
+ //# sourceMappingURL=factory-B33e_UAZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-B33e_UAZ.mjs","names":[],"sources":["../src/utils/utils.ts","../src/rules/at-rule-no-unknown.ts","../src/rules/declaration-block-no-redundant-longhand-properties.ts","../src/rules/function-no-unknown.ts","../src/rules/import-notation.ts","../src/rules/order.ts","../src/rules/selector-pseudo-class-no-unknown.ts","../src/configs/css.ts","../src/rules/dollar-variable-pattern.ts","../src/configs/scss.ts","../src/configs/shared.ts","../src/configs/vue.ts","../src/factory.ts"],"sourcesContent":["import type { Config, ConfigRuleSettings } from 'stylelint';\n\n// import type Primary, Secondary from stylelint\n\ntype StringOrRegex = string | RegExp;\ntype OneOrMany<S> = S | S[];\n\nexport type Primary =\n | number\n | true\n | OneOrMany<StringOrRegex>\n | Record<string, any>;\nexport type Secondary = Record<string, any>;\n\nexport const defineRule = <\n PrimaryOption extends Primary,\n SecondaryOptions extends Secondary = object,\n>(\n rule: ConfigRuleSettings<PrimaryOption, SecondaryOptions>,\n) => rule;\n\nexport const defineRules = <TRules extends Config['rules']>(rule: TRules) =>\n rule;\n\n// clone function mergeConfigs from stylelint repository\nexport const mergeConfigs = (\n ...configsOrNull: (Config | undefined | null | false)[]\n) => {\n const configs = configsOrNull.filter((c): c is Config => !!c);\n\n return {\n plugins: [...new Set(configs.flatMap(c => c.plugins ?? []))],\n overrides: [...new Set(configs.flatMap(c => c.overrides ?? []))],\n extends: configs\n .flatMap(c => c.extends ?? [])\n .filter((item, index, arr) => arr.lastIndexOf(item) === index),\n rules: configs.reduce(\n (acc, config) => ({ ...acc, ...config.rules }),\n {} as Config['rules'],\n ),\n ...configs.reduce(\n (\n acc,\n { plugins: _p, overrides: _o, extends: _e, rules: _r, ...config },\n ) => ({ ...acc, ...config }),\n {} as Config,\n ),\n };\n};\n\nexport const isInRange = (\n version: false | number | undefined,\n ...versions: number[]\n) => typeof version === 'number' && versions.includes(version);\n","import type { Packages } from '@culur/utils-packages';\nimport { defineRule, defineRules } from '~/utils';\n\nconst getIgnoreAtRulesByTailwindVersion = (\n tailwindVersion: false | number | undefined,\n) => {\n switch (tailwindVersion) {\n // https://tailwindcss-v0.netlify.app//docs/functions-and-directives\n case 0:\n return [\n // Directives\n 'tailwind',\n 'apply',\n\n 'variants',\n 'responsive',\n 'screen',\n ];\n\n // https://v1.tailwindcss.com/docs/functions-and-directives\n // https://v2.tailwindcss.com/docs/functions-and-directives\n case 1:\n case 2:\n return [\n // Directives\n 'tailwind',\n 'apply',\n 'layer', // new\n\n 'variants',\n 'responsive',\n 'screen',\n ];\n\n // https://v3.tailwindcss.com/docs/functions-and-directives\n case 3:\n return [\n // Directives\n 'tailwind',\n 'layer',\n 'apply',\n 'config', // new\n ];\n\n // https://tailwindcss.com/docs/functions-and-directives\n case 4:\n return [\n // Directives\n 'import',\n 'theme',\n 'source',\n 'utility',\n 'variant',\n 'custom-variant',\n 'apply',\n 'reference',\n\n // Compatibility\n 'config',\n 'plugin',\n ];\n\n default:\n return [];\n }\n};\n\nexport const atRuleNoUnknownRule = (packages: Partial<Packages>) =>\n defineRule<true, { ignoreAtRules: (string | RegExp)[] }>([\n true,\n { ignoreAtRules: getIgnoreAtRulesByTailwindVersion(packages.tailwind) },\n ]);\n\nexport const atRuleNoUnknownCSS = (packages: Partial<Packages>) =>\n defineRules({\n 'at-rule-no-unknown': atRuleNoUnknownRule(packages),\n });\n\nexport const atRuleNoUnknownSCSS = (packages: Partial<Packages>) =>\n defineRules({\n 'at-rule-no-unknown': null,\n 'scss/at-rule-no-unknown': atRuleNoUnknownRule(packages),\n });\n","import { defineRule, defineRules } from '~/utils';\n\nexport const declarationBlockNoRedundantLonghandPropertiesRule = defineRule<\n true,\n { ignoreShorthands?: (string | RegExp)[] }\n>([true, { ignoreShorthands: ['grid-template'] }]);\n\nexport const declarationBlockNoRedundantLonghandProperties = defineRules({\n 'declaration-block-no-redundant-longhand-properties':\n declarationBlockNoRedundantLonghandPropertiesRule,\n});\n","import type { Packages } from '@culur/utils-packages';\nimport { defineRule, defineRules } from '~/utils';\n\nconst getIgnoreFunctionsByTailwindVersion = (\n tailwindVersion: false | number | undefined,\n) => {\n switch (tailwindVersion) {\n // https://tailwindcss-v0.netlify.app//docs/functions-and-directives\n case 0:\n return ['config'];\n\n // https://v1.tailwindcss.com/docs/functions-and-directives\n case 1:\n return ['theme'];\n\n // https://v2.tailwindcss.com/docs/functions-and-directives\n case 2:\n return ['screen', 'theme'];\n\n // https://v3.tailwindcss.com/docs/functions-and-directives\n case 3:\n return ['theme', 'screen'];\n\n // https://tailwindcss.com/docs/functions-and-directives\n case 4:\n return ['--alpha', '--spacing', 'theme'];\n\n default:\n return [];\n }\n};\n\nconst sassFunctionRegex = /^(list|math|color)\\..+/;\nconst getIgnoreFunctions = (packages: Partial<Packages>) => [\n // https://tailwindcss.com\n ...getIgnoreFunctionsByTailwindVersion(packages.tailwind),\n\n // https://sass-lang.com/documentation/modules/list\n // https://sass-lang.com/documentation/modules/math\n // https://sass-lang.com/documentation/modules/color\n ...(packages.sass //\n ? [sassFunctionRegex]\n : []),\n\n // https://vuejs.org/api/sfc-css-features.html#v-bind-in-css\n ...(packages.vue //\n ? ['v-bind']\n : []),\n];\n\nexport function functionNoUnknownRule(packages: Partial<Packages>) {\n return defineRule<true, { ignoreFunctions: (string | RegExp)[] }>([\n true,\n { ignoreFunctions: getIgnoreFunctions(packages) },\n ]);\n}\n\nexport const functionNoUnknown = (packages: Partial<Packages>) =>\n defineRules({\n 'function-no-unknown': functionNoUnknownRule(packages),\n });\n","import type { Packages } from '@culur/utils-packages';\nimport { defineRules, isInRange } from '~/utils';\n\nexport const importNotationCSS = (packages: Partial<Packages>) =>\n defineRules(\n isInRange(packages.tailwind, 4) //\n ? { 'import-notation': null }\n : {},\n );\n","import type { Packages } from '@culur/utils-packages';\nimport { defineRule, defineRules, isInRange } from '~/utils';\n\n// https://github.com/hudochenkov/stylelint-order/blob/master/rules/order/README.md#options\n\ntype Keyword =\n | 'custom-properties' /**/ // Custom properties (e.g. --property: 10px;)\n | 'dollar-variables' /***/ // Dollar variables (e.g. $variable)\n | 'at-variables' /*******/ // At-variables (e.g. @variable available in Less syntax)\n | 'declarations' /*******/ // CSS declarations (e.g. display: block)\n | 'rules' /**************/ // Nested rules (e.g. a { span {} })\n | 'at-rules' /***********/ // Nested at-rules (e.g. div { @media () {} })\n | 'less-mixins'; /*******/ // Mixins in Less syntax (e.g. .mixin();)\n\ninterface AtRule {\n type: 'at-rule';\n name?: string;\n parameter?: string | RegExp;\n hasBlock?: boolean;\n}\n\ninterface Rule {\n type: 'rule';\n selector?: string | RegExp;\n name?: string;\n}\n\ntype PrimaryOption = Array<Keyword | AtRule | Rule>;\ninterface SecondaryOptions {\n unspecified?: 'top' | 'bottom' | 'ignore';\n}\n\nconst definePrimaryOption = (...options: (PrimaryOption[number] | false | undefined)[]) =>\n options.filter((option): option is PrimaryOption[number] => !!option);\n\nconst blockRuleRegex = /^&::[\\w-]+/;\n\nexport const orderRule = (packages: Partial<Packages>) =>\n defineRule<PrimaryOption, SecondaryOptions>([\n definePrimaryOption(\n //! import\n packages.sass /**********************************/ && { type: 'at-rule', name: 'use' }, // scss: @use 'path/path';\n packages.sass /**********************************/ && { type: 'at-rule', name: 'forward' }, // scss: @forward 'path/path';\n packages.sass /**********************************/ && { type: 'at-rule', name: 'import' }, // scss: @import 'path/path';\n isInRange(packages.tailwind, 4) /****************/ && { type: 'at-rule', name: 'import' }, // tailwind 4: @import \"tailwindcss\";\n isInRange(packages.tailwind, 4) /****************/ && { type: 'at-rule', name: 'source' }, // tailwind 4: @source \"../node_modules/@culur/ui-lib\";\n isInRange(packages.tailwind, 4) /****************/ && { type: 'at-rule', name: 'reference' }, // tailwind 4: @reference \"../../app.css\";\n\n //! root\n isInRange(packages.tailwind, 0, 1, 2, 3) /*******/ && { type: 'at-rule', name: 'tailwind' }, // tailwind 0,1,2,3 : @tailwind base;\n isInRange(packages.tailwind, 3, 4) /*************/ && { type: 'at-rule', name: 'config' }, // tailwind 3,4: @config 'tailwind.custom.config.js'\n isInRange(packages.tailwind, 4) /****************/ && { type: 'at-rule', name: 'plugin' }, // tailwind 4: @plugin '@tailwindcss/typography'\n isInRange(packages.tailwind, 1, 2, 3) /**********/ && { type: 'at-rule', name: 'layer' }, // tailwind 1,2,3 : @layer base {}\n\n //! variables\n 'dollar-variables', // css: $variable: 10px;\n 'at-variables', // css: @variable: 10px;\n { type: 'at-rule', hasBlock: false }, // css: @variable: 10px;\n 'custom-properties', // css: --property: 10px;\n\n //! tailwind\n isInRange(packages.tailwind, 4) /****************/ && { type: 'at-rule', name: 'theme' }, // tailwind 4: @theme {}\n isInRange(packages.tailwind, 4) /****************/ && { type: 'at-rule', name: 'custom-variant' }, // tailwind 4: @custom-variant pointer-coarse (@media (pointer: coarse));\n\n //! functions, methods\n packages.sass /**********************************/ && { type: 'at-rule', name: 'function' }, // scss: @function sum() {}\n packages.sass /**********************************/ && { type: 'at-rule', name: 'mixin' }, // scss: @mixin mixin-name {}\n isInRange(packages.tailwind, 4) /****************/ && { type: 'at-rule', name: 'utility' }, // tailwind 4: @utility tab-4 { tab-size: 4; }\n\n //! declarations\n packages.sass /**********************************/ && { type: 'at-rule', name: 'extend' }, // scss: @extend .class-name;\n packages.sass /**********************************/ && { type: 'at-rule', name: 'include' }, // scss: @include mixin-name;\n isInRange(packages.tailwind, 0, 1, 2, 3, 4) /****/ && { type: 'at-rule', name: 'apply' }, // tailwind 0,1,2,3,4: @apply p-3;\n 'less-mixins', // less: .mixin();\n 'declarations', // css: display: block;\n\n //! block rules\n { type: 'rule', selector: blockRuleRegex }, // css: &::after {}\n 'rules', // css: child-component {}\n\n //! blocks nested\n packages.sass && { type: 'at-rule', name: 'at-root' }, // scss: @at-root selector { /* content */ }\n isInRange(packages.tailwind, 0, 1, 2) /**********/ && { type: 'at-rule', name: 'responsive' }, // tailwind 0,1,2 : @responsive {}\n isInRange(packages.tailwind, 0, 1, 2) /**********/ && { type: 'at-rule', name: 'variants' }, // tailwind 0,1,2 : @variants hover {}\n isInRange(packages.tailwind, 0, 1, 2) /**********/ && { type: 'at-rule', name: 'screen' }, // tailwind 0,1,2 : @screen sm {}\n isInRange(packages.tailwind, 4) /****************/ && { type: 'at-rule', name: 'variants' }, // tailwind 4: @variant dark {}\n { type: 'at-rule', hasBlock: true }, // css: @media () {}\n ),\n {\n unspecified: 'bottom',\n },\n ]);\n\nexport const order = (packages: Partial<Packages>) =>\n defineRules({\n 'order/order': orderRule(packages),\n });\n","import { defineRule, defineRules } from '~/utils';\n\nexport const selectorPseudoClassNoUnknownRule = defineRule<\n true,\n { ignorePseudoClasses?: (string | RegExp)[] }\n>([true, { ignorePseudoClasses: ['global', 'local'] }]);\n\nexport const selectorPseudoClassNoUnknown = defineRules({\n 'selector-pseudo-class-no-unknown': selectorPseudoClassNoUnknownRule,\n});\n","import type { Packages } from '@culur/utils-packages';\nimport type { Config } from 'stylelint';\nimport { atRuleNoUnknownCSS } from '~/rules/at-rule-no-unknown';\nimport { declarationBlockNoRedundantLonghandProperties } from '~/rules/declaration-block-no-redundant-longhand-properties';\nimport { functionNoUnknown } from '~/rules/function-no-unknown';\nimport { importNotationCSS } from '~/rules/import-notation';\nimport { order } from '~/rules/order';\nimport { selectorPseudoClassNoUnknown } from '~/rules/selector-pseudo-class-no-unknown';\n\nexport const configCss = (packages: Partial<Packages>): Config => ({\n extends: ['stylelint-config-standard', 'stylelint-config-clean-order'],\n plugins: ['stylelint-order', 'stylelint-selector-bem-pattern'],\n rules: {\n ...atRuleNoUnknownCSS(packages),\n ...declarationBlockNoRedundantLonghandProperties,\n ...functionNoUnknown(packages),\n ...importNotationCSS(packages),\n ...order(packages),\n ...selectorPseudoClassNoUnknown,\n 'declaration-empty-line-before': null,\n },\n});\n","import { defineRule, defineRules } from '~/utils';\n\ntype PrimaryOption = string;\ninterface SecondaryOptions {\n message: string;\n}\n\nexport const dollarVariablePatternRule = defineRule<\n PrimaryOption,\n SecondaryOptions\n>([\n '^(-{0,2}?[a-z][a-z0-9]*)(-[a-z0-9]+)*$',\n { message: 'Expected variable to be kebab-case' },\n]);\n\nexport const dollarVariablePatternSCSS = defineRules({\n 'scss/dollar-variable-pattern': dollarVariablePatternRule,\n});\n","import type { Packages } from '@culur/utils-packages';\nimport type { Config } from 'stylelint';\nimport { atRuleNoUnknownSCSS } from '~/rules/at-rule-no-unknown';\nimport { dollarVariablePatternSCSS } from '~/rules/dollar-variable-pattern';\n\nexport const configScss = (packages: Partial<Packages>): Config => ({\n extends: ['stylelint-config-standard-scss'],\n rules: {\n ...atRuleNoUnknownSCSS(packages),\n ...dollarVariablePatternSCSS,\n },\n});\n","import type { Config } from 'stylelint';\n\nexport const configShared = (): Config => ({\n extends: ['stylelint-config-html'],\n});\n","import type { Packages } from '@culur/utils-packages';\nimport type { Config } from 'stylelint';\n\nexport const configVue = (packages: Partial<Packages>): Config => ({\n extends: [\n packages.sass\n ? 'stylelint-config-standard-vue/scss'\n : 'stylelint-config-standard-vue',\n ],\n});\n","import type { Packages } from '@culur/utils-packages';\nimport type { Config } from 'stylelint';\nimport { configCss } from './configs/css';\nimport { configScss } from './configs/scss';\nimport { configShared } from './configs/shared';\nimport { configVue } from './configs/vue';\nimport { mergeConfigs } from './utils';\n\nexport default function defineConfig(\n packages?: Partial<Packages>,\n config?: Config,\n): Config {\n const packages_ = packages ?? {};\n\n return mergeConfigs(\n configShared(),\n configCss(packages_),\n packages_.sass && configScss(packages_),\n packages_.vue && configVue(packages_),\n config,\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,269 @@
1
+ //#region src/utils/utils.ts
2
+ const defineRule = (rule) => rule;
3
+ const defineRules = (rule) => rule;
4
+ const mergeConfigs = (...configsOrNull) => {
5
+ const configs = configsOrNull.filter((c) => !!c);
6
+ return {
7
+ plugins: [...new Set(configs.flatMap((c) => c.plugins ?? []))],
8
+ overrides: [...new Set(configs.flatMap((c) => c.overrides ?? []))],
9
+ extends: configs.flatMap((c) => c.extends ?? []).filter((item, index, arr) => arr.lastIndexOf(item) === index),
10
+ rules: configs.reduce((acc, config) => ({
11
+ ...acc,
12
+ ...config.rules
13
+ }), {}),
14
+ ...configs.reduce((acc, { plugins: _p, overrides: _o, extends: _e, rules: _r, ...config }) => ({
15
+ ...acc,
16
+ ...config
17
+ }), {})
18
+ };
19
+ };
20
+ const isInRange = (version, ...versions) => typeof version === "number" && versions.includes(version);
21
+ //#endregion
22
+ //#region src/rules/at-rule-no-unknown.ts
23
+ const getIgnoreAtRulesByTailwindVersion = (tailwindVersion) => {
24
+ switch (tailwindVersion) {
25
+ case 0: return [
26
+ "tailwind",
27
+ "apply",
28
+ "variants",
29
+ "responsive",
30
+ "screen"
31
+ ];
32
+ case 1:
33
+ case 2: return [
34
+ "tailwind",
35
+ "apply",
36
+ "layer",
37
+ "variants",
38
+ "responsive",
39
+ "screen"
40
+ ];
41
+ case 3: return [
42
+ "tailwind",
43
+ "layer",
44
+ "apply",
45
+ "config"
46
+ ];
47
+ case 4: return [
48
+ "import",
49
+ "theme",
50
+ "source",
51
+ "utility",
52
+ "variant",
53
+ "custom-variant",
54
+ "apply",
55
+ "reference",
56
+ "config",
57
+ "plugin"
58
+ ];
59
+ default: return [];
60
+ }
61
+ };
62
+ const atRuleNoUnknownRule = (packages) => defineRule([true, { ignoreAtRules: getIgnoreAtRulesByTailwindVersion(packages.tailwind) }]);
63
+ const atRuleNoUnknownCSS = (packages) => defineRules({ "at-rule-no-unknown": atRuleNoUnknownRule(packages) });
64
+ const atRuleNoUnknownSCSS = (packages) => defineRules({
65
+ "at-rule-no-unknown": null,
66
+ "scss/at-rule-no-unknown": atRuleNoUnknownRule(packages)
67
+ });
68
+ const declarationBlockNoRedundantLonghandProperties = defineRules({ "declaration-block-no-redundant-longhand-properties": defineRule([true, { ignoreShorthands: ["grid-template"] }]) });
69
+ //#endregion
70
+ //#region src/rules/function-no-unknown.ts
71
+ const getIgnoreFunctionsByTailwindVersion = (tailwindVersion) => {
72
+ switch (tailwindVersion) {
73
+ case 0: return ["config"];
74
+ case 1: return ["theme"];
75
+ case 2: return ["screen", "theme"];
76
+ case 3: return ["theme", "screen"];
77
+ case 4: return [
78
+ "--alpha",
79
+ "--spacing",
80
+ "theme"
81
+ ];
82
+ default: return [];
83
+ }
84
+ };
85
+ const sassFunctionRegex = /^(list|math|color)\..+/;
86
+ const getIgnoreFunctions = (packages) => [
87
+ ...getIgnoreFunctionsByTailwindVersion(packages.tailwind),
88
+ ...packages.sass ? [sassFunctionRegex] : [],
89
+ ...packages.vue ? ["v-bind"] : []
90
+ ];
91
+ function functionNoUnknownRule(packages) {
92
+ return defineRule([true, { ignoreFunctions: getIgnoreFunctions(packages) }]);
93
+ }
94
+ const functionNoUnknown = (packages) => defineRules({ "function-no-unknown": functionNoUnknownRule(packages) });
95
+ //#endregion
96
+ //#region src/rules/import-notation.ts
97
+ const importNotationCSS = (packages) => defineRules(isInRange(packages.tailwind, 4) ? { "import-notation": null } : {});
98
+ //#endregion
99
+ //#region src/rules/order.ts
100
+ const definePrimaryOption = (...options) => options.filter((option) => !!option);
101
+ const blockRuleRegex = /^&::[\w-]+/;
102
+ const orderRule = (packages) => defineRule([definePrimaryOption(
103
+ //! import
104
+ packages.sass && {
105
+ type: "at-rule",
106
+ name: "use"
107
+ },
108
+ packages.sass && {
109
+ type: "at-rule",
110
+ name: "forward"
111
+ },
112
+ packages.sass && {
113
+ type: "at-rule",
114
+ name: "import"
115
+ },
116
+ isInRange(packages.tailwind, 4) && {
117
+ type: "at-rule",
118
+ name: "import"
119
+ },
120
+ isInRange(packages.tailwind, 4) && {
121
+ type: "at-rule",
122
+ name: "source"
123
+ },
124
+ isInRange(packages.tailwind, 4) && {
125
+ type: "at-rule",
126
+ name: "reference"
127
+ },
128
+ //! root
129
+ isInRange(packages.tailwind, 0, 1, 2, 3) && {
130
+ type: "at-rule",
131
+ name: "tailwind"
132
+ },
133
+ isInRange(packages.tailwind, 3, 4) && {
134
+ type: "at-rule",
135
+ name: "config"
136
+ },
137
+ isInRange(packages.tailwind, 4) && {
138
+ type: "at-rule",
139
+ name: "plugin"
140
+ },
141
+ isInRange(packages.tailwind, 1, 2, 3) && {
142
+ type: "at-rule",
143
+ name: "layer"
144
+ },
145
+ //! variables
146
+ "dollar-variables",
147
+ "at-variables",
148
+ {
149
+ type: "at-rule",
150
+ hasBlock: false
151
+ },
152
+ "custom-properties",
153
+ //! tailwind
154
+ isInRange(packages.tailwind, 4) && {
155
+ type: "at-rule",
156
+ name: "theme"
157
+ },
158
+ isInRange(packages.tailwind, 4) && {
159
+ type: "at-rule",
160
+ name: "custom-variant"
161
+ },
162
+ //! functions, methods
163
+ packages.sass && {
164
+ type: "at-rule",
165
+ name: "function"
166
+ },
167
+ packages.sass && {
168
+ type: "at-rule",
169
+ name: "mixin"
170
+ },
171
+ isInRange(packages.tailwind, 4) && {
172
+ type: "at-rule",
173
+ name: "utility"
174
+ },
175
+ //! declarations
176
+ packages.sass && {
177
+ type: "at-rule",
178
+ name: "extend"
179
+ },
180
+ packages.sass && {
181
+ type: "at-rule",
182
+ name: "include"
183
+ },
184
+ isInRange(packages.tailwind, 0, 1, 2, 3, 4) && {
185
+ type: "at-rule",
186
+ name: "apply"
187
+ },
188
+ "less-mixins",
189
+ "declarations",
190
+ //! block rules
191
+ {
192
+ type: "rule",
193
+ selector: blockRuleRegex
194
+ },
195
+ "rules",
196
+ //! blocks nested
197
+ packages.sass && {
198
+ type: "at-rule",
199
+ name: "at-root"
200
+ },
201
+ isInRange(packages.tailwind, 0, 1, 2) && {
202
+ type: "at-rule",
203
+ name: "responsive"
204
+ },
205
+ isInRange(packages.tailwind, 0, 1, 2) && {
206
+ type: "at-rule",
207
+ name: "variants"
208
+ },
209
+ isInRange(packages.tailwind, 0, 1, 2) && {
210
+ type: "at-rule",
211
+ name: "screen"
212
+ },
213
+ isInRange(packages.tailwind, 4) && {
214
+ type: "at-rule",
215
+ name: "variants"
216
+ },
217
+ {
218
+ type: "at-rule",
219
+ hasBlock: true
220
+ }
221
+ ), { unspecified: "bottom" }]);
222
+ const order = (packages) => defineRules({ "order/order": orderRule(packages) });
223
+ const selectorPseudoClassNoUnknown = defineRules({ "selector-pseudo-class-no-unknown": defineRule([true, { ignorePseudoClasses: ["global", "local"] }]) });
224
+ //#endregion
225
+ //#region src/configs/css.ts
226
+ const configCss = (packages) => ({
227
+ extends: ["stylelint-config-standard", "stylelint-config-clean-order"],
228
+ plugins: ["stylelint-order", "stylelint-selector-bem-pattern"],
229
+ rules: {
230
+ ...atRuleNoUnknownCSS(packages),
231
+ ...declarationBlockNoRedundantLonghandProperties,
232
+ ...functionNoUnknown(packages),
233
+ ...importNotationCSS(packages),
234
+ ...order(packages),
235
+ ...selectorPseudoClassNoUnknown,
236
+ "declaration-empty-line-before": null
237
+ }
238
+ });
239
+ const dollarVariablePatternSCSS = defineRules({ "scss/dollar-variable-pattern": defineRule(["^(-{0,2}?[a-z][a-z0-9]*)(-[a-z0-9]+)*$", { message: "Expected variable to be kebab-case" }]) });
240
+ //#endregion
241
+ //#region src/configs/scss.ts
242
+ const configScss = (packages) => ({
243
+ extends: ["stylelint-config-standard-scss"],
244
+ rules: {
245
+ ...atRuleNoUnknownSCSS(packages),
246
+ ...dollarVariablePatternSCSS
247
+ }
248
+ });
249
+ //#endregion
250
+ //#region src/configs/shared.ts
251
+ const configShared = () => ({ extends: ["stylelint-config-html"] });
252
+ //#endregion
253
+ //#region src/configs/vue.ts
254
+ const configVue = (packages) => ({ extends: [packages.sass ? "stylelint-config-standard-vue/scss" : "stylelint-config-standard-vue"] });
255
+ //#endregion
256
+ //#region src/factory.ts
257
+ function defineConfig(packages, config) {
258
+ const packages_ = packages ?? {};
259
+ return mergeConfigs(configShared(), configCss(packages_), packages_.sass && configScss(packages_), packages_.vue && configVue(packages_), config);
260
+ }
261
+ //#endregion
262
+ Object.defineProperty(exports, "defineConfig", {
263
+ enumerable: true,
264
+ get: function() {
265
+ return defineConfig;
266
+ }
267
+ });
268
+
269
+ //# sourceMappingURL=factory-BNS_YTTh.cjs.map