@se-studio/contentful-rest-api 1.26.7 → 1.27.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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @se-studio/contentful-rest-api
2
2
 
3
+ ## 1.27.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Add `contentfulOgImageUrl` to force JPEG Images API params for next/og Satori input (does not change public og:image URLs).
8
+
3
9
  ## 1.26.7
4
10
 
5
11
  ### Patch Changes
@@ -0,0 +1,8 @@
1
+ /** Shared Images API host / raster checks for origin caps and OG JPEG URLs. */
2
+ export declare function hostnameOf(url: URL): string;
3
+ export declare function isContentfulImageCdn(hostname: string): boolean;
4
+ export declare function looksLikeAnimatedOrVector(src: string, contentType?: string): boolean;
5
+ export declare function looksLikeRasterPath(pathname: string, contentType?: string): boolean;
6
+ export declare function parseContentfulImageUrl(src: string): URL | undefined;
7
+ export declare function rewriteAssetsHostToImagesApi(url: URL): void;
8
+ //# sourceMappingURL=contentfulImageCdn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contentfulImageCdn.d.ts","sourceRoot":"","sources":["../../src/converters/contentfulImageCdn.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAI/E,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE3C;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAOpF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAMnF;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAMpE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAI3D"}
@@ -0,0 +1,37 @@
1
+ /** Shared Images API host / raster checks for origin caps and OG JPEG URLs. */
2
+ const RASTER_PATH = /\.(jpe?g|png|webp|avif|tiff?|bmp)$/i;
3
+ export function hostnameOf(url) {
4
+ return url.hostname.toLowerCase();
5
+ }
6
+ export function isContentfulImageCdn(hostname) {
7
+ return hostname === 'images.ctfassets.net' || hostname === 'assets.ctfassets.net';
8
+ }
9
+ export function looksLikeAnimatedOrVector(src, contentType) {
10
+ const type = contentType?.toLowerCase() ?? '';
11
+ if (type === 'image/gif' || type === 'image/svg+xml') {
12
+ return true;
13
+ }
14
+ const path = src.split('?')[0]?.toLowerCase() ?? '';
15
+ return path.endsWith('.gif') || path.endsWith('.svg') || path.endsWith('.svgz');
16
+ }
17
+ export function looksLikeRasterPath(pathname, contentType) {
18
+ const type = contentType?.toLowerCase() ?? '';
19
+ if (type.startsWith('image/') && type !== 'image/gif' && type !== 'image/svg+xml') {
20
+ return true;
21
+ }
22
+ return RASTER_PATH.test(pathname);
23
+ }
24
+ export function parseContentfulImageUrl(src) {
25
+ try {
26
+ return new URL(src.startsWith('//') ? `https:${src}` : src);
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ }
32
+ export function rewriteAssetsHostToImagesApi(url) {
33
+ if (hostnameOf(url) === 'assets.ctfassets.net') {
34
+ url.hostname = 'images.ctfassets.net';
35
+ }
36
+ }
37
+ //# sourceMappingURL=contentfulImageCdn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contentfulImageCdn.js","sourceRoot":"","sources":["../../src/converters/contentfulImageCdn.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,MAAM,WAAW,GAAG,qCAAqC,CAAC;AAE1D,MAAM,UAAU,UAAU,CAAC,GAAQ;IACjC,OAAO,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,QAAQ,KAAK,sBAAsB,IAAI,QAAQ,KAAK,sBAAsB,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAW,EAAE,WAAoB;IACzE,MAAM,IAAI,GAAG,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACpD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,WAAoB;IACxE,MAAM,IAAI,GAAG,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,GAAQ;IACnD,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,sBAAsB,EAAE,CAAC;QAC/C,GAAG,CAAC,QAAQ,GAAG,sBAAsB,CAAC;IACxC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"contentfulImageOrigin.d.ts","sourceRoot":"","sources":["../../src/converters/contentfulImageOrigin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,kFAAkF;AAClF,eAAO,MAAM,iCAAiC,OAAO,CAAC;AAgCtD,MAAM,WAAW,4BAA4B;IAC3C,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,4BAAiC,GACzC,MAAM,CAwCR"}
1
+ {"version":3,"file":"contentfulImageOrigin.d.ts","sourceRoot":"","sources":["../../src/converters/contentfulImageOrigin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,kFAAkF;AAClF,eAAO,MAAM,iCAAiC,OAAO,CAAC;AAKtD,MAAM,WAAW,4BAA4B;IAC3C,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,4BAAiC,GACzC,MAAM,CAoCR"}
@@ -2,32 +2,11 @@
2
2
  * Cap Contentful Images API origin URLs so next/image never downloads camera-raw masters.
3
3
  * Vercel’s optimizer still runs; it fetches this smaller variant, then caches the result.
4
4
  */
5
+ import { hostnameOf, isContentfulImageCdn, looksLikeAnimatedOrVector, looksLikeRasterPath, parseContentfulImageUrl, rewriteAssetsHostToImagesApi, } from './contentfulImageCdn.js';
5
6
  /** Max edge used as Images API `w` (also under Vercel’s 8192 px source limit). */
6
7
  export const CONTENTFUL_IMAGE_ORIGIN_MAX_WIDTH = 2560;
7
8
  const DEFAULT_QUALITY = 75;
8
9
  const DEFAULT_FORMAT = 'webp';
9
- const RASTER_PATH = /\.(jpe?g|png|webp|avif|tiff?|bmp)$/i;
10
- function hostnameOf(url) {
11
- return url.hostname.toLowerCase();
12
- }
13
- function isContentfulImageCdn(hostname) {
14
- return hostname === 'images.ctfassets.net' || hostname === 'assets.ctfassets.net';
15
- }
16
- function looksLikeAnimatedOrVector(src, contentType) {
17
- const type = contentType?.toLowerCase() ?? '';
18
- if (type === 'image/gif' || type === 'image/svg+xml') {
19
- return true;
20
- }
21
- const path = src.split('?')[0]?.toLowerCase() ?? '';
22
- return path.endsWith('.gif') || path.endsWith('.svg') || path.endsWith('.svgz');
23
- }
24
- function looksLikeRasterPath(pathname, contentType) {
25
- const type = contentType?.toLowerCase() ?? '';
26
- if (type.startsWith('image/') && type !== 'image/gif' && type !== 'image/svg+xml') {
27
- return true;
28
- }
29
- return RASTER_PATH.test(pathname);
30
- }
31
10
  /**
32
11
  * Returns a Contentful Images API URL with `w`, `fm`, and `q` so origin fetches stay small.
33
12
  * Leaves PDFs, SVG, GIF, and non-Contentful hosts unchanged.
@@ -39,11 +18,8 @@ export function applyContentfulImageOriginParams(src, options = {}) {
39
18
  if (looksLikeAnimatedOrVector(src, options.contentType)) {
40
19
  return src;
41
20
  }
42
- let url;
43
- try {
44
- url = new URL(src.startsWith('//') ? `https:${src}` : src);
45
- }
46
- catch {
21
+ const url = parseContentfulImageUrl(src);
22
+ if (!url) {
47
23
  return src;
48
24
  }
49
25
  const hostname = hostnameOf(url);
@@ -53,9 +29,7 @@ export function applyContentfulImageOriginParams(src, options = {}) {
53
29
  if (!looksLikeRasterPath(url.pathname, options.contentType)) {
54
30
  return src;
55
31
  }
56
- if (hostname === 'assets.ctfassets.net') {
57
- url.hostname = 'images.ctfassets.net';
58
- }
32
+ rewriteAssetsHostToImagesApi(url);
59
33
  const intrinsic = options.intrinsicWidth;
60
34
  const cap = intrinsic && intrinsic > 0
61
35
  ? Math.min(intrinsic, CONTENTFUL_IMAGE_ORIGIN_MAX_WIDTH)
@@ -1 +1 @@
1
- {"version":3,"file":"contentfulImageOrigin.js","sourceRoot":"","sources":["../../src/converters/contentfulImageOrigin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contentfulImageOrigin.js","sourceRoot":"","sources":["../../src/converters/contentfulImageOrigin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAE9B,kFAAkF;AAClF,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAI,CAAC;AAEtD,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,cAAc,GAAG,MAAM,CAAC;AAS9B;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAC9C,GAAW,EACX,OAAO,GAAiC,EAAE;IAE1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACxD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,GAAG,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAElC,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC;IACzC,MAAM,GAAG,GACP,SAAS,IAAI,SAAS,GAAG,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,iCAAiC,CAAC;QACxD,CAAC,CAAC,iCAAiC,CAAC;IACxC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Contentful Images API URLs for next/og (Satori).
3
+ * Public og:image stays on the site `/og/{id}.jpg` route — this URL is Satori input only.
4
+ */
5
+ export declare const OG_IMAGE_WIDTH = 1200;
6
+ export declare const OG_IMAGE_HEIGHT = 630;
7
+ export type ContentfulOgImageFormat = 'jpg' | 'png';
8
+ export interface ContentfulOgImageOptions {
9
+ width?: number;
10
+ height?: number;
11
+ quality?: number;
12
+ /** Default jpg (Satori-safe). Use png only when featuredImage must keep alpha. */
13
+ format?: ContentfulOgImageFormat;
14
+ fit?: 'fill' | 'pad' | 'crop' | 'thumb' | 'scale';
15
+ contentType?: string;
16
+ }
17
+ /**
18
+ * Absolute Images API URL with forced format (default jpg) and OG crop.
19
+ * Overwrites existing `fm` (including webp from applyContentfulImageOriginParams).
20
+ * Returns undefined for GIF/SVG/PDF and non-Contentful hosts.
21
+ */
22
+ export declare function contentfulOgImageUrl(source: string | {
23
+ src?: string;
24
+ } | null | undefined, options?: ContentfulOgImageOptions): string | undefined;
25
+ //# sourceMappingURL=contentfulOgImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contentfulOgImage.d.ts","sourceRoot":"","sources":["../../src/converters/contentfulOgImage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,eAAO,MAAM,eAAe,MAAM,CAAC;AAInC,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAcD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EACpD,OAAO,GAAE,wBAA6B,GACrC,MAAM,GAAG,SAAS,CA6BpB"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Contentful Images API URLs for next/og (Satori).
3
+ * Public og:image stays on the site `/og/{id}.jpg` route — this URL is Satori input only.
4
+ */
5
+ import { hostnameOf, isContentfulImageCdn, looksLikeAnimatedOrVector, looksLikeRasterPath, parseContentfulImageUrl, rewriteAssetsHostToImagesApi, } from './contentfulImageCdn.js';
6
+ export const OG_IMAGE_WIDTH = 1200;
7
+ export const OG_IMAGE_HEIGHT = 630;
8
+ const DEFAULT_QUALITY = 80;
9
+ function resolveSourceUrl(source) {
10
+ if (source == null) {
11
+ return undefined;
12
+ }
13
+ if (typeof source === 'string') {
14
+ return source || undefined;
15
+ }
16
+ return source.src || undefined;
17
+ }
18
+ /**
19
+ * Absolute Images API URL with forced format (default jpg) and OG crop.
20
+ * Overwrites existing `fm` (including webp from applyContentfulImageOriginParams).
21
+ * Returns undefined for GIF/SVG/PDF and non-Contentful hosts.
22
+ */
23
+ export function contentfulOgImageUrl(source, options = {}) {
24
+ const raw = resolveSourceUrl(source);
25
+ if (!raw) {
26
+ return undefined;
27
+ }
28
+ if (looksLikeAnimatedOrVector(raw, options.contentType)) {
29
+ return undefined;
30
+ }
31
+ const url = parseContentfulImageUrl(raw);
32
+ if (!url) {
33
+ return undefined;
34
+ }
35
+ if (!isContentfulImageCdn(hostnameOf(url))) {
36
+ return undefined;
37
+ }
38
+ if (!looksLikeRasterPath(url.pathname, options.contentType)) {
39
+ return undefined;
40
+ }
41
+ rewriteAssetsHostToImagesApi(url);
42
+ url.searchParams.set('w', String(options.width ?? OG_IMAGE_WIDTH));
43
+ url.searchParams.set('h', String(options.height ?? OG_IMAGE_HEIGHT));
44
+ url.searchParams.set('fit', options.fit ?? 'fill');
45
+ url.searchParams.set('fm', options.format ?? 'jpg');
46
+ url.searchParams.set('q', String(options.quality ?? DEFAULT_QUALITY));
47
+ return url.href;
48
+ }
49
+ //# sourceMappingURL=contentfulOgImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contentfulOgImage.js","sourceRoot":"","sources":["../../src/converters/contentfulOgImage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,MAAM,eAAe,GAAG,EAAE,CAAC;AAc3B,SAAS,gBAAgB,CACvB,MAAoD;IAEpD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,IAAI,SAAS,CAAC;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAoD,EACpD,OAAO,GAA6B,EAAE;IAEtC,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,4BAA4B,CAAC,GAAG,CAAC,CAAC;IAElC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC;IACnE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC;IACrE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;IACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;IACpD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC"}
@@ -12,6 +12,7 @@ export { baseCollectionConverter } from './collection';
12
12
  export type { IContentfulComponent } from './component';
13
13
  export { baseComponentConverter } from './component';
14
14
  export { applyContentfulImageOriginParams, CONTENTFUL_IMAGE_ORIGIN_MAX_WIDTH, type ContentfulImageOriginOptions, } from './contentfulImageOrigin';
15
+ export { type ContentfulOgImageFormat, type ContentfulOgImageOptions, contentfulOgImageUrl, OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH, } from './contentfulOgImage';
15
16
  export { baseDocumentConverter } from './document';
16
17
  export type { IContentfulExternalComponent } from './externalComponent';
17
18
  export { baseExternalComponentConverter } from './externalComponent';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/converters/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC1E,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,gCAAgC,EAChC,iCAAiC,EACjC,KAAK,4BAA4B,GAClC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,WAAW,EACX,KAAK,cAAc,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,6BAA6B,EAC7B,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/converters/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC1E,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,gCAAgC,EAChC,iCAAiC,EACjC,KAAK,4BAA4B,GAClC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,oBAAoB,EACpB,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,WAAW,EACX,KAAK,cAAc,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,6BAA6B,EAC7B,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC"}
@@ -9,6 +9,7 @@ export { animationFormatFromFile, createResponsiveVisual } from './asset.js';
9
9
  export { baseCollectionConverter } from './collection.js';
10
10
  export { baseComponentConverter } from './component.js';
11
11
  export { applyContentfulImageOriginParams, CONTENTFUL_IMAGE_ORIGIN_MAX_WIDTH, } from './contentfulImageOrigin.js';
12
+ export { contentfulOgImageUrl, OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH, } from './contentfulOgImage.js';
12
13
  export { baseDocumentConverter } from './document.js';
13
14
  export { baseExternalComponentConverter } from './externalComponent.js';
14
15
  export { lookupAsset, } from './helpers.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/converters/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,gCAAgC,EAChC,iCAAiC,GAElC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAIL,WAAW,GAEZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,6BAA6B,EAC7B,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/converters/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,gCAAgC,EAChC,iCAAiC,GAElC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGL,oBAAoB,EACpB,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAIL,WAAW,GAEZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,6BAA6B,EAC7B,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.d.ts CHANGED
@@ -23,7 +23,7 @@ export { type AnyEntryRestResult, type ArticleTypeFetchOptions, assetToMediaLibr
23
23
  export type { ContentfulFetchClient as ContentfulClient } from './client';
24
24
  export { type ContentfulFetchClient, createContentfulClient, createContentfulPreviewClient, getContentfulClient, } from './client';
25
25
  export type { ContentResolverFunction } from './converters';
26
- export { applyAlternateReplacementsMap, applyContentfulImageOriginParams, type BaseConverterContext, baseCollectionConverter, baseComponentConverter, baseDocumentConverter, baseExternalComponentConverter, baseNavigationItemConverter, basePageConverter, CONTENTFUL_IMAGE_ORIGIN_MAX_WIDTH, type ContentfulImageOriginOptions, type ConverterContext, calculatePageHref, calculatePageVariantHref, createResponsiveVisual, type IContentfulArticle, type IContentfulArticleLink, type IContentfulCollection, type IContentfulComponent, type IContentfulExternalComponent, type IContentfulPerson, lookupAsset, mergeAlternatePageContentsInTree, navigationStubFromLink, resolveAlternateReplacements, resolveLink, resolveLinks, resolveNavigation, resolveNavigationOrStub, resolveRichTextDocument, type UrlCalculators, } from './converters';
26
+ export { applyAlternateReplacementsMap, applyContentfulImageOriginParams, type BaseConverterContext, baseCollectionConverter, baseComponentConverter, baseDocumentConverter, baseExternalComponentConverter, baseNavigationItemConverter, basePageConverter, CONTENTFUL_IMAGE_ORIGIN_MAX_WIDTH, type ContentfulImageOriginOptions, type ContentfulOgImageFormat, type ContentfulOgImageOptions, type ConverterContext, calculatePageHref, calculatePageVariantHref, contentfulOgImageUrl, createResponsiveVisual, type IContentfulArticle, type IContentfulArticleLink, type IContentfulCollection, type IContentfulComponent, type IContentfulExternalComponent, type IContentfulPerson, lookupAsset, mergeAlternatePageContentsInTree, navigationStubFromLink, OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH, resolveAlternateReplacements, resolveLink, resolveLinks, resolveNavigation, resolveNavigationOrStub, resolveRichTextDocument, type UrlCalculators, } from './converters';
27
27
  export { collectIconsFromContent, collectIconsFromNavigation, deduplicateIcons, processIconsForSprite, rebuildIconSpriteFromLayout, } from './icons/rebuildIconSprite';
28
28
  export { AllTags, ArticleTag, ArticleTypeTag, AssetTag, articleTag, articleTypeIndexTag, articleTypeTag, assetTag, BannerTag, CustomTypeTag, customTypeTag, DocumentTag, GlobalTag, getCacheTags, getCacheTagsForPreview, getCacheTagsForProduction, LinkTag, LocationTag, locationTag, NavigationItemTag, NavigationTag, PageTag, PageVariantTag, PersonTag, pageTag, pageVariantTag, personTag, REVALIDATION_WEBHOOK_ENTRY_CONTENT_TYPES, REVALIDATION_WEBHOOK_ENTRY_CONTENT_TYPES_CSV, SitemapTag, TagTag, TagTypeTag, TemplateTag, tagTag, templateTag, } from './revalidation';
29
29
  export { createMarketingSiteUrlCalculators, type MarketingSiteRoutingOptions, } from './routing';
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,YAAY,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,SAAS,EACT,YAAY,EACZ,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAE5B,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAE1B,KAAK,yBAAyB,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,+BAA+B,EAC/B,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,qCAAqC,EACrC,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,+BAA+B,EAC/B,yBAAyB,EACzB,mCAAmC,EACnC,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,uBAAuB,EACvB,iBAAiB,EACjB,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,mBAAmB,EACnB,gCAAgC,EAChC,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,aAAa,EAEb,mBAAmB,EACnB,kBAAkB,EAClB,6BAA6B,EAC7B,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAErB,KAAK,aAAa,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,uBAAuB,GACxB,MAAM,OAAO,CAAC;AAEf,YAAY,EAAE,qBAAqB,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,EACL,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EACL,6BAA6B,EAC7B,gCAAgC,EAChC,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,EAC3B,iBAAiB,EACjB,iCAAiC,EACjC,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,WAAW,EACX,gCAAgC,EAChC,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,4BAA4B,EAC5B,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,OAAO,EACP,UAAU,EACV,cAAc,EACd,QAAQ,EACR,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,EAEZ,sBAAsB,EACtB,yBAAyB,EACzB,OAAO,EACP,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,aAAa,EAEb,OAAO,EACP,cAAc,EACd,SAAS,EACT,OAAO,EACP,cAAc,EACd,SAAS,EACT,wCAAwC,EACxC,4CAA4C,EAC5C,UAAU,EACV,MAAM,EACN,UAAU,EACV,WAAW,EACX,MAAM,EACN,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iCAAiC,EACjC,KAAK,2BAA2B,GACjC,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,KAAK,sBAAsB,EAC3B,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,KAAK,kBAAkB,EACvB,cAAc,EACd,WAAW,EACX,QAAQ,EACR,KAAK,mBAAmB,EACxB,eAAe,EACf,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,gBAAgB,EAChB,sCAAsC,EACtC,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ getPreviewEntryInfo, getResolutionScope, getResolutionScopeFromOptions, isAnimat
27
27
  // Client exports
28
28
  export { createContentfulClient, createContentfulPreviewClient, getContentfulClient, } from './client.js';
29
29
  // Converter exports
30
- export { applyAlternateReplacementsMap, applyContentfulImageOriginParams, baseCollectionConverter, baseComponentConverter, baseDocumentConverter, baseExternalComponentConverter, baseNavigationItemConverter, basePageConverter, CONTENTFUL_IMAGE_ORIGIN_MAX_WIDTH, calculatePageHref, calculatePageVariantHref, createResponsiveVisual, lookupAsset, mergeAlternatePageContentsInTree, navigationStubFromLink, resolveAlternateReplacements, resolveLink, resolveLinks, resolveNavigation, resolveNavigationOrStub, resolveRichTextDocument, } from './converters/index.js';
30
+ export { applyAlternateReplacementsMap, applyContentfulImageOriginParams, baseCollectionConverter, baseComponentConverter, baseDocumentConverter, baseExternalComponentConverter, baseNavigationItemConverter, basePageConverter, CONTENTFUL_IMAGE_ORIGIN_MAX_WIDTH, calculatePageHref, calculatePageVariantHref, contentfulOgImageUrl, createResponsiveVisual, lookupAsset, mergeAlternatePageContentsInTree, navigationStubFromLink, OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH, resolveAlternateReplacements, resolveLink, resolveLinks, resolveNavigation, resolveNavigationOrStub, resolveRichTextDocument, } from './converters/index.js';
31
31
  export { collectIconsFromContent, collectIconsFromNavigation, deduplicateIcons, processIconsForSprite, rebuildIconSpriteFromLayout, } from './icons/rebuildIconSprite.js';
32
32
  // Revalidation utilities
33
33
  export { AllTags, ArticleTag, ArticleTypeTag, AssetTag, articleTag, articleTypeIndexTag, articleTypeTag, assetTag, BannerTag, CustomTypeTag, customTypeTag, DocumentTag, GlobalTag, getCacheTags,
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/docs/llms.md CHANGED
@@ -393,6 +393,8 @@ Related: `LOG_CMS=1` (conversion warnings), `LOG_CMS_FETCH=1` (raw URLs only).
393
393
 
394
394
  Raster `IPicture.src` values from `convertAssetToVisual` include Contentful Images API params (`w`, `fm=webp`, `q=75`) so `next/image` origin fetches stay at most 2560 px. GIF/SVG/PDFs are unchanged. Helper: `applyContentfulImageOriginParams`.
395
395
 
396
+ **OG / Satori (do not use origin helper):** `contentfulOgImageUrl` **always sets** `fm=jpg` (overwrites `fm=webp`), plus `w=1200&h=630&fit=fill`. Use that URL only as `ImageResponse` `<img src>`. Public `og:image` stays `/og/{id}.jpg` on the site. Optional `{ format: 'png' }` when alpha must be kept.
397
+
396
398
  Keep the **default** Next.js image loader (Vercel optimizer). In each app `next.config`:
397
399
 
398
400
  ```ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/contentful-rest-api",
3
- "version": "1.26.7",
3
+ "version": "1.27.0",
4
4
  "description": "Type-safe Contentful REST API client with caching and rate limiting for Next.js applications",
5
5
  "repository": {
6
6
  "type": "git",