@blumintinc/eslint-plugin-blumint 1.20.133 → 1.20.134
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/lib/index.js
CHANGED
|
@@ -41,6 +41,23 @@ const DEFAULT_OPTIONS = {
|
|
|
41
41
|
'@vitest-environment',
|
|
42
42
|
],
|
|
43
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* What the consumer's options are deep-merged over, with every null-valued
|
|
46
|
+
* default removed.
|
|
47
|
+
*
|
|
48
|
+
* `applyDefault` merges before `create` runs, and its `deepMerge` classifies
|
|
49
|
+
* `null` as an object (`typeof null === 'object'`), so a key that is null on
|
|
50
|
+
* both sides is recursed into and reaches `Object.keys(null)`. That throws
|
|
51
|
+
* while LOADING the rule, which aborts the lint for the whole file and takes
|
|
52
|
+
* every other rule with it. `headerTemplate` is exactly that shape: `null` is
|
|
53
|
+
* both its schema-legal value and its documented default, so a consumer who
|
|
54
|
+
* writes the documented default out explicitly crashes their own run.
|
|
55
|
+
*
|
|
56
|
+
* Omitting the key leaves the merge nothing to recurse into. Nothing is lost —
|
|
57
|
+
* `normalizeOptions` reads the default straight from `DEFAULT_OPTIONS`, so an
|
|
58
|
+
* absent key and a null one already resolve identically.
|
|
59
|
+
*/
|
|
60
|
+
const MERGEABLE_DEFAULT_OPTIONS = Object.fromEntries(Object.entries(DEFAULT_OPTIONS).filter(([, value]) => value !== null));
|
|
44
61
|
/**
|
|
45
62
|
* Maximum number of characters to scan at the beginning of a file to detect generated markers.
|
|
46
63
|
*/
|
|
@@ -381,7 +398,7 @@ exports.enforceUniqueCursorHeaders = (0, createRule_1.createRule)({
|
|
|
381
398
|
splitHeaderFragment: 'Cursor header metadata is split across adjacent comment blocks → Fragmented headers are easy to miss and let required tags drift out of sync → Merge the fragments into a single top-of-file header containing: {{tags}}.',
|
|
382
399
|
},
|
|
383
400
|
},
|
|
384
|
-
defaultOptions: [
|
|
401
|
+
defaultOptions: [MERGEABLE_DEFAULT_OPTIONS],
|
|
385
402
|
create(context, [userOptions]) {
|
|
386
403
|
const options = normalizeOptions(userOptions);
|
|
387
404
|
const fileName = context.getFilename();
|
package/package.json
CHANGED
package/release-manifest.json
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "1.20.134",
|
|
4
|
+
"date": "2026-08-07T15:09:56.261Z",
|
|
5
|
+
"rules": [
|
|
6
|
+
{
|
|
7
|
+
"name": "enforce-unique-cursor-headers",
|
|
8
|
+
"changeType": "fix",
|
|
9
|
+
"issues": [
|
|
10
|
+
1853
|
|
11
|
+
],
|
|
12
|
+
"summary": "keep null defaults out of the options deep-merge (closes #1853)"
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
},
|
|
2
16
|
{
|
|
3
17
|
"version": "1.20.133",
|
|
4
18
|
"date": "2026-08-07T14:16:50.604Z",
|