@ignite-agent/agent 0.1.1 → 0.4.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.
Files changed (46) hide show
  1. package/AI.txt +7 -0
  2. package/LICENSE +57 -4
  3. package/README.md +162 -5
  4. package/dist/cli/index.js +79 -22
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/cli/project.d.ts +39 -0
  7. package/dist/cli/project.js +276 -0
  8. package/dist/cli/project.js.map +1 -0
  9. package/dist/ignite.css +228 -0
  10. package/dist/index.d.ts +7 -2
  11. package/dist/index.js +7 -2
  12. package/dist/index.js.map +1 -1
  13. package/dist/operator/blog.d.ts +11 -6
  14. package/dist/operator/blog.js +11 -6
  15. package/dist/operator/blog.js.map +1 -1
  16. package/dist/operator/card.d.ts +5 -0
  17. package/dist/operator/card.js +11 -0
  18. package/dist/operator/card.js.map +1 -0
  19. package/dist/operator/jsonld.d.ts +5 -0
  20. package/dist/operator/jsonld.js +6 -3
  21. package/dist/operator/jsonld.js.map +1 -1
  22. package/dist/operator/page.d.ts +10 -1
  23. package/dist/operator/page.js +20 -3
  24. package/dist/operator/page.js.map +1 -1
  25. package/dist/operator/prose.d.ts +19 -0
  26. package/dist/operator/prose.js +26 -0
  27. package/dist/operator/prose.js.map +1 -0
  28. package/dist/operator/sitemap-merge.d.ts +10 -0
  29. package/dist/operator/sitemap-merge.js +56 -0
  30. package/dist/operator/sitemap-merge.js.map +1 -0
  31. package/dist/operator/sitemap.d.ts +4 -1
  32. package/dist/operator/sitemap.js +27 -17
  33. package/dist/operator/sitemap.js.map +1 -1
  34. package/dist/operator/ui.d.ts +45 -0
  35. package/dist/operator/ui.js +486 -0
  36. package/dist/operator/ui.js.map +1 -0
  37. package/dist/operator/wiki.d.ts +11 -5
  38. package/dist/operator/wiki.js +24 -4
  39. package/dist/operator/wiki.js.map +1 -1
  40. package/dist/types.d.ts +28 -1
  41. package/onboarding/CLAUDE-CODE-SETUP.md +40 -24
  42. package/onboarding/CURSOR-SETUP.md +73 -0
  43. package/onboarding/LOVABLE-SETUP.md +76 -0
  44. package/onboarding/MIGRATE-EXISTING.md +94 -0
  45. package/onboarding/REPLIT-SETUP.md +76 -0
  46. package/package.json +9 -5
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import 'server-only';
3
3
  import { IgniteClient } from '../client.js';
4
+ import { jsonLdBlocksForPage, jsonLdScript } from './ui.js';
4
5
  // Drop into `app/layout.tsx`: import { IgniteJsonLd } from '@ignite-agent/agent/jsonld' then render <IgniteJsonLd />
5
6
  // An async server component that emits ld+json for the site. Renders nothing when unconfigured or unreachable.
6
7
  export async function IgniteJsonLd() {
@@ -16,8 +17,10 @@ export async function IgniteJsonLd() {
16
17
  }
17
18
  if (blocks.length === 0)
18
19
  return null;
19
- return (_jsx(_Fragment, { children: blocks.map((block, i) => (_jsx("script", { type: "application/ld+json",
20
- // JSON.stringify output is embedded as-is; escape the sequence that could close the script early.
21
- dangerouslySetInnerHTML: { __html: JSON.stringify(block).replace(/</g, '\\u003c') } }, i))) }));
20
+ return (_jsx(_Fragment, { children: blocks.map((block, i) => (_jsx("script", { type: "application/ld+json", dangerouslySetInnerHTML: { __html: jsonLdScript(block) } }, i))) }));
21
+ }
22
+ export function FeedJsonLd({ page, siteUrl }) {
23
+ const blocks = jsonLdBlocksForPage(page, { siteUrl });
24
+ return (_jsx(_Fragment, { children: blocks.map((block, i) => (_jsx("script", { type: "application/ld+json", dangerouslySetInnerHTML: { __html: jsonLdScript(block) } }, i))) }));
22
25
  }
