@jomae/catalog 0.3.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.
- package/README.md +21 -3
- package/dist/baseline.d.ts +36 -0
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +75 -2
- package/dist/baseline.js.map +1 -1
- package/dist/categories.d.ts +20 -0
- package/dist/categories.d.ts.map +1 -0
- package/dist/categories.js +62 -0
- package/dist/categories.js.map +1 -0
- package/dist/detect.d.ts +2 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +17 -2
- package/dist/detect.js.map +1 -1
- package/dist/format.js +1 -1
- package/dist/format.js.map +1 -1
- package/dist/generated/baseline-history.d.ts +21 -0
- package/dist/generated/baseline-history.d.ts.map +1 -0
- package/dist/generated/baseline-history.js +20 -0
- package/dist/generated/baseline-history.js.map +1 -0
- package/dist/generated/baseline.d.ts +16 -0
- package/dist/generated/baseline.d.ts.map +1 -1
- package/dist/generated/baseline.js +683 -44
- package/dist/generated/baseline.js.map +1 -1
- package/dist/generated/guides.d.ts +16 -0
- package/dist/generated/guides.d.ts.map +1 -0
- package/dist/generated/guides.js +153 -0
- package/dist/generated/guides.js.map +1 -0
- package/dist/generated/sizes.d.ts.map +1 -1
- package/dist/generated/sizes.js +683 -48
- package/dist/generated/sizes.js.map +1 -1
- package/dist/generated/support-claims.d.ts +15 -0
- package/dist/generated/support-claims.d.ts.map +1 -0
- package/dist/generated/support-claims.js +69 -0
- package/dist/generated/support-claims.js.map +1 -0
- package/dist/guides.d.ts +46 -0
- package/dist/guides.d.ts.map +1 -0
- package/dist/guides.js +55 -0
- package/dist/guides.js.map +1 -0
- package/dist/history.d.ts +11 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +14 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/rules/abort-controller.d.ts +3 -0
- package/dist/rules/abort-controller.d.ts.map +1 -0
- package/dist/rules/abort-controller.js +26 -0
- package/dist/rules/abort-controller.js.map +1 -0
- package/dist/rules/accordion.d.ts.map +1 -1
- package/dist/rules/accordion.js +3 -0
- package/dist/rules/accordion.js.map +1 -1
- package/dist/rules/array-grouping.d.ts +3 -0
- package/dist/rules/array-grouping.d.ts.map +1 -0
- package/dist/rules/array-grouping.js +29 -0
- package/dist/rules/array-grouping.js.map +1 -0
- package/dist/rules/aspect-ratio.d.ts.map +1 -1
- package/dist/rules/aspect-ratio.js +1 -0
- package/dist/rules/aspect-ratio.js.map +1 -1
- package/dist/rules/base64.d.ts +3 -0
- package/dist/rules/base64.d.ts.map +1 -0
- package/dist/rules/base64.js +41 -0
- package/dist/rules/base64.js.map +1 -0
- package/dist/rules/broadcast-channel.d.ts +3 -0
- package/dist/rules/broadcast-channel.d.ts.map +1 -0
- package/dist/rules/broadcast-channel.js +26 -0
- package/dist/rules/broadcast-channel.js.map +1 -0
- package/dist/rules/carousel.d.ts.map +1 -1
- package/dist/rules/carousel.js +10 -0
- package/dist/rules/carousel.js.map +1 -1
- package/dist/rules/clipboard.d.ts +3 -0
- package/dist/rules/clipboard.d.ts.map +1 -0
- package/dist/rules/clipboard.js +35 -0
- package/dist/rules/clipboard.js.map +1 -0
- package/dist/rules/color-functions.d.ts.map +1 -1
- package/dist/rules/color-functions.js +9 -1
- package/dist/rules/color-functions.js.map +1 -1
- package/dist/rules/compression-streams.d.ts +3 -0
- package/dist/rules/compression-streams.d.ts.map +1 -0
- package/dist/rules/compression-streams.js +26 -0
- package/dist/rules/compression-streams.js.map +1 -0
- package/dist/rules/container-queries.d.ts.map +1 -1
- package/dist/rules/container-queries.js +3 -0
- package/dist/rules/container-queries.js.map +1 -1
- package/dist/rules/content-visibility.d.ts.map +1 -1
- package/dist/rules/content-visibility.js +11 -2
- package/dist/rules/content-visibility.js.map +1 -1
- package/dist/rules/custom-highlight.d.ts +3 -0
- package/dist/rules/custom-highlight.d.ts.map +1 -0
- package/dist/rules/custom-highlight.js +39 -0
- package/dist/rules/custom-highlight.js.map +1 -0
- package/dist/rules/date-time-input.d.ts.map +1 -1
- package/dist/rules/date-time-input.js +4 -0
- package/dist/rules/date-time-input.js.map +1 -1
- package/dist/rules/dialog.d.ts.map +1 -1
- package/dist/rules/dialog.js +11 -0
- package/dist/rules/dialog.js.map +1 -1
- package/dist/rules/discrete-transitions.d.ts.map +1 -1
- package/dist/rules/discrete-transitions.js +6 -0
- package/dist/rules/discrete-transitions.js.map +1 -1
- package/dist/rules/drag-and-drop.d.ts +3 -0
- package/dist/rules/drag-and-drop.d.ts.map +1 -0
- package/dist/rules/drag-and-drop.js +47 -0
- package/dist/rules/drag-and-drop.js.map +1 -0
- package/dist/rules/duration-format.d.ts +3 -0
- package/dist/rules/duration-format.d.ts.map +1 -0
- package/dist/rules/duration-format.js +37 -0
- package/dist/rules/duration-format.js.map +1 -0
- package/dist/rules/event-target.d.ts +3 -0
- package/dist/rules/event-target.d.ts.map +1 -0
- package/dist/rules/event-target.js +51 -0
- package/dist/rules/event-target.js.map +1 -0
- package/dist/rules/fetch.d.ts +3 -0
- package/dist/rules/fetch.d.ts.map +1 -0
- package/dist/rules/fetch.js +46 -0
- package/dist/rules/fetch.js.map +1 -0
- package/dist/rules/field-sizing.d.ts.map +1 -1
- package/dist/rules/field-sizing.js +10 -2
- package/dist/rules/field-sizing.js.map +1 -1
- package/dist/rules/fluid-type.d.ts.map +1 -1
- package/dist/rules/fluid-type.js +3 -1
- package/dist/rules/fluid-type.js.map +1 -1
- package/dist/rules/focus-visible.d.ts +3 -0
- package/dist/rules/focus-visible.d.ts.map +1 -0
- package/dist/rules/focus-visible.js +27 -0
- package/dist/rules/focus-visible.js.map +1 -0
- package/dist/rules/fullscreen.d.ts +3 -0
- package/dist/rules/fullscreen.d.ts.map +1 -0
- package/dist/rules/fullscreen.js +29 -0
- package/dist/rules/fullscreen.js.map +1 -0
- package/dist/rules/height-animation.d.ts.map +1 -1
- package/dist/rules/height-animation.js +2 -0
- package/dist/rules/height-animation.js.map +1 -1
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +102 -3
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/inert.d.ts +3 -0
- package/dist/rules/inert.d.ts.map +1 -0
- package/dist/rules/inert.js +37 -0
- package/dist/rules/inert.js.map +1 -0
- package/dist/rules/intersection-observer.d.ts +3 -0
- package/dist/rules/intersection-observer.d.ts.map +1 -0
- package/dist/rules/intersection-observer.js +36 -0
- package/dist/rules/intersection-observer.js.map +1 -0
- package/dist/rules/lazy-loading.d.ts.map +1 -1
- package/dist/rules/lazy-loading.js +4 -0
- package/dist/rules/lazy-loading.js.map +1 -1
- package/dist/rules/line-clamp.d.ts +3 -0
- package/dist/rules/line-clamp.d.ts.map +1 -0
- package/dist/rules/line-clamp.js +39 -0
- package/dist/rules/line-clamp.js.map +1 -0
- package/dist/rules/masonry.d.ts.map +1 -1
- package/dist/rules/masonry.js +3 -0
- package/dist/rules/masonry.js.map +1 -1
- package/dist/rules/natural-sort.d.ts +3 -0
- package/dist/rules/natural-sort.d.ts.map +1 -0
- package/dist/rules/natural-sort.js +41 -0
- package/dist/rules/natural-sort.js.map +1 -0
- package/dist/rules/number-format.d.ts +3 -0
- package/dist/rules/number-format.d.ts.map +1 -0
- package/dist/rules/number-format.js +27 -0
- package/dist/rules/number-format.js.map +1 -0
- package/dist/rules/page-visibility.d.ts +3 -0
- package/dist/rules/page-visibility.d.ts.map +1 -0
- package/dist/rules/page-visibility.js +29 -0
- package/dist/rules/page-visibility.js.map +1 -0
- package/dist/rules/popover.d.ts.map +1 -1
- package/dist/rules/popover.js +10 -1
- package/dist/rules/popover.js.map +1 -1
- package/dist/rules/random-uuid.d.ts +3 -0
- package/dist/rules/random-uuid.d.ts.map +1 -0
- package/dist/rules/random-uuid.js +31 -0
- package/dist/rules/random-uuid.js.map +1 -0
- package/dist/rules/relative-time.d.ts +3 -0
- package/dist/rules/relative-time.d.ts.map +1 -0
- package/dist/rules/relative-time.js +24 -0
- package/dist/rules/relative-time.js.map +1 -0
- package/dist/rules/resizable-panels.d.ts.map +1 -1
- package/dist/rules/resizable-panels.js +4 -2
- package/dist/rules/resizable-panels.js.map +1 -1
- package/dist/rules/resize-observer.d.ts +3 -0
- package/dist/rules/resize-observer.d.ts.map +1 -0
- package/dist/rules/resize-observer.js +28 -0
- package/dist/rules/resize-observer.js.map +1 -0
- package/dist/rules/screen-wake-lock.d.ts +3 -0
- package/dist/rules/screen-wake-lock.d.ts.map +1 -0
- package/dist/rules/screen-wake-lock.js +25 -0
- package/dist/rules/screen-wake-lock.js.map +1 -0
- package/dist/rules/scroll-animations.d.ts.map +1 -1
- package/dist/rules/scroll-animations.js +9 -1
- package/dist/rules/scroll-animations.js.map +1 -1
- package/dist/rules/scroll-lock.d.ts.map +1 -1
- package/dist/rules/scroll-lock.js +8 -7
- package/dist/rules/scroll-lock.js.map +1 -1
- package/dist/rules/scrollbars.d.ts.map +1 -1
- package/dist/rules/scrollbars.js +8 -0
- package/dist/rules/scrollbars.js.map +1 -1
- package/dist/rules/select.d.ts.map +1 -1
- package/dist/rules/select.js +17 -1
- package/dist/rules/select.js.map +1 -1
- package/dist/rules/server-sent-events.d.ts +3 -0
- package/dist/rules/server-sent-events.d.ts.map +1 -0
- package/dist/rules/server-sent-events.js +38 -0
- package/dist/rules/server-sent-events.js.map +1 -0
- package/dist/rules/smooth-scroll.d.ts.map +1 -1
- package/dist/rules/smooth-scroll.js +3 -0
- package/dist/rules/smooth-scroll.js.map +1 -1
- package/dist/rules/speech-recognition.d.ts +3 -0
- package/dist/rules/speech-recognition.d.ts.map +1 -0
- package/dist/rules/speech-recognition.js +36 -0
- package/dist/rules/speech-recognition.js.map +1 -0
- package/dist/rules/speech-synthesis.d.ts +3 -0
- package/dist/rules/speech-synthesis.d.ts.map +1 -0
- package/dist/rules/speech-synthesis.js +25 -0
- package/dist/rules/speech-synthesis.js.map +1 -0
- package/dist/rules/sticky.d.ts.map +1 -1
- package/dist/rules/sticky.js +4 -0
- package/dist/rules/sticky.js.map +1 -1
- package/dist/rules/structured-clone.d.ts +3 -0
- package/dist/rules/structured-clone.d.ts.map +1 -0
- package/dist/rules/structured-clone.js +32 -0
- package/dist/rules/structured-clone.js.map +1 -0
- package/dist/rules/text-box-trim.d.ts.map +1 -1
- package/dist/rules/text-box-trim.js +3 -1
- package/dist/rules/text-box-trim.js.map +1 -1
- package/dist/rules/text-wrap-balance.d.ts.map +1 -1
- package/dist/rules/text-wrap-balance.js +2 -0
- package/dist/rules/text-wrap-balance.js.map +1 -1
- package/dist/rules/url-search-params.d.ts +3 -0
- package/dist/rules/url-search-params.d.ts.map +1 -0
- package/dist/rules/url-search-params.js +42 -0
- package/dist/rules/url-search-params.js.map +1 -0
- package/dist/rules/view-transitions.d.ts.map +1 -1
- package/dist/rules/view-transitions.js +9 -0
- package/dist/rules/view-transitions.js.map +1 -1
- package/dist/rules/web-bluetooth.d.ts +3 -0
- package/dist/rules/web-bluetooth.d.ts.map +1 -0
- package/dist/rules/web-bluetooth.js +26 -0
- package/dist/rules/web-bluetooth.js.map +1 -0
- package/dist/rules/web-crypto.d.ts +3 -0
- package/dist/rules/web-crypto.d.ts.map +1 -0
- package/dist/rules/web-crypto.js +32 -0
- package/dist/rules/web-crypto.js.map +1 -0
- package/dist/rules/web-share.d.ts +3 -0
- package/dist/rules/web-share.d.ts.map +1 -0
- package/dist/rules/web-share.js +28 -0
- package/dist/rules/web-share.js.map +1 -0
- package/dist/schema.d.ts +22 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +64 -5
- package/dist/schema.js.map +1 -1
- package/dist/support.d.ts +11 -0
- package/dist/support.d.ts.map +1 -0
- package/dist/support.js +31 -0
- package/dist/support.js.map +1 -0
- package/package.json +2 -2
package/dist/schema.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { categorySchema } from "./categories.js";
|
|
2
3
|
/**
|
|
3
4
|
* Bumped whenever the shape of a rule changes in a way that breaks consumers.
|
|
4
5
|
* Published alongside the catalog so downstream surfaces can refuse data they
|
|
@@ -19,7 +20,36 @@ export const baselineStatusSchema = z.enum([
|
|
|
19
20
|
]);
|
|
20
21
|
const isoDate = z
|
|
21
22
|
.string()
|
|
22
|
-
.regex(/^\d{4}-\d{2}-\d{2}$/, "expected an ISO date, YYYY-MM-DD")
|
|
23
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, "expected an ISO date, YYYY-MM-DD")
|
|
24
|
+
// Shape alone is not enough: "2026-99-99" matches the regex, and
|
|
25
|
+
// check-freshness then computes NaN days of age, which is never greater
|
|
26
|
+
// than the limit. A typo would make a hand-verified claim immortal.
|
|
27
|
+
//
|
|
28
|
+
// Checked arithmetically rather than with Date, because the purity test
|
|
29
|
+
// bans constructing one anywhere detect() can reach.
|
|
30
|
+
.refine((value) => {
|
|
31
|
+
const year = Number(value.slice(0, 4));
|
|
32
|
+
const month = Number(value.slice(5, 7));
|
|
33
|
+
const day = Number(value.slice(8, 10));
|
|
34
|
+
if (month < 1 || month > 12 || day < 1)
|
|
35
|
+
return false;
|
|
36
|
+
const leap = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
|
|
37
|
+
const lengths = [
|
|
38
|
+
31,
|
|
39
|
+
leap ? 29 : 28,
|
|
40
|
+
31,
|
|
41
|
+
30,
|
|
42
|
+
31,
|
|
43
|
+
30,
|
|
44
|
+
31,
|
|
45
|
+
31,
|
|
46
|
+
30,
|
|
47
|
+
31,
|
|
48
|
+
30,
|
|
49
|
+
31,
|
|
50
|
+
];
|
|
51
|
+
return day <= lengths[month - 1];
|
|
52
|
+
}, "expected a real calendar date");
|
|
23
53
|
const slug = z
|
|
24
54
|
.string()
|
|
25
55
|
.regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "expected a lowercase kebab-case slug");
|
|
@@ -27,6 +57,10 @@ const slug = z
|
|
|
27
57
|
const packageName = z
|
|
28
58
|
.string()
|
|
29
59
|
.regex(/^(?:@[a-z0-9][a-z0-9-._]*\/)?[a-z0-9][a-z0-9-._]*$/, "expected a lowercase npm package name");
|
|
60
|
+
/** Rendered as a link on every surface, so nothing but https gets in. */
|
|
61
|
+
const httpsUrl = z
|
|
62
|
+
.url()
|
|
63
|
+
.refine((value) => value.startsWith("https://"), "expected an https URL");
|
|
30
64
|
/**
|
|
31
65
|
* Escape hatch for features that web-features has no ID for yet. Carries the
|
|
32
66
|
* date it was checked by hand so `scripts/check-freshness.ts` can fail CI once
|
|
@@ -44,6 +78,8 @@ export const ruleSchema = z
|
|
|
44
78
|
id: slug,
|
|
45
79
|
/** Short human label, e.g. "Carousels". */
|
|
46
80
|
title: z.string().min(1),
|
|
81
|
+
/** Which entry in packages/catalog/src/categories.ts this rule belongs to. */
|
|
82
|
+
category: categorySchema,
|
|
47
83
|
/** npm packages this rule can replace. Exact names, lowercase. */
|
|
48
84
|
replaces: z.array(packageName).min(1),
|
|
49
85
|
/**
|
|
@@ -54,18 +90,22 @@ export const ruleSchema = z
|
|
|
54
90
|
* Call those out in `agent.unless` instead. Empty only when
|
|
55
91
|
* `manualBaseline` is supplied.
|
|
56
92
|
*/
|
|
57
|
-
featureIds: z
|
|
93
|
+
featureIds: z
|
|
94
|
+
.array(z
|
|
95
|
+
.string()
|
|
96
|
+
.regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "expected a lowercase web-features ID"))
|
|
97
|
+
.refine((ids) => new Set(ids).size === ids.length, "a feature may only be listed once"),
|
|
58
98
|
/** The native approach, one line. */
|
|
59
99
|
native: z.string().min(1),
|
|
60
100
|
human: z.object({
|
|
61
101
|
/** 2 to 4 sentences of prose. */
|
|
62
102
|
explainer: z.string().min(1),
|
|
63
|
-
/** Copy-pasteable CSS or
|
|
103
|
+
/** Copy-pasteable CSS, HTML, or JavaScript. */
|
|
64
104
|
snippet: z.string().min(1),
|
|
65
105
|
/** A live demo or a post that walks through it. */
|
|
66
|
-
demoUrl:
|
|
106
|
+
demoUrl: httpsUrl.optional(),
|
|
67
107
|
/** The MDN reference page for the native feature. */
|
|
68
|
-
mdnUrl:
|
|
108
|
+
mdnUrl: httpsUrl.optional(),
|
|
69
109
|
}),
|
|
70
110
|
/** Terse projection for LLM surfaces. Budget roughly 200 tokens. */
|
|
71
111
|
agent: z.object({
|
|
@@ -81,6 +121,15 @@ export const ruleSchema = z
|
|
|
81
121
|
.min(1, "every rule must state when the dependency is still correct"),
|
|
82
122
|
snippet: z.string().min(1),
|
|
83
123
|
}),
|
|
124
|
+
/**
|
|
125
|
+
* IDs of GoogleChrome/modern-web-guidance guides that cover the
|
|
126
|
+
* implementation in depth. Their guides are keyed by use case, ours by
|
|
127
|
+
* package name, so this is the hand-off from "which dependency can go" to
|
|
128
|
+
* "how to build the thing properly". IDs only: the category and the URL
|
|
129
|
+
* are resolved from the committed snapshot in guides.ts, so a guide that
|
|
130
|
+
* is renamed upstream fails a test instead of shipping as a dead link.
|
|
131
|
+
*/
|
|
132
|
+
guides: z.array(slug).optional(),
|
|
84
133
|
manualBaseline: manualBaselineSchema.optional(),
|
|
85
134
|
})
|
|
86
135
|
.superRefine((rule, ctx) => {
|
|
@@ -91,6 +140,16 @@ export const ruleSchema = z
|
|
|
91
140
|
message: "a rule needs at least one web-features ID, or an explicit manualBaseline with a verifiedOn date",
|
|
92
141
|
});
|
|
93
142
|
}
|
|
143
|
+
// resolveBaseline() only consults manualBaseline when featureIds is empty,
|
|
144
|
+
// so carrying both silently discards the hand-verified override while
|
|
145
|
+
// check-freshness keeps ageing its verifiedOn date.
|
|
146
|
+
if (rule.featureIds.length > 0 && rule.manualBaseline) {
|
|
147
|
+
ctx.addIssue({
|
|
148
|
+
code: "custom",
|
|
149
|
+
path: ["manualBaseline"],
|
|
150
|
+
message: "a manualBaseline is only read when featureIds is empty. Drop one or the other.",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
94
153
|
});
|
|
95
154
|
export const catalogSchema = z.array(ruleSchema).superRefine((rules, ctx) => {
|
|
96
155
|
const seenIds = new Set();
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,QAAQ;IACR,OAAO;IACP,SAAS;IACT,SAAS;CACV,CAAC,CAAC;AAGH,MAAM,OAAO,GAAG,CAAC;KACd,MAAM,EAAE;KACR,KAAK,CAAC,qBAAqB,EAAE,kCAAkC,CAAC;IACjE,iEAAiE;IACjE,wEAAwE;IACxE,oEAAoE;IACpE,EAAE;IACF,wEAAwE;IACxE,qDAAqD;KACpD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IAChB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG;QACd,EAAE;QACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QACd,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;KACH,CAAC;IACF,OAAO,GAAG,IAAK,OAAO,CAAC,KAAK,GAAG,CAAC,CAAY,CAAC;AAC/C,CAAC,EAAE,+BAA+B,CAAC,CAAC;AAEtC,MAAM,IAAI,GAAG,CAAC;KACX,MAAM,EAAE;KACR,KAAK,CAAC,4BAA4B,EAAE,sCAAsC,CAAC,CAAC;AAE/E,iFAAiF;AACjF,MAAM,WAAW,GAAG,CAAC;KAClB,MAAM,EAAE;KACR,KAAK,CACJ,oDAAoD,EACpD,uCAAuC,CACxC,CAAC;AAEJ,yEAAyE;AACzE,MAAM,QAAQ,GAAG,CAAC;KACf,GAAG,EAAE;KACL,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,uBAAuB,CAAC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;IACjD,UAAU,EAAE,OAAO;IACnB,uEAAuE;IACvE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACxB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,qEAAqE;IACrE,EAAE,EAAE,IAAI;IACR,2CAA2C;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,EAAE,cAAc;IAExB,kEAAkE;IAClE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAErC;;;;;;;OAOG;IACH,UAAU,EAAE,CAAC;SACV,KAAK,CACJ,CAAC;SACE,MAAM,EAAE;SACR,KAAK,CACJ,4BAA4B,EAC5B,sCAAsC,CACvC,CACJ;SACA,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,EACzC,mCAAmC,CACpC;IAEH,qCAAqC;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,iCAAiC;QACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,+CAA+C;QAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,mDAAmD;QACnD,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE;QAC5B,qDAAqD;QACrD,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE;KAC5B,CAAC;IAEF,oEAAoE;IACpE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,gDAAgD;QAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB;;;;WAIG;QACH,MAAM,EAAE,CAAC;aACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxB,GAAG,CAAC,CAAC,EAAE,4DAA4D,CAAC;QACvE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3B,CAAC;IAEF;;;;;;;OAOG;IACH,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAEhC,cAAc,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CAChD,CAAC;KACD,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACzB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACzD,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,YAAY,CAAC;YACpB,OAAO,EACL,iGAAiG;SACpG,CAAC,CAAC;IACL,CAAC;IACD,2EAA2E;IAC3E,sEAAsE;IACtE,oDAAoD;IACpD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACtD,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,CAAC,gBAAgB,CAAC;YACxB,OAAO,EACL,gFAAgF;SACnF,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAIL,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;gBACnB,OAAO,EAAE,sBAAsB,IAAI,CAAC,EAAE,GAAG;aAC1C,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAErB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,CAAC,QAAQ,CAAC;oBACX,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC;oBACzB,OAAO,EAAE,IAAI,GAAG,iCAAiC,KAAK,2FAA2F;iBAClJ,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { supportClaims } from "./generated/support-claims.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Replaces every token with its version. An unknown token is left visible
|
|
4
|
+
* rather than silently blanked: a `{{...}}` on screen is obviously broken,
|
|
5
|
+
* where an empty string reads as finished prose. A test asserts none survive.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveSupportClaims(text: string): string;
|
|
8
|
+
/** True when a string still carries an unresolved token. Used by the tests. */
|
|
9
|
+
export declare function hasUnresolvedClaim(text: string): boolean;
|
|
10
|
+
export { supportClaims };
|
|
11
|
+
//# sourceMappingURL=support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../src/support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAgB9D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/support.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { supportClaims } from "./generated/support-claims.js";
|
|
2
|
+
/**
|
|
3
|
+
* Interpolates the browser versions a rule's prose cites.
|
|
4
|
+
*
|
|
5
|
+
* Rules write `{{safari:api.Crypto.randomUUID}}`, never `15.4`. The number
|
|
6
|
+
* comes from web-features or from MDN's browser-compat-data at build time and
|
|
7
|
+
* is committed as a snapshot, so a version cannot be guessed, cannot go stale
|
|
8
|
+
* without the diff showing it, and cannot be typed wrong in the first place.
|
|
9
|
+
*
|
|
10
|
+
* Pure, like everything else the surfaces share.
|
|
11
|
+
*/
|
|
12
|
+
/** `{{browser:key}}`, where key is a web-features ID or a BCD path. */
|
|
13
|
+
const CLAIM_TOKEN = /\{\{([a-z_]+):([A-Za-z0-9_.-]+)\}\}/g;
|
|
14
|
+
/**
|
|
15
|
+
* Replaces every token with its version. An unknown token is left visible
|
|
16
|
+
* rather than silently blanked: a `{{...}}` on screen is obviously broken,
|
|
17
|
+
* where an empty string reads as finished prose. A test asserts none survive.
|
|
18
|
+
*/
|
|
19
|
+
export function resolveSupportClaims(text) {
|
|
20
|
+
return text.replace(CLAIM_TOKEN, (token, browser, key) => supportClaims.claims[`${browser}:${key}`] ?? token);
|
|
21
|
+
}
|
|
22
|
+
/** True when a string still carries an unresolved token. Used by the tests. */
|
|
23
|
+
export function hasUnresolvedClaim(text) {
|
|
24
|
+
for (const [, browser, key] of text.matchAll(CLAIM_TOKEN)) {
|
|
25
|
+
if (supportClaims.claims[`${browser}:${key}`] === undefined)
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
export { supportClaims };
|
|
31
|
+
//# sourceMappingURL=support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support.js","sourceRoot":"","sources":["../src/support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D;;;;;;;;;GASG;AAEH,uEAAuE;AACvE,MAAM,WAAW,GAAG,sCAAsC,CAAC;AAE3D;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,OAAO,CACjB,WAAW,EACX,CAAC,KAAK,EAAE,OAAe,EAAE,GAAW,EAAE,EAAE,CACtC,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC,IAAI,KAAK,CACrD,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,KAAK,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1D,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jomae/catalog",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "The rule catalog behind youmightnotneed. Maps npm packages to the
|
|
5
|
+
"description": "The rule catalog behind youmightnotneed. Maps npm packages to the CSS, HTML, or Web API that replaces them.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Johannes Maendle",
|
|
8
8
|
"homepage": "https://youmightnotneed-web.vercel.app",
|