@mints-cloud/cxf-codegen 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +40 -1
  2. package/dist/components/ApiCall.d.ts +5 -0
  3. package/dist/components/ApiCall.d.ts.map +1 -1
  4. package/dist/components/ApiCall.js +18 -3
  5. package/dist/components/JsonLdSchemas.d.ts +104 -0
  6. package/dist/components/JsonLdSchemas.d.ts.map +1 -0
  7. package/dist/components/JsonLdSchemas.js +380 -0
  8. package/dist/components/MetadataOverrides.d.ts +84 -0
  9. package/dist/components/MetadataOverrides.d.ts.map +1 -0
  10. package/dist/components/MetadataOverrides.js +270 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +14 -1
  14. package/dist/lib/api-call-hooks.d.ts +2 -1
  15. package/dist/lib/api-call-hooks.d.ts.map +1 -1
  16. package/dist/lib/api-call-hooks.js +64 -11
  17. package/dist/lib/api-route-helpers.d.ts +1 -0
  18. package/dist/lib/api-route-helpers.d.ts.map +1 -1
  19. package/dist/lib/api-route-helpers.js +13 -0
  20. package/dist/lib/assets-query-params.d.ts +11 -0
  21. package/dist/lib/assets-query-params.d.ts.map +1 -0
  22. package/dist/lib/assets-query-params.js +130 -0
  23. package/dist/lib/cxf-auth.d.ts +7 -3
  24. package/dist/lib/cxf-auth.d.ts.map +1 -1
  25. package/dist/lib/cxf-auth.js +17 -6
  26. package/dist/lib/seo-utils.d.ts +22 -0
  27. package/dist/lib/seo-utils.d.ts.map +1 -0
  28. package/dist/lib/seo-utils.js +228 -0
  29. package/dist/lib/server-props.d.ts.map +1 -1
  30. package/dist/lib/server-props.js +46 -4
  31. package/dist/pages/api/assets.d.ts.map +1 -1
  32. package/dist/pages/api/assets.js +27 -1
  33. package/dist/pages/api/cxf.d.ts +5 -0
  34. package/dist/pages/api/cxf.d.ts.map +1 -1
  35. package/dist/pages/api/cxf.js +37 -4
  36. package/dist/pages/app.d.ts +4 -1
  37. package/dist/pages/app.d.ts.map +1 -1
  38. package/dist/pages/app.js +11 -6
  39. package/dist/register.d.ts.map +1 -1
  40. package/dist/register.js +193 -2
  41. package/package.json +13 -1
