@brandlab-digital/eslint-plugin 0.1.0-alpha.9 → 1.0.0-rc.10
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 +40 -0
- package/dist/index.d.ts +21 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +569 -57
- package/dist/index.js.map +1 -1
- package/package.json +6 -1
package/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# `@brandlab-digital/eslint-plugin`
|
|
2
|
+
|
|
3
|
+
Fast, syntax-level safeguards for Brandlab Next.js consumers. The plugin gives immediate editor and CI feedback for violations that can be established from a single source file.
|
|
4
|
+
|
|
5
|
+
It deliberately does not implement release support, migration policy, project health, rendered-output validation or portfolio scoring. Those decisions belong to `@brandlab-digital/conformance`.
|
|
6
|
+
|
|
7
|
+
## Recommended flat config
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
import brandlab from '@brandlab-digital/eslint-plugin'
|
|
11
|
+
|
|
12
|
+
export default [brandlab.configs.recommended]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The recommended config enables every published rule as an error.
|
|
16
|
+
|
|
17
|
+
## Stable rule IDs
|
|
18
|
+
|
|
19
|
+
| Rule | Purpose | Preferred implementation |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| `brandlab/no-legacy-analytics-events` | Rejects retired event names such as `contact_form_submission`. | Use the canonical `phone_call` and `contact_form` contracts. |
|
|
22
|
+
| `brandlab/no-raw-json-ld` | Rejects raw JSON-LD `<script>` and `createElement` output in consumers. | Render typed graphs through `@brandlab-digital/site-next/schema`. |
|
|
23
|
+
| `brandlab/no-allow-indexing-true` | Rejects the ambiguous `ALLOW_INDEXING=true` override. | Use the supported explicit value `ALLOW_INDEXING=1`. |
|
|
24
|
+
| `brandlab/no-unsafe-rich-text-sinks` | Rejects statically visible unsanitized rich-text sinks. | Use a tested sanitizer-backed renderer. |
|
|
25
|
+
| `brandlab/no-protected-platform-reimplementation` | Rejects local declarations and direct calls that bypass protected contact, SEO or analytics surfaces. | Import the shared `site-core` or `site-next` API. |
|
|
26
|
+
| `brandlab/no-analytics-pii` | Rejects statically provable lead PII, message and attachment data in known analytics sinks. | Send only shared allowlisted event parameters. |
|
|
27
|
+
| `brandlab/no-unsafe-external-links` | Rejects script-bearing link schemes and external new-context links with opener access when the URL is static. | Use safe schemes and `rel="noopener"`; keep runtime URL validation at the trust boundary. |
|
|
28
|
+
| `brandlab/no-raw-image-elements` | Rejects raw website `<img>` and `createElement('img')` output. | Use `next/image`; email renderer files remain exempt. |
|
|
29
|
+
|
|
30
|
+
`RULE_IDS` is exported for tools that need the canonical IDs without duplicating strings.
|
|
31
|
+
|
|
32
|
+
## Deliberate boundaries
|
|
33
|
+
|
|
34
|
+
- The protected-surface rule checks declarations with reserved platform API names and direct transport or analytics calls. It does not compare implementation behaviour or package versions.
|
|
35
|
+
- The analytics rule inspects known event sinks and source-visible payloads. It does not guess the contents of opaque dynamic objects; runtime allowlisting and conformance remain mandatory.
|
|
36
|
+
- The link rule acts only on statically resolvable URLs. Dynamic destinations require runtime validation and behavioural verification.
|
|
37
|
+
- The image rule applies to website UI. Raw image markup remains available to non-Next renderers when the file is clearly located or named as an email renderer.
|
|
38
|
+
- Shared implementations in `site-core`, `site-next` and installed `@brandlab-digital` packages are not treated as consumer reimplementations.
|
|
39
|
+
|
|
40
|
+
These constraints keep linting deterministic and editor-fast while the conformance engine owns deeper AST, behavioural and rendered-output evidence.
|
package/dist/index.d.ts
CHANGED
|
@@ -2,12 +2,15 @@ type ReportDescriptor = {
|
|
|
2
2
|
node: unknown;
|
|
3
3
|
messageId?: string;
|
|
4
4
|
message?: string;
|
|
5
|
+
data?: Record<string, string>;
|
|
5
6
|
};
|
|
6
7
|
type RuleContext = {
|
|
8
|
+
filename?: string;
|
|
7
9
|
getFilename?: () => string;
|
|
8
10
|
getSourceCode?: () => {
|
|
9
11
|
getText?: (node: unknown) => string;
|
|
10
12
|
};
|
|
13
|
+
physicalFilename?: string;
|
|
11
14
|
report: (descriptor: ReportDescriptor) => void;
|
|
12
15
|
sourceCode?: {
|
|
13
16
|
getText?: (node: unknown) => string;
|
|
@@ -26,11 +29,25 @@ type RuleModule = {
|
|
|
26
29
|
};
|
|
27
30
|
create: (context: RuleContext) => Visitor;
|
|
28
31
|
};
|
|
32
|
+
export declare const RULE_IDS: Readonly<{
|
|
33
|
+
readonly noLegacyAnalyticsEvents: "no-legacy-analytics-events";
|
|
34
|
+
readonly noRawJsonLd: "no-raw-json-ld";
|
|
35
|
+
readonly noAllowIndexingTrue: "no-allow-indexing-true";
|
|
36
|
+
readonly noUnsafeRichTextSinks: "no-unsafe-rich-text-sinks";
|
|
37
|
+
readonly noProtectedPlatformReimplementation: "no-protected-platform-reimplementation";
|
|
38
|
+
readonly noAnalyticsPii: "no-analytics-pii";
|
|
39
|
+
readonly noUnsafeExternalLinks: "no-unsafe-external-links";
|
|
40
|
+
readonly noRawImageElements: "no-raw-image-elements";
|
|
41
|
+
}>;
|
|
29
42
|
export declare const rules: {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
43
|
+
"no-legacy-analytics-events": RuleModule;
|
|
44
|
+
"no-raw-json-ld": RuleModule;
|
|
45
|
+
"no-allow-indexing-true": RuleModule;
|
|
46
|
+
"no-unsafe-rich-text-sinks": RuleModule;
|
|
47
|
+
"no-protected-platform-reimplementation": RuleModule;
|
|
48
|
+
"no-analytics-pii": RuleModule;
|
|
49
|
+
"no-unsafe-external-links": RuleModule;
|
|
50
|
+
"no-raw-image-elements": RuleModule;
|
|
34
51
|
};
|
|
35
52
|
type BrandlabPlugin = {
|
|
36
53
|
rules: typeof rules;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM;QACpB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAA;KACpC,CAAA;IACD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC9C,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAA;KACpC,CAAA;CACF,CAAA;AAWD,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,CAAA;AAEtD,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS,CAAA;QACf,IAAI,EAAE;YACJ,WAAW,EAAE,MAAM,CAAA;YACnB,WAAW,EAAE,OAAO,CAAA;SACrB,CAAA;QACD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,MAAM,EAAE,EAAE,CAAA;KACX,CAAA;IACD,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAA;CAC1C,CAAA;AAED,eAAO,MAAM,QAAQ;;;;;;;;;EASV,CAAA;AAoqBX,eAAO,MAAM,KAAK;;;;;;;;;CAcoB,CAAA;AAEtC,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,OAAO,EAAE;QACP,WAAW,EAAE;YACX,OAAO,EAAE;gBACP,QAAQ,EAAE,OAAO,CAAA;aAClB,CAAA;YACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAC/B,CAAA;KACF,CAAA;CACF,CAAA;AAMD,QAAA,MAAM,MAAM,EAAE,cAUb,CAAA;AAID,eAAe,MAAM,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,20 +1,64 @@
|
|
|
1
|
-
function
|
|
2
|
-
|
|
1
|
+
function getContextFilename(context) {
|
|
2
|
+
return (context.filename ??
|
|
3
|
+
context.physicalFilename ??
|
|
4
|
+
context.getFilename?.() ??
|
|
5
|
+
'').replaceAll('\\', '/');
|
|
6
|
+
}
|
|
7
|
+
export const RULE_IDS = Object.freeze({
|
|
8
|
+
noLegacyAnalyticsEvents: 'no-legacy-analytics-events',
|
|
9
|
+
noRawJsonLd: 'no-raw-json-ld',
|
|
10
|
+
noAllowIndexingTrue: 'no-allow-indexing-true',
|
|
11
|
+
noUnsafeRichTextSinks: 'no-unsafe-rich-text-sinks',
|
|
12
|
+
noProtectedPlatformReimplementation: 'no-protected-platform-reimplementation',
|
|
13
|
+
noAnalyticsPii: 'no-analytics-pii',
|
|
14
|
+
noUnsafeExternalLinks: 'no-unsafe-external-links',
|
|
15
|
+
noRawImageElements: 'no-raw-image-elements',
|
|
16
|
+
});
|
|
17
|
+
function asNode(value) {
|
|
18
|
+
return value && typeof value === 'object' ? value : null;
|
|
19
|
+
}
|
|
20
|
+
function getStaticString(value) {
|
|
21
|
+
const node = asNode(value);
|
|
22
|
+
if (!node)
|
|
3
23
|
return null;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
24
|
+
if (node.type === 'Literal' && typeof node.value === 'string')
|
|
25
|
+
return node.value;
|
|
26
|
+
if (node.type === 'Identifier' || node.type === 'JSXIdentifier') {
|
|
27
|
+
return typeof node.name === 'string' ? node.name : null;
|
|
7
28
|
}
|
|
8
|
-
if (
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const raw = value.raw;
|
|
12
|
-
return typeof raw === 'string' ? raw : null;
|
|
13
|
-
}
|
|
29
|
+
if (node.type === 'TemplateElement') {
|
|
30
|
+
const templateValue = asNode(node.value);
|
|
31
|
+
return typeof templateValue?.raw === 'string' ? templateValue.raw : null;
|
|
14
32
|
}
|
|
33
|
+
if (node.type === 'TemplateLiteral') {
|
|
34
|
+
const expressions = Array.isArray(node.expressions) ? node.expressions : [];
|
|
35
|
+
const quasis = Array.isArray(node.quasis) ? node.quasis : [];
|
|
36
|
+
if (expressions.length > 0)
|
|
37
|
+
return null;
|
|
38
|
+
return quasis.map(getStaticString).join('');
|
|
39
|
+
}
|
|
40
|
+
if (node.type === 'JSXExpressionContainer')
|
|
41
|
+
return getStaticString(node.expression);
|
|
42
|
+
if (node.type === 'JSXAttribute')
|
|
43
|
+
return getStaticString(node.value);
|
|
44
|
+
if (node.type === 'ChainExpression')
|
|
45
|
+
return getStaticString(node.expression);
|
|
15
46
|
return null;
|
|
16
47
|
}
|
|
17
|
-
function
|
|
48
|
+
function getIdentifierName(value) {
|
|
49
|
+
const node = asNode(value);
|
|
50
|
+
if (!node)
|
|
51
|
+
return null;
|
|
52
|
+
if (node.type === 'Identifier' || node.type === 'JSXIdentifier') {
|
|
53
|
+
return typeof node.name === 'string' ? node.name : null;
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
function getSourceText(context, node) {
|
|
58
|
+
const sourceCode = context.sourceCode ?? context.getSourceCode?.();
|
|
59
|
+
return sourceCode?.getText?.(node) ?? '';
|
|
60
|
+
}
|
|
61
|
+
function defineRule(options) {
|
|
18
62
|
return {
|
|
19
63
|
meta: {
|
|
20
64
|
type: 'problem',
|
|
@@ -22,14 +66,19 @@ function createTextRule(options) {
|
|
|
22
66
|
description: options.description,
|
|
23
67
|
recommended: true,
|
|
24
68
|
},
|
|
25
|
-
messages:
|
|
26
|
-
[options.messageId]: options.message,
|
|
27
|
-
},
|
|
69
|
+
messages: options.messages,
|
|
28
70
|
schema: [],
|
|
29
71
|
},
|
|
72
|
+
create: options.create,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function createTextRule(options) {
|
|
76
|
+
return defineRule({
|
|
77
|
+
description: options.description,
|
|
78
|
+
messages: { [options.messageId]: options.message },
|
|
30
79
|
create(context) {
|
|
31
80
|
function inspect(node) {
|
|
32
|
-
const text =
|
|
81
|
+
const text = getStaticString(node);
|
|
33
82
|
if (text && options.matcher(text, context)) {
|
|
34
83
|
context.report({ node, messageId: options.messageId });
|
|
35
84
|
}
|
|
@@ -39,31 +88,20 @@ function createTextRule(options) {
|
|
|
39
88
|
TemplateElement: inspect,
|
|
40
89
|
};
|
|
41
90
|
},
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
function getSourceText(context, node) {
|
|
45
|
-
const sourceCode = context.sourceCode ?? context.getSourceCode?.();
|
|
46
|
-
return sourceCode?.getText?.(node) ?? '';
|
|
91
|
+
});
|
|
47
92
|
}
|
|
48
93
|
function containsAllowIndexingTrue(text) {
|
|
49
94
|
return (text.includes('ALLOW_INDEXING=true') ||
|
|
50
95
|
/ALLOW_INDEXING[\s\S]{0,80}['"]true['"]/.test(text));
|
|
51
96
|
}
|
|
52
|
-
const noAllowIndexingTrueRule = {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
description: 'Disallow ALLOW_INDEXING=true; only ALLOW_INDEXING=1 is supported.',
|
|
57
|
-
recommended: true,
|
|
58
|
-
},
|
|
59
|
-
messages: {
|
|
60
|
-
allowIndexingTrue: 'Use ALLOW_INDEXING=1 as the only explicit indexing override.',
|
|
61
|
-
},
|
|
62
|
-
schema: [],
|
|
97
|
+
const noAllowIndexingTrueRule = defineRule({
|
|
98
|
+
description: 'Disallow ALLOW_INDEXING=true; only ALLOW_INDEXING=1 is supported.',
|
|
99
|
+
messages: {
|
|
100
|
+
allowIndexingTrue: 'Use ALLOW_INDEXING=1 as the only explicit indexing override.',
|
|
63
101
|
},
|
|
64
102
|
create(context) {
|
|
65
103
|
function inspectStringNode(node) {
|
|
66
|
-
const text =
|
|
104
|
+
const text = getStaticString(node);
|
|
67
105
|
if (text && containsAllowIndexingTrue(text)) {
|
|
68
106
|
context.report({ node, messageId: 'allowIndexingTrue' });
|
|
69
107
|
}
|
|
@@ -81,37 +119,516 @@ const noAllowIndexingTrueRule = {
|
|
|
81
119
|
TemplateElement: inspectStringNode,
|
|
82
120
|
};
|
|
83
121
|
},
|
|
84
|
-
};
|
|
122
|
+
});
|
|
85
123
|
const legacyAnalyticsEvents = new Set([
|
|
86
124
|
'contact_form_submission',
|
|
87
125
|
'phone_calls',
|
|
88
126
|
'form_start',
|
|
89
127
|
'cta_click',
|
|
90
128
|
]);
|
|
129
|
+
const protectedPlatformNames = new Set([
|
|
130
|
+
'BrandlabBreadcrumbs',
|
|
131
|
+
'ContactFormEmail',
|
|
132
|
+
'SchemaScript',
|
|
133
|
+
'addContactSubmissionContext',
|
|
134
|
+
'buildBrandlabMetadata',
|
|
135
|
+
'buildLocalBusinessSchema',
|
|
136
|
+
'buildNextMetadata',
|
|
137
|
+
'buildRobotsMetadata',
|
|
138
|
+
'buildSchemaGraph',
|
|
139
|
+
'buildSitemapEntries',
|
|
140
|
+
'createBrandlabBlogAdapter',
|
|
141
|
+
'createContactSubmissionHandler',
|
|
142
|
+
'createNextMetadataBuilder',
|
|
143
|
+
'defineAnalyticsContract',
|
|
144
|
+
'defineBrandlabBusiness',
|
|
145
|
+
'defineBrandlabContact',
|
|
146
|
+
'defineBrandlabProject',
|
|
147
|
+
'defineBreadcrumbTrail',
|
|
148
|
+
'defineContactContract',
|
|
149
|
+
'defineRouteCatalog',
|
|
150
|
+
'installPhoneClickListener',
|
|
151
|
+
'renderContactEmail',
|
|
152
|
+
'sitemapIndexXmlResponse',
|
|
153
|
+
'sitemapXmlResponse',
|
|
154
|
+
'trackBrandlabBrowserEvent',
|
|
155
|
+
]);
|
|
156
|
+
const protectedDirectCalls = new Set([
|
|
157
|
+
'dataLayer.push',
|
|
158
|
+
'globalThis.dataLayer.push',
|
|
159
|
+
'globalThis.gtag',
|
|
160
|
+
'gtag',
|
|
161
|
+
'window.dataLayer.push',
|
|
162
|
+
'window.gtag',
|
|
163
|
+
]);
|
|
164
|
+
function isSharedPlatformImplementation(context) {
|
|
165
|
+
const filename = getContextFilename(context);
|
|
166
|
+
return (filename.includes('/node_modules/@brandlab-digital/') ||
|
|
167
|
+
/(?:^|\/)standards\/source\/packages\/(?:site-core|site-next)\//.test(filename));
|
|
168
|
+
}
|
|
169
|
+
function getMemberPath(value) {
|
|
170
|
+
const node = asNode(value);
|
|
171
|
+
if (!node)
|
|
172
|
+
return null;
|
|
173
|
+
if (node.type === 'ChainExpression')
|
|
174
|
+
return getMemberPath(node.expression);
|
|
175
|
+
if (node.type === 'Identifier')
|
|
176
|
+
return getIdentifierName(node);
|
|
177
|
+
if (node.type === 'ThisExpression')
|
|
178
|
+
return 'this';
|
|
179
|
+
if (node.type !== 'MemberExpression')
|
|
180
|
+
return null;
|
|
181
|
+
const objectPath = getMemberPath(node.object);
|
|
182
|
+
const propertyName = node.computed
|
|
183
|
+
? getStaticString(node.property)
|
|
184
|
+
: getIdentifierName(node.property);
|
|
185
|
+
return objectPath && propertyName ? `${objectPath}.${propertyName}` : null;
|
|
186
|
+
}
|
|
187
|
+
function getDeclarationName(value) {
|
|
188
|
+
const node = asNode(value);
|
|
189
|
+
if (!node)
|
|
190
|
+
return null;
|
|
191
|
+
return getIdentifierName(node.id);
|
|
192
|
+
}
|
|
193
|
+
const noProtectedPlatformReimplementationRule = defineRule({
|
|
194
|
+
description: 'Disallow local reimplementation of protected Brandlab runtime surfaces.',
|
|
195
|
+
messages: {
|
|
196
|
+
protectedDeclaration: '{{name}} is a protected Brandlab platform surface. Import the shared implementation instead of declaring it locally.',
|
|
197
|
+
protectedCall: '{{name}} bypasses protected Brandlab delivery or analytics behaviour. Use the shared platform adapter.',
|
|
198
|
+
},
|
|
199
|
+
create(context) {
|
|
200
|
+
if (isSharedPlatformImplementation(context))
|
|
201
|
+
return {};
|
|
202
|
+
function inspectDeclaration(node) {
|
|
203
|
+
const name = getDeclarationName(node);
|
|
204
|
+
if (name && protectedPlatformNames.has(name)) {
|
|
205
|
+
context.report({
|
|
206
|
+
node,
|
|
207
|
+
messageId: 'protectedDeclaration',
|
|
208
|
+
data: { name },
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function inspectCall(nodeValue) {
|
|
213
|
+
const node = asNode(nodeValue);
|
|
214
|
+
const callPath = getMemberPath(node?.callee);
|
|
215
|
+
if (!callPath)
|
|
216
|
+
return;
|
|
217
|
+
if (protectedDirectCalls.has(callPath) || callPath.endsWith('.emails.send')) {
|
|
218
|
+
context.report({
|
|
219
|
+
node: nodeValue,
|
|
220
|
+
messageId: 'protectedCall',
|
|
221
|
+
data: { name: callPath },
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function inspectConstruction(nodeValue) {
|
|
226
|
+
const node = asNode(nodeValue);
|
|
227
|
+
const constructorName = getMemberPath(node?.callee);
|
|
228
|
+
if (constructorName === 'Resend') {
|
|
229
|
+
context.report({
|
|
230
|
+
node: nodeValue,
|
|
231
|
+
messageId: 'protectedCall',
|
|
232
|
+
data: { name: constructorName },
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
CallExpression: inspectCall,
|
|
238
|
+
ClassDeclaration: inspectDeclaration,
|
|
239
|
+
FunctionDeclaration: inspectDeclaration,
|
|
240
|
+
NewExpression: inspectConstruction,
|
|
241
|
+
VariableDeclarator: inspectDeclaration,
|
|
242
|
+
};
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
function getJsxElementName(value) {
|
|
246
|
+
const node = asNode(value);
|
|
247
|
+
if (!node)
|
|
248
|
+
return null;
|
|
249
|
+
const direct = getIdentifierName(node);
|
|
250
|
+
if (direct)
|
|
251
|
+
return direct;
|
|
252
|
+
if (node.type !== 'JSXMemberExpression')
|
|
253
|
+
return null;
|
|
254
|
+
const objectName = getJsxElementName(node.object);
|
|
255
|
+
const propertyName = getJsxElementName(node.property);
|
|
256
|
+
return objectName && propertyName ? `${objectName}.${propertyName}` : null;
|
|
257
|
+
}
|
|
258
|
+
function getJsxAttribute(openingElement, name) {
|
|
259
|
+
const attributes = Array.isArray(openingElement.attributes) ? openingElement.attributes : [];
|
|
260
|
+
return (attributes
|
|
261
|
+
.map(asNode)
|
|
262
|
+
.find((attribute) => attribute?.type === 'JSXAttribute' &&
|
|
263
|
+
getIdentifierName(attribute.name)?.toLowerCase() === name.toLowerCase()) ?? null);
|
|
264
|
+
}
|
|
265
|
+
function getObjectProperty(value, key) {
|
|
266
|
+
const node = asNode(value);
|
|
267
|
+
if (node?.type !== 'ObjectExpression')
|
|
268
|
+
return null;
|
|
269
|
+
const properties = Array.isArray(node.properties) ? node.properties : [];
|
|
270
|
+
return (properties
|
|
271
|
+
.map(asNode)
|
|
272
|
+
.find((property) => property?.type === 'Property' &&
|
|
273
|
+
getPropertyName(property)?.toLowerCase() === key.toLowerCase()) ?? null);
|
|
274
|
+
}
|
|
275
|
+
function getPropertyName(property) {
|
|
276
|
+
return property.computed
|
|
277
|
+
? getStaticString(property.key)
|
|
278
|
+
: getIdentifierName(property.key) ?? getStaticString(property.key);
|
|
279
|
+
}
|
|
280
|
+
function isRawJsonLdCreateElement(value) {
|
|
281
|
+
const node = asNode(value);
|
|
282
|
+
if (node?.type !== 'CallExpression')
|
|
283
|
+
return false;
|
|
284
|
+
const callee = getMemberPath(node.callee);
|
|
285
|
+
if (callee !== 'createElement' && callee !== 'React.createElement')
|
|
286
|
+
return false;
|
|
287
|
+
const args = Array.isArray(node.arguments) ? node.arguments : [];
|
|
288
|
+
if (getStaticString(args[0])?.toLowerCase() !== 'script')
|
|
289
|
+
return false;
|
|
290
|
+
const typeProperty = getObjectProperty(args[1], 'type');
|
|
291
|
+
return getStaticString(typeProperty?.value)?.toLowerCase() === 'application/ld+json';
|
|
292
|
+
}
|
|
293
|
+
const noRawJsonLdRule = defineRule({
|
|
294
|
+
description: 'Disallow raw JSON-LD scripts outside the shared Brandlab schema adapter.',
|
|
295
|
+
messages: {
|
|
296
|
+
rawJsonLd: 'Render JSON-LD through @brandlab-digital/site-next/schema.',
|
|
297
|
+
},
|
|
298
|
+
create(context) {
|
|
299
|
+
if (isSharedPlatformImplementation(context))
|
|
300
|
+
return {};
|
|
301
|
+
function inspectOpeningElement(nodeValue) {
|
|
302
|
+
const node = asNode(nodeValue);
|
|
303
|
+
if (!node || getJsxElementName(node.name)?.toLowerCase() !== 'script')
|
|
304
|
+
return;
|
|
305
|
+
const typeAttribute = getJsxAttribute(node, 'type');
|
|
306
|
+
if (getStaticString(typeAttribute)?.toLowerCase() === 'application/ld+json') {
|
|
307
|
+
context.report({ node: nodeValue, messageId: 'rawJsonLd' });
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
function inspectCall(node) {
|
|
311
|
+
if (isRawJsonLdCreateElement(node)) {
|
|
312
|
+
context.report({ node, messageId: 'rawJsonLd' });
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
function inspectLiteral(nodeValue) {
|
|
316
|
+
const node = asNode(nodeValue);
|
|
317
|
+
if (getStaticString(node)?.toLowerCase() !== 'application/ld+json')
|
|
318
|
+
return;
|
|
319
|
+
const parentType = asNode(node?.parent)?.type;
|
|
320
|
+
if (parentType !== 'JSXAttribute' && parentType !== 'Property') {
|
|
321
|
+
context.report({ node: nodeValue, messageId: 'rawJsonLd' });
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return {
|
|
325
|
+
CallExpression: inspectCall,
|
|
326
|
+
JSXOpeningElement: inspectOpeningElement,
|
|
327
|
+
Literal: inspectLiteral,
|
|
328
|
+
TemplateElement: inspectLiteral,
|
|
329
|
+
};
|
|
330
|
+
},
|
|
331
|
+
});
|
|
332
|
+
const strictPiiTokens = new Set([
|
|
333
|
+
'attachment',
|
|
334
|
+
'attachment_name',
|
|
335
|
+
'contact_email',
|
|
336
|
+
'contact_name',
|
|
337
|
+
'customer_name',
|
|
338
|
+
'email',
|
|
339
|
+
'email_address',
|
|
340
|
+
'enquiry_message',
|
|
341
|
+
'file_name',
|
|
342
|
+
'filename',
|
|
343
|
+
'first_name',
|
|
344
|
+
'form_message',
|
|
345
|
+
'full_name',
|
|
346
|
+
'last_name',
|
|
347
|
+
'message',
|
|
348
|
+
'mobile',
|
|
349
|
+
'mobile_number',
|
|
350
|
+
'phone',
|
|
351
|
+
'phone_number',
|
|
352
|
+
'residential_address',
|
|
353
|
+
'street_address',
|
|
354
|
+
'user_email',
|
|
355
|
+
'user_phone',
|
|
356
|
+
]);
|
|
357
|
+
const contactOnlyPiiTokens = new Set(['address', 'name']);
|
|
358
|
+
function normalizeToken(value) {
|
|
359
|
+
return value
|
|
360
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1_$2')
|
|
361
|
+
.toLowerCase()
|
|
362
|
+
.replace(/[^a-z0-9]+/g, '_')
|
|
363
|
+
.replace(/^_+|_+$/g, '');
|
|
364
|
+
}
|
|
365
|
+
function isPiiToken(value, includeContactOnly) {
|
|
366
|
+
if (!value)
|
|
367
|
+
return false;
|
|
368
|
+
const normalized = normalizeToken(value);
|
|
369
|
+
return (strictPiiTokens.has(normalized) ||
|
|
370
|
+
(includeContactOnly && contactOnlyPiiTokens.has(normalized)));
|
|
371
|
+
}
|
|
372
|
+
function isAnalyticsSink(value) {
|
|
373
|
+
const path = getMemberPath(value);
|
|
374
|
+
return (path === 'gtag' ||
|
|
375
|
+
path === 'window.gtag' ||
|
|
376
|
+
path === 'globalThis.gtag' ||
|
|
377
|
+
path === 'dataLayer.push' ||
|
|
378
|
+
path === 'window.dataLayer.push' ||
|
|
379
|
+
path === 'globalThis.dataLayer.push' ||
|
|
380
|
+
path === 'sendGAEvent' ||
|
|
381
|
+
path === 'sendGTMEvent' ||
|
|
382
|
+
path === 'trackBrandlabBrowserEvent' ||
|
|
383
|
+
path === 'trackBrandlabEvent' ||
|
|
384
|
+
path === 'ReactGA.event');
|
|
385
|
+
}
|
|
386
|
+
function isContactAnalyticsCall(node) {
|
|
387
|
+
const args = Array.isArray(node.arguments) ? node.arguments : [];
|
|
388
|
+
return args.some((argument) => {
|
|
389
|
+
const value = getStaticString(argument);
|
|
390
|
+
return value === 'contact_form' || value === 'phone_call';
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
function looksLikeLiteralPii(value) {
|
|
394
|
+
const normalized = value.trim();
|
|
395
|
+
if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalized))
|
|
396
|
+
return true;
|
|
397
|
+
const digits = normalized.replace(/[^0-9]/g, '');
|
|
398
|
+
return /^\+?[0-9 ()-]+$/.test(normalized) && digits.length >= 10 && digits.length <= 15;
|
|
399
|
+
}
|
|
400
|
+
function containsPiiReference(value, includeContactOnly) {
|
|
401
|
+
const node = asNode(value);
|
|
402
|
+
if (!node)
|
|
403
|
+
return false;
|
|
404
|
+
if (node.type === 'Identifier') {
|
|
405
|
+
return isPiiToken(getIdentifierName(node), includeContactOnly);
|
|
406
|
+
}
|
|
407
|
+
if (node.type === 'MemberExpression') {
|
|
408
|
+
const path = getMemberPath(node);
|
|
409
|
+
const finalSegment = path?.split('.').at(-1) ?? null;
|
|
410
|
+
return isPiiToken(finalSegment, includeContactOnly);
|
|
411
|
+
}
|
|
412
|
+
if (node.type === 'Literal') {
|
|
413
|
+
return typeof node.value === 'string' && looksLikeLiteralPii(node.value);
|
|
414
|
+
}
|
|
415
|
+
if (node.type === 'TemplateLiteral') {
|
|
416
|
+
const expressions = Array.isArray(node.expressions) ? node.expressions : [];
|
|
417
|
+
return (expressions.some((expression) => containsPiiReference(expression, includeContactOnly)) ||
|
|
418
|
+
(getStaticString(node) ? looksLikeLiteralPii(getStaticString(node) ?? '') : false));
|
|
419
|
+
}
|
|
420
|
+
if (node.type === 'CallExpression') {
|
|
421
|
+
const args = Array.isArray(node.arguments) ? node.arguments : [];
|
|
422
|
+
return args.some((argument) => containsPiiReference(argument, includeContactOnly));
|
|
423
|
+
}
|
|
424
|
+
if (node.type === 'ConditionalExpression') {
|
|
425
|
+
return (containsPiiReference(node.consequent, includeContactOnly) ||
|
|
426
|
+
containsPiiReference(node.alternate, includeContactOnly));
|
|
427
|
+
}
|
|
428
|
+
if (node.type === 'LogicalExpression' || node.type === 'BinaryExpression') {
|
|
429
|
+
return (containsPiiReference(node.left, includeContactOnly) ||
|
|
430
|
+
containsPiiReference(node.right, includeContactOnly));
|
|
431
|
+
}
|
|
432
|
+
return false;
|
|
433
|
+
}
|
|
434
|
+
function collectPiiNodes(value, includeContactOnly) {
|
|
435
|
+
const node = asNode(value);
|
|
436
|
+
if (!node)
|
|
437
|
+
return [];
|
|
438
|
+
if (node.type === 'ObjectExpression') {
|
|
439
|
+
const properties = Array.isArray(node.properties) ? node.properties : [];
|
|
440
|
+
return properties.flatMap((property) => collectPiiNodes(property, includeContactOnly));
|
|
441
|
+
}
|
|
442
|
+
if (node.type === 'Property') {
|
|
443
|
+
const key = getPropertyName(node);
|
|
444
|
+
if (isPiiToken(key, includeContactOnly) ||
|
|
445
|
+
containsPiiReference(node.value, includeContactOnly)) {
|
|
446
|
+
return [node];
|
|
447
|
+
}
|
|
448
|
+
return collectPiiNodes(node.value, includeContactOnly);
|
|
449
|
+
}
|
|
450
|
+
if (node.type === 'SpreadElement' || node.type === 'ExperimentalSpreadProperty') {
|
|
451
|
+
return containsPiiReference(node.argument, includeContactOnly) ? [node] : [];
|
|
452
|
+
}
|
|
453
|
+
if (node.type === 'ArrayExpression') {
|
|
454
|
+
const elements = Array.isArray(node.elements) ? node.elements : [];
|
|
455
|
+
return elements.flatMap((element) => collectPiiNodes(element, includeContactOnly));
|
|
456
|
+
}
|
|
457
|
+
if (containsPiiReference(node, includeContactOnly))
|
|
458
|
+
return [node];
|
|
459
|
+
return [];
|
|
460
|
+
}
|
|
461
|
+
const noAnalyticsPiiRule = defineRule({
|
|
462
|
+
description: 'Disallow statically provable lead PII in analytics event payloads.',
|
|
463
|
+
messages: {
|
|
464
|
+
analyticsPii: 'Do not send lead PII or attachment details to analytics. Use the shared Brandlab analytics allowlist.',
|
|
465
|
+
},
|
|
466
|
+
create(context) {
|
|
467
|
+
function inspectCall(nodeValue) {
|
|
468
|
+
const node = asNode(nodeValue);
|
|
469
|
+
if (node?.type !== 'CallExpression' || !isAnalyticsSink(node.callee))
|
|
470
|
+
return;
|
|
471
|
+
const includeContactOnly = isContactAnalyticsCall(node);
|
|
472
|
+
const args = Array.isArray(node.arguments) ? node.arguments : [];
|
|
473
|
+
const reported = new Set();
|
|
474
|
+
for (const argument of args) {
|
|
475
|
+
for (const piiNode of collectPiiNodes(argument, includeContactOnly)) {
|
|
476
|
+
if (reported.has(piiNode))
|
|
477
|
+
continue;
|
|
478
|
+
reported.add(piiNode);
|
|
479
|
+
context.report({ node: piiNode, messageId: 'analyticsPii' });
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
return { CallExpression: inspectCall };
|
|
484
|
+
},
|
|
485
|
+
});
|
|
486
|
+
function normalizeStaticUrl(value) {
|
|
487
|
+
return value.trim().replace(/[\u0000-\u0020]+/g, '').toLowerCase();
|
|
488
|
+
}
|
|
489
|
+
function isDangerousStaticUrl(value) {
|
|
490
|
+
return /^(?:javascript|vbscript):/.test(normalizeStaticUrl(value)) ||
|
|
491
|
+
/^data:text\/html(?:;|,)/.test(normalizeStaticUrl(value));
|
|
492
|
+
}
|
|
493
|
+
function isExternalStaticUrl(value) {
|
|
494
|
+
return /^(?:https?:)?\/\//i.test(value.trim());
|
|
495
|
+
}
|
|
496
|
+
function relHasNoopener(value) {
|
|
497
|
+
return Boolean(value?.toLowerCase().split(/\s+/).includes('noopener'));
|
|
498
|
+
}
|
|
499
|
+
const noUnsafeExternalLinksRule = defineRule({
|
|
500
|
+
description: 'Disallow statically provable unsafe link schemes and external opener access.',
|
|
501
|
+
messages: {
|
|
502
|
+
unsafeLinkScheme: 'Do not use javascript:, vbscript:, or HTML data URLs in links.',
|
|
503
|
+
missingNoopener: 'External links opened in a new context must include rel="noopener".',
|
|
504
|
+
},
|
|
505
|
+
create(context) {
|
|
506
|
+
function inspectOpeningElement(nodeValue) {
|
|
507
|
+
const node = asNode(nodeValue);
|
|
508
|
+
const elementName = getJsxElementName(node?.name)?.toLowerCase();
|
|
509
|
+
if (!node || (elementName !== 'a' && elementName !== 'link'))
|
|
510
|
+
return;
|
|
511
|
+
const href = getStaticString(getJsxAttribute(node, 'href'));
|
|
512
|
+
if (!href)
|
|
513
|
+
return;
|
|
514
|
+
if (isDangerousStaticUrl(href)) {
|
|
515
|
+
context.report({ node: nodeValue, messageId: 'unsafeLinkScheme' });
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
const target = getStaticString(getJsxAttribute(node, 'target'));
|
|
519
|
+
if (isExternalStaticUrl(href) &&
|
|
520
|
+
target?.toLowerCase() === '_blank' &&
|
|
521
|
+
!relHasNoopener(getStaticString(getJsxAttribute(node, 'rel')))) {
|
|
522
|
+
context.report({ node: nodeValue, messageId: 'missingNoopener' });
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
function inspectCall(nodeValue) {
|
|
526
|
+
const node = asNode(nodeValue);
|
|
527
|
+
if (node?.type !== 'CallExpression' || getMemberPath(node.callee) !== 'window.open')
|
|
528
|
+
return;
|
|
529
|
+
const args = Array.isArray(node.arguments) ? node.arguments : [];
|
|
530
|
+
const url = getStaticString(args[0]);
|
|
531
|
+
if (!url)
|
|
532
|
+
return;
|
|
533
|
+
if (isDangerousStaticUrl(url)) {
|
|
534
|
+
context.report({ node: nodeValue, messageId: 'unsafeLinkScheme' });
|
|
535
|
+
return;
|
|
536
|
+
}
|
|
537
|
+
const target = getStaticString(args[1]) ?? '_blank';
|
|
538
|
+
const features = getStaticString(args[2]);
|
|
539
|
+
if (isExternalStaticUrl(url) &&
|
|
540
|
+
target.toLowerCase() === '_blank' &&
|
|
541
|
+
!features?.toLowerCase().split(/\s*,\s*/).includes('noopener') &&
|
|
542
|
+
!features?.toLowerCase().split(/\s*,\s*/).includes('noreferrer')) {
|
|
543
|
+
context.report({ node: nodeValue, messageId: 'missingNoopener' });
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
return {
|
|
547
|
+
CallExpression: inspectCall,
|
|
548
|
+
JSXOpeningElement: inspectOpeningElement,
|
|
549
|
+
};
|
|
550
|
+
},
|
|
551
|
+
});
|
|
552
|
+
function isEmailRenderingFile(context) {
|
|
553
|
+
const filename = getContextFilename(context);
|
|
554
|
+
return (/\/(?:email|emails|contact-email)\//i.test(filename) ||
|
|
555
|
+
/(?:Email|EmailTemplate|ContactFormEmail)\.(?:jsx|tsx)$/i.test(filename));
|
|
556
|
+
}
|
|
557
|
+
const noRawImageElementsRule = defineRule({
|
|
558
|
+
description: 'Disallow raw image elements in Next.js UI where next/image should own delivery.',
|
|
559
|
+
messages: {
|
|
560
|
+
rawImage: 'Use next/image for website UI images. Raw image markup is reserved for non-Next renderers such as email.',
|
|
561
|
+
},
|
|
562
|
+
create(context) {
|
|
563
|
+
if (isEmailRenderingFile(context))
|
|
564
|
+
return {};
|
|
565
|
+
function inspectOpeningElement(nodeValue) {
|
|
566
|
+
const node = asNode(nodeValue);
|
|
567
|
+
if (getJsxElementName(node?.name)?.toLowerCase() === 'img') {
|
|
568
|
+
context.report({ node: nodeValue, messageId: 'rawImage' });
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
function inspectCall(nodeValue) {
|
|
572
|
+
const node = asNode(nodeValue);
|
|
573
|
+
if (node?.type !== 'CallExpression')
|
|
574
|
+
return;
|
|
575
|
+
const callee = getMemberPath(node.callee);
|
|
576
|
+
const args = Array.isArray(node.arguments) ? node.arguments : [];
|
|
577
|
+
if ((callee === 'createElement' || callee === 'React.createElement') &&
|
|
578
|
+
getStaticString(args[0])?.toLowerCase() === 'img') {
|
|
579
|
+
context.report({ node: nodeValue, messageId: 'rawImage' });
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
return {
|
|
583
|
+
CallExpression: inspectCall,
|
|
584
|
+
JSXOpeningElement: inspectOpeningElement,
|
|
585
|
+
};
|
|
586
|
+
},
|
|
587
|
+
});
|
|
588
|
+
const noUnsafeRichTextSinksRule = defineRule({
|
|
589
|
+
description: 'Disallow visible rich text sinks that bypass a sanitizer.',
|
|
590
|
+
messages: {
|
|
591
|
+
unsafeRichTextSink: 'Visible rich text must be sanitizer-backed and tested.',
|
|
592
|
+
},
|
|
593
|
+
create(context) {
|
|
594
|
+
function inspectSourceNode(node) {
|
|
595
|
+
const text = getSourceText(context, node);
|
|
596
|
+
if (text.includes('dangerouslySetInnerHTML') &&
|
|
597
|
+
!/saniti[sz](?:e|ed|er)/i.test(text)) {
|
|
598
|
+
context.report({ node, messageId: 'unsafeRichTextSink' });
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
function inspectStringNode(node) {
|
|
602
|
+
const text = getStaticString(node);
|
|
603
|
+
if (text?.includes('dangerouslySetInnerHTML') &&
|
|
604
|
+
!/saniti[sz](?:e|ed|er)/i.test(text)) {
|
|
605
|
+
context.report({ node, messageId: 'unsafeRichTextSink' });
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
return {
|
|
609
|
+
JSXAttribute: inspectSourceNode,
|
|
610
|
+
Literal: inspectStringNode,
|
|
611
|
+
Property: inspectSourceNode,
|
|
612
|
+
TemplateElement: inspectStringNode,
|
|
613
|
+
};
|
|
614
|
+
},
|
|
615
|
+
});
|
|
91
616
|
export const rules = {
|
|
92
|
-
|
|
617
|
+
[RULE_IDS.noLegacyAnalyticsEvents]: createTextRule({
|
|
93
618
|
description: 'Disallow retired Brandlab analytics event names.',
|
|
94
619
|
messageId: 'legacyAnalyticsEvent',
|
|
95
620
|
message: 'Use the canonical Brandlab lead events: phone_call or contact_form.',
|
|
96
621
|
matcher: (text) => legacyAnalyticsEvents.has(text),
|
|
97
622
|
}),
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
},
|
|
106
|
-
}),
|
|
107
|
-
'no-allow-indexing-true': noAllowIndexingTrueRule,
|
|
108
|
-
'no-unsafe-rich-text-sinks': createTextRule({
|
|
109
|
-
description: 'Disallow visible rich text sinks that bypass a sanitizer.',
|
|
110
|
-
messageId: 'unsafeRichTextSink',
|
|
111
|
-
message: 'Visible rich text must be sanitizer-backed and tested.',
|
|
112
|
-
matcher: (text) => text.includes('dangerouslySetInnerHTML') && !text.includes('sanitize'),
|
|
113
|
-
}),
|
|
623
|
+
[RULE_IDS.noRawJsonLd]: noRawJsonLdRule,
|
|
624
|
+
[RULE_IDS.noAllowIndexingTrue]: noAllowIndexingTrueRule,
|
|
625
|
+
[RULE_IDS.noUnsafeRichTextSinks]: noUnsafeRichTextSinksRule,
|
|
626
|
+
[RULE_IDS.noProtectedPlatformReimplementation]: noProtectedPlatformReimplementationRule,
|
|
627
|
+
[RULE_IDS.noAnalyticsPii]: noAnalyticsPiiRule,
|
|
628
|
+
[RULE_IDS.noUnsafeExternalLinks]: noUnsafeExternalLinksRule,
|
|
629
|
+
[RULE_IDS.noRawImageElements]: noRawImageElementsRule,
|
|
114
630
|
};
|
|
631
|
+
const recommendedRules = Object.fromEntries(Object.keys(rules).map((ruleId) => [`brandlab/${ruleId}`, 'error']));
|
|
115
632
|
const plugin = {
|
|
116
633
|
rules,
|
|
117
634
|
configs: {
|
|
@@ -119,12 +636,7 @@ const plugin = {
|
|
|
119
636
|
plugins: {
|
|
120
637
|
brandlab: undefined,
|
|
121
638
|
},
|
|
122
|
-
rules:
|
|
123
|
-
'brandlab/no-legacy-analytics-events': 'error',
|
|
124
|
-
'brandlab/no-raw-json-ld': 'error',
|
|
125
|
-
'brandlab/no-allow-indexing-true': 'error',
|
|
126
|
-
'brandlab/no-unsafe-rich-text-sinks': 'error',
|
|
127
|
-
},
|
|
639
|
+
rules: recommendedRules,
|
|
128
640
|
},
|
|
129
641
|
},
|
|
130
642
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brandlab-digital/eslint-plugin",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.0.0-rc.10",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "git+https://github.com/RomieDandan/brandlab.git",
|
|
7
|
+
"directory": "standards/source/packages/eslint-plugin-brandlab"
|
|
8
|
+
},
|
|
4
9
|
"private": false,
|
|
5
10
|
"type": "module",
|
|
6
11
|
"sideEffects": false,
|