@ploaness/governance 1.9.0 → 1.11.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.
Files changed (101) hide show
  1. package/dist/architecture-layers.d.ts +1 -1
  2. package/dist/architecture-layers.d.ts.map +1 -1
  3. package/dist/architecture-layers.js +5 -4
  4. package/dist/architecture-layers.js.map +1 -1
  5. package/dist/asset-policy.d.ts +9 -0
  6. package/dist/asset-policy.d.ts.map +1 -1
  7. package/dist/asset-policy.js +12 -3
  8. package/dist/asset-policy.js.map +1 -1
  9. package/dist/biome-selection.d.ts +3 -0
  10. package/dist/biome-selection.d.ts.map +1 -0
  11. package/dist/biome-selection.js +12 -0
  12. package/dist/biome-selection.js.map +1 -0
  13. package/dist/blocklist.js +4 -4
  14. package/dist/blocklist.js.map +1 -1
  15. package/dist/coverage-policy.d.ts +13 -0
  16. package/dist/coverage-policy.d.ts.map +1 -0
  17. package/dist/coverage-policy.js +32 -0
  18. package/dist/coverage-policy.js.map +1 -0
  19. package/dist/document-references.js +2 -2
  20. package/dist/document-references.js.map +1 -1
  21. package/dist/environment-files.d.ts +2 -1
  22. package/dist/environment-files.d.ts.map +1 -1
  23. package/dist/environment-files.js +2 -1
  24. package/dist/environment-files.js.map +1 -1
  25. package/dist/file-roles.d.ts +14 -6
  26. package/dist/file-roles.d.ts.map +1 -1
  27. package/dist/file-roles.js +33 -24
  28. package/dist/file-roles.js.map +1 -1
  29. package/dist/glob-alternatives.d.ts +3 -0
  30. package/dist/glob-alternatives.d.ts.map +1 -0
  31. package/dist/glob-alternatives.js +26 -0
  32. package/dist/glob-alternatives.js.map +1 -0
  33. package/dist/image-assets.js +3 -3
  34. package/dist/image-assets.js.map +1 -1
  35. package/dist/index.d.ts +6 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +6 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/install-policy.d.ts +3 -0
  40. package/dist/install-policy.d.ts.map +1 -1
  41. package/dist/install-policy.js +19 -3
  42. package/dist/install-policy.js.map +1 -1
  43. package/dist/member-patterns.d.ts +7 -0
  44. package/dist/member-patterns.d.ts.map +1 -0
  45. package/dist/member-patterns.js +71 -0
  46. package/dist/member-patterns.js.map +1 -0
  47. package/dist/production-server.d.ts +4 -0
  48. package/dist/production-server.d.ts.map +1 -1
  49. package/dist/production-server.js +19 -0
  50. package/dist/production-server.js.map +1 -1
  51. package/dist/route-coverage.d.ts +2 -0
  52. package/dist/route-coverage.d.ts.map +1 -1
  53. package/dist/route-coverage.js +14 -17
  54. package/dist/route-coverage.js.map +1 -1
  55. package/dist/route-exclusions.d.ts +11 -0
  56. package/dist/route-exclusions.d.ts.map +1 -0
  57. package/dist/route-exclusions.js +11 -0
  58. package/dist/route-exclusions.js.map +1 -0
  59. package/dist/route-map.d.ts +11 -5
  60. package/dist/route-map.d.ts.map +1 -1
  61. package/dist/route-map.js +38 -5
  62. package/dist/route-map.js.map +1 -1
  63. package/dist/run-policy.d.ts.map +1 -1
  64. package/dist/run-policy.js +2 -14
  65. package/dist/run-policy.js.map +1 -1
  66. package/dist/settings-layering.d.ts +1 -1
  67. package/dist/settings-layering.d.ts.map +1 -1
  68. package/dist/settings-layering.js +15 -8
  69. package/dist/settings-layering.js.map +1 -1
  70. package/dist/settings.d.ts +8 -4
  71. package/dist/settings.d.ts.map +1 -1
  72. package/dist/settings.js +22 -11
  73. package/dist/settings.js.map +1 -1
  74. package/dist/source-security.d.ts.map +1 -1
  75. package/dist/source-security.js +42 -4
  76. package/dist/source-security.js.map +1 -1
  77. package/dist/source-selection.d.ts +10 -0
  78. package/dist/source-selection.d.ts.map +1 -0
  79. package/dist/source-selection.js +14 -0
  80. package/dist/source-selection.js.map +1 -0
  81. package/dist/source-text.d.ts +2 -0
  82. package/dist/source-text.d.ts.map +1 -1
  83. package/dist/source-text.js +9 -5
  84. package/dist/source-text.js.map +1 -1
  85. package/dist/toolchain-pins.js +2 -2
  86. package/dist/wiring-policy.d.ts +5 -4
  87. package/dist/wiring-policy.d.ts.map +1 -1
  88. package/dist/wiring-policy.js +54 -35
  89. package/dist/wiring-policy.js.map +1 -1
  90. package/dist/workspace-globs.d.ts +8 -0
  91. package/dist/workspace-globs.d.ts.map +1 -0
  92. package/dist/workspace-globs.js +45 -0
  93. package/dist/workspace-globs.js.map +1 -0
  94. package/dist/workspace-policy.d.ts.map +1 -1
  95. package/dist/workspace-policy.js +15 -10
  96. package/dist/workspace-policy.js.map +1 -1
  97. package/dist/yaml-blocks.d.ts +8 -46
  98. package/dist/yaml-blocks.d.ts.map +1 -1
  99. package/dist/yaml-blocks.js +91 -91
  100. package/dist/yaml-blocks.js.map +1 -1
  101. package/package.json +7 -2
