@jomae/catalog 0.4.0 → 0.6.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.
Files changed (236) hide show
  1. package/README.md +20 -2
  2. package/dist/baseline.d.ts +25 -0
  3. package/dist/baseline.d.ts.map +1 -1
  4. package/dist/baseline.js +25 -1
  5. package/dist/baseline.js.map +1 -1
  6. package/dist/categories.d.ts +20 -0
  7. package/dist/categories.d.ts.map +1 -0
  8. package/dist/categories.js +62 -0
  9. package/dist/categories.js.map +1 -0
  10. package/dist/detect.d.ts +2 -1
  11. package/dist/detect.d.ts.map +1 -1
  12. package/dist/detect.js +17 -2
  13. package/dist/detect.js.map +1 -1
  14. package/dist/generated/baseline-history.d.ts +21 -0
  15. package/dist/generated/baseline-history.d.ts.map +1 -0
  16. package/dist/generated/baseline-history.js +20 -0
  17. package/dist/generated/baseline-history.js.map +1 -0
  18. package/dist/generated/baseline.d.ts +10 -0
  19. package/dist/generated/baseline.d.ts.map +1 -1
  20. package/dist/generated/baseline.js +250 -67
  21. package/dist/generated/baseline.js.map +1 -1
  22. package/dist/generated/guides.d.ts +16 -0
  23. package/dist/generated/guides.d.ts.map +1 -0
  24. package/dist/generated/guides.js +153 -0
  25. package/dist/generated/guides.js.map +1 -0
  26. package/dist/generated/sizes.d.ts.map +1 -1
  27. package/dist/generated/sizes.js +280 -55
  28. package/dist/generated/sizes.js.map +1 -1
  29. package/dist/generated/support-claims.d.ts +15 -0
  30. package/dist/generated/support-claims.d.ts.map +1 -0
  31. package/dist/generated/support-claims.js +69 -0
  32. package/dist/generated/support-claims.js.map +1 -0
  33. package/dist/guides.d.ts +46 -0
  34. package/dist/guides.d.ts.map +1 -0
  35. package/dist/guides.js +55 -0
  36. package/dist/guides.js.map +1 -0
  37. package/dist/history.d.ts +11 -0
  38. package/dist/history.d.ts.map +1 -0
  39. package/dist/history.js +14 -0
  40. package/dist/history.js.map +1 -0
  41. package/dist/index.d.ts +5 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +5 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/rules/abort-controller.d.ts.map +1 -1
  46. package/dist/rules/abort-controller.js +2 -1
  47. package/dist/rules/abort-controller.js.map +1 -1
  48. package/dist/rules/accordion.d.ts.map +1 -1
  49. package/dist/rules/accordion.js +3 -0
  50. package/dist/rules/accordion.js.map +1 -1
  51. package/dist/rules/array-grouping.d.ts +3 -0
  52. package/dist/rules/array-grouping.d.ts.map +1 -0
  53. package/dist/rules/array-grouping.js +29 -0
  54. package/dist/rules/array-grouping.js.map +1 -0
  55. package/dist/rules/aspect-ratio.d.ts.map +1 -1
  56. package/dist/rules/aspect-ratio.js +1 -0
  57. package/dist/rules/aspect-ratio.js.map +1 -1
  58. package/dist/rules/base64.d.ts +3 -0
  59. package/dist/rules/base64.d.ts.map +1 -0
  60. package/dist/rules/base64.js +41 -0
  61. package/dist/rules/base64.js.map +1 -0
  62. package/dist/rules/broadcast-channel.d.ts.map +1 -1
  63. package/dist/rules/broadcast-channel.js +1 -0
  64. package/dist/rules/broadcast-channel.js.map +1 -1
  65. package/dist/rules/carousel.d.ts.map +1 -1
  66. package/dist/rules/carousel.js +7 -0
  67. package/dist/rules/carousel.js.map +1 -1
  68. package/dist/rules/clipboard.d.ts.map +1 -1
  69. package/dist/rules/clipboard.js +4 -1
  70. package/dist/rules/clipboard.js.map +1 -1
  71. package/dist/rules/color-functions.d.ts.map +1 -1
  72. package/dist/rules/color-functions.js +1 -0
  73. package/dist/rules/color-functions.js.map +1 -1
  74. package/dist/rules/compression-streams.d.ts.map +1 -1
  75. package/dist/rules/compression-streams.js +2 -1
  76. package/dist/rules/compression-streams.js.map +1 -1
  77. package/dist/rules/container-queries.d.ts.map +1 -1
  78. package/dist/rules/container-queries.js +2 -0
  79. package/dist/rules/container-queries.js.map +1 -1
  80. package/dist/rules/content-visibility.d.ts.map +1 -1
  81. package/dist/rules/content-visibility.js +3 -1
  82. package/dist/rules/content-visibility.js.map +1 -1
  83. package/dist/rules/custom-highlight.d.ts +3 -0
  84. package/dist/rules/custom-highlight.d.ts.map +1 -0
  85. package/dist/rules/custom-highlight.js +39 -0
  86. package/dist/rules/custom-highlight.js.map +1 -0
  87. package/dist/rules/date-time-input.d.ts.map +1 -1
  88. package/dist/rules/date-time-input.js +2 -0
  89. package/dist/rules/date-time-input.js.map +1 -1
  90. package/dist/rules/dialog.d.ts.map +1 -1
  91. package/dist/rules/dialog.js +8 -0
  92. package/dist/rules/dialog.js.map +1 -1
  93. package/dist/rules/discrete-transitions.d.ts.map +1 -1
  94. package/dist/rules/discrete-transitions.js +6 -0
  95. package/dist/rules/discrete-transitions.js.map +1 -1
  96. package/dist/rules/drag-and-drop.d.ts.map +1 -1
  97. package/dist/rules/drag-and-drop.js +26 -8
  98. package/dist/rules/drag-and-drop.js.map +1 -1
  99. package/dist/rules/duration-format.d.ts +3 -0
  100. package/dist/rules/duration-format.d.ts.map +1 -0
  101. package/dist/rules/duration-format.js +37 -0
  102. package/dist/rules/duration-format.js.map +1 -0
  103. package/dist/rules/event-target.d.ts +3 -0
  104. package/dist/rules/event-target.d.ts.map +1 -0
  105. package/dist/rules/event-target.js +51 -0
  106. package/dist/rules/event-target.js.map +1 -0
  107. package/dist/rules/fetch.d.ts +3 -0
  108. package/dist/rules/fetch.d.ts.map +1 -0
  109. package/dist/rules/fetch.js +46 -0
  110. package/dist/rules/fetch.js.map +1 -0
  111. package/dist/rules/field-sizing.d.ts.map +1 -1
  112. package/dist/rules/field-sizing.js +3 -1
  113. package/dist/rules/field-sizing.js.map +1 -1
  114. package/dist/rules/fluid-type.d.ts.map +1 -1
  115. package/dist/rules/fluid-type.js +3 -1
  116. package/dist/rules/fluid-type.js.map +1 -1
  117. package/dist/rules/focus-visible.d.ts.map +1 -1
  118. package/dist/rules/focus-visible.js +1 -0
  119. package/dist/rules/focus-visible.js.map +1 -1
  120. package/dist/rules/fullscreen.d.ts.map +1 -1
  121. package/dist/rules/fullscreen.js +2 -1
  122. package/dist/rules/fullscreen.js.map +1 -1
  123. package/dist/rules/height-animation.d.ts.map +1 -1
  124. package/dist/rules/height-animation.js +2 -0
  125. package/dist/rules/height-animation.js.map +1 -1
  126. package/dist/rules/index.d.ts.map +1 -1
  127. package/dist/rules/index.js +64 -3
  128. package/dist/rules/index.js.map +1 -1
  129. package/dist/rules/inert.d.ts +3 -0
  130. package/dist/rules/inert.d.ts.map +1 -0
  131. package/dist/rules/inert.js +37 -0
  132. package/dist/rules/inert.js.map +1 -0
  133. package/dist/rules/intersection-observer.d.ts.map +1 -1
  134. package/dist/rules/intersection-observer.js +2 -0
  135. package/dist/rules/intersection-observer.js.map +1 -1
  136. package/dist/rules/lazy-loading.d.ts.map +1 -1
  137. package/dist/rules/lazy-loading.js +2 -0
  138. package/dist/rules/lazy-loading.js.map +1 -1
  139. package/dist/rules/line-clamp.d.ts.map +1 -1
  140. package/dist/rules/line-clamp.js +2 -1
  141. package/dist/rules/line-clamp.js.map +1 -1
  142. package/dist/rules/masonry.d.ts.map +1 -1
  143. package/dist/rules/masonry.js +1 -0
  144. package/dist/rules/masonry.js.map +1 -1
  145. package/dist/rules/natural-sort.d.ts +3 -0
  146. package/dist/rules/natural-sort.d.ts.map +1 -0
  147. package/dist/rules/natural-sort.js +41 -0
  148. package/dist/rules/natural-sort.js.map +1 -0
  149. package/dist/rules/number-format.d.ts.map +1 -1
  150. package/dist/rules/number-format.js +3 -1
  151. package/dist/rules/number-format.js.map +1 -1
  152. package/dist/rules/page-visibility.d.ts.map +1 -1
  153. package/dist/rules/page-visibility.js +5 -0
  154. package/dist/rules/page-visibility.js.map +1 -1
  155. package/dist/rules/popover.d.ts.map +1 -1
  156. package/dist/rules/popover.js +8 -1
  157. package/dist/rules/popover.js.map +1 -1
  158. package/dist/rules/random-uuid.d.ts +3 -0
  159. package/dist/rules/random-uuid.d.ts.map +1 -0
  160. package/dist/rules/random-uuid.js +31 -0
  161. package/dist/rules/random-uuid.js.map +1 -0
  162. package/dist/rules/relative-time.d.ts.map +1 -1
  163. package/dist/rules/relative-time.js +1 -0
  164. package/dist/rules/relative-time.js.map +1 -1
  165. package/dist/rules/resizable-panels.d.ts.map +1 -1
  166. package/dist/rules/resizable-panels.js +4 -7
  167. package/dist/rules/resizable-panels.js.map +1 -1
  168. package/dist/rules/resize-observer.d.ts.map +1 -1
  169. package/dist/rules/resize-observer.js +2 -1
  170. package/dist/rules/resize-observer.js.map +1 -1
  171. package/dist/rules/screen-wake-lock.d.ts.map +1 -1
  172. package/dist/rules/screen-wake-lock.js +3 -1
  173. package/dist/rules/screen-wake-lock.js.map +1 -1
  174. package/dist/rules/scroll-animations.d.ts.map +1 -1
  175. package/dist/rules/scroll-animations.js +9 -1
  176. package/dist/rules/scroll-animations.js.map +1 -1
  177. package/dist/rules/scroll-lock.d.ts.map +1 -1
  178. package/dist/rules/scroll-lock.js +8 -7
  179. package/dist/rules/scroll-lock.js.map +1 -1
  180. package/dist/rules/scrollbars.d.ts.map +1 -1
  181. package/dist/rules/scrollbars.js +5 -0
  182. package/dist/rules/scrollbars.js.map +1 -1
  183. package/dist/rules/select.d.ts.map +1 -1
  184. package/dist/rules/select.js +7 -0
  185. package/dist/rules/select.js.map +1 -1
  186. package/dist/rules/server-sent-events.d.ts +3 -0
  187. package/dist/rules/server-sent-events.d.ts.map +1 -0
  188. package/dist/rules/server-sent-events.js +38 -0
  189. package/dist/rules/server-sent-events.js.map +1 -0
  190. package/dist/rules/smooth-scroll.d.ts.map +1 -1
  191. package/dist/rules/smooth-scroll.js +2 -0
  192. package/dist/rules/smooth-scroll.js.map +1 -1
  193. package/dist/rules/speech-recognition.d.ts.map +1 -1
  194. package/dist/rules/speech-recognition.js +19 -10
  195. package/dist/rules/speech-recognition.js.map +1 -1
  196. package/dist/rules/speech-synthesis.d.ts.map +1 -1
  197. package/dist/rules/speech-synthesis.js +3 -0
  198. package/dist/rules/speech-synthesis.js.map +1 -1
  199. package/dist/rules/sticky.d.ts.map +1 -1
  200. package/dist/rules/sticky.js +2 -0
  201. package/dist/rules/sticky.js.map +1 -1
  202. package/dist/rules/structured-clone.d.ts.map +1 -1
  203. package/dist/rules/structured-clone.js +13 -2
  204. package/dist/rules/structured-clone.js.map +1 -1
  205. package/dist/rules/text-box-trim.d.ts.map +1 -1
  206. package/dist/rules/text-box-trim.js +3 -1
  207. package/dist/rules/text-box-trim.js.map +1 -1
  208. package/dist/rules/text-wrap-balance.d.ts.map +1 -1
  209. package/dist/rules/text-wrap-balance.js +2 -0
  210. package/dist/rules/text-wrap-balance.js.map +1 -1
  211. package/dist/rules/url-search-params.d.ts +3 -0
  212. package/dist/rules/url-search-params.d.ts.map +1 -0
  213. package/dist/rules/url-search-params.js +42 -0
  214. package/dist/rules/url-search-params.js.map +1 -0
  215. package/dist/rules/view-transitions.d.ts.map +1 -1
  216. package/dist/rules/view-transitions.js +9 -0
  217. package/dist/rules/view-transitions.js.map +1 -1
  218. package/dist/rules/web-bluetooth.d.ts.map +1 -1
  219. package/dist/rules/web-bluetooth.js +1 -0
  220. package/dist/rules/web-bluetooth.js.map +1 -1
  221. package/dist/rules/web-crypto.d.ts +3 -0
  222. package/dist/rules/web-crypto.d.ts.map +1 -0
  223. package/dist/rules/web-crypto.js +32 -0
  224. package/dist/rules/web-crypto.js.map +1 -0
  225. package/dist/rules/web-share.d.ts.map +1 -1
  226. package/dist/rules/web-share.js +1 -0
  227. package/dist/rules/web-share.js.map +1 -1
  228. package/dist/schema.d.ts +22 -0
  229. package/dist/schema.d.ts.map +1 -1
  230. package/dist/schema.js +63 -4
  231. package/dist/schema.js.map +1 -1
  232. package/dist/support.d.ts +11 -0
  233. package/dist/support.d.ts.map +1 -0
  234. package/dist/support.js +31 -0
  235. package/dist/support.js.map +1 -0
  236. package/package.json +1 -1
