@adminiumjs/add-on-contracts 0.2.5 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/add-on-block.d.ts +6 -0
- package/dist/add-on-block.d.ts.map +1 -1
- package/dist/contracts.d.ts +9 -2
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +24 -2
- package/dist/contracts.js.map +1 -1
- package/dist/document-render.d.ts +547 -0
- package/dist/document-render.d.ts.map +1 -0
- package/dist/document-render.js +228 -0
- package/dist/document-render.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/slots.d.ts +21 -1
- package/dist/slots.d.ts.map +1 -1
- package/dist/slots.js +94 -1
- package/dist/slots.js.map +1 -1
- package/dist/testing/index.d.ts +61 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +383 -0
- package/dist/testing/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
/**
|
|
3
|
+
* `document-render@1` (34-invoices-add-on.md §4, Appendices A and B) — the
|
|
4
|
+
* fourth contract, and the first one Adminium ITSELF consumes.
|
|
5
|
+
*
|
|
6
|
+
* It provides KINDS OF DOCUMENT an add-on can describe — an outline of slots,
|
|
7
|
+
* every label written in all eight compiled locales — and render to BYTES. The
|
|
8
|
+
* consumer is the engine document pipeline (profiles, the record trigger, the
|
|
9
|
+
* `document.render` job, the `/documents` routes), which is the first
|
|
10
|
+
* production read of `runtime.providers`: a provider is selected by the
|
|
11
|
+
* profile's add-on key, never by `resolveProvider`'s lowest-key choice.
|
|
12
|
+
*
|
|
13
|
+
* ── THE SUBJECT IS THE ONLY DOOR (31 A.1's rule, applied to a contract) ─────
|
|
14
|
+
*
|
|
15
|
+
* A provider receives VALUES and returns BYTES. It gets no database handle, no
|
|
16
|
+
* network, and — the one that gets forgotten — no clock: `subject.now` is the
|
|
17
|
+
* only time it may read, which is what makes 25 D12's byte-identical claim
|
|
18
|
+
* testable rather than aspirational. `describeDocumentRenderer` renders twice
|
|
19
|
+
* and compares every byte.
|
|
20
|
+
*
|
|
21
|
+
* ── BYTES, NOT A `FileRef` ─────────────────────────────────────────────────
|
|
22
|
+
*
|
|
23
|
+
* {@link RenderedDocument.bytes} is a `Uint8Array`. `FileRef.bytes`
|
|
24
|
+
* (`common.ts:14,22`) is a COUNT, and a provider that returned one would be
|
|
25
|
+
* claiming it had already stored the file — which it cannot do, having no file
|
|
26
|
+
* seam. The engine stores what comes back; the provider never does.
|
|
27
|
+
*
|
|
28
|
+
* ── PER-KIND `formats` AND `coverage`, AND WHY THEY ARE ON THE KIND ────────
|
|
29
|
+
*
|
|
30
|
+
* "HTML always, PDF always" is NOT this contract's law. `label-sheet` is
|
|
31
|
+
* `['pdf']` with nothing to say in HTML; `receipt` draws on 80 mm paper no A4
|
|
32
|
+
* consumer wants. And a writer that draws Helvetica's WinAnsi repertoire
|
|
33
|
+
* cannot draw Arabic or Han — so a kind declares the glyphs it covers and
|
|
34
|
+
* REFUSES what it cannot draw, typed, as {@link DocumentError} `LATIN_ONLY`
|
|
35
|
+
* carrying the offending glyphs. A silent drop would ship an invoice with a
|
|
36
|
+
* customer's name missing letters (34 D6, O11, O12).
|
|
37
|
+
*
|
|
38
|
+
* ── THE `body` CHANNEL IS A ONE-WAY DOOR, AND IT IS OPEN ───────────────────
|
|
39
|
+
*
|
|
40
|
+
* §4.3 ships this module verbatim into eighteen repos before the first
|
|
41
|
+
* provider exists, so a field added later is a second eighteen-repo ceremony
|
|
42
|
+
* plus a second contract release. {@link RenderInput.body} is therefore here in
|
|
43
|
+
* the first release. Its shape is O28(a2) — ruled 2026-09-07 as **D54**: an
|
|
44
|
+
* opaque `Readonly<Record<string, unknown>>` whose schema the PROVIDER owns. A
|
|
45
|
+
* typed union would have frozen the redesigned comp's 27 block kinds
|
|
46
|
+
* (`Invoice Builder.dc.html` blockOrder:1114, custom:1266-1272) into a
|
|
47
|
+
* contract eighteen repos vendor, making every later block a contract release.
|
|
48
|
+
*
|
|
49
|
+
* A starter is a TEMPLATE PRESET, not a kind (O28(b), D54) — which is why
|
|
50
|
+
* `kinds()` stays at three for the invoices provider while the surface offers
|
|
51
|
+
* twelve starters over eight titles.
|
|
52
|
+
*/
|
|
53
|
+
import { z } from 'zod';
|
|
54
|
+
/**
|
|
55
|
+
* The eight compiled locales, HYPHENATED — the spelling the add-ons repo
|
|
56
|
+
* already writes (`barcode-labels/src/i18n/strings.ts`, and the `LOCALES`
|
|
57
|
+
* array repeated in `host/src/app-neutral.test.ts:435`).
|
|
58
|
+
*
|
|
59
|
+
* **[DEP-33 — a departure from Appendix B, forced and minimal.]** Appendix B
|
|
60
|
+
* names this type `BuiltinLocaleId`. `@adminium/i18n` ALREADY exports a
|
|
61
|
+
* `BuiltinLocaleId` (`locales.ts:82`) and its members are the UNDERSCORE
|
|
62
|
+
* spellings — `en_US`, `ar_EG`. Two same-named unions with different members
|
|
63
|
+
* is not a nuisance, it is a data bug waiting in `apps/server`, which will
|
|
64
|
+
* import both the moment 34b wires the pipeline: `'en-US'` assigned where
|
|
65
|
+
* `'en_US'` is meant fails no compile and produces a missing translation at
|
|
66
|
+
* run time. So the contract's type is named for the contract. The MEMBERS are
|
|
67
|
+
* Appendix B's, unchanged.
|
|
68
|
+
*/
|
|
69
|
+
export const DOCUMENT_LOCALE_IDS = [
|
|
70
|
+
'ar-EG',
|
|
71
|
+
'cs-CZ',
|
|
72
|
+
'da-DK',
|
|
73
|
+
'de-DE',
|
|
74
|
+
'en-US',
|
|
75
|
+
'fr-FR',
|
|
76
|
+
'zh-CN',
|
|
77
|
+
'zh-TW',
|
|
78
|
+
];
|
|
79
|
+
export const localizedTextSchema = z
|
|
80
|
+
.object(Object.fromEntries(DOCUMENT_LOCALE_IDS.map((id) => [id, z.string().min(1)])))
|
|
81
|
+
.strict();
|
|
82
|
+
/** What a kind may be rendered to. */
|
|
83
|
+
export const DOCUMENT_FORMATS = ['html', 'pdf'];
|
|
84
|
+
/** The paper a kind is drawn for. `receipt-80mm` is a till roll, not a sheet. */
|
|
85
|
+
export const DOCUMENT_PAPERS = ['a4', 'letter', 'receipt-80mm'];
|
|
86
|
+
/**
|
|
87
|
+
* Which glyphs the kind's PDF writer can draw.
|
|
88
|
+
*
|
|
89
|
+
* `ascii` — 0x20..0x7E only (barcode-labels' scaffold: every byte is ASCII, so
|
|
90
|
+
* `String.length` is the byte length and the xref offsets are exact).
|
|
91
|
+
* `winansi` — the 224 drawable code points of WinAnsiEncoding, which is base-14
|
|
92
|
+
* Helvetica's repertoire: Latin-1 plus €, the smart quotes and the dashes.
|
|
93
|
+
* `all` — no refusal is possible; nothing claims it yet.
|
|
94
|
+
*/
|
|
95
|
+
export const DOCUMENT_COVERAGES = ['ascii', 'winansi', 'all'];
|
|
96
|
+
export const documentKindSchema = z
|
|
97
|
+
.object({
|
|
98
|
+
id: z.string().regex(/^[a-z][a-z0-9-]*$/, 'kind id must be kebab-case'),
|
|
99
|
+
label: localizedTextSchema,
|
|
100
|
+
formats: z.array(z.enum(DOCUMENT_FORMATS)).min(1),
|
|
101
|
+
paper: z.array(z.enum(DOCUMENT_PAPERS)).min(1),
|
|
102
|
+
coverage: z.enum(DOCUMENT_COVERAGES),
|
|
103
|
+
})
|
|
104
|
+
.strict();
|
|
105
|
+
/** The value types a slot can carry. `money` is integer minor units; `percent` is basis points. */
|
|
106
|
+
export const OUTLINE_SLOT_TYPES = [
|
|
107
|
+
'text',
|
|
108
|
+
'text[]',
|
|
109
|
+
'date',
|
|
110
|
+
'email',
|
|
111
|
+
'money',
|
|
112
|
+
'percent',
|
|
113
|
+
'currency',
|
|
114
|
+
'number',
|
|
115
|
+
'collection',
|
|
116
|
+
];
|
|
117
|
+
/**
|
|
118
|
+
* Where an unmapped slot's value comes from, if anywhere.
|
|
119
|
+
*
|
|
120
|
+
* `sequence` — the engine's CAS document number, minted after render (34 D11).
|
|
121
|
+
* `connection` — the connection's currency.
|
|
122
|
+
* `setting` — one of the add-on's own non-secret settings.
|
|
123
|
+
* `now` — `subject.now.iso`, never the provider's own clock.
|
|
124
|
+
*/
|
|
125
|
+
export const OUTLINE_SLOT_DEFAULTS = ['sequence', 'connection', 'setting', 'now'];
|
|
126
|
+
const outlineSlotShape = {
|
|
127
|
+
id: z.string().regex(/^[A-Za-z][A-Za-z0-9_]*$/, 'slot id must be an identifier'),
|
|
128
|
+
label: localizedTextSchema,
|
|
129
|
+
help: localizedTextSchema.optional(),
|
|
130
|
+
type: z.enum(OUTLINE_SLOT_TYPES),
|
|
131
|
+
required: z.boolean(),
|
|
132
|
+
default: z.enum(OUTLINE_SLOT_DEFAULTS).optional(),
|
|
133
|
+
};
|
|
134
|
+
/** One column of a `collection`. A column is never itself a collection. */
|
|
135
|
+
export const outlineLeafSlotSchema = z.object(outlineSlotShape).strict();
|
|
136
|
+
/**
|
|
137
|
+
* The depth limit is in the SCHEMA, not in a comment.
|
|
138
|
+
*
|
|
139
|
+
* `OutlineSlot.columns` is typed `readonly OutlineSlot[]` (Appendix B), which
|
|
140
|
+
* would admit a collection of collections; nothing maps one, no renderer draws
|
|
141
|
+
* one, and the Studio mapping editor has no row for one. So the validator
|
|
142
|
+
* accepts exactly two levels and refuses the third — a provider that returns a
|
|
143
|
+
* nested collection fails `describeDocumentRenderer` with a parse error naming
|
|
144
|
+
* the slot, rather than passing here and rendering an empty table later.
|
|
145
|
+
*/
|
|
146
|
+
export const outlineSlotSchema = z
|
|
147
|
+
.object({ ...outlineSlotShape, columns: z.array(outlineLeafSlotSchema).optional() })
|
|
148
|
+
.strict();
|
|
149
|
+
export const documentOutlineSchema = z
|
|
150
|
+
.object({ slots: z.array(outlineSlotSchema) })
|
|
151
|
+
.strict();
|
|
152
|
+
export const publicDocumentRequestSchema = z
|
|
153
|
+
.object({
|
|
154
|
+
kind: z.string().min(1),
|
|
155
|
+
locale: z.string().min(2).optional(),
|
|
156
|
+
fields: z.record(z.string(), z.unknown()),
|
|
157
|
+
collections: z.record(z.string(), z.array(z.record(z.string(), z.unknown()))),
|
|
158
|
+
// Loose on purpose, the way `emailTestSendBody` is
|
|
159
|
+
// (`apps/server/src/routes/email-templates/schema.ts:160-165`): the SMTP
|
|
160
|
+
// relay is the real authority on what it will accept, and this address is
|
|
161
|
+
// stored for a person to review before anything is sent.
|
|
162
|
+
customerEmail: z.string().trim().min(3).max(320).optional(),
|
|
163
|
+
})
|
|
164
|
+
.strict();
|
|
165
|
+
export const documentSubjectSchema = z
|
|
166
|
+
.object({
|
|
167
|
+
now: z.object({ iso: z.string().min(1), timezone: z.string().min(1) }).strict(),
|
|
168
|
+
locale: z.string().min(2),
|
|
169
|
+
currency: z.string().length(3),
|
|
170
|
+
business: z
|
|
171
|
+
.object({
|
|
172
|
+
name: z.string().min(1),
|
|
173
|
+
lines: z.array(z.string()),
|
|
174
|
+
logoDataUrl: z.string().optional(),
|
|
175
|
+
})
|
|
176
|
+
.strict(),
|
|
177
|
+
entity: z
|
|
178
|
+
.object({
|
|
179
|
+
connectionId: z.string(),
|
|
180
|
+
table: z.string(),
|
|
181
|
+
pk: z.record(z.string(), z.unknown()),
|
|
182
|
+
label: z.string(),
|
|
183
|
+
})
|
|
184
|
+
.strict()
|
|
185
|
+
.nullable(),
|
|
186
|
+
number: z.string().nullable(),
|
|
187
|
+
fields: z.record(z.string(), z.unknown()),
|
|
188
|
+
collections: z.record(z.string(), z.array(z.record(z.string(), z.unknown()))),
|
|
189
|
+
})
|
|
190
|
+
.strict();
|
|
191
|
+
export const renderedDocumentSchema = z
|
|
192
|
+
.object({
|
|
193
|
+
format: z.enum(DOCUMENT_FORMATS),
|
|
194
|
+
filename: z.string().min(1),
|
|
195
|
+
mediaType: z.string().min(1),
|
|
196
|
+
bytes: z.instanceof(Uint8Array),
|
|
197
|
+
locale: z.string().min(2),
|
|
198
|
+
warnings: z.array(z.string()),
|
|
199
|
+
})
|
|
200
|
+
.strict();
|
|
201
|
+
/**
|
|
202
|
+
* A refusal is DATA, returned — never thrown, and never a silent partial
|
|
203
|
+
* result. `shipping-carrier`'s `CarrierError` is a class because a carrier's
|
|
204
|
+
* own words have to reach the screen verbatim; here every refusal is one of
|
|
205
|
+
* four things the engine can act on, so a union of codes is the honest shape.
|
|
206
|
+
*/
|
|
207
|
+
export const DOCUMENT_ERROR_CODES = [
|
|
208
|
+
/** A glyph the kind's writer cannot draw. `dropped` names them. */
|
|
209
|
+
'LATIN_ONLY',
|
|
210
|
+
/** `render`/`describe` was called with a kind `kinds()` does not list. */
|
|
211
|
+
'UNSUPPORTED_KIND',
|
|
212
|
+
/** A slot the outline marks `required` had no value. */
|
|
213
|
+
'MISSING_SLOT',
|
|
214
|
+
/** The subject did not parse — a wrong type, a malformed body. */
|
|
215
|
+
'INVALID_SUBJECT',
|
|
216
|
+
];
|
|
217
|
+
export const documentErrorSchema = z
|
|
218
|
+
.object({
|
|
219
|
+
code: z.enum(DOCUMENT_ERROR_CODES),
|
|
220
|
+
detail: z.string().optional(),
|
|
221
|
+
dropped: z.array(z.string()).optional(),
|
|
222
|
+
})
|
|
223
|
+
.strict();
|
|
224
|
+
/** Narrows `render`'s union without a `code in x` incantation at every call site. */
|
|
225
|
+
export function isDocumentError(value) {
|
|
226
|
+
return !Array.isArray(value);
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=document-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-render.js","sourceRoot":"","sources":["../src/document-render.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,5 +14,6 @@ export { CONTRACT_REGISTRY, CONTRACT_IDS, contractIdSchema, isContractId, hasCon
|
|
|
14
14
|
export { ADD_ON_CATEGORIES, ADD_ON_ISSUE_CODES, CONNECT_KINDS, addOnBlockSchema, addOnCategorySchema, addOnConnectSchema, addOnEventSchema, addOnNetworkSchema, attachTargetSchema, connectKindSchema, consumesSchema, providesSchema, slotFillSchema, type AddOnBlock, type AddOnCategory, type AddOnIssueCode, type ConnectKind, } from './add-on-block.js';
|
|
15
15
|
export { artworkRefSchema, jobSpecSchema, type ArtworkRef, type ArtworkSource, type AvailabilityVerdict, type JobSpec, } from './artwork-source.js';
|
|
16
16
|
export { CarrierError, addressSchema, parcelSchema, rateSchema, shipmentSchema, trackEventSchema, type Address, type OrderRef, type Parcel, type Rate, type Shipment, type ShippingCarrier, type TrackEvent, } from './shipping-carrier.js';
|
|
17
|
+
export { DOCUMENT_COVERAGES, DOCUMENT_ERROR_CODES, DOCUMENT_FORMATS, DOCUMENT_LOCALE_IDS, DOCUMENT_PAPERS, OUTLINE_SLOT_DEFAULTS, OUTLINE_SLOT_TYPES, documentErrorSchema, documentKindSchema, documentOutlineSchema, documentSubjectSchema, isDocumentError, localizedTextSchema, outlineSlotSchema, publicDocumentRequestSchema, renderedDocumentSchema, type DocumentCoverage, type DocumentError, type DocumentErrorCode, type DocumentFormat, type DocumentKind, type DocumentLocaleId, type DocumentOutline, type DocumentPaper, type DocumentRenderer, type DocumentSubject, type LocalizedText, type OutlineSlot, type OutlineSlotDefault, type OutlineSlotType, type PublicDocumentRequest, type RecordRef, type RenderInput, type RenderedDocument, } from './document-render.js';
|
|
17
18
|
export { personalizationSchema, templateSchema, zoneSchema, type Personalization, type PreviewRef, type ProductPersonalizer, type ProductRef, type Template, type Verdict, type Zone, type ZoneFinish, type ZoneKind, } from './product-personalizer.js';
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,+BAA+B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EACL,aAAa,EACb,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EACd,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,OAAO,GACb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,UAAU,GAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,QAAQ,GACd,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,+BAA+B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EACL,aAAa,EACb,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,KAAK,UAAU,EACf,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EACd,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,OAAO,GACb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,UAAU,GAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,QAAQ,GACd,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,5 +15,6 @@ export { CONTRACT_REGISTRY, CONTRACT_IDS, contractIdSchema, isContractId, hasCon
|
|
|
15
15
|
export { ADD_ON_CATEGORIES, ADD_ON_ISSUE_CODES, CONNECT_KINDS, addOnBlockSchema, addOnCategorySchema, addOnConnectSchema, addOnEventSchema, addOnNetworkSchema, attachTargetSchema, connectKindSchema, consumesSchema, providesSchema, slotFillSchema, } from './add-on-block.js';
|
|
16
16
|
export { artworkRefSchema, jobSpecSchema, } from './artwork-source.js';
|
|
17
17
|
export { CarrierError, addressSchema, parcelSchema, rateSchema, shipmentSchema, trackEventSchema, } from './shipping-carrier.js';
|
|
18
|
+
export { DOCUMENT_COVERAGES, DOCUMENT_ERROR_CODES, DOCUMENT_FORMATS, DOCUMENT_LOCALE_IDS, DOCUMENT_PAPERS, OUTLINE_SLOT_DEFAULTS, OUTLINE_SLOT_TYPES, documentErrorSchema, documentKindSchema, documentOutlineSchema, documentSubjectSchema, isDocumentError, localizedTextSchema, outlineSlotSchema, publicDocumentRequestSchema, renderedDocumentSchema, } from './document-render.js';
|
|
18
19
|
export { personalizationSchema, templateSchema, zoneSchema, } from './product-personalizer.js';
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAE1D,OAAO,EACL,aAAa,EACb,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,cAAc,GAKf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GAGnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,GAKf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,gBAAgB,EAChB,aAAa,GAKd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,cAAc,EACd,gBAAgB,GAQjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,UAAU,GAUX,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAE1D,OAAO,EACL,aAAa,EACb,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,cAAc,GAKf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GAGnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,GAKf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,gBAAgB,EAChB,aAAa,GAKd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,cAAc,EACd,gBAAgB,GAQjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,GAmBvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,UAAU,GAUX,MAAM,2BAA2B,CAAC"}
|
package/dist/slots.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Slot registry v1 — CLOSED (24-marketplace-wave-4.md §5.4; eleven slots, plus
|
|
3
|
-
*
|
|
3
|
+
* two bought since and named at the end of the list, in the order they were
|
|
4
|
+
* bought).
|
|
4
5
|
*
|
|
5
6
|
* A slot is a named place in a host surface, its payload, and its fill rule.
|
|
6
7
|
* The registry is closed for the same reason the widget-id vocabulary is: an
|
|
@@ -27,6 +28,18 @@
|
|
|
27
28
|
* reader does not have to take the distinction on trust. If a second slot ever
|
|
28
29
|
* lands here on weaker evidence than that, this paragraph is the thing it
|
|
29
30
|
* should be measured against.
|
|
31
|
+
*
|
|
32
|
+
* A SECOND SLOT DID, AND IT IS MEASURED AGAINST THIS PARAGRAPH IN ITS OWN
|
|
33
|
+
* ENTRY. `shell.overlay` (2026-09-01) carries FOUR exhibits, not seven, and one
|
|
34
|
+
* of the four is an absence. It is therefore the weaker dossier and its entry
|
|
35
|
+
* says so in those words rather than dressing four up as enough. What it has
|
|
36
|
+
* that `record.actions` did not is the thing the paragraph above the last one
|
|
37
|
+
* asks for: it ships WITH its fill, in the same wave, so the registry's founding
|
|
38
|
+
* rule — a slot nobody fills is a guess — is satisfied on the day it lands
|
|
39
|
+
* instead of being owed to a later wave. The two entries are the two ways a
|
|
40
|
+
* purchase can be honest, and neither is the template for a third: a third that
|
|
41
|
+
* has neither seven exhibits nor a fill in the same wave is the guess this
|
|
42
|
+
* registry is closed against.
|
|
30
43
|
*/
|
|
31
44
|
import { z } from 'zod';
|
|
32
45
|
/** Which persona's surface the slot lives in. */
|
|
@@ -121,6 +134,12 @@ export declare const SLOT_REGISTRY: readonly [{
|
|
|
121
134
|
readonly fill: "multi";
|
|
122
135
|
readonly payload: "what kind of record it is, the record, and a way to write back";
|
|
123
136
|
readonly renders: "an action and the panel its result lands in";
|
|
137
|
+
}, {
|
|
138
|
+
readonly id: "shell.overlay";
|
|
139
|
+
readonly surface: "customer";
|
|
140
|
+
readonly fill: "multi";
|
|
141
|
+
readonly payload: "the host shell: brand, screen, locale, clock, what it knows of the visitor, an open request, and the environment handles (token, storage, public client, suggest, handoff)";
|
|
142
|
+
readonly renders: "a floating affordance and its panel, stacked at the inline-end corner";
|
|
124
143
|
}];
|
|
125
144
|
export type SlotId = (typeof SLOT_REGISTRY)[number]['id'];
|
|
126
145
|
export declare const SLOT_IDS: readonly SlotId[];
|
|
@@ -137,6 +156,7 @@ export declare const slotIdSchema: z.ZodEnum<{
|
|
|
137
156
|
"order.line.actions": "order.line.actions";
|
|
138
157
|
"record.editor.panel": "record.editor.panel";
|
|
139
158
|
"record.actions": "record.actions";
|
|
159
|
+
"shell.overlay": "shell.overlay";
|
|
140
160
|
}>;
|
|
141
161
|
export declare function isSlotId(v: unknown): v is SlotId;
|
|
142
162
|
export declare function slotDefinition(id: SlotId): SlotDefinition;
|
package/dist/slots.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../src/slots.ts"],"names":[],"mappings":"AACA
|
|
1
|
+
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../src/slots.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,iDAAiD;AACjD,eAAO,MAAM,aAAa,iDAAkD,CAAC;AAC7E,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,4CAA6C,CAAC;AACrE,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoPoB,CAAC;AAE/C,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAE1D,eAAO,MAAM,QAAQ,EAAqC,SAAS,MAAM,EAAE,CAAC;AAE5E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;EAAuD,CAAC;AAIjF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAEhD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,CAKzD"}
|
package/dist/slots.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
2
|
/**
|
|
3
3
|
* Slot registry v1 — CLOSED (24-marketplace-wave-4.md §5.4; eleven slots, plus
|
|
4
|
-
*
|
|
4
|
+
* two bought since and named at the end of the list, in the order they were
|
|
5
|
+
* bought).
|
|
5
6
|
*
|
|
6
7
|
* A slot is a named place in a host surface, its payload, and its fill rule.
|
|
7
8
|
* The registry is closed for the same reason the widget-id vocabulary is: an
|
|
@@ -28,6 +29,18 @@
|
|
|
28
29
|
* reader does not have to take the distinction on trust. If a second slot ever
|
|
29
30
|
* lands here on weaker evidence than that, this paragraph is the thing it
|
|
30
31
|
* should be measured against.
|
|
32
|
+
*
|
|
33
|
+
* A SECOND SLOT DID, AND IT IS MEASURED AGAINST THIS PARAGRAPH IN ITS OWN
|
|
34
|
+
* ENTRY. `shell.overlay` (2026-09-01) carries FOUR exhibits, not seven, and one
|
|
35
|
+
* of the four is an absence. It is therefore the weaker dossier and its entry
|
|
36
|
+
* says so in those words rather than dressing four up as enough. What it has
|
|
37
|
+
* that `record.actions` did not is the thing the paragraph above the last one
|
|
38
|
+
* asks for: it ships WITH its fill, in the same wave, so the registry's founding
|
|
39
|
+
* rule — a slot nobody fills is a guess — is satisfied on the day it lands
|
|
40
|
+
* instead of being owed to a later wave. The two entries are the two ways a
|
|
41
|
+
* purchase can be honest, and neither is the template for a third: a third that
|
|
42
|
+
* has neither seven exhibits nor a fill in the same wave is the guess this
|
|
43
|
+
* registry is closed against.
|
|
31
44
|
*/
|
|
32
45
|
import { z } from 'zod';
|
|
33
46
|
/** Which persona's surface the slot lives in. */
|
|
@@ -202,6 +215,86 @@ export const SLOT_REGISTRY = [
|
|
|
202
215
|
payload: 'what kind of record it is, the record, and a way to write back',
|
|
203
216
|
renders: 'an action and the panel its result lands in',
|
|
204
217
|
},
|
|
218
|
+
{
|
|
219
|
+
/*
|
|
220
|
+
* THE THIRTEENTH, BOUGHT ON 2026-09-01 (33-live-chat-add-on.md O1 → D17).
|
|
221
|
+
*
|
|
222
|
+
* The first slot on a CUSTOMER SHELL. Every other customer id in this list
|
|
223
|
+
* is a place inside a flow — a product being configured, a basket line, a
|
|
224
|
+
* checkout's delivery step, a dispatch being read. This one is the layer
|
|
225
|
+
* ABOVE the page: a floating affordance a visitor can reach from any screen
|
|
226
|
+
* in the app, and the panel it opens.
|
|
227
|
+
*
|
|
228
|
+
* ── ITS DOSSIER IS WEAKER THAN `record.actions`', AND SAYS SO ────────────
|
|
229
|
+
*
|
|
230
|
+
* Four exhibits, not seven, written down in 33 Appendix A (deposited into
|
|
231
|
+
* 31 Appendix A as A.4):
|
|
232
|
+
*
|
|
233
|
+
* 1. one shipped implementation — the help desk's chat panel, a
|
|
234
|
+
* store-connected overlay mounted once at the shell and therefore
|
|
235
|
+
* present on all 54 of its views, with SIX host entry points and a
|
|
236
|
+
* hand-off into the host's own ticket model
|
|
237
|
+
* (`support-desk/src/components/ChatWidget.tsx`, `app/App.tsx:320`)
|
|
238
|
+
* 2. the gap the previous purchase's own review recorded — 31 A.3,
|
|
239
|
+
* "neither the 11 nor A.1 covers a customer surface"
|
|
240
|
+
* 3. a dead affordance in the flagship — the storefront footer's
|
|
241
|
+
* "Contact", wired to a demo toast (`Footer.tsx:107-110`)
|
|
242
|
+
* 4. ABSENCE, MEASURED: ten customer-side repos grepped for any way to
|
|
243
|
+
* reach the operator from the shell; zero hits outside the help desk
|
|
244
|
+
*
|
|
245
|
+
* Exhibit 4 is an absence, and an absence is the weakest kind of evidence
|
|
246
|
+
* there is — it says nobody built this, which is equally consistent with
|
|
247
|
+
* nobody wanting it. It is in the list because it is the honest state of
|
|
248
|
+
* the fleet and not because it carries the purchase. What carries the
|
|
249
|
+
* purchase is exhibit 1 plus the condition below.
|
|
250
|
+
*
|
|
251
|
+
* ── WHAT IT HAS THAT THE TWELFTH DID NOT: IT SHIPS WITH ITS FILL ────────
|
|
252
|
+
*
|
|
253
|
+
* `record.actions` arrives unfilled and its entry spends four paragraphs
|
|
254
|
+
* on why that is not a guess. This id needs none of them: `live-chat` fills
|
|
255
|
+
* it in the same wave, from the same plan, and the help desk's own widget
|
|
256
|
+
* is what becomes the fill. The registry's founding rule is therefore met
|
|
257
|
+
* on the day the id lands rather than owed to a later one — which is the
|
|
258
|
+
* whole of the difference, and the reason a four-exhibit dossier was
|
|
259
|
+
* accepted here and would not have been for the twelfth.
|
|
260
|
+
*
|
|
261
|
+
* ── `customer`, AND WHY NOT `both` ──────────────────────────────────────
|
|
262
|
+
*
|
|
263
|
+
* The temptation is `both`: a staff app could hang a floating panel in its
|
|
264
|
+
* corner too. Nothing in the fleet does, and ruling it `both` on that
|
|
265
|
+
* reasoning would be buying a second surface on no exhibits at all — the
|
|
266
|
+
* mistake this entry has just spent forty lines refusing. A staff overlay
|
|
267
|
+
* can be bought the day a staff screen wants one, on its own evidence.
|
|
268
|
+
* `record.actions` went the other way on exhibits, not on symmetry: two of
|
|
269
|
+
* its seven were a reader's own record, so `staff` would have excluded
|
|
270
|
+
* them.
|
|
271
|
+
*
|
|
272
|
+
* ── THE ALTERNATIVE THAT WAS REJECTED, AND IS STILL ON FILE ─────────────
|
|
273
|
+
*
|
|
274
|
+
* Adminium injecting a script into every hosted customer surface, with no
|
|
275
|
+
* slot at all. Rejected for v1 (D3): demo mode needs the seam regardless —
|
|
276
|
+
* an example app running on fixtures has no Adminium to inject anything —
|
|
277
|
+
* and a second mount mechanism is the duplication this layer exists to
|
|
278
|
+
* prevent. It stays on file as the way to reach OPERATOR-BUILT customer
|
|
279
|
+
* pages, which have no seam to mount into (33 D22).
|
|
280
|
+
*
|
|
281
|
+
* ── THE ONE THING A READER SHOULD HOLD AGAINST IT ───────────────────────
|
|
282
|
+
*
|
|
283
|
+
* `fill: 'multi'` promises stacked overlays and there has never been more
|
|
284
|
+
* than one. A second overlay add-on would want to open A PARTICULAR fill
|
|
285
|
+
* from a host entry point, and the payload's `openRequest` is a bare
|
|
286
|
+
* counter that opens every one of them. That is recorded as un-purchased
|
|
287
|
+
* standing evidence (33 D16) rather than pre-solved with a `target` field
|
|
288
|
+
* nothing would pass: `multi` is right because two overlays must coexist
|
|
289
|
+
* without one of them winning, and the day a second one exists the request
|
|
290
|
+
* widens. Until then a host with one fill gets the behaviour it wants.
|
|
291
|
+
*/
|
|
292
|
+
id: 'shell.overlay',
|
|
293
|
+
surface: 'customer',
|
|
294
|
+
fill: 'multi',
|
|
295
|
+
payload: 'the host shell: brand, screen, locale, clock, what it knows of the visitor, an open request, and the environment handles (token, storage, public client, suggest, handoff)',
|
|
296
|
+
renders: 'a floating affordance and its panel, stacked at the inline-end corner',
|
|
297
|
+
},
|
|
205
298
|
];
|
|
206
299
|
export const SLOT_IDS = SLOT_REGISTRY.map((s) => s.id);
|
|
207
300
|
export const slotIdSchema = z.enum(SLOT_IDS);
|
package/dist/slots.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../src/slots.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../src/slots.ts"],"names":[],"mappings":"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"}
|
package/dist/testing/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* storefront, the SPAs and Electron can all use it (01 §3).
|
|
13
13
|
*/
|
|
14
14
|
import { type ArtworkSource, type JobSpec } from '../artwork-source.js';
|
|
15
|
+
import { type DocumentKind, type DocumentRenderer, type DocumentSubject } from '../document-render.js';
|
|
15
16
|
import { type Personalization, type ProductPersonalizer, type ProductRef, type Template } from '../product-personalizer.js';
|
|
16
17
|
import { type Address, type OrderRef, type Parcel, type ShippingCarrier } from '../shipping-carrier.js';
|
|
17
18
|
export interface ArtworkSourceFixtures {
|
|
@@ -45,4 +46,64 @@ export interface ProductPersonalizerFixtures {
|
|
|
45
46
|
angle: string;
|
|
46
47
|
}
|
|
47
48
|
export declare function describeProductPersonalizer(impl: ProductPersonalizer, fixtures: ProductPersonalizerFixtures): void;
|
|
49
|
+
/**
|
|
50
|
+
* What an implementer supplies. Deliberately three fields, not ten.
|
|
51
|
+
*
|
|
52
|
+
* Every hard case this suite exercises — a missing required slot, an accented
|
|
53
|
+
* subject, an Arabic one, a different clock — is DERIVED here from the one
|
|
54
|
+
* valid subject, by rewriting the fields the outline already describes. That
|
|
55
|
+
* keeps the derivations identical across providers (a fixture author cannot
|
|
56
|
+
* accidentally make `MISSING_SLOT` easy by omitting an optional slot instead
|
|
57
|
+
* of a required one), and it keeps the cost of a second implementer near zero,
|
|
58
|
+
* which is the claim `shipping-carrier` makes and this contract inherits.
|
|
59
|
+
*/
|
|
60
|
+
export interface DocumentRendererFixtures {
|
|
61
|
+
/** The add-on's own non-secret values, as the engine would pass them. */
|
|
62
|
+
settings: Readonly<Record<string, unknown>>;
|
|
63
|
+
/** One subject the provider renders happily, per kind. */
|
|
64
|
+
subject: (kind: DocumentKind) => DocumentSubject;
|
|
65
|
+
/** The authored composition, for a provider that takes one (34 D54). */
|
|
66
|
+
body?: (kind: DocumentKind) => Readonly<Record<string, unknown>> | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* The id of a slot whose value the renderer DRAWS VERBATIM — where the suite
|
|
69
|
+
* puts `<script>`, `é ß ø €` and Arabic to see what comes back.
|
|
70
|
+
*
|
|
71
|
+
* It defaults to the kind's first `text` slot, which is right for most
|
|
72
|
+
* providers and wrong for two kinds this suite has already met:
|
|
73
|
+
*
|
|
74
|
+
* · a slot the provider VALIDATES. Push `é` into a slot holding a
|
|
75
|
+
* barcode number and the refusal that comes back is `INVALID_SUBJECT`
|
|
76
|
+
* from the check digit, never `LATIN_ONLY` from the writer — the
|
|
77
|
+
* assertion goes green on the wrong evidence, or red for the wrong
|
|
78
|
+
* reason;
|
|
79
|
+
* · a slot the provider does not PRINT. `barcode-labels`' first text slot
|
|
80
|
+
* is the row key, which is a lookup and appears nowhere on the sheet, so
|
|
81
|
+
* the accented subject rendered perfectly happily and the coverage
|
|
82
|
+
* assertion failed with the provider being entirely correct (found
|
|
83
|
+
* 2026-09-10, 34-T06).
|
|
84
|
+
*
|
|
85
|
+
* A provider with no drawn free-text slot at all returns `undefined` and the
|
|
86
|
+
* escaping and coverage assertions skip — loudly, in the name.
|
|
87
|
+
*/
|
|
88
|
+
textSlot?: (kind: DocumentKind) => string | undefined;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Walk a PDF's cross-reference table back to the objects it points at.
|
|
92
|
+
*
|
|
93
|
+
* This is the assertion that a hand-rolled writer cannot fake. Every offset in
|
|
94
|
+
* the table is a BYTE offset, so a writer that computed them from
|
|
95
|
+
* `String.length` over a stream containing one multi-byte character produces a
|
|
96
|
+
* file every viewer opens and every parser mis-seeks — the exact failure 34's
|
|
97
|
+
* §0.3 trap 8 sends the invoices writer over byte buffers to avoid. Seeking to
|
|
98
|
+
* each offset and requiring `<n> 0 obj` there catches it on the first render.
|
|
99
|
+
*
|
|
100
|
+
* Exported so a writer's own tests can walk its table with the same rules the
|
|
101
|
+
* suite applies, rather than re-deriving a second walker that drifts from
|
|
102
|
+
* this one. Every refusal throws an `Error` naming what it found.
|
|
103
|
+
*/
|
|
104
|
+
export declare function parseXrefBack(bytes: Uint8Array): {
|
|
105
|
+
objects: number;
|
|
106
|
+
offsets: number[];
|
|
107
|
+
};
|
|
108
|
+
export declare function describeDocumentRenderer(impl: DocumentRenderer, fixtures: DocumentRendererFixtures): void;
|
|
48
109
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAoB,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,QAAQ,EACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAKL,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,qBAAqB;IACpC,kCAAkC;IAClC,GAAG,EAAE,OAAO,CAAC;IACb,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,qBAAqB,GAC9B,IAAI,CA2CN;AAID,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,8EAA8E;IAC9E,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,uBAAuB,GAChC,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAoB,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAOL,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAGrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,QAAQ,EACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAKL,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,qBAAqB;IACpC,kCAAkC;IAClC,GAAG,EAAE,OAAO,CAAC;IACb,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,qBAAqB,GAC9B,IAAI,CA2CN;AAID,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,8EAA8E;IAC9E,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,uBAAuB,GAChC,IAAI,CAoHN;AAID,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,kCAAkC;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,4EAA4E;IAC5E,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,2BAA2B,GACpC,IAAI,CAqDN;AAID;;;;;;;;;;GAUG;AACH,MAAM,WAAW,wBAAwB;IACvC,yEAAyE;IACzE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C,0DAA0D;IAC1D,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,eAAe,CAAC;IACjD,wEAAwE;IACxE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAC7E;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,GAAG,SAAS,CAAC;CACvD;AAyDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA0CvF;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,wBAAwB,GACjC,IAAI,CAoSN"}
|