@jomae/catalog 0.6.0 → 0.7.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 +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/markdown.d.ts +24 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +194 -0
- package/dist/markdown.js.map +1 -0
- package/dist/rules/height-animation.js +1 -1
- package/dist/rules/height-animation.js.map +1 -1
- package/dist/search.d.ts +29 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +84 -0
- package/dist/search.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export { type BaselineHistory, type BaselineHistoryEntry, baselineHistory, } fro
|
|
|
12
12
|
export { packageSizes, type SizeSnapshot } from "./generated/sizes.ts";
|
|
13
13
|
export { GUIDE_SOURCE, type GuideSnapshot, guideCommand, guideSnapshot, isKnownGuide, type ResolvedGuide, resolveGuide, resolveGuides, } from "./guides.ts";
|
|
14
14
|
export { type TierShare, tierShareOf } from "./history.ts";
|
|
15
|
+
export { renderRuleMarkdown, renderUseCaseTable, ruleMarkdownUrl, } from "./markdown.ts";
|
|
15
16
|
export { rules, rulesById, rulesByPackage } from "./rules/index.ts";
|
|
16
17
|
export { type BaselineStatus, baselineStatusSchema, type ManualBaseline, manualBaselineSchema, parseCatalog, type Rule, ruleSchema, SCHEMA_VERSION, } from "./schema.ts";
|
|
18
|
+
export { MIN_QUERY_LENGTH, type SearchOptions, type SearchResult, searchRules, } from "./search.ts";
|
|
17
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,aAAa,EACb,KAAK,eAAe,EACpB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,KAAK,cAAc,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,KAAK,UAAU,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,MAAM,EACN,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,OAAO,EACZ,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EACL,YAAY,EACZ,KAAK,aAAa,EAClB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,KAAK,aAAa,EAClB,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,KAAK,cAAc,EACnB,oBAAoB,EACpB,KAAK,cAAc,EACnB,oBAAoB,EACpB,YAAY,EACZ,KAAK,IAAI,EACT,UAAU,EACV,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,aAAa,EACb,KAAK,eAAe,EACpB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,KAAK,cAAc,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,KAAK,UAAU,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,MAAM,EACN,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,OAAO,EACZ,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EACL,YAAY,EACZ,KAAK,aAAa,EAClB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,KAAK,aAAa,EAClB,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,KAAK,cAAc,EACnB,oBAAoB,EACpB,KAAK,cAAc,EACnB,oBAAoB,EACpB,YAAY,EACZ,KAAK,IAAI,EACT,UAAU,EACV,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,WAAW,GACZ,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,8 @@ export { baselineHistory, } from "./generated/baseline-history.js";
|
|
|
12
12
|
export { packageSizes } from "./generated/sizes.js";
|
|
13
13
|
export { GUIDE_SOURCE, guideCommand, guideSnapshot, isKnownGuide, resolveGuide, resolveGuides, } from "./guides.js";
|
|
14
14
|
export { tierShareOf } from "./history.js";
|
|
15
|
+
export { renderRuleMarkdown, renderUseCaseTable, ruleMarkdownUrl, } from "./markdown.js";
|
|
15
16
|
export { rules, rulesById, rulesByPackage } from "./rules/index.js";
|
|
16
17
|
export { baselineStatusSchema, manualBaselineSchema, parseCatalog, ruleSchema, SCHEMA_VERSION, } from "./schema.js";
|
|
18
|
+
export { MIN_QUERY_LENGTH, searchRules, } from "./search.js";
|
|
17
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,aAAa,EAEb,eAAe,EACf,cAAc,EACd,gBAAgB,EAEhB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,gBAAgB,EAEhB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,iBAAiB,EAGjB,MAAM,EAMN,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAqB,MAAM,sBAAsB,CAAC;AACvE,OAAO,EACL,YAAY,EAEZ,YAAY,EACZ,aAAa,EACb,YAAY,EAEZ,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAkB,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAEL,oBAAoB,EAEpB,oBAAoB,EACpB,YAAY,EAEZ,UAAU,EACV,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,aAAa,EAEb,eAAe,EACf,cAAc,EACd,gBAAgB,EAEhB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,gBAAgB,EAEhB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,iBAAiB,EAGjB,MAAM,EAMN,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAqB,MAAM,sBAAsB,CAAC;AACvE,OAAO,EACL,YAAY,EAEZ,YAAY,EACZ,aAAa,EACb,YAAY,EAEZ,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAkB,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAEL,oBAAoB,EAEpB,oBAAoB,EACpB,YAAY,EAEZ,UAAU,EACV,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAGhB,WAAW,GACZ,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Rule } from "./schema.ts";
|
|
2
|
+
/** The markdown URL for one rule. */
|
|
3
|
+
export declare function ruleMarkdownUrl(id: string): string;
|
|
4
|
+
/**
|
|
5
|
+
* The index that makes the catalog useful before a dependency exists. Keyed by
|
|
6
|
+
* `agent.when`, which is the use case rather than the package name, so an
|
|
7
|
+
* agent about to build a carousel can find the rule without knowing that
|
|
8
|
+
* swiper is the package it was reaching for.
|
|
9
|
+
*/
|
|
10
|
+
export declare function renderUseCaseTable(): string;
|
|
11
|
+
/**
|
|
12
|
+
* One rule, in full. The `unless` conditions are the point of this: they are
|
|
13
|
+
* what stops a finding from overstating itself, and until this existed they
|
|
14
|
+
* were reachable only through the CLI's --verbose or the MCP server.
|
|
15
|
+
*/
|
|
16
|
+
export declare function renderRuleMarkdown(rule: Rule): string;
|
|
17
|
+
/**
|
|
18
|
+
* The reference the agent skill loads on demand. Hybrid by design: the table
|
|
19
|
+
* works offline and with no network, and the per-rule detail is fetched, so
|
|
20
|
+
* the skill stops shipping a snapshot of prose that goes stale between
|
|
21
|
+
* releases.
|
|
22
|
+
*/
|
|
23
|
+
export declare function renderCatalogReference(): string;
|
|
24
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAWxC,qCAAqC;AACrC,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAElD;AAcD;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAa3C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAmCrD;AAgDD;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAgD/C"}
|
package/dist/markdown.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The catalog rendered as markdown.
|
|
3
|
+
*
|
|
4
|
+
* Two consumers, one module. `scripts/build-skill.ts` writes the reference the
|
|
5
|
+
* agent skill ships, and `apps/web` serves a rule over HTTP so an agent that
|
|
6
|
+
* can only fetch a URL gets the same answer the CLI gives. Neither could
|
|
7
|
+
* import the other, and a second renderer would drift the first time a rule
|
|
8
|
+
* changed shape.
|
|
9
|
+
*
|
|
10
|
+
* Pure, and held to it: catalog.test.ts walks this module's imports the same
|
|
11
|
+
* way it walks detect()'s. No filesystem, no clock, so the file writing stays
|
|
12
|
+
* in the script.
|
|
13
|
+
*/
|
|
14
|
+
import { baselineShortLabel, resolveBaseline } from "./baseline.js";
|
|
15
|
+
import { GUIDE_SOURCE, guideCommand, resolveGuides } from "./guides.js";
|
|
16
|
+
import { rules } from "./rules/index.js";
|
|
17
|
+
/**
|
|
18
|
+
* Where a rule is served as markdown.
|
|
19
|
+
*
|
|
20
|
+
* The second place the domain is written down, after apps/web/lib/site.ts.
|
|
21
|
+
* The catalog ships to npm and cannot import the website, so the two are tied
|
|
22
|
+
* together by a test in apps/web instead of by a shared constant.
|
|
23
|
+
*/
|
|
24
|
+
const RULE_MARKDOWN_BASE = "https://youmightnotneed.dev/rules";
|
|
25
|
+
/** The markdown URL for one rule. */
|
|
26
|
+
export function ruleMarkdownUrl(id) {
|
|
27
|
+
return `${RULE_MARKDOWN_BASE}/${id}.md`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Codepoint order, not localeCompare: check-freshness byte-compares the
|
|
31
|
+
* generated reference, and collation differs by locale and by ICU build. A
|
|
32
|
+
* maintainer on lt_LT would otherwise regenerate a file that fails CI with no
|
|
33
|
+
* data change.
|
|
34
|
+
*/
|
|
35
|
+
function byText(a, b) {
|
|
36
|
+
if (a < b)
|
|
37
|
+
return -1;
|
|
38
|
+
if (a > b)
|
|
39
|
+
return 1;
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The index that makes the catalog useful before a dependency exists. Keyed by
|
|
44
|
+
* `agent.when`, which is the use case rather than the package name, so an
|
|
45
|
+
* agent about to build a carousel can find the rule without knowing that
|
|
46
|
+
* swiper is the package it was reaching for.
|
|
47
|
+
*/
|
|
48
|
+
export function renderUseCaseTable() {
|
|
49
|
+
const rows = [...rules]
|
|
50
|
+
.sort((a, b) => byText(a.agent.when, b.agent.when))
|
|
51
|
+
.map((rule) => {
|
|
52
|
+
const status = baselineShortLabel(resolveBaseline(rule).status);
|
|
53
|
+
return `| ${rule.agent.when} | ${rule.native} | ${status} | \`${rule.id}\` |`;
|
|
54
|
+
});
|
|
55
|
+
return [
|
|
56
|
+
"| Building | The platform does | Support | Rule |",
|
|
57
|
+
"| --- | --- | --- | --- |",
|
|
58
|
+
...rows,
|
|
59
|
+
].join("\n");
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* One rule, in full. The `unless` conditions are the point of this: they are
|
|
63
|
+
* what stops a finding from overstating itself, and until this existed they
|
|
64
|
+
* were reachable only through the CLI's --verbose or the MCP server.
|
|
65
|
+
*/
|
|
66
|
+
export function renderRuleMarkdown(rule) {
|
|
67
|
+
const baseline = resolveBaseline(rule);
|
|
68
|
+
const support = `${baselineShortLabel(baseline.status)}${baseline.limitedBy ? ` (capped by ${baseline.limitedBy.name})` : ""}`;
|
|
69
|
+
return `# ${rule.title}
|
|
70
|
+
|
|
71
|
+
- **id**: \`${rule.id}\`
|
|
72
|
+
- **native**: ${rule.native}
|
|
73
|
+
- **support**: Baseline ${support}
|
|
74
|
+
- **replaces**: ${rule.replaces.map((pkg) => `\`${pkg}\``).join(", ")}
|
|
75
|
+
|
|
76
|
+
## When this applies
|
|
77
|
+
|
|
78
|
+
${rule.agent.when}.
|
|
79
|
+
|
|
80
|
+
A match is a starting point, not a verdict. A package in package.json is not
|
|
81
|
+
evidence of what it is used for, so read the conditions below before changing
|
|
82
|
+
anything.
|
|
83
|
+
|
|
84
|
+
## Keep the dependency if any of these apply
|
|
85
|
+
|
|
86
|
+
${rule.agent.unless.map((condition) => `- ${condition}`).join("\n")}
|
|
87
|
+
|
|
88
|
+
## The swap
|
|
89
|
+
|
|
90
|
+
\`\`\`
|
|
91
|
+
${rule.agent.snippet}
|
|
92
|
+
\`\`\`
|
|
93
|
+
|
|
94
|
+
## How to implement it
|
|
95
|
+
|
|
96
|
+
${renderGuides(rule)}
|
|
97
|
+
`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The hand-off from "which dependency can go" to "how to build the thing
|
|
101
|
+
* properly". IDs and links only: the catalog is a lookup table, so nothing
|
|
102
|
+
* here copies upstream prose. The attribution is what the licence asks for.
|
|
103
|
+
*/
|
|
104
|
+
function renderGuides(rule) {
|
|
105
|
+
const linkable = resolveGuides(rule).filter((guide) => guide.url !== null);
|
|
106
|
+
const source = `Guides come from ${GUIDE_SOURCE.owner}'s ${GUIDE_SOURCE.name} (${GUIDE_SOURCE.licence}), ${GUIDE_SOURCE.repo}.`;
|
|
107
|
+
if (linkable.length === 0) {
|
|
108
|
+
return `No guide covers this rule yet. ${source}`;
|
|
109
|
+
}
|
|
110
|
+
const links = linkable
|
|
111
|
+
.map((guide) => `- [${guide.id}](${guide.url}) (${guide.category})`)
|
|
112
|
+
.join("\n");
|
|
113
|
+
return `This catalog stops at the swap. These go through the implementation,
|
|
114
|
+
the fallbacks and the platform quirks.
|
|
115
|
+
|
|
116
|
+
${links}
|
|
117
|
+
|
|
118
|
+
Pull them into context with:
|
|
119
|
+
|
|
120
|
+
\`\`\`sh
|
|
121
|
+
${guideCommand(linkable.map((guide) => guide.id))}
|
|
122
|
+
\`\`\`
|
|
123
|
+
|
|
124
|
+
${source}`;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Every rule with the packages it claims, one line each.
|
|
128
|
+
*
|
|
129
|
+
* The reference used to carry this inside a much longer per-rule listing.
|
|
130
|
+
* Dropping that listing took the package names with it, which left an agent
|
|
131
|
+
* holding a package.json and no network unable to answer the question the
|
|
132
|
+
* skill exists for. This is the same lookup in 1/8th of the lines.
|
|
133
|
+
*/
|
|
134
|
+
function renderPackageIndex() {
|
|
135
|
+
return [...rules]
|
|
136
|
+
.sort((a, b) => byText(a.id, b.id))
|
|
137
|
+
.map((rule) => `- \`${rule.id}\`: ${rule.replaces.join(", ")}`)
|
|
138
|
+
.join("\n");
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The reference the agent skill loads on demand. Hybrid by design: the table
|
|
142
|
+
* works offline and with no network, and the per-rule detail is fetched, so
|
|
143
|
+
* the skill stops shipping a snapshot of prose that goes stale between
|
|
144
|
+
* releases.
|
|
145
|
+
*/
|
|
146
|
+
export function renderCatalogReference() {
|
|
147
|
+
const packageCount = new Set(rules.flatMap((rule) => rule.replaces)).size;
|
|
148
|
+
return `<!-- Generated by scripts/build-skill.ts. Do not edit by hand. -->
|
|
149
|
+
<!-- Run \`pnpm refresh:skill\` to update. -->
|
|
150
|
+
|
|
151
|
+
# The catalog
|
|
152
|
+
|
|
153
|
+
Every rule, ${rules.length} of them, covering ${packageCount} npm packages.
|
|
154
|
+
Support is the Baseline tier of the least-supported feature the replacement
|
|
155
|
+
needs, so a rule reads as limited if any one part of it is.
|
|
156
|
+
|
|
157
|
+
## By use case
|
|
158
|
+
|
|
159
|
+
Read this before reaching for a package. The left column is the case the
|
|
160
|
+
native approach covers, so it is searchable without knowing which library you
|
|
161
|
+
were about to install.
|
|
162
|
+
|
|
163
|
+
${renderUseCaseTable()}
|
|
164
|
+
|
|
165
|
+
## Reading one rule
|
|
166
|
+
|
|
167
|
+
A row is a starting point, not a verdict. Every rule also carries the
|
|
168
|
+
conditions where the dependency is still right, the swap, and the guides that
|
|
169
|
+
cover the implementation. Those are not in this file. Take the rule id from
|
|
170
|
+
the table and fetch it:
|
|
171
|
+
|
|
172
|
+
\`\`\`sh
|
|
173
|
+
curl --fail-with-body -sS ${ruleMarkdownUrl("<id>")}
|
|
174
|
+
\`\`\`
|
|
175
|
+
|
|
176
|
+
That is always the live catalog, where this table is only as fresh as the
|
|
177
|
+
version of the skill you have. The CLI answers the same question from a
|
|
178
|
+
package name, sends nothing anywhere, and works offline once npx has fetched
|
|
179
|
+
it:
|
|
180
|
+
|
|
181
|
+
\`\`\`sh
|
|
182
|
+
npx -y youmightnotneed@latest --package <name> --verbose
|
|
183
|
+
\`\`\`
|
|
184
|
+
|
|
185
|
+
## By package
|
|
186
|
+
|
|
187
|
+
Which rule covers a package you already have. This is the only lookup here
|
|
188
|
+
that needs no network. It gives the rule id and stops there: the conditions
|
|
189
|
+
for keeping the dependency come from the URL or the CLI above.
|
|
190
|
+
|
|
191
|
+
${renderPackageIndex()}
|
|
192
|
+
`;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,6 @@ export const heightAnimation = {
|
|
|
44
44
|
.panel { height: 0; overflow: hidden; transition: height 0.3s; }
|
|
45
45
|
.panel[data-open] { height: auto; }`,
|
|
46
46
|
},
|
|
47
|
-
guides: ["animate-to-intrinsic-sizes"],
|
|
47
|
+
guides: ["animate-to-intrinsic-sizes", "calculate-with-intrinsic-sizes"],
|
|
48
48
|
};
|
|
49
49
|
//# sourceMappingURL=height-animation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"height-animation.js","sourceRoot":"","sources":["../../src/rules/height-animation.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,EAAE,EAAE,uBAAuB;IAC3B,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB,CAAC;IAC7E,UAAU,EAAE,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAC7C,MAAM,EAAE,kDAAkD;IAC1D,KAAK,EAAE;QACL,SAAS,EACP,ybAAyb;QAC3b,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;EAsBX;QACE,MAAM,EAAE,4DAA4D;KACrE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,qEAAqE;QAC3E,MAAM,EAAE;YACN,4NAA4N;YAC5N,6IAA6I;YAC7I,gGAAgG;YAChG,8GAA8G;SAC/G;QACD,OAAO,EAAE;;oCAEuB;KACjC;IACD,MAAM,EAAE,CAAC,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"height-animation.js","sourceRoot":"","sources":["../../src/rules/height-animation.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,EAAE,EAAE,uBAAuB;IAC3B,KAAK,EAAE,0BAA0B;IACjC,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB,CAAC;IAC7E,UAAU,EAAE,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAC7C,MAAM,EAAE,kDAAkD;IAC1D,KAAK,EAAE;QACL,SAAS,EACP,ybAAyb;QAC3b,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;EAsBX;QACE,MAAM,EAAE,4DAA4D;KACrE;IACD,KAAK,EAAE;QACL,IAAI,EAAE,qEAAqE;QAC3E,MAAM,EAAE;YACN,4NAA4N;YAC5N,6IAA6I;YAC7I,gGAAgG;YAChG,8GAA8G;SAC/G;QACD,OAAO,EAAE;;oCAEuB;KACjC;IACD,MAAM,EAAE,CAAC,4BAA4B,EAAE,gCAAgC,CAAC;CACzE,CAAC"}
|
package/dist/search.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Rule } from "./schema.ts";
|
|
2
|
+
export interface SearchResult {
|
|
3
|
+
rule: Rule;
|
|
4
|
+
/**
|
|
5
|
+
* The packages from `rule.replaces` the query matched, in the order the rule
|
|
6
|
+
* lists them. Empty when the rule matched by title or native feature alone,
|
|
7
|
+
* which is what tells a surface whether it has anything to show underneath.
|
|
8
|
+
*/
|
|
9
|
+
packages: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
export interface SearchOptions {
|
|
12
|
+
/** Defaults to the whole catalog. Present so tests can pass their own. */
|
|
13
|
+
rules?: readonly Rule[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Two characters. One is a substring of most of the catalog, and a list of
|
|
17
|
+
* everything is what `/rules` is for.
|
|
18
|
+
*
|
|
19
|
+
* Exported because an empty result means two different things. A surface that
|
|
20
|
+
* cannot tell "no rule covers this" from "the search declined to run" tells
|
|
21
|
+
* the reader the catalog has nothing for a query it never ran.
|
|
22
|
+
*/
|
|
23
|
+
export declare const MIN_QUERY_LENGTH = 2;
|
|
24
|
+
/**
|
|
25
|
+
* Ranks rules against a query. Returns an empty array for a query too short to
|
|
26
|
+
* narrow anything down.
|
|
27
|
+
*/
|
|
28
|
+
export declare function searchRules(query: string, options?: SearchOptions): SearchResult[];
|
|
29
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAqBxC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX;;;;OAIG;IACH,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAsClC;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,YAAY,EAAE,CAyBhB"}
|
package/dist/search.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { rules as defaultRules } from "./rules/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Free-text lookup over the catalog.
|
|
4
|
+
*
|
|
5
|
+
* `detect()` answers "here is my package.json, what applies", which needs the
|
|
6
|
+
* whole file. This answers the question someone arrives with instead: one name
|
|
7
|
+
* they already have in their head. The catalog covers far more package names
|
|
8
|
+
* than it has rules, and a rule is titled after the native feature rather than
|
|
9
|
+
* after any package it replaces, so most of those names appear nowhere a
|
|
10
|
+
* reader can find them.
|
|
11
|
+
*
|
|
12
|
+
* Pure, like `detect()`. It reads nothing but the rules handed to it.
|
|
13
|
+
*/
|
|
14
|
+
/** Why a rule came back, strongest first. Also its sort key. */
|
|
15
|
+
const EXACT_PACKAGE = 4;
|
|
16
|
+
const PACKAGE_PREFIX = 3;
|
|
17
|
+
const PACKAGE_SUBSTRING = 2;
|
|
18
|
+
const RULE_TEXT = 1;
|
|
19
|
+
/**
|
|
20
|
+
* Two characters. One is a substring of most of the catalog, and a list of
|
|
21
|
+
* everything is what `/rules` is for.
|
|
22
|
+
*
|
|
23
|
+
* Exported because an empty result means two different things. A surface that
|
|
24
|
+
* cannot tell "no rule covers this" from "the search declined to run" tells
|
|
25
|
+
* the reader the catalog has nothing for a query it never ran.
|
|
26
|
+
*/
|
|
27
|
+
export const MIN_QUERY_LENGTH = 2;
|
|
28
|
+
function scorePackage(name, query) {
|
|
29
|
+
const lower = name.toLowerCase();
|
|
30
|
+
if (lower === query)
|
|
31
|
+
return EXACT_PACKAGE;
|
|
32
|
+
if (lower.startsWith(query))
|
|
33
|
+
return PACKAGE_PREFIX;
|
|
34
|
+
if (lower.includes(query))
|
|
35
|
+
return PACKAGE_SUBSTRING;
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Scores one rule. A rule that matches by package never falls back to its
|
|
40
|
+
* title, so the packages array stays a list of what the reader actually
|
|
41
|
+
* typed rather than everything the rule happens to replace.
|
|
42
|
+
*/
|
|
43
|
+
function scoreRule(rule, needle) {
|
|
44
|
+
const packages = [];
|
|
45
|
+
let score = 0;
|
|
46
|
+
for (const name of rule.replaces) {
|
|
47
|
+
const packageScore = scorePackage(name, needle);
|
|
48
|
+
if (packageScore === 0)
|
|
49
|
+
continue;
|
|
50
|
+
packages.push(name);
|
|
51
|
+
score = Math.max(score, packageScore);
|
|
52
|
+
}
|
|
53
|
+
if (score > 0)
|
|
54
|
+
return { packages, score };
|
|
55
|
+
const matchesText = rule.title.toLowerCase().includes(needle) ||
|
|
56
|
+
rule.native.toLowerCase().includes(needle);
|
|
57
|
+
return { packages, score: matchesText ? RULE_TEXT : 0 };
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Ranks rules against a query. Returns an empty array for a query too short to
|
|
61
|
+
* narrow anything down.
|
|
62
|
+
*/
|
|
63
|
+
export function searchRules(query, options = {}) {
|
|
64
|
+
const needle = query.trim().toLowerCase();
|
|
65
|
+
if (needle.length < MIN_QUERY_LENGTH)
|
|
66
|
+
return [];
|
|
67
|
+
const scored = [];
|
|
68
|
+
for (const rule of options.rules ?? defaultRules) {
|
|
69
|
+
const { packages, score } = scoreRule(rule, needle);
|
|
70
|
+
if (score === 0)
|
|
71
|
+
continue;
|
|
72
|
+
scored.push({ result: { rule, packages }, score });
|
|
73
|
+
}
|
|
74
|
+
/*
|
|
75
|
+
* Ties break on how much of the rule the query hit, then on title, so the
|
|
76
|
+
* order is stable rather than dependent on the order rules/index.ts happens
|
|
77
|
+
* to list them in.
|
|
78
|
+
*/
|
|
79
|
+
scored.sort((a, b) => b.score - a.score ||
|
|
80
|
+
b.result.packages.length - a.result.packages.length ||
|
|
81
|
+
a.result.rule.title.localeCompare(b.result.rule.title));
|
|
82
|
+
return scored.map((entry) => entry.result);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jomae/catalog",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"type": "module",
|
|
5
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
|
-
"homepage": "https://youmightnotneed
|
|
8
|
+
"homepage": "https://youmightnotneed.dev",
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
11
|
"url": "git+https://github.com/jomaendle/youmightnotneed.git",
|