package/README.md CHANGED
@@ -36,8 +36,26 @@ const findings = detect(packageJson); // Finding[]
36
36
  const summary = summarize(findings);
37
37
  ```
38
38
 
39
- `dependencies`, `devDependencies` and `peerDependencies` are all read. Version
40
- ranges are ignored.
39
+ `dependencies`, `devDependencies`, `peerDependencies` and
40
+ `optionalDependencies` are all read. Version ranges are ignored.
41
+
42
+ ## Guides
43
+
44
+ A rule may carry `guides`: IDs of
45
+ [modern-web-guidance](https://github.com/GoogleChrome/modern-web-guidance)
46
+ guides, Apache-2.0, that cover the implementation this catalog leaves out.
47
+ `resolveGuides(rule)` turns them into a category, a URL and the command that
48
+ pulls one into an agent's context. Only IDs are stored, and they are checked
49
+ against a committed snapshot, so a guide renamed upstream fails a test rather
50
+ than shipping as a dead link.
51
+
52
+ ```ts
53
+ import { resolveGuides } from "@jomae/catalog";
54
+
55
+ for (const guide of resolveGuides(rule)) {
56
+ console.log(guide.url, guide.command);
57
+ }
58
+ ```
41
59
 
42
60
  ## Every finding carries its caveats
43
61
 
@@ -13,6 +13,18 @@ export interface ResolvedFeature {
13
13
  spec: string | null;
14
14
  /** Minimum version each tracked browser needs. Null means no data (commonly: never shipped there). */
15
15
  support: Record<string, string | null>;
16
+ /**
17
+ * Set only when web-features publishes no aggregate support for the feature,
18
+ * which happens when one small part of it has not shipped anywhere. `key` is
19
+ * the compat key standing in for the feature and `support` is that key's own
20
+ * versions. It describes a part, so never show it without naming the part:
21
+ * an empty `support` above plus this filled in means "the feature as a whole
22
+ * has no published versions, but this piece of it has these".
23
+ */
24
+ partialSupport: {
25
+ key: string;
26
+ support: Record<string, string | null>;
27
+ } | null;
16
28
  }
17
29
  export interface BaselineInfo {
18
30
  /** The rule's overall status: the least-supported required feature. */
@@ -53,6 +65,19 @@ export type TrackedBrowser = (typeof TRACKED_BROWSERS)[number];
53
65
  * highest (latest) minimum any single feature demands.
54
66
  */
55
67
  export declare function combinedSupport(features: readonly ResolvedFeature[]): Record<TrackedBrowser, string | null>;
68
+ /**
69
+ * True when a support map names no version for any tracked browser. That is
70
+ * two different situations wearing the same face: the feature shipped nowhere,
71
+ * or web-features publishes no aggregate for it. A caller that renders one row
72
+ * per browser has to tell them apart, or a dash reads as "nobody has this".
73
+ */
74
+ export declare function hasNoVersions(support: Record<string, string | null>): boolean;
75
+ /**
76
+ * The features whose versions are missing because web-features publishes no
77
+ * aggregate, each with the part standing in for it. Empty for the usual case
78
+ * where every feature has a real support row.
79
+ */
80
+ export declare function unpublishedSupport(features: readonly ResolvedFeature[]): ResolvedFeature[];
56
81
  /**
57
82
  * Derives a rule's support status. A rule is only as available as its
58
83
  * least-supported required feature, so the weakest one wins. This is the only
@@ -1 +1 @@
1
- {"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,sGAAsG;IACtG,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B;;;OAGG;IACH,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAAC;IAClC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAUD,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAE3D;AAED,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,CAE5E;AASD,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAE5D;AASD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEjE;AAED,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,QAA+B,CAAC;AAC/D,eAAO,MAAM,oBAAoB,QAAsC,CAAC;AAsBxE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,CAqB1D;AAED,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,YAC3B,QAAQ,EACR,MAAM,EACN,SAAS,EACT,QAAQ,CACA,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAyB/D;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,eAAe,EAAE,GACnC,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC,CAQvC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,YAAY,CA2CxD"}
1
+ {"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,sGAAsG;IACtG,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACvC;;;;;;;OAOG;IACH,cAAc,EAAE;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;KACxC,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B;;;OAGG;IACH,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAAC;IAClC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAUD,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAE3D;AAED,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,GAAG,MAAM,CAE5E;AASD,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAE5D;AASD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAEjE;AAED,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,QAA+B,CAAC;AAC/D,eAAO,MAAM,oBAAoB,QAAsC,CAAC;AAsBxE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,CA4B1D;AAED,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,YAC3B,QAAQ,EACR,MAAM,EACN,SAAS,EACT,QAAQ,CACA,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAyB/D;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,eAAe,EAAE,GACnC,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC,CAQvC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAI7E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,eAAe,EAAE,GACnC,eAAe,EAAE,CAInB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,YAAY,CA2CxD"}
package/dist/baseline.js CHANGED
@@ -60,7 +60,12 @@ function sinceDate(status, entry) {
60
60
  * `unknown`, which is where this is meant to be caught.
61
61
  */
62
62
  export function resolveFeature(id) {
63
- const entry = baselineSnapshot.features[id];
63
+ // Object.hasOwn, not a bare index: the snapshot is a plain object, so an ID
64
+ // of "constructor" would otherwise resolve to Object and badge the rule
65
+ // "limited availability" with a fabricated feature name.
66
+ const entry = Object.hasOwn(baselineSnapshot.features, id)
67
+ ? baselineSnapshot.features[id]
68
+ : undefined;
64
69
  if (!entry) {
65
70
  return {
66
71
  id,
@@ -69,6 +74,7 @@ export function resolveFeature(id) {
69
74
  since: null,
70
75
  spec: null,
71
76
  support: {},
77
+ partialSupport: null,
72
78
  };
73
79
  }
74
80
  const status = toStatus(entry.baseline);
@@ -79,6 +85,7 @@ export function resolveFeature(id) {
79
85
  since: sinceDate(status, entry),
80
86
  spec: entry.spec,
81
87
  support: entry.support,
88
+ partialSupport: entry.partialSupport,
82
89
  };
83
90
  }
84
91
  /** Browsers the catalog tracks support for, in display order. */
@@ -122,6 +129,23 @@ export function combinedSupport(features) {
122
129
  }
123
130
  return result;
124
131
  }
132
+ /**
133
+ * True when a support map names no version for any tracked browser. That is
134
+ * two different situations wearing the same face: the feature shipped nowhere,
135
+ * or web-features publishes no aggregate for it. A caller that renders one row
136
+ * per browser has to tell them apart, or a dash reads as "nobody has this".
137
+ */
138
+ export function hasNoVersions(support) {
139
+ return TRACKED_BROWSERS.every((browser) => (support[browser] ?? null) === null);
140
+ }
141
+ /**
142
+ * The features whose versions are missing because web-features publishes no
143
+ * aggregate, each with the part standing in for it. Empty for the usual case
144
+ * where every feature has a real support row.
145
+ */
146
+ export function unpublishedSupport(features) {
147
+ return features.filter((feature) => hasNoVersions(feature.support) && feature.partialSupport);
148
+ }
125
149
  /**
126
150
  * Derives a rule's support status. A rule is only as available as its
127
151
  * least-supported required feature, so the weakest one wins. This is the only
@@ -1 +1 @@
1
- {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ export declare const categorySchema: z.ZodEnum<{
3
+ animation: "animation";
4
+ "async-data": "async-data";
5
+ "device-apis": "device-apis";
6
+ formatting: "formatting";
7
+ forms: "forms";
8
+ layout: "layout";
9
+ scrolling: "scrolling";
10
+ typography: "typography";
11
+ }>;
12
+ export type CategoryId = z.infer<typeof categorySchema>;
13
+ export interface CategoryMeta {
14
+ id: CategoryId;
15
+ name: string;
16
+ description: string;
17
+ }
18
+ export declare const CATEGORIES: readonly CategoryMeta[];
19
+ export declare const CATEGORIES_BY_ID: Readonly<Record<CategoryId, CategoryMeta>>;
20
+ //# sourceMappingURL=categories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../src/categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmBxB,eAAO,MAAM,cAAc;;;;;;;;;EAAuB,CAAC;AACnD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,EAAE,SAAS,YAAY,EAyCpC,CAAC;AAEX,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAIrE,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * The ids, as a literal tuple. Declaring them here rather than deriving them
4
+ * from CATEGORIES with a cast is what keeps CategoryId a closed union: a
5
+ * `as [string, ...string[]]` cast widens the element type back to string, and
6
+ * z.enum then infers string, so a typo'd category would type-check.
7
+ */
8
+ const CATEGORY_IDS = [
9
+ "layout",
10
+ "scrolling",
11
+ "animation",
12
+ "typography",
13
+ "forms",
14
+ "device-apis",
15
+ "async-data",
16
+ "formatting",
17
+ ];
18
+ export const categorySchema = z.enum(CATEGORY_IDS);
19
+ export const CATEGORIES = [
20
+ {
21
+ id: "layout",
22
+ name: "Layout & Sizing",
23
+ description: "Sizing, positioning, and structuring boxes on the page.",
24
+ },
25
+ {
26
+ id: "scrolling",
27
+ name: "Scroll & Scrollbars",
28
+ description: "Scroll containers, scrollbars, and scroll behavior.",
29
+ },
30
+ {
31
+ id: "animation",
32
+ name: "Animation & Transitions",
33
+ description: "Animating state changes and page transitions.",
34
+ },
35
+ {
36
+ id: "typography",
37
+ name: "Typography & Colour",
38
+ description: "Text layout, wrapping, and color.",
39
+ },
40
+ {
41
+ id: "forms",
42
+ name: "Forms & Interactive Controls",
43
+ description: "Form inputs and interactive UI controls.",
44
+ },
45
+ {
46
+ id: "device-apis",
47
+ name: "Device & System APIs",
48
+ description: "APIs that reach the device or operating system.",
49
+ },
50
+ {
51
+ id: "async-data",
52
+ name: "Async, Observers & Data",
53
+ description: "Asynchronous work, observers, and data handling.",
54
+ },
55
+ {
56
+ id: "formatting",
57
+ name: "Internationalization & Formatting",
58
+ description: "Locale-aware number, date, and time formatting.",
59
+ },
60
+ ];
61
+ export const CATEGORIES_BY_ID = Object.fromEntries(CATEGORIES.map((c) => [c.id, c]));
62
+ //# sourceMappingURL=categories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"categories.js","sourceRoot":"","sources":["../src/categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,MAAM,YAAY,GAAG;IACnB,QAAQ;IACR,WAAW;IACX,WAAW;IACX,YAAY;IACZ,OAAO;IACP,aAAa;IACb,YAAY;IACZ,YAAY;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AASnD,MAAM,CAAC,MAAM,UAAU,GAA4B;IACjD;QACE,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,yDAAyD;KACvE;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,qDAAqD;KACnE;IACD;QACE,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,+CAA+C;KAC7D;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,mCAAmC;KACjD;IACD;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,0CAA0C;KACxD;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,iDAAiD;KAC/D;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,kDAAkD;KAChE;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,mCAAmC;QACzC,WAAW,EAAE,iDAAiD;KAC/D;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAC3B,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAGlD,CAAC"}
package/dist/detect.d.ts CHANGED
@@ -6,7 +6,7 @@ import type { BaselineStatus, Rule } from "./schema.ts";
6
6
  * agent tooling) calls this same function, which is what makes four form
7
7
  * factors cost one implementation.
8
8
  */
9
- export declare const DEPENDENCY_FIELDS: readonly ["dependencies", "devDependencies", "peerDependencies"];
9
+ export declare const DEPENDENCY_FIELDS: readonly ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"];
10
10
  export type DependencyField = (typeof DEPENDENCY_FIELDS)[number];
11
11
  /** The subset of a package.json that detect() reads. */
12
12
  export interface PackageJsonLike {
@@ -14,6 +14,7 @@ export interface PackageJsonLike {
14
14
  dependencies?: Record<string, string> | undefined;
15
15
  devDependencies?: Record<string, string> | undefined;
16
16
  peerDependencies?: Record<string, string> | undefined;
17
+ optionalDependencies?: Record<string, string> | undefined;
17
18
  }
18
19
  export interface MatchedPackage {
19
20
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;GAKG;AAEH,eAAO,MAAM,iBAAiB,YAC5B,cAAc,EACd,iBAAiB,EACjB,kBAAkB,CACV,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CACvD;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,uEAAuE;IACvE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,gEAAgE;IAChE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC;IACvB,mEAAmE;IACnE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,+DAA+D;IAC/D,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,CAAC;CACrC;AA2FD;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,aAAkB,GAC1B,OAAO,EAAE,CAkBX;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAQ3D;AAED,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,eAAe,EAAE,OAAO,CAAC;IACzB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAyB/D;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CACrB,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAGR"}
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;GAKG;AAEH,eAAO,MAAM,iBAAiB,YAC5B,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAGlB,sBAAsB,CACd,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACtD,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC3D;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,uEAAuE;IACvE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,gEAAgE;IAChE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC;IACvB,mEAAmE;IACnE,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,+DAA+D;IAC/D,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,CAAC;CACrC;AAgGD;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,aAAkB,GAC1B,OAAO,EAAE,CAkBX;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAa3D;AAED,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,eAAe,EAAE,OAAO,CAAC;IACzB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAyB/D;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CACrB,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAGR"}
package/dist/detect.js CHANGED
@@ -11,9 +11,17 @@ export const DEPENDENCY_FIELDS = [
11
11
  "dependencies",
12
12
  "devDependencies",
13
13
  "peerDependencies",
14
+ // Optional dependencies are installed and bundled like any other, so a
15
+ // package parked here is just as replaceable as one in `dependencies`.
16
+ "optionalDependencies",
14
17
  ];
15
18
  function readSize(name) {
16
- const entry = packageSizes.sizes[name];
19
+ // Object.hasOwn, not a bare index: a package literally named "constructor"
20
+ // would otherwise pick up Object off the prototype and report a confident
21
+ // 0 bytes instead of an unknown size.
22
+ const entry = Object.hasOwn(packageSizes.sizes, name)
23
+ ? packageSizes.sizes[name]
24
+ : undefined;
17
25
  if (!entry)
18
26
  return { gzip: null, version: null };
19
27
  return { gzip: entry.gzip, version: entry.version };
@@ -118,7 +126,14 @@ export function sortFindings(findings) {
118
126
  const byBaseline = compareBaseline(a.baseline.status, b.baseline.status);
119
127
  if (byBaseline !== 0)
120
128
  return byBaseline;
121
- return a.rule.title.localeCompare(b.rule.title);
129
+ // Codepoint order, not localeCompare: collation varies by runtime locale
130
+ // and ICU build, and two surfaces rendering the same report must not
131
+ // order a tie differently.
132
+ if (a.rule.title < b.rule.title)
133
+ return -1;
134
+ if (a.rule.title > b.rule.title)
135
+ return 1;
136
+ return 0;
122
137
  });
123
138
  }
124
139
  /** Pure. Rolls findings up into the numbers a report leads with. */
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface BaselineHistoryEntry {
2
+ /** Calendar month this entry represents, YYYY-MM. Re-running the refresh
3
+ * within the same month updates this entry in place, never duplicates. */
4
+ month: string;
5
+ generatedOn: string;
6
+ webFeaturesVersion: string;
7
+ /** Rule count at this point, so a chart can tell catalog growth apart
8
+ * from an actual change in browser support. */
9
+ ruleCount: number;
10
+ tally: {
11
+ widely: number;
12
+ newly: number;
13
+ limited: number;
14
+ unknown: number;
15
+ };
16
+ }
17
+ export interface BaselineHistory {
18
+ entries: BaselineHistoryEntry[];
19
+ }
20
+ export declare const baselineHistory: BaselineHistory;
21
+ //# sourceMappingURL=baseline-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline-history.d.ts","sourceRoot":"","sources":["../../src/generated/baseline-history.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC;8EAC0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B;mDAC+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5E;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,eAAO,MAAM,eAAe,EAAE,eAe7B,CAAC"}
@@ -0,0 +1,20 @@
1
+ // Generated by scripts/refresh-baseline.ts. Do not edit by hand.
2
+ // Run `pnpm refresh:baseline` to update. Entries only append; the first
3
+ // entry is whenever this feature first shipped, there is no backfill.
4
+ export const baselineHistory = {
5
+ "entries": [
6
+ {
7
+ "month": "2026-09",
8
+ "generatedOn": "2026-09-06",
9
+ "webFeaturesVersion": "3.36.0",
10
+ "ruleCount": 56,
11
+ "tally": {
12
+ "widely": 32,
13
+ "newly": 12,
14
+ "limited": 12,
15
+ "unknown": 0
16
+ }
17
+ }
18
+ ]
19
+ };
20
+ //# sourceMappingURL=baseline-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline-history.js","sourceRoot":"","sources":["../../src/generated/baseline-history.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,wEAAwE;AACxE,sEAAsE;AAkBtE,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,SAAS,EAAE;QACT;YACE,OAAO,EAAE,SAAS;YAClB,aAAa,EAAE,YAAY;YAC3B,oBAAoB,EAAE,QAAQ;YAC9B,WAAW,EAAE,EAAE;YACf,OAAO,EAAE;gBACP,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,CAAC;aACb;SACF;KACF;CACF,CAAC"}
@@ -16,6 +16,16 @@ export interface BaselineSnapshotEntry {
16
16
  * because the feature never shipped there).
17
17
  */
18
18
  support: Record<string, string | null>;
19
+ /**
20
+ * Set only when web-features publishes no aggregate support for the feature.
21
+ * `key` names one of its BCD compat keys and `support` is that key's own
22
+ * versions, straight from web-features. It describes a part of the feature,
23
+ * never the whole, so it is shown with the part named next to it.
24
+ */
25
+ partialSupport: {
26
+ key: string;
27
+ support: Record<string, string | null>;
28
+ } | null;
19
29
  }
20
30
  export interface BaselineSnapshot {
21
31
  /** Date this snapshot was generated, YYYY-MM-DD. */
@@ -1 +1 @@
1
- {"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../src/generated/baseline.ts"],"names":[],"mappings":"AAGA,sEAAsE;AACtE,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACjC,+CAA+C;IAC/C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kEAAkE;IAClE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,gBAAgB,EAAE,gBAgtB9B,CAAC"}
1
+ {"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../src/generated/baseline.ts"],"names":[],"mappings":"AAGA,sEAAsE;AACtE,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACjC,+CAA+C;IAC/C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kEAAkE;IAClE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACvC;;;;;OAKG;IACH,cAAc,EAAE;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;KACxC,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,gBAAgB,EAAE,gBAu4B9B,CAAC"}