@@ -0,0 +1,84 @@
1
+ type MaybeString = string | null | undefined;
2
+ type MaybeStringList = string[] | string | null | undefined;
3
+ interface MediaAsset {
4
+ public_path?: MaybeString;
5
+ alt_text?: MaybeString;
6
+ mime_type?: MaybeString;
7
+ }
8
+ export interface SiteSettings {
9
+ identity_and_branding?: {
10
+ site_name?: MaybeString;
11
+ primary_color?: MaybeString;
12
+ secondary_color?: MaybeString;
13
+ logo?: MediaAsset;
14
+ favicon?: MediaAsset;
15
+ apple_touch_icon?: MediaAsset;
16
+ manifest_icon_192?: MediaAsset;
17
+ manifest_icon_512?: MediaAsset;
18
+ };
19
+ domains_and_locales?: {
20
+ primary_domain?: MaybeString;
21
+ additional_domains?: MaybeString[] | string | null;
22
+ default_locale?: MaybeString;
23
+ };
24
+ seo_defaults?: {
25
+ seo_title_template?: MaybeString;
26
+ canonical_base?: MaybeString;
27
+ og_image_default?: MediaAsset;
28
+ robots_indexing?: MaybeString;
29
+ robots_follow?: MaybeString;
30
+ default_seo_title?: MaybeString;
31
+ default_meta_description?: MaybeString;
32
+ };
33
+ }
34
+ export interface PageMeta {
35
+ default?: {
36
+ page_title?: MaybeString;
37
+ permalink?: MaybeString;
38
+ };
39
+ seo_per_page?: {
40
+ page_meta_title?: MaybeString;
41
+ page_meta_description?: MaybeString;
42
+ page_robots_follow?: MaybeString;
43
+ page_robots_indexing?: MaybeString;
44
+ page_canonical_url?: MaybeString;
45
+ keywords?: MaybeStringList;
46
+ };
47
+ social_and_sharing?: {
48
+ page_open_graph_title?: MaybeString;
49
+ page_open_graph_description?: MaybeString;
50
+ page_open_graph_image?: MediaAsset;
51
+ };
52
+ }
53
+ export interface MetadataOverridesProps {
54
+ siteSettings?: SiteSettings | string | null;
55
+ pageMeta?: PageMeta | string | null;
56
+ }
57
+ export interface AppMetadataOverrides {
58
+ title?: MaybeString;
59
+ description?: MaybeString;
60
+ keywords?: MaybeStringList;
61
+ robots?: MaybeString;
62
+ canonicalUrl?: MaybeString;
63
+ themeColor?: MaybeString;
64
+ siteName?: MaybeString;
65
+ openGraphUrl?: MaybeString;
66
+ openGraphTitle?: MaybeString;
67
+ openGraphDescription?: MaybeString;
68
+ openGraphImage?: MaybeString;
69
+ openGraphImageAlt?: MaybeString;
70
+ openGraphType?: MaybeString;
71
+ twitterCard?: MaybeString;
72
+ twitterTitle?: MaybeString;
73
+ twitterDescription?: MaybeString;
74
+ twitterImage?: MaybeString;
75
+ faviconHref?: MaybeString;
76
+ faviconMimeType?: MaybeString;
77
+ appleTouchIconHref?: MaybeString;
78
+ }
79
+ export declare function AppMetadataOverridesHead(props: {
80
+ overrides?: AppMetadataOverrides | null;
81
+ }): import("react/jsx-runtime").JSX.Element | null;
82
+ export declare function MetadataOverrides(props: MetadataOverridesProps): import("react/jsx-runtime").JSX.Element | null;
83
+ export default MetadataOverrides;
84
+ //# sourceMappingURL=MetadataOverrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataOverrides.d.ts","sourceRoot":"","sources":["../../src/components/MetadataOverrides.tsx"],"names":[],"mappings":"AAeA,KAAK,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAC7C,KAAK,eAAe,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAE5D,UAAU,UAAU;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,qBAAqB,CAAC,EAAE;QACtB,SAAS,CAAC,EAAE,WAAW,CAAC;QACxB,aAAa,CAAC,EAAE,WAAW,CAAC;QAC5B,eAAe,CAAC,EAAE,WAAW,CAAC;QAC9B,IAAI,CAAC,EAAE,UAAU,CAAC;QAClB,OAAO,CAAC,EAAE,UAAU,CAAC;QACrB,gBAAgB,CAAC,EAAE,UAAU,CAAC;QAC9B,iBAAiB,CAAC,EAAE,UAAU,CAAC;QAC/B,iBAAiB,CAAC,EAAE,UAAU,CAAC;KAChC,CAAC;IACF,mBAAmB,CAAC,EAAE;QACpB,cAAc,CAAC,EAAE,WAAW,CAAC;QAC7B,kBAAkB,CAAC,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;QACnD,cAAc,CAAC,EAAE,WAAW,CAAC;KAC9B,CAAC;IACF,YAAY,CAAC,EAAE;QACb,kBAAkB,CAAC,EAAE,WAAW,CAAC;QACjC,cAAc,CAAC,EAAE,WAAW,CAAC;QAC7B,gBAAgB,CAAC,EAAE,UAAU,CAAC;QAC9B,eAAe,CAAC,EAAE,WAAW,CAAC;QAC9B,aAAa,CAAC,EAAE,WAAW,CAAC;QAC5B,iBAAiB,CAAC,EAAE,WAAW,CAAC;QAChC,wBAAwB,CAAC,EAAE,WAAW,CAAC;KACxC,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,SAAS,CAAC,EAAE,WAAW,CAAC;KACzB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,eAAe,CAAC,EAAE,WAAW,CAAC;QAC9B,qBAAqB,CAAC,EAAE,WAAW,CAAC;QACpC,kBAAkB,CAAC,EAAE,WAAW,CAAC;QACjC,oBAAoB,CAAC,EAAE,WAAW,CAAC;QACnC,kBAAkB,CAAC,EAAE,WAAW,CAAC;QACjC,QAAQ,CAAC,EAAE,eAAe,CAAC;KAC5B,CAAC;IACF,kBAAkB,CAAC,EAAE;QACnB,qBAAqB,CAAC,EAAE,WAAW,CAAC;QACpC,2BAA2B,CAAC,EAAE,WAAW,CAAC;QAC1C,qBAAqB,CAAC,EAAE,UAAU,CAAC;KACpC,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,oBAAoB,CAAC,EAAE,WAAW,CAAC;IACnC,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9B,kBAAkB,CAAC,EAAE,WAAW,CAAC;CAClC;AAkMD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;CAAE,kDA2D1F;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,kDA+L9D;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.AppMetadataOverridesHead = AppMetadataOverridesHead;
40
+ exports.MetadataOverrides = MetadataOverrides;
41
+ const jsx_runtime_1 = require("react/jsx-runtime");
42
+ const React = __importStar(require("react"));
43
+ const head_1 = __importDefault(require("next/head"));
44
+ const seo_utils_1 = require("../lib/seo-utils");
45
+ const pickFirst = (...values) => (0, seo_utils_1.pickFirstString)(...values);
46
+ function normalizeSameAsUrl(value, baseUrl) {
47
+ const cleaned = (0, seo_utils_1.cleanString)(value);
48
+ if (!cleaned) {
49
+ return undefined;
50
+ }
51
+ if (cleaned.startsWith("//")) {
52
+ return `https:${cleaned}`;
53
+ }
54
+ if (/^https?:\/\//i.test(cleaned)) {
55
+ return cleaned;
56
+ }
57
+ if (cleaned.startsWith("/")) {
58
+ return (0, seo_utils_1.toAbsoluteUrl)(cleaned, baseUrl);
59
+ }
60
+ if (/^[\w.-]+\.[a-z]{2,}(\/.*)?$/i.test(cleaned)) {
61
+ return `https://${cleaned}`;
62
+ }
63
+ return cleaned;
64
+ }
65
+ function resolveTitle(pageMetaTitle, pageTitle, defaultSeoTitle, siteName, template) {
66
+ const explicitTitle = (0, seo_utils_1.cleanString)(pageMetaTitle);
67
+ if (explicitTitle) {
68
+ return explicitTitle;
69
+ }
70
+ const fallbackPageTitle = pickFirst(pageTitle, defaultSeoTitle, siteName);
71
+ const cleanTemplate = (0, seo_utils_1.cleanString)(template);
72
+ const cleanSiteName = (0, seo_utils_1.cleanString)(siteName);
73
+ if (!fallbackPageTitle) {
74
+ return undefined;
75
+ }
76
+ if (!cleanTemplate) {
77
+ if (fallbackPageTitle && cleanSiteName && fallbackPageTitle !== cleanSiteName) {
78
+ return `${fallbackPageTitle} | ${cleanSiteName}`;
79
+ }
80
+ return fallbackPageTitle;
81
+ }
82
+ const rendered = cleanTemplate
83
+ .replace(/%pageTitle%/g, fallbackPageTitle)
84
+ .replace(/%siteName%/g, cleanSiteName ?? "")
85
+ .replace(/\s{2,}/g, " ")
86
+ .trim()
87
+ .replace(/^\|\s*/g, "")
88
+ .replace(/\s*\|$/g, "");
89
+ return (0, seo_utils_1.cleanString)(rendered);
90
+ }
91
+ function buildRobots(indexing, follow) {
92
+ const parts = [(0, seo_utils_1.cleanString)(indexing), (0, seo_utils_1.cleanString)(follow)].filter((part) => Boolean(part));
93
+ return parts.length > 0 ? parts.join(", ") : undefined;
94
+ }
95
+ function hasAnyHeadMetadata(metadata) {
96
+ return Object.values(metadata).some(Boolean);
97
+ }
98
+ function renderHeadTags(metadata) {
99
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [metadata.title ? (0, jsx_runtime_1.jsx)("title", { children: metadata.title }, "metadata-title") : null, metadata.description ? ((0, jsx_runtime_1.jsx)("meta", { name: "description", content: metadata.description }, "metadata-description")) : null, metadata.keywords ? ((0, jsx_runtime_1.jsx)("meta", { name: "keywords", content: metadata.keywords }, "metadata-keywords")) : null, metadata.robots ? (0, jsx_runtime_1.jsx)("meta", { name: "robots", content: metadata.robots }, "metadata-robots") : null, metadata.canonicalUrl ? ((0, jsx_runtime_1.jsx)("link", { rel: "canonical", href: metadata.canonicalUrl }, "metadata-canonical")) : null, metadata.themeColor ? ((0, jsx_runtime_1.jsx)("meta", { name: "theme-color", content: metadata.themeColor }, "metadata-theme-color")) : null, metadata.siteName ? ((0, jsx_runtime_1.jsx)("meta", { property: "og:site_name", content: metadata.siteName }, "metadata-og-site-name")) : null, metadata.openGraphUrl ? ((0, jsx_runtime_1.jsx)("meta", { property: "og:url", content: metadata.openGraphUrl }, "metadata-og-url")) : null, metadata.openGraphTitle ? ((0, jsx_runtime_1.jsx)("meta", { property: "og:title", content: metadata.openGraphTitle }, "metadata-og-title")) : null, metadata.openGraphDescription ? ((0, jsx_runtime_1.jsx)("meta", { property: "og:description", content: metadata.openGraphDescription }, "metadata-og-description")) : null, metadata.openGraphImage ? ((0, jsx_runtime_1.jsx)("meta", { property: "og:image", content: metadata.openGraphImage }, "metadata-og-image")) : null, metadata.openGraphImageAlt ? ((0, jsx_runtime_1.jsx)("meta", { property: "og:image:alt", content: metadata.openGraphImageAlt }, "metadata-og-image-alt")) : null, metadata.openGraphType ? ((0, jsx_runtime_1.jsx)("meta", { property: "og:type", content: metadata.openGraphType }, "metadata-og-type")) : null, metadata.twitterCard ? ((0, jsx_runtime_1.jsx)("meta", { name: "twitter:card", content: metadata.twitterCard }, "metadata-twitter-card")) : null, metadata.twitterTitle ? ((0, jsx_runtime_1.jsx)("meta", { name: "twitter:title", content: metadata.twitterTitle }, "metadata-twitter-title")) : null, metadata.twitterDescription ? ((0, jsx_runtime_1.jsx)("meta", { name: "twitter:description", content: metadata.twitterDescription }, "metadata-twitter-description")) : null, metadata.twitterImage ? ((0, jsx_runtime_1.jsx)("meta", { name: "twitter:image", content: metadata.twitterImage }, "metadata-twitter-image")) : null, metadata.faviconHref ? ((0, jsx_runtime_1.jsx)("link", { rel: "icon", href: metadata.faviconHref, type: metadata.faviconMimeType }, "metadata-favicon")) : null, metadata.appleTouchIconHref ? ((0, jsx_runtime_1.jsx)("link", { rel: "apple-touch-icon", href: metadata.appleTouchIconHref }, "metadata-apple-touch-icon")) : null, metadata.organizationJsonLd ? ((0, jsx_runtime_1.jsx)("script", { id: "metadata-jsonld-organization", type: "application/ld+json", "data-jsonld-key": "metadata-jsonld-organization", dangerouslySetInnerHTML: {
100
+ __html: (0, seo_utils_1.safeJsonForInlineScript)(metadata.organizationJsonLd)
101
+ } }, "metadata-jsonld-organization")) : null] }));
102
+ }
103
+ function AppMetadataOverridesHead(props) {
104
+ const { overrides } = props;
105
+ if (!overrides) {
106
+ return null;
107
+ }
108
+ const title = (0, seo_utils_1.cleanString)(overrides.title);
109
+ const description = (0, seo_utils_1.cleanString)(overrides.description);
110
+ const keywordsList = (0, seo_utils_1.parseStringList)(overrides.keywords);
111
+ const keywords = keywordsList.length > 0 ? keywordsList.join(", ") : undefined;
112
+ const robots = (0, seo_utils_1.cleanString)(overrides.robots);
113
+ const canonicalUrl = (0, seo_utils_1.cleanString)(overrides.canonicalUrl);
114
+ const themeColor = (0, seo_utils_1.cleanString)(overrides.themeColor);
115
+ const siteName = (0, seo_utils_1.cleanString)(overrides.siteName);
116
+ const openGraphUrl = (0, seo_utils_1.cleanString)(overrides.openGraphUrl);
117
+ const openGraphTitle = pickFirst(overrides.openGraphTitle, title);
118
+ const openGraphDescription = pickFirst(overrides.openGraphDescription, description);
119
+ const openGraphImage = (0, seo_utils_1.cleanString)(overrides.openGraphImage);
120
+ const openGraphImageAlt = (0, seo_utils_1.cleanString)(overrides.openGraphImageAlt);
121
+ const openGraphType = (0, seo_utils_1.cleanString)(overrides.openGraphType);
122
+ const twitterTitle = pickFirst(overrides.twitterTitle, openGraphTitle);
123
+ const twitterDescription = pickFirst(overrides.twitterDescription, openGraphDescription);
124
+ const twitterImage = pickFirst(overrides.twitterImage, openGraphImage);
125
+ const twitterCard = pickFirst(overrides.twitterCard, twitterImage ? "summary_large_image" : "summary");
126
+ const faviconHref = (0, seo_utils_1.cleanString)(overrides.faviconHref);
127
+ const faviconMimeType = (0, seo_utils_1.cleanString)(overrides.faviconMimeType);
128
+ const appleTouchIconHref = (0, seo_utils_1.cleanString)(overrides.appleTouchIconHref);
129
+ const metadata = {
130
+ title,
131
+ description,
132
+ keywords,
133
+ robots,
134
+ canonicalUrl,
135
+ themeColor,
136
+ siteName,
137
+ openGraphUrl,
138
+ openGraphTitle,
139
+ openGraphDescription,
140
+ openGraphImage,
141
+ openGraphImageAlt,
142
+ openGraphType,
143
+ twitterCard,
144
+ twitterTitle,
145
+ twitterDescription,
146
+ twitterImage,
147
+ faviconHref,
148
+ faviconMimeType,
149
+ appleTouchIconHref
150
+ };
151
+ if (!hasAnyHeadMetadata(metadata)) {
152
+ return null;
153
+ }
154
+ return (0, jsx_runtime_1.jsx)(head_1.default, { children: renderHeadTags(metadata) });
155
+ }
156
+ function MetadataOverrides(props) {
157
+ const { siteSettings, pageMeta } = props;
158
+ const site = React.useMemo(() => (0, seo_utils_1.parseObject)(siteSettings), [siteSettings]);
159
+ const page = React.useMemo(() => (0, seo_utils_1.parseObject)(pageMeta), [pageMeta]);
160
+ const siteName = pickFirst(site?.identity_and_branding?.site_name);
161
+ const canonicalBase = pickFirst(site?.seo_defaults?.canonical_base, site?.domains_and_locales?.primary_domain);
162
+ const siteBaseUrl = pickFirst(site?.domains_and_locales?.primary_domain, site?.seo_defaults?.canonical_base);
163
+ const title = resolveTitle(page?.seo_per_page?.page_meta_title, page?.default?.page_title, site?.seo_defaults?.default_seo_title, siteName, site?.seo_defaults?.seo_title_template);
164
+ const description = pickFirst(page?.seo_per_page?.page_meta_description, site?.seo_defaults?.default_meta_description);
165
+ const keywordsList = (0, seo_utils_1.parseStringList)(page?.seo_per_page?.keywords);
166
+ const keywords = keywordsList.length > 0 ? keywordsList.join(", ") : undefined;
167
+ const canonicalUrl = pickFirst(page?.seo_per_page?.page_canonical_url, (0, seo_utils_1.toAbsoluteUrl)(page?.default?.permalink, canonicalBase), canonicalBase);
168
+ const canonicalAssetBaseUrl = pickFirst((0, seo_utils_1.resolveUrlBase)(canonicalBase, canonicalUrl), canonicalBase, canonicalUrl);
169
+ const currentOrigin = (0, seo_utils_1.getCurrentOrigin)();
170
+ const assetBaseUrl = pickFirst((0, seo_utils_1.resolveUrlBase)(currentOrigin, siteBaseUrl, canonicalAssetBaseUrl), currentOrigin, siteBaseUrl, canonicalAssetBaseUrl);
171
+ const robots = buildRobots(pickFirst(page?.seo_per_page?.page_robots_indexing, site?.seo_defaults?.robots_indexing), pickFirst(page?.seo_per_page?.page_robots_follow, site?.seo_defaults?.robots_follow));
172
+ const openGraphTitle = pickFirst(page?.social_and_sharing?.page_open_graph_title, title);
173
+ const openGraphDescription = pickFirst(page?.social_and_sharing?.page_open_graph_description, description);
174
+ const openGraphImage = (0, seo_utils_1.toAbsoluteUrl)(pickFirst(page?.social_and_sharing?.page_open_graph_image?.public_path, site?.seo_defaults?.og_image_default?.public_path), assetBaseUrl);
175
+ const openGraphImageAlt = pickFirst(page?.social_and_sharing?.page_open_graph_image?.alt_text, site?.seo_defaults?.og_image_default?.alt_text, siteName);
176
+ const faviconHref = (0, seo_utils_1.toAbsoluteUrl)(site?.identity_and_branding?.favicon?.public_path, assetBaseUrl);
177
+ const faviconMimeType = pickFirst(site?.identity_and_branding?.favicon?.mime_type);
178
+ const appleTouchIconHref = (0, seo_utils_1.toAbsoluteUrl)(site?.identity_and_branding?.apple_touch_icon?.public_path, assetBaseUrl);
179
+ const logoUrl = (0, seo_utils_1.toAbsoluteUrl)(site?.identity_and_branding?.logo?.public_path, assetBaseUrl);
180
+ const additionalDomains = (0, seo_utils_1.parseStringList)(site?.domains_and_locales?.additional_domains);
181
+ const sameAs = Array.from(new Set(additionalDomains
182
+ .map((domain) => normalizeSameAsUrl(domain, assetBaseUrl))
183
+ .filter((url) => Boolean(url))));
184
+ const organizationName = pickFirst(site?.seo_defaults?.default_seo_title, siteName, title);
185
+ const organizationUrl = canonicalAssetBaseUrl;
186
+ const organizationId = (0, seo_utils_1.buildOrganizationId)(organizationUrl);
187
+ const organizationDescription = pickFirst(site?.seo_defaults?.default_meta_description, description);
188
+ const organizationJsonLd = organizationName ||
189
+ organizationUrl ||
190
+ organizationId ||
191
+ logoUrl ||
192
+ organizationDescription ||
193
+ sameAs.length > 0
194
+ ? {
195
+ "@context": "https://schema.org",
196
+ "@type": "Organization",
197
+ ...(organizationId ? { "@id": organizationId } : {}),
198
+ ...(organizationName ? { name: organizationName } : {}),
199
+ ...(organizationUrl ? { url: organizationUrl } : {}),
200
+ ...(logoUrl ? { logo: logoUrl } : {}),
201
+ ...(organizationDescription ? { description: organizationDescription } : {}),
202
+ ...(sameAs.length > 0 ? { sameAs } : {})
203
+ }
204
+ : undefined;
205
+ const themeColor = pickFirst(site?.identity_and_branding?.primary_color);
206
+ const twitterCard = openGraphImage ? "summary_large_image" : "summary";
207
+ const metadata = {
208
+ title,
209
+ description,
210
+ keywords,
211
+ robots,
212
+ canonicalUrl,
213
+ themeColor,
214
+ siteName,
215
+ openGraphUrl: canonicalUrl,
216
+ openGraphTitle,
217
+ openGraphDescription,
218
+ openGraphImage,
219
+ openGraphImageAlt,
220
+ openGraphType: "website",
221
+ twitterCard,
222
+ twitterTitle: openGraphTitle,
223
+ twitterDescription: openGraphDescription,
224
+ twitterImage: openGraphImage,
225
+ faviconHref,
226
+ faviconMimeType,
227
+ appleTouchIconHref,
228
+ organizationJsonLd
229
+ };
230
+ const organizationJson = organizationJsonLd
231
+ ? (0, seo_utils_1.safeJsonForInlineScript)(organizationJsonLd)
232
+ : undefined;
233
+ React.useEffect(() => {
234
+ if (!organizationJson) {
235
+ return;
236
+ }
237
+ const cleanup = () => {
238
+ (0, seo_utils_1.removeDuplicateJsonLdScripts)("metadata-jsonld-organization", "metadata-jsonld-organization", organizationJson);
239
+ };
240
+ cleanup();
241
+ if (typeof document === "undefined" || typeof MutationObserver === "undefined") {
242
+ return undefined;
243
+ }
244
+ let rafId = null;
245
+ const observer = new MutationObserver(() => {
246
+ if (rafId != null) {
247
+ return;
248
+ }
249
+ rafId = window.requestAnimationFrame(() => {
250
+ rafId = null;
251
+ cleanup();
252
+ });
253
+ });
254
+ observer.observe(document.documentElement, {
255
+ childList: true,
256
+ subtree: true
257
+ });
258
+ return () => {
259
+ observer.disconnect();
260
+ if (rafId != null) {
261
+ window.cancelAnimationFrame(rafId);
262
+ }
263
+ };
264
+ }, [organizationJson]);
265
+ if (!hasAnyHeadMetadata(metadata)) {
266
+ return null;
267
+ }
268
+ return (0, jsx_runtime_1.jsx)(head_1.default, { children: renderHeadTags(metadata) });
269
+ }
270
+ exports.default = MetadataOverrides;
package/dist/index.d.ts CHANGED
@@ -1,8 +1,11 @@
1
1
  export { ApiCall, type ApiCallProps, type ApiType } from "./components/ApiCall";
