@cratis/components.conformance 0.0.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONFORMANCE.md +64 -0
- package/LICENSE +21 -0
- package/README.md +119 -1
- package/dist/AdapterPackageMetadata.d.ts +28 -0
- package/dist/AdapterPackageMetadata.d.ts.map +1 -0
- package/dist/AdapterPackageMetadata.js +4 -0
- package/dist/AdapterPackageMetadata.js.map +1 -0
- package/dist/ConformanceCheck.d.ts +13 -0
- package/dist/ConformanceCheck.d.ts.map +1 -0
- package/dist/ConformanceCheck.js +4 -0
- package/dist/ConformanceCheck.js.map +1 -0
- package/dist/ConformanceFamily.d.ts +12 -0
- package/dist/ConformanceFamily.d.ts.map +1 -0
- package/dist/ConformanceFamily.js +15 -0
- package/dist/ConformanceFamily.js.map +1 -0
- package/dist/ConformanceLibrary.d.ts +19 -0
- package/dist/ConformanceLibrary.d.ts.map +1 -0
- package/dist/ConformanceLibrary.js +4 -0
- package/dist/ConformanceLibrary.js.map +1 -0
- package/dist/ConformanceLimitation.d.ts +6 -0
- package/dist/ConformanceLimitation.d.ts.map +1 -0
- package/dist/ConformanceLimitation.js +4 -0
- package/dist/ConformanceLimitation.js.map +1 -0
- package/dist/ConformanceOptions.d.ts +19 -0
- package/dist/ConformanceOptions.d.ts.map +1 -0
- package/dist/ConformanceOptions.js +4 -0
- package/dist/ConformanceOptions.js.map +1 -0
- package/dist/ConformanceReport.d.ts +13 -0
- package/dist/ConformanceReport.d.ts.map +1 -0
- package/dist/ConformanceReport.js +4 -0
- package/dist/ConformanceReport.js.map +1 -0
- package/dist/ConformanceSkipRequest.d.ts +7 -0
- package/dist/ConformanceSkipRequest.d.ts.map +1 -0
- package/dist/ConformanceSkipRequest.js +4 -0
- package/dist/ConformanceSkipRequest.js.map +1 -0
- package/dist/ConformanceStatus.d.ts +7 -0
- package/dist/ConformanceStatus.d.ts.map +1 -0
- package/dist/ConformanceStatus.js +10 -0
- package/dist/ConformanceStatus.js.map +1 -0
- package/dist/ConformanceSummary.d.ts +8 -0
- package/dist/ConformanceSummary.d.ts.map +1 -0
- package/dist/ConformanceSummary.js +4 -0
- package/dist/ConformanceSummary.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/SlotProfile.d.ts +20 -0
- package/dist/internal/SlotProfile.d.ts.map +1 -0
- package/dist/internal/SlotProfile.js +4 -0
- package/dist/internal/SlotProfile.js.map +1 -0
- package/dist/internal/metadata.d.ts +9 -0
- package/dist/internal/metadata.d.ts.map +1 -0
- package/dist/internal/metadata.js +196 -0
- package/dist/internal/metadata.js.map +1 -0
- package/dist/internal/reactNormalization.d.ts +12 -0
- package/dist/internal/reactNormalization.d.ts.map +1 -0
- package/dist/internal/reactNormalization.js +45 -0
- package/dist/internal/reactNormalization.js.map +1 -0
- package/dist/internal/slotProfiles.d.ts +4 -0
- package/dist/internal/slotProfiles.d.ts.map +1 -0
- package/dist/internal/slotProfiles.js +608 -0
- package/dist/internal/slotProfiles.js.map +1 -0
- package/dist/runConformance.d.ts +13 -0
- package/dist/runConformance.d.ts.map +1 -0
- package/dist/runConformance.js +504 -0
- package/dist/runConformance.js.map +1 -0
- package/package.json +55 -4
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
// Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
import { act, createElement, createRef, } from 'react';
|
|
4
|
+
import { createRoot, hydrateRoot } from 'react-dom/client';
|
|
5
|
+
import { renderToString } from 'react-dom/server';
|
|
6
|
+
import axe from 'axe-core';
|
|
7
|
+
import { CratisComponentsProvider } from '@cratis/components';
|
|
8
|
+
import { cratisCanonicalPartStates, cratisParts, cratisPartStates, } from '@cratis/components/types';
|
|
9
|
+
import { ConformanceFamily } from './ConformanceFamily.js';
|
|
10
|
+
import { ConformanceStatus } from './ConformanceStatus.js';
|
|
11
|
+
import { compareMetadata, overDeclaredCapabilities, validateMetadata, } from './internal/metadata.js';
|
|
12
|
+
import { composeHandlers, listen, mergeRefs, normalizeReactProps, normalizeStyle, } from './internal/reactNormalization.js';
|
|
13
|
+
import { createSlotProfiles } from './internal/slotProfiles.js';
|
|
14
|
+
const limitations = Object.freeze([
|
|
15
|
+
{
|
|
16
|
+
id: 'automated-a11y-only',
|
|
17
|
+
message: 'axe evidence is automated DOM analysis, not manual assistive-technology or universal accessibility conformance.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
id: 'jsdom-not-browser-matrix',
|
|
21
|
+
message: 'The API exercises DOM, forms, hydration-shaped markup, direction, and media-query inputs; it does not replace the repository Storybook browser/axe gate or a browser matrix.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: 'visual-modes-not-screenshots',
|
|
25
|
+
message: 'Reduced-motion and forced-colors results prove deterministic execution under those inputs, not visual contrast, animation, or high-contrast appearance.',
|
|
26
|
+
},
|
|
27
|
+
]);
|
|
28
|
+
const renderComponent = (declaration, props, ref) => {
|
|
29
|
+
// SAFETY: Slot profiles pair each declaration with props from the same public slot contract.
|
|
30
|
+
const Component = declaration.render;
|
|
31
|
+
return createElement(Component, ref ? { ...props, ref } : props);
|
|
32
|
+
};
|
|
33
|
+
const withProvider = (child, Wrapper) => {
|
|
34
|
+
const components = createElement(CratisComponentsProvider, {
|
|
35
|
+
value: { locale: 'en-US' },
|
|
36
|
+
children: child,
|
|
37
|
+
});
|
|
38
|
+
return Wrapper ? createElement(Wrapper, { children: components }) : components;
|
|
39
|
+
};
|
|
40
|
+
const mount = async (document, declaration, props, refCapable, wrapper, host = document.body) => {
|
|
41
|
+
const container = document.createElement('div');
|
|
42
|
+
const form = document.createElement('form');
|
|
43
|
+
container.append(form);
|
|
44
|
+
host.append(container);
|
|
45
|
+
const root = createRoot(form);
|
|
46
|
+
const ref = createRef();
|
|
47
|
+
await act(async () => {
|
|
48
|
+
root.render(withProvider(renderComponent(declaration, props, refCapable ? ref : undefined), wrapper));
|
|
49
|
+
});
|
|
50
|
+
return { container, form, root, ref };
|
|
51
|
+
};
|
|
52
|
+
const unmount = async (fixture) => {
|
|
53
|
+
await act(async () => fixture.root.unmount());
|
|
54
|
+
fixture.container.remove();
|
|
55
|
+
};
|
|
56
|
+
const markerForPart = (part) => part.replace(/[A-Z]/gu, (letter) => `-${letter.toLowerCase()}`);
|
|
57
|
+
const collectRenderedStates = (root, observed) => {
|
|
58
|
+
for (const element of root.querySelectorAll('[data-cratis-part]')) {
|
|
59
|
+
const part = element.getAttribute('data-cratis-part');
|
|
60
|
+
if (!part)
|
|
61
|
+
continue;
|
|
62
|
+
for (const state of cratisCanonicalPartStates) {
|
|
63
|
+
if (element.hasAttribute(`data-${state}`))
|
|
64
|
+
observed.add(`${part}.${state}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const passThrough = (profile) => Object.fromEntries(profile.ptKeys.map((part) => {
|
|
69
|
+
const marker = {
|
|
70
|
+
className: `conformance-${markerForPart(part)}`,
|
|
71
|
+
style: { [`--conformance-${markerForPart(part)}`]: '1' },
|
|
72
|
+
'data-conformance-part': markerForPart(part),
|
|
73
|
+
};
|
|
74
|
+
const paginatorButton = profile.slotId === 'datatables.paginator' &&
|
|
75
|
+
['first', 'previous', 'next', 'last'].includes(part);
|
|
76
|
+
return [part, paginatorButton ? { root: marker } : marker];
|
|
77
|
+
}));
|
|
78
|
+
const addCheck = (checks, family, id, passed, message, slotId, evidence) => checks.push({
|
|
79
|
+
id,
|
|
80
|
+
family,
|
|
81
|
+
status: passed ? ConformanceStatus.Passed : ConformanceStatus.Failed,
|
|
82
|
+
slotId,
|
|
83
|
+
message,
|
|
84
|
+
evidence,
|
|
85
|
+
});
|
|
86
|
+
const addError = (checks, family, id, error, slotId) => addCheck(checks, family, id, false, error instanceof Error ? error.message : String(error), slotId);
|
|
87
|
+
const skipRequested = (checks, options, library, declaration, checkId, slotId) => {
|
|
88
|
+
const request = options.skips?.find((candidate) => candidate.checkId === checkId);
|
|
89
|
+
if (!request)
|
|
90
|
+
return false;
|
|
91
|
+
let basis;
|
|
92
|
+
if (declaration.fidelity === 'unsupported')
|
|
93
|
+
basis = 'unsupported-fidelity';
|
|
94
|
+
else if (declaration.fidelity === 'emulated')
|
|
95
|
+
basis = 'emulated-fidelity';
|
|
96
|
+
else if (request.missingCapability &&
|
|
97
|
+
!library.capabilities.some((capability) => capability === request.missingCapability))
|
|
98
|
+
basis = 'missing-capability';
|
|
99
|
+
if (!basis) {
|
|
100
|
+
addCheck(checks, ConformanceFamily.Manifest, `skip.${checkId}.undeclared`, false, `Skip '${checkId}' has no unsupported/emulated fidelity or absent declared capability.`, slotId);
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
checks.push({
|
|
104
|
+
id: checkId,
|
|
105
|
+
family: ConformanceFamily.Contract,
|
|
106
|
+
status: ConformanceStatus.Skipped,
|
|
107
|
+
slotId,
|
|
108
|
+
message: `Skipped on declared ${basis}.`,
|
|
109
|
+
skipBasis: basis,
|
|
110
|
+
});
|
|
111
|
+
return true;
|
|
112
|
+
};
|
|
113
|
+
const checkManifest = (checks, library, options) => {
|
|
114
|
+
if (options.metadata) {
|
|
115
|
+
const schemaProblems = validateMetadata(options.metadata);
|
|
116
|
+
addCheck(checks, ConformanceFamily.Manifest, 'manifest.schema', schemaProblems.length === 0, schemaProblems.length === 0
|
|
117
|
+
? 'Static package metadata satisfies the public adapter-schema constraints exercised by this runner.'
|
|
118
|
+
: schemaProblems.join('; '), undefined, { problems: schemaProblems });
|
|
119
|
+
const consistencyProblems = compareMetadata(options.metadata, library);
|
|
120
|
+
addCheck(checks, ConformanceFamily.Manifest, 'manifest.runtimeConsistency', consistencyProblems.length === 0, consistencyProblems.length === 0
|
|
121
|
+
? 'Static package metadata and runtime manifest agree.'
|
|
122
|
+
: consistencyProblems.join('; '), undefined, { problems: consistencyProblems });
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
addCheck(checks, ConformanceFamily.Manifest, 'manifest.schema', false, 'No package.json#cratis metadata was supplied; static/runtime consistency cannot be established.');
|
|
126
|
+
}
|
|
127
|
+
const overDeclarations = overDeclaredCapabilities(library);
|
|
128
|
+
addCheck(checks, ConformanceFamily.Manifest, 'manifest.noOverDeclaration', overDeclarations.length === 0, overDeclarations.length === 0
|
|
129
|
+
? 'Every declared capability has bounded evidence and a supporting slot.'
|
|
130
|
+
: overDeclarations.join('; '), undefined, { problems: overDeclarations });
|
|
131
|
+
const immutable = Object.isFrozen(library) &&
|
|
132
|
+
Object.isFrozen(library.capabilities) &&
|
|
133
|
+
Object.isFrozen(library.profileSlots) &&
|
|
134
|
+
Object.isFrozen(library.slots) &&
|
|
135
|
+
Object.values(library.slots).every((declaration) => declaration === undefined || Object.isFrozen(declaration));
|
|
136
|
+
addCheck(checks, ConformanceFamily.Manifest, 'manifest.immutable', immutable, immutable
|
|
137
|
+
? 'The runtime manifest, capability/profile arrays, slot map, and declarations are immutable.'
|
|
138
|
+
: 'The runtime manifest contains a mutable public container or slot declaration.');
|
|
139
|
+
};
|
|
140
|
+
const checkNormalization = (checks, document) => {
|
|
141
|
+
const normalized = normalizeReactProps({
|
|
142
|
+
class: 'sample',
|
|
143
|
+
for: 'field',
|
|
144
|
+
'stroke-width': 2,
|
|
145
|
+
'fill-rule': 'evenodd',
|
|
146
|
+
});
|
|
147
|
+
const style = normalizeStyle({ color: 'red', '--sample-color': 'blue' });
|
|
148
|
+
const refObject = createRef();
|
|
149
|
+
let callbackRef = null;
|
|
150
|
+
const merged = mergeRefs(refObject, (value) => {
|
|
151
|
+
callbackRef = value;
|
|
152
|
+
});
|
|
153
|
+
const target = document.createElement('div');
|
|
154
|
+
if (typeof merged === 'function')
|
|
155
|
+
merged(target);
|
|
156
|
+
const order = [];
|
|
157
|
+
const prevented = new Event('click', { cancelable: true });
|
|
158
|
+
composeHandlers((event) => {
|
|
159
|
+
order.push('pt');
|
|
160
|
+
event.preventDefault();
|
|
161
|
+
}, () => order.push('public'))(prevented);
|
|
162
|
+
let listenerCalls = 0;
|
|
163
|
+
const cleanup = listen(document, 'click', () => {
|
|
164
|
+
listenerCalls += 1;
|
|
165
|
+
});
|
|
166
|
+
document.dispatchEvent(new Event('click'));
|
|
167
|
+
cleanup();
|
|
168
|
+
cleanup();
|
|
169
|
+
document.dispatchEvent(new Event('click'));
|
|
170
|
+
const passed = normalized.className === 'sample' &&
|
|
171
|
+
normalized.htmlFor === 'field' &&
|
|
172
|
+
normalized.strokeWidth === 2 &&
|
|
173
|
+
normalized.fillRule === 'evenodd' &&
|
|
174
|
+
style.color === 'red' &&
|
|
175
|
+
style['--sample-color'] === 'blue' &&
|
|
176
|
+
refObject.current === target &&
|
|
177
|
+
callbackRef === target &&
|
|
178
|
+
order.join(',') === 'pt' &&
|
|
179
|
+
listenerCalls === 1;
|
|
180
|
+
addCheck(checks, ConformanceFamily.ReactNormalization, 'reactNormalization.publicBoundary', passed, passed
|
|
181
|
+
? 'React className/htmlFor/style/CSS-variable/SVG casing, ref merge, handler order, preventDefault, and idempotent listener cleanup are normalized.'
|
|
182
|
+
: 'React boundary normalization fixture failed.', undefined, { normalized, order, listenerCalls });
|
|
183
|
+
};
|
|
184
|
+
const checkSlot = async (checks, library, options, document, profile) => {
|
|
185
|
+
const declaration = library.slots[profile.slotId];
|
|
186
|
+
if (!declaration) {
|
|
187
|
+
addCheck(checks, ConformanceFamily.Contract, `contract.${profile.slotId}.declaration`, false, 'Promised slot has no runtime declaration.', profile.slotId);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const typedDeclaration = declaration;
|
|
191
|
+
const contractId = `contract.${profile.slotId}`;
|
|
192
|
+
if (skipRequested(checks, options, library, typedDeclaration, contractId, profile.slotId))
|
|
193
|
+
return;
|
|
194
|
+
let fixture;
|
|
195
|
+
const variantFixtures = [];
|
|
196
|
+
const observedStateAssociations = new Set();
|
|
197
|
+
try {
|
|
198
|
+
const baseProps = {
|
|
199
|
+
...profile.createProps(),
|
|
200
|
+
className: 'conformance-public-class',
|
|
201
|
+
pt: passThrough(profile),
|
|
202
|
+
'data-conformance-behavior-prop': 'forwarded',
|
|
203
|
+
};
|
|
204
|
+
fixture = await mount(document, typedDeclaration, baseProps, profile.refCapable, options.wrapper);
|
|
205
|
+
if (profile.activate)
|
|
206
|
+
await act(async () => profile.activate?.(document, fixture?.container ?? document.body));
|
|
207
|
+
collectRenderedStates(document, observedStateAssociations);
|
|
208
|
+
for (const variant of profile.createPartVariants?.() ?? []) {
|
|
209
|
+
const variantFixture = await mount(document, typedDeclaration, { ...variant, pt: passThrough(profile) }, profile.refCapable, options.wrapper);
|
|
210
|
+
variantFixtures.push(variantFixture);
|
|
211
|
+
if (profile.activate) {
|
|
212
|
+
await act(async () => profile.activate?.(document, variantFixture.container));
|
|
213
|
+
}
|
|
214
|
+
collectRenderedStates(document, observedStateAssociations);
|
|
215
|
+
}
|
|
216
|
+
const expectedParts = [...cratisParts[profile.partsKey]].filter((part) => !profile.conditionallyAbsentParts?.includes(part));
|
|
217
|
+
const foundParts = new Set(Array.from(document.querySelectorAll('[data-cratis-part]'))
|
|
218
|
+
.map((element) => element.getAttribute('data-cratis-part'))
|
|
219
|
+
.filter((part) => Boolean(part)));
|
|
220
|
+
const missingParts = expectedParts.filter((part) => !foundParts.has(part));
|
|
221
|
+
addCheck(checks, ConformanceFamily.Contract, `${contractId}.parts`, missingParts.length === 0, missingParts.length === 0
|
|
222
|
+
? 'Every documented stable DOM part was observed.'
|
|
223
|
+
: `Missing parts: ${missingParts.join(', ')}.`, profile.slotId, { expectedParts, foundParts: [...foundParts].sort() });
|
|
224
|
+
const missingPassThrough = profile.ptKeys
|
|
225
|
+
.filter((part) => !profile.conditionallyAbsentParts?.includes(part))
|
|
226
|
+
.filter((part) => !document.querySelector(`[data-conformance-part="${markerForPart(part)}"]`));
|
|
227
|
+
addCheck(checks, ConformanceFamily.Contract, `${contractId}.pt`, missingPassThrough.length === 0, missingPassThrough.length === 0
|
|
228
|
+
? 'Every typed pt key reached its intended real part.'
|
|
229
|
+
: `pt did not reach: ${missingPassThrough.join(', ')}.`, profile.slotId, { ptKeys: profile.ptKeys });
|
|
230
|
+
for (const variantFixture of variantFixtures)
|
|
231
|
+
await unmount(variantFixture);
|
|
232
|
+
variantFixtures.length = 0;
|
|
233
|
+
const native = fixture.container.querySelector(profile.nativeSelector) ??
|
|
234
|
+
document.querySelector(profile.nativeSelector);
|
|
235
|
+
const exactElement = Boolean(native) &&
|
|
236
|
+
native?.tagName === profile.nativeTag &&
|
|
237
|
+
(!profile.refCapable || fixture.ref.current === native);
|
|
238
|
+
addCheck(checks, ConformanceFamily.Contract, `${contractId}.elementRef`, exactElement, exactElement
|
|
239
|
+
? 'The contract resolves to the exact real native element and forwarded ref.'
|
|
240
|
+
: 'The native element or forwarded ref does not match the slot contract.', profile.slotId, {
|
|
241
|
+
selector: profile.nativeSelector,
|
|
242
|
+
tag: native?.tagName,
|
|
243
|
+
refMatches: fixture.ref.current === native,
|
|
244
|
+
});
|
|
245
|
+
const partStates = cratisPartStates[profile.partsKey];
|
|
246
|
+
const canonical = new Set(cratisCanonicalPartStates);
|
|
247
|
+
const unexpectedStates = Object.entries(partStates).flatMap(([part, states]) => states
|
|
248
|
+
.filter((state) => !canonical.has(state))
|
|
249
|
+
.map((state) => `${part}.${state}`));
|
|
250
|
+
addCheck(checks, ConformanceFamily.Contract, `${contractId}.states`, unexpectedStates.length === 0, unexpectedStates.length === 0
|
|
251
|
+
? 'The public part-state manifest uses only exact canonical state names for this slot.'
|
|
252
|
+
: `Unexpected canonical states: ${unexpectedStates.join(', ')}.`, profile.slotId);
|
|
253
|
+
const ownerCounts = profile.ownershipSelectors.map((selector) => document.querySelectorAll(selector).length);
|
|
254
|
+
const ownershipPassed = ownerCounts.every((count) => count === 1);
|
|
255
|
+
addCheck(checks, ConformanceFamily.BehaviorOwnership, `ownership.${profile.slotId}`, ownershipPassed, ownershipPassed
|
|
256
|
+
? `${typedDeclaration.mode} tree exposes exactly one declared interactive semantic root for each bounded selector.`
|
|
257
|
+
: `Expected one interactive semantic root for each selector; observed ${ownerCounts.join(', ')}.`, profile.slotId, {
|
|
258
|
+
mode: typedDeclaration.mode,
|
|
259
|
+
selectors: profile.ownershipSelectors,
|
|
260
|
+
ownerCounts,
|
|
261
|
+
});
|
|
262
|
+
let submitEvents = 0;
|
|
263
|
+
fixture.form.addEventListener('submit', (event) => {
|
|
264
|
+
event.preventDefault();
|
|
265
|
+
submitEvents += 1;
|
|
266
|
+
});
|
|
267
|
+
const exercisedEvidence = profile.exercise
|
|
268
|
+
? ((await act(async () => profile.exercise?.(document, fixture?.container ?? document.body, fixture?.ref ?? createRef()))) ?? {})
|
|
269
|
+
: {};
|
|
270
|
+
const namedControl = fixture.form.elements.namedItem(typeof baseProps.name === 'string' ? baseProps.name : '');
|
|
271
|
+
const formData = Object.fromEntries(new FormData(fixture.form).entries());
|
|
272
|
+
const nativeValue = namedControl && 'value' in namedControl
|
|
273
|
+
? String(namedControl.value)
|
|
274
|
+
: undefined;
|
|
275
|
+
await act(async () => {
|
|
276
|
+
fixture?.form.reset();
|
|
277
|
+
await Promise.resolve();
|
|
278
|
+
});
|
|
279
|
+
const resetValue = namedControl && 'value' in namedControl
|
|
280
|
+
? String(namedControl.value)
|
|
281
|
+
: undefined;
|
|
282
|
+
const resetChecked = namedControl && 'checked' in namedControl
|
|
283
|
+
? Boolean(namedControl.checked)
|
|
284
|
+
: undefined;
|
|
285
|
+
const resetMatches = (typeof baseProps.defaultValue !== 'string' ||
|
|
286
|
+
resetValue === baseProps.defaultValue) &&
|
|
287
|
+
(typeof baseProps.defaultChecked !== 'boolean' ||
|
|
288
|
+
resetChecked === baseProps.defaultChecked);
|
|
289
|
+
const behaviorEvidence = {
|
|
290
|
+
...exercisedEvidence,
|
|
291
|
+
submitEvents,
|
|
292
|
+
formData,
|
|
293
|
+
name: namedControl && 'name' in namedControl ? namedControl.name : undefined,
|
|
294
|
+
nativeValue,
|
|
295
|
+
resetValue,
|
|
296
|
+
resetChecked,
|
|
297
|
+
resetMatches,
|
|
298
|
+
};
|
|
299
|
+
const callbackCount = typeof behaviorEvidence.callbacks === 'number'
|
|
300
|
+
? behaviorEvidence.callbacks
|
|
301
|
+
: undefined;
|
|
302
|
+
const submitExpected = baseProps.type === 'submit';
|
|
303
|
+
const behaviorPassed = (callbackCount === undefined || callbackCount === 1) &&
|
|
304
|
+
(!submitExpected || submitEvents === 1) &&
|
|
305
|
+
(typeof baseProps.name !== 'string' || namedControl !== null) &&
|
|
306
|
+
resetMatches;
|
|
307
|
+
addCheck(checks, ConformanceFamily.Behavior, `behavior.${profile.slotId}`, behaviorPassed, behaviorPassed
|
|
308
|
+
? 'Bounded public-prop behavior produced native semantics and at most one ordered callback.'
|
|
309
|
+
: `Expected one callback, observed ${String(callbackCount)}.`, profile.slotId, behaviorEvidence);
|
|
310
|
+
if (options.axe !== false) {
|
|
311
|
+
const axeResult = await axe.run(fixture.container, {
|
|
312
|
+
runOnly: { type: 'tag', values: ['wcag2a', 'wcag2aa'] },
|
|
313
|
+
rules: { 'color-contrast': { enabled: false } },
|
|
314
|
+
});
|
|
315
|
+
addCheck(checks, ConformanceFamily.Accessibility, `a11y.${profile.slotId}.axe`, axeResult.violations.length === 0, axeResult.violations.length === 0
|
|
316
|
+
? 'axe found no WCAG A/AA violations in the bounded fixture.'
|
|
317
|
+
: `axe violations: ${axeResult.violations.map((violation) => violation.id).join(', ')}.`, profile.slotId, { violations: axeResult.violations.map((violation) => violation.id) });
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
catch (error) {
|
|
321
|
+
addError(checks, ConformanceFamily.Contract, contractId, error, profile.slotId);
|
|
322
|
+
}
|
|
323
|
+
finally {
|
|
324
|
+
if (fixture)
|
|
325
|
+
await unmount(fixture);
|
|
326
|
+
for (const variantFixture of variantFixtures)
|
|
327
|
+
await unmount(variantFixture);
|
|
328
|
+
}
|
|
329
|
+
if (profile.createStateProps) {
|
|
330
|
+
let stateFixture;
|
|
331
|
+
try {
|
|
332
|
+
stateFixture = await mount(document, typedDeclaration, profile.createStateProps(), profile.refCapable, options.wrapper);
|
|
333
|
+
collectRenderedStates(document, observedStateAssociations);
|
|
334
|
+
const stateElements = stateFixture.container.querySelectorAll('[data-cratis-part]');
|
|
335
|
+
const stateBoundaryPresent = stateElements.length > 0 || typedDeclaration.mode === 'atomic';
|
|
336
|
+
addCheck(checks, ConformanceFamily.Behavior, `behavior.${profile.slotId}.controlledUncontrolled`, stateBoundaryPresent, stateBoundaryPresent
|
|
337
|
+
? 'Controlled/stateful and uncontrolled/default fixture forms both render through the same public slot declaration.'
|
|
338
|
+
: 'State fixture did not render a public part boundary.', profile.slotId);
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
addError(checks, ConformanceFamily.Behavior, `behavior.${profile.slotId}.controlledUncontrolled`, error, profile.slotId);
|
|
342
|
+
}
|
|
343
|
+
finally {
|
|
344
|
+
if (stateFixture)
|
|
345
|
+
await unmount(stateFixture);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
const expectedStateAssociations = Object.entries(cratisPartStates[profile.partsKey]).flatMap(([part, states]) => states.map((state) => `${part}.${state}`));
|
|
349
|
+
const missingStateAssociations = expectedStateAssociations.filter((association) => !observedStateAssociations.has(association));
|
|
350
|
+
addCheck(checks, ConformanceFamily.Contract, `contract.${profile.slotId}.stateCoverage`, missingStateAssociations.length === 0, missingStateAssociations.length === 0
|
|
351
|
+
? 'Every canonical component/part state was observed in a bounded fixture.'
|
|
352
|
+
: `Canonical states not observed: ${missingStateAssociations.join(', ')}.`, profile.slotId, {
|
|
353
|
+
expectedStateAssociations,
|
|
354
|
+
observedStateAssociations: [...observedStateAssociations].sort(),
|
|
355
|
+
});
|
|
356
|
+
};
|
|
357
|
+
const checkServerRendering = (checks, library, profiles, wrapper) => {
|
|
358
|
+
const outputs = new Map();
|
|
359
|
+
for (const profile of profiles) {
|
|
360
|
+
const declaration = library.slots[profile.slotId];
|
|
361
|
+
if (!declaration)
|
|
362
|
+
continue;
|
|
363
|
+
try {
|
|
364
|
+
const element = withProvider(renderComponent(declaration, profile.createProps()), wrapper);
|
|
365
|
+
const first = renderToString(element);
|
|
366
|
+
const second = renderToString(element);
|
|
367
|
+
outputs.set(profile.slotId, first);
|
|
368
|
+
addCheck(checks, ConformanceFamily.ServerRendering, `ssr.${profile.slotId}`, first === second, first === second
|
|
369
|
+
? 'Server render is DOM-free and deterministic.'
|
|
370
|
+
: 'Repeated server renders differ.', profile.slotId, { bytes: first.length });
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
addError(checks, ConformanceFamily.ServerRendering, `ssr.${profile.slotId}`, error, profile.slotId);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
const tooltipOutput = outputs.get('common.tooltip');
|
|
377
|
+
const dialogOutput = outputs.get('dialogs.dialog');
|
|
378
|
+
const overlayPassed = (tooltipOutput === undefined ||
|
|
379
|
+
!tooltipOutput.includes('data-cratis-part="popup"')) &&
|
|
380
|
+
(dialogOutput === undefined || dialogOutput.includes('role="dialog"'));
|
|
381
|
+
addCheck(checks, ConformanceFamily.ServerRendering, 'ssr.overlayAbsentPresent', overlayPassed, overlayPassed
|
|
382
|
+
? 'The closed tooltip omits its deferred popup while the explicitly present dialog renders during SSR.'
|
|
383
|
+
: 'SSR overlay absent/present semantics differ from the bounded fixtures.', undefined, {
|
|
384
|
+
tooltipObserved: tooltipOutput !== undefined,
|
|
385
|
+
dialogObserved: dialogOutput !== undefined,
|
|
386
|
+
});
|
|
387
|
+
const distinctOutputs = new Set(outputs.values()).size === outputs.size;
|
|
388
|
+
addCheck(checks, ConformanceFamily.ServerRendering, 'ssr.slotOutputIsolation', distinctOutputs, distinctOutputs
|
|
389
|
+
? 'Each exercised slot produced a distinct slot-local server-rendered output.'
|
|
390
|
+
: 'Two exercised slots collapsed to indistinguishable server-rendered output.', undefined, { slots: [...outputs.keys()] });
|
|
391
|
+
};
|
|
392
|
+
const checkHydration = async (checks, library, profiles, document, wrapper) => {
|
|
393
|
+
const profile = profiles.find((candidate) => candidate.slotId === 'common.button') ?? profiles[0];
|
|
394
|
+
const declaration = profile && library.slots[profile.slotId];
|
|
395
|
+
if (!profile || !declaration) {
|
|
396
|
+
addCheck(checks, ConformanceFamily.ServerRendering, 'ssr.hydration', false, 'No renderable slot is available for hydration evidence.');
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
const element = withProvider(renderComponent(declaration, profile.createProps()), wrapper);
|
|
400
|
+
const serverMarkup = renderToString(element);
|
|
401
|
+
const container = document.createElement('div');
|
|
402
|
+
const range = document.createRange();
|
|
403
|
+
range.selectNode(document.body);
|
|
404
|
+
container.append(range.createContextualFragment(serverMarkup));
|
|
405
|
+
document.body.append(container);
|
|
406
|
+
const recoverableErrors = [];
|
|
407
|
+
const hydrated = hydrateRoot(container, element, {
|
|
408
|
+
onRecoverableError: (error) => recoverableErrors.push(error instanceof Error ? error.message : String(error)),
|
|
409
|
+
});
|
|
410
|
+
await act(async () => undefined);
|
|
411
|
+
const deterministic = recoverableErrors.length === 0;
|
|
412
|
+
await act(async () => hydrated.unmount());
|
|
413
|
+
container.remove();
|
|
414
|
+
addCheck(checks, ConformanceFamily.ServerRendering, 'ssr.hydration', deterministic, deterministic
|
|
415
|
+
? 'Server markup hydrates deterministically with no recoverable mismatch.'
|
|
416
|
+
: `Hydration mismatches: ${recoverableErrors.join('; ')}.`, profile.slotId, { recoverableErrors });
|
|
417
|
+
};
|
|
418
|
+
const checkEnvironmentalEvidence = async (checks, document, library, profiles, wrapper) => {
|
|
419
|
+
const profile = profiles.find((candidate) => candidate.slotId === 'common.button') ?? profiles[0];
|
|
420
|
+
const declaration = profile && library.slots[profile.slotId];
|
|
421
|
+
if (!profile || !declaration) {
|
|
422
|
+
for (const mode of ['rtl', 'forcedColors', 'motion.reduced']) {
|
|
423
|
+
addCheck(checks, ConformanceFamily.Accessibility, `a11y.environment.${mode}`, false, 'No renderable slot is available for bounded environmental-host evidence.');
|
|
424
|
+
}
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
const host = document.createElement('section');
|
|
428
|
+
host.dir = 'rtl';
|
|
429
|
+
host.style.setProperty('forced-color-adjust', 'auto');
|
|
430
|
+
host.style.setProperty('transition-duration', '0s');
|
|
431
|
+
document.body.append(host);
|
|
432
|
+
let fixture;
|
|
433
|
+
try {
|
|
434
|
+
fixture = await mount(document, declaration, profile.createProps(), profile.refCapable, wrapper, host);
|
|
435
|
+
const native = fixture.container.querySelector(profile.nativeSelector);
|
|
436
|
+
const inputs = {
|
|
437
|
+
rtl: Boolean(native) && native?.closest('[dir="rtl"]') === host,
|
|
438
|
+
forcedColors: Boolean(native) && host.style.forcedColorAdjust === 'auto',
|
|
439
|
+
'motion.reduced': Boolean(native) && host.style.transitionDuration === '0s',
|
|
440
|
+
};
|
|
441
|
+
for (const mode of ['rtl', 'forcedColors', 'motion.reduced']) {
|
|
442
|
+
addCheck(checks, ConformanceFamily.Accessibility, `a11y.environment.${mode}`, inputs[mode], inputs[mode]
|
|
443
|
+
? `The ${profile.slotId} fixture rendered inside the bounded ${mode} DOM host input.`
|
|
444
|
+
: `The ${profile.slotId} fixture did not preserve the bounded ${mode} DOM host input.`, profile.slotId, { selector: profile.nativeSelector });
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
for (const mode of ['rtl', 'forcedColors', 'motion.reduced']) {
|
|
449
|
+
addError(checks, ConformanceFamily.Accessibility, `a11y.environment.${mode}`, error, profile.slotId);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
finally {
|
|
453
|
+
if (fixture)
|
|
454
|
+
await unmount(fixture);
|
|
455
|
+
host.remove();
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
/**
|
|
459
|
+
* Runs bounded renderer-adapter conformance checks using only public renderer contracts and public
|
|
460
|
+
* component props. The report is evidence for the exercised environment, never a universal claim.
|
|
461
|
+
*
|
|
462
|
+
* @param library Immutable renderer manifest to exercise.
|
|
463
|
+
* @param options Static metadata, DOM, axe, and declared-skip options.
|
|
464
|
+
* @returns A report containing every pass, failure, justified skip, and explicit limitation.
|
|
465
|
+
*/
|
|
466
|
+
export const runConformance = async (library, options = {}) => {
|
|
467
|
+
// SAFETY: ConformanceLibrary deliberately mirrors the public UiLibrary runtime shape without
|
|
468
|
+
// leaking Components declarations through this package's independent public types.
|
|
469
|
+
const rendererLibrary = library;
|
|
470
|
+
const checks = [];
|
|
471
|
+
checkManifest(checks, rendererLibrary, options);
|
|
472
|
+
const document = options.document ?? globalThis.document;
|
|
473
|
+
if (document) {
|
|
474
|
+
checkNormalization(checks, document);
|
|
475
|
+
const evidence = new Map();
|
|
476
|
+
const profiles = createSlotProfiles(evidence).filter((profile) => (rendererLibrary.profileSlots ?? Object.keys(rendererLibrary.slots)).includes(profile.slotId));
|
|
477
|
+
for (const profile of profiles)
|
|
478
|
+
await checkSlot(checks, rendererLibrary, options, document, profile);
|
|
479
|
+
checkServerRendering(checks, rendererLibrary, profiles, options.wrapper);
|
|
480
|
+
await checkHydration(checks, rendererLibrary, profiles, document, options.wrapper);
|
|
481
|
+
await checkEnvironmentalEvidence(checks, document, rendererLibrary, profiles, options.wrapper);
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
addCheck(checks, ConformanceFamily.Contract, 'runtime.domAvailable', false, 'DOM checks require an explicit Document; SSR import remains safe.');
|
|
485
|
+
}
|
|
486
|
+
const summary = {
|
|
487
|
+
total: checks.length,
|
|
488
|
+
passed: checks.filter((check) => check.status === ConformanceStatus.Passed)
|
|
489
|
+
.length,
|
|
490
|
+
failed: checks.filter((check) => check.status === ConformanceStatus.Failed)
|
|
491
|
+
.length,
|
|
492
|
+
skipped: checks.filter((check) => check.status === ConformanceStatus.Skipped)
|
|
493
|
+
.length,
|
|
494
|
+
};
|
|
495
|
+
return Object.freeze({
|
|
496
|
+
adapterId: library.id,
|
|
497
|
+
abi: library.abi,
|
|
498
|
+
passed: summary.failed === 0,
|
|
499
|
+
summary: Object.freeze(summary),
|
|
500
|
+
checks: Object.freeze(checks.map((check) => Object.freeze(check))),
|
|
501
|
+
limitations,
|
|
502
|
+
});
|
|
503
|
+
};
|
|
504
|
+
//# sourceMappingURL=runConformance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runConformance.js","sourceRoot":"","sources":["../src/runConformance.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,64 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cratis/components.conformance",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "4.1.0",
|
|
4
|
+
"description": "Programmatic conformance evidence for Cratis Components renderer adapter authors.",
|
|
5
|
+
"author": "Cratis",
|
|
5
6
|
"license": "MIT",
|
|
6
7
|
"type": "module",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/Cratis/Components"
|
|
11
|
+
},
|
|
7
12
|
"publishConfig": {
|
|
8
13
|
"access": "public"
|
|
9
14
|
},
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=23.0.0"
|
|
17
|
+
},
|
|
10
18
|
"files": [
|
|
11
|
-
"
|
|
12
|
-
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md",
|
|
21
|
+
"CONFORMANCE.md",
|
|
22
|
+
"LICENSE"
|
|
23
|
+
],
|
|
24
|
+
"main": "./dist/index.js",
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"exports": {
|
|
27
|
+
"./package.json": "./package.json",
|
|
28
|
+
".": {
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"import": "./dist/index.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"sideEffects": false,
|
|
34
|
+
"cratisUiAbi": 1,
|
|
35
|
+
"scripts": {
|
|
36
|
+
"clean": "rm -rf dist",
|
|
37
|
+
"prepare-core": "yarn workspace @cratis/components prepare",
|
|
38
|
+
"build": "node ../node_modules/typescript/bin/tsc -p tsconfig.build.json",
|
|
39
|
+
"typecheck-specs:prepared": "node ../node_modules/typescript/bin/tsc -p tsconfig.json",
|
|
40
|
+
"typecheck-specs": "yarn prepare-core && yarn typecheck-specs:prepared",
|
|
41
|
+
"lint": "node ../node_modules/eslint/bin/eslint.js . --quiet",
|
|
42
|
+
"test": "node ../node_modules/vitest/vitest.mjs run --config vitest.config.ts",
|
|
43
|
+
"verify-package": "node ./scripts/verify-packed-package.mjs",
|
|
44
|
+
"ci": "yarn clean && yarn prepare-core && yarn lint && yarn build && yarn typecheck-specs:prepared && yarn test && yarn verify-package"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"axe-core": "^4.13.0"
|
|
48
|
+
},
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"@cratis/components": "4.1.0",
|
|
51
|
+
"react": "^19.0.0",
|
|
52
|
+
"react-dom": "^19.0.0"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@cratis/arc": "22.6.2",
|
|
56
|
+
"@cratis/arc.react": "22.6.2",
|
|
57
|
+
"@cratis/components": "4.1.0",
|
|
58
|
+
"@cratis/fundamentals": "^7.10.3",
|
|
59
|
+
"react": "^19.0.0",
|
|
60
|
+
"react-dom": "^19.0.0",
|
|
61
|
+
"reflect-metadata": "0.2.2",
|
|
62
|
+
"tsyringe": "4.10.0"
|
|
63
|
+
}
|
|
13
64
|
}
|