@@ -247,8 +247,46 @@ function assertEqual(actual, expected, label) {
247247 }
248248}
249249
250- assertEqual(rootPackage.peerDependencies?.react, expectedPeerRange, 'root peerDependencies.react');
251- assertEqual(rootPackage.peerDependencies?.['react-dom'], expectedPeerRange, 'root peerDependencies.react-dom');
250+ function parseVersion(version, label) {
251+ const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version);
252+ if (!match) {
253+ throw new Error(`${label} expected X.Y.Z, got ${version}`);
254+ }
255+
256+ return {
257+ major: Number(match[1]),
258+ minor: Number(match[2]),
259+ patch: Number(match[3]),
260+ };
261+ }
262+
263+ function compareVersions(a, b) {
264+ return a.major - b.major || a.minor - b.minor || a.patch - b.patch;
265+ }
266+
267+ function assertCaretRangeIncludesVersion(range, version, label) {
268+ const match = /^\^(\d+\.\d+\.\d+)$/.exec(range || '');
269+ if (!match) {
270+ throw new Error(`${label} expected a caret X.Y.Z range that includes ${version}, got ${range}`);
271+ }
272+
273+ const minimum = parseVersion(match[1], label);
274+ const target = parseVersion(version, 'runtime version');
275+ if (minimum.major !== target.major || compareVersions(minimum, target) > 0) {
276+ throw new Error(`${label} ${range} does not include vendored runtime ${version}`);
277+ }
278+ }
279+
280+ assertCaretRangeIncludesVersion(
281+ rootPackage.peerDependencies?.react,
282+ runtimeVersion,
283+ 'root peerDependencies.react'
284+ );
285+ assertCaretRangeIncludesVersion(
286+ rootPackage.peerDependencies?.['react-dom'],
287+ runtimeVersion,
288+ 'root peerDependencies.react-dom'
289+ );
252290assertEqual(runtimePackage.peerDependencies?.react, expectedPeerRange, 'runtime peerDependencies.react');
253291assertEqual(runtimePackage.peerDependencies?.['react-dom'], expectedPeerRange, 'runtime peerDependencies.react-dom');
254292
@@ -266,7 +304,9 @@ for (const marker of [`version: "${runtimeVersion}"`, `reconcilerVersion: "${run
266304 }
267305}
268306
269- console.log(` - Runtime version ${runtimeVersion} matches peer policy ${expectedPeerRange}`);
307+ console.log(
308+ ` - Runtime version ${runtimeVersion} is included by root peers and matches runtime peer policy ${expectedPeerRange}`
309+ );
270310NODE
271311
272312log " Verifying embedded React runtime version policy"
0 commit comments