tailwindcss 0.0.0-insiders.ff2c25f → 0.0.0-internal.b2586d4e

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 (248) hide show
  1. package/README.md +5 -6
  2. package/dist/lib.d.mts +339 -0
  3. package/dist/lib.d.ts +339 -0
  4. package/dist/lib.js +17 -0
  5. package/dist/lib.mjs +17 -0
  6. package/index.css +5 -0
  7. package/package.json +36 -107
  8. package/preflight.css +334 -0
  9. package/theme.css +463 -0
  10. package/base.css +0 -1
  11. package/colors.d.ts +0 -3
  12. package/colors.js +0 -2
  13. package/components.css +0 -1
  14. package/defaultConfig.d.ts +0 -3
  15. package/defaultConfig.js +0 -2
  16. package/defaultTheme.d.ts +0 -4
  17. package/defaultTheme.js +0 -2
  18. package/lib/cli/build/deps.js +0 -54
  19. package/lib/cli/build/index.js +0 -48
  20. package/lib/cli/build/plugin.js +0 -367
  21. package/lib/cli/build/utils.js +0 -78
  22. package/lib/cli/build/watching.js +0 -178
  23. package/lib/cli/help/index.js +0 -71
  24. package/lib/cli/index.js +0 -239
  25. package/lib/cli/init/index.js +0 -46
  26. package/lib/cli-peer-dependencies.js +0 -28
  27. package/lib/cli.js +0 -7
  28. package/lib/constants.js +0 -44
  29. package/lib/corePluginList.js +0 -181
  30. package/lib/corePlugins.js +0 -4062
  31. package/lib/css/LICENSE +0 -25
  32. package/lib/css/preflight.css +0 -367
  33. package/lib/featureFlags.js +0 -71
  34. package/lib/index.js +0 -6
  35. package/lib/lib/cacheInvalidation.js +0 -90
  36. package/lib/lib/collapseAdjacentRules.js +0 -59
  37. package/lib/lib/collapseDuplicateDeclarations.js +0 -83
  38. package/lib/lib/content.js +0 -177
  39. package/lib/lib/defaultExtractor.js +0 -241
  40. package/lib/lib/detectNesting.js +0 -43
  41. package/lib/lib/evaluateTailwindFunctions.js +0 -234
  42. package/lib/lib/expandApplyAtRules.js +0 -526
  43. package/lib/lib/expandTailwindAtRules.js +0 -273
  44. package/lib/lib/findAtConfigPath.js +0 -44
  45. package/lib/lib/generateRules.js +0 -866
  46. package/lib/lib/getModuleDependencies.js +0 -51
  47. package/lib/lib/normalizeTailwindDirectives.js +0 -87
  48. package/lib/lib/offsets.js +0 -299
  49. package/lib/lib/partitionApplyAtRules.js +0 -56
  50. package/lib/lib/regex.js +0 -60
  51. package/lib/lib/remap-bitfield.js +0 -87
  52. package/lib/lib/resolveDefaultsAtRules.js +0 -161
  53. package/lib/lib/setupContextUtils.js +0 -1218
  54. package/lib/lib/setupTrackingContext.js +0 -163
  55. package/lib/lib/sharedState.js +0 -78
  56. package/lib/lib/substituteScreenAtRules.js +0 -29
  57. package/lib/oxide/cli/build/deps.js +0 -81
  58. package/lib/oxide/cli/build/index.js +0 -47
  59. package/lib/oxide/cli/build/plugin.js +0 -364
  60. package/lib/oxide/cli/build/utils.js +0 -77
  61. package/lib/oxide/cli/build/watching.js +0 -177
  62. package/lib/oxide/cli/help/index.js +0 -70
  63. package/lib/oxide/cli/index.js +0 -220
  64. package/lib/oxide/cli/init/index.js +0 -35
  65. package/lib/oxide/cli.js +0 -5
  66. package/lib/oxide/postcss-plugin.js +0 -2
  67. package/lib/plugin.js +0 -48
  68. package/lib/postcss-plugins/nesting/README.md +0 -42
  69. package/lib/postcss-plugins/nesting/index.js +0 -19
  70. package/lib/postcss-plugins/nesting/plugin.js +0 -87
  71. package/lib/processTailwindFeatures.js +0 -62
  72. package/lib/public/colors.js +0 -331
  73. package/lib/public/create-plugin.js +0 -15
  74. package/lib/public/default-config.js +0 -16
  75. package/lib/public/default-theme.js +0 -16
  76. package/lib/public/resolve-config.js +0 -22
  77. package/lib/util/bigSign.js +0 -11
  78. package/lib/util/buildMediaQuery.js +0 -25
  79. package/lib/util/cloneDeep.js +0 -20
  80. package/lib/util/cloneNodes.js +0 -32
  81. package/lib/util/color.js +0 -98
  82. package/lib/util/configurePlugins.js +0 -21
  83. package/lib/util/createPlugin.js +0 -30
  84. package/lib/util/createUtilityPlugin.js +0 -51
  85. package/lib/util/dataTypes.js +0 -266
  86. package/lib/util/defaults.js +0 -25
  87. package/lib/util/escapeClassName.js +0 -22
  88. package/lib/util/escapeCommas.js +0 -11
  89. package/lib/util/flattenColorPalette.js +0 -16
  90. package/lib/util/formatVariantSelector.js +0 -351
  91. package/lib/util/getAllConfigs.js +0 -48
  92. package/lib/util/hashConfig.js +0 -19
  93. package/lib/util/isKeyframeRule.js +0 -11
  94. package/lib/util/isPlainObject.js +0 -15
  95. package/lib/util/isSyntacticallyValidPropertyValue.js +0 -72
  96. package/lib/util/log.js +0 -57
  97. package/lib/util/nameClass.js +0 -43
  98. package/lib/util/negateValue.js +0 -34
  99. package/lib/util/normalizeConfig.js +0 -281
  100. package/lib/util/normalizeScreens.js +0 -170
  101. package/lib/util/parseAnimationValue.js +0 -91
  102. package/lib/util/parseBoxShadowValue.js +0 -84
  103. package/lib/util/parseDependency.js +0 -45
  104. package/lib/util/parseGlob.js +0 -34
  105. package/lib/util/parseObjectStyles.js +0 -34
  106. package/lib/util/pluginUtils.js +0 -283
  107. package/lib/util/prefixSelector.js +0 -37
  108. package/lib/util/removeAlphaVariables.js +0 -29
  109. package/lib/util/resolveConfig.js +0 -254
  110. package/lib/util/resolveConfigPath.js +0 -54
  111. package/lib/util/responsive.js +0 -22
  112. package/lib/util/splitAtTopLevelOnly.js +0 -43
  113. package/lib/util/tap.js +0 -12
  114. package/lib/util/toColorValue.js +0 -11
  115. package/lib/util/toPath.js +0 -30
  116. package/lib/util/transformThemeValue.js +0 -71
  117. package/lib/util/validateConfig.js +0 -24
  118. package/lib/util/validateFormalSyntax.js +0 -24
  119. package/lib/util/withAlphaVariable.js +0 -75
  120. package/nesting/index.js +0 -2
  121. package/oxide-node-api-shim/index.js +0 -21
  122. package/oxide-node-api-shim/package.json +0 -5
  123. package/peers/index.js +0 -79461
  124. package/plugin.d.ts +0 -11
  125. package/plugin.js +0 -2
  126. package/prettier.config.js +0 -19
  127. package/resolveConfig.d.ts +0 -12
  128. package/resolveConfig.js +0 -2
  129. package/screens.css +0 -1
  130. package/scripts/create-plugin-list.js +0 -10
  131. package/scripts/generate-types.js +0 -105
  132. package/scripts/release-channel.js +0 -18
  133. package/scripts/release-notes.js +0 -21
  134. package/scripts/swap-engines.js +0 -40
  135. package/scripts/type-utils.js +0 -27
  136. package/src/cli/build/deps.js +0 -56
  137. package/src/cli/build/index.js +0 -49
  138. package/src/cli/build/plugin.js +0 -439
  139. package/src/cli/build/utils.js +0 -76
  140. package/src/cli/build/watching.js +0 -227
  141. package/src/cli/help/index.js +0 -70
  142. package/src/cli/index.js +0 -234
  143. package/src/cli/init/index.js +0 -50
  144. package/src/cli-peer-dependencies.js +0 -15
  145. package/src/cli.js +0 -7
  146. package/src/constants.js +0 -17
  147. package/src/corePluginList.js +0 -1
  148. package/src/corePlugins.js +0 -2744
  149. package/src/css/LICENSE +0 -25
  150. package/src/css/preflight.css +0 -367
  151. package/src/featureFlags.js +0 -64
  152. package/src/index.js +0 -5
  153. package/src/lib/cacheInvalidation.js +0 -52
  154. package/src/lib/collapseAdjacentRules.js +0 -58
  155. package/src/lib/collapseDuplicateDeclarations.js +0 -93
  156. package/src/lib/content.js +0 -208
  157. package/src/lib/defaultExtractor.js +0 -217
  158. package/src/lib/detectNesting.js +0 -47
  159. package/src/lib/evaluateTailwindFunctions.js +0 -269
  160. package/src/lib/expandApplyAtRules.js +0 -606
  161. package/src/lib/expandTailwindAtRules.js +0 -285
  162. package/src/lib/findAtConfigPath.js +0 -48
  163. package/src/lib/generateRules.js +0 -899
  164. package/src/lib/getModuleDependencies.js +0 -39
  165. package/src/lib/normalizeTailwindDirectives.js +0 -84
  166. package/src/lib/offsets.js +0 -367
  167. package/src/lib/partitionApplyAtRules.js +0 -52
  168. package/src/lib/regex.js +0 -74
  169. package/src/lib/remap-bitfield.js +0 -82
  170. package/src/lib/resolveDefaultsAtRules.js +0 -163
  171. package/src/lib/setupContextUtils.js +0 -1308
  172. package/src/lib/setupTrackingContext.js +0 -171
  173. package/src/lib/sharedState.js +0 -67
  174. package/src/lib/substituteScreenAtRules.js +0 -19
  175. package/src/oxide/cli/build/deps.ts +0 -91
  176. package/src/oxide/cli/build/index.ts +0 -47
  177. package/src/oxide/cli/build/plugin.ts +0 -436
  178. package/src/oxide/cli/build/utils.ts +0 -74
  179. package/src/oxide/cli/build/watching.ts +0 -225
  180. package/src/oxide/cli/help/index.ts +0 -69
  181. package/src/oxide/cli/index.ts +0 -212
  182. package/src/oxide/cli/init/index.ts +0 -32
  183. package/src/oxide/cli.ts +0 -1
  184. package/src/oxide/postcss-plugin.ts +0 -1
  185. package/src/plugin.js +0 -47
  186. package/src/postcss-plugins/nesting/README.md +0 -42
  187. package/src/postcss-plugins/nesting/index.js +0 -13
  188. package/src/postcss-plugins/nesting/plugin.js +0 -80
  189. package/src/processTailwindFeatures.js +0 -58
  190. package/src/public/colors.js +0 -300
  191. package/src/public/create-plugin.js +0 -2
  192. package/src/public/default-config.js +0 -4
  193. package/src/public/default-theme.js +0 -4
  194. package/src/public/resolve-config.js +0 -7
  195. package/src/util/bigSign.js +0 -3
  196. package/src/util/buildMediaQuery.js +0 -22
  197. package/src/util/cloneDeep.js +0 -11
  198. package/src/util/cloneNodes.js +0 -28
  199. package/src/util/color.js +0 -73
  200. package/src/util/configurePlugins.js +0 -23
  201. package/src/util/createPlugin.js +0 -27
  202. package/src/util/createUtilityPlugin.js +0 -37
  203. package/src/util/dataTypes.js +0 -281
  204. package/src/util/defaults.js +0 -17
  205. package/src/util/escapeClassName.js +0 -8
  206. package/src/util/escapeCommas.js +0 -3
  207. package/src/util/flattenColorPalette.js +0 -13
  208. package/src/util/formatVariantSelector.js +0 -412
  209. package/src/util/getAllConfigs.js +0 -38
  210. package/src/util/hashConfig.js +0 -5
  211. package/src/util/isKeyframeRule.js +0 -3
  212. package/src/util/isPlainObject.js +0 -8
  213. package/src/util/isSyntacticallyValidPropertyValue.js +0 -61
  214. package/src/util/log.js +0 -29
  215. package/src/util/nameClass.js +0 -30
  216. package/src/util/negateValue.js +0 -24
  217. package/src/util/normalizeConfig.js +0 -300
  218. package/src/util/normalizeScreens.js +0 -140
  219. package/src/util/parseAnimationValue.js +0 -68
  220. package/src/util/parseBoxShadowValue.js +0 -72
  221. package/src/util/parseDependency.js +0 -44
  222. package/src/util/parseGlob.js +0 -24
  223. package/src/util/parseObjectStyles.js +0 -19
  224. package/src/util/pluginUtils.js +0 -314
  225. package/src/util/prefixSelector.js +0 -32
  226. package/src/util/removeAlphaVariables.js +0 -24
  227. package/src/util/resolveConfig.js +0 -277
  228. package/src/util/resolveConfigPath.js +0 -55
  229. package/src/util/responsive.js +0 -10
  230. package/src/util/splitAtTopLevelOnly.js +0 -45
  231. package/src/util/tap.js +0 -4
  232. package/src/util/toColorValue.js +0 -3
  233. package/src/util/toPath.js +0 -26
  234. package/src/util/transformThemeValue.js +0 -62
  235. package/src/util/validateConfig.js +0 -13
  236. package/src/util/validateFormalSyntax.js +0 -34
  237. package/src/util/withAlphaVariable.js +0 -49
  238. package/stubs/defaultConfig.stub.js +0 -956
  239. package/stubs/defaultPostCssConfig.stub.js +0 -6
  240. package/stubs/simpleConfig.stub.js +0 -8
  241. package/tailwind.css +0 -5
  242. package/types/config.d.ts +0 -367
  243. package/types/generated/.gitkeep +0 -0
  244. package/types/generated/colors.d.ts +0 -276
  245. package/types/generated/corePluginList.d.ts +0 -1
  246. package/types/generated/default-theme.d.ts +0 -345
  247. package/types/index.d.ts +0 -7
  248. package/variants.css +0 -1
