@brandlab-digital/conformance 0.1.0-alpha.8 → 1.0.0-rc.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.
@@ -0,0 +1,445 @@
1
+ import { createHash } from "node:crypto";
2
+ export const BRANDLAB_SHARED_PACKAGE_NAMES = [
3
+ "@brandlab-digital/site-core",
4
+ "@brandlab-digital/site-next",
5
+ "@brandlab-digital/conformance",
6
+ "@brandlab-digital/eslint-plugin",
7
+ ];
8
+ const SEMVER_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/;
9
+ const DATE_PATTERN = /^20\d{2}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/;
10
+ const SHA1_PATTERN = /^[a-f0-9]{40}$/;
11
+ const SHA256_PATTERN = /^[a-f0-9]{64}$/;
12
+ export function isBrandlabSemver(value) {
13
+ return typeof value === "string" && SEMVER_PATTERN.test(value);
14
+ }
15
+ export function compareBrandlabSemver(first, second) {
16
+ const firstParts = parseSemver(first);
17
+ const secondParts = parseSemver(second);
18
+ for (const key of ["major", "minor", "patch"]) {
19
+ if (firstParts[key] !== secondParts[key]) {
20
+ return firstParts[key] - secondParts[key];
21
+ }
22
+ }
23
+ if (firstParts.prerelease.length === 0 && secondParts.prerelease.length > 0)
24
+ return 1;
25
+ if (secondParts.prerelease.length === 0 && firstParts.prerelease.length > 0)
26
+ return -1;
27
+ const length = Math.max(firstParts.prerelease.length, secondParts.prerelease.length);
28
+ for (let index = 0; index < length; index += 1) {
29
+ const firstIdentifier = firstParts.prerelease[index];
30
+ const secondIdentifier = secondParts.prerelease[index];
31
+ if (firstIdentifier === undefined)
32
+ return -1;
33
+ if (secondIdentifier === undefined)
34
+ return 1;
35
+ if (firstIdentifier === secondIdentifier)
36
+ continue;
37
+ const firstNumeric = /^\d+$/.test(firstIdentifier);
38
+ const secondNumeric = /^\d+$/.test(secondIdentifier);
39
+ if (firstNumeric && secondNumeric) {
40
+ return Number(firstIdentifier) - Number(secondIdentifier);
41
+ }
42
+ if (firstNumeric)
43
+ return -1;
44
+ if (secondNumeric)
45
+ return 1;
46
+ return firstIdentifier.localeCompare(secondIdentifier);
47
+ }
48
+ return 0;
49
+ }
50
+ export function validateBrandlabReleaseManifest(input) {
51
+ const manifest = asObject(input, "release manifest");
52
+ if (manifest.schemaVersion !== 1)
53
+ fail("schemaVersion must be 1");
54
+ if (manifest.kind !== "brandlab-release-manifest") {
55
+ fail("kind must be brandlab-release-manifest");
56
+ }
57
+ if (!isBrandlabSemver(manifest.releaseVersion))
58
+ fail("releaseVersion must be valid semver");
59
+ if (!isDate(manifest.releasedAt))
60
+ fail("releasedAt must be an ISO date");
61
+ if (!includes(["prerelease", "rc", "stable"], manifest.channel)) {
62
+ fail("channel is invalid");
63
+ }
64
+ const packages = asObject(manifest.packages, "packages");
65
+ const actualPackageNames = Object.keys(packages).sort();
66
+ const expectedPackageNames = [...BRANDLAB_SHARED_PACKAGE_NAMES].sort();
67
+ if (JSON.stringify(actualPackageNames) !== JSON.stringify(expectedPackageNames)) {
68
+ fail("packages must contain the four Brandlab packages exactly once");
69
+ }
70
+ for (const packageName of BRANDLAB_SHARED_PACKAGE_NAMES) {
71
+ const packageEntry = asObject(packages[packageName], `packages.${packageName}`);
72
+ if (packageEntry.version !== manifest.releaseVersion) {
73
+ fail(`${packageName} must use the lockstep releaseVersion`);
74
+ }
75
+ const registry = asObject(packageEntry.registry, `${packageName}.registry`);
76
+ if (!includes(["verified", "published-unverified", "not-published"], registry.state)) {
77
+ fail(`${packageName} registry state is invalid`);
78
+ }
79
+ validateOptionalDigest(registry.shasum, SHA1_PATTERN, `${packageName} registry shasum`);
80
+ validateOptionalIntegrity(registry.integrity, `${packageName} registry integrity`);
81
+ if (registry.state === "verified" && registry.shasum === null && registry.integrity === null) {
82
+ fail(`${packageName} verified registry evidence needs a shasum or integrity`);
83
+ }
84
+ if (registry.state === "not-published" && (registry.shasum !== null || registry.integrity !== null)) {
85
+ fail(`${packageName} cannot have registry digests while not published`);
86
+ }
87
+ }
88
+ const runtime = asObject(manifest.runtime, "runtime");
89
+ for (const field of ["next", "react", "reactDom", "node", "typescript", "packageManager"]) {
90
+ if (!nonEmptyString(runtime[field]))
91
+ fail(`runtime.${field} must be a non-empty string`);
92
+ }
93
+ if (runtime.router !== "app" || runtime.bundler !== "turbopack") {
94
+ fail("runtime must use App Router and Turbopack");
95
+ }
96
+ if (typeof runtime.cacheComponents !== "boolean") {
97
+ fail("runtime.cacheComponents must be boolean");
98
+ }
99
+ for (const field of ["next", "react", "reactDom", "typescript"]) {
100
+ if (!isBrandlabSemver(runtime[field])) {
101
+ fail(`runtime.${field} must be an exact semantic version`);
102
+ }
103
+ }
104
+ if (!/^\d+\.x$/.test(String(runtime.node))) {
105
+ fail("runtime.node must be an exact supported major line such as 24.x");
106
+ }
107
+ if (!/^npm@\d+\.\d+\.\d+$/.test(String(runtime.packageManager))) {
108
+ fail("runtime.packageManager must be an exact npm version");
109
+ }
110
+ const contracts = asObject(manifest.contracts, "contracts");
111
+ for (const field of ["architecture", "configuration", "contact", "seo", "analytics"]) {
112
+ if (!nonEmptyString(contracts[field]))
113
+ fail(`contracts.${field} must be a non-empty string`);
114
+ }
115
+ if ((contracts.architecture === "architecture-v3") !==
116
+ (contracts.configuration === "project-config-v2")) {
117
+ fail("architecture-v3 and project-config-v2 must be released together");
118
+ }
119
+ validateStringArray(manifest.capabilities, "capabilities", true);
120
+ const evidence = asObject(manifest.evidence, "evidence");
121
+ if (!includes(["verified", "reconstructed", "planned"], evidence.recordState)) {
122
+ fail("evidence.recordState is invalid");
123
+ }
124
+ if (evidence.sourceCommit !== null && !SHA1_PATTERN.test(String(evidence.sourceCommit))) {
125
+ fail("evidence.sourceCommit must be a full Git commit");
126
+ }
127
+ if (!nonEmptyString(evidence.releaseNotes))
128
+ fail("evidence.releaseNotes is required");
129
+ if (evidence.releaseEvidence !== null && !nonEmptyString(evidence.releaseEvidence)) {
130
+ fail("evidence.releaseEvidence must be null or a non-empty path");
131
+ }
132
+ if (evidence.testCount !== null && (!Number.isInteger(evidence.testCount) || Number(evidence.testCount) < 0)) {
133
+ fail("evidence.testCount must be null or a non-negative integer");
134
+ }
135
+ validateStringArray(evidence.verificationCommands, "evidence.verificationCommands", false);
136
+ if (evidence.recordState === "verified" &&
137
+ (evidence.sourceCommit === null || evidence.releaseEvidence === null)) {
138
+ fail("verified release evidence needs a source commit and release evidence path");
139
+ }
140
+ if (evidence.recordState === "verified") {
141
+ for (const packageName of BRANDLAB_SHARED_PACKAGE_NAMES) {
142
+ const packageEntry = asObject(packages[packageName], `packages.${packageName}`);
143
+ const registry = asObject(packageEntry.registry, `${packageName}.registry`);
144
+ if (registry.state !== "verified") {
145
+ fail("verified release evidence requires verified registry evidence for every package");
146
+ }
147
+ }
148
+ }
149
+ const fingerprints = asObject(manifest.fingerprints, "fingerprints");
150
+ validateOptionalDigest(fingerprints.publicApi, SHA256_PATTERN, "fingerprints.publicApi");
151
+ validateOptionalDigest(fingerprints.fixtures, SHA256_PATTERN, "fingerprints.fixtures");
152
+ const rollback = asObject(manifest.rollback, "rollback");
153
+ if (rollback.targetRelease !== null && !isBrandlabSemver(rollback.targetRelease)) {
154
+ fail("rollback.targetRelease must be null or valid semver");
155
+ }
156
+ if (!nonEmptyString(rollback.strategy))
157
+ fail("rollback.strategy is required");
158
+ }
159
+ export function projectBrandlabRuntimeReleaseContract(input) {
160
+ validateBrandlabReleaseManifest(input);
161
+ return {
162
+ schemaVersion: "brandlab.runtime-release-contract.v1",
163
+ kind: "brandlab-runtime-release-contract",
164
+ releaseVersion: input.releaseVersion,
165
+ packages: Object.fromEntries(BRANDLAB_SHARED_PACKAGE_NAMES.map((packageName) => [
166
+ packageName,
167
+ { version: input.packages[packageName].version },
168
+ ])),
169
+ runtime: { ...input.runtime },
170
+ contracts: { ...input.contracts },
171
+ capabilities: [...input.capabilities],
172
+ };
173
+ }
174
+ export function validateBrandlabRuntimeReleaseContract(input) {
175
+ const contract = asObject(input, "runtime release contract");
176
+ validateExactKeys(contract, [
177
+ "schemaVersion",
178
+ "kind",
179
+ "releaseVersion",
180
+ "packages",
181
+ "runtime",
182
+ "contracts",
183
+ "capabilities",
184
+ ], "runtime release contract");
185
+ if (contract.schemaVersion !== "brandlab.runtime-release-contract.v1") {
186
+ fail("runtime release contract schemaVersion is invalid");
187
+ }
188
+ if (contract.kind !== "brandlab-runtime-release-contract") {
189
+ fail("runtime release contract kind is invalid");
190
+ }
191
+ if (!isBrandlabSemver(contract.releaseVersion)) {
192
+ fail("runtime release contract releaseVersion must be valid semver");
193
+ }
194
+ const packages = asObject(contract.packages, "runtime release contract packages");
195
+ const actualPackageNames = Object.keys(packages).sort();
196
+ const expectedPackageNames = [...BRANDLAB_SHARED_PACKAGE_NAMES].sort();
197
+ if (JSON.stringify(actualPackageNames) !== JSON.stringify(expectedPackageNames)) {
198
+ fail("runtime release contract packages must contain the four Brandlab packages exactly once");
199
+ }
200
+ for (const packageName of BRANDLAB_SHARED_PACKAGE_NAMES) {
201
+ const packageEntry = asObject(packages[packageName], `runtime packages.${packageName}`);
202
+ validateExactKeys(packageEntry, ["version"], `runtime packages.${packageName}`);
203
+ if (packageEntry.version !== contract.releaseVersion) {
204
+ fail(`${packageName} runtime package must use the lockstep releaseVersion`);
205
+ }
206
+ }
207
+ const runtime = asObject(contract.runtime, "runtime release contract runtime");
208
+ validateExactKeys(runtime, [
209
+ "next",
210
+ "react",
211
+ "reactDom",
212
+ "node",
213
+ "typescript",
214
+ "packageManager",
215
+ "router",
216
+ "bundler",
217
+ "cacheComponents",
218
+ ], "runtime release contract runtime");
219
+ for (const field of ["next", "react", "reactDom", "node", "typescript", "packageManager"]) {
220
+ if (!nonEmptyString(runtime[field]))
221
+ fail(`runtime contract ${field} must be a non-empty string`);
222
+ }
223
+ if (runtime.router !== "app" || runtime.bundler !== "turbopack") {
224
+ fail("runtime release contract must use App Router and Turbopack");
225
+ }
226
+ if (typeof runtime.cacheComponents !== "boolean") {
227
+ fail("runtime release contract cacheComponents must be boolean");
228
+ }
229
+ for (const field of ["next", "react", "reactDom", "typescript"]) {
230
+ if (!isBrandlabSemver(runtime[field])) {
231
+ fail(`runtime contract ${field} must be an exact semantic version`);
232
+ }
233
+ }
234
+ if (!/^\d+\.x$/.test(String(runtime.node))) {
235
+ fail("runtime contract node must be an exact supported major line such as 24.x");
236
+ }
237
+ if (!/^npm@\d+\.\d+\.\d+$/.test(String(runtime.packageManager))) {
238
+ fail("runtime contract packageManager must be an exact npm version");
239
+ }
240
+ const contracts = asObject(contract.contracts, "runtime release contract contracts");
241
+ validateExactKeys(contracts, [
242
+ "architecture",
243
+ "configuration",
244
+ "contact",
245
+ "seo",
246
+ "analytics",
247
+ ], "runtime release contract contracts");
248
+ for (const field of ["architecture", "configuration", "contact", "seo", "analytics"]) {
249
+ if (!nonEmptyString(contracts[field]))
250
+ fail(`runtime contract ${field} must be a non-empty string`);
251
+ }
252
+ if ((contracts.architecture === "architecture-v3") !==
253
+ (contracts.configuration === "project-config-v2")) {
254
+ fail("runtime contract architecture-v3 and project-config-v2 must be released together");
255
+ }
256
+ validateStringArray(contract.capabilities, "runtime release contract capabilities", true);
257
+ }
258
+ export function validateBrandlabReleaseCatalog(manifests) {
259
+ const versions = new Set();
260
+ let previousVersion = null;
261
+ for (const manifest of manifests) {
262
+ validateBrandlabReleaseManifest(manifest);
263
+ if (versions.has(manifest.releaseVersion)) {
264
+ fail(`duplicate release manifest ${manifest.releaseVersion}`);
265
+ }
266
+ if (previousVersion !== null &&
267
+ compareBrandlabSemver(previousVersion, manifest.releaseVersion) >= 0) {
268
+ fail("release catalog must be in ascending semver order");
269
+ }
270
+ versions.add(manifest.releaseVersion);
271
+ previousVersion = manifest.releaseVersion;
272
+ }
273
+ }
274
+ export function validateBrandlabRuntimeReleaseCatalog(contracts) {
275
+ const versions = new Set();
276
+ let previousVersion = null;
277
+ for (const contract of contracts) {
278
+ validateBrandlabRuntimeReleaseContract(contract);
279
+ if (versions.has(contract.releaseVersion)) {
280
+ fail(`duplicate runtime release contract ${contract.releaseVersion}`);
281
+ }
282
+ if (previousVersion !== null &&
283
+ compareBrandlabSemver(previousVersion, contract.releaseVersion) >= 0) {
284
+ fail("runtime release catalog must be in ascending semver order");
285
+ }
286
+ versions.add(contract.releaseVersion);
287
+ previousVersion = contract.releaseVersion;
288
+ }
289
+ }
290
+ export function validateBrandlabRuntimeReleaseCatalogAgainstManifests(contracts, manifests) {
291
+ validateBrandlabRuntimeReleaseCatalog(contracts);
292
+ validateBrandlabReleaseCatalog(manifests);
293
+ const projected = manifests.map(projectBrandlabRuntimeReleaseContract);
294
+ if (stableStringify(contracts) !== stableStringify(projected)) {
295
+ fail("runtime release catalog differs from the external full release manifests");
296
+ }
297
+ }
298
+ export function validateBrandlabSupportPolicy(input, releasesWithContracts) {
299
+ const policy = asObject(input, "support policy");
300
+ if (policy.schemaVersion !== 3)
301
+ fail("support policy schemaVersion must be 3");
302
+ if (policy.authorityId !== "brandlab-shared-package") {
303
+ fail("support policy authorityId is invalid");
304
+ }
305
+ if (!isDate(policy.updatedAt))
306
+ fail("support policy updatedAt must be an ISO date");
307
+ const releaseByVersion = new Map(releasesWithContracts.map((release) => [release.releaseVersion, release]));
308
+ const releases = asObject(policy.releases, "support policy releases");
309
+ if (Object.keys(releases).length === 0)
310
+ fail("support policy releases must not be empty");
311
+ let currentCount = 0;
312
+ for (const [version, rawRelease] of Object.entries(releases)) {
313
+ if (!releaseByVersion.has(version))
314
+ fail(`support policy references missing manifest ${version}`);
315
+ const release = asObject(rawRelease, `support policy release ${version}`);
316
+ if (!includes(["current", "tolerated", "security-blocked", "retired"], release.lifecycle)) {
317
+ fail(`${version} lifecycle is invalid`);
318
+ }
319
+ if (release.lifecycle === "current")
320
+ currentCount += 1;
321
+ if (!nonEmptyString(release.manifest))
322
+ fail(`${version} manifest path is required`);
323
+ }
324
+ if (currentCount !== 1)
325
+ fail("support policy must have exactly one current release");
326
+ for (const field of [
327
+ "currentReleaseVersion",
328
+ "defaultNewProjectVersion",
329
+ "minimumSupportedVersion",
330
+ ]) {
331
+ if (!isBrandlabSemver(policy[field]) || !releases[String(policy[field])]) {
332
+ fail(`${field} must reference a release`);
333
+ }
334
+ }
335
+ const current = asObject(releases[String(policy.currentReleaseVersion)], "current release");
336
+ if (current.lifecycle !== "current")
337
+ fail("currentReleaseVersion must have current lifecycle");
338
+ for (const field of ["defaultNewProjectVersion", "minimumSupportedVersion"]) {
339
+ const release = asObject(releases[String(policy[field])], field);
340
+ if (release.lifecycle !== "current" && release.lifecycle !== "tolerated") {
341
+ fail(`${field} must reference a current or tolerated release`);
342
+ }
343
+ }
344
+ const channels = asObject(policy.channels, "channels");
345
+ for (const [channel, version] of Object.entries(channels)) {
346
+ if (!nonEmptyString(channel) || typeof version !== "string" || !releases[version]) {
347
+ fail(`channel ${channel} must reference a known release`);
348
+ }
349
+ }
350
+ const projectPolicies = asObject(policy.projectPolicies, "projectPolicies");
351
+ for (const [projectId, rawProjectPolicy] of Object.entries(projectPolicies)) {
352
+ const projectPolicy = asObject(rawProjectPolicy, `project policy ${projectId}`);
353
+ if (!releases[String(projectPolicy.maximumVersion)]) {
354
+ fail(`${projectId} maximumVersion must reference a release`);
355
+ }
356
+ if (projectPolicy.approvedBy !== "owner")
357
+ fail(`${projectId} must be owner-approved`);
358
+ for (const field of ["effectiveAt", "nextReviewAt"]) {
359
+ if (!isDate(projectPolicy[field]))
360
+ fail(`${projectId} ${field} must be an ISO date`);
361
+ }
362
+ for (const field of [
363
+ "decision",
364
+ "sourceReference",
365
+ "rationale",
366
+ "riskAcceptance",
367
+ "securityOverride",
368
+ "reviewTrigger",
369
+ ]) {
370
+ if (!nonEmptyString(projectPolicy[field]))
371
+ fail(`${projectId} ${field} is required`);
372
+ }
373
+ }
374
+ }
375
+ export function digestBrandlabAuthority(value) {
376
+ return createHash("sha256").update(stableStringify(value)).digest("hex");
377
+ }
378
+ function parseSemver(value) {
379
+ const match = value.match(SEMVER_PATTERN);
380
+ if (!match)
381
+ throw new Error(`Invalid semver: ${value}`);
382
+ return {
383
+ major: Number(match[1]),
384
+ minor: Number(match[2]),
385
+ patch: Number(match[3]),
386
+ prerelease: match[4]?.split(".") ?? [],
387
+ };
388
+ }
389
+ function stableStringify(value) {
390
+ if (Array.isArray(value))
391
+ return `[${value.map(stableStringify).join(",")}]`;
392
+ if (value && typeof value === "object") {
393
+ return `{${Object.entries(value)
394
+ .sort(([first], [second]) => first.localeCompare(second))
395
+ .map(([key, child]) => `${JSON.stringify(key)}:${stableStringify(child)}`)
396
+ .join(",")}}`;
397
+ }
398
+ return JSON.stringify(value) ?? "null";
399
+ }
400
+ function asObject(value, label) {
401
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
402
+ fail(`${label} must be an object`);
403
+ }
404
+ return value;
405
+ }
406
+ function validateExactKeys(value, expected, label) {
407
+ const actual = Object.keys(value).sort();
408
+ const sortedExpected = [...expected].sort();
409
+ if (JSON.stringify(actual) !== JSON.stringify(sortedExpected)) {
410
+ fail(`${label} contains unsupported fields`);
411
+ }
412
+ }
413
+ function isDate(value) {
414
+ if (typeof value !== "string" || !DATE_PATTERN.test(value))
415
+ return false;
416
+ const parsed = new Date(`${value}T00:00:00.000Z`);
417
+ return Number.isFinite(parsed.valueOf()) && parsed.toISOString().startsWith(value);
418
+ }
419
+ function nonEmptyString(value) {
420
+ return typeof value === "string" && value.trim().length > 0;
421
+ }
422
+ function includes(values, value) {
423
+ return typeof value === "string" && values.includes(value);
424
+ }
425
+ function validateStringArray(value, label, unique) {
426
+ if (!Array.isArray(value) || value.some((entry) => !nonEmptyString(entry))) {
427
+ fail(`${label} must be an array of non-empty strings`);
428
+ }
429
+ if (unique && new Set(value).size !== value.length)
430
+ fail(`${label} must be unique`);
431
+ }
432
+ function validateOptionalDigest(value, pattern, label) {
433
+ if (value !== null && (typeof value !== "string" || !pattern.test(value))) {
434
+ fail(`${label} is invalid`);
435
+ }
436
+ }
437
+ function validateOptionalIntegrity(value, label) {
438
+ if (value !== null && (typeof value !== "string" || !/^sha512-[A-Za-z0-9+/=]+$/.test(value))) {
439
+ fail(`${label} is invalid`);
440
+ }
441
+ }
442
+ function fail(message) {
443
+ throw new Error(`Invalid Brandlab release authority: ${message}.`);
444
+ }
445
+ //# sourceMappingURL=release-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-manifest.js","sourceRoot":"","sources":["../src/release-manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Deprecated / dead structured-data rules (Brandlab Project Standard §4).
3
+ *
4
+ * Google has retired these result types; the markup earns nothing and adds
5
+ * maintenance weight, so Brandlab projects must not emit it:
6
+ * - Sitelinks search box (SearchAction): retired November 2024.
7
+ * - HowTo rich results: retired 2023.
8
+ * - speakable: news-oriented beta with no local-service surface.
9
+ *
10
+ * Self-serving Review/AggregateRating emission is covered separately by
11
+ * BRANDLAB_LOCATION_FORBIDDEN_SOURCE_PATTERNS. FAQPage markup is permitted
12
+ * but optional (feature retired 2026-05-07) — FAQ content itself remains a
13
+ * page-type requirement and must be server-rendered.
14
+ *
15
+ * Run via the shared scanner:
16
+ * findForbiddenBrandlabPatterns({
17
+ * roots: ['src'],
18
+ * patterns: BRANDLAB_DEPRECATED_SCHEMA_SOURCE_PATTERNS,
19
+ * })
20
+ * and assert zero matches. Patterns target emission/plumbing sites, not
21
+ * prose or comments.
22
+ */
23
+ import type { SourcePattern } from "./vitest.js";
24
+ export declare const BRANDLAB_DEPRECATED_SCHEMA_SOURCE_PATTERNS: readonly SourcePattern[];
25
+ //# sourceMappingURL=schema-hygiene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-hygiene.d.ts","sourceRoot":"","sources":["../src/schema-hygiene.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,0CAA0C,EAAE,SAAS,aAAa,EAiB9E,CAAC"}
@@ -0,0 +1,19 @@
1
+ export const BRANDLAB_DEPRECATED_SCHEMA_SOURCE_PATTERNS = [
2
+ {
3
+ name: "sitelinks search box markup (retired by Google, Nov 2024)",
4
+ pattern: /['"]@type['"]\s*:\s*['"]SearchAction['"]/,
5
+ },
6
+ {
7
+ name: "HowTo schema emission (retired by Google, 2023)",
8
+ pattern: /['"]@type['"]\s*:\s*['"]HowTo['"]/,
9
+ },
10
+ {
11
+ name: "HowTo schema builder (retired by Google, 2023)",
12
+ pattern: /\b(?:generate|build)HowToSchema\b/,
13
+ },
14
+ {
15
+ name: "speakable markup emission (news-only beta)",
16
+ pattern: /\bspeakable\s*:\s*\{/,
17
+ },
18
+ ];
19
+ //# sourceMappingURL=schema-hygiene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-hygiene.js","sourceRoot":"","sources":["../src/schema-hygiene.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,MAAM,0CAA0C,GAA6B;IAClF;QACE,IAAI,EAAE,2DAA2D;QACjE,OAAO,EAAE,0CAA0C;KACpD;IACD;QACE,IAAI,EAAE,iDAAiD;QACvD,OAAO,EAAE,mCAAmC;KAC7C;IACD;QACE,IAAI,EAAE,gDAAgD;QACtD,OAAO,EAAE,mCAAmC;KAC7C;IACD;QACE,IAAI,EAAE,4CAA4C;QAClD,OAAO,EAAE,sBAAsB;KAChC;CACF,CAAC"}
package/dist/vitest.d.ts CHANGED
@@ -16,11 +16,14 @@ export interface SourcePatternMatch {
16
16
  export interface PackageJsonLike {
17
17
  dependencies?: Record<string, string>;
18
18
  devDependencies?: Record<string, string>;
19
+ scripts?: Record<string, string>;
20
+ engines?: Record<string, string>;
21
+ packageManager?: string;
19
22
  }
20
23
  export interface SharedPackageVersionIssue {
21
24
  packageName: string;
22
25
  installedVersion: string | null;
23
- issue: 'missing' | 'mismatch' | 'not-exact';
26
+ issue: "missing" | "mismatch" | "not-exact";
24
27
  }
25
28
  export interface NpmDistTagIssue {
26
29
  packageName: string;
@@ -28,15 +31,22 @@ export interface NpmDistTagIssue {
28
31
  expectedVersion: string;
29
32
  actualVersion: string | null;
30
33
  }
31
- export type BrandlabArchitectureProfile = 'dynamic-data-driven' | 'root-level-data-driven' | 'static-route-heavy-legacy';
32
- export type BrandlabArchitectureStatus = 'standard' | 'legacy-exception';
34
+ export type BrandlabArchitectureProfile = "dynamic-data-driven" | "root-level-data-driven" | "static-route-heavy-legacy";
35
+ export type BrandlabArchitectureStatus = "standard" | "legacy-exception";
33
36
  export interface BrandlabArchitectureConfigLike {
34
37
  profile?: string;
35
38
  status?: string;
36
39
  targetProfile?: string;
37
40
  migrationRationale?: string;
38
41
  staticRouteFileLimit?: number;
39
- routeFamilies?: readonly unknown[];
42
+ largeRouteFileLineLimit?: number;
43
+ routeFileContentCharLimit?: number;
44
+ routeFamilies?: readonly {
45
+ name?: string;
46
+ model?: string;
47
+ route?: string;
48
+ dataSource?: string;
49
+ }[];
40
50
  contentOwnership?: {
41
51
  routeFiles?: string;
42
52
  pageData?: string;
@@ -56,8 +66,9 @@ export interface BrandlabArchitectureConfigLike {
56
66
  }
57
67
  export interface BrandlabArchitectureIssue {
58
68
  code: string;
59
- severity: 'error' | 'warning' | 'legacy-accepted';
69
+ severity: "error" | "warning" | "legacy-accepted";
60
70
  detail: string;
71
+ fix?: string;
61
72
  path?: string;
62
73
  }
63
74
  export interface BrandlabArchitectureReport {
@@ -94,5 +105,6 @@ export declare function evaluateBrandlabArchitecture(options: {
94
105
  root: string;
95
106
  architecture?: BrandlabArchitectureConfigLike | null;
96
107
  largeRouteFileLineLimit?: number;
108
+ routeFileContentCharLimit?: number;
97
109
  }): BrandlabArchitectureReport;
98
110
  //# sourceMappingURL=vitest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"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"}