Skip to content

Commit 20622a6

Browse files
committed
fix tagged compatibility description in feature doc
1 parent bcaa147 commit 20622a6

3 files changed

Lines changed: 36 additions & 29 deletions

File tree

dev/internal/engine-data.mjs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { Feature } from '../../lib/jscrewit.js';
1+
import { isDeepStrictEqual } from 'node:util';
2+
import { Feature } from '../../lib/jscrewit.js';
23

34
const AND_FORMATTER = new Intl.ListFormat('en');
45
const OR_FORMATTER = new Intl.ListFormat('en', { type: 'disjunction' });
@@ -37,9 +38,10 @@ export const getAvailabilityByFeature =
3738
return availabilityInfo;
3839
};
3940

40-
export function getDescription(compatibilities, compatibilityIndex, appendPlus)
41+
export function getDescription(compatibilities, start, end, appendPlus)
4142
{
42-
const { tag, versions } = compatibilities[compatibilityIndex];
43+
const describedCompatibilities = compatibilities.slice(start, end);
44+
const [{ tag, versions }] = describedCompatibilities;
4345
const [firstVersion] = versions;
4446
let description = typeof firstVersion === 'string' ? firstVersion : firstVersion.from;
4547
if (isOldAndLatestVersion(versions))
@@ -51,11 +53,10 @@ export function getDescription(compatibilities, compatibilityIndex, appendPlus)
5153
}
5254
if (tag != null)
5355
{
54-
const taggableCompatibilities = compatibilities.slice(compatibilityIndex);
55-
const tags = taggableCompatibilities.map(({ tag }) => tag).filter(tag => tag != null);
56+
const tags = describedCompatibilities.map(({ tag }) => tag).filter(tag => tag != null);
5657
description += ` ${joinWithAnd(tags)}`;
5758
}
58-
if (appendPlus && !isLastVersion(compatibilities, compatibilityIndex))
59+
if (appendPlus && !isLastVersion(describedCompatibilities, 0))
5960
description += '+';
6061
return description;
6162
}
@@ -98,3 +99,12 @@ export function joinWithOr(array)
9899
const returnValue = OR_FORMATTER.format(array);
99100
return returnValue;
100101
}
102+
103+
export function needsUnavailNote(compatibilities, firstAvail, firstUnavail)
104+
{
105+
const returnValue =
106+
firstUnavail &&
107+
!isDeepStrictEqual
108+
(compatibilities[firstAvail].versions, compatibilities[firstUnavail].versions);
109+
return returnValue;
110+
}

dev/make-feature-doc.mjs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Feature } from '../lib/jscrewit.js';
22

3-
import { getAvailabilityByFeature, getDescription, joinWithAnd }
3+
import { getAvailabilityByFeature, getDescription, joinWithAnd, needsUnavailNote }
44
from './internal/engine-data.mjs';
55

66
function formatFeatureName(featureName)
@@ -11,12 +11,12 @@ function formatFeatureName(featureName)
1111
return result;
1212
}
1313

14-
function getCombinedDescription(families, compatibilityIndex = 0)
14+
function getCombinedDescription(families, start, end)
1515
{
1616
function getVersionedName(name)
1717
{
1818
const compatibilities = Feature.FAMILIES[name];
19-
const description = getDescription(compatibilities, compatibilityIndex, true);
19+
const description = getDescription(compatibilities, start, end, true);
2020
const versionedName = description ? `${name} ${description}` : name;
2121
return versionedName;
2222
}
@@ -44,14 +44,15 @@ function getVersioningFor(featureName, families)
4444
const { firstAvail } = availabilityInfo;
4545
if (firstAvail != null)
4646
{
47+
const { firstUnavail } = availabilityInfo;
4748
const notes = [];
4849
if (firstAvail)
4950
{
50-
const availNote = getCombinedDescription(families, firstAvail);
51+
const availNote = getCombinedDescription(families, firstAvail, firstUnavail);
5152
notes.push(availNote);
5253
}
53-
const { firstUnavail } = availabilityInfo;
54-
if (firstUnavail)
54+
const compatibilities = Feature.FAMILIES[anyFamily];
55+
if (needsUnavailNote(compatibilities, firstAvail, firstUnavail))
5556
{
5657
const unavailNote = `not in ${getCombinedDescription(families, firstUnavail)}`;
5758
notes.push(unavailNote);

dev/make-feature-types.mjs

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1-
import { isDeepStrictEqual } from 'node:util';
2-
import { Feature } from '../lib/jscrewit.js';
1+
import { Feature } from '../lib/jscrewit.js';
32

43
import
5-
{ calculateAvailabilityInfo, getAvailabilityByFeature, getDescription, joinWithAnd, joinWithOr }
4+
{
5+
calculateAvailabilityInfo,
6+
getAvailabilityByFeature,
7+
getDescription,
8+
joinWithAnd,
9+
joinWithOr,
10+
needsUnavailNote,
11+
}
612
from './internal/engine-data.mjs';
713

814
const INDENT = ' ';
@@ -130,24 +136,14 @@ export default
130136
let availEntry = family;
131137
if (firstAvail)
132138
{
133-
const preUnavailCompatibilities =
134-
firstUnavail == null ?
135-
compatibilities : compatibilities.slice(0, firstUnavail);
136139
const description =
137-
getDescription(preUnavailCompatibilities, firstAvail, true);
140+
getDescription(compatibilities, firstAvail, firstUnavail, true);
138141
availEntry += ` ${description}`;
139142
}
140-
if
141-
(
142-
firstUnavail &&
143-
!isDeepStrictEqual
144-
(
145-
compatibilities[firstUnavail].versions,
146-
compatibilities[firstAvail].versions,
147-
)
148-
)
143+
if (needsUnavailNote(compatibilities, firstAvail, firstUnavail))
149144
{
150-
const description = getDescription(compatibilities, firstUnavail, false);
145+
const description =
146+
getDescription(compatibilities, firstUnavail, undefined, false);
151147
if (description)
152148
availEntry += ` before ${description}`;
153149
}

0 commit comments

Comments
 (0)