@clossys/writer 0.3.2
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/CHANGELOG.md +196 -0
- package/LICENSE +21 -0
- package/README.md +593 -0
- package/dist/addressability.d.ts +245 -0
- package/dist/addressability.d.ts.map +1 -0
- package/dist/addressability.js +567 -0
- package/dist/addressability.js.map +1 -0
- package/dist/checker.d.ts +159 -0
- package/dist/checker.d.ts.map +1 -0
- package/dist/checker.js +177 -0
- package/dist/checker.js.map +1 -0
- package/dist/cli.d.ts +149 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1049 -0
- package/dist/cli.js.map +1 -0
- package/dist/copy-gate.d.ts +107 -0
- package/dist/copy-gate.d.ts.map +1 -0
- package/dist/copy-gate.js +132 -0
- package/dist/copy-gate.js.map +1 -0
- package/dist/fingerprint.d.ts +61 -0
- package/dist/fingerprint.d.ts.map +1 -0
- package/dist/fingerprint.js +64 -0
- package/dist/fingerprint.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/locale-coverage.d.ts +227 -0
- package/dist/locale-coverage.d.ts.map +1 -0
- package/dist/locale-coverage.js +414 -0
- package/dist/locale-coverage.js.map +1 -0
- package/dist/passage.d.ts +294 -0
- package/dist/passage.d.ts.map +1 -0
- package/dist/passage.js +463 -0
- package/dist/passage.js.map +1 -0
- package/dist/path-exclusions.d.ts +114 -0
- package/dist/path-exclusions.d.ts.map +1 -0
- package/dist/path-exclusions.js +213 -0
- package/dist/path-exclusions.js.map +1 -0
- package/dist/registry.d.ts +61 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +64 -0
- package/dist/registry.js.map +1 -0
- package/dist/resolve.d.ts +33 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +133 -0
- package/dist/resolve.js.map +1 -0
- package/dist/scan.d.ts +457 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +1698 -0
- package/dist/scan.js.map +1 -0
- package/dist/schema.d.ts +81 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +482 -0
- package/dist/schema.js.map +1 -0
- package/dist/types.d.ts +268 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +40 -0
- package/dist/types.js.map +1 -0
- package/dist/voice/checker.d.ts +186 -0
- package/dist/voice/checker.d.ts.map +1 -0
- package/dist/voice/checker.js +483 -0
- package/dist/voice/checker.js.map +1 -0
- package/dist/voice/derivation-coverage.d.ts +168 -0
- package/dist/voice/derivation-coverage.d.ts.map +1 -0
- package/dist/voice/derivation-coverage.js +181 -0
- package/dist/voice/derivation-coverage.js.map +1 -0
- package/dist/voice/fields.d.ts +107 -0
- package/dist/voice/fields.d.ts.map +1 -0
- package/dist/voice/fields.js +144 -0
- package/dist/voice/fields.js.map +1 -0
- package/dist/voice/index.d.ts +19 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +24 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/internal/parse-template.d.ts +27 -0
- package/dist/voice/internal/parse-template.d.ts.map +1 -0
- package/dist/voice/internal/parse-template.js +111 -0
- package/dist/voice/internal/parse-template.js.map +1 -0
- package/dist/voice/internal/pattern-safety.d.ts +111 -0
- package/dist/voice/internal/pattern-safety.d.ts.map +1 -0
- package/dist/voice/internal/pattern-safety.js +278 -0
- package/dist/voice/internal/pattern-safety.js.map +1 -0
- package/dist/voice/schema.d.ts +65 -0
- package/dist/voice/schema.d.ts.map +1 -0
- package/dist/voice/schema.js +535 -0
- package/dist/voice/schema.js.map +1 -0
- package/dist/voice/types.d.ts +282 -0
- package/dist/voice/types.d.ts.map +1 -0
- package/dist/voice/types.js +37 -0
- package/dist/voice/types.js.map +1 -0
- package/package.json +72 -0
- package/src/addressability.ts +664 -0
- package/src/checker.ts +293 -0
- package/src/cli.ts +1166 -0
- package/src/copy-gate.ts +197 -0
- package/src/fingerprint.ts +66 -0
- package/src/index.ts +163 -0
- package/src/locale-coverage.ts +512 -0
- package/src/passage.ts +644 -0
- package/src/path-exclusions.ts +265 -0
- package/src/registry.ts +103 -0
- package/src/resolve.ts +172 -0
- package/src/scan.ts +1959 -0
- package/src/schema.ts +528 -0
- package/src/types.ts +301 -0
- package/src/voice/checker.ts +590 -0
- package/src/voice/derivation-coverage.ts +217 -0
- package/src/voice/fields.ts +160 -0
- package/src/voice/index.ts +55 -0
- package/src/voice/internal/parse-template.ts +114 -0
- package/src/voice/internal/pattern-safety.ts +336 -0
- package/src/voice/schema.ts +585 -0
- package/src/voice/types.ts +329 -0
- package/templates/voice-record.template.jsonc +135 -0
package/dist/scan.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural validation for a candidate `CopyRecord`, hand-rolled in the
|
|
3
|
+
* same plain-type-guard, accumulate-and-keep-going style as
|
|
4
|
+
* `@example/strategy`'s `validation.ts` and
|
|
5
|
+
* `@clossys/writer/voice`'s `schema.ts` — no schema library, for the
|
|
6
|
+
* same reason both of those files give: this package's entire job is
|
|
7
|
+
* dependency-free data validation, and a public package should not force
|
|
8
|
+
* every consumer onto one schema library's major version for the sake of
|
|
9
|
+
* shape-checking a handful of nested objects.
|
|
10
|
+
*
|
|
11
|
+
* Every check here is a REAL check, not decoration — this package's own
|
|
12
|
+
* design brief was explicit that a validator whose findings are all
|
|
13
|
+
* mechanically re-derivable from data already present elsewhere is dead
|
|
14
|
+
* weight (this repository has already deleted one whole package,
|
|
15
|
+
* `contract`, for exactly that failure: it validated fields that were all
|
|
16
|
+
* mechanically re-derivable from data already present in the same
|
|
17
|
+
* `package.json`, so its own checks could never produce a real finding).
|
|
18
|
+
* The placeholder check in particular
|
|
19
|
+
* (`validateCopyEntryShape`'s handling of `placeholders`) is the one most
|
|
20
|
+
* likely to be mistaken for decoration and is not: a name declared in
|
|
21
|
+
* `placeholders` but missing from `text` is a real authoring bug — copy
|
|
22
|
+
* was edited and an interpolation was dropped, or the placeholder list
|
|
23
|
+
* drifted from the sentence — and this is the only place in this package
|
|
24
|
+
* that catches it.
|
|
25
|
+
*/
|
|
26
|
+
import type { CopyFinding, CopyRegistry, CopyRecord } from "./types.js";
|
|
27
|
+
/**
|
|
28
|
+
* Validates that `value` conforms to the `CopyRecord` shape. Returns a
|
|
29
|
+
* `CopyFinding[]`; empty means `value` is a well-formed `CopyRecord`
|
|
30
|
+
* (once defaults are applied — see `parseCopyRecord`). Never throws — any
|
|
31
|
+
* input, including `null`, a string, or a wildly malformed object,
|
|
32
|
+
* produces findings rather than an exception, the same discipline
|
|
33
|
+
* `@clossys/writer/voice`'s `validateVoiceRecordShape` and
|
|
34
|
+
* `@example/policy`'s `validateBindingShape` both hold to.
|
|
35
|
+
*
|
|
36
|
+
* Checks, in full: `id` present and non-empty; `entries` present and an
|
|
37
|
+
* array; every entry's own shape (`id` non-empty and well-formed per
|
|
38
|
+
* `COPY_ENTRY_ID_RE`, `text` non-empty, `context` non-empty,
|
|
39
|
+
* `placeholders` — if present — an array of non-empty strings each
|
|
40
|
+
* actually found in `text`, `factRef` — if present — a non-empty
|
|
41
|
+
* string); and, at the record level, that every entry's `id` is unique
|
|
42
|
+
* within the record. `entries` being present but empty (`[]`) is a
|
|
43
|
+
* well-formed, zero-finding `CopyRecord` as far as THIS function is
|
|
44
|
+
* concerned — whether zero entries is itself a problem is a judgment call
|
|
45
|
+
* for a caller with more context than a shape validator has, and is
|
|
46
|
+
* exactly the call `checker.ts`'s `checkCopyRecord` makes (see that
|
|
47
|
+
* file's doc comment): it fails closed on a record with no entries to
|
|
48
|
+
* check, rather than silently reporting a "clean" run that checked
|
|
49
|
+
* nothing.
|
|
50
|
+
*/
|
|
51
|
+
export declare function validateCopyRecordShape(value: unknown): CopyFinding[];
|
|
52
|
+
/**
|
|
53
|
+
* Validates the stronger registry shape used to resolve `CopyRef`s. A plain
|
|
54
|
+
* `CopyRecord` deliberately remains valid for source scanning and voice
|
|
55
|
+
* checking; it cannot become rendered content until it carries locale,
|
|
56
|
+
* revision, source provenance, and an explicit lifecycle state per entry.
|
|
57
|
+
*/
|
|
58
|
+
export declare function validateCopyRegistryShape(value: unknown): CopyFinding[];
|
|
59
|
+
/**
|
|
60
|
+
* Parses `value` as a `CopyRecord`, throwing a plain `Error` (never a
|
|
61
|
+
* `CopyFinding[]`) if it does not conform. For a caller that wants
|
|
62
|
+
* fail-fast construction — `registry.ts`'s `readCopyRecord`, in
|
|
63
|
+
* particular — rather than `validateCopyRecordShape`'s "collect every
|
|
64
|
+
* problem and keep going" shape. The thrown message includes every issue
|
|
65
|
+
* `validateCopyRecordShape` would have reported, joined, so nothing is
|
|
66
|
+
* lost by throwing instead of returning.
|
|
67
|
+
*
|
|
68
|
+
* Calls `validateCopyRecordShape(value)` and, only if it reports zero
|
|
69
|
+
* findings, makes one further pass over `value` (`buildCopyRecord`) to
|
|
70
|
+
* apply this schema's one default (`placeholders: []`) and produce a
|
|
71
|
+
* fully populated `CopyRecord`. This two-pass shape mirrors
|
|
72
|
+
* `@clossys/writer/voice`'s `parseVoiceRecord` — see that function's own
|
|
73
|
+
* doc comment for the fuller TOCTOU-safety argument for why reading twice
|
|
74
|
+
* is a deliberate choice here, not an oversight, given this package's
|
|
75
|
+
* actual threat model (a consumer's own in-memory config object, not a
|
|
76
|
+
* value crossing a real trust boundary).
|
|
77
|
+
*/
|
|
78
|
+
export declare function parseCopyRecord(value: unknown): CopyRecord;
|
|
79
|
+
/** Parses a versioned, locale-specific registry or throws every finding. */
|
|
80
|
+
export declare function parseCopyRegistry(value: unknown): CopyRegistry;
|
|
81
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAIV,WAAW,EACX,YAAY,EAEZ,UAAU,EAEX,MAAM,YAAY,CAAC;AA+JpB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,CAwDrE;AAyFD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,EAAE,CAuEvE;AAiDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAS1D;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAO9D"}
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural validation for a candidate `CopyRecord`, hand-rolled in the
|
|
3
|
+
* same plain-type-guard, accumulate-and-keep-going style as
|
|
4
|
+
* `@example/strategy`'s `validation.ts` and
|
|
5
|
+
* `@clossys/writer/voice`'s `schema.ts` — no schema library, for the
|
|
6
|
+
* same reason both of those files give: this package's entire job is
|
|
7
|
+
* dependency-free data validation, and a public package should not force
|
|
8
|
+
* every consumer onto one schema library's major version for the sake of
|
|
9
|
+
* shape-checking a handful of nested objects.
|
|
10
|
+
*
|
|
11
|
+
* Every check here is a REAL check, not decoration — this package's own
|
|
12
|
+
* design brief was explicit that a validator whose findings are all
|
|
13
|
+
* mechanically re-derivable from data already present elsewhere is dead
|
|
14
|
+
* weight (this repository has already deleted one whole package,
|
|
15
|
+
* `contract`, for exactly that failure: it validated fields that were all
|
|
16
|
+
* mechanically re-derivable from data already present in the same
|
|
17
|
+
* `package.json`, so its own checks could never produce a real finding).
|
|
18
|
+
* The placeholder check in particular
|
|
19
|
+
* (`validateCopyEntryShape`'s handling of `placeholders`) is the one most
|
|
20
|
+
* likely to be mistaken for decoration and is not: a name declared in
|
|
21
|
+
* `placeholders` but missing from `text` is a real authoring bug — copy
|
|
22
|
+
* was edited and an interpolation was dropped, or the placeholder list
|
|
23
|
+
* drifted from the sentence — and this is the only place in this package
|
|
24
|
+
* that catches it.
|
|
25
|
+
*/
|
|
26
|
+
function isPlainObject(value) {
|
|
27
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
28
|
+
}
|
|
29
|
+
function isNonEmptyString(value) {
|
|
30
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
31
|
+
}
|
|
32
|
+
function isCopyEntryStatus(value) {
|
|
33
|
+
return value === "draft" || value === "approved" || value === "retired";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* `CopyEntryId` shape: dot-separated, lowercase, kebab-case within each
|
|
37
|
+
* segment, at least one dot (i.e. at least two segments) — e.g.
|
|
38
|
+
* `"pagination.no-results"`, `"onboarding.step-2.title"`. See
|
|
39
|
+
* `types.ts`'s doc comment on `CopyEntryId` for why a bare, unnamespaced
|
|
40
|
+
* id is rejected rather than merely discouraged.
|
|
41
|
+
*/
|
|
42
|
+
const COPY_ENTRY_ID_RE = /^[a-z0-9]+(-[a-z0-9]+)*(\.[a-z0-9]+(-[a-z0-9]+)*)+$/;
|
|
43
|
+
/**
|
|
44
|
+
* The literal placeholder syntax this package checks `text` against for
|
|
45
|
+
* each declared name in `placeholders`: `{name}`, brace-delimited — the
|
|
46
|
+
* same convention ICU MessageFormat and most i18n libraries already use.
|
|
47
|
+
* A plain substring check, not a regex scan of `text` for placeholder-
|
|
48
|
+
* *shaped* tokens: this function only ever needs to ask "does `{name}`
|
|
49
|
+
* appear in this text for this specific declared name", never "what
|
|
50
|
+
* placeholders does this text contain" — the latter would be scope creep
|
|
51
|
+
* into a job (extracting/parsing interpolation syntax) this package does
|
|
52
|
+
* not need in order to do the one check it actually promises.
|
|
53
|
+
*/
|
|
54
|
+
function textContainsPlaceholder(text, name) {
|
|
55
|
+
return text.includes(`{${name}}`);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Validates a field that is a list of strings — `entries` (elsewhere) and
|
|
59
|
+
* `placeholders` here share this exact shape and this exact validation.
|
|
60
|
+
* `undefined` is valid for `placeholders` (a default of `[]` applies
|
|
61
|
+
* later, in `buildCopyRecord`) — only a present-but-wrong-shaped value is
|
|
62
|
+
* a finding.
|
|
63
|
+
*/
|
|
64
|
+
function validatePlaceholdersShape(value, path) {
|
|
65
|
+
if (value === undefined)
|
|
66
|
+
return [];
|
|
67
|
+
if (!Array.isArray(value)) {
|
|
68
|
+
return [
|
|
69
|
+
{
|
|
70
|
+
rule: "placeholders-shape",
|
|
71
|
+
severity: "error",
|
|
72
|
+
message: `${path} must be an array of non-empty strings when present, got ${JSON.stringify(value)}.`,
|
|
73
|
+
path,
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
}
|
|
77
|
+
const findings = [];
|
|
78
|
+
value.forEach((item, i) => {
|
|
79
|
+
if (!isNonEmptyString(item)) {
|
|
80
|
+
findings.push({
|
|
81
|
+
rule: "placeholders-shape",
|
|
82
|
+
severity: "error",
|
|
83
|
+
message: `${path}.${i} must be a non-empty string, got ${JSON.stringify(item)}.`,
|
|
84
|
+
path: `${path}.${i}`,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return findings;
|
|
89
|
+
}
|
|
90
|
+
// Rules: entry-shape, id-shape, id-well-formed, text-shape, context-shape,
|
|
91
|
+
// placeholders-shape, placeholder-missing-from-text, fact-ref-shape
|
|
92
|
+
function validateCopyEntryShape(value, path) {
|
|
93
|
+
if (!isPlainObject(value)) {
|
|
94
|
+
return [{ rule: "entry-shape", severity: "error", message: `${path} must be an object.`, path }];
|
|
95
|
+
}
|
|
96
|
+
// Snapshot every field this function reads, exactly once, before any
|
|
97
|
+
// check runs — mirroring `@clossys/writer/voice`'s `schema.ts` and
|
|
98
|
+
// `@example/policy`'s `validateBindingShape`, both of which
|
|
99
|
+
// document why: a hostile or merely-badly-behaved `value` (a field
|
|
100
|
+
// implemented as a getter, or a Proxy) could otherwise return a
|
|
101
|
+
// different result on each property read.
|
|
102
|
+
const id = value.id;
|
|
103
|
+
const text = value.text;
|
|
104
|
+
const context = value.context;
|
|
105
|
+
const placeholders = value.placeholders;
|
|
106
|
+
const factRef = value.factRef;
|
|
107
|
+
const findings = [];
|
|
108
|
+
if (!isNonEmptyString(id)) {
|
|
109
|
+
findings.push({
|
|
110
|
+
rule: "id-shape",
|
|
111
|
+
severity: "error",
|
|
112
|
+
message: `${path}.id must be a non-empty string, got ${JSON.stringify(id)}.`,
|
|
113
|
+
path: `${path}.id`,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
else if (!COPY_ENTRY_ID_RE.test(id)) {
|
|
117
|
+
findings.push({
|
|
118
|
+
rule: "id-well-formed",
|
|
119
|
+
severity: "error",
|
|
120
|
+
message: `${path}.id "${id}" must be dot-separated and lowercase, with at least one dot (e.g. "pagination.no-results"), got ${JSON.stringify(id)}.`,
|
|
121
|
+
path: `${path}.id`,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if (!isNonEmptyString(text)) {
|
|
125
|
+
findings.push({
|
|
126
|
+
rule: "text-shape",
|
|
127
|
+
severity: "error",
|
|
128
|
+
message: `${path}.text must be a non-empty string, got ${JSON.stringify(text)}.`,
|
|
129
|
+
path: `${path}.text`,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
if (!isNonEmptyString(context)) {
|
|
133
|
+
findings.push({
|
|
134
|
+
rule: "context-shape",
|
|
135
|
+
severity: "error",
|
|
136
|
+
message: `${path}.context must be a non-empty string, got ${JSON.stringify(context)}. An entry with no stated location cannot be reviewed.`,
|
|
137
|
+
path: `${path}.context`,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
findings.push(...validatePlaceholdersShape(placeholders, `${path}.placeholders`));
|
|
141
|
+
// The real check: a declared placeholder that never actually appears in
|
|
142
|
+
// `text`. Only checkable once both `text` and `placeholders` are
|
|
143
|
+
// individually well-formed — there is no meaningful "is {name} in the
|
|
144
|
+
// text" question to ask against a `text` that failed `text-shape` or a
|
|
145
|
+
// `placeholders` entry that failed `placeholders-shape`, and reporting
|
|
146
|
+
// this rule on top of an already-broken shape would only add noise
|
|
147
|
+
// pointing at the same underlying problem.
|
|
148
|
+
if (isNonEmptyString(text) && Array.isArray(placeholders)) {
|
|
149
|
+
placeholders.forEach((name, i) => {
|
|
150
|
+
if (typeof name === "string" && name.length > 0 && !textContainsPlaceholder(text, name)) {
|
|
151
|
+
findings.push({
|
|
152
|
+
rule: "placeholder-missing-from-text",
|
|
153
|
+
severity: "error",
|
|
154
|
+
message: `${path}.placeholders.${i} declares "${name}" but "{${name}}" does not appear in ${path}.text.`,
|
|
155
|
+
path: `${path}.placeholders.${i}`,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
if (factRef !== undefined && !isNonEmptyString(factRef)) {
|
|
161
|
+
findings.push({
|
|
162
|
+
rule: "fact-ref-shape",
|
|
163
|
+
severity: "error",
|
|
164
|
+
message: `${path}.factRef must be a non-empty string when present, got ${JSON.stringify(factRef)}.`,
|
|
165
|
+
path: `${path}.factRef`,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
return findings;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Validates that `value` conforms to the `CopyRecord` shape. Returns a
|
|
172
|
+
* `CopyFinding[]`; empty means `value` is a well-formed `CopyRecord`
|
|
173
|
+
* (once defaults are applied — see `parseCopyRecord`). Never throws — any
|
|
174
|
+
* input, including `null`, a string, or a wildly malformed object,
|
|
175
|
+
* produces findings rather than an exception, the same discipline
|
|
176
|
+
* `@clossys/writer/voice`'s `validateVoiceRecordShape` and
|
|
177
|
+
* `@example/policy`'s `validateBindingShape` both hold to.
|
|
178
|
+
*
|
|
179
|
+
* Checks, in full: `id` present and non-empty; `entries` present and an
|
|
180
|
+
* array; every entry's own shape (`id` non-empty and well-formed per
|
|
181
|
+
* `COPY_ENTRY_ID_RE`, `text` non-empty, `context` non-empty,
|
|
182
|
+
* `placeholders` — if present — an array of non-empty strings each
|
|
183
|
+
* actually found in `text`, `factRef` — if present — a non-empty
|
|
184
|
+
* string); and, at the record level, that every entry's `id` is unique
|
|
185
|
+
* within the record. `entries` being present but empty (`[]`) is a
|
|
186
|
+
* well-formed, zero-finding `CopyRecord` as far as THIS function is
|
|
187
|
+
* concerned — whether zero entries is itself a problem is a judgment call
|
|
188
|
+
* for a caller with more context than a shape validator has, and is
|
|
189
|
+
* exactly the call `checker.ts`'s `checkCopyRecord` makes (see that
|
|
190
|
+
* file's doc comment): it fails closed on a record with no entries to
|
|
191
|
+
* check, rather than silently reporting a "clean" run that checked
|
|
192
|
+
* nothing.
|
|
193
|
+
*/
|
|
194
|
+
export function validateCopyRecordShape(value) {
|
|
195
|
+
if (!isPlainObject(value)) {
|
|
196
|
+
return [{ rule: "record-present", severity: "error", message: "A copy record must be an object.", path: "$" }];
|
|
197
|
+
}
|
|
198
|
+
const id = value.id;
|
|
199
|
+
const entries = value.entries;
|
|
200
|
+
const findings = [];
|
|
201
|
+
if (!isNonEmptyString(id)) {
|
|
202
|
+
findings.push({
|
|
203
|
+
rule: "id-shape",
|
|
204
|
+
severity: "error",
|
|
205
|
+
message: `id must be a non-empty string, got ${JSON.stringify(id)}.`,
|
|
206
|
+
path: "id",
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
if (!Array.isArray(entries)) {
|
|
210
|
+
findings.push({
|
|
211
|
+
rule: "entries-shape",
|
|
212
|
+
severity: "error",
|
|
213
|
+
message: `entries must be an array, got ${JSON.stringify(entries)}.`,
|
|
214
|
+
path: "entries",
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
entries.forEach((entry, i) => findings.push(...validateCopyEntryShape(entry, `entries.${i}`)));
|
|
219
|
+
// Uniqueness is a whole-record property, not a per-entry one, so it is
|
|
220
|
+
// checked here rather than inside validateCopyEntryShape. Only entries
|
|
221
|
+
// that already passed their own id-shape check contribute a value to
|
|
222
|
+
// compare — an entry with a missing/malformed id is already reported
|
|
223
|
+
// above by id-shape/id-well-formed, and folding an undefined or
|
|
224
|
+
// non-string id into a "duplicate" comparison would produce a second,
|
|
225
|
+
// misleading finding about the same underlying problem.
|
|
226
|
+
const seen = new Map(); // id -> first index seen at
|
|
227
|
+
entries.forEach((entry, i) => {
|
|
228
|
+
if (!isPlainObject(entry))
|
|
229
|
+
return;
|
|
230
|
+
const entryId = entry.id;
|
|
231
|
+
if (typeof entryId !== "string" || entryId.length === 0)
|
|
232
|
+
return;
|
|
233
|
+
const firstIndex = seen.get(entryId);
|
|
234
|
+
if (firstIndex === undefined) {
|
|
235
|
+
seen.set(entryId, i);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
findings.push({
|
|
239
|
+
rule: "id-unique",
|
|
240
|
+
severity: "error",
|
|
241
|
+
message: `entries.${i}.id "${entryId}" duplicates entries.${firstIndex}.id — every entry's id must be unique within a CopyRecord.`,
|
|
242
|
+
path: `entries.${i}.id`,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
return findings;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Validates a `CopyRegistryEntry.translation` field, when present.
|
|
251
|
+
* `undefined` is always valid — see `types.ts`'s doc comment on
|
|
252
|
+
* `CopyTranslationProvenance` for why an entry with no `translation` must
|
|
253
|
+
* remain a fully valid `CopyRegistryEntry` rather than becoming invalid the
|
|
254
|
+
* moment this field was introduced. Only a present-but-malformed value is a
|
|
255
|
+
* finding.
|
|
256
|
+
*/
|
|
257
|
+
function validateTranslationShape(value, path) {
|
|
258
|
+
if (value === undefined)
|
|
259
|
+
return [];
|
|
260
|
+
if (!isPlainObject(value)) {
|
|
261
|
+
return [
|
|
262
|
+
{
|
|
263
|
+
rule: "translation-shape",
|
|
264
|
+
severity: "error",
|
|
265
|
+
message: `${path} must be an object when present, got ${JSON.stringify(value)}.`,
|
|
266
|
+
path,
|
|
267
|
+
},
|
|
268
|
+
];
|
|
269
|
+
}
|
|
270
|
+
const sourceFingerprint = value.sourceFingerprint;
|
|
271
|
+
const fingerprintAlgorithm = value.fingerprintAlgorithm;
|
|
272
|
+
const translatedAt = value.translatedAt;
|
|
273
|
+
const translatedBy = value.translatedBy;
|
|
274
|
+
const reviewedAt = value.reviewedAt;
|
|
275
|
+
const reviewedBy = value.reviewedBy;
|
|
276
|
+
const findings = [];
|
|
277
|
+
if (!isNonEmptyString(sourceFingerprint)) {
|
|
278
|
+
findings.push({
|
|
279
|
+
rule: "translation-source-fingerprint-shape",
|
|
280
|
+
severity: "error",
|
|
281
|
+
message: `${path}.sourceFingerprint must be a non-empty string, got ${JSON.stringify(sourceFingerprint)}.`,
|
|
282
|
+
path: `${path}.sourceFingerprint`,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
if (!isNonEmptyString(fingerprintAlgorithm)) {
|
|
286
|
+
findings.push({
|
|
287
|
+
rule: "translation-fingerprint-algorithm-shape",
|
|
288
|
+
severity: "error",
|
|
289
|
+
message: `${path}.fingerprintAlgorithm must be a non-empty string, got ${JSON.stringify(fingerprintAlgorithm)}.`,
|
|
290
|
+
path: `${path}.fingerprintAlgorithm`,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
if (!isNonEmptyString(translatedAt)) {
|
|
294
|
+
findings.push({
|
|
295
|
+
rule: "translation-translated-at-shape",
|
|
296
|
+
severity: "error",
|
|
297
|
+
message: `${path}.translatedAt must be a non-empty ISO-8601 timestamp string, got ${JSON.stringify(translatedAt)}.`,
|
|
298
|
+
path: `${path}.translatedAt`,
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
if (translatedBy !== undefined && !isNonEmptyString(translatedBy)) {
|
|
302
|
+
findings.push({
|
|
303
|
+
rule: "translation-translated-by-shape",
|
|
304
|
+
severity: "error",
|
|
305
|
+
message: `${path}.translatedBy must be a non-empty string when present, got ${JSON.stringify(translatedBy)}.`,
|
|
306
|
+
path: `${path}.translatedBy`,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
if (reviewedAt !== undefined && !isNonEmptyString(reviewedAt)) {
|
|
310
|
+
findings.push({
|
|
311
|
+
rule: "translation-reviewed-at-shape",
|
|
312
|
+
severity: "error",
|
|
313
|
+
message: `${path}.reviewedAt must be a non-empty ISO-8601 timestamp string when present, got ${JSON.stringify(reviewedAt)}.`,
|
|
314
|
+
path: `${path}.reviewedAt`,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
if (reviewedBy !== undefined && !isNonEmptyString(reviewedBy)) {
|
|
318
|
+
findings.push({
|
|
319
|
+
rule: "translation-reviewed-by-shape",
|
|
320
|
+
severity: "error",
|
|
321
|
+
message: `${path}.reviewedBy must be a non-empty string when present, got ${JSON.stringify(reviewedBy)}.`,
|
|
322
|
+
path: `${path}.reviewedBy`,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
return findings;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Validates the stronger registry shape used to resolve `CopyRef`s. A plain
|
|
329
|
+
* `CopyRecord` deliberately remains valid for source scanning and voice
|
|
330
|
+
* checking; it cannot become rendered content until it carries locale,
|
|
331
|
+
* revision, source provenance, and an explicit lifecycle state per entry.
|
|
332
|
+
*/
|
|
333
|
+
export function validateCopyRegistryShape(value) {
|
|
334
|
+
const findings = validateCopyRecordShape(value);
|
|
335
|
+
if (!isPlainObject(value))
|
|
336
|
+
return findings;
|
|
337
|
+
const locale = value.locale;
|
|
338
|
+
const revision = value.revision;
|
|
339
|
+
const source = value.source;
|
|
340
|
+
const entries = value.entries;
|
|
341
|
+
if (!isNonEmptyString(locale)) {
|
|
342
|
+
findings.push({
|
|
343
|
+
rule: "registry-locale-shape",
|
|
344
|
+
severity: "error",
|
|
345
|
+
message: `locale must be a non-empty locale tag, got ${JSON.stringify(locale)}.`,
|
|
346
|
+
path: "locale",
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
if (!isNonEmptyString(revision)) {
|
|
350
|
+
findings.push({
|
|
351
|
+
rule: "registry-revision-shape",
|
|
352
|
+
severity: "error",
|
|
353
|
+
message: `revision must be a non-empty provenance revision, got ${JSON.stringify(revision)}.`,
|
|
354
|
+
path: "revision",
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
if (!isPlainObject(source)) {
|
|
358
|
+
findings.push({
|
|
359
|
+
rule: "registry-source-shape",
|
|
360
|
+
severity: "error",
|
|
361
|
+
message: `source must be an object with kind and reference, got ${JSON.stringify(source)}.`,
|
|
362
|
+
path: "source",
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
const kind = source.kind;
|
|
367
|
+
const reference = source.reference;
|
|
368
|
+
if (kind !== "consumer" && kind !== "generated" && kind !== "imported") {
|
|
369
|
+
findings.push({
|
|
370
|
+
rule: "registry-source-kind",
|
|
371
|
+
severity: "error",
|
|
372
|
+
message: `source.kind must be "consumer", "generated", or "imported", got ${JSON.stringify(kind)}.`,
|
|
373
|
+
path: "source.kind",
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
if (!isNonEmptyString(reference)) {
|
|
377
|
+
findings.push({
|
|
378
|
+
rule: "registry-source-reference-shape",
|
|
379
|
+
severity: "error",
|
|
380
|
+
message: `source.reference must be a non-empty opaque provenance reference, got ${JSON.stringify(reference)}.`,
|
|
381
|
+
path: "source.reference",
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
if (Array.isArray(entries)) {
|
|
386
|
+
entries.forEach((entry, i) => {
|
|
387
|
+
if (!isPlainObject(entry))
|
|
388
|
+
return;
|
|
389
|
+
if (!isCopyEntryStatus(entry.status)) {
|
|
390
|
+
findings.push({
|
|
391
|
+
rule: "entry-status-shape",
|
|
392
|
+
severity: "error",
|
|
393
|
+
message: `entries.${i}.status must be "draft", "approved", or "retired", got ${JSON.stringify(entry.status)}.`,
|
|
394
|
+
path: `entries.${i}.status`,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
findings.push(...validateTranslationShape(entry.translation, `entries.${i}.translation`));
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
return findings;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Builds a fully-defaulted `CopyRecord` from `value`, which the caller
|
|
404
|
+
* must already know passed `validateCopyRecordShape` with zero findings
|
|
405
|
+
* — this function does no validation of its own and will throw or
|
|
406
|
+
* produce garbage on unvalidated input. Only called internally, from
|
|
407
|
+
* `parseCopyRecord`, immediately after that check — mirrors
|
|
408
|
+
* `@clossys/writer/voice`'s `buildVoiceRecord` exactly, including that
|
|
409
|
+
* split's reasoning: see this file's `parseCopyRecord` doc comment for
|
|
410
|
+
* why this is a deliberate two-pass design.
|
|
411
|
+
*/
|
|
412
|
+
function buildCopyRecord(value) {
|
|
413
|
+
const entriesRaw = value.entries;
|
|
414
|
+
const builtEntries = entriesRaw.map((raw) => {
|
|
415
|
+
const entry = raw;
|
|
416
|
+
return {
|
|
417
|
+
id: entry.id,
|
|
418
|
+
text: entry.text,
|
|
419
|
+
context: entry.context,
|
|
420
|
+
placeholders: [...(entry.placeholders ?? [])],
|
|
421
|
+
factRef: entry.factRef,
|
|
422
|
+
};
|
|
423
|
+
});
|
|
424
|
+
return {
|
|
425
|
+
id: value.id,
|
|
426
|
+
entries: builtEntries,
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
function buildCopyRegistry(value) {
|
|
430
|
+
const record = buildCopyRecord(value);
|
|
431
|
+
const entries = value.entries.map((entry) => ({
|
|
432
|
+
...record.entries.find((item) => item.id === entry.id),
|
|
433
|
+
status: entry.status,
|
|
434
|
+
translation: entry.translation,
|
|
435
|
+
}));
|
|
436
|
+
return {
|
|
437
|
+
...record,
|
|
438
|
+
locale: value.locale,
|
|
439
|
+
revision: value.revision,
|
|
440
|
+
source: value.source,
|
|
441
|
+
entries,
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Parses `value` as a `CopyRecord`, throwing a plain `Error` (never a
|
|
446
|
+
* `CopyFinding[]`) if it does not conform. For a caller that wants
|
|
447
|
+
* fail-fast construction — `registry.ts`'s `readCopyRecord`, in
|
|
448
|
+
* particular — rather than `validateCopyRecordShape`'s "collect every
|
|
449
|
+
* problem and keep going" shape. The thrown message includes every issue
|
|
450
|
+
* `validateCopyRecordShape` would have reported, joined, so nothing is
|
|
451
|
+
* lost by throwing instead of returning.
|
|
452
|
+
*
|
|
453
|
+
* Calls `validateCopyRecordShape(value)` and, only if it reports zero
|
|
454
|
+
* findings, makes one further pass over `value` (`buildCopyRecord`) to
|
|
455
|
+
* apply this schema's one default (`placeholders: []`) and produce a
|
|
456
|
+
* fully populated `CopyRecord`. This two-pass shape mirrors
|
|
457
|
+
* `@clossys/writer/voice`'s `parseVoiceRecord` — see that function's own
|
|
458
|
+
* doc comment for the fuller TOCTOU-safety argument for why reading twice
|
|
459
|
+
* is a deliberate choice here, not an oversight, given this package's
|
|
460
|
+
* actual threat model (a consumer's own in-memory config object, not a
|
|
461
|
+
* value crossing a real trust boundary).
|
|
462
|
+
*/
|
|
463
|
+
export function parseCopyRecord(value) {
|
|
464
|
+
const findings = validateCopyRecordShape(value);
|
|
465
|
+
if (findings.length > 0) {
|
|
466
|
+
const detail = findings.map((f) => ` - ${f.path ?? "(root)"}: ${f.message}`).join("\n");
|
|
467
|
+
throw new Error(`parseCopyRecord: value is not a valid CopyRecord:\n${detail}`);
|
|
468
|
+
}
|
|
469
|
+
// Safe: validateCopyRecordShape returning no findings means every field
|
|
470
|
+
// buildCopyRecord reads below is present and correctly typed.
|
|
471
|
+
return buildCopyRecord(value);
|
|
472
|
+
}
|
|
473
|
+
/** Parses a versioned, locale-specific registry or throws every finding. */
|
|
474
|
+
export function parseCopyRegistry(value) {
|
|
475
|
+
const findings = validateCopyRegistryShape(value);
|
|
476
|
+
if (findings.length > 0) {
|
|
477
|
+
const detail = findings.map((f) => ` - ${f.path ?? "(root)"}: ${f.message}`).join("\n");
|
|
478
|
+
throw new Error(`parseCopyRegistry: value is not a valid CopyRegistry:\n${detail}`);
|
|
479
|
+
}
|
|
480
|
+
return buildCopyRegistry(value);
|
|
481
|
+
}
|
|
482
|
+
//# sourceMappingURL=schema.js.map
|