2
+ export { MetadataOverrides, AppMetadataOverridesHead, type MetadataOverridesProps, type AppMetadataOverrides, type PageMeta, type SiteSettings } from "./components/MetadataOverrides";
3
+ export { FaqJsonLd, BlogPostingJsonLd, CustomJsonLd, type FaqJsonLdProps, type BlogPostingJsonLdProps, type CustomJsonLdProps } from "./components/JsonLdSchemas";
2
4
  export { registerCodeComponents } from "./register";
3
5
  export { CXF_COOKIE_NAMES, CXF_HEADER_NAMES, type CxfTokens, getTokensFromCookies, buildAuthHeaders, makeAuthenticatedRequest, extractSetCookieHeaders, extractTokensFromSetCookie, buildCookieHeader, getCxfBaseUrl, getCxfApiKey, buildCookieString, setTokensAsCookies, clearAuthCookies, } from "./lib/cxf-auth";
4
6
  export { buildQueryString as buildApiQueryString, normalizePath, setAuthCookies, handleError, sendResponse, } from "./lib/api-route-helpers";
5
7
  export { useIsrPrefetch, useApiFetch, type PreloadedDataResult, type UseApiFetchOptions, } from "./lib/api-call-hooks";
8
+ export { ASSET_QUERY_PARAMS_COOKIE_NAME, normalizeAssetQueryParams, serializeAssetQueryParamsCookie, extractAssetQueryParamsFromCookie, useSyncAssetQueryParams, type AssetQueryParamValue, type AssetQueryParams, type NormalizedAssetQueryParams, } from "./lib/assets-query-params";
6
9
  export { EndpointDataContext, PrefetchCollectorContext, PrefetchCollectorProvider, ServerPageWrapper, createServerProps, normalizeEndpointPath, buildQueryString, buildEndpointKey, type EndpointConfig, type ServerPageProps, type ServerPageWrapperProps, type PrefetchRequest, } from "./lib/server-props";