23
26
  //# sourceMappingURL=jsonld.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jsonld.js","sourceRoot":"","sources":["../../src/operator/jsonld.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,uHAAuH;AACvH,+GAA+G;AAC/G,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,MAAM,GAA8B,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,4BACG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,iBAEE,IAAI,EAAC,qBAAqB;YAC1B,kGAAkG;YAClG,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,IAH9E,CAAC,CAIN,CACH,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"jsonld.js","sourceRoot":"","sources":["../../src/operator/jsonld.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAuB,MAAM,SAAS,CAAC;AAEjF,uHAAuH;AACvH,+GAA+G;AAC/G,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,MAAM,GAA8B,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,4BACG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,iBAAgB,IAAI,EAAC,qBAAqB,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,IAAtF,CAAC,CAAyF,CACxG,CAAC,GACD,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAuC;IAC/E,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACtD,OAAO,CACL,4BACG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,iBAAgB,IAAI,EAAC,qBAAqB,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,IAAtF,CAAC,CAAyF,CACxG,CAAC,GACD,CACJ,CAAC;AACJ,CAAC"}
@@ -1,8 +1,17 @@
1
1
  import 'server-only';
2
+ import type { Metadata } from 'next';
2
3
  import type { FeedPage } from '../types.js';
4
+ import { type FeedUrlOptions, type IgniteTokens } from './ui.js';
5
+ export { IgniteProse, IgniteTokensProvider, type IgniteTokens } from './prose.js';
6
+ export { pageJsonLd, jsonLdBlocksForPage, feedMetadata } from './ui.js';
7
+ export { FeedJsonLd } from './jsonld.js';
3
8
  export declare const revalidate = 60;
4
9
  export declare function feedPagesOfKind(kind: FeedPage['kind']): Promise<FeedPage[]>;
5
10
  export declare function tryLoadFeedPage(kind: FeedPage['kind'], slug: string): Promise<FeedPage | null>;
