@brandlab-digital/conformance 0.1.0-alpha.0
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/dist/vitest.d.ts +24 -0
- package/dist/vitest.d.ts.map +1 -0
- package/dist/vitest.js +80 -0
- package/dist/vitest.js.map +1 -0
- package/package.json +19 -0
package/dist/vitest.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface SourceTextFile {
|
|
2
|
+
path: string;
|
|
3
|
+
text: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SourcePattern {
|
|
6
|
+
name: string;
|
|
7
|
+
pattern: RegExp;
|
|
8
|
+
}
|
|
9
|
+
export interface SourcePatternMatch {
|
|
10
|
+
file: string;
|
|
11
|
+
patternName: string;
|
|
12
|
+
line: number;
|
|
13
|
+
column: number;
|
|
14
|
+
text: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const BRANDLAB_FORBIDDEN_SOURCE_PATTERNS: readonly SourcePattern[];
|
|
17
|
+
export declare function scanTextFiles(options: {
|
|
18
|
+
roots: readonly string[];
|
|
19
|
+
}): SourceTextFile[];
|
|
20
|
+
export declare function findForbiddenBrandlabPatterns(options: {
|
|
21
|
+
roots: readonly string[];
|
|
22
|
+
patterns?: readonly SourcePattern[];
|
|
23
|
+
}): SourcePatternMatch[];
|
|
24
|
+
//# sourceMappingURL=vitest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAcD,eAAO,MAAM,kCAAkC,EAAE,SAAS,aAAa,EAiBtE,CAAA;AAwBD,wBAAgB,aAAa,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAAG,cAAc,EAAE,CAOrF;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE;IACrD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,CAAA;CACpC,GAAG,kBAAkB,EAAE,CAyBvB"}
|
package/dist/vitest.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { readFileSync, readdirSync, statSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const DEFAULT_EXTENSIONS = new Set([
|
|
4
|
+
'.ts',
|
|
5
|
+
'.tsx',
|
|
6
|
+
'.js',
|
|
7
|
+
'.jsx',
|
|
8
|
+
'.md',
|
|
9
|
+
'.mdx',
|
|
10
|
+
'.json',
|
|
11
|
+
]);
|
|
12
|
+
const DEFAULT_IGNORED_DIRS = new Set(['node_modules', '.next', 'dist', 'coverage']);
|
|
13
|
+
export const BRANDLAB_FORBIDDEN_SOURCE_PATTERNS = [
|
|
14
|
+
{
|
|
15
|
+
name: 'legacy analytics event',
|
|
16
|
+
pattern: /\b(contact_form_submission|phone_calls|form_start|cta_click)\b/,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'non-standard indexing override',
|
|
20
|
+
pattern: /\bALLOW_INDEXING\s*=\s*true\b|ALLOW_INDEXING=true/,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'disabled service-location sentinel',
|
|
24
|
+
pattern: /__service-location-disabled__/,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'sitemap filesystem freshness',
|
|
28
|
+
pattern: /\bfs\.statSync\b|\.mtime\b|\bmtime\b/,
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
function fileExtension(path) {
|
|
32
|
+
const match = path.match(/\.[^.]+$/);
|
|
33
|
+
return match?.[0] ?? '';
|
|
34
|
+
}
|
|
35
|
+
function walkFiles(root, files = []) {
|
|
36
|
+
for (const entry of readdirSync(root)) {
|
|
37
|
+
if (DEFAULT_IGNORED_DIRS.has(entry))
|
|
38
|
+
continue;
|
|
39
|
+
const path = join(root, entry);
|
|
40
|
+
const stats = statSync(path);
|
|
41
|
+
if (stats.isDirectory()) {
|
|
42
|
+
walkFiles(path, files);
|
|
43
|
+
}
|
|
44
|
+
else if (stats.isFile() && DEFAULT_EXTENSIONS.has(fileExtension(path))) {
|
|
45
|
+
files.push(path);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return files;
|
|
49
|
+
}
|
|
50
|
+
export function scanTextFiles(options) {
|
|
51
|
+
return options.roots
|
|
52
|
+
.flatMap((root) => walkFiles(root))
|
|
53
|
+
.map((path) => ({
|
|
54
|
+
path,
|
|
55
|
+
text: readFileSync(path, 'utf8'),
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
export function findForbiddenBrandlabPatterns(options) {
|
|
59
|
+
const patterns = options.patterns ?? BRANDLAB_FORBIDDEN_SOURCE_PATTERNS;
|
|
60
|
+
const matches = [];
|
|
61
|
+
for (const file of scanTextFiles({ roots: options.roots })) {
|
|
62
|
+
const lines = file.text.split(/\r?\n/);
|
|
63
|
+
lines.forEach((lineText, lineIndex) => {
|
|
64
|
+
for (const sourcePattern of patterns) {
|
|
65
|
+
const match = sourcePattern.pattern.exec(lineText);
|
|
66
|
+
if (match) {
|
|
67
|
+
matches.push({
|
|
68
|
+
file: file.path,
|
|
69
|
+
patternName: sourcePattern.name,
|
|
70
|
+
line: lineIndex + 1,
|
|
71
|
+
column: match.index + 1,
|
|
72
|
+
text: lineText,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return matches;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=vitest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@brandlab-digital/conformance",
|
|
3
|
+
"version": "0.1.0-alpha.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"files": ["dist"],
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc -p tsconfig.json",
|
|
10
|
+
"test": "vitest run",
|
|
11
|
+
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
12
|
+
},
|
|
13
|
+
"exports": {
|
|
14
|
+
"./vitest": {
|
|
15
|
+
"types": "./dist/vitest.d.ts",
|
|
16
|
+
"import": "./dist/vitest.js"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|