7
10
  export { CxfApp } from "./pages/app";
8
11
  export { PlasmicHost } from "./pages/plasmic-host";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,SAAS,EACd,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,IAAI,mBAAmB,EACvC,aAAa,EACb,cAAc,EACd,WAAW,EACX,YAAY,GACb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,cAAc,EACd,WAAW,EACX,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,SAAS,EACd,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,IAAI,mBAAmB,EACvC,aAAa,EACb,cAAc,EACd,WAAW,EACX,YAAY,GACb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,cAAc,EACd,WAAW,EACX,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EACzB,+BAA+B,EAC/B,iCAAiC,EACjC,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,GAChC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cxfNextConfig = exports.assetsApiHandler = exports.cxfApiHandler = exports.PlasmicHost = exports.CxfApp = exports.buildEndpointKey = exports.buildQueryString = exports.normalizeEndpointPath = exports.createServerProps = exports.ServerPageWrapper = exports.PrefetchCollectorProvider = exports.PrefetchCollectorContext = exports.EndpointDataContext = exports.useApiFetch = exports.useIsrPrefetch = exports.sendResponse = exports.handleError = exports.setAuthCookies = exports.normalizePath = exports.buildApiQueryString = exports.clearAuthCookies = exports.setTokensAsCookies = exports.buildCookieString = exports.getCxfApiKey = exports.getCxfBaseUrl = exports.buildCookieHeader = exports.extractTokensFromSetCookie = exports.extractSetCookieHeaders = exports.makeAuthenticatedRequest = exports.buildAuthHeaders = exports.getTokensFromCookies = exports.CXF_HEADER_NAMES = exports.CXF_COOKIE_NAMES = exports.registerCodeComponents = exports.ApiCall = void 0;
