@se-studio/contentful-rest-api 1.12.0 → 1.13.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 +16 -0
- package/README.md +17 -0
- package/dist/api/article-type.d.ts.map +1 -1
- package/dist/api/article-type.js +6 -5
- package/dist/api/article-type.js.map +1 -1
- package/dist/api/banner.d.ts.map +1 -1
- package/dist/api/banner.js +5 -2
- package/dist/api/banner.js.map +1 -1
- package/dist/api/breadcrumb.d.ts.map +1 -1
- package/dist/api/breadcrumb.js +7 -21
- package/dist/api/breadcrumb.js.map +1 -1
- package/dist/api/helpers.d.ts +2 -0
- package/dist/api/helpers.d.ts.map +1 -1
- package/dist/api/helpers.js +13 -4
- package/dist/api/helpers.js.map +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/links.d.ts.map +1 -1
- package/dist/api/links.js +87 -66
- package/dist/api/links.js.map +1 -1
- package/dist/api/navigation.d.ts +1 -0
- package/dist/api/navigation.d.ts.map +1 -1
- package/dist/api/navigation.js +1 -0
- package/dist/api/navigation.js.map +1 -1
- package/dist/api/page.d.ts.map +1 -1
- package/dist/api/page.js +1 -0
- package/dist/api/page.js.map +1 -1
- package/dist/api/person.d.ts.map +1 -1
- package/dist/api/person.js +6 -5
- package/dist/api/person.js.map +1 -1
- package/dist/api/redirects.d.ts.map +1 -1
- package/dist/api/redirects.js +5 -2
- package/dist/api/redirects.js.map +1 -1
- package/dist/api/tag-type.d.ts.map +1 -1
- package/dist/api/tag-type.js +6 -5
- package/dist/api/tag-type.js.map +1 -1
- package/dist/api/tag.d.ts.map +1 -1
- package/dist/api/tag.js +6 -5
- package/dist/api/tag.js.map +1 -1
- package/dist/api/types.d.ts +2 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +12 -2
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/navigation/cacheOptions.d.ts +2 -0
- package/dist/navigation/cacheOptions.d.ts.map +1 -1
- package/dist/navigation/cacheOptions.js +7 -0
- package/dist/navigation/cacheOptions.js.map +1 -1
- package/dist/navigation/enrichModelNavigation.d.ts.map +1 -1
- package/dist/navigation/enrichModelNavigation.js +10 -4
- package/dist/navigation/enrichModelNavigation.js.map +1 -1
- package/dist/navigation/linkIndex.d.ts +1 -0
- package/dist/navigation/linkIndex.d.ts.map +1 -1
- package/dist/navigation/linkIndex.js +22 -78
- package/dist/navigation/linkIndex.js.map +1 -1
- package/dist/navigation/listingLinkBundle.d.ts +22 -0
- package/dist/navigation/listingLinkBundle.d.ts.map +1 -0
- package/dist/navigation/listingLinkBundle.js +88 -0
- package/dist/navigation/listingLinkBundle.js.map +1 -0
- package/dist/navigation/registry.d.ts +1 -0
- package/dist/navigation/registry.d.ts.map +1 -1
- package/dist/navigation/registry.js +23 -6
- package/dist/navigation/registry.js.map +1 -1
- package/dist/navigation/requestCache.d.ts +18 -0
- package/dist/navigation/requestCache.d.ts.map +1 -0
- package/dist/navigation/requestCache.js +66 -0
- package/dist/navigation/requestCache.js.map +1 -0
- package/dist/revalidation/entry-handlers.d.ts +39 -0
- package/dist/revalidation/entry-handlers.d.ts.map +1 -0
- package/dist/revalidation/entry-handlers.js +103 -0
- package/dist/revalidation/entry-handlers.js.map +1 -0
- package/dist/revalidation/handlers.d.ts +4 -37
- package/dist/revalidation/handlers.d.ts.map +1 -1
- package/dist/revalidation/handlers.js +2 -100
- package/dist/revalidation/handlers.js.map +1 -1
- package/dist/telemetry/deriveOperation.d.ts +8 -0
- package/dist/telemetry/deriveOperation.d.ts.map +1 -0
- package/dist/telemetry/deriveOperation.js +59 -0
- package/dist/telemetry/deriveOperation.js.map +1 -0
- package/dist/telemetry/queryContext.d.ts +7 -0
- package/dist/telemetry/queryContext.d.ts.map +1 -0
- package/dist/telemetry/queryContext.js +9 -0
- package/dist/telemetry/queryContext.js.map +1 -0
- package/dist/telemetry/queryLog.d.ts +17 -0
- package/dist/telemetry/queryLog.d.ts.map +1 -0
- package/dist/telemetry/queryLog.js +54 -0
- package/dist/telemetry/queryLog.js.map +1 -0
- package/docs/llms.md +24 -0
- package/package.json +3 -2
|
@@ -3,7 +3,9 @@ import { getContentfulClient } from '../client.js';
|
|
|
3
3
|
import { createResponsiveVisual } from '../converters/asset.js';
|
|
4
4
|
import { lookupIconAsset, resolveBuildYear } from '../converters/helpers.js';
|
|
5
5
|
import { resolveRichTextDocument } from '../converters/resolver.js';
|
|
6
|
+
import { withCmsQueryContext } from '../telemetry/queryContext.js';
|
|
6
7
|
import { buildFlatNavigationCacheOptions } from './cacheOptions.js';
|
|
8
|
+
import { buildFlatNavRequestCacheKey, memoizeFlatNavFetch } from './requestCache.js';
|
|
7
9
|
/** include=1 resolves icon/mobileIcon assets without walking the nav tree. */
|
|
8
10
|
const NAVIGATION_ITEM_INCLUDE = 1;
|
|
9
11
|
function entryLinkId(link) {
|
|
@@ -59,14 +61,24 @@ async function paginateEntries(contentType, client, requestOptions, pageSize, in
|
|
|
59
61
|
let skip = 0;
|
|
60
62
|
let total = Number.POSITIVE_INFINITY;
|
|
61
63
|
while (skip < total) {
|
|
62
|
-
const
|
|
64
|
+
const page = Math.floor(skip / pageSize) + 1;
|
|
65
|
+
const operation = contentType === 'navigationItem'
|
|
66
|
+
? page > 1
|
|
67
|
+
? `Reading all navigation items (page ${page})`
|
|
68
|
+
: 'Reading all navigation items'
|
|
69
|
+
: contentType === 'navigation'
|
|
70
|
+
? page > 1
|
|
71
|
+
? `Reading all navigation roots (page ${page})`
|
|
72
|
+
: 'Reading all navigation roots'
|
|
73
|
+
: `Reading all ${contentType} entries`;
|
|
74
|
+
const response = await withCmsQueryContext({ operation }, () => client.getEntries({
|
|
63
75
|
content_type: contentType,
|
|
64
76
|
order: 'sys.createdAt',
|
|
65
77
|
include,
|
|
66
78
|
locale: requestOptions?.locale,
|
|
67
79
|
limit: pageSize,
|
|
68
80
|
skip,
|
|
69
|
-
}, requestOptions);
|
|
81
|
+
}, requestOptions));
|
|
70
82
|
if (response.items.length === 0) {
|
|
71
83
|
break;
|
|
72
84
|
}
|
|
@@ -75,10 +87,7 @@ async function paginateEntries(contentType, client, requestOptions, pageSize, in
|
|
|
75
87
|
skip += pageSize;
|
|
76
88
|
}
|
|
77
89
|
}
|
|
78
|
-
|
|
79
|
-
* Fetches all navigation and navigationItem entries as flat records for in-memory assembly.
|
|
80
|
-
*/
|
|
81
|
-
export async function getNavigationRegistry(context, config, options) {
|
|
90
|
+
async function fetchNavigationRegistry(context, config, options) {
|
|
82
91
|
const cacheOptions = buildFlatNavigationCacheOptions(options);
|
|
83
92
|
const client = getContentfulClient(config, cacheOptions.preview);
|
|
84
93
|
const pageSize = cacheOptions.pageSize ?? 100;
|
|
@@ -110,4 +119,12 @@ export async function getNavigationRegistry(context, config, options) {
|
|
|
110
119
|
await Promise.all([itemFetch, rootFetch]);
|
|
111
120
|
return { items, roots };
|
|
112
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Fetches all navigation and navigationItem entries as flat records for in-memory assembly.
|
|
124
|
+
* Results are deduped per request and while in-flight.
|
|
125
|
+
*/
|
|
126
|
+
export function getNavigationRegistry(context, config, options) {
|
|
127
|
+
const key = buildFlatNavRequestCacheKey('registry', config, options);
|
|
128
|
+
return memoizeFlatNavFetch(key, () => fetchNavigationRegistry(context, config, options));
|
|
129
|
+
}
|
|
113
130
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/navigation/registry.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/navigation/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ContentfulConfig, FetchOptions } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Runs `fn` with a per-request flat-navigation result cache.
|
|
4
|
+
* Nested calls reuse the parent cache. Use at the page-route boundary (e.g. `generatePage`)
|
|
5
|
+
* so registry/link-index fetches dedupe across menu, footer, template, and collections.
|
|
6
|
+
*/
|
|
7
|
+
export declare function withFlatNavRequestCache<T>(fn: () => T): T;
|
|
8
|
+
export type FlatNavRequestCacheKind = 'registry' | 'linkIndex' | 'listingBundle';
|
|
9
|
+
export type ListingLinkContentType = 'page' | 'article' | 'articleType' | 'tag' | 'person' | 'customType' | 'tagType' | 'linkWrappers';
|
|
10
|
+
export declare function buildFlatNavRequestCacheKey(kind: FlatNavRequestCacheKind, config: ContentfulConfig, options: FetchOptions): string;
|
|
11
|
+
/** Per-request memo key for bulk listing link fetches (space/env/preview/locale only). */
|
|
12
|
+
export declare function buildListingLinkRequestCacheKey(contentType: ListingLinkContentType, config: ContentfulConfig, options: FetchOptions): string;
|
|
13
|
+
export declare function withListingLinkRequestMemo<T>(contentType: ListingLinkContentType, config: ContentfulConfig, options: FetchOptions, fetch: () => Promise<T>): Promise<T>;
|
|
14
|
+
/**
|
|
15
|
+
* Dedupes flat-nav fetches within a request (AsyncLocalStorage) and while in-flight (concurrent).
|
|
16
|
+
*/
|
|
17
|
+
export declare function memoizeFlatNavFetch<T>(key: string, fetch: () => Promise<T>): Promise<T>;
|
|
18
|
+
//# sourceMappingURL=requestCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestCache.d.ts","sourceRoot":"","sources":["../../src/navigation/requestCache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQ/D;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAMzD;AAED,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,WAAW,GAAG,eAAe,CAAC;AAEjF,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,SAAS,GACT,aAAa,GACb,KAAK,GACL,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,cAAc,CAAC;AAEnB,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,uBAAuB,EAC7B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,YAAY,GACpB,MAAM,CAUR;AAED,0FAA0F;AAC1F,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,sBAAsB,EACnC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,YAAY,GACpB,MAAM,CASR;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,WAAW,EAAE,sBAAsB,EACnC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,CAAC,CAAC,CAGZ;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAsBvF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { buildFlatNavigationCacheOptions } from './cacheOptions.js';
|
|
3
|
+
const requestStorage = new AsyncLocalStorage();
|
|
4
|
+
const inFlight = new Map();
|
|
5
|
+
/**
|
|
6
|
+
* Runs `fn` with a per-request flat-navigation result cache.
|
|
7
|
+
* Nested calls reuse the parent cache. Use at the page-route boundary (e.g. `generatePage`)
|
|
8
|
+
* so registry/link-index fetches dedupe across menu, footer, template, and collections.
|
|
9
|
+
*/
|
|
10
|
+
export function withFlatNavRequestCache(fn) {
|
|
11
|
+
const parent = requestStorage.getStore();
|
|
12
|
+
if (parent) {
|
|
13
|
+
return fn();
|
|
14
|
+
}
|
|
15
|
+
return requestStorage.run(new Map(), fn);
|
|
16
|
+
}
|
|
17
|
+
export function buildFlatNavRequestCacheKey(kind, config, options) {
|
|
18
|
+
const cacheOptions = buildFlatNavigationCacheOptions(options);
|
|
19
|
+
return [
|
|
20
|
+
kind,
|
|
21
|
+
config.spaceId,
|
|
22
|
+
config.environment ?? 'master',
|
|
23
|
+
config.host ?? '',
|
|
24
|
+
cacheOptions.preview ? 'preview' : 'delivery',
|
|
25
|
+
cacheOptions.locale ?? '',
|
|
26
|
+
].join(':');
|
|
27
|
+
}
|
|
28
|
+
/** Per-request memo key for bulk listing link fetches (space/env/preview/locale only). */
|
|
29
|
+
export function buildListingLinkRequestCacheKey(contentType, config, options) {
|
|
30
|
+
return [
|
|
31
|
+
`${contentType}Links`,
|
|
32
|
+
config.spaceId,
|
|
33
|
+
config.environment ?? 'master',
|
|
34
|
+
config.host ?? '',
|
|
35
|
+
options.preview ? 'preview' : 'delivery',
|
|
36
|
+
options.locale ?? '',
|
|
37
|
+
].join(':');
|
|
38
|
+
}
|
|
39
|
+
export function withListingLinkRequestMemo(contentType, config, options, fetch) {
|
|
40
|
+
const key = buildListingLinkRequestCacheKey(contentType, config, options);
|
|
41
|
+
return memoizeFlatNavFetch(key, fetch);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Dedupes flat-nav fetches within a request (AsyncLocalStorage) and while in-flight (concurrent).
|
|
45
|
+
*/
|
|
46
|
+
export function memoizeFlatNavFetch(key, fetch) {
|
|
47
|
+
const requestCache = requestStorage.getStore();
|
|
48
|
+
if (requestCache?.has(key)) {
|
|
49
|
+
return Promise.resolve(requestCache.get(key));
|
|
50
|
+
}
|
|
51
|
+
const existing = inFlight.get(key);
|
|
52
|
+
if (existing) {
|
|
53
|
+
return existing;
|
|
54
|
+
}
|
|
55
|
+
const promise = fetch()
|
|
56
|
+
.then((result) => {
|
|
57
|
+
requestStorage.getStore()?.set(key, result);
|
|
58
|
+
return result;
|
|
59
|
+
})
|
|
60
|
+
.finally(() => {
|
|
61
|
+
inFlight.delete(key);
|
|
62
|
+
});
|
|
63
|
+
inFlight.set(key, promise);
|
|
64
|
+
return promise;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=requestCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestCache.js","sourceRoot":"","sources":["../../src/navigation/requestCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AAIjE,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAuB,CAAC;AACpE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;AAErD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAI,EAAW;IACpD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;IACzC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IACD,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAcD,MAAM,UAAU,2BAA2B,CACzC,IAA6B,EAC7B,MAAwB,EACxB,OAAqB;IAErB,MAAM,YAAY,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC9D,OAAO;QACL,IAAI;QACJ,MAAM,CAAC,OAAO;QACd,MAAM,CAAC,WAAW,IAAI,QAAQ;QAC9B,MAAM,CAAC,IAAI,IAAI,EAAE;QACjB,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;QAC7C,YAAY,CAAC,MAAM,IAAI,EAAE;KAC1B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,+BAA+B,CAC7C,WAAmC,EACnC,MAAwB,EACxB,OAAqB;IAErB,OAAO;QACL,GAAG,WAAW,OAAO;QACrB,MAAM,CAAC,OAAO;QACd,MAAM,CAAC,WAAW,IAAI,QAAQ;QAC9B,MAAM,CAAC,IAAI,IAAI,EAAE;QACjB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;QACxC,OAAO,CAAC,MAAM,IAAI,EAAE;KACrB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,WAAmC,EACnC,MAAwB,EACxB,OAAqB,EACrB,KAAuB;IAEvB,MAAM,GAAG,GAAG,+BAA+B,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1E,OAAO,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAI,GAAW,EAAE,KAAuB;IACzE,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;IAC/C,IAAI,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAsB,CAAC;IAChC,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,EAAE;SACpB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,cAAc,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;SACD,OAAO,CAAC,GAAG,EAAE;QACZ,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEL,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface BaseData {
|
|
2
|
+
sys: {
|
|
3
|
+
id: string;
|
|
4
|
+
type: 'Entry' | 'DeletedEntry' | 'Asset' | 'DeletedAsset';
|
|
5
|
+
space: {
|
|
6
|
+
sys: {
|
|
7
|
+
id: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
environment: {
|
|
11
|
+
sys: {
|
|
12
|
+
id: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
contentType: {
|
|
16
|
+
sys: {
|
|
17
|
+
id: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
interface SlugData extends BaseData {
|
|
23
|
+
fields?: {
|
|
24
|
+
slug?: {
|
|
25
|
+
'en-US': string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface IContentTypeHandler<TData extends BaseData, TExtracted> {
|
|
30
|
+
extract(data: TData): TExtracted | Promise<TExtracted>;
|
|
31
|
+
makeTags(extracted: TExtracted): (string | undefined)[] | undefined;
|
|
32
|
+
getGlobalTags(): string[];
|
|
33
|
+
rebuildSearch?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare const contentTypeHandlers: Record<string, IContentTypeHandler<SlugData, string | null | undefined>>;
|
|
36
|
+
/** Tags revalidated when an entry is published (production mode). */
|
|
37
|
+
export declare function getPublishTagsForEntry(content: BaseData): Promise<string[]>;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=entry-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-handlers.d.ts","sourceRoot":"","sources":["../../src/revalidation/entry-handlers.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,OAAO,GAAG,cAAc,GAAG,OAAO,GAAG,cAAc,CAAC;QAC1D,KAAK,EAAE;YAAE,GAAG,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;QAC/B,WAAW,EAAE;YAAE,GAAG,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;QACrC,WAAW,EAAE;YAAE,GAAG,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;KACtC,CAAC;CACH;AAED,UAAU,QAAS,SAAQ,QAAQ;IACjC,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE;YACL,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC;KACH,CAAC;CACH;AAgDD,MAAM,WAAW,mBAAmB,CAAC,KAAK,SAAS,QAAQ,EAAE,UAAU;IACrE,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACvD,QAAQ,CAAC,SAAS,EAAE,UAAU,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC;IACpE,aAAa,IAAI,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAoCD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,MAAM,EACN,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAgEzD,CAAC;AAEF,qEAAqE;AACrE,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQjF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { ArticleTag, ArticleTypeIndexTag, ArticleTypeTag, articleTag, articleTypeIndexTag, BannerTag, CustomTypeTag, LinkTag, LocationTag, locationTag, NavigationItemTag, NavigationTag, PageTag, PageVariantTag, PersonTag, pageTag, pageVariantTag, personTag, RedirectTag, TagTag, TagTypeTag, TemplateTag, tagTag, tagTypeTag, templateTag, } from './tags.js';
|
|
2
|
+
const defaultLocale = 'en-US';
|
|
3
|
+
const articleTypeHandler = {
|
|
4
|
+
extract: (data) => ({
|
|
5
|
+
slug: data.fields?.slug?.[defaultLocale],
|
|
6
|
+
}),
|
|
7
|
+
makeTags: (extracted) => [extracted.slug ? articleTypeIndexTag(extracted.slug) : undefined],
|
|
8
|
+
getGlobalTags: () => [ArticleTypeTag, ArticleTypeIndexTag],
|
|
9
|
+
};
|
|
10
|
+
const articleHandler = {
|
|
11
|
+
extract: (data) => ({
|
|
12
|
+
slug: data.fields?.slug?.[defaultLocale],
|
|
13
|
+
}),
|
|
14
|
+
makeTags: (extracted) => [extracted?.slug ? articleTag(extracted.slug) : undefined],
|
|
15
|
+
getGlobalTags: () => [ArticleTag],
|
|
16
|
+
rebuildSearch: true,
|
|
17
|
+
};
|
|
18
|
+
const pageVariantHandler = {
|
|
19
|
+
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
20
|
+
makeTags: (extracted) => [extracted ? pageVariantTag(extracted) : undefined],
|
|
21
|
+
getGlobalTags: () => [PageVariantTag],
|
|
22
|
+
};
|
|
23
|
+
const templateHandler = {
|
|
24
|
+
extract: (data) => data.fields?.cmsLabel?.[defaultLocale],
|
|
25
|
+
makeTags: (extracted) => [extracted ? templateTag(extracted) : undefined],
|
|
26
|
+
getGlobalTags: () => [TemplateTag],
|
|
27
|
+
};
|
|
28
|
+
export const contentTypeHandlers = {
|
|
29
|
+
page: {
|
|
30
|
+
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
31
|
+
makeTags: (extracted) => [extracted ? pageTag(extracted) : undefined],
|
|
32
|
+
getGlobalTags: () => [PageTag],
|
|
33
|
+
},
|
|
34
|
+
pageVariant: pageVariantHandler,
|
|
35
|
+
// biome-ignore lint/suspicious/noExplicitAny: Any is ok for handlers with different types
|
|
36
|
+
article: articleHandler,
|
|
37
|
+
// biome-ignore lint/suspicious/noExplicitAny: Any is ok for handlers with different types
|
|
38
|
+
articleType: articleTypeHandler,
|
|
39
|
+
person: {
|
|
40
|
+
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
41
|
+
makeTags: (extracted) => [extracted ? personTag(extracted) : undefined],
|
|
42
|
+
getGlobalTags: () => [PersonTag],
|
|
43
|
+
},
|
|
44
|
+
tag: {
|
|
45
|
+
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
46
|
+
makeTags: (extracted) => [extracted ? tagTag(extracted) : undefined],
|
|
47
|
+
getGlobalTags: () => [TagTag],
|
|
48
|
+
},
|
|
49
|
+
tagType: {
|
|
50
|
+
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
51
|
+
makeTags: (extracted) => [extracted ? tagTypeTag(extracted) : undefined],
|
|
52
|
+
getGlobalTags: () => [TagTypeTag],
|
|
53
|
+
},
|
|
54
|
+
link: {
|
|
55
|
+
extract: () => undefined,
|
|
56
|
+
makeTags: () => undefined,
|
|
57
|
+
getGlobalTags: () => [LinkTag],
|
|
58
|
+
},
|
|
59
|
+
// biome-ignore lint/suspicious/noExplicitAny: Any is ok for handlers with different types
|
|
60
|
+
template: templateHandler,
|
|
61
|
+
customType: {
|
|
62
|
+
extract: () => undefined,
|
|
63
|
+
makeTags: () => undefined,
|
|
64
|
+
getGlobalTags: () => [CustomTypeTag],
|
|
65
|
+
},
|
|
66
|
+
navigation: {
|
|
67
|
+
extract: () => undefined,
|
|
68
|
+
makeTags: () => undefined,
|
|
69
|
+
getGlobalTags: () => [NavigationTag],
|
|
70
|
+
},
|
|
71
|
+
navigationItem: {
|
|
72
|
+
extract: () => undefined,
|
|
73
|
+
makeTags: () => undefined,
|
|
74
|
+
getGlobalTags: () => [NavigationItemTag],
|
|
75
|
+
},
|
|
76
|
+
banner: {
|
|
77
|
+
extract: () => undefined,
|
|
78
|
+
makeTags: () => undefined,
|
|
79
|
+
getGlobalTags: () => [BannerTag],
|
|
80
|
+
},
|
|
81
|
+
redirect: {
|
|
82
|
+
extract: () => undefined,
|
|
83
|
+
makeTags: () => undefined,
|
|
84
|
+
getGlobalTags: () => [RedirectTag],
|
|
85
|
+
},
|
|
86
|
+
location: {
|
|
87
|
+
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
88
|
+
makeTags: (extracted) => [extracted ? locationTag(extracted) : undefined],
|
|
89
|
+
getGlobalTags: () => [LocationTag],
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
/** Tags revalidated when an entry is published (production mode). */
|
|
93
|
+
export async function getPublishTagsForEntry(content) {
|
|
94
|
+
const contentType = content.sys.contentType.sys.id;
|
|
95
|
+
const handler = contentTypeHandlers[contentType];
|
|
96
|
+
if (!handler)
|
|
97
|
+
return [];
|
|
98
|
+
const extracted = await Promise.resolve(handler.extract(content));
|
|
99
|
+
const tags = handler.makeTags(extracted);
|
|
100
|
+
const validTags = tags?.filter((tag) => tag !== undefined) ?? [];
|
|
101
|
+
return [...validTags, ...handler.getGlobalTags()];
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=entry-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-handlers.js","sourceRoot":"","sources":["../../src/revalidation/entry-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
type: 'Entry' | 'DeletedEntry' | 'Asset' | 'DeletedAsset';
|
|
5
|
-
space: {
|
|
6
|
-
sys: {
|
|
7
|
-
id: string;
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
environment: {
|
|
11
|
-
sys: {
|
|
12
|
-
id: string;
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
contentType: {
|
|
16
|
-
sys: {
|
|
17
|
-
id: string;
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
interface SlugData extends BaseData {
|
|
23
|
-
fields?: {
|
|
24
|
-
slug?: {
|
|
25
|
-
'en-US': string;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
}
|
|
1
|
+
import type { BaseData, IContentTypeHandler } from './entry-handlers';
|
|
2
|
+
export type { BaseData, IContentTypeHandler } from './entry-handlers';
|
|
3
|
+
export { contentTypeHandlers, getPublishTagsForEntry } from './entry-handlers';
|
|
29
4
|
export interface AssetData extends BaseData {
|
|
30
5
|
fields?: {
|
|
31
6
|
file?: {
|
|
@@ -37,16 +12,8 @@ export interface AssetData extends BaseData {
|
|
|
37
12
|
};
|
|
38
13
|
};
|
|
39
14
|
}
|
|
40
|
-
export interface IContentTypeHandler<TData extends BaseData, TExtracted> {
|
|
41
|
-
extract(data: TData): TExtracted | Promise<TExtracted>;
|
|
42
|
-
makeTags(extracted: TExtracted): (string | undefined)[] | undefined;
|
|
43
|
-
getGlobalTags(): string[];
|
|
44
|
-
rebuildSearch?: boolean;
|
|
45
|
-
}
|
|
46
|
-
export declare const contentTypeHandlers: Record<string, IContentTypeHandler<SlugData, string | null | undefined>>;
|
|
47
15
|
export declare function revalidateAsset(content: AssetData, message: string, preview?: boolean): Promise<boolean>;
|
|
48
|
-
export declare function revalidateEntry(handler: IContentTypeHandler<
|
|
16
|
+
export declare function revalidateEntry(handler: IContentTypeHandler<BaseData, string | null | undefined>, content: BaseData, contentType: string, preview?: boolean): Promise<boolean>;
|
|
49
17
|
export declare function revalidateDeletedEntry(contentType: string, preview?: boolean): Promise<boolean>;
|
|
50
18
|
export declare function revalidateDeletedAsset(assetId: string, preview?: boolean): Promise<boolean>;
|
|
51
|
-
export {};
|
|
52
19
|
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/revalidation/handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/revalidation/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAItE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/E,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE;YACL,CAAC,GAAG,EAAE,MAAM,GAAG;gBACb,GAAG,EAAE,MAAM,CAAC;gBACZ,QAAQ,EAAE,MAAM,CAAC;gBACjB,WAAW,EAAE,MAAM,CAAC;aACrB,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAID,wBAAsB,eAAe,CACnC,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EACjE,OAAO,EAAE,QAAQ,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAWlB;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,OAAO,CAAC,CAUlB"}
|
|
@@ -1,102 +1,7 @@
|
|
|
1
1
|
import { revalidateSingleTag, revalidateTags } from './server-utils.js';
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { AssetTag, assetTag, GlobalTag } from './tags.js';
|
|
3
|
+
export { contentTypeHandlers, getPublishTagsForEntry } from './entry-handlers.js';
|
|
4
4
|
const defaultLocale = 'en-US';
|
|
5
|
-
// Content type handlers
|
|
6
|
-
const articleTypeHandler = {
|
|
7
|
-
extract: (data) => ({
|
|
8
|
-
slug: data.fields?.slug?.[defaultLocale],
|
|
9
|
-
}),
|
|
10
|
-
makeTags: (extracted) => [extracted.slug ? articleTypeIndexTag(extracted.slug) : undefined],
|
|
11
|
-
getGlobalTags: () => [ArticleTypeTag, ArticleTypeIndexTag],
|
|
12
|
-
};
|
|
13
|
-
const articleHandler = {
|
|
14
|
-
extract: (data) => ({
|
|
15
|
-
slug: data.fields?.slug?.[defaultLocale],
|
|
16
|
-
}),
|
|
17
|
-
makeTags: (extracted) => [extracted?.slug ? articleTag(extracted.slug) : undefined],
|
|
18
|
-
getGlobalTags: () => [ArticleTag],
|
|
19
|
-
rebuildSearch: true,
|
|
20
|
-
};
|
|
21
|
-
const pageVariantHandler = {
|
|
22
|
-
extract: (data) => {
|
|
23
|
-
const pageVariantSlug = data.fields?.slug?.[defaultLocale];
|
|
24
|
-
return pageVariantSlug;
|
|
25
|
-
},
|
|
26
|
-
makeTags: (extracted) => [extracted ? pageVariantTag(extracted) : undefined],
|
|
27
|
-
getGlobalTags: () => [PageVariantTag],
|
|
28
|
-
};
|
|
29
|
-
const templateHandler = {
|
|
30
|
-
extract: (data) => data.fields?.cmsLabel?.[defaultLocale],
|
|
31
|
-
makeTags: (extracted) => [extracted ? templateTag(extracted) : undefined],
|
|
32
|
-
getGlobalTags: () => [TemplateTag],
|
|
33
|
-
};
|
|
34
|
-
// Content type handlers registry
|
|
35
|
-
export const contentTypeHandlers = {
|
|
36
|
-
page: {
|
|
37
|
-
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
38
|
-
makeTags: (extracted) => [extracted ? pageTag(extracted) : undefined],
|
|
39
|
-
getGlobalTags: () => [PageTag],
|
|
40
|
-
},
|
|
41
|
-
pageVariant: pageVariantHandler,
|
|
42
|
-
// biome-ignore lint/suspicious/noExplicitAny: Any is ok for handlers with different types
|
|
43
|
-
article: articleHandler,
|
|
44
|
-
// biome-ignore lint/suspicious/noExplicitAny: Any is ok for handlers with different types
|
|
45
|
-
articleType: articleTypeHandler,
|
|
46
|
-
person: {
|
|
47
|
-
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
48
|
-
makeTags: (extracted) => [extracted ? personTag(extracted) : undefined],
|
|
49
|
-
getGlobalTags: () => [PersonTag],
|
|
50
|
-
},
|
|
51
|
-
tag: {
|
|
52
|
-
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
53
|
-
makeTags: (extracted) => [extracted ? tagTag(extracted) : undefined],
|
|
54
|
-
getGlobalTags: () => [TagTag],
|
|
55
|
-
},
|
|
56
|
-
tagType: {
|
|
57
|
-
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
58
|
-
makeTags: (extracted) => [extracted ? tagTypeTag(extracted) : undefined],
|
|
59
|
-
getGlobalTags: () => [TagTypeTag],
|
|
60
|
-
},
|
|
61
|
-
link: {
|
|
62
|
-
extract: () => undefined,
|
|
63
|
-
makeTags: () => undefined,
|
|
64
|
-
getGlobalTags: () => [LinkTag],
|
|
65
|
-
},
|
|
66
|
-
// biome-ignore lint/suspicious/noExplicitAny: Any is ok for handlers with different types
|
|
67
|
-
template: templateHandler,
|
|
68
|
-
customType: {
|
|
69
|
-
extract: () => undefined,
|
|
70
|
-
makeTags: () => undefined,
|
|
71
|
-
getGlobalTags: () => [CustomTypeTag],
|
|
72
|
-
},
|
|
73
|
-
navigation: {
|
|
74
|
-
extract: () => undefined,
|
|
75
|
-
makeTags: () => undefined,
|
|
76
|
-
getGlobalTags: () => [NavigationTag],
|
|
77
|
-
},
|
|
78
|
-
navigationItem: {
|
|
79
|
-
extract: () => undefined,
|
|
80
|
-
makeTags: () => undefined,
|
|
81
|
-
getGlobalTags: () => [NavigationItemTag],
|
|
82
|
-
},
|
|
83
|
-
banner: {
|
|
84
|
-
extract: () => undefined,
|
|
85
|
-
makeTags: () => undefined,
|
|
86
|
-
getGlobalTags: () => [BannerTag],
|
|
87
|
-
},
|
|
88
|
-
redirect: {
|
|
89
|
-
extract: () => undefined,
|
|
90
|
-
makeTags: () => undefined,
|
|
91
|
-
getGlobalTags: () => [RedirectTag],
|
|
92
|
-
},
|
|
93
|
-
location: {
|
|
94
|
-
extract: (data) => data.fields?.slug?.[defaultLocale],
|
|
95
|
-
makeTags: (extracted) => [extracted ? locationTag(extracted) : undefined],
|
|
96
|
-
getGlobalTags: () => [LocationTag],
|
|
97
|
-
},
|
|
98
|
-
};
|
|
99
|
-
// Asset revalidation handler
|
|
100
5
|
export async function revalidateAsset(content, message, preview = false) {
|
|
101
6
|
const id = content.sys.id;
|
|
102
7
|
const fileName = content.fields?.file?.[defaultLocale]?.fileName;
|
|
@@ -109,7 +14,6 @@ export async function revalidateAsset(content, message, preview = false) {
|
|
|
109
14
|
}
|
|
110
15
|
return true;
|
|
111
16
|
}
|
|
112
|
-
// Entry revalidation handler
|
|
113
17
|
export async function revalidateEntry(handler, content, contentType, preview = false) {
|
|
114
18
|
const extracted = await Promise.resolve(handler.extract(content));
|
|
115
19
|
const tags = handler.makeTags(extracted);
|
|
@@ -124,7 +28,6 @@ export async function revalidateEntry(handler, content, contentType, preview = f
|
|
|
124
28
|
}
|
|
125
29
|
return true;
|
|
126
30
|
}
|
|
127
|
-
// Revalidate deleted entry by content type (collection tags only)
|
|
128
31
|
export async function revalidateDeletedEntry(contentType, preview = false) {
|
|
129
32
|
const { getCacheTagsForProduction } = await import('./utils.js');
|
|
130
33
|
const tags = getCacheTagsForProduction(contentType);
|
|
@@ -136,7 +39,6 @@ export async function revalidateDeletedEntry(contentType, preview = false) {
|
|
|
136
39
|
}
|
|
137
40
|
return true;
|
|
138
41
|
}
|
|
139
|
-
// Revalidate deleted asset by ID
|
|
140
42
|
export async function revalidateDeletedAsset(assetId, preview = false) {
|
|
141
43
|
const tags = [assetTag(assetId), AssetTag];
|
|
142
44
|
if (preview) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/revalidation/handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/revalidation/handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CmsQueryContext } from './queryContext';
|
|
2
|
+
/** Human-readable operation label for a Contentful content type. */
|
|
3
|
+
export declare function operationLabel(contentType: string): string;
|
|
4
|
+
/** Link-list fetch label with optional pagination suffix. */
|
|
5
|
+
export declare function allLinksOperationLabel(contentType: string, page?: number): string;
|
|
6
|
+
/** Fallback operation + identifier derived from a Contentful REST URL. */
|
|
7
|
+
export declare function deriveOperationFromUrl(url: string): CmsQueryContext;
|
|
8
|
+
//# sourceMappingURL=deriveOperation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deriveOperation.d.ts","sourceRoot":"","sources":["../../src/telemetry/deriveOperation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAmBtD,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,6DAA6D;AAC7D,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjF;AAeD,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAsBnE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
const OPERATION_VERBS = {
|
|
2
|
+
page: 'Reading page',
|
|
3
|
+
pageVariant: 'Reading page variant',
|
|
4
|
+
article: 'Reading article',
|
|
5
|
+
articleType: 'Reading article type',
|
|
6
|
+
tag: 'Reading tag',
|
|
7
|
+
tagType: 'Reading tag type',
|
|
8
|
+
person: 'Reading person',
|
|
9
|
+
customType: 'Reading custom type',
|
|
10
|
+
template: 'Reading template',
|
|
11
|
+
banner: 'Reading banner',
|
|
12
|
+
redirect: 'Reading redirect',
|
|
13
|
+
navigation: 'Reading navigation',
|
|
14
|
+
navigationItem: 'Reading navigation item',
|
|
15
|
+
link: 'Reading link',
|
|
16
|
+
};
|
|
17
|
+
/** Human-readable operation label for a Contentful content type. */
|
|
18
|
+
export function operationLabel(contentType) {
|
|
19
|
+
return OPERATION_VERBS[contentType] ?? `Reading ${contentType}`;
|
|
20
|
+
}
|
|
21
|
+
/** Link-list fetch label with optional pagination suffix. */
|
|
22
|
+
export function allLinksOperationLabel(contentType, page) {
|
|
23
|
+
const base = `Reading all ${contentType} links`;
|
|
24
|
+
return page !== undefined && page > 1 ? `${base} (page ${page})` : base;
|
|
25
|
+
}
|
|
26
|
+
function slugFromSearchParams(params) {
|
|
27
|
+
const direct = params.get('fields.slug');
|
|
28
|
+
if (direct)
|
|
29
|
+
return direct;
|
|
30
|
+
for (const [key, value] of params.entries()) {
|
|
31
|
+
if (key.startsWith('fields.') && key.endsWith('.slug') && value) {
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
/** Fallback operation + identifier derived from a Contentful REST URL. */
|
|
38
|
+
export function deriveOperationFromUrl(url) {
|
|
39
|
+
try {
|
|
40
|
+
const parsed = new URL(url);
|
|
41
|
+
const assetMatch = parsed.pathname.match(/\/assets\/([^/]+)$/);
|
|
42
|
+
if (assetMatch?.[1]) {
|
|
43
|
+
return { operation: 'Reading asset', identifier: assetMatch[1] };
|
|
44
|
+
}
|
|
45
|
+
const contentType = parsed.searchParams.get('content_type');
|
|
46
|
+
const identifier = slugFromSearchParams(parsed.searchParams);
|
|
47
|
+
if (contentType) {
|
|
48
|
+
return {
|
|
49
|
+
operation: operationLabel(contentType),
|
|
50
|
+
...(identifier ? { identifier } : {}),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return { operation: 'Reading Contentful' };
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return { operation: 'Reading Contentful' };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=deriveOperation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deriveOperation.js","sourceRoot":"","sources":["../../src/telemetry/deriveOperation.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAA2B;IAC9C,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,sBAAsB;IACnC,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,sBAAsB;IACnC,GAAG,EAAE,aAAa;IAClB,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAE,gBAAgB;IACxB,UAAU,EAAE,qBAAqB;IACjC,QAAQ,EAAE,kBAAkB;IAC5B,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,kBAAkB;IAC5B,UAAU,EAAE,oBAAoB;IAChC,cAAc,EAAE,yBAAyB;IACzC,IAAI,EAAE,cAAc;CACrB,CAAC;AAEF,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,OAAO,eAAe,CAAC,WAAW,CAAC,IAAI,WAAW,WAAW,EAAE,CAAC;AAClE,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,sBAAsB,CAAC,WAAmB,EAAE,IAAa;IACvE,MAAM,IAAI,GAAG,eAAe,WAAW,QAAQ,CAAC;IAChD,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAuB;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC/D,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAE7D,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO;gBACL,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC;gBACtC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtC,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAC7C,CAAC;AACH,CAAC"}
|