@se-studio/core-ui 1.14.7 → 1.15.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/CHANGELOG.md +18 -0
- package/README.md +3 -0
- package/dist/analytics/AnalyticsProvider.d.ts +6 -5
- package/dist/analytics/AnalyticsProvider.d.ts.map +1 -1
- package/dist/analytics/AnalyticsProvider.js +25 -11
- package/dist/analytics/AnalyticsProvider.js.map +1 -1
- package/dist/analytics/useAnalytics.d.ts +2 -4
- package/dist/analytics/useAnalytics.d.ts.map +1 -1
- package/dist/analytics/useAnalytics.js +2 -4
- package/dist/analytics/useAnalytics.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/server/index.d.ts +3 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/utils/agent-ready.d.ts +59 -0
- package/dist/utils/agent-ready.d.ts.map +1 -0
- package/dist/utils/agent-ready.js +172 -0
- package/dist/utils/agent-ready.js.map +1 -0
- package/dist/utils/robots.d.ts +54 -0
- package/dist/utils/robots.d.ts.map +1 -1
- package/dist/utils/robots.js +59 -0
- package/dist/utils/robots.js.map +1 -1
- package/docs/llms.md +66 -13
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @se-studio/core-ui
|
|
2
2
|
|
|
3
|
+
## 1.15.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Agent readiness (Band A): Content Signals via `formatRobotsTxt` / `createRobotsTxtResponse`, markdown Accept negotiation path helpers, and discovery Link header builders for marketing sites.
|
|
8
|
+
|
|
9
|
+
## 1.14.9
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 748ba92: Pin @radix-ui/react-slot to 1.3.0 (1.3.1 breaks Next RSC builds with createContext is not a function).
|
|
14
|
+
|
|
15
|
+
## 1.14.8
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- Share a singleton Analytics React context across duplicate package instances and fall back to a no-op adapter instead of throwing, so client hydration no longer white-screens when core-ui is bundled more than once.
|
|
20
|
+
|
|
3
21
|
## 1.14.7
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -411,6 +411,9 @@ const previewConfig = mergeCmsRendererConfig(
|
|
|
411
411
|
#### Utilities
|
|
412
412
|
- **`createRobotsConfig`** - Builds `MetadataRoute.Robots` for `src/app/robots.ts` with shared production disallow defaults; configurable via `pathPrefix`, `apiPrefixes`, `disallowExtra`, `disallowOmit`, and `blockTrackingQueryParams`
|
|
413
413
|
- **`buildRobotsDisallow`** - Returns the production disallow path list (for plain-text robots route handlers)
|
|
414
|
+
- **`formatRobotsTxt` / `createRobotsTxtResponse`** - Plain-text robots.txt including optional Content Signals (`src/app/robots.txt/route.ts`)
|
|
415
|
+
- **`resolveMarkdownNegotiationPath` / `prefersMarkdownAccept` / `htmlPathToMarkdownPath`** - Middleware helpers for `Accept: text/markdown` → existing `/{path}.md` rewrites
|
|
416
|
+
- **`appendAgentDiscoveryLinkHeaders` / `buildAgentDiscoveryLinkValues`** - Homepage/document `Link` headers (`describedby` → `/llms.txt`, alternate markdown)
|
|
414
417
|
- **`buildPageMetadata`** - Generates Next.js metadata object from CMS page model
|
|
415
418
|
- **`handleCmsError`** - Error handling utility for CMS operations
|
|
416
419
|
- **`getRelatedArticles`** - Fetches related articles for collections (limited sets): `contents` article refs provide IDs/order only; display data is always resolved from `contentfulAllArticleLinks` (or `getAllArticleLinks` via `createAppHelpers`) so the `article` cache tag revalidates on publish. Auto-fill uses `filterRelatedArticles`. Tag criteria come from collection tag links, or fall back to `pageContext.tag`, then the current article's tags on article detail pages. See also full-list filtering via `getAllArticleLinks` (below).
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
2
|
import type { AnalyticsAdapter } from './types';
|
|
3
3
|
interface AnalyticsProviderProps {
|
|
4
4
|
adapter: AnalyticsAdapter;
|
|
5
|
-
children:
|
|
5
|
+
children: ReactNode;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Provider component that makes analytics adapter available to child components
|
|
9
9
|
*/
|
|
10
|
-
export declare function AnalyticsProvider({ adapter, children }: AnalyticsProviderProps):
|
|
10
|
+
export declare function AnalyticsProvider({ adapter, children }: AnalyticsProviderProps): import("react").JSX.Element;
|
|
11
11
|
/**
|
|
12
|
-
* Hook to access the analytics adapter from context
|
|
13
|
-
*
|
|
12
|
+
* Hook to access the analytics adapter from context.
|
|
13
|
+
* Returns a no-op adapter when no provider is present so client components never crash
|
|
14
|
+
* the React tree (SSR prerender and defensive client fallback).
|
|
14
15
|
*/
|
|
15
16
|
export declare function useAnalyticsContext(): AnalyticsAdapter;
|
|
16
17
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsProvider.d.ts","sourceRoot":"","sources":["../../src/analytics/AnalyticsProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"AnalyticsProvider.d.ts","sourceRoot":"","sources":["../../src/analytics/AnalyticsProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAgChD,UAAU,sBAAsB;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,sBAAsB,+BAE9E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAYtD"}
|
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { createContext, useContext } from 'react';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
/** Stable global key so duplicate package instances share one React context identity. */
|
|
5
|
+
const GLOBAL_CONTEXT_KEY = '__SE_STUDIO_ANALYTICS_CONTEXT__';
|
|
6
|
+
/**
|
|
7
|
+
* Share one React context identity even when `@se-studio/core-ui` is duplicated in the
|
|
8
|
+
* client bundle (pnpm peer isolation / multi-chunk). Separate module evaluations that each
|
|
9
|
+
* call `createContext()` would otherwise break the provider tree and crash the site with
|
|
10
|
+
* "useAnalyticsContext must be used within an AnalyticsProvider".
|
|
11
|
+
*/
|
|
12
|
+
function getAnalyticsContext() {
|
|
13
|
+
const globalStore = globalThis;
|
|
14
|
+
if (!globalStore[GLOBAL_CONTEXT_KEY]) {
|
|
15
|
+
globalStore[GLOBAL_CONTEXT_KEY] = createContext(null);
|
|
16
|
+
}
|
|
17
|
+
return globalStore[GLOBAL_CONTEXT_KEY];
|
|
18
|
+
}
|
|
19
|
+
const AnalyticsContext = getAnalyticsContext();
|
|
20
|
+
/** Silent no-op when provider is missing (SSR prerender, or no layout provider). */
|
|
21
|
+
const NOOP_ANALYTICS_FALLBACK = {
|
|
7
22
|
trackEvent() { },
|
|
8
23
|
trackPage() { },
|
|
9
24
|
trackClick() { },
|
|
@@ -15,20 +30,19 @@ export function AnalyticsProvider({ adapter, children }) {
|
|
|
15
30
|
return _jsx(AnalyticsContext.Provider, { value: adapter, children: children });
|
|
16
31
|
}
|
|
17
32
|
/**
|
|
18
|
-
* Hook to access the analytics adapter from context
|
|
19
|
-
*
|
|
33
|
+
* Hook to access the analytics adapter from context.
|
|
34
|
+
* Returns a no-op adapter when no provider is present so client components never crash
|
|
35
|
+
* the React tree (SSR prerender and defensive client fallback).
|
|
20
36
|
*/
|
|
21
37
|
export function useAnalyticsContext() {
|
|
22
38
|
const adapter = useContext(AnalyticsContext);
|
|
23
39
|
if (adapter) {
|
|
24
40
|
return adapter;
|
|
25
41
|
}
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (typeof window === 'undefined') {
|
|
30
|
-
return SSR_ANALYTICS_FALLBACK;
|
|
42
|
+
// Dev-only signal that tracking is a no-op (missing layout provider or mis-wiring).
|
|
43
|
+
if (process.env.NODE_ENV !== 'production' && typeof window !== 'undefined') {
|
|
44
|
+
console.warn('[analytics] useAnalyticsContext used without AnalyticsProvider; tracking is a no-op.');
|
|
31
45
|
}
|
|
32
|
-
|
|
46
|
+
return NOOP_ANALYTICS_FALLBACK;
|
|
33
47
|
}
|
|
34
48
|
//# sourceMappingURL=AnalyticsProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsProvider.js","sourceRoot":"","sources":["../../src/analytics/AnalyticsProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD,MAAM,
|
|
1
|
+
{"version":3,"file":"AnalyticsProvider.js","sourceRoot":"","sources":["../../src/analytics/AnalyticsProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD,yFAAyF;AACzF,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AAM7D;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,MAAM,WAAW,GAAG,UAAwC,CAAC;IAC7D,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrC,WAAW,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,WAAW,CAAC,kBAAkB,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;AAE/C,oFAAoF;AACpF,MAAM,uBAAuB,GAAqB;IAChD,UAAU,KAAI,CAAC;IACf,SAAS,KAAI,CAAC;IACd,UAAU,KAAI,CAAC;CAChB,CAAC;AAOF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAA0B;IAC7E,OAAO,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA6B,CAAC;AAC3F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,oFAAoF;IACpF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3E,OAAO,CAAC,IAAI,CACV,sFAAsF,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,uBAAuB,CAAC;AACjC,CAAC"}
|
|
@@ -2,16 +2,14 @@ import type { IAnalyticsContext, ILinkTrackingInfo } from '@se-studio/core-data-
|
|
|
2
2
|
/**
|
|
3
3
|
* Hook for accessing analytics functions.
|
|
4
4
|
*
|
|
5
|
-
* Provides a clean API for tracking events, pages, and clicks.
|
|
6
|
-
*
|
|
5
|
+
* Provides a clean API for tracking events, pages, and clicks. Prefer using
|
|
6
|
+
* inside an `AnalyticsProvider`; without one, calls are silent no-ops.
|
|
7
7
|
*
|
|
8
8
|
* @returns Object with tracking functions:
|
|
9
9
|
* - `trackEvent` - Track custom events
|
|
10
10
|
* - `trackPage` - Track page views
|
|
11
11
|
* - `trackClick` - Track click interactions
|
|
12
12
|
*
|
|
13
|
-
* @throws {Error} If used outside of AnalyticsProvider
|
|
14
|
-
*
|
|
15
13
|
* @example Basic usage
|
|
16
14
|
* ```tsx
|
|
17
15
|
* import { useAnalytics } from '@se-studio/core-ui';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAnalytics.d.ts","sourceRoot":"","sources":["../../src/analytics/useAnalytics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAKvF
|
|
1
|
+
{"version":3,"file":"useAnalytics.d.ts","sourceRoot":"","sources":["../../src/analytics/useAnalytics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAKvF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,YAAY;wBAGhB,MAAM,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBAO7C,MAAM,YAAY,MAAM,oBAAoB,iBAAiB;gCAalD,MAAM,YACX,MAAM,oBACE,iBAAiB,YACzB;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,iBAAiB,CAAC;KAClC;EAsBN"}
|
|
@@ -4,16 +4,14 @@ import { useAnalyticsContext } from './AnalyticsProvider';
|
|
|
4
4
|
/**
|
|
5
5
|
* Hook for accessing analytics functions.
|
|
6
6
|
*
|
|
7
|
-
* Provides a clean API for tracking events, pages, and clicks.
|
|
8
|
-
*
|
|
7
|
+
* Provides a clean API for tracking events, pages, and clicks. Prefer using
|
|
8
|
+
* inside an `AnalyticsProvider`; without one, calls are silent no-ops.
|
|
9
9
|
*
|
|
10
10
|
* @returns Object with tracking functions:
|
|
11
11
|
* - `trackEvent` - Track custom events
|
|
12
12
|
* - `trackPage` - Track page views
|
|
13
13
|
* - `trackClick` - Track click interactions
|
|
14
14
|
*
|
|
15
|
-
* @throws {Error} If used outside of AnalyticsProvider
|
|
16
|
-
*
|
|
17
15
|
* @example Basic usage
|
|
18
16
|
* ```tsx
|
|
19
17
|
* import { useAnalytics } from '@se-studio/core-ui';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAnalytics.js","sourceRoot":"","sources":["../../src/analytics/useAnalytics.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D
|
|
1
|
+
{"version":3,"file":"useAnalytics.js","sourceRoot":"","sources":["../../src/analytics/useAnalytics.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,KAAa,EAAE,UAAmC,EAAE,EAAE;QACrD,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,GAAW,EAAE,QAAgB,EAAE,gBAAmC,EAAE,EAAE;QACrE,MAAM,UAAU,GAA2B;YACzC,GAAG;YACH,QAAQ;YACR,GAAG,gBAAgB;SACpB,CAAC;QACF,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAC5B,CACE,aAAqB,EACrB,QAAgB,EAChB,gBAAmC,EACnC,OAIC,EACD,EAAE;QACF,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,UAAU,GAA4B;YAC1C,aAAa;YACb,GAAG;YACH,QAAQ;YACR,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,GAAG,gBAAgB;SACpB,CAAC;QACF,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO;QACL,UAAU;QACV,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -88,6 +88,7 @@ export { RTF } from './rtf/rtf';
|
|
|
88
88
|
export type { BasicLayoutProps, BreadcrumbOptions, CmsRouteConfig } from './server/route-types';
|
|
89
89
|
export { toBreadcrumbOptions } from './server/route-types';
|
|
90
90
|
export * from './showcase';
|
|
91
|
+
export { appendAgentDiscoveryLinkHeaders, buildAgentDiscoveryLinkValues, htmlPathToMarkdownPath, prefersMarkdownAccept, resolveMarkdownNegotiationPath, } from './utils/agent-ready';
|
|
91
92
|
export { assertValidSiteBaseUrl } from './utils/assertValidSiteBaseUrl';
|
|
92
93
|
export type { BreadcrumbLookup, BreadcrumbLookupEntry, BreadcrumbSegment, ResolveBreadcrumbSegmentsOptions, } from './utils/breadcrumbUtils';
|
|
93
94
|
export { normalizeBreadcrumbPath, resolveBreadcrumbSegments, } from './utils/breadcrumbUtils';
|
|
@@ -108,8 +109,8 @@ export type { IContent } from './utils/previewUtils';
|
|
|
108
109
|
export { coreGetPreviewAssetIdProps, coreGetPreviewFieldIdProps, coreGetPreviewParentProps, coreGetPreviewProps, getPreviewFieldProps, getPreviewResponsiveVisualFieldProps, } from './utils/previewUtils';
|
|
109
110
|
export { processCollectionLinks } from './utils/processCollectionLinks';
|
|
110
111
|
export { processTextContent } from './utils/processTextContent';
|
|
111
|
-
export type { CreateRobotsConfigOptions } from './utils/robots';
|
|
112
|
-
export { buildRobotsDisallow, createRobotsConfig, DEFAULT_ROBOTS_DISALLOW, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
|
|
112
|
+
export type { ContentSignalPreference, ContentSignals, CreateRobotsConfigOptions, FormatRobotsTxtOptions, } from './utils/robots';
|
|
113
|
+
export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
|
|
113
114
|
export { scopeCss } from './utils/scopeCss';
|
|
114
115
|
export type { GenerateSitemapOptions, SitemapChangeFrequency, SitemapEntry, SitemapSource, } from './utils/sitemap';
|
|
115
116
|
export { buildSitemap, deduplicateSitemapEntries, generateNextSitemap, sitemapToXml, sortSitemapEntries, } from './utils/sitemap';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -83,6 +83,7 @@ export { RTF } from './rtf/rtf';
|
|
|
83
83
|
export { toBreadcrumbOptions } from './server/route-types';
|
|
84
84
|
// CMS Showcase
|
|
85
85
|
export * from './showcase';
|
|
86
|
+
export { appendAgentDiscoveryLinkHeaders, buildAgentDiscoveryLinkValues, htmlPathToMarkdownPath, prefersMarkdownAccept, resolveMarkdownNegotiationPath, } from './utils/agent-ready';
|
|
86
87
|
export { assertValidSiteBaseUrl } from './utils/assertValidSiteBaseUrl';
|
|
87
88
|
export { normalizeBreadcrumbPath, resolveBreadcrumbSegments, } from './utils/breadcrumbUtils';
|
|
88
89
|
export { buildPageMetadata, calculateTitleAndDescription, formatSiteGeneratorContent, getLocalizedPath, resolveMetadataAuthors, } from './utils/buildPageMetadata';
|
|
@@ -98,7 +99,7 @@ export { validatePreviewSecret } from './utils/previewPageUtils';
|
|
|
98
99
|
export { coreGetPreviewAssetIdProps, coreGetPreviewFieldIdProps, coreGetPreviewParentProps, coreGetPreviewProps, getPreviewFieldProps, getPreviewResponsiveVisualFieldProps, } from './utils/previewUtils';
|
|
99
100
|
export { processCollectionLinks } from './utils/processCollectionLinks';
|
|
100
101
|
export { processTextContent } from './utils/processTextContent';
|
|
101
|
-
export { buildRobotsDisallow, createRobotsConfig, DEFAULT_ROBOTS_DISALLOW, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
|
|
102
|
+
export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
|
|
102
103
|
export { scopeCss } from './utils/scopeCss';
|
|
103
104
|
export { buildSitemap, deduplicateSitemapEntries, generateNextSitemap, sitemapToXml, sortSitemapEntries, } from './utils/sitemap';
|
|
104
105
|
export { buildStructuredDataContext } from './utils/structuredDataUtils';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -3,11 +3,12 @@ export type { RelatedArticlesOptions } from '@se-studio/contentful-rest-api';
|
|
|
3
3
|
export { filterRelatedArticles } from '@se-studio/contentful-rest-api';
|
|
4
4
|
export type { AppHelpers, AppHelpersConfig, AppHelpersWithSitemap, } from '../app-helpers';
|
|
5
5
|
export { createAppHelpers } from '../app-helpers';
|
|
6
|
+
export { appendAgentDiscoveryLinkHeaders, buildAgentDiscoveryLinkValues, htmlPathToMarkdownPath, prefersMarkdownAccept, resolveMarkdownNegotiationPath, } from '../utils/agent-ready';
|
|
6
7
|
export { getRelatedArticles, getRelatedPeople, getRelatedTags, } from '../utils/componentUtils';
|
|
7
8
|
export type { BuildListingItemsOptions, ListingFetchHelpers, ListingStructuredDataItem, } from '../utils/listingStructuredData';
|
|
8
9
|
export { buildListingItems, buildListingStructuredDataContext, } from '../utils/listingStructuredData';
|
|
9
|
-
export type { CreateRobotsConfigOptions } from '../utils/robots';
|
|
10
|
-
export { buildRobotsDisallow, createRobotsConfig, DEFAULT_ROBOTS_DISALLOW, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
|
|
10
|
+
export type { ContentSignalPreference, ContentSignals, CreateRobotsConfigOptions, FormatRobotsTxtOptions, } from '../utils/robots';
|
|
11
|
+
export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
|
|
11
12
|
export type { RouteHandlersConfig } from './route-handlers';
|
|
12
13
|
export { createRouteHandlers } from './route-handlers';
|
|
13
14
|
export type { CmsPagePreparationResult, PrepareArticlePageInput, PrepareArticleTypePageInput, PrepareArticleTypesIndexPageInput, PrepareArticleTypeTagPageInput, PrepareCustomTypePageInput, PreparePageInput, PreparePersonPageInput, PrepareTagPageInput, PrepareTagsIndexPageInput, PrepareTeamIndexPageInput, RouteHandlersPrepareHooks, } from './route-handlers-types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AACxC,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,uBAAuB,EACvB,cAAc,EACd,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,iCAAiC,EACjC,8BAA8B,EAC9B,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import 'server-only';
|
|
2
2
|
export { filterRelatedArticles } from '@se-studio/contentful-rest-api';
|
|
3
3
|
export { createAppHelpers } from '../app-helpers';
|
|
4
|
+
export { appendAgentDiscoveryLinkHeaders, buildAgentDiscoveryLinkValues, htmlPathToMarkdownPath, prefersMarkdownAccept, resolveMarkdownNegotiationPath, } from '../utils/agent-ready';
|
|
4
5
|
export { getRelatedArticles, getRelatedPeople, getRelatedTags, } from '../utils/componentUtils';
|
|
5
6
|
export { buildListingItems, buildListingStructuredDataContext, } from '../utils/listingStructuredData';
|
|
6
|
-
export { buildRobotsDisallow, createRobotsConfig, DEFAULT_ROBOTS_DISALLOW, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
|
|
7
|
+
export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
|
|
7
8
|
export { createRouteHandlers } from './route-handlers';
|
|
8
9
|
export { toBreadcrumbOptions } from './route-types';
|
|
9
10
|
export { canRenderArticleTypeTagRoute, canRenderTagIndex } from './tag-index-guards';
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAMvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAMvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AAOxC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAuBvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent-readiness helpers for marketing sites (Band A):
|
|
3
|
+
* - Markdown content negotiation path mapping (`Accept: text/markdown`)
|
|
4
|
+
* - Discovery Link header values (RFC 8288)
|
|
5
|
+
*
|
|
6
|
+
* Pure utilities — wire from Next.js middleware with `NextResponse.rewrite` /
|
|
7
|
+
* `headers.append`. Does not import `next/server` so the main barrel stays
|
|
8
|
+
* client-safe.
|
|
9
|
+
*
|
|
10
|
+
* @see https://isitagentready.com/
|
|
11
|
+
* @see https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Whether the client prefers `text/markdown` over `text/html`.
|
|
15
|
+
*
|
|
16
|
+
* Returns true when:
|
|
17
|
+
* - `text/markdown` is present and `text/html` is not, or
|
|
18
|
+
* - `text/markdown` has a strictly higher `q` than `text/html`.
|
|
19
|
+
*
|
|
20
|
+
* Returns false for empty Accept, HTML-only browser defaults, and equal-q
|
|
21
|
+
* markdown+html (prefer HTML to avoid surprising dual listings).
|
|
22
|
+
*/
|
|
23
|
+
export declare function prefersMarkdownAccept(acceptHeader: string | null | undefined): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Map a public HTML pathname to the site's markdown export path.
|
|
26
|
+
*
|
|
27
|
+
* Conventions match SE Studio rewrites:
|
|
28
|
+
* - `/` → `/index.md`
|
|
29
|
+
* - `/about/` → `/about.md`
|
|
30
|
+
* - `/blog/slug/` → `/blog/slug.md`
|
|
31
|
+
*
|
|
32
|
+
* Returns `null` when the path is already markdown, a static asset, or an
|
|
33
|
+
* infrastructure prefix that should not negotiate.
|
|
34
|
+
*/
|
|
35
|
+
export declare function htmlPathToMarkdownPath(pathname: string): string | null;
|
|
36
|
+
/**
|
|
37
|
+
* If Accept prefers markdown, return the rewrite pathname; otherwise `null`.
|
|
38
|
+
* Middleware should `NextResponse.rewrite` to this path and set `Vary: Accept`.
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveMarkdownNegotiationPath(pathname: string, acceptHeader: string | null | undefined): string | null;
|
|
41
|
+
/**
|
|
42
|
+
* Build Link header values for agent discovery on HTML document responses.
|
|
43
|
+
*
|
|
44
|
+
* Always includes `describedby` → `/llms.txt` (registered relation for
|
|
45
|
+
* isitagentready linkHeaders). Adds `alternate` markdown when mappable.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* for (const value of buildAgentDiscoveryLinkValues('/about/')) {
|
|
49
|
+
* response.headers.append('Link', value);
|
|
50
|
+
* }
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildAgentDiscoveryLinkValues(pathname: string): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Append agent discovery Link headers onto a headers bag (e.g. NextResponse.headers).
|
|
55
|
+
*/
|
|
56
|
+
export declare function appendAgentDiscoveryLinkHeaders(headers: {
|
|
57
|
+
append: (name: string, value: string) => void;
|
|
58
|
+
}, pathname: string): void;
|
|
59
|
+
//# sourceMappingURL=agent-ready.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-ready.d.ts","sourceRoot":"","sources":["../../src/utils/agent-ready.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsEH;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAiBtF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqCtE;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CASxE;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,EAC1D,QAAQ,EAAE,MAAM,GACf,IAAI,CAIN"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent-readiness helpers for marketing sites (Band A):
|
|
3
|
+
* - Markdown content negotiation path mapping (`Accept: text/markdown`)
|
|
4
|
+
* - Discovery Link header values (RFC 8288)
|
|
5
|
+
*
|
|
6
|
+
* Pure utilities — wire from Next.js middleware with `NextResponse.rewrite` /
|
|
7
|
+
* `headers.append`. Does not import `next/server` so the main barrel stays
|
|
8
|
+
* client-safe.
|
|
9
|
+
*
|
|
10
|
+
* @see https://isitagentready.com/
|
|
11
|
+
* @see https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/
|
|
12
|
+
*/
|
|
13
|
+
/** Path prefixes that should never negotiate to markdown. */
|
|
14
|
+
const MARKDOWN_NEGOTIATION_SKIP_PREFIXES = [
|
|
15
|
+
'/_next',
|
|
16
|
+
'/api/',
|
|
17
|
+
'/og/',
|
|
18
|
+
'/cms/',
|
|
19
|
+
'/preview/',
|
|
20
|
+
'/page-test/',
|
|
21
|
+
'/_video/',
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* Parse an HTTP Accept header into media ranges with quality values.
|
|
25
|
+
* Invalid / missing q defaults to 1.
|
|
26
|
+
*/
|
|
27
|
+
function parseAcceptHeader(accept) {
|
|
28
|
+
const ranges = [];
|
|
29
|
+
for (const part of accept.split(',')) {
|
|
30
|
+
const trimmed = part.trim();
|
|
31
|
+
if (!trimmed) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const segments = trimmed.split(';');
|
|
35
|
+
const type = (segments[0] ?? '').trim().toLowerCase();
|
|
36
|
+
if (!type) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
let q = 1;
|
|
40
|
+
for (let i = 1; i < segments.length; i++) {
|
|
41
|
+
const param = (segments[i] ?? '').trim();
|
|
42
|
+
const eq = param.indexOf('=');
|
|
43
|
+
if (eq === -1) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const key = param.slice(0, eq).trim().toLowerCase();
|
|
47
|
+
const value = param.slice(eq + 1).trim();
|
|
48
|
+
if (key === 'q') {
|
|
49
|
+
const parsed = Number.parseFloat(value);
|
|
50
|
+
if (!Number.isNaN(parsed)) {
|
|
51
|
+
q = parsed;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
ranges.push({ type, q });
|
|
56
|
+
}
|
|
57
|
+
return ranges;
|
|
58
|
+
}
|
|
59
|
+
function maxQ(ranges, mediaType) {
|
|
60
|
+
let max;
|
|
61
|
+
for (const range of ranges) {
|
|
62
|
+
if (range.type === mediaType) {
|
|
63
|
+
max = max === undefined ? range.q : Math.max(max, range.q);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return max;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Whether the client prefers `text/markdown` over `text/html`.
|
|
70
|
+
*
|
|
71
|
+
* Returns true when:
|
|
72
|
+
* - `text/markdown` is present and `text/html` is not, or
|
|
73
|
+
* - `text/markdown` has a strictly higher `q` than `text/html`.
|
|
74
|
+
*
|
|
75
|
+
* Returns false for empty Accept, HTML-only browser defaults, and equal-q
|
|
76
|
+
* markdown+html (prefer HTML to avoid surprising dual listings).
|
|
77
|
+
*/
|
|
78
|
+
export function prefersMarkdownAccept(acceptHeader) {
|
|
79
|
+
if (!acceptHeader?.trim()) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
const ranges = parseAcceptHeader(acceptHeader);
|
|
83
|
+
const markdownQ = maxQ(ranges, 'text/markdown');
|
|
84
|
+
if (markdownQ === undefined) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
const htmlQ = maxQ(ranges, 'text/html');
|
|
88
|
+
if (htmlQ === undefined) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
return markdownQ > htmlQ;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Map a public HTML pathname to the site's markdown export path.
|
|
95
|
+
*
|
|
96
|
+
* Conventions match SE Studio rewrites:
|
|
97
|
+
* - `/` → `/index.md`
|
|
98
|
+
* - `/about/` → `/about.md`
|
|
99
|
+
* - `/blog/slug/` → `/blog/slug.md`
|
|
100
|
+
*
|
|
101
|
+
* Returns `null` when the path is already markdown, a static asset, or an
|
|
102
|
+
* infrastructure prefix that should not negotiate.
|
|
103
|
+
*/
|
|
104
|
+
export function htmlPathToMarkdownPath(pathname) {
|
|
105
|
+
if (!pathname || pathname.includes('..') || pathname.includes('\\')) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
const pathOnly = pathname.split('?')[0]?.split('#')[0] ?? pathname;
|
|
109
|
+
for (const prefix of MARKDOWN_NEGOTIATION_SKIP_PREFIXES) {
|
|
110
|
+
if (pathOnly === prefix.replace(/\/$/, '') || pathOnly.startsWith(prefix)) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Root
|
|
115
|
+
if (pathOnly === '/' || pathOnly === '') {
|
|
116
|
+
return '/index.md';
|
|
117
|
+
}
|
|
118
|
+
const lastSegment = pathOnly.split('/').filter(Boolean).pop() ?? '';
|
|
119
|
+
// Already a file-like path with an extension
|
|
120
|
+
if (lastSegment.includes('.')) {
|
|
121
|
+
if (lastSegment.endsWith('.md')) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
// Other static-like extensions
|
|
125
|
+
if (/\.[a-zA-Z0-9]{1,12}$/.test(lastSegment)) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const withoutTrailingSlash = pathOnly.endsWith('/') ? pathOnly.slice(0, -1) : pathOnly;
|
|
130
|
+
if (!withoutTrailingSlash || withoutTrailingSlash === '/') {
|
|
131
|
+
return '/index.md';
|
|
132
|
+
}
|
|
133
|
+
return `${withoutTrailingSlash}.md`;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* If Accept prefers markdown, return the rewrite pathname; otherwise `null`.
|
|
137
|
+
* Middleware should `NextResponse.rewrite` to this path and set `Vary: Accept`.
|
|
138
|
+
*/
|
|
139
|
+
export function resolveMarkdownNegotiationPath(pathname, acceptHeader) {
|
|
140
|
+
if (!prefersMarkdownAccept(acceptHeader)) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
return htmlPathToMarkdownPath(pathname);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Build Link header values for agent discovery on HTML document responses.
|
|
147
|
+
*
|
|
148
|
+
* Always includes `describedby` → `/llms.txt` (registered relation for
|
|
149
|
+
* isitagentready linkHeaders). Adds `alternate` markdown when mappable.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* for (const value of buildAgentDiscoveryLinkValues('/about/')) {
|
|
153
|
+
* response.headers.append('Link', value);
|
|
154
|
+
* }
|
|
155
|
+
*/
|
|
156
|
+
export function buildAgentDiscoveryLinkValues(pathname) {
|
|
157
|
+
const links = ['</llms.txt>; rel="describedby"'];
|
|
158
|
+
const markdownPath = htmlPathToMarkdownPath(pathname);
|
|
159
|
+
if (markdownPath) {
|
|
160
|
+
links.push(`<${markdownPath}>; rel="alternate"; type="text/markdown"`);
|
|
161
|
+
}
|
|
162
|
+
return links;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Append agent discovery Link headers onto a headers bag (e.g. NextResponse.headers).
|
|
166
|
+
*/
|
|
167
|
+
export function appendAgentDiscoveryLinkHeaders(headers, pathname) {
|
|
168
|
+
for (const value of buildAgentDiscoveryLinkValues(pathname)) {
|
|
169
|
+
headers.append('Link', value);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=agent-ready.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-ready.js","sourceRoot":"","sources":["../../src/utils/agent-ready.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/robots.d.ts
CHANGED
|
@@ -7,6 +7,20 @@ export declare const DEFAULT_ROBOTS_DISALLOW: readonly ["/*?_rsc=*", "/_next/dat
|
|
|
7
7
|
* help other crawlers and audit tooling but are not a complete Google fix.
|
|
8
8
|
*/
|
|
9
9
|
export declare const TRACKING_QUERY_ROBOTS_DISALLOW: readonly ["/*?_gl=*", "/*?nnerid=*", "/*?ref=*"];
|
|
10
|
+
/** Yes/no preference for Content Signals (contentsignals.org). */
|
|
11
|
+
export type ContentSignalPreference = 'yes' | 'no';
|
|
12
|
+
/**
|
|
13
|
+
* AI usage preferences for robots.txt Content-Signal directives.
|
|
14
|
+
* @see https://contentsignals.org/
|
|
15
|
+
*/
|
|
16
|
+
export interface ContentSignals {
|
|
17
|
+
/** Building a search index / classic search results. */
|
|
18
|
+
search: ContentSignalPreference;
|
|
19
|
+
/** Training or fine-tuning AI models. */
|
|
20
|
+
aiTrain: ContentSignalPreference;
|
|
21
|
+
/** Using content as AI input (RAG, grounding, inference). */
|
|
22
|
+
aiInput: ContentSignalPreference;
|
|
23
|
+
}
|
|
10
24
|
export interface CreateRobotsConfigOptions {
|
|
11
25
|
isProduction: boolean;
|
|
12
26
|
baseUrl: string;
|
|
@@ -39,6 +53,15 @@ export interface CreateRobotsConfigOptions {
|
|
|
39
53
|
allow: string;
|
|
40
54
|
}>;
|
|
41
55
|
}
|
|
56
|
+
/** Options for plain-text robots.txt (supports Content-Signal). */
|
|
57
|
+
export interface FormatRobotsTxtOptions extends CreateRobotsConfigOptions {
|
|
58
|
+
/**
|
|
59
|
+
* When set (production only), emit a Content-Signal line under `User-agent: *`.
|
|
60
|
+
* Next.js `MetadataRoute.Robots` cannot express this — use `formatRobotsTxt` /
|
|
61
|
+
* `createRobotsTxtResponse` in `src/app/robots.txt/route.ts` instead of `robots.ts`.
|
|
62
|
+
*/
|
|
63
|
+
contentSignals?: ContentSignals;
|
|
64
|
+
}
|
|
42
65
|
/**
|
|
43
66
|
* Builds the production disallow path list from options.
|
|
44
67
|
* Exported for tests and sites that render plain-text robots (e.g. Brightline Content-Signal).
|
|
@@ -49,6 +72,37 @@ export declare function buildRobotsDisallow(options: CreateRobotsConfigOptions):
|
|
|
49
72
|
*
|
|
50
73
|
* In production: allows `/` and disallows internal/infrastructure paths.
|
|
51
74
|
* In non-production: disallows all crawlers (with optional staging bot allowlist).
|
|
75
|
+
*
|
|
76
|
+
* **Content-Signal:** not supported here (Next metadata type). Use
|
|
77
|
+
* {@link formatRobotsTxt} / {@link createRobotsTxtResponse} in a route handler.
|
|
52
78
|
*/
|
|
53
79
|
export declare function createRobotsConfig(options: CreateRobotsConfigOptions): MetadataRoute.Robots;
|
|
80
|
+
/**
|
|
81
|
+
* Formats a single Content-Signal directive line (no trailing newline).
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* formatContentSignalLine({ search: 'yes', aiTrain: 'no', aiInput: 'yes' })
|
|
85
|
+
* // → 'Content-Signal: search=yes, ai-train=no, ai-input=yes'
|
|
86
|
+
*/
|
|
87
|
+
export declare function formatContentSignalLine(signals: ContentSignals): string;
|
|
88
|
+
/**
|
|
89
|
+
* Builds a full plain-text robots.txt body, including optional Content-Signal.
|
|
90
|
+
*
|
|
91
|
+
* Prefer this over `createRobotsConfig` when you need Content Signals or other
|
|
92
|
+
* non-standard directives. Serve from `src/app/robots.txt/route.ts`.
|
|
93
|
+
*/
|
|
94
|
+
export declare function formatRobotsTxt(options: FormatRobotsTxtOptions): string;
|
|
95
|
+
/**
|
|
96
|
+
* Returns a `text/plain` Response for `src/app/robots.txt/route.ts`.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* export function GET() {
|
|
100
|
+
* return createRobotsTxtResponse({
|
|
101
|
+
* isProduction,
|
|
102
|
+
* baseUrl,
|
|
103
|
+
* contentSignals: { search: 'yes', aiTrain: 'no', aiInput: 'yes' },
|
|
104
|
+
* });
|
|
105
|
+
* }
|
|
106
|
+
*/
|
|
107
|
+
export declare function createRobotsTxtResponse(options: FormatRobotsTxtOptions): Response;
|
|
54
108
|
//# sourceMappingURL=robots.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,8FAQ1B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,kDAAmD,CAAC;AAE/F,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,4CAA4C;IAC5C,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AA2CD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,EAAE,CAwBhF;AAED
|
|
1
|
+
{"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,8FAQ1B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,kDAAmD,CAAC;AAE/F,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,IAAI,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,MAAM,EAAE,uBAAuB,CAAC;IAChC,yCAAyC;IACzC,OAAO,EAAE,uBAAuB,CAAC;IACjC,6DAA6D;IAC7D,OAAO,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,4CAA4C;IAC5C,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,mEAAmE;AACnE,MAAM,WAAW,sBAAuB,SAAQ,yBAAyB;IACvE;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AA2CD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,EAAE,CAwBhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,aAAa,CAAC,MAAM,CAiC3F;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CA8BvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,sBAAsB,GAAG,QAAQ,CAIjF"}
|
package/dist/utils/robots.js
CHANGED
|
@@ -75,6 +75,9 @@ export function buildRobotsDisallow(options) {
|
|
|
75
75
|
*
|
|
76
76
|
* In production: allows `/` and disallows internal/infrastructure paths.
|
|
77
77
|
* In non-production: disallows all crawlers (with optional staging bot allowlist).
|
|
78
|
+
*
|
|
79
|
+
* **Content-Signal:** not supported here (Next metadata type). Use
|
|
80
|
+
* {@link formatRobotsTxt} / {@link createRobotsTxtResponse} in a route handler.
|
|
78
81
|
*/
|
|
79
82
|
export function createRobotsConfig(options) {
|
|
80
83
|
const sitemap = options.sitemapUrl ?? `${options.baseUrl}/sitemap.xml`;
|
|
@@ -106,4 +109,60 @@ export function createRobotsConfig(options) {
|
|
|
106
109
|
sitemap,
|
|
107
110
|
};
|
|
108
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Formats a single Content-Signal directive line (no trailing newline).
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* formatContentSignalLine({ search: 'yes', aiTrain: 'no', aiInput: 'yes' })
|
|
117
|
+
* // → 'Content-Signal: search=yes, ai-train=no, ai-input=yes'
|
|
118
|
+
*/
|
|
119
|
+
export function formatContentSignalLine(signals) {
|
|
120
|
+
return `Content-Signal: search=${signals.search}, ai-train=${signals.aiTrain}, ai-input=${signals.aiInput}`;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Builds a full plain-text robots.txt body, including optional Content-Signal.
|
|
124
|
+
*
|
|
125
|
+
* Prefer this over `createRobotsConfig` when you need Content Signals or other
|
|
126
|
+
* non-standard directives. Serve from `src/app/robots.txt/route.ts`.
|
|
127
|
+
*/
|
|
128
|
+
export function formatRobotsTxt(options) {
|
|
129
|
+
const sitemap = options.sitemapUrl ?? `${options.baseUrl}/sitemap.xml`;
|
|
130
|
+
if (!options.isProduction) {
|
|
131
|
+
const lines = ['User-agent: *', 'Disallow: /'];
|
|
132
|
+
if (options.stagingAllowRules?.length) {
|
|
133
|
+
for (const rule of options.stagingAllowRules) {
|
|
134
|
+
lines.push('', `User-agent: ${rule.userAgent}`, `Allow: ${rule.allow}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
lines.push('', `Sitemap: ${sitemap}`, '');
|
|
138
|
+
return lines.join('\n');
|
|
139
|
+
}
|
|
140
|
+
const lines = ['User-agent: *'];
|
|
141
|
+
if (options.contentSignals) {
|
|
142
|
+
lines.push(formatContentSignalLine(options.contentSignals));
|
|
143
|
+
}
|
|
144
|
+
lines.push('Allow: /');
|
|
145
|
+
for (const path of buildRobotsDisallow(options)) {
|
|
146
|
+
lines.push(`Disallow: ${path}`);
|
|
147
|
+
}
|
|
148
|
+
lines.push('', `Sitemap: ${sitemap}`, '');
|
|
149
|
+
return lines.join('\n');
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Returns a `text/plain` Response for `src/app/robots.txt/route.ts`.
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* export function GET() {
|
|
156
|
+
* return createRobotsTxtResponse({
|
|
157
|
+
* isProduction,
|
|
158
|
+
* baseUrl,
|
|
159
|
+
* contentSignals: { search: 'yes', aiTrain: 'no', aiInput: 'yes' },
|
|
160
|
+
* });
|
|
161
|
+
* }
|
|
162
|
+
*/
|
|
163
|
+
export function createRobotsTxtResponse(options) {
|
|
164
|
+
return new Response(formatRobotsTxt(options), {
|
|
165
|
+
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
|
|
166
|
+
});
|
|
167
|
+
}
|
|
109
168
|
//# sourceMappingURL=robots.js.map
|
package/dist/utils/robots.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAEA,uEAAuE;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,WAAW;IACX,cAAc;IACd,OAAO;IACP,WAAW;IACX,aAAa;IACb,OAAO;IACP,MAAM;CACE,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"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"}
|
package/docs/llms.md
CHANGED
|
@@ -164,7 +164,9 @@ JSON-LD (`buildStructuredDataContext`) remains the primary signal for multi-auth
|
|
|
164
164
|
|
|
165
165
|
## robots.txt
|
|
166
166
|
|
|
167
|
-
|
|
167
|
+
### Metadata route (no Content-Signal)
|
|
168
|
+
|
|
169
|
+
Use `createRobotsConfig` in `src/app/robots.ts` when you do not need Content Signals:
|
|
168
170
|
|
|
169
171
|
```ts
|
|
170
172
|
import { createRobotsConfig } from '@se-studio/core-ui';
|
|
@@ -180,21 +182,72 @@ Default production disallows: `/*?_rsc=*`, `/_next/data/`, `/api/`, `/preview/`,
|
|
|
180
182
|
|
|
181
183
|
**Split-domain sites (Point Me):** pass `pathPrefix` (`SITE_PREFIX`), extra `apiPrefixes` (`/marketing-api/`), `disallowExtra`, `disallowOmit`, and `blockTrackingQueryParams` as needed. Query-string disallows help non-Google crawlers; Google matches path only — pair with strong canonicals.
|
|
182
184
|
|
|
185
|
+
### Content Signals (recommended for agent readiness)
|
|
186
|
+
|
|
187
|
+
Next.js `MetadataRoute.Robots` cannot emit `Content-Signal`. Use a route handler:
|
|
188
|
+
|
|
183
189
|
```ts
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
190
|
+
// src/app/robots.txt/route.ts
|
|
191
|
+
import { createRobotsTxtResponse } from '@se-studio/core-ui';
|
|
192
|
+
import { isProduction } from '@/lib/config';
|
|
193
|
+
import { baseUrl } from '@/lib/server-config';
|
|
194
|
+
|
|
195
|
+
export function GET() {
|
|
196
|
+
return createRobotsTxtResponse({
|
|
197
|
+
isProduction,
|
|
198
|
+
baseUrl,
|
|
199
|
+
contentSignals: { search: 'yes', aiTrain: 'no', aiInput: 'yes' },
|
|
200
|
+
// disallowExtra: ['/private/'],
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Also: `formatRobotsTxt`, `formatContentSignalLine`, `buildRobotsDisallow`.
|
|
206
|
+
|
|
207
|
+
## Agent readiness (Band A)
|
|
208
|
+
|
|
209
|
+
Helpers for marketing sites that already expose `/{path}.md` and `/llms.txt`:
|
|
210
|
+
|
|
211
|
+
```ts
|
|
212
|
+
// middleware.ts — before A/B rewrites
|
|
213
|
+
import {
|
|
214
|
+
appendAgentDiscoveryLinkHeaders,
|
|
215
|
+
resolveMarkdownNegotiationPath,
|
|
216
|
+
} from '@se-studio/core-ui';
|
|
217
|
+
import { type NextRequest, NextResponse } from 'next/server';
|
|
218
|
+
|
|
219
|
+
export function middleware(request: NextRequest) {
|
|
220
|
+
const { pathname } = request.nextUrl;
|
|
221
|
+
|
|
222
|
+
const markdownPath = resolveMarkdownNegotiationPath(
|
|
223
|
+
pathname,
|
|
224
|
+
request.headers.get('accept'),
|
|
225
|
+
);
|
|
226
|
+
if (markdownPath) {
|
|
227
|
+
const url = request.nextUrl.clone();
|
|
228
|
+
url.pathname = markdownPath;
|
|
229
|
+
const response = NextResponse.rewrite(url);
|
|
230
|
+
response.headers.set('Vary', 'Accept');
|
|
231
|
+
return response;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const response = NextResponse.next();
|
|
235
|
+
appendAgentDiscoveryLinkHeaders(response.headers, pathname);
|
|
236
|
+
// Ensure caches vary on Accept if you also negotiate elsewhere
|
|
237
|
+
const vary = response.headers.get('Vary');
|
|
238
|
+
if (!vary?.toLowerCase().includes('accept')) {
|
|
239
|
+
response.headers.set('Vary', vary ? `${vary}, Accept` : 'Accept');
|
|
240
|
+
}
|
|
241
|
+
return response;
|
|
242
|
+
}
|
|
195
243
|
```
|
|
196
244
|
|
|
197
|
-
|
|
245
|
+
| Helper | Purpose |
|
|
246
|
+
|--------|---------|
|
|
247
|
+
| `prefersMarkdownAccept` | Parse Accept; true when markdown preferred over HTML |
|
|
248
|
+
| `htmlPathToMarkdownPath` | `/` → `/index.md`, `/about/` → `/about.md` |
|
|
249
|
+
| `resolveMarkdownNegotiationPath` | Combine both for middleware rewrite target |
|
|
250
|
+
| `buildAgentDiscoveryLinkValues` / `appendAgentDiscoveryLinkHeaders` | `Link: </llms.txt>; rel="describedby"` + alternate markdown |
|
|
198
251
|
|
|
199
252
|
### Person profile pages
|
|
200
253
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@se-studio/core-ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.0",
|
|
4
4
|
"description": "Shared React UI component library with Tailwind CSS v4 for SE Studio applications",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -64,10 +64,10 @@
|
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@contentful/live-preview": "^4.10.
|
|
67
|
+
"@contentful/live-preview": "^4.10.12",
|
|
68
68
|
"@contentful/rich-text-react-renderer": "^16.2.1",
|
|
69
69
|
"@contentful/rich-text-types": "^17.2.7",
|
|
70
|
-
"@radix-ui/react-slot": "
|
|
70
|
+
"@radix-ui/react-slot": "1.3.0",
|
|
71
71
|
"@types/mustache": "4.2.6",
|
|
72
72
|
"clsx": "^2.1.1",
|
|
73
73
|
"hls.js": "^1.6.16",
|
|
@@ -79,14 +79,14 @@
|
|
|
79
79
|
"@se-studio/core-data-types": "1.6.1"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
|
-
"@biomejs/biome": "^2.5.
|
|
83
|
-
"@types/node": "^24.13.
|
|
82
|
+
"@biomejs/biome": "^2.5.5",
|
|
83
|
+
"@types/node": "^24.13.3",
|
|
84
84
|
"@types/react": "^19.2.17",
|
|
85
85
|
"@types/react-dom": "^19.2.3",
|
|
86
86
|
"jsdom": "^29.1.1",
|
|
87
|
-
"next": "^15.5.
|
|
87
|
+
"next": "^15.5.21",
|
|
88
88
|
"typescript": "^6.0.3",
|
|
89
|
-
"vitest": "^4.1.
|
|
89
|
+
"vitest": "^4.1.10"
|
|
90
90
|
},
|
|
91
91
|
"scripts": {
|
|
92
92
|
"build": "tsc --project tsconfig.build.json",
|