3
+ exports.cxfNextConfig = exports.assetsApiHandler = exports.cxfApiHandler = exports.PlasmicHost = exports.CxfApp = exports.buildEndpointKey = exports.buildQueryString = exports.normalizeEndpointPath = exports.createServerProps = exports.ServerPageWrapper = exports.PrefetchCollectorProvider = exports.PrefetchCollectorContext = exports.EndpointDataContext = exports.useSyncAssetQueryParams = exports.extractAssetQueryParamsFromCookie = exports.serializeAssetQueryParamsCookie = exports.normalizeAssetQueryParams = exports.ASSET_QUERY_PARAMS_COOKIE_NAME = exports.useApiFetch = exports.useIsrPrefetch = exports.sendResponse = exports.handleError = exports.setAuthCookies = exports.normalizePath = exports.buildApiQueryString = exports.clearAuthCookies = exports.setTokensAsCookies = exports.buildCookieString = exports.getCxfApiKey = exports.getCxfBaseUrl = exports.buildCookieHeader = exports.extractTokensFromSetCookie = exports.extractSetCookieHeaders = exports.makeAuthenticatedRequest = exports.buildAuthHeaders = exports.getTokensFromCookies = exports.CXF_HEADER_NAMES = exports.CXF_COOKIE_NAMES = exports.registerCodeComponents = exports.CustomJsonLd = exports.BlogPostingJsonLd = exports.FaqJsonLd = exports.AppMetadataOverridesHead = exports.MetadataOverrides = exports.ApiCall = void 0;
4
4
  // Main exports