@@ -1,285 +0,0 @@
1
- import fs from 'fs'
2
- import LRU from 'quick-lru'
3
- import * as sharedState from './sharedState'
4
- import { generateRules } from './generateRules'
5
- import log from '../util/log'
6
- import cloneNodes from '../util/cloneNodes'
7
- import { defaultExtractor } from './defaultExtractor'
8
-
9
- import oxide from '@tailwindcss/oxide'
10
-
11
- let env = sharedState.env
12
-
13
- const builtInExtractors = {
14
- DEFAULT: defaultExtractor,
15
- }
16
-
17
- const builtInTransformers = {
18
- DEFAULT: (content) => content,
19
- svelte: (content) => content.replace(/(?:^|\s)class:/g, ' '),
20
- }
21
-
22
- function getExtractor(context, fileExtension) {
23
- let extractors = context.tailwindConfig.content.extract
24
-
25
- return (
26
- extractors[fileExtension] ||
27
- extractors.DEFAULT ||
28
- builtInExtractors[fileExtension] ||
29
- builtInExtractors.DEFAULT(context)
30
- )
31
- }
32
-
33
- function getTransformer(tailwindConfig, fileExtension) {
34
- let transformers = tailwindConfig.content.transform
35
-
36
- return (
37
- transformers[fileExtension] ||
38
- transformers.DEFAULT ||
39
- builtInTransformers[fileExtension] ||
40
- builtInTransformers.DEFAULT
41
- )
42
- }
43
-
44
- let extractorCache = new WeakMap()
45
-
46
- // Scans template contents for possible classes. This is a hot path on initial build but
47
- // not too important for subsequent builds. The faster the better though — if we can speed
48
- // up these regexes by 50% that could cut initial build time by like 20%.
49
- function getClassCandidates(content, extractor, candidates, seen) {
50
- if (!extractorCache.has(extractor)) {
51
- extractorCache.set(extractor, new LRU({ maxSize: 25000 }))
52
- }
53
-
54
- for (let line of content.split('\n')) {
55
- line = line.trim()
56
-
57
- if (seen.has(line)) {
58
- continue
59
- }
60
- seen.add(line)
61
-
62
- if (extractorCache.get(extractor).has(line)) {
63
- for (let match of extractorCache.get(extractor).get(line)) {
64
- candidates.add(match)
65
- }
66
- } else {
67
- let extractorMatches = extractor(line).filter((s) => s !== '!*')
68
- let lineMatchesSet = new Set(extractorMatches)
69
-
70
- for (let match of lineMatchesSet) {
71
- candidates.add(match)
72
- }
73
-
74
- extractorCache.get(extractor).set(line, lineMatchesSet)
75
- }
76
- }
77
- }
78
-
79
- /**
80
- *
81
- * @param {[import('./offsets.js').RuleOffset, import('postcss').Node][]} rules
82
- * @param {*} context
83
- */
84
- function buildStylesheet(rules, context) {
85
- let sortedRules = context.offsets.sort(rules)
86
-
87
- let returnValue = {
88
- base: new Set(),
89
- defaults: new Set(),
90
- components: new Set(),
91
- utilities: new Set(),
92
- variants: new Set(),
93
- }
94
-
95
- for (let [sort, rule] of sortedRules) {
96
- returnValue[sort.layer].add(rule)
97
- }
98
-
99
- return returnValue
100
- }
101
-
102
- export default function expandTailwindAtRules(context) {
103
- return (root) => {
104
- let layerNodes = {
105
- base: null,
106
- components: null,
107
- utilities: null,
108
- variants: null,
109
- }
110
-
111
- root.walkAtRules((rule) => {
112
- // Make sure this file contains Tailwind directives. If not, we can save
113
- // a lot of work and bail early. Also we don't have to register our touch
114
- // file as a dependency since the output of this CSS does not depend on
115
- // the source of any templates. Think Vue <style> blocks for example.
116
- if (rule.name === 'tailwind') {
117
- if (Object.keys(layerNodes).includes(rule.params)) {
118
- layerNodes[rule.params] = rule
119
- }
120
- }
121
- })
122
-
123
- if (Object.values(layerNodes).every((n) => n === null)) {
124
- return root
125
- }
126
-
127
- // ---
128
-
129
- // Find potential rules in changed files
130
- let candidates = new Set([...(context.candidates ?? []), sharedState.NOT_ON_DEMAND])
131
- let seen = new Set()
132
-
133
- env.DEBUG && console.time('Reading changed files')
134
-
135
- if (env.OXIDE) {
136
- // TODO: Pass through or implement `extractor`
137
- for (let candidate of oxide.parseCandidateStringsFromFiles(
138
- context.changedContent
139
- // Object.assign({}, builtInTransformers, context.tailwindConfig.content.transform)
140
- )) {
141
- candidates.add(candidate)
142
- }
143
-
144
- // for (let { file, content, extension } of context.changedContent) {
145
- // let transformer = getTransformer(context.tailwindConfig, extension)
146
- // let extractor = getExtractor(context, extension)
147
- // getClassCandidatesOxide(file, transformer(content), extractor, candidates, seen)
148
- // }
149
- } else {
150
- for (let { file, content, extension } of context.changedContent) {
151
- let transformer = getTransformer(context.tailwindConfig, extension)
152
- let extractor = getExtractor(context, extension)
153
- content = file ? fs.readFileSync(file, 'utf8') : content
154
- getClassCandidates(transformer(content), extractor, candidates, seen)
155
- }
156
- }
157
-
158
- env.DEBUG && console.timeEnd('Reading changed files')
159
-
160
- // ---
161
-
162
- // Generate the actual CSS
163
- let classCacheCount = context.classCache.size
164
-
165
- env.DEBUG && console.time('Generate rules')
166
- env.DEBUG && console.time('Sorting candidates')
167
- let sortedCandidates = env.OXIDE
168
- ? candidates
169
- : new Set(
170
- [...candidates].sort((a, z) => {
171
- if (a === z) return 0
172
- if (a < z) return -1
173
- return 1
174
- })
175
- )
176
- env.DEBUG && console.timeEnd('Sorting candidates')
177
- generateRules(sortedCandidates, context)
178
- env.DEBUG && console.timeEnd('Generate rules')
179
-
180
- // We only ever add to the classCache, so if it didn't grow, there is nothing new.
181
- env.DEBUG && console.time('Build stylesheet')
182
- if (context.stylesheetCache === null || context.classCache.size !== classCacheCount) {
183
- context.stylesheetCache = buildStylesheet([...context.ruleCache], context)
184
- }
185
- env.DEBUG && console.timeEnd('Build stylesheet')
186
-
187
- let {
188
- defaults: defaultNodes,
189
- base: baseNodes,
190
- components: componentNodes,
191
- utilities: utilityNodes,
192
- variants: screenNodes,
193
- } = context.stylesheetCache
194
-
195
- // ---
196
-
197
- // Replace any Tailwind directives with generated CSS
198
-
199
- if (layerNodes.base) {
200
- layerNodes.base.before(
201
- cloneNodes([...baseNodes, ...defaultNodes], layerNodes.base.source, {
202
- layer: 'base',
203
- })
204
- )
205
- layerNodes.base.remove()
206
- }
207
-
208
- if (layerNodes.components) {
209
- layerNodes.components.before(
210
- cloneNodes([...componentNodes], layerNodes.components.source, {
211
- layer: 'components',
212
- })
213
- )
214
- layerNodes.components.remove()
215
- }
216
-
217
- if (layerNodes.utilities) {
218
- layerNodes.utilities.before(
219
- cloneNodes([...utilityNodes], layerNodes.utilities.source, {
220
- layer: 'utilities',
221
- })
222
- )
223
- layerNodes.utilities.remove()
224
- }
225
-
226
- // We do post-filtering to not alter the emitted order of the variants
227
- const variantNodes = Array.from(screenNodes).filter((node) => {
228
- const parentLayer = node.raws.tailwind?.parentLayer
229
-
230
- if (parentLayer === 'components') {
231
- return layerNodes.components !== null
232
- }
233
-
234
- if (parentLayer === 'utilities') {
235
- return layerNodes.utilities !== null
236
- }
237
-
238
- return true
239
- })
240
-
241
- if (layerNodes.variants) {
242
- layerNodes.variants.before(
243
- cloneNodes(variantNodes, layerNodes.variants.source, {
244
- layer: 'variants',
245
- })
246
- )
247
- layerNodes.variants.remove()
248
- } else if (variantNodes.length > 0) {
249
- root.append(
250
- cloneNodes(variantNodes, root.source, {
251
- layer: 'variants',
252
- })
253
- )
254
- }
255
-
256
- // If we've got a utility layer and no utilities are generated there's likely something wrong
257
- const hasUtilityVariants = variantNodes.some(
258
- (node) => node.raws.tailwind?.parentLayer === 'utilities'
259
- )
260
-
261
- if (layerNodes.utilities && utilityNodes.size === 0 && !hasUtilityVariants) {
262
- log.warn('content-problems', [
263
- 'No utility classes were detected in your source files. If this is unexpected, double-check the `content` option in your Tailwind CSS configuration.',
264
- 'https://tailwindcss.com/docs/content-configuration',
265
- ])
266
- }
267
-
268
- // ---
269
-
270
- if (env.DEBUG) {
271
- console.log('Potential classes: ', candidates.size)
272
- console.log('Active contexts: ', sharedState.contextSourcesMap.size)
273
- }
274
-
275
- // Clear the cache for the changed files
276
- context.changedContent = []
277
-
278
- // Cleanup any leftover @layer atrules
279
- root.walkAtRules('layer', (rule) => {
280
- if (Object.keys(layerNodes).includes(rule.params)) {
281
- rule.remove()
282
- }
283
- })
284
- }
285
- }
@@ -1,48 +0,0 @@
1
- import fs from 'fs'
2
- import path from 'path'
3
-
4
- /**
5
- * Find the @config at-rule in the given CSS AST and return the relative path to the config file
6
- *
7
- * @param {import('postcss').Root} root
8
- * @param {import('postcss').Result} result
9
- */
10
- export function findAtConfigPath(root, result) {
11
- let configPath = null
12
- let relativeTo = null
13
-
14
- root.walkAtRules('config', (rule) => {
15
- relativeTo = rule.source?.input.file ?? result.opts.from ?? null
16
-
17
- if (relativeTo === null) {
18
- throw rule.error(
19
- 'The `@config` directive cannot be used without setting `from` in your PostCSS config.'
20
- )
21
- }
22
-
23
- if (configPath) {
24
- throw rule.error('Only one `@config` directive is allowed per file.')
25
- }
26
-
27
- let matches = rule.params.match(/(['"])(.*?)\1/)
28
- if (!matches) {
29
- throw rule.error('A path is required when using the `@config` directive.')
30
- }
31
-
32
- let inputPath = matches[2]
33
- if (path.isAbsolute(inputPath)) {
34
- throw rule.error('The `@config` directive cannot be used with an absolute path.')
35
- }
36
-
37
- configPath = path.resolve(path.dirname(relativeTo), inputPath)
38
- if (!fs.existsSync(configPath)) {
39
- throw rule.error(
40
- `The config file at "${inputPath}" does not exist. Make sure the path is correct and the file exists.`
41
- )
42
- }
43
-
44
- rule.remove()
45
- })
46
-
47
- return configPath ? configPath : null
48
- }