@@ -1,99 +1,99 @@
1
- // The small reader for the top-level blocks pnpm reads out of a workspace file.
2
- //
3
- // It is not a YAML parser and must not become one. pnpm honours these keys only at the top level of
4
- // `pnpm-workspace.yaml`, so what has to be recognised is exactly "an unindented key, and the indented
5
- // lines beneath it" - a shape a regex reads correctly and a parser would only read more expensively.
6
- //
7
- // It lives here rather than in `install-policy.ts`, which wrote it first, because `workspace-policy.ts`
8
- // needs the same three predicates to read the `packages:` block. Two crude readers in one package would
9
- // not stay equal, and the one that drifted would be the one deciding which directories are governed.
10
- const isTopLevelKey = (line, key) => new RegExp(String.raw `^${key}\s*:`).test(line);
11
- const isIndented = (line) => /^\s+\S/.test(line);
12
- /**
13
- * Whether an install config declares a top-level key at all.
14
- *
15
- * Separate from reading the block because a key can be meaningful while its body is empty:
16
- * `onlyBuiltDependencies: []` permits no dependency to run a script, which is an answer rather than
17
- * an omission.
18
- * @param file the contents of a YAML file, or an empty string when it is absent.
19
- * @param key the top-level key to look for.
20
- * @returns true when the key appears unindented.
21
- */
22
- export const declaresTopLevelKey = (file, key) => file.split('\n').some((line) => isTopLevelKey(line, key));
23
- /**
24
- * The lines of one top-level block, which run until the next unindented line.
25
- * @param file the contents of a YAML file, or an empty string when it is absent.
26
- * @param key the top-level key whose body to read.
27
- * @returns the block's lines, or an empty array when the key is absent.
28
- */
29
- export const topLevelBlockLines = (file, key) => {
30
- const lines = file.split('\n');
31
- const start = lines.findIndex((line) => isTopLevelKey(line, key));
32
- if (start === -1) {
33
- return [];
1
+ // Decode workspace configuration without coupling policy to filesystem reads or YAML presentation.
2
+ import { parseDocument, stringify } from 'yaml';
3
+ import { isArray, isRecord } from './json-shapes.js';
4
+ const WORKSPACE_FILE = 'pnpm-workspace.yaml';
5
+ const MAX_ALIAS_COUNT = 100;
6
+ const PLAIN_MAPPING_PROTOTYPE = Object.getPrototypeOf({});
7
+ const invalidValue = (key, expected) => new TypeError(`${WORKSPACE_FILE} ${key}: must be ${expected}; correct the workspace configuration`);
8
+ const isMapping = (value) => {
9
+ if (!isRecord(value)) {
10
+ return false;
34
11
  }
35
- const rest = lines.slice(start + 1);
36
- const end = rest.findIndex((line) => line.trim().length > 0 && !isIndented(line));
37
- return end === -1 ? rest : rest.slice(0, end);
12
+ const prototype = Object.getPrototypeOf(value);
13
+ return prototype === PLAIN_MAPPING_PROTOTYPE || prototype === null;
38
14
  };
39
- /**
40
- * Strip one layer of matching or unmatched surrounding quotes.
41
- * @param value the raw scalar.
42
- * @returns the value without its surrounding quote characters.
43
- */
44
- export const withoutQuotes = (value) => value.replaceAll(/^['"]|['"]$/g, '');
45
- // A whole-line comment is not content. Trailing text after a `#` is stripped only where it cannot be
46
- // part of a value: a path glob carries no `#`, but an override specifier does - `git+ssh://host/repo#tag`
47
- // is a legal pin, and cutting at the `#` would silently rewrite which commit the rule judges.
48
- const contentLines = (lines) => lines
49
- .map((line) => line.trim())
50
- .filter((line) => line.length > 0 && !line.startsWith('#'));
51
- const withoutTrailingComment = (line) => {
52
- const hash = line.indexOf('#');
53
- return hash === -1 ? line : line.slice(0, hash).trim();
15
+ /** Read a workspace mapping, rejecting malformed evidence rather than treating it as absent. */
16
+ export const readWorkspaceDocument = (file) => {
17
+ try {
18
+ const document = parseDocument(file);
19
+ if (document.errors.length > 0 || document.warnings.length > 0) {
20
+ throw new TypeError([...document.errors, ...document.warnings].map((error) => error.message).join('; '));
21
+ }
22
+ const value = document.toJS({ maxAliasCount: MAX_ALIAS_COUNT });
23
+ if (document.contents === null) {
24
+ return {};
25
+ }
26
+ if (!isMapping(value)) {
27
+ throw invalidValue('document', 'a mapping');
28
+ }
29
+ return value;
30
+ }
31
+ catch (error) {
32
+ const reason = error instanceof Error ? error.message : String(error);
33
+ throw new TypeError(`${WORKSPACE_FILE}: ${reason}; correct the YAML before verification`, { cause: error });
34
+ }
54
35
  };
55
- /**
56
- * The value of a top-level `key: value` scalar, such as `minimumReleaseAgeStrict: true`.
57
- *
58
- * Read from the line itself rather than from the block beneath it, which a scalar does not have. A
59
- * trailing comment is stripped, because a boolean carries no `#` of its own.
60
- * @param file the contents of a YAML file, or an empty string when it is absent.
61
- * @param key the top-level key whose scalar to read.
62
- * @returns the unquoted value, or undefined when the key is absent or carries no inline value.
63
- */
36
+ /** Whether a workspace mapping declares a key, including an explicitly empty sequence. */
37
+ export const declaresTopLevelKey = (file, key) => Object.hasOwn(readWorkspaceDocument(file), key);
38
+ /** Canonical YAML lines for a declared value, independent of its original indentation or flow style. */
39
+ export const topLevelBlockLines = (file, key) => {
40
+ const value = readWorkspaceDocument(file)[key];
41
+ return value === undefined ? [] : stringify(value).trimEnd().split('\n');
42
+ };
43
+ /** Strip surrounding quote characters from a non-YAML token, such as a container image reference. */
44
+ export const withoutQuotes = (value) => value.replaceAll(/^['"]|['"]$/g, '');
45
+ /** Read a scalar without changing the existing string-valued policy interface. */
64
46
  export const topLevelScalar = (file, key) => {
65
- const line = file.split('\n').find((candidate) => isTopLevelKey(candidate, key));
66
- if (line === undefined) {
47
+ const value = readWorkspaceDocument(file)[key];
48
+ if (value === undefined) {
67
49
  return undefined;
68
50
  }
69
- const inline = line.slice(line.indexOf(':') + 1).trim();
70
- const value = withoutQuotes(withoutTrailingComment(inline));
71
- return value.length > 0 ? value : undefined;
51
+ if (typeof value !== 'string' && typeof value !== 'boolean' && typeof value !== 'number') {
52
+ throw invalidValue(key, 'a scalar');
53
+ }
54
+ return String(value);
55
+ };
56
+ /** Read every sequence entry; an invalid entry cannot silently disappear from policy. */
57
+ export const topLevelListItems = (file, key) => {
58
+ const value = readWorkspaceDocument(file)[key];
59
+ if (value === undefined) {
60
+ return [];
61
+ }
62
+ if (!(isArray(value) && value.every((entry) => typeof entry === 'string'))) {
63
+ throw invalidValue(key, 'a sequence of strings');
64
+ }
65
+ return value;
66
+ };
67
+ // Package extensions carry nested dependency mappings. Preserve that value without flattening its
68
+ // children into independent override entries; scalar specifiers remain exactly what pnpm reads.
69
+ const plainValue = (_key, value) => {
70
+ if (isRecord(value) && !isArray(value) && !isMapping(value)) {
71
+ throw invalidValue('override', 'a plain mapping or sequence');
72
+ }
73
+ return value;
74
+ };
75
+ const entryValue = (value) => {
76
+ try {
77
+ return typeof value === 'string' ? value : JSON.stringify(value, plainValue);
78
+ }
79
+ catch (error) {
80
+ throw new TypeError(`${WORKSPACE_FILE}: override values must be plain, acyclic values; correct the YAML`, {
81
+ cause: error,
82
+ });
83
+ }
84
+ };
85
+ /** Read one override entry per mapping key, preserving structured values and complete specifiers. */
86
+ export const topLevelMappingEntries = (file, key) => {
87
+ const value = readWorkspaceDocument(file)[key];
88
+ if (value === undefined) {
89
+ return [];
90
+ }
91
+ if (!isMapping(value)) {
92
+ throw invalidValue(key, 'a mapping');
93
+ }
94
+ return Object.entries(value).map(([name, specifier]) => [
95
+ name,
96
+ entryValue(specifier),
97
+ ]);
72
98
  };
73
- /**
74
- * The items of a top-level YAML sequence, such as the `packages:` block of a workspace file.
75
- * @param file the contents of a YAML file, or an empty string when it is absent.
76
- * @param key the top-level key whose sequence to read.
77
- * @returns one unquoted entry per `- item` line, in declaration order.
78
- */
79
- export const topLevelListItems = (file, key) => contentLines(topLevelBlockLines(file, key))
80
- .filter((line) => line.startsWith('-'))
81
- .map((line) => withoutQuotes(withoutTrailingComment(line.slice(1).trim())))
82
- .filter((entry) => entry.length > 0);
83
- /**
84
- * The `key: value` entries of a top-level YAML mapping, such as an `overrides:` block.
85
- *
86
- * Split at the FIRST colon, not the last: a value carries colons of its own - `npm:preact@10`,
87
- * `link:../fork`, `git+ssh://...` - and splitting at the last one read `react: npm:preact@10` as a
88
- * package called "react: npm", so every alias form walked straight through the rule meant to catch it.
89
- * @param file the contents of a YAML file, or an empty string when it is absent.
90
- * @param key the top-level key whose mapping to read.
91
- * @returns one `[name, value]` pair per entry, both unquoted.
92
- */
93
- export const topLevelMappingEntries = (file, key) => contentLines(topLevelBlockLines(file, key)).flatMap((line) => {
94
- const separator = line.indexOf(':');
95
- return separator === -1
96
- ? []
97
- : [[withoutQuotes(line.slice(0, separator).trim()), withoutQuotes(line.slice(separator + 1).trim())]];
98
- });
99
99
  //# sourceMappingURL=yaml-blocks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"yaml-blocks.js","sourceRoot":"","sources":["../src/yaml-blocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yaml-blocks.js","sourceRoot":"","sources":["../src/yaml-blocks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ploaness/governance",
3
- "version": "1.9.0",
3
+ "version": "1.11.0",
4
4
  "description": "Pure, unit-tested governance rules for ploaness. No filesystem, process, or network access.",
5
5
  "license": "MIT",
6
6
  "author": "Herman Ciechanowiec <herman@ciechanowiec.eu>",
@@ -31,8 +31,13 @@
31
31
  "publishConfig": {
32
32
  "access": "public"
33
33
  },
34
+ "dependencies": {
35
+ "micromatch": "4.0.8",
36
+ "yaml": "2.9.1"
37
+ },
34
38
  "devDependencies": {
35
- "@types/node": "26.6.4",
39
+ "@types/micromatch": "4.0.10",
40
+ "@types/node": "26.6.5",
36
41
  "typescript": "6.0.3"
37
42
  },
38
43
  "scripts": {