5
5
  var ApiCall_1 = require("./components/ApiCall");
6
6
  Object.defineProperty(exports, "ApiCall", { enumerable: true, get: function () { return ApiCall_1.ApiCall; } });
7
+ var MetadataOverrides_1 = require("./components/MetadataOverrides");
8
+ Object.defineProperty(exports, "MetadataOverrides", { enumerable: true, get: function () { return MetadataOverrides_1.MetadataOverrides; } });
9
+ Object.defineProperty(exports, "AppMetadataOverridesHead", { enumerable: true, get: function () { return MetadataOverrides_1.AppMetadataOverridesHead; } });
10
+ var JsonLdSchemas_1 = require("./components/JsonLdSchemas");
11
+ Object.defineProperty(exports, "FaqJsonLd", { enumerable: true, get: function () { return JsonLdSchemas_1.FaqJsonLd; } });
12
+ Object.defineProperty(exports, "BlogPostingJsonLd", { enumerable: true, get: function () { return JsonLdSchemas_1.BlogPostingJsonLd; } });
13
+ Object.defineProperty(exports, "CustomJsonLd", { enumerable: true, get: function () { return JsonLdSchemas_1.CustomJsonLd; } });
7
14
  var register_1 = require("./register");
8
15
  Object.defineProperty(exports, "registerCodeComponents", { enumerable: true, get: function () { return register_1.registerCodeComponents; } });
9
16
  // Library exports
@@ -30,6 +37,12 @@ Object.defineProperty(exports, "sendResponse", { enumerable: true, get: function
30
37
  var api_call_hooks_1 = require("./lib/api-call-hooks");
31
38
  Object.defineProperty(exports, "useIsrPrefetch", { enumerable: true, get: function () { return api_call_hooks_1.useIsrPrefetch; } });
32
39
  Object.defineProperty(exports, "useApiFetch", { enumerable: true, get: function () { return api_call_hooks_1.useApiFetch; } });
40
+ var assets_query_params_1 = require("./lib/assets-query-params");
41
+ Object.defineProperty(exports, "ASSET_QUERY_PARAMS_COOKIE_NAME", { enumerable: true, get: function () { return assets_query_params_1.ASSET_QUERY_PARAMS_COOKIE_NAME; } });
42
+ Object.defineProperty(exports, "normalizeAssetQueryParams", { enumerable: true, get: function () { return assets_query_params_1.normalizeAssetQueryParams; } });
43
+ Object.defineProperty(exports, "serializeAssetQueryParamsCookie", { enumerable: true, get: function () { return assets_query_params_1.serializeAssetQueryParamsCookie; } });
44
+ Object.defineProperty(exports, "extractAssetQueryParamsFromCookie", { enumerable: true, get: function () { return assets_query_params_1.extractAssetQueryParamsFromCookie; } });
45
+ Object.defineProperty(exports, "useSyncAssetQueryParams", { enumerable: true, get: function () { return assets_query_params_1.useSyncAssetQueryParams; } });
33
46
  var server_props_1 = require("./lib/server-props");
34
47
  Object.defineProperty(exports, "EndpointDataContext", { enumerable: true, get: function () { return server_props_1.EndpointDataContext; } });
35
48
  Object.defineProperty(exports, "PrefetchCollectorContext", { enumerable: true, get: function () { return server_props_1.PrefetchCollectorContext; } });
@@ -15,11 +15,12 @@ export interface UseApiFetchOptions {
15
15
  onSuccess?: (data: any) => void;
16
16
  onError?: (error: string) => void;
17
17
  unwrapData?: boolean;
18
+ canvasAutoFetchCooldownMs?: number;
18
19
  }
19
20
  export declare function useApiFetch(options: UseApiFetchOptions): {
20
21
  data: any;
21
22
  error: string | null;
22
23
  loading: boolean;
23
- fetchData: () => (() => void) | undefined;
24
+ fetchData: (reason?: "auto" | "trigger" | "manual") => (() => void) | undefined;
24
25
  };
25
26
  //# sourceMappingURL=api-call-hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-call-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/api-call-hooks.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,GAAG,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EACvC,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,GAAG,GAChB,mBAAmB,CA+CrB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAkCD,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB;;;;;EAyLtD"}
1
+ {"version":3,"file":"api-call-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/api-call-hooks.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,GAAG,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EACvC,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,GAAG,GAChB,mBAAmB,CA+CrB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC;AAmED,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB;;;;yBA0ER,MAAM,GAAG,SAAS,GAAG,QAAQ;EAuI3E"}
@@ -77,6 +77,21 @@ function useIsrPrefetch(endpointPath, params, method, initialData) {
77
77
  : { preloaded: undefined, hasExactPreload: false };
78
78
  }, [initialData, endpointPath, params, endpointDataMap, isGet]);
79
79
  }
80
+ const EDITOR_AUTO_FETCH_COOLDOWN_MS = 5 * 60 * 1000;
81
+ const editorAutoFetchTimestamps = new Map();
82
+ const MAX_EDITOR_FETCH_KEYS = 20;
83
+ function pruneOldestEditorFetchEntries() {
84
+ if (editorAutoFetchTimestamps.size <= MAX_EDITOR_FETCH_KEYS)
85
+ return;
86
+ const overflowCount = editorAutoFetchTimestamps.size - MAX_EDITOR_FETCH_KEYS;
87
+ let removed = 0;
88
+ for (const key of editorAutoFetchTimestamps.keys()) {
89
+ editorAutoFetchTimestamps.delete(key);
90
+ removed += 1;
91
+ if (removed >= overflowCount)
92
+ break;
93
+ }
94
+ }
80
95
  function unwrapResponseData(data, shouldUnwrap) {
81
96
  if (!shouldUnwrap ||
82
97
  !data ||
@@ -88,6 +103,25 @@ function unwrapResponseData(data, shouldUnwrap) {
88
103
  }
89
104
  return data.data;
90
105
  }
106
+ function stableSerialize(value) {
107
+ if (value === undefined)
108
+ return "";
109
+ if (value === null)
110
+ return "null";
111
+ if (Array.isArray(value)) {
112
+ return `[${value.map((item) => stableSerialize(item)).join(",")}]`;
113
+ }
114
+ if (typeof value === "object") {
115
+ const keys = Object.keys(value).sort();
116
+ return `{${keys.map((k) => `${JSON.stringify(k)}:${stableSerialize(value[k])}`).join(",")}}`;
117
+ }
118
+ return JSON.stringify(value);
119
+ }
120
+ function isPlasmicHostRuntime() {
121
+ if (typeof window === "undefined")
122
+ return false;
123
+ return window.location.pathname.includes("/plasmic-host");
124
+ }
91
125
  function getUtmParamsFromLocation() {
92
126
  if (typeof window === "undefined")
93
127
  return null;
@@ -109,7 +143,13 @@ function getUtmParamsFromLocation() {
109
143
  }
110
144
  }
111
145
  function useApiFetch(options) {
112
- const { endpointPath, method = "GET", params, body, preloaded, hasExactPreload, shouldAutoFetch = true, trigger, onSuccess, onError, unwrapData = false, } = options;
146
+ const { endpointPath, method = "GET", params, body, preloaded, hasExactPreload, shouldAutoFetch = true, trigger, onSuccess, onError, unwrapData = false, canvasAutoFetchCooldownMs = EDITOR_AUTO_FETCH_COOLDOWN_MS, } = options;
147
+ const paramsSignature = stableSerialize(params);
148
+ const bodySignature = stableSerialize(body);
149
+ const paramsRef = React.useRef(params);
150
+ const bodyRef = React.useRef(body);
151
+ paramsRef.current = params;
152
+ bodyRef.current = body;
113
153
  // Also check context directly in case preloaded prop hasn't updated yet during hydration
114
154
  const endpointDataMap = React.useContext(server_props_1.EndpointDataContext);
115
155
  const contextData = React.useMemo(() => {
@@ -155,23 +195,36 @@ function useApiFetch(options) {
155
195
  isHydratingRef.current = false;
156
196
  }
157
197
  }, [effectivePreloaded, data]);
158
- const fetchData = React.useCallback(() => {
198
+ const fetchData = React.useCallback((reason = "manual") => {
159
199
  if (!endpointPath)
160
200
  return;
161
201
  const controller = new AbortController();
162
202
  (async () => {
163
203
  try {
204
+ const normalizedPath = (0, server_props_1.normalizeEndpointPath)(endpointPath);
205
+ const requestKey = `${method}:${normalizedPath}:${paramsSignature}:${bodySignature}`;
206
+ if (reason === "auto" &&
207
+ method === "GET" &&
208
+ isPlasmicHostRuntime()) {
209
+ const now = Date.now();
210
+ const lastFetchAt = editorAutoFetchTimestamps.get(requestKey) ?? 0;
211
+ if (now - lastFetchAt < canvasAutoFetchCooldownMs) {
212
+ setLoading(false);
213
+ return;
214
+ }
215
+ editorAutoFetchTimestamps.set(requestKey, now);
216
+ pruneOldestEditorFetchEntries();
217
+ }
164
218
  setLoading(true);
165
219
  setError(null);
166
220
  hasTriggeredSuccessRef.current = false;
167
221
  hasTriggeredErrorRef.current = false;
168
- const normalizedPath = (0, server_props_1.normalizeEndpointPath)(endpointPath);
169
222
  // Merge current page UTM params into request params for GET requests.
170
223
  // Explicit params take precedence over UTM values if keys overlap.
171
224
  const utmParams = method === "GET" ? getUtmParamsFromLocation() : null;
172
225
  const mergedParams = method === "GET"
173
- ? { ...(utmParams || {}), ...(params || {}) }
174
- : params;
226
+ ? { ...(utmParams || {}), ...(paramsRef.current || {}) }
227
+ : paramsRef.current;
175
228
  const queryString = method === "GET" ? (0, server_props_1.buildQueryString)(mergedParams) : "";
176
229
  const url = `/api/${normalizedPath}${queryString}`;
177
230
  const fetchOptions = {
@@ -183,8 +236,8 @@ function useApiFetch(options) {
183
236
  credentials: "include",
184
237
  signal: controller.signal,
185
238
  };
186
- if (method !== "GET" && body) {
187
- fetchOptions.body = JSON.stringify(body);
239
+ if (method !== "GET" && bodyRef.current) {
240
+ fetchOptions.body = JSON.stringify(bodyRef.current);
188
241
  }
189
242
  const resp = await fetch(url, fetchOptions);
190
243
  if (!resp.ok) {
@@ -213,13 +266,13 @@ function useApiFetch(options) {
213
266
  }
214
267
  })();
215
268
  return () => controller.abort();
216
- }, [endpointPath, method, params, body, unwrapData]);
269
+ }, [endpointPath, method, paramsSignature, bodySignature, unwrapData, canvasAutoFetchCooldownMs]);
217
270
  const prevTriggerRef = React.useRef(trigger);
218
271
  React.useEffect(() => {
219
272
  if (trigger !== undefined && trigger !== prevTriggerRef.current) {
220
273
  prevTriggerRef.current = trigger;
221
274
  if (trigger > 0)
222
- fetchData();
275
+ fetchData("trigger");
223
276
  }
224
277
  }, [trigger, fetchData]);
225
278
  // Only fetch if we should auto-fetch AND we don't have exact preloaded data
@@ -236,14 +289,14 @@ function useApiFetch(options) {
236
289
  // Re-check context and preloaded after hydration delay
237
290
  const stillNoData = effectivePreloaded === undefined || effectivePreloaded === null;
238
291
  if (stillNoData && shouldAutoFetch && !hasExactPreload) {
239
- fetchData();
292
+ fetchData("auto");
240
293
  }
241
294
  }, 0);
242
295
  return () => clearTimeout(timeoutId);
243
296
  }
244
297
  // Fetch if we don't have preloaded data (non-hydration case)
245
298
  if (!hasPreloadedData) {
246
- return fetchData();
299
+ return fetchData("auto");
247
300
  }
248
301
  }, [shouldAutoFetch, hasExactPreload, hasPreloadedData, effectivePreloaded, fetchData]);
249
302
  React.useEffect(() => {
@@ -5,6 +5,7 @@ export declare function setAuthCookies(res: NextApiResponse, tokens: {
5
5
  accessToken: string | null;
6
6
  refreshToken: string | null;
7
7
  }): void;
8
+ export declare function forwardExtraCookies(res: NextApiResponse, setCookieHeaders: string[]): void;
8
9
  export declare function handleError(res: NextApiResponse, err: any): void;
9
10
  export declare function sendResponse(res: NextApiResponse, response: Response): Promise<void>;
10
11
  //# sourceMappingURL=api-route-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-route-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/api-route-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAG5D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,MAAM,CAavE;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAOjF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,QAavH;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,QAMzD;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,iBAwB1E"}
1
+ {"version":3,"file":"api-route-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/api-route-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAG5D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,MAAM,CAavE;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAOjF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,QAavH;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAYnF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,QAMzD;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,iBAwB1E"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildQueryString = buildQueryString;
4
4
  exports.normalizePath = normalizePath;
5
5
  exports.setAuthCookies = setAuthCookies;
6
+ exports.forwardExtraCookies = forwardExtraCookies;
6
7
  exports.handleError = handleError;
7
8
  exports.sendResponse = sendResponse;
8
9
  const cxf_auth_1 = require("./cxf-auth");
@@ -42,6 +43,18 @@ function setAuthCookies(res, tokens) {
42
43
  res.setHeader("Set-Cookie", cookies);
43
44
  }
44
45
  }
46
+ function forwardExtraCookies(res, setCookieHeaders) {
47
+ const authCookieNames = new Set([cxf_auth_1.CXF_COOKIE_NAMES.ACCESS_TOKEN, cxf_auth_1.CXF_COOKIE_NAMES.REFRESH_TOKEN]);
48
+ const extraCookies = setCookieHeaders.filter((header) => {
49
+ const name = header.split("=")[0]?.trim();
50
+ return !authCookieNames.has(name);
51
+ });
52
+ if (extraCookies.length > 0) {
53
+ const existing = res.getHeader("Set-Cookie");
54
+ const current = Array.isArray(existing) ? existing : existing ? [String(existing)] : [];
55
+ res.setHeader("Set-Cookie", [...current, ...extraCookies]);
56
+ }
57
+ }
45
58
  function handleError(res, err) {
46
59
  const dev = process.env.NODE_ENV !== "production";
47
60
  return res.status(500).json({
@@ -0,0 +1,11 @@
1
+ export declare const ASSET_QUERY_PARAMS_COOKIE_NAME = "cxf_asset_query_params";
2
+ type PrimitiveParam = string | number | boolean;
3
+ export type AssetQueryParamValue = PrimitiveParam | PrimitiveParam[] | null | undefined;
4
+ export type AssetQueryParams = Record<string, AssetQueryParamValue>;
5
+ export type NormalizedAssetQueryParams = Record<string, string | string[]>;
6
+ export declare function normalizeAssetQueryParams(params: AssetQueryParams | null | undefined): NormalizedAssetQueryParams;
7
+ export declare function serializeAssetQueryParamsCookie(params: AssetQueryParams | null | undefined): string;
8
+ export declare function extractAssetQueryParamsFromCookie(cookieHeader: string | null | undefined): NormalizedAssetQueryParams;
9
+ export declare function useSyncAssetQueryParams(params: AssetQueryParams | null | undefined): void;
10
+ export {};
11
+ //# sourceMappingURL=assets-query-params.d.ts.map