@grove-dev/core 0.6.1 → 0.8.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 +100 -23
- package/dist/audit.d.ts +8 -3
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +29 -8
- package/dist/audit.js.map +1 -1
- package/dist/awesome-readme.d.ts.map +1 -1
- package/dist/awesome-readme.js +31 -31
- package/dist/awesome-readme.js.map +1 -1
- package/dist/build-data.d.ts +1 -1
- package/dist/build-data.d.ts.map +1 -1
- package/dist/build-data.js +132 -74
- package/dist/build-data.js.map +1 -1
- package/dist/collections-io.d.ts +1 -1
- package/dist/collections-io.js +8 -8
- package/dist/collections-io.js.map +1 -1
- package/dist/collections.d.ts +2 -2
- package/dist/collections.d.ts.map +1 -1
- package/dist/collections.js +8 -9
- package/dist/collections.js.map +1 -1
- package/dist/collector.d.ts +1 -1
- package/dist/collector.d.ts.map +1 -1
- package/dist/collector.js +2 -2
- package/dist/collector.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -4
- package/dist/config.js.map +1 -1
- package/dist/content-body.d.ts.map +1 -1
- package/dist/content-body.js +22 -22
- package/dist/content-body.js.map +1 -1
- package/dist/contributors.d.ts.map +1 -1
- package/dist/contributors.js +22 -23
- package/dist/contributors.js.map +1 -1
- package/dist/decisions.d.ts +1 -1
- package/dist/decisions.d.ts.map +1 -1
- package/dist/decisions.js +18 -20
- package/dist/decisions.js.map +1 -1
- package/dist/directory-client.d.ts +6 -4
- package/dist/directory-client.d.ts.map +1 -1
- package/dist/directory-client.js +9 -4
- package/dist/directory-client.js.map +1 -1
- package/dist/directory-facets.d.ts +1 -1
- package/dist/directory-facets.d.ts.map +1 -1
- package/dist/directory-facets.js +35 -17
- package/dist/directory-facets.js.map +1 -1
- package/dist/directory-filter-keys.d.ts +53 -0
- package/dist/directory-filter-keys.d.ts.map +1 -0
- package/dist/directory-filter-keys.js +66 -0
- package/dist/directory-filter-keys.js.map +1 -0
- package/dist/directory-format.d.ts.map +1 -1
- package/dist/directory-format.js +15 -15
- package/dist/directory-format.js.map +1 -1
- package/dist/directory-lenses.d.ts +1 -1
- package/dist/directory-lenses.d.ts.map +1 -1
- package/dist/directory-lenses.js +66 -61
- package/dist/directory-lenses.js.map +1 -1
- package/dist/directory-repo.js +2 -2
- package/dist/directory-scores.d.ts.map +1 -1
- package/dist/directory-scores.js +25 -25
- package/dist/directory-scores.js.map +1 -1
- package/dist/directory-search.d.ts +4 -4
- package/dist/directory-search.d.ts.map +1 -1
- package/dist/directory-search.js +99 -107
- package/dist/directory-search.js.map +1 -1
- package/dist/directory-taxonomy.d.ts +1 -1
- package/dist/directory-taxonomy.d.ts.map +1 -1
- package/dist/directory-taxonomy.js +2 -2
- package/dist/directory-taxonomy.js.map +1 -1
- package/dist/enrich.d.ts.map +1 -1
- package/dist/enrich.js +15 -12
- package/dist/enrich.js.map +1 -1
- package/dist/github-client.js +6 -6
- package/dist/github.d.ts +9 -1
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +26 -14
- package/dist/github.js.map +1 -1
- package/dist/health.d.ts +1 -1
- package/dist/health.js +44 -44
- package/dist/host.js +2 -2
- package/dist/importer.d.ts +2 -2
- package/dist/importer.d.ts.map +1 -1
- package/dist/importer.js +1 -1
- package/dist/importer.js.map +1 -1
- package/dist/index.d.ts +66 -63
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +86 -75
- package/dist/index.js.map +1 -1
- package/dist/io.js +8 -8
- package/dist/llms.d.ts +1 -1
- package/dist/llms.d.ts.map +1 -1
- package/dist/llms.js +69 -65
- package/dist/llms.js.map +1 -1
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js.map +1 -1
- package/dist/og-image.d.ts +8 -8
- package/dist/og-image.d.ts.map +1 -1
- package/dist/og-image.js +91 -84
- package/dist/og-image.js.map +1 -1
- package/dist/page-document.d.ts +8 -8
- package/dist/page-document.d.ts.map +1 -1
- package/dist/page-document.js +48 -54
- package/dist/page-document.js.map +1 -1
- package/dist/parseReadme.d.ts.map +1 -1
- package/dist/parseReadme.js +9 -11
- package/dist/parseReadme.js.map +1 -1
- package/dist/prepare.d.ts +5 -5
- package/dist/prepare.d.ts.map +1 -1
- package/dist/prepare.js +46 -35
- package/dist/prepare.js.map +1 -1
- package/dist/related.d.ts +1 -1
- package/dist/schema.d.ts +21 -21
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +134 -141
- package/dist/schema.js.map +1 -1
- package/dist/site-artifacts.js +1 -1
- package/dist/sitemap.d.ts +2 -2
- package/dist/sitemap.d.ts.map +1 -1
- package/dist/sitemap.js +39 -39
- package/dist/sitemap.js.map +1 -1
- package/dist/slug.js +4 -4
- package/dist/sync-icons.js +15 -15
- package/dist/taxonomy-inference.d.ts +27 -0
- package/dist/taxonomy-inference.d.ts.map +1 -0
- package/dist/taxonomy-inference.js +38 -0
- package/dist/taxonomy-inference.js.map +1 -0
- package/dist/validate.d.ts +3 -3
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +56 -58
- package/dist/validate.js.map +1 -1
- package/dist/yaml.d.ts +47 -0
- package/dist/yaml.d.ts.map +1 -0
- package/dist/yaml.js +56 -0
- package/dist/yaml.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
/**
|
|
3
|
+
* Single source of truth for the directory filter-key mapping.
|
|
4
|
+
*
|
|
5
|
+
* The browse-page controller (`DirectoryIndexClient.astro`), the
|
|
6
|
+
* refine panel (`RefinePanel.astro`), and the view-model builder
|
|
7
|
+
* (`server/directory.ts`) all need to know that the facet group
|
|
8
|
+
* with `data-filter-group-key="stacks"` writes its selections to
|
|
9
|
+
* the `stack` URL param, belongs to the `stacks` taxonomy kind,
|
|
10
|
+
* and displays with the "Stack" label. Pre-v1 these were three
|
|
11
|
+
* inline copies; this module is the one the v1 registry migration
|
|
12
|
+
* relies on so consumer-installed UI never drifts out of sync
|
|
13
|
+
* with the server's URL and taxonomy understanding.
|
|
14
|
+
*
|
|
15
|
+
* Per §22 of `apps/docs/v1-architecture.md`, this is pure-domain
|
|
16
|
+
* data. It can be imported by both server view-models and the
|
|
17
|
+
* client-side controller without creating a forbidden dependency
|
|
18
|
+
* from UI to engine internals.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Group key → URL param key. Single definition; consumed by every
|
|
22
|
+
* filter-aware surface.
|
|
23
|
+
*/
|
|
24
|
+
export const DIRECTORY_FILTER_KEYS = Object.freeze({
|
|
25
|
+
stacks: 'stack',
|
|
26
|
+
platforms: 'platform',
|
|
27
|
+
categories: 'category',
|
|
28
|
+
tags: 'tag',
|
|
29
|
+
licenses: 'license',
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* Group key → taxonomy kind the group's options are sourced from.
|
|
33
|
+
*/
|
|
34
|
+
export const DIRECTORY_TAXONOMY_KINDS = Object.freeze({
|
|
35
|
+
stacks: 'stacks',
|
|
36
|
+
platforms: 'platforms',
|
|
37
|
+
categories: 'categories',
|
|
38
|
+
tags: 'topics',
|
|
39
|
+
licenses: 'licenses',
|
|
40
|
+
});
|
|
41
|
+
/** Group key → display label for chips, trigger buttons, headings. */
|
|
42
|
+
export const DIRECTORY_FILTER_LABELS = Object.freeze({
|
|
43
|
+
stacks: 'Stack',
|
|
44
|
+
platforms: 'Platform',
|
|
45
|
+
categories: 'Category',
|
|
46
|
+
tags: 'Tag',
|
|
47
|
+
licenses: 'License',
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Reverse map. Given a URL param key, returns the set of group
|
|
51
|
+
* keys that map to it. Most params are 1:1; this is exposed so
|
|
52
|
+
* server helpers can answer "which group does this param belong
|
|
53
|
+
* to?" without re-implementing the table.
|
|
54
|
+
*/
|
|
55
|
+
export const FACET_DIMENSION_FOR_KEY = Object.freeze({
|
|
56
|
+
stack: 'stacks',
|
|
57
|
+
platform: 'platforms',
|
|
58
|
+
category: 'categories',
|
|
59
|
+
tag: 'tags',
|
|
60
|
+
license: 'licenses',
|
|
61
|
+
});
|
|
62
|
+
/** Type guard. */
|
|
63
|
+
export function isDirectoryFilterGroupKey(value) {
|
|
64
|
+
return value in DIRECTORY_FILTER_KEYS;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=directory-filter-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-filter-keys.js","sourceRoot":"","sources":["../src/directory-filter-keys.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B;;;;;;;;;;;;;;;;;GAiBG;AAoBH;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAE9B,MAAM,CAAC,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO;IACf,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,UAAU;IACtB,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,SAAS;CACpB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAEjC,MAAM,CAAC,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,UAAU;CACrB,CAAC,CAAC;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAEhC,MAAM,CAAC,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO;IACf,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,UAAU;IACtB,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,SAAS;CACpB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAEhC,MAAM,CAAC,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,YAAY;IACtB,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,UAAU;CACpB,CAAC,CAAC;AAEH,kBAAkB;AAClB,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,OAAO,KAAK,IAAI,qBAAqB,CAAC;AACxC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-format.d.ts","sourceRoot":"","sources":["../src/directory-format.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMzC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGvE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAcrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAS7D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,
|
|
1
|
+
{"version":3,"file":"directory-format.d.ts","sourceRoot":"","sources":["../src/directory-format.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMzC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGvE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAcrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAS7D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE7F;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CASjE"}
|
package/dist/directory-format.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
export function compact(n) {
|
|
12
12
|
if (n >= 1000) {
|
|
13
13
|
const k = n / 1000;
|
|
14
|
-
return (k >= 10 ? Math.round(k).toString() : k.toFixed(1)) +
|
|
14
|
+
return (k >= 10 ? Math.round(k).toString() : k.toFixed(1)) + 'k';
|
|
15
15
|
}
|
|
16
16
|
return n.toString();
|
|
17
17
|
}
|
|
@@ -20,7 +20,7 @@ export function compact(n) {
|
|
|
20
20
|
* finite number, so callers can render "—" without an extra guard.
|
|
21
21
|
*/
|
|
22
22
|
export function formatStars(n) {
|
|
23
|
-
if (typeof n !==
|
|
23
|
+
if (typeof n !== 'number' || !Number.isFinite(n))
|
|
24
24
|
return null;
|
|
25
25
|
return compact(n);
|
|
26
26
|
}
|
|
@@ -31,25 +31,25 @@ export function formatStars(n) {
|
|
|
31
31
|
*/
|
|
32
32
|
export function formatRelative(iso) {
|
|
33
33
|
if (!iso)
|
|
34
|
-
return
|
|
34
|
+
return '—';
|
|
35
35
|
const d = new Date(iso);
|
|
36
36
|
if (Number.isNaN(d.valueOf()))
|
|
37
|
-
return
|
|
37
|
+
return '—';
|
|
38
38
|
const days = Math.floor((Date.now() - d.valueOf()) / (1000 * 60 * 60 * 24));
|
|
39
39
|
if (days <= 0)
|
|
40
|
-
return
|
|
40
|
+
return 'today';
|
|
41
41
|
if (days === 1)
|
|
42
|
-
return
|
|
42
|
+
return '1d ago';
|
|
43
43
|
if (days < 30)
|
|
44
44
|
return `${days}d ago`;
|
|
45
45
|
const months = Math.floor(days / 30);
|
|
46
46
|
if (months === 1)
|
|
47
|
-
return
|
|
47
|
+
return '1mo ago';
|
|
48
48
|
if (months < 12)
|
|
49
49
|
return `${months}mo ago`;
|
|
50
50
|
const years = Math.floor(months / 12);
|
|
51
51
|
if (years === 1)
|
|
52
|
-
return
|
|
52
|
+
return '1y ago';
|
|
53
53
|
return `${years}y ago`;
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
@@ -66,11 +66,11 @@ export function truncateWords(text, max = 140) {
|
|
|
66
66
|
if (value.length <= max)
|
|
67
67
|
return value;
|
|
68
68
|
const window = value.slice(0, max);
|
|
69
|
-
const lastSpace = window.lastIndexOf(
|
|
69
|
+
const lastSpace = window.lastIndexOf(' ');
|
|
70
70
|
// A single word longer than the budget has no boundary to cut on;
|
|
71
71
|
// the hard slice is the honest fallback.
|
|
72
72
|
const head = lastSpace > max * 0.5 ? window.slice(0, lastSpace) : window;
|
|
73
|
-
return `${head.replace(/[\s.,;:!?—-]+$/,
|
|
73
|
+
return `${head.replace(/[\s.,;:!?—-]+$/, '')}…`;
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
76
|
* Pick the singular or plural noun for a count. The plural form is
|
|
@@ -96,14 +96,14 @@ export function formatCount(count, noun) {
|
|
|
96
96
|
*/
|
|
97
97
|
export function formatDate(iso) {
|
|
98
98
|
if (!iso)
|
|
99
|
-
return
|
|
99
|
+
return '—';
|
|
100
100
|
const d = new Date(iso);
|
|
101
101
|
if (Number.isNaN(d.valueOf()))
|
|
102
102
|
return iso;
|
|
103
|
-
return d.toLocaleDateString(
|
|
104
|
-
year:
|
|
105
|
-
month:
|
|
106
|
-
day:
|
|
103
|
+
return d.toLocaleDateString('en-US', {
|
|
104
|
+
year: 'numeric',
|
|
105
|
+
month: 'short',
|
|
106
|
+
day: 'numeric',
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
//# sourceMappingURL=directory-format.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-format.js","sourceRoot":"","sources":["../src/directory-format.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"directory-format.js","sourceRoot":"","sources":["../src/directory-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* remain in the union type for URL deep-linking and future use, but are
|
|
15
15
|
* not shown in the UI by default.
|
|
16
16
|
*/
|
|
17
|
-
export type LensId =
|
|
17
|
+
export type LensId = 'all' | 'recently-updated' | 'new' | 'hot' | 'mature' | 'good-to-learn' | 'production-like' | 'beginner-friendly' | 'contribution-ready' | 'launches' | 'actively-developed' | 'needs-maintainer';
|
|
18
18
|
export interface LensDef {
|
|
19
19
|
id: LensId;
|
|
20
20
|
label: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-lenses.d.ts","sourceRoot":"","sources":["../src/directory-lenses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,MAAM,GAEd,KAAK,GACL,kBAAkB,GAClB,KAAK,GAEL,KAAK,GACL,QAAQ,GAER,eAAe,GACf,iBAAiB,GAEjB,mBAAmB,GACnB,oBAAoB,GACpB,UAAU,GAEV,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"directory-lenses.d.ts","sourceRoot":"","sources":["../src/directory-lenses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,MAAM,GAEd,KAAK,GACL,kBAAkB,GAClB,KAAK,GAEL,KAAK,GACL,QAAQ,GAER,eAAe,GACf,iBAAiB,GAEjB,mBAAmB,GACnB,oBAAoB,GACpB,UAAU,GAEV,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,MAAM,EAAE,OAAO,EA0E3B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,EAAuC,CAAC;AAE3E,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAG3E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAazE;AAeD,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAGpE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAc3F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAKvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,OAAO,EAAE,eAAe,EACxB,UAAU,SAAW,GACpB,MAAM,CAuBR"}
|
package/dist/directory-lenses.js
CHANGED
|
@@ -15,73 +15,78 @@
|
|
|
15
15
|
* not shown in the UI by default.
|
|
16
16
|
*/
|
|
17
17
|
export const LENSES = [
|
|
18
|
-
{ id: "all", label: "All items", description: "Every item in the directory", toParams: () => ({}) },
|
|
19
18
|
{
|
|
20
|
-
id:
|
|
21
|
-
label:
|
|
22
|
-
description:
|
|
23
|
-
toParams: () => ({
|
|
19
|
+
id: 'all',
|
|
20
|
+
label: 'All items',
|
|
21
|
+
description: 'Every item in the directory',
|
|
22
|
+
toParams: () => ({}),
|
|
24
23
|
},
|
|
25
24
|
{
|
|
26
|
-
id:
|
|
27
|
-
label:
|
|
28
|
-
description:
|
|
29
|
-
toParams: () => ({ sort:
|
|
25
|
+
id: 'recently-updated',
|
|
26
|
+
label: 'Actively developed',
|
|
27
|
+
description: 'Every item ordered by its most recent commit',
|
|
28
|
+
toParams: () => ({ sort: 'recently-updated' }),
|
|
30
29
|
},
|
|
31
30
|
{
|
|
32
|
-
id:
|
|
33
|
-
label:
|
|
34
|
-
description:
|
|
35
|
-
toParams: () => ({
|
|
31
|
+
id: 'new',
|
|
32
|
+
label: 'Recently added',
|
|
33
|
+
description: 'Every item ordered by when it joined the directory',
|
|
34
|
+
toParams: () => ({ sort: 'recently-added' }),
|
|
36
35
|
},
|
|
37
36
|
{
|
|
38
|
-
id:
|
|
39
|
-
label:
|
|
40
|
-
description:
|
|
41
|
-
toParams: () => ({ label:
|
|
37
|
+
id: 'hot',
|
|
38
|
+
label: 'Trending',
|
|
39
|
+
description: 'Apps with recent activity and attention',
|
|
40
|
+
toParams: () => ({ label: 'hot' }),
|
|
42
41
|
},
|
|
43
42
|
{
|
|
44
|
-
id:
|
|
45
|
-
label:
|
|
46
|
-
description:
|
|
47
|
-
toParams: () => ({
|
|
43
|
+
id: 'mature',
|
|
44
|
+
label: 'Established',
|
|
45
|
+
description: 'Long-running projects with stable history',
|
|
46
|
+
toParams: () => ({ label: 'mature' }),
|
|
48
47
|
},
|
|
49
48
|
{
|
|
50
|
-
id:
|
|
51
|
-
label:
|
|
52
|
-
description:
|
|
53
|
-
toParams: () => ({ lens:
|
|
49
|
+
id: 'production-like',
|
|
50
|
+
label: 'Production-like',
|
|
51
|
+
description: 'Real items, not toy projects',
|
|
52
|
+
toParams: () => ({ lens: 'production-like' }),
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: 'good-to-learn',
|
|
56
|
+
label: 'Good to learn',
|
|
57
|
+
description: 'Readable codebases with useful patterns',
|
|
58
|
+
toParams: () => ({ lens: 'good-to-learn' }),
|
|
54
59
|
},
|
|
55
60
|
// Secondary (URL-only, not rendered as tabs)
|
|
56
61
|
{
|
|
57
|
-
id:
|
|
58
|
-
label:
|
|
59
|
-
description:
|
|
60
|
-
toParams: () => ({ lens:
|
|
62
|
+
id: 'beginner-friendly',
|
|
63
|
+
label: 'Beginner friendly',
|
|
64
|
+
description: 'Smaller, readable, easier to understand',
|
|
65
|
+
toParams: () => ({ lens: 'beginner-friendly' }),
|
|
61
66
|
},
|
|
62
67
|
{
|
|
63
|
-
id:
|
|
64
|
-
label:
|
|
65
|
-
description:
|
|
66
|
-
toParams: () => ({ lens:
|
|
68
|
+
id: 'contribution-ready',
|
|
69
|
+
label: 'Contribution ready',
|
|
70
|
+
description: 'Clear issues, active maintainers, license, contribution docs',
|
|
71
|
+
toParams: () => ({ lens: 'contribution-ready' }),
|
|
67
72
|
},
|
|
68
73
|
{
|
|
69
|
-
id:
|
|
70
|
-
label:
|
|
71
|
-
description:
|
|
72
|
-
toParams: () => ({ lens:
|
|
74
|
+
id: 'launches',
|
|
75
|
+
label: 'Launches',
|
|
76
|
+
description: 'Recently launched OSS items seeking feedback',
|
|
77
|
+
toParams: () => ({ lens: 'launches' }),
|
|
73
78
|
},
|
|
74
79
|
{
|
|
75
|
-
id:
|
|
76
|
-
label:
|
|
77
|
-
description:
|
|
78
|
-
toParams: () => ({ status:
|
|
80
|
+
id: 'actively-developed',
|
|
81
|
+
label: 'Active',
|
|
82
|
+
description: 'Apps with recent commits, releases, and issue activity',
|
|
83
|
+
toParams: () => ({ status: 'active' }),
|
|
79
84
|
},
|
|
80
85
|
{
|
|
81
|
-
id:
|
|
82
|
-
label:
|
|
83
|
-
description:
|
|
84
|
-
toParams: () => ({ status:
|
|
86
|
+
id: 'needs-maintainer',
|
|
87
|
+
label: 'Needs maintainer',
|
|
88
|
+
description: 'Useful items that need help',
|
|
89
|
+
toParams: () => ({ status: 'stale,quiet' }),
|
|
85
90
|
},
|
|
86
91
|
];
|
|
87
92
|
/**
|
|
@@ -99,7 +104,7 @@ export const LENSES = [
|
|
|
99
104
|
* so they can and do render empty on directories that never populate
|
|
100
105
|
* `curation.labels` / `curation.lenses`.
|
|
101
106
|
*/
|
|
102
|
-
export const PRIMARY_LENSES = [
|
|
107
|
+
export const PRIMARY_LENSES = ['all', 'recently-updated', 'new'];
|
|
103
108
|
export function lensById(id) {
|
|
104
109
|
if (!id)
|
|
105
110
|
return undefined;
|
|
@@ -112,15 +117,15 @@ export function lensById(id) {
|
|
|
112
117
|
* than the abstract lens id (?lens=hot).
|
|
113
118
|
*/
|
|
114
119
|
export function isLensActive(lensId, sp) {
|
|
115
|
-
if (lensId ===
|
|
120
|
+
if (lensId === 'all') {
|
|
116
121
|
// "All" is the fallback view: active only when no lens-shaped filter
|
|
117
122
|
// is present AND no other lens claims the current params. Without the
|
|
118
123
|
// second check a sort-based lens (e.g. ?sort=recently-updated) would
|
|
119
124
|
// light up its own tab and "All" at the same time, since sorting
|
|
120
125
|
// touches none of the lens/label/status keys.
|
|
121
|
-
if (lensFromSearchParams(sp) || sp.get(
|
|
126
|
+
if (lensFromSearchParams(sp) || sp.get('label') || sp.get('status'))
|
|
122
127
|
return false;
|
|
123
|
-
return !LENSES.some((l) => l.id !==
|
|
128
|
+
return !LENSES.some((l) => l.id !== 'all' && matchesLensParams(l, sp));
|
|
124
129
|
}
|
|
125
130
|
const def = lensById(lensId);
|
|
126
131
|
if (!def)
|
|
@@ -154,11 +159,11 @@ export function isPrimaryLens(id) {
|
|
|
154
159
|
* (with the existing query preserved, then lens params merged on top).
|
|
155
160
|
*/
|
|
156
161
|
export function lensToQuery(id, current) {
|
|
157
|
-
if (!id || id ===
|
|
158
|
-
return
|
|
162
|
+
if (!id || id === 'all')
|
|
163
|
+
return '';
|
|
159
164
|
const def = lensById(id);
|
|
160
165
|
if (!def)
|
|
161
|
-
return
|
|
166
|
+
return '';
|
|
162
167
|
const next = new URLSearchParams(current);
|
|
163
168
|
for (const [k, v] of Object.entries(def.toParams())) {
|
|
164
169
|
if (Array.isArray(v)) {
|
|
@@ -176,7 +181,7 @@ export function lensToQuery(id, current) {
|
|
|
176
181
|
* Read a `?lens=...` value from URL search params.
|
|
177
182
|
*/
|
|
178
183
|
export function lensFromSearchParams(sp) {
|
|
179
|
-
const v = sp.get(
|
|
184
|
+
const v = sp.get('lens');
|
|
180
185
|
if (!v)
|
|
181
186
|
return null;
|
|
182
187
|
if (LENSES.some((l) => l.id === v))
|
|
@@ -194,14 +199,14 @@ export function lensFromSearchParams(sp) {
|
|
|
194
199
|
* `?sort=recently-added` left over from another tab would otherwise
|
|
195
200
|
* keep that tab active alongside the one just clicked.
|
|
196
201
|
*/
|
|
197
|
-
export function hrefForLens(lensId, current, pathPrefix =
|
|
202
|
+
export function hrefForLens(lensId, current, pathPrefix = '/items') {
|
|
198
203
|
const sp = new URLSearchParams(current);
|
|
199
|
-
sp.delete(
|
|
200
|
-
sp.delete(
|
|
201
|
-
sp.delete(
|
|
202
|
-
sp.delete(
|
|
203
|
-
sp.delete(
|
|
204
|
-
if (lensId && lensId !==
|
|
204
|
+
sp.delete('lens');
|
|
205
|
+
sp.delete('label');
|
|
206
|
+
sp.delete('status');
|
|
207
|
+
sp.delete('sort');
|
|
208
|
+
sp.delete('page');
|
|
209
|
+
if (lensId && lensId !== 'all') {
|
|
205
210
|
const def = lensById(lensId);
|
|
206
211
|
if (def) {
|
|
207
212
|
for (const [k, v] of Object.entries(def.toParams())) {
|
|
@@ -217,7 +222,7 @@ export function hrefForLens(lensId, current, pathPrefix = "/items") {
|
|
|
217
222
|
}
|
|
218
223
|
}
|
|
219
224
|
const qs = sp.toString();
|
|
220
|
-
const base = pathPrefix.replace(/\/$/,
|
|
225
|
+
const base = pathPrefix.replace(/\/$/, '') || '/';
|
|
221
226
|
return qs ? `${base}?${qs}` : base;
|
|
222
227
|
}
|
|
223
228
|
//# sourceMappingURL=directory-lenses.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-lenses.js","sourceRoot":"","sources":["../src/directory-lenses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA8BH,MAAM,CAAC,MAAM,MAAM,GAAc;IAC/B,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"directory-lenses.js","sourceRoot":"","sources":["../src/directory-lenses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA8BH,MAAM,CAAC,MAAM,MAAM,GAAc;IAC/B;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACrB;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,8CAA8C;QAC3D,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;KAC/C;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,oDAAoD;QACjE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;KAC7C;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,yCAAyC;QACtD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;KACnC;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,2CAA2C;QACxD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;KACtC;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,8BAA8B;QAC3C,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;KAC9C;IACD;QACE,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,yCAAyC;QACtD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;KAC5C;IACD,6CAA6C;IAC7C;QACE,EAAE,EAAE,mBAAmB;QACvB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,yCAAyC;QACtD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;KAChD;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,8DAA8D;QAC3E,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;KACjD;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,8CAA8C;QAC3D,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;KACvC;IACD;QACE,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,wDAAwD;QACrE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;KACvC;IACD;QACE,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;KAC5C;CACF,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,cAAc,GAAa,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAE3E,MAAM,UAAU,QAAQ,CAAC,EAA6B;IACpD,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,EAAmB;IAC9D,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,qEAAqE;QACrE,sEAAsE;QACtE,qEAAqE;QACrE,iEAAiE;QACjE,8CAA8C;QAC9C,IAAI,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAClF,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,iFAAiF;AACjF,SAAS,iBAAiB,CAAC,GAAY,EAAE,EAAmB;IAC1D,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YACnD,KAAK,MAAM,IAAI,IAAI,CAAC;gBAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAA6B;IACzD,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IACtB,OAAO,cAAc,CAAC,QAAQ,CAAC,EAAY,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAA6B,EAAE,OAAwB;IACjF,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAmB;IACtD,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,CAAW,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,MAAiC,EACjC,OAAwB,EACxB,UAAU,GAAG,QAAQ;IAErB,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IACxC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClB,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,GAAG,EAAE,CAAC;YACR,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACpD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACb,KAAK,MAAM,IAAI,IAAI,CAAC;wBAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC"}
|
package/dist/directory-repo.js
CHANGED
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
* - Anywhere we need to display "@owner / repo" or link to the owner
|
|
10
10
|
*/
|
|
11
11
|
export function getOwnerAndRepoFromRepoUrl(repoUrl) {
|
|
12
|
-
if (!repoUrl || !repoUrl.includes(
|
|
12
|
+
if (!repoUrl || !repoUrl.includes('github.com/')) {
|
|
13
13
|
return { owner: null, repo: null };
|
|
14
14
|
}
|
|
15
15
|
const m = repoUrl.match(/github\.com\/([^/]+)\/([^/?#]+)/);
|
|
16
16
|
if (!m)
|
|
17
17
|
return { owner: null, repo: null };
|
|
18
18
|
const owner = m[1] ?? null;
|
|
19
|
-
const repo = m[2]?.replace(/\.git$/,
|
|
19
|
+
const repo = m[2]?.replace(/\.git$/, '') ?? null;
|
|
20
20
|
return { owner, repo };
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-scores.d.ts","sourceRoot":"","sources":["../src/directory-scores.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAMtD;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAahD;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGxD;AAED,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,EAAE,CAAC,MAAM,SAAS,CAAC,EAO/C,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,SAAS,EAAE,MAAM,CAOxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"directory-scores.d.ts","sourceRoot":"","sources":["../src/directory-scores.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAMtD;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAahD;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGxD;AAED,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,EAAE,CAAC,MAAM,SAAS,CAAC,EAO/C,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,SAAS,EAAE,MAAM,CAOxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,SAAS,EAAE,MAAM,CAQ3D,CAAC"}
|
package/dist/directory-scores.js
CHANGED
|
@@ -25,40 +25,40 @@ export function scoreTier(n) {
|
|
|
25
25
|
export function scoreTierLabel(n) {
|
|
26
26
|
switch (scoreTier(n)) {
|
|
27
27
|
case 0:
|
|
28
|
-
return
|
|
28
|
+
return 'Very low';
|
|
29
29
|
case 1:
|
|
30
|
-
return
|
|
30
|
+
return 'Low';
|
|
31
31
|
case 2:
|
|
32
|
-
return
|
|
32
|
+
return 'Medium';
|
|
33
33
|
case 3:
|
|
34
|
-
return
|
|
34
|
+
return 'High';
|
|
35
35
|
case 4:
|
|
36
|
-
return
|
|
36
|
+
return 'Very high';
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
/** Short numeric label used inline next to a score bar, e.g. "82". */
|
|
40
40
|
export function scoreLabel(n) {
|
|
41
|
-
if (typeof n !==
|
|
42
|
-
return
|
|
41
|
+
if (typeof n !== 'number')
|
|
42
|
+
return '—';
|
|
43
43
|
return Math.round(n).toString();
|
|
44
44
|
}
|
|
45
45
|
/** Order of score dimensions, used by both list and detail. */
|
|
46
46
|
export const SCORE_DIMENSIONS = [
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
'activity',
|
|
48
|
+
'maturity',
|
|
49
|
+
'learning',
|
|
50
|
+
'contribution',
|
|
51
|
+
'docs',
|
|
52
|
+
'overall',
|
|
53
53
|
];
|
|
54
54
|
/** Human-readable label for a score dimension. */
|
|
55
55
|
export const SCORE_LABELS = {
|
|
56
|
-
activity:
|
|
57
|
-
maturity:
|
|
58
|
-
learning:
|
|
59
|
-
contribution:
|
|
60
|
-
docs:
|
|
61
|
-
overall:
|
|
56
|
+
activity: 'Activity',
|
|
57
|
+
maturity: 'Maturity',
|
|
58
|
+
learning: 'Learning',
|
|
59
|
+
contribution: 'Contribution',
|
|
60
|
+
docs: 'Docs',
|
|
61
|
+
overall: 'Overall',
|
|
62
62
|
};
|
|
63
63
|
/**
|
|
64
64
|
* Reasoning copy per dimension, surfaced in the detail page so the
|
|
@@ -66,11 +66,11 @@ export const SCORE_LABELS = {
|
|
|
66
66
|
* curation.notes on each item carries the longer story.
|
|
67
67
|
*/
|
|
68
68
|
export const SCORE_REASONING = {
|
|
69
|
-
activity:
|
|
70
|
-
maturity:
|
|
71
|
-
learning:
|
|
72
|
-
contribution:
|
|
73
|
-
docs:
|
|
74
|
-
overall:
|
|
69
|
+
activity: 'Recent commits, open and merged PRs, issue response time, release cadence.',
|
|
70
|
+
maturity: 'Repo age, stable structure, real-world production usage, contributor stability.',
|
|
71
|
+
learning: 'Codebase readability, useful architecture patterns, comment quality, examples.',
|
|
72
|
+
contribution: 'Open issues, recent merged PRs from new contributors, maintainer responsiveness, contribution guide.',
|
|
73
|
+
docs: 'README quality, architecture docs, contributing guide, examples, code comments.',
|
|
74
|
+
overall: 'Composite judgment — how likely this item is to satisfy a curious developer.',
|
|
75
75
|
};
|
|
76
76
|
//# sourceMappingURL=directory-scores.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-scores.js","sourceRoot":"","sources":["../src/directory-scores.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,QAAQ,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC;YACJ,OAAO,UAAU,CAAC;QACpB,KAAK,CAAC;YACJ,OAAO,KAAK,CAAC;QACf,KAAK,CAAC;YACJ,OAAO,QAAQ,CAAC;QAClB,KAAK,CAAC;YACJ,OAAO,MAAM,CAAC;QAChB,KAAK,CAAC;YACJ,OAAO,WAAW,CAAC;IACvB,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,UAAU,CAAC,CAAqB;IAC9C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAwB;IACnD,UAAU;IACV,UAAU;IACV,UAAU;IACV,cAAc;IACd,MAAM;IACN,SAAS;CACV,CAAC;AAEF,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAoC;IAC3D,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,YAAY,EAAE,cAAc;IAC5B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoC;IAC9D,QAAQ,
|
|
1
|
+
{"version":3,"file":"directory-scores.js","sourceRoot":"","sources":["../src/directory-scores.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,QAAQ,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC;YACJ,OAAO,UAAU,CAAC;QACpB,KAAK,CAAC;YACJ,OAAO,KAAK,CAAC;QACf,KAAK,CAAC;YACJ,OAAO,QAAQ,CAAC;QAClB,KAAK,CAAC;YACJ,OAAO,MAAM,CAAC;QAChB,KAAK,CAAC;YACJ,OAAO,WAAW,CAAC;IACvB,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,UAAU,CAAC,CAAqB;IAC9C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAwB;IACnD,UAAU;IACV,UAAU;IACV,UAAU;IACV,cAAc;IACd,MAAM;IACN,SAAS;CACV,CAAC;AAEF,kDAAkD;AAClD,MAAM,CAAC,MAAM,YAAY,GAAoC;IAC3D,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,YAAY,EAAE,cAAc;IAC5B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoC;IAC9D,QAAQ,EAAE,4EAA4E;IACtF,QAAQ,EAAE,iFAAiF;IAC3F,QAAQ,EAAE,gFAAgF;IAC1F,YAAY,EACV,sGAAsG;IACxG,IAAI,EAAE,iFAAiF;IACvF,OAAO,EAAE,8EAA8E;CACxF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IndexRecord } from
|
|
1
|
+
import type { IndexRecord } from './schema.js';
|
|
2
2
|
/**
|
|
3
3
|
* URL-driven filter state for the /items discovery page.
|
|
4
4
|
*
|
|
@@ -38,7 +38,7 @@ export declare const SORT_OPTIONS: readonly [{
|
|
|
38
38
|
readonly value: "alphabetical";
|
|
39
39
|
readonly label: "Alphabetical";
|
|
40
40
|
}];
|
|
41
|
-
export type IndexSort = (typeof SORT_OPTIONS)[number][
|
|
41
|
+
export type IndexSort = (typeof SORT_OPTIONS)[number]['value'];
|
|
42
42
|
/**
|
|
43
43
|
* Read filters from a URLSearchParams (or anything URLSearchParams-shaped,
|
|
44
44
|
* e.g. the result of `new URL(req.url).searchParams`).
|
|
@@ -66,7 +66,7 @@ export declare function totalPages(itemCount: number, pageSize?: number): number
|
|
|
66
66
|
* component and the client-side rebuild in `DirectoryIndexClient`
|
|
67
67
|
* so the two never drift.
|
|
68
68
|
*/
|
|
69
|
-
export declare function paginationPageList(active: number, count: number): Array<number |
|
|
69
|
+
export declare function paginationPageList(active: number, count: number): Array<number | 'ellipsis'>;
|
|
70
70
|
/** Resolve the effective sort from a filters object, applying default. */
|
|
71
71
|
export declare function effectiveSort(f: IndexFilters): IndexSort;
|
|
72
72
|
/** Resolve the effective page from a filters object, applying default. */
|
|
@@ -160,7 +160,7 @@ export declare function buildFacets(items: IndexRecord[], options?: {
|
|
|
160
160
|
* in the default count-desc-then-alpha order. Curated tag ids
|
|
161
161
|
* (topics.yml) flow through the `tags` key the same way.
|
|
162
162
|
*/
|
|
163
|
-
order?: Partial<Record<
|
|
163
|
+
order?: Partial<Record<'stacks' | 'platforms' | 'categories' | 'tags' | 'licenses', string[]>>;
|
|
164
164
|
}): {
|
|
165
165
|
stacks: {
|
|
166
166
|
value: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-search.d.ts","sourceRoot":"","sources":["../src/directory-search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"directory-search.d.ts","sourceRoot":"","sources":["../src/directory-search.ts"],"names":[],"mappings":"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"}
|