6
- export declare function FeedArticle({ page }: {
11
+ export declare function feedPageMetadata(page: FeedPage, options?: FeedUrlOptions): Metadata;
12
+ export declare function FeedArticle({ page, tokens, indexHref, siteUrl, }: {
7
13
  page: FeedPage;
14
+ tokens?: IgniteTokens | undefined;
15
+ indexHref?: string | undefined;
16
+ siteUrl?: string | undefined;
8
17
  }): import("react").JSX.Element;
@@ -1,6 +1,12 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import 'server-only';
3
3
  import { IgniteApiError, IgniteClient } from '../client.js';
4
+ import { FeedJsonLd } from './jsonld.js';
5
+ import { IgniteFrame } from './prose.js';
6
+ import { feedMetadata, formatFeedDate, kindIndexPath, kindLabel, pageHero, publicModifiedAt, publicPublishedAt, } from './ui.js';
7
+ export { IgniteProse, IgniteTokensProvider } from './prose.js';
8
+ export { pageJsonLd, jsonLdBlocksForPage, feedMetadata } from './ui.js';
9
+ export { FeedJsonLd } from './jsonld.js';
4
10
  export const revalidate = 60;
5
11
  export async function feedPagesOfKind(kind) {
6
12
  const client = IgniteClient.fromEnvOrNull();
@@ -28,7 +34,18 @@ export async function tryLoadFeedPage(kind, slug) {
28
34
  throw error;
29
35
  }
30
36
  }
31
- export function FeedArticle({ page }) {
32
- return (_jsxs("article", { children: [_jsx("h1", { children: page.title }), _jsx("div", { dangerouslySetInnerHTML: { __html: page.html } })] }));
37
+ export function feedPageMetadata(page, options) {
38
+ return feedMetadata(page, options);
39
+ }
40
+ export function FeedArticle({ page, tokens, indexHref, siteUrl, }) {
41
+ const index = indexHref ?? kindIndexPath(page.kind);
42
+ const published = formatFeedDate(publicPublishedAt(page));
43
+ const modified = formatFeedDate(publicModifiedAt(page));
44
+ const reviewed = formatFeedDate(page.lastReviewed);
45
+ const kind = kindLabel(page.kind);
46
+ const parent = page.parent;
47
+ const author = page.author;
48
+ const image = pageHero(page);
49
+ return (_jsxs(IgniteFrame, { tokens: tokens, children: [_jsx(FeedJsonLd, { page: page, siteUrl: siteUrl }), _jsxs("article", { className: "ignite-article", children: [_jsxs("nav", { className: "ignite-kicker", "aria-label": "Breadcrumb", children: [_jsx("a", { href: index, children: page.kind === 'article' ? 'Blog' : 'Wiki' }), parent ? (_jsxs(_Fragment, { children: [_jsx("span", { "aria-hidden": "true", children: "/" }), _jsx("a", { href: parent.path, children: parent.title })] })) : null] }), image?.url ? (_jsxs("figure", { className: "ignite-hero", children: [_jsx("img", { src: image.url, alt: image.alt ?? page.title, ...(image.width ? { width: image.width } : {}), ...(image.height ? { height: image.height } : {}) }), image.alt && image.alt !== page.title ? _jsx("figcaption", { children: image.alt }) : null] })) : null, _jsx("h1", { className: "ignite-title", children: page.title }), _jsxs("p", { className: "ignite-meta", children: [author?.image ? (_jsx("img", { className: "ignite-avatar", src: author.image, alt: author.name, width: 24, height: 24 })) : null, kind, author?.name ? (_jsxs(_Fragment, { children: [' · ', author.url ? _jsx("a", { href: author.url, children: author.name }) : author.name] })) : null, published ? ` · ${published}` : null, modified && modified !== published ? ` · Updated ${modified}` : null, reviewed ? ` · Reviewed ${reviewed}` : null] }), _jsx("div", { className: "ignite-prose", dangerouslySetInnerHTML: { __html: page.html } })] })] }));
33
50
  }
34
51
  //# sourceMappingURL=page.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/operator/page.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAsB;IAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAsB,EAAE,IAAY;IACxE,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACzE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAsB;IACtD,OAAO,CACL,8BACE,uBAAK,IAAI,CAAC,KAAK,GAAM,EACrB,cAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,GAAI,IAC/C,CACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/operator/page.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAC;AAIrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,GAGlB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAqB,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAsB;IAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAsB,EAAE,IAAY;IACxE,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACzE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,OAAwB;IACvE,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EACJ,MAAM,EACN,SAAS,EACT,OAAO,GAMR;IACC,MAAM,KAAK,GAAG,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7B,OAAO,CACL,MAAC,WAAW,IAAC,MAAM,EAAE,MAAM,aACzB,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAI,EAC5C,mBAAS,SAAS,EAAC,gBAAgB,aACjC,eAAK,SAAS,EAAC,eAAe,gBAAY,YAAY,aACpD,YAAG,IAAI,EAAE,KAAK,YAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAK,EAC9D,MAAM,CAAC,CAAC,CAAC,CACR,8BACE,8BAAkB,MAAM,kBAAS,EACjC,YAAG,IAAI,EAAE,MAAM,CAAC,IAAI,YAAG,MAAM,CAAC,KAAK,GAAK,IACvC,CACJ,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CACZ,kBAAQ,SAAS,EAAC,aAAa,aAC7B,cACE,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,KACxB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAC3C,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAClD,EACD,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,+BAAa,KAAK,CAAC,GAAG,GAAc,CAAC,CAAC,CAAC,IAAI,IAC7E,CACV,CAAC,CAAC,CAAC,IAAI,EACR,aAAI,SAAS,EAAC,cAAc,YAAE,IAAI,CAAC,KAAK,GAAM,EAC9C,aAAG,SAAS,EAAC,aAAa,aACvB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CACf,cAAK,SAAS,EAAC,eAAe,EAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI,CAC9F,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,EACJ,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CACd,8BACG,KAAK,EACL,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,YAAG,IAAI,EAAE,MAAM,CAAC,GAAG,YAAG,MAAM,CAAC,IAAI,GAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IACjE,CACJ,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EACpC,QAAQ,IAAI,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,EACpE,QAAQ,CAAC,CAAC,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,IAC1C,EACJ,cAAK,SAAS,EAAC,cAAc,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,GAAI,IACxE,IACE,CACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import 'server-only';
2
+ import { type ReactNode } from 'react';
3
+ import { type IgniteTokens } from './ui.js';
4
+ export type { IgniteTokens };
5
+ export declare function IgniteTokensProvider({ tokens, children, }: {
6
+ tokens: IgniteTokens;
7
+ children: ReactNode;
8
+ }): import("react").JSX.Element;
9
+ export declare function IgniteProse({ html, children, tokens, injectCss, }: {
10
+ html?: string | undefined;
11
+ children?: ReactNode;
12
+ tokens?: IgniteTokens | undefined;
13
+ injectCss?: boolean | undefined;
14
+ }): import("react").JSX.Element;
15
+ export declare function IgniteFrame({ tokens, children, injectCss, }: {
16
+ tokens?: IgniteTokens | undefined;
17
+ children: ReactNode;
18
+ injectCss?: boolean | undefined;
19
+ }): import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import 'server-only';
3
+ import { createContext, useContext } from 'react';
4
+ import { IGNITE_CSS, tokensToStyle } from './ui.js';
5
+ const IgniteTokensContext = createContext(undefined);
6
+ export function IgniteTokensProvider({ tokens, children, }) {
7
+ return _jsx(IgniteTokensContext.Provider, { value: tokens, children: children });
8
+ }
9
+ function useResolvedTokens(override) {
10
+ const ctx = useContext(IgniteTokensContext);
11
+ if (!override)
12
+ return ctx;
13
+ return ctx ? { ...ctx, ...override } : override;
14
+ }
15
+ function IgniteStyles() {
16
+ return (_jsx("style", { href: "ignite-ui", precedence: "medium", children: IGNITE_CSS }));
17
+ }
18
+ export function IgniteProse({ html, children, tokens, injectCss = true, }) {
19
+ const style = tokensToStyle(useResolvedTokens(tokens));
20
+ return (_jsxs("div", { className: "ignite ignite-prose", style: style, children: [injectCss ? _jsx(IgniteStyles, {}) : null, html ? _jsx("div", { dangerouslySetInnerHTML: { __html: html } }) : children] }));
21
+ }
22
+ export function IgniteFrame({ tokens, children, injectCss = true, }) {
23
+ const style = tokensToStyle(useResolvedTokens(tokens));
24
+ return (_jsxs("div", { className: "ignite", style: style, children: [injectCss ? _jsx(IgniteStyles, {}) : null, children] }));
25
+ }
26
+ //# sourceMappingURL=prose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prose.js","sourceRoot":"","sources":["../../src/operator/prose.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAsC,MAAM,OAAO,CAAC;AAEtF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAqB,MAAM,SAAS,CAAC;AAIvE,MAAM,mBAAmB,GAAG,aAAa,CAA2B,SAAS,CAAC,CAAC;AAE/E,MAAM,UAAU,oBAAoB,CAAC,EACnC,MAAM,EACN,QAAQ,GAIT;IACC,OAAO,KAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YAAG,QAAQ,GAAgC,CAAC;AAChG,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAmC;IAC5D,MAAM,GAAG,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ;QAAE,OAAO,GAAG,CAAC;IAC1B,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClD,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,CACL,gBAAO,IAAI,EAAC,WAAW,EAAC,UAAU,EAAC,QAAQ,YACxC,UAAU,GACL,CACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,SAAS,GAAG,IAAI,GAMjB;IACC,MAAM,KAAK,GAAG,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAA8B,CAAC;IACpF,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,EAAC,KAAK,EAAE,KAAK,aAC9C,SAAS,CAAC,CAAC,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC,CAAC,IAAI,EACnC,IAAI,CAAC,CAAC,CAAC,cAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI,CAAC,CAAC,CAAC,QAAQ,IACjE,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,IAAI,GAKjB;IACC,MAAM,KAAK,GAAG,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAA8B,CAAC;IACpF,OAAO,CACL,eAAK,SAAS,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,aACjC,SAAS,CAAC,CAAC,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC,CAAC,IAAI,EACnC,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { FeedPage, SitemapEntry } from '../types.js';
2
+ export type SitemapRow = {
3
+ url: string;
4
+ lastModified?: string;
5
+ changeFrequency?: SitemapEntry['changeFrequency'];
6
+ priority?: number;
7
+ };
8
+ export declare function originFromSitemapUrls(urls: string[]): string | undefined;
9
+ export declare function mergeSitemap(base: SitemapRow[], extra: SitemapRow[]): SitemapRow[];
10
+ export declare function feedPagesToSitemap(pages: FeedPage[], siteUrl?: string | undefined): SitemapRow[];
@@ -0,0 +1,56 @@
1
+ import { absoluteUrl, publicModifiedAt, resolveSiteUrl } from './ui.js';
2
+ export function originFromSitemapUrls(urls) {
3
+ for (const url of urls) {
4
+ try {
5
+ const parsed = new URL(url);
6
+ if (parsed.protocol === 'http:' || parsed.protocol === 'https:')
7
+ return parsed.origin;
8
+ }
9
+ catch {
10
+ // skip relative or malformed
11
+ }
12
+ }
13
+ return undefined;
14
+ }
15
+ export function mergeSitemap(base, extra) {
16
+ const map = new Map();
17
+ for (const row of base) {
18
+ if (!row.url)
19
+ continue;
20
+ map.set(row.url, { ...row });
21
+ }
22
+ for (const row of extra) {
23
+ if (!row.url)
24
+ continue;
25
+ const prev = map.get(row.url);
26
+ if (!prev) {
27
+ map.set(row.url, { ...row });
28
+ continue;
29
+ }
30
+ if (!prev.lastModified && row.lastModified) {
31
+ map.set(row.url, { ...prev, lastModified: row.lastModified });
32
+ }
33
+ }
34
+ return [...map.values()];
35
+ }
36
+ export function feedPagesToSitemap(pages, siteUrl) {
37
+ const base = resolveSiteUrl(siteUrl);
38
+ if (!base)
39
+ return [];
40
+ const rows = [];
41
+ const kinds = new Set();
42
+ for (const page of pages) {
43
+ kinds.add(page.kind);
44
+ const lastModified = publicModifiedAt(page) ?? undefined;
45
+ rows.push({
46
+ url: absoluteUrl(page.path, base),
47
+ ...(lastModified ? { lastModified } : {}),
48
+ });
49
+ }
50
+ if (kinds.has('wiki'))
51
+ rows.push({ url: absoluteUrl('/w', base) });
52
+ if (kinds.has('article'))
53
+ rows.push({ url: absoluteUrl('/blog', base) });
54
+ return rows;
55
+ }
56
+ //# sourceMappingURL=sitemap-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sitemap-merge.js","sourceRoot":"","sources":["../../src/operator/sitemap-merge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AASxE,MAAM,UAAU,qBAAqB,CAAC,IAAc;IAClD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC;QACxF,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAkB,EAAE,KAAmB;IAClE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,SAAS;QACvB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,SAAS;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YAC3C,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAiB,EAAE,OAA4B;IAChF,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC;YACR,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;YACjC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,3 +1,6 @@
1
1
  import 'server-only';
2
2
  import type { MetadataRoute } from 'next';
3
- export default function sitemap(): Promise<MetadataRoute.Sitemap>;
3
+ import { feedPagesToSitemap, mergeSitemap, originFromSitemapUrls } from './sitemap-merge.js';
4
+ export { mergeSitemap, feedPagesToSitemap, originFromSitemapUrls };
5
+ export declare function igniteSitemap(): Promise<MetadataRoute.Sitemap>;
6
+ export default igniteSitemap;
@@ -1,24 +1,34 @@
1
1
  import 'server-only';
2
2
  import { IgniteClient } from '../client.js';
3
- // Drop into `app/sitemap.ts`: export { default } from '@ignite-agent/agent/sitemap'
4
- // Returns an empty sitemap when unconfigured or unreachable so it never overrides a real one with bad data.
5
- export default async function sitemap() {
3
+ import { feedPagesToSitemap, mergeSitemap, originFromSitemapUrls } from './sitemap-merge.js';
4
+ import { resolveSiteUrl } from './ui.js';
5
+ export { mergeSitemap, feedPagesToSitemap, originFromSitemapUrls };
6
+ function hubRows(entries) {
7
+ return entries.map((entry) => ({
8
+ url: entry.url,
9
+ ...(entry.lastModified ? { lastModified: entry.lastModified } : {}),
10
+ ...(entry.changeFrequency ? { changeFrequency: entry.changeFrequency } : {}),
11
+ ...(entry.priority !== undefined ? { priority: entry.priority } : {}),
12
+ }));
13
+ }
14
+ export async function igniteSitemap() {
6
15
  const client = IgniteClient.fromEnvOrNull();
7
16
  if (!client)
8
17
  return [];
9
- try {
10
- const { sitemap } = await client.directives();
11
- if (!sitemap)
12
- return [];
13
- return sitemap.map((entry) => ({
14
- url: entry.url,
15
- ...(entry.lastModified ? { lastModified: entry.lastModified } : {}),
16
- ...(entry.changeFrequency ? { changeFrequency: entry.changeFrequency } : {}),
17
- ...(entry.priority !== undefined ? { priority: entry.priority } : {}),
18
- }));
19
- }
20
- catch {
21
- return [];
22
- }
18
+ const [directiveEntries, pages] = await Promise.all([
19
+ client
20
+ .directives()
21
+ .then((d) => d.sitemap ?? [])
22
+ .catch(() => []),
23
+ client
24
+ .pages()
25
+ .then((index) => index.pages)
26
+ .catch(() => []),
27
+ ]);
28
+ const fromHub = hubRows(directiveEntries);
29
+ const origin = resolveSiteUrl() ?? originFromSitemapUrls(fromHub.map((row) => row.url));
30
+ const fromFeed = feedPagesToSitemap(pages, origin);
31
+ return mergeSitemap(fromHub, fromFeed);
23
32
  }
33
+ export default igniteSitemap;
24
34
  //# sourceMappingURL=sitemap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/operator/sitemap.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAIrB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,qFAAqF;AACrF,4GAA4G;AAC5G,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,OAAO;IACnC,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC,CAAC,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/operator/sitemap.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAIrB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,CAAC;AAEnE,SAAS,OAAO,CAAC,OAAuB;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7B,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAClD,MAAM;aACH,UAAU,EAAE;aACZ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;aAC5B,KAAK,CAAC,GAAG,EAAE,CAAC,EAAoB,CAAC;QACpC,MAAM;aACH,KAAK,EAAE;aACP,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;aAC5B,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;KACnB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,cAAc,EAAE,IAAI,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { Metadata } from 'next';
2
+ import type { FeedPage } from '../types.js';
3
+ export type IgniteTokens = {
4
+ colorText?: string;
5
+ colorMuted?: string;
6
+ colorPrimary?: string;
7
+ colorBorder?: string;
8
+ fontSans?: string;
9
+ fontHeading?: string;
10
+ radius?: string;
11
+ proseWidth?: string;
12
+ spaceScale?: string;
13
+ };
14
+ export declare function tokensToStyle(tokens?: IgniteTokens | undefined): Record<string, string> | undefined;
15
+ export declare function plainExcerpt(html: string, max?: number): string;
16
+ export declare function formatFeedDate(iso: string | null | undefined): string | null;
17
+ export declare function kindLabel(kind: FeedPage['kind']): string;
18
+ export declare function kindIndexPath(kind: FeedPage['kind']): string;
19
+ export declare function mergeSlugs(local: Array<{
20
+ slug: string;
21
+ }>, hub: Array<{
22
+ slug: string;
23
+ }>): Array<{
24
+ slug: string;
25
+ }>;
26
+ export declare function publicPublishedAt(page: FeedPage): string | null;
27
+ export declare function publicModifiedAt(page: FeedPage): string | null;
28
+ export declare function siteOrigin(): string | null;
29
+ export declare function resolveSiteUrl(explicit?: string | undefined): string | undefined;
30
+ export declare function absoluteUrl(pathOrUrl: string, siteUrl?: string | undefined): string;
31
+ export declare function feedImageUrls(page: FeedPage): string[];
32
+ export declare function pageHero(page: FeedPage): FeedPage['image'];
33
+ export type FeedUrlOptions = {
34
+ siteUrl?: string | undefined;
35
+ };
36
+ export declare function pageJsonLd(page: FeedPage, options?: FeedUrlOptions): Record<string, unknown>;
37
+ export declare function jsonLdBlocksForPage(page: FeedPage, options?: FeedUrlOptions): Record<string, unknown>[];
38
+ export declare function jsonLdScript(block: Record<string, unknown>): string;
39
+ export declare function feedMetadata(page: FeedPage, options?: FeedUrlOptions): Metadata;
40
+ export type WikiNode = {
41
+ page: FeedPage;
42
+ children: WikiNode[];
43
+ };
44
+ export declare function wikiForest(pages: FeedPage[]): WikiNode[];
45
+ export declare const IGNITE_CSS: string;