@grimoire-rs/indexer 0.3.1 → 0.3.2
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/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +22 -0
- package/dist/config.js.map +1 -1
- package/dist/renderer/astro/layouts/Base.astro +20 -0
- package/package.json +1 -1
package/dist/config.d.ts
CHANGED
|
@@ -66,6 +66,20 @@ export interface SiteConfig {
|
|
|
66
66
|
* link alone.
|
|
67
67
|
*/
|
|
68
68
|
footerNote?: string | null;
|
|
69
|
+
/**
|
|
70
|
+
* Extra footer links, rendered after the raw-data line as a plain row.
|
|
71
|
+
*
|
|
72
|
+
* Exists because `footerNote` is text, and the thing an index most often
|
|
73
|
+
* has to put in a footer is not a sentence but a link: a privacy notice, an
|
|
74
|
+
* imprint, a code of conduct. Whether any of those are legally required
|
|
75
|
+
* depends on where the index runner lives and what the index is for, so the
|
|
76
|
+
* renderer takes no position and ships none by default — it just stops the
|
|
77
|
+
* answer being "fork the layout".
|
|
78
|
+
*/
|
|
79
|
+
footerLinks?: Array<{
|
|
80
|
+
label: string;
|
|
81
|
+
href: string;
|
|
82
|
+
}>;
|
|
69
83
|
/**
|
|
70
84
|
* "Built with ♥ using Grimoire" in the footer, linking to grimoire.rs.
|
|
71
85
|
* `false` removes it — an index runner is not obliged to advertise the
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA,+DAA+D;AAC/D,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAE/C,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,+EAA+E;AAC/E,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAEtD,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA,+DAA+D;AAC/D,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAE/C,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,+EAA+E;AAC/E,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AAEtD,eAAO,MAAM,cAAc,EAAE,kBAwC5B,CAAC;AAEF,2EAA2E;AAC3E,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAoGD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAelE;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,kBAAkB,CAWpE"}
|
package/dist/config.js
CHANGED
|
@@ -43,6 +43,7 @@ export const DEFAULT_CONFIG = {
|
|
|
43
43
|
// old default: "pointers, not payloads", which explains the architecture
|
|
44
44
|
// to someone who did not ask, and the em dash holding it on.
|
|
45
45
|
footerNote: "index metadata is CC0 · packages live on OCI registries",
|
|
46
|
+
footerLinks: [],
|
|
46
47
|
attribution: true,
|
|
47
48
|
customCss: null,
|
|
48
49
|
};
|
|
@@ -86,6 +87,27 @@ function validate(raw) {
|
|
|
86
87
|
if (cfg.attribution !== undefined && typeof cfg.attribution !== "boolean") {
|
|
87
88
|
fail("attribution must be a boolean");
|
|
88
89
|
}
|
|
90
|
+
if (cfg.footerLinks !== undefined) {
|
|
91
|
+
if (!Array.isArray(cfg.footerLinks))
|
|
92
|
+
fail("footerLinks must be an array");
|
|
93
|
+
for (const [i, entry] of cfg.footerLinks.entries()) {
|
|
94
|
+
const at = `footerLinks[${i}]`;
|
|
95
|
+
if (entry === null || typeof entry !== "object" || Array.isArray(entry)) {
|
|
96
|
+
fail(`${at} must be an object with label and href`);
|
|
97
|
+
}
|
|
98
|
+
const { label, href } = entry;
|
|
99
|
+
if (typeof label !== "string" || label.trim() === "") {
|
|
100
|
+
fail(`${at}.label must be a non-empty string`);
|
|
101
|
+
}
|
|
102
|
+
// Same rule the other URL keys get. A relative href would resolve
|
|
103
|
+
// against whichever page the footer happens to be on — `/p/<ns>/<pkg>/`
|
|
104
|
+
// is two levels deep — so it is refused rather than silently 404ing
|
|
105
|
+
// from half the site.
|
|
106
|
+
if (typeof href !== "string" || !/^https?:\/\//i.test(href)) {
|
|
107
|
+
fail(`${at}.href must be an http(s) URL`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
89
111
|
// Lands in `src`. A site-root path is the normal case; an absolute URL is
|
|
90
112
|
// allowed for a logo already hosted elsewhere. Anything else — a bare
|
|
91
113
|
// relative path that would break on a subpath deployment, or a `javascript:`
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,sCAAsC;AAEtC,sEAAsE;AACtE,0EAA0E;AAC1E,0EAA0E;AAC1E,0BAA0B;AAC1B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,+DAA+D;AAC/D,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -167,6 +167,18 @@ function repoLabel(url: string): string {
|
|
|
167
167
|
config.footerNote ? ` · ${config.footerNote}` : ""
|
|
168
168
|
}
|
|
169
169
|
</p>
|
|
170
|
+
{/* Whatever this index has to link — a privacy notice, an imprint, a
|
|
171
|
+
code of conduct. Absent by default, so a footer without them looks
|
|
172
|
+
exactly as it did before. */}
|
|
173
|
+
{
|
|
174
|
+
config.footerLinks.length > 0 && (
|
|
175
|
+
<p class="footer-links">
|
|
176
|
+
{config.footerLinks.map((link) => (
|
|
177
|
+
<a href={link.href}>{link.label}</a>
|
|
178
|
+
))}
|
|
179
|
+
</p>
|
|
180
|
+
)
|
|
181
|
+
}
|
|
170
182
|
{/* Opt-out, not opt-in: an index runner who does not want to say
|
|
171
183
|
where the software came from sets `attribution: false`, and this
|
|
172
184
|
disappears. Nothing else on the page changes.
|
|
@@ -788,6 +800,14 @@ function repoLabel(url: string): string {
|
|
|
788
800
|
.attribution span[aria-hidden] {
|
|
789
801
|
color: var(--accent);
|
|
790
802
|
}
|
|
803
|
+
/* Sits between the raw-data line and the attribution, which keeps its
|
|
804
|
+
`margin-inline-start: auto` and so stays pinned to the end. */
|
|
805
|
+
.footer-links {
|
|
806
|
+
margin: 0;
|
|
807
|
+
display: flex;
|
|
808
|
+
flex-wrap: wrap;
|
|
809
|
+
gap: 0.35rem 1rem;
|
|
810
|
+
}
|
|
791
811
|
|
|
792
812
|
/* Copy toast. Fixed and centred at the bottom: a card's three copy
|
|
793
813
|
buttons sit a few pixels apart and all flash the same check, so
|