@ploaness/governance 1.0.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/LICENSE +21 -0
- package/README.md +13 -0
- package/dist/access-boundary.d.ts +41 -0
- package/dist/access-boundary.d.ts.map +1 -0
- package/dist/access-boundary.js +26 -0
- package/dist/access-boundary.js.map +1 -0
- package/dist/agent-references.d.ts +12 -0
- package/dist/agent-references.d.ts.map +1 -0
- package/dist/agent-references.js +53 -0
- package/dist/agent-references.js.map +1 -0
- package/dist/architecture-layers.d.ts +11 -0
- package/dist/architecture-layers.d.ts.map +1 -0
- package/dist/architecture-layers.js +47 -0
- package/dist/architecture-layers.js.map +1 -0
- package/dist/asset-policy.d.ts +138 -0
- package/dist/asset-policy.d.ts.map +1 -0
- package/dist/asset-policy.js +312 -0
- package/dist/asset-policy.js.map +1 -0
- package/dist/banned-typography.d.ts +13 -0
- package/dist/banned-typography.d.ts.map +1 -0
- package/dist/banned-typography.js +78 -0
- package/dist/banned-typography.js.map +1 -0
- package/dist/bundle-budget.d.ts +16 -0
- package/dist/bundle-budget.d.ts.map +1 -0
- package/dist/bundle-budget.js +37 -0
- package/dist/bundle-budget.js.map +1 -0
- package/dist/commit-message.d.ts +37 -0
- package/dist/commit-message.d.ts.map +1 -0
- package/dist/commit-message.js +144 -0
- package/dist/commit-message.js.map +1 -0
- package/dist/config-references.d.ts +17 -0
- package/dist/config-references.d.ts.map +1 -0
- package/dist/config-references.js +54 -0
- package/dist/config-references.js.map +1 -0
- package/dist/container-failure.d.ts +40 -0
- package/dist/container-failure.d.ts.map +1 -0
- package/dist/container-failure.js +154 -0
- package/dist/container-failure.js.map +1 -0
- package/dist/container-files.d.ts +36 -0
- package/dist/container-files.d.ts.map +1 -0
- package/dist/container-files.js +74 -0
- package/dist/container-files.js.map +1 -0
- package/dist/container-freshness.d.ts +102 -0
- package/dist/container-freshness.d.ts.map +1 -0
- package/dist/container-freshness.js +129 -0
- package/dist/container-freshness.js.map +1 -0
- package/dist/dependency-freshness.d.ts +129 -0
- package/dist/dependency-freshness.d.ts.map +1 -0
- package/dist/dependency-freshness.js +161 -0
- package/dist/dependency-freshness.js.map +1 -0
- package/dist/doc-blocks.d.ts +13 -0
- package/dist/doc-blocks.d.ts.map +1 -0
- package/dist/doc-blocks.js +75 -0
- package/dist/doc-blocks.js.map +1 -0
- package/dist/document-references.d.ts +44 -0
- package/dist/document-references.d.ts.map +1 -0
- package/dist/document-references.js +94 -0
- package/dist/document-references.js.map +1 -0
- package/dist/editorconfig-policy.d.ts +24 -0
- package/dist/editorconfig-policy.d.ts.map +1 -0
- package/dist/editorconfig-policy.js +106 -0
- package/dist/editorconfig-policy.js.map +1 -0
- package/dist/environment-files.d.ts +42 -0
- package/dist/environment-files.d.ts.map +1 -0
- package/dist/environment-files.js +76 -0
- package/dist/environment-files.js.map +1 -0
- package/dist/file-roles.d.ts +39 -0
- package/dist/file-roles.d.ts.map +1 -0
- package/dist/file-roles.js +82 -0
- package/dist/file-roles.js.map +1 -0
- package/dist/generated-denial.d.ts +42 -0
- package/dist/generated-denial.d.ts.map +1 -0
- package/dist/generated-denial.js +87 -0
- package/dist/generated-denial.js.map +1 -0
- package/dist/history-policy.d.ts +32 -0
- package/dist/history-policy.d.ts.map +1 -0
- package/dist/history-policy.js +50 -0
- package/dist/history-policy.js.map +1 -0
- package/dist/image-assets.d.ts +14 -0
- package/dist/image-assets.d.ts.map +1 -0
- package/dist/image-assets.js +205 -0
- package/dist/image-assets.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/install-policy.d.ts +35 -0
- package/dist/install-policy.d.ts.map +1 -0
- package/dist/install-policy.js +61 -0
- package/dist/install-policy.js.map +1 -0
- package/dist/json-shapes.d.ts +86 -0
- package/dist/json-shapes.d.ts.map +1 -0
- package/dist/json-shapes.js +124 -0
- package/dist/json-shapes.js.map +1 -0
- package/dist/license-allowlist.d.ts +15 -0
- package/dist/license-allowlist.d.ts.map +1 -0
- package/dist/license-allowlist.js +157 -0
- package/dist/license-allowlist.js.map +1 -0
- package/dist/network-policy.d.ts +69 -0
- package/dist/network-policy.d.ts.map +1 -0
- package/dist/network-policy.js +173 -0
- package/dist/network-policy.js.map +1 -0
- package/dist/paired-assets.d.ts +34 -0
- package/dist/paired-assets.d.ts.map +1 -0
- package/dist/paired-assets.js +63 -0
- package/dist/paired-assets.js.map +1 -0
- package/dist/payload-access.d.ts +9 -0
- package/dist/payload-access.d.ts.map +1 -0
- package/dist/payload-access.js +168 -0
- package/dist/payload-access.js.map +1 -0
- package/dist/payload-policy.d.ts +18 -0
- package/dist/payload-policy.d.ts.map +1 -0
- package/dist/payload-policy.js +124 -0
- package/dist/payload-policy.js.map +1 -0
- package/dist/payload-source.d.ts +29 -0
- package/dist/payload-source.d.ts.map +1 -0
- package/dist/payload-source.js +84 -0
- package/dist/payload-source.js.map +1 -0
- package/dist/release-age.d.ts +23 -0
- package/dist/release-age.d.ts.map +1 -0
- package/dist/release-age.js +38 -0
- package/dist/release-age.js.map +1 -0
- package/dist/request-limits.d.ts +39 -0
- package/dist/request-limits.d.ts.map +1 -0
- package/dist/request-limits.js +57 -0
- package/dist/request-limits.js.map +1 -0
- package/dist/run-plan.d.ts +32 -0
- package/dist/run-plan.d.ts.map +1 -0
- package/dist/run-plan.js +43 -0
- package/dist/run-plan.js.map +1 -0
- package/dist/run-policy.d.ts +32 -0
- package/dist/run-policy.d.ts.map +1 -0
- package/dist/run-policy.js +37 -0
- package/dist/run-policy.js.map +1 -0
- package/dist/secret-policy.d.ts +13 -0
- package/dist/secret-policy.d.ts.map +1 -0
- package/dist/secret-policy.js +69 -0
- package/dist/secret-policy.js.map +1 -0
- package/dist/settings-layering.d.ts +45 -0
- package/dist/settings-layering.d.ts.map +1 -0
- package/dist/settings-layering.js +134 -0
- package/dist/settings-layering.js.map +1 -0
- package/dist/settings.d.ts +238 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +378 -0
- package/dist/settings.js.map +1 -0
- package/dist/skill-manifest.d.ts +18 -0
- package/dist/skill-manifest.d.ts.map +1 -0
- package/dist/skill-manifest.js +125 -0
- package/dist/skill-manifest.js.map +1 -0
- package/dist/source-text.d.ts +83 -0
- package/dist/source-text.d.ts.map +1 -0
- package/dist/source-text.js +310 -0
- package/dist/source-text.js.map +1 -0
- package/dist/suppression-ceiling.d.ts +48 -0
- package/dist/suppression-ceiling.d.ts.map +1 -0
- package/dist/suppression-ceiling.js +115 -0
- package/dist/suppression-ceiling.js.map +1 -0
- package/dist/tailwind-tokens.d.ts +16 -0
- package/dist/tailwind-tokens.d.ts.map +1 -0
- package/dist/tailwind-tokens.js +70 -0
- package/dist/tailwind-tokens.js.map +1 -0
- package/dist/text-escapes.d.ts +7 -0
- package/dist/text-escapes.d.ts.map +1 -0
- package/dist/text-escapes.js +14 -0
- package/dist/text-escapes.js.map +1 -0
- package/dist/toolchain-pins.d.ts +42 -0
- package/dist/toolchain-pins.d.ts.map +1 -0
- package/dist/toolchain-pins.js +99 -0
- package/dist/toolchain-pins.js.map +1 -0
- package/dist/url-safety.d.ts +12 -0
- package/dist/url-safety.d.ts.map +1 -0
- package/dist/url-safety.js +58 -0
- package/dist/url-safety.js.map +1 -0
- package/dist/version-policy.d.ts +99 -0
- package/dist/version-policy.d.ts.map +1 -0
- package/dist/version-policy.js +306 -0
- package/dist/version-policy.js.map +1 -0
- package/dist/vulnerability-policy.d.ts +66 -0
- package/dist/vulnerability-policy.d.ts.map +1 -0
- package/dist/vulnerability-policy.js +106 -0
- package/dist/vulnerability-policy.js.map +1 -0
- package/dist/wiring-policy.d.ts +226 -0
- package/dist/wiring-policy.d.ts.map +1 -0
- package/dist/wiring-policy.js +458 -0
- package/dist/wiring-policy.js.map +1 -0
- package/dist/wiring-violation.d.ts +6 -0
- package/dist/wiring-violation.d.ts.map +1 -0
- package/dist/wiring-violation.js +8 -0
- package/dist/wiring-violation.js.map +1 -0
- package/dist/workspace-policy.d.ts +177 -0
- package/dist/workspace-policy.d.ts.map +1 -0
- package/dist/workspace-policy.js +228 -0
- package/dist/workspace-policy.js.map +1 -0
- package/dist/yaml-blocks.d.ts +43 -0
- package/dist/yaml-blocks.d.ts.map +1 -0
- package/dist/yaml-blocks.js +87 -0
- package/dist/yaml-blocks.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-layering.d.ts","sourceRoot":"","sources":["../src/settings-layering.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,iBAAiB,EAAmB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AA8DtF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAUxB,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,eAAe,GAC1B,YAAY,MAAM,EAClB,OAAO,iBAAiB,KACvB,iBAaF,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,kBAAkB,GAC7B,iBAAiB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,QAGD,CAAA"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// How a member's settings sit on top of the repository's.
|
|
2
|
+
//
|
|
3
|
+
// A workspace declares some facts once and some per package. Which is which is not uniform, and reading
|
|
4
|
+
// it wrong is silent either way: concatenating two `pretest` commands would run a mangled argv, while
|
|
5
|
+
// letting a member REPLACE `sourceRoots` would narrow the scope the harness refuses to narrow.
|
|
6
|
+
//
|
|
7
|
+
// Layering happens on the RAW blocks, before any default is applied. Merging defaulted objects instead
|
|
8
|
+
// would make "declared nothing" indistinguishable from "declared exactly the default", so a repository
|
|
9
|
+
// that declared a stricter bundle budget would be silently overwritten by every member that declared
|
|
10
|
+
// none.
|
|
11
|
+
import { asRecord, isArray } from './json-shapes.js';
|
|
12
|
+
import { readRawSettings } from './settings.js';
|
|
13
|
+
/** Keys where a member ADDS to what the repository declared, the way `sourceRoots` always has. */
|
|
14
|
+
const ADDITIVE = new Set([
|
|
15
|
+
'sourceRoots',
|
|
16
|
+
'unmanagedAssets',
|
|
17
|
+
'typographyExclusions',
|
|
18
|
+
'javascriptAllowlist',
|
|
19
|
+
'coverageExclude',
|
|
20
|
+
'vulnerabilityAllowlist',
|
|
21
|
+
'secretAllowlist',
|
|
22
|
+
'publicAccess',
|
|
23
|
+
'auxiliaryServers',
|
|
24
|
+
'accessibilitySkipRoutes',
|
|
25
|
+
'frameworkGlue',
|
|
26
|
+
'pureLogicRoots',
|
|
27
|
+
]);
|
|
28
|
+
// Keys where only a smaller number is honoured. A member may hold itself to more than the repository
|
|
29
|
+
// asked for and never to less, which is the same direction `readSettings` already clamps the shipped
|
|
30
|
+
// defaults in.
|
|
31
|
+
const STRICTEST_NUMBER = new Set([
|
|
32
|
+
'accessibilityRouteBudget',
|
|
33
|
+
'bundleBudgetBytes',
|
|
34
|
+
'maxSuppressions',
|
|
35
|
+
]);
|
|
36
|
+
/** Keys that are one value describing one package, where the member's answer replaces the repository's. */
|
|
37
|
+
const REPLACED = new Set([
|
|
38
|
+
'pretest',
|
|
39
|
+
'testWrapper',
|
|
40
|
+
'serverUrl',
|
|
41
|
+
'vulnerabilitySeverity',
|
|
42
|
+
]);
|
|
43
|
+
const mergeArrays = (base, overlay) => [
|
|
44
|
+
...(isArray(base) ? base : []),
|
|
45
|
+
...(isArray(overlay) ? overlay : []),
|
|
46
|
+
];
|
|
47
|
+
const smaller = (base, overlay) => {
|
|
48
|
+
if (typeof base !== 'number') {
|
|
49
|
+
return overlay;
|
|
50
|
+
}
|
|
51
|
+
return typeof overlay === 'number' ? Math.min(base, overlay) : base;
|
|
52
|
+
};
|
|
53
|
+
const mergeValue = (key, base, overlay) => {
|
|
54
|
+
if (ADDITIVE.has(key)) {
|
|
55
|
+
return mergeArrays(base, overlay);
|
|
56
|
+
}
|
|
57
|
+
if (STRICTEST_NUMBER.has(key)) {
|
|
58
|
+
return smaller(base, overlay);
|
|
59
|
+
}
|
|
60
|
+
if (REPLACED.has(key)) {
|
|
61
|
+
return overlay ?? base;
|
|
62
|
+
}
|
|
63
|
+
// Everything else is a record of independent entries - `analysisEnv` is the only one today - where a
|
|
64
|
+
// member naming a variable the repository did not should keep both.
|
|
65
|
+
return { ...asRecord(base), ...asRecord(overlay) };
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Fold a member's raw settings block onto the repository's.
|
|
69
|
+
* @param base the repository's raw block.
|
|
70
|
+
* @param overlay the member's raw block.
|
|
71
|
+
* @returns one raw block, still undefaulted.
|
|
72
|
+
*/
|
|
73
|
+
export const layerSettingBlocks = (base, overlay) => {
|
|
74
|
+
const keys = new Set([...Object.keys(base), ...Object.keys(overlay)]);
|
|
75
|
+
return Object.fromEntries([...keys].map((key) => [
|
|
76
|
+
key,
|
|
77
|
+
Object.hasOwn(base, key) && Object.hasOwn(overlay, key)
|
|
78
|
+
? mergeValue(key, base[key], overlay[key])
|
|
79
|
+
: (base[key] ?? overlay[key]),
|
|
80
|
+
]));
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Move a member's exclusion into the repository's path space.
|
|
84
|
+
*
|
|
85
|
+
* The gates that walk the tracked tree run once, at the repository root, while a member declares its
|
|
86
|
+
* exclusions relative to itself. `^src/generated/` written inside `apps/web` therefore matches nothing
|
|
87
|
+
* when the repository-scope gate walks past `apps/web/src/generated/`, and a generated directory a
|
|
88
|
+
* project correctly excused starts failing the typography ban.
|
|
89
|
+
*
|
|
90
|
+
* An UNANCHORED pattern is left alone, deliberately. `importMap\.js$` already matches at any depth, and
|
|
91
|
+
* prefixing it would narrow it to one member - so the rule errs toward a pattern that matches too much
|
|
92
|
+
* at repository scope rather than one that silently stops matching. Too wide is the safe direction here:
|
|
93
|
+
* a repository-scope gate that skips one extra path reports one fewer finding, while a narrowed pattern
|
|
94
|
+
* reports a project for a file it had already accounted for.
|
|
95
|
+
* @param memberPath the member's repo-relative path, `.` for the member at the root.
|
|
96
|
+
* @param entry the exclusion as the member declared it.
|
|
97
|
+
* @returns the exclusion as the repository-scope gates must read it.
|
|
98
|
+
*/
|
|
99
|
+
export const rebaseExclusion = (memberPath, entry) => {
|
|
100
|
+
if (memberPath === '.') {
|
|
101
|
+
return entry;
|
|
102
|
+
}
|
|
103
|
+
if (entry.kind === 'route') {
|
|
104
|
+
return entry;
|
|
105
|
+
}
|
|
106
|
+
if (entry.kind === 'glob') {
|
|
107
|
+
return { ...entry, pattern: `${memberPath}/${entry.pattern}` };
|
|
108
|
+
}
|
|
109
|
+
return entry.pattern.startsWith('^')
|
|
110
|
+
? { ...entry, pattern: `^${memberPath}/${entry.pattern.slice(1)}` }
|
|
111
|
+
: entry;
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* The settings one member runs under.
|
|
115
|
+
*
|
|
116
|
+
* Effective VALUES are layered - a member inherits the repository's source roots, its typography
|
|
117
|
+
* exclusions, its floor. `declaredExclusions` is not, and that asymmetry is the point: it is the list of
|
|
118
|
+
* decisions THIS package made, and every consumer of it judges the declarer. Layering it made a member
|
|
119
|
+
* answer for the repository's declarations, so a workspace root that correctly excused its Vale detector
|
|
120
|
+
* definitions - whose content IS the character the ban detects - had every member report that exclusion
|
|
121
|
+
* as reaching nothing, because no member contains the file. One correct declaration, two gates failed,
|
|
122
|
+
* and nothing a member could edit would have fixed it.
|
|
123
|
+
*
|
|
124
|
+
* The mirror direction was already handled: `rebaseExclusion` moves a member's exclusion up into the
|
|
125
|
+
* repository's path space. This is the same seam read downward.
|
|
126
|
+
* @param repositoryBlock the raw `ploaness` block of the repository root.
|
|
127
|
+
* @param ownBlock the raw `ploaness` block of the member itself.
|
|
128
|
+
* @returns the member's settings, inheriting values and owning declarations.
|
|
129
|
+
*/
|
|
130
|
+
export const readMemberSettings = (repositoryBlock, ownBlock) => ({
|
|
131
|
+
...readRawSettings(layerSettingBlocks(repositoryBlock, ownBlock)),
|
|
132
|
+
declaredExclusions: readRawSettings(ownBlock).declaredExclusions,
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=settings-layering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-layering.js","sourceRoot":"","sources":["../src/settings-layering.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,wGAAwG;AACxG,sGAAsG;AACtG,+FAA+F;AAC/F,EAAE;AACF,uGAAuG;AACvG,uGAAuG;AACvG,qGAAqG;AACrG,QAAQ;AACR,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAA0B,eAAe,EAAiB,MAAM,eAAe,CAAA;AAEtF,kGAAkG;AAClG,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAS;IACpD,aAAa;IACb,iBAAiB;IACjB,sBAAsB;IACtB,qBAAqB;IACrB,iBAAiB;IACjB,wBAAwB;IACxB,iBAAiB;IACjB,cAAc;IACd,kBAAkB;IAClB,yBAAyB;IACzB,eAAe;IACf,gBAAgB;CACjB,CAAC,CAAA;AAEF,qGAAqG;AACrG,qGAAqG;AACrG,eAAe;AACf,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAS;IAC5D,0BAA0B;IAC1B,mBAAmB;IACnB,iBAAiB;CAClB,CAAC,CAAA;AAEF,2GAA2G;AAC3G,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAS;IACpD,SAAS;IACT,aAAa;IACb,WAAW;IACX,uBAAuB;CACxB,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG,CAAC,IAAa,EAAE,OAAgB,EAAW,EAAE,CAAC;IAChE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;CACrC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,OAAgB,EAAW,EAAE;IAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACrE,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,IAAa,EAAE,OAAgB,EAAW,EAAE;IAC3E,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC;IACD,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC/B,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,OAAO,IAAI,IAAI,CAAA;IACxB,CAAC;IACD,qGAAqG;IACrG,oEAAoE;IACpE,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAA;AACpD,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAA6B,EAC7B,OAAgC,EACP,EAAE;IAC3B,MAAM,IAAI,GAAwB,IAAI,GAAG,CAAS,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAClG,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAW,EAA8B,EAAE,CAAC;QACzD,GAAG;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC;YACrD,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;KAChC,CAAC,CACH,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,UAAkB,EAClB,KAAwB,EACL,EAAE;IACrB,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAA;IAChE,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAClC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACnE,CAAC,CAAC,KAAK,CAAA;AACX,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,eAAwC,EACxC,QAAiC,EACvB,EAAE,CAAC,CAAC;IACd,GAAG,eAAe,CAAC,kBAAkB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IACjE,kBAAkB,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,kBAAkB;CACjE,CAAC,CAAA"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import type { SecretException } from './secret-policy.js';
|
|
2
|
+
import type { VulnerabilityException } from './vulnerability-policy.js';
|
|
3
|
+
/**
|
|
4
|
+
* How a declared exclusion's pattern is matched against a path. The settings that carry each kind know
|
|
5
|
+
* it at the point they are read, which is the only place the answer is not a guess: `^\.vale/styles/`
|
|
6
|
+
* and `src/app/**` are both plausible-looking strings and neither matches under the other's rules.
|
|
7
|
+
*/
|
|
8
|
+
export type ExclusionKind = 'regex' | 'glob' | 'route';
|
|
9
|
+
/** One exclusion a project declared, and the file role it claims. */
|
|
10
|
+
export interface DeclaredExclusion {
|
|
11
|
+
/** Which setting it came from, so a finding can name it. */
|
|
12
|
+
readonly setting: string;
|
|
13
|
+
readonly pattern: string;
|
|
14
|
+
readonly reason: string;
|
|
15
|
+
readonly kind: ExclusionKind;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* One anonymous permission a project grants on purpose, with the reason it does.
|
|
19
|
+
*
|
|
20
|
+
* The managed access-boundary sweep asks the running application what it grants an unauthenticated
|
|
21
|
+
* caller and fails on what it finds. Some grants are the point of the site - a published page a
|
|
22
|
+
* stranger must be able to read, a contact form a stranger must be able to submit - so a project
|
|
23
|
+
* records those here and the sweep passes them. An entry missing any field is dropped, which restores
|
|
24
|
+
* the finding rather than widening the sweep, which is the safe direction to fail in.
|
|
25
|
+
*/
|
|
26
|
+
export interface PublicAccess {
|
|
27
|
+
/** The collection or global slug, as Payload itself reports it. */
|
|
28
|
+
readonly entity: string;
|
|
29
|
+
/** The operation granted: create, read, update, or delete. */
|
|
30
|
+
readonly operation: string;
|
|
31
|
+
readonly reason: string;
|
|
32
|
+
}
|
|
33
|
+
/** A managed path a project has taken over from the catalogue, with the reason it did so. */
|
|
34
|
+
export interface UnmanagedAsset {
|
|
35
|
+
readonly path: string;
|
|
36
|
+
readonly reason: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A server the project's own end-to-end specs need beside the application under test.
|
|
40
|
+
*
|
|
41
|
+
* It carries no `reason`, unlike an exclusion. An exclusion without one is dropped because a dropped
|
|
42
|
+
* exclusion widens what a gate judges, which is the safe direction to fail in; a dropped server would
|
|
43
|
+
* instead leave a spec failing against a port nothing is listening on, which is a confusing failure
|
|
44
|
+
* rather than a strict one. This is a fact ploaness cannot know, like {@link Settings.serverUrl}, not a
|
|
45
|
+
* carve-out the project has to justify.
|
|
46
|
+
*/
|
|
47
|
+
export interface AuxiliaryServer {
|
|
48
|
+
/** The command that starts it, as Playwright takes it: one string rather than an argv list. */
|
|
49
|
+
readonly command: string;
|
|
50
|
+
/** The origin Playwright waits for before the suite starts. */
|
|
51
|
+
readonly url: string;
|
|
52
|
+
/**
|
|
53
|
+
* The directory to start it in, relative to the member under test.
|
|
54
|
+
*
|
|
55
|
+
* A sibling application is started from its own package, not from the one being tested. Without this
|
|
56
|
+
* the only way to say so was a `cd` inside the command, which then resolves the framework binary from
|
|
57
|
+
* the wrong package's `.bin` - correct exactly while the two packages pin the same version.
|
|
58
|
+
*/
|
|
59
|
+
readonly cwd?: string;
|
|
60
|
+
}
|
|
61
|
+
/** The parameters a consuming project may declare under the `ploaness` key of its package.json. */
|
|
62
|
+
export interface Settings {
|
|
63
|
+
/** Directories holding first-party source, used by the convention and coverage gates. */
|
|
64
|
+
readonly sourceRoots: readonly string[];
|
|
65
|
+
/** Managed paths the project owns instead, each with a recorded reason. */
|
|
66
|
+
readonly unmanagedAssets: readonly UnmanagedAsset[];
|
|
67
|
+
/** Repo-relative path patterns exempt from the typography ban (generated files only). */
|
|
68
|
+
readonly typographyExclusions: readonly string[];
|
|
69
|
+
/**
|
|
70
|
+
* Paths holding framework-generated scaffolding, which the lint pass relaxes rather than judges.
|
|
71
|
+
*
|
|
72
|
+
* The relaxation set is real and correct; expressing it only as `src/app/(payload)/**` made it
|
|
73
|
+
* unreachable for anything else. A Next application that is not a Payload one has route handlers and
|
|
74
|
+
* layouts with exactly the same property - written by a framework to a shape a project does not
|
|
75
|
+
* choose - and no way to say so. Additive to the Payload paths, so declaring nothing keeps the
|
|
76
|
+
* contract a Payload project already had.
|
|
77
|
+
*/
|
|
78
|
+
readonly frameworkGlue: readonly string[];
|
|
79
|
+
/**
|
|
80
|
+
* Paths a generator owns, which no rule may judge and no agent may edit.
|
|
81
|
+
*
|
|
82
|
+
* The default names where Payload puts them in a stock installation. Payload lets a project mount its
|
|
83
|
+
* admin panel elsewhere, and one that does had every one of these rules miss: the import map was
|
|
84
|
+
* denied to nobody, diffed by nothing, handed to the formatter, and then linted as hand-written
|
|
85
|
+
* source - which is how a generated file full of hash-suffixed identifiers came to be told to rename
|
|
86
|
+
* them. Additive, so a stock installation declares nothing.
|
|
87
|
+
*/
|
|
88
|
+
readonly generatedArtefacts: readonly string[];
|
|
89
|
+
/**
|
|
90
|
+
* Directories that form the pure-logic floor: they may depend on nothing else under the source root.
|
|
91
|
+
*
|
|
92
|
+
* The architecture contract calls the layer map "the one genuinely project-shaped part" and then
|
|
93
|
+
* hard-coded it to `src/access` and `src/lib`. A project placing pure logic elsewhere had no way to
|
|
94
|
+
* state that without owning a forbidden file. Additive, so the shipped floor still holds.
|
|
95
|
+
*/
|
|
96
|
+
readonly pureLogicRoots: readonly string[];
|
|
97
|
+
/** Every exclusion the project declared, honoured or not, so a gate can judge them. */
|
|
98
|
+
readonly declaredExclusions: readonly DeclaredExclusion[];
|
|
99
|
+
/** Repo-relative path patterns exempt from the hand-written-JavaScript ban. */
|
|
100
|
+
readonly javascriptAllowlist: readonly string[];
|
|
101
|
+
/** Glob patterns excluded from coverage measurement, by role rather than by convenience. */
|
|
102
|
+
readonly coverageExclude: readonly string[];
|
|
103
|
+
/** Ceiling for total gzipped client JavaScript, in bytes. */
|
|
104
|
+
readonly bundleBudgetBytes: number;
|
|
105
|
+
/** A stricter suppression ceiling than the earned one, or undefined to accept the earned ceiling. */
|
|
106
|
+
readonly maxSuppressions: number | undefined;
|
|
107
|
+
/** A stricter advisory severity than the shipped one, or undefined to accept the shipped one. */
|
|
108
|
+
readonly vulnerabilitySeverity: string | undefined;
|
|
109
|
+
/** Recorded exceptions for advisories the project cannot reach. */
|
|
110
|
+
readonly vulnerabilityAllowlist: readonly VulnerabilityException[];
|
|
111
|
+
/** Committed fake credentials the secret scan excuses, each with the reason it is committed. */
|
|
112
|
+
readonly secretAllowlist: readonly SecretException[];
|
|
113
|
+
/** Anonymous permissions the project grants deliberately, each with the reason it does. */
|
|
114
|
+
readonly publicAccess: readonly PublicAccess[];
|
|
115
|
+
/**
|
|
116
|
+
* A command run once before the test and end-to-end gates, as argv. A Payload project needs a database
|
|
117
|
+
* before its suite can boot, and how it obtains one (a compose service, a managed instance, an
|
|
118
|
+
* ephemeral schema) is a fact ploaness cannot know. Declaring it does not weaken a rule: the gates and
|
|
119
|
+
* their thresholds are unchanged, only the way the project reaches its database.
|
|
120
|
+
*/
|
|
121
|
+
readonly pretest: readonly string[];
|
|
122
|
+
/** An argv prefix wrapping the test runner, for a project that runs its suite against a scratch database. */
|
|
123
|
+
readonly testWrapper: readonly string[];
|
|
124
|
+
/**
|
|
125
|
+
* The origin the end-to-end suite drives. The port a project serves on is a fact ploaness cannot
|
|
126
|
+
* know, and naming it weakens no rule: the suite, its browser and its assertions are unchanged.
|
|
127
|
+
*/
|
|
128
|
+
readonly serverUrl: string;
|
|
129
|
+
/**
|
|
130
|
+
* Servers the end-to-end run starts beside the application, for a project whose own specs drive one.
|
|
131
|
+
* The application under test is unchanged, and so is every rule applied to it: a declared server is
|
|
132
|
+
* added to the run rather than substituted for it, and the pinned accessibility sweep still drives
|
|
133
|
+
* {@link Settings.serverUrl}. Which auxiliary process a project's specs need is a fact ploaness
|
|
134
|
+
* cannot know, and the re-exported Playwright config leaves the project no other way to say so.
|
|
135
|
+
*/
|
|
136
|
+
readonly auxiliaryServers: readonly AuxiliaryServer[];
|
|
137
|
+
/**
|
|
138
|
+
* Route prefixes the accessibility crawl must not follow, on top of the ones every Payload project
|
|
139
|
+
* carries. A project that mounts its admin panel elsewhere has to say so or the crawl walks into it.
|
|
140
|
+
*/
|
|
141
|
+
readonly accessibilitySkipRoutes: readonly string[];
|
|
142
|
+
/**
|
|
143
|
+
* How many routes the accessibility sweep may discover before it stops and fails.
|
|
144
|
+
*
|
|
145
|
+
* A ceiling on the sweep's cost, not a statement about the site. It is honoured only downward: a
|
|
146
|
+
* project may hold itself to a smaller crawl, and none may buy a pass by declaring a larger one.
|
|
147
|
+
*/
|
|
148
|
+
readonly accessibilityRouteBudget: number;
|
|
149
|
+
/**
|
|
150
|
+
* Placeholder environment supplied to the gates that must IMPORT the project to analyse it. A Payload
|
|
151
|
+
* config validates `process.env` at module scope, so a purely static analyser cannot load it in a bare
|
|
152
|
+
* shell. These values are never connected to and never read as real configuration; they only let the
|
|
153
|
+
* module evaluate. Declaring one weakens no rule, and a gate that actually runs the application
|
|
154
|
+
* (`build`, `tests`, `e2e`) ignores this and uses the real environment.
|
|
155
|
+
*/
|
|
156
|
+
readonly analysisEnv: Readonly<Record<string, string>>;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* The directories a project holds first-party source in unless it says otherwise.
|
|
160
|
+
*
|
|
161
|
+
* Exported because `config-references.ts` built its own alternation out of the same names, and a
|
|
162
|
+
* project that declared an extra source root got its config carve-outs left unchecked while the two
|
|
163
|
+
* lists drifted apart in silence.
|
|
164
|
+
*/
|
|
165
|
+
export declare const DEFAULT_SOURCE_ROOTS: readonly string[];
|
|
166
|
+
/**
|
|
167
|
+
* The files the coverage report measures. Declared here rather than in the Vitest config because two
|
|
168
|
+
* things need to agree about it: the config that produces the report, and the rule that judges whether
|
|
169
|
+
* a declared exclusion reaches anything the report measured. Two literals that must stay equal will not.
|
|
170
|
+
*/
|
|
171
|
+
export declare const COVERAGE_INCLUDE: readonly string[];
|
|
172
|
+
/**
|
|
173
|
+
* Read the `ploaness` key of a parsed package.json into a fully defaulted settings object. A malformed
|
|
174
|
+
* value falls back to the strict default rather than failing the read, so a typo can never widen a rule.
|
|
175
|
+
* @param packageJson the parsed package.json of the consuming project.
|
|
176
|
+
* @returns the effective settings, with every field populated.
|
|
177
|
+
*/
|
|
178
|
+
export declare const readSettings: (packageJson: unknown) => Settings;
|
|
179
|
+
/** The raw `ploaness` block of a manifest, before any default is applied. */
|
|
180
|
+
export declare const ploanessBlock: (packageJson: unknown) => Record<string, unknown>;
|
|
181
|
+
/**
|
|
182
|
+
* Read an already-layered raw settings block into a fully defaulted settings object.
|
|
183
|
+
* @param raw the raw block, after any layering.
|
|
184
|
+
* @returns the effective settings, with every field populated.
|
|
185
|
+
*/
|
|
186
|
+
export declare const readRawSettings: (raw: Record<string, unknown>) => Settings;
|
|
187
|
+
/**
|
|
188
|
+
* Report every declared exclusion the harness cannot honour.
|
|
189
|
+
*
|
|
190
|
+
* This once also refused an entry whose pattern named a single existing file, on the reading that one
|
|
191
|
+
* path is not a role. The governing standard now judges an exclusion by what it REACHES rather than by
|
|
192
|
+
* how specific it looks, and `findUnreachedExclusions` below is that rule. A named file the report
|
|
193
|
+
* measured excludes something; the defect the standard names is an entry that excludes nothing.
|
|
194
|
+
* @param entries the exclusions the project declared.
|
|
195
|
+
* @returns one message per entry that states no role.
|
|
196
|
+
*/
|
|
197
|
+
export declare const findConvenienceExclusions: (entries: readonly DeclaredExclusion[]) => readonly string[];
|
|
198
|
+
/**
|
|
199
|
+
* Report every declared exclusion that matches none of the paths it could have excluded.
|
|
200
|
+
*
|
|
201
|
+
* An exclusion that reaches nothing leaves the report reading exactly as it would have read without it,
|
|
202
|
+
* so it records a decision nobody can see the effect of - and it outlives the file it was written for,
|
|
203
|
+
* which is how a stale carve-out survives the rename that made it meaningless. A route exclusion is
|
|
204
|
+
* skipped: it names a URL the crawl must not follow, and no path in the repository can confirm it.
|
|
205
|
+
* @param entries the exclusions the project declared.
|
|
206
|
+
* @param candidates the repo-relative paths the corresponding gate would otherwise have judged.
|
|
207
|
+
* @returns one message per entry that reaches nothing.
|
|
208
|
+
*/
|
|
209
|
+
export declare const findUnreachedExclusions: (entries: readonly DeclaredExclusion[], candidates: readonly string[]) => readonly string[];
|
|
210
|
+
/**
|
|
211
|
+
* A directory path without its trailing slashes.
|
|
212
|
+
*
|
|
213
|
+
* Written as a recursion rather than as `/\/+$/`, which backtracks super-linearly on a pathological
|
|
214
|
+
* input - a rule this repository holds itself to.
|
|
215
|
+
* @param value the declared path.
|
|
216
|
+
* @returns the same path with every trailing slash removed.
|
|
217
|
+
*/
|
|
218
|
+
export declare const withoutTrailingSlash: (value: string) => string;
|
|
219
|
+
/**
|
|
220
|
+
* Every directory that holds a tracked file, at every depth.
|
|
221
|
+
*
|
|
222
|
+
* Derived from the file list rather than read from disk, so the answer covers exactly what is committed:
|
|
223
|
+
* a directory that exists only in a working tree is not part of the repository a gate judges.
|
|
224
|
+
* @param tracked the repo-relative paths of the tracked files.
|
|
225
|
+
* @returns each containing directory once, without a trailing slash.
|
|
226
|
+
*/
|
|
227
|
+
export declare const trackedDirectories: (tracked: readonly string[]) => readonly string[];
|
|
228
|
+
/**
|
|
229
|
+
* Report every declared exclusion that reaches none of the paths ITS OWN setting could have excluded.
|
|
230
|
+
*
|
|
231
|
+
* A composition over `findUnreachedExclusions`: it groups the entries by setting and hands each group
|
|
232
|
+
* the candidate set that setting governs, so a caller supplies the tracked file list and nothing else.
|
|
233
|
+
* @param entries the exclusions the project declared, across every setting.
|
|
234
|
+
* @param tracked the repo-relative paths of the tracked files.
|
|
235
|
+
* @returns one message per entry that reaches nothing.
|
|
236
|
+
*/
|
|
237
|
+
export declare const findUnreachedExclusionsBySetting: (entries: readonly DeclaredExclusion[], tracked: readonly string[]) => readonly string[];
|
|
238
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
|