@jmp-technologies/analytics 0.1.36 → 0.1.38
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/README.md +1 -1
- package/dist/astro/client.cjs +83 -42
- package/dist/astro/client.cjs.map +1 -1
- package/dist/astro/client.d.cts +2 -2
- package/dist/astro/client.d.ts +2 -2
- package/dist/astro/client.js +2 -2
- package/dist/astro/content.cjs +137 -70
- package/dist/astro/content.cjs.map +1 -1
- package/dist/astro/content.d.cts +5 -4
- package/dist/astro/content.d.ts +5 -4
- package/dist/astro/content.js +5 -3
- package/dist/astro/integration.cjs +104 -66
- package/dist/astro/integration.cjs.map +1 -1
- package/dist/astro/integration.js +3 -3
- package/dist/astro/middleware.cjs +96 -66
- package/dist/astro/middleware.cjs.map +1 -1
- package/dist/astro/middleware.d.cts +2 -2
- package/dist/astro/middleware.d.ts +2 -2
- package/dist/astro/middleware.js +2 -2
- package/dist/astro/register.cjs +104 -66
- package/dist/astro/register.cjs.map +1 -1
- package/dist/astro/register.js +3 -3
- package/dist/{chunk-AIFJ7DVO.js → chunk-6WQMWPEY.js} +196 -105
- package/dist/chunk-6WQMWPEY.js.map +1 -0
- package/dist/{chunk-YFG3AQ35.js → chunk-EBU4DKHW.js} +47 -9
- package/dist/chunk-EBU4DKHW.js.map +1 -0
- package/dist/{chunk-AGGLRTUQ.js → chunk-JVFN7MF2.js} +2 -2
- package/dist/{chunk-3ZEMXII6.js → chunk-NCF3J4HV.js} +3 -3
- package/dist/{chunk-HFLU7HQE.js → chunk-ONIPLMOY.js} +2 -2
- package/dist/{chunk-NAQU6RAE.js → chunk-PQOTEV6O.js} +3 -3
- package/dist/{chunk-RNZTKIC6.js → chunk-WHUHCTBQ.js} +16 -3
- package/dist/chunk-WHUHCTBQ.js.map +1 -0
- package/dist/{create-jmp-analytics-Bz0-K0Af.d.cts → create-jmp-analytics-DMSXmVIH.d.cts} +1 -1
- package/dist/{create-jmp-analytics-DRjrlWUn.d.ts → create-jmp-analytics-JZ3pqNBQ.d.ts} +1 -1
- package/dist/index.cjs +145 -76
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -6
- package/dist/index.d.ts +10 -6
- package/dist/index.js +6 -2
- package/dist/next/content.cjs +138 -70
- package/dist/next/content.cjs.map +1 -1
- package/dist/next/content.d.cts +5 -4
- package/dist/next/content.d.ts +5 -4
- package/dist/next/content.js +6 -3
- package/dist/next/content.js.map +1 -1
- package/dist/next/instrumentation.cjs +104 -66
- package/dist/next/instrumentation.cjs.map +1 -1
- package/dist/next/instrumentation.js +2 -2
- package/dist/next/landing-pages.cjs +155 -129
- package/dist/next/landing-pages.cjs.map +1 -1
- package/dist/next/landing-pages.d.cts +2 -2
- package/dist/next/landing-pages.d.ts +2 -2
- package/dist/next/landing-pages.js +7 -8
- package/dist/next/landing-pages.js.map +1 -1
- package/dist/next/locations.cjs +114 -88
- package/dist/next/locations.cjs.map +1 -1
- package/dist/next/locations.d.cts +2 -2
- package/dist/next/locations.d.ts +2 -2
- package/dist/next/locations.js +7 -8
- package/dist/next/locations.js.map +1 -1
- package/dist/next/middleware.cjs +96 -66
- package/dist/next/middleware.cjs.map +1 -1
- package/dist/next/middleware.d.cts +2 -2
- package/dist/next/middleware.d.ts +2 -2
- package/dist/next/middleware.js +2 -2
- package/dist/next/site-root-server.cjs +103 -69
- package/dist/next/site-root-server.cjs.map +1 -1
- package/dist/next/site-root-server.js +4 -4
- package/dist/next.cjs +37 -2
- package/dist/next.cjs.map +1 -1
- package/dist/next.d.cts +3 -3
- package/dist/next.d.ts +3 -3
- package/dist/next.js +4 -4
- package/dist/react.cjs +88 -53
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +3 -3
- package/dist/{site-config-Cgq67uQ1.d.cts → site-config-BLnwuRC2.d.ts} +9 -3
- package/dist/{site-config-BxEmJxBB.d.ts → site-config-BZJS8Hp_.d.cts} +9 -3
- package/dist/{track-page-view-BCX1Dsfk.d.cts → track-page-view-BJQqn2Bg.d.cts} +1 -1
- package/dist/{track-page-view-74Su6lQY.d.ts → track-page-view-DGKRUIxm.d.ts} +1 -1
- package/dist/{types-yNgoakwk.d.ts → types-CYrgEwUF.d.cts} +16 -2
- package/dist/{types-yNgoakwk.d.cts → types-CYrgEwUF.d.ts} +16 -2
- package/dist/{utils-BLoWWfSw.d.ts → utils-B1Nt3sBU.d.ts} +1 -1
- package/dist/{utils-UPTIdK1D.d.cts → utils-U6TGMIAB.d.cts} +1 -1
- package/docs/legal-and-privacy.md +2 -2
- package/package.json +1 -1
- package/dist/chunk-AIFJ7DVO.js.map +0 -1
- package/dist/chunk-RI3KKDPX.js +0 -75
- package/dist/chunk-RI3KKDPX.js.map +0 -1
- package/dist/chunk-RNZTKIC6.js.map +0 -1
- package/dist/chunk-YFG3AQ35.js.map +0 -1
- /package/dist/{chunk-AGGLRTUQ.js.map → chunk-JVFN7MF2.js.map} +0 -0
- /package/dist/{chunk-3ZEMXII6.js.map → chunk-NCF3J4HV.js.map} +0 -0
- /package/dist/{chunk-HFLU7HQE.js.map → chunk-ONIPLMOY.js.map} +0 -0
- /package/dist/{chunk-NAQU6RAE.js.map → chunk-PQOTEV6O.js.map} +0 -0
|
@@ -55,7 +55,7 @@ var import_navigation = require("next/navigation");
|
|
|
55
55
|
var LANDING_REFERER_COOKIE_MAX_AGE_SEC = 30 * 60;
|
|
56
56
|
|
|
57
57
|
// package.json
|
|
58
|
-
var version = "0.1.
|
|
58
|
+
var version = "0.1.38";
|
|
59
59
|
|
|
60
60
|
// src/constants.ts
|
|
61
61
|
var JMP_ANALYTICS_SDK_VERSION = version;
|
|
@@ -69,6 +69,152 @@ function normalizeBaseUrl(baseUrl) {
|
|
|
69
69
|
return baseUrl.replace(/\/$/, "");
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
// src/env-public.ts
|
|
73
|
+
function firstDefined(...values) {
|
|
74
|
+
for (const v of values) {
|
|
75
|
+
if (v) return v;
|
|
76
|
+
}
|
|
77
|
+
return void 0;
|
|
78
|
+
}
|
|
79
|
+
function readJmpPublicEnvFromProcessEnv() {
|
|
80
|
+
if (typeof process === "undefined" || !process.env) {
|
|
81
|
+
return {};
|
|
82
|
+
}
|
|
83
|
+
const { env } = process;
|
|
84
|
+
const analyticsUrl = firstDefined(
|
|
85
|
+
env.NEXT_PUBLIC_JMP_ANALYTICS_URL,
|
|
86
|
+
env.PUBLIC_JMP_ANALYTICS_URL
|
|
87
|
+
);
|
|
88
|
+
const trackingKey = firstDefined(
|
|
89
|
+
env.NEXT_PUBLIC_JMP_TRACKING_KEY,
|
|
90
|
+
env.PUBLIC_JMP_TRACKING_KEY
|
|
91
|
+
);
|
|
92
|
+
const requireConsentRaw = firstDefined(
|
|
93
|
+
env.NEXT_PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT,
|
|
94
|
+
env.PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT
|
|
95
|
+
);
|
|
96
|
+
const autoContactRaw = firstDefined(
|
|
97
|
+
env.NEXT_PUBLIC_JMP_AUTO_CONTACT_LINKS,
|
|
98
|
+
env.PUBLIC_JMP_AUTO_CONTACT_LINKS
|
|
99
|
+
);
|
|
100
|
+
return {
|
|
101
|
+
analyticsUrl,
|
|
102
|
+
trackingKey,
|
|
103
|
+
requireConsent: requireConsentRaw === "true",
|
|
104
|
+
autoContactLinks: autoContactRaw === "true"
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function readJmpPublicEnvFromProcess(overrides) {
|
|
108
|
+
const fromEnv = readJmpPublicEnvFromProcessEnv();
|
|
109
|
+
return {
|
|
110
|
+
analyticsUrl: firstDefined(overrides?.analyticsUrl, fromEnv.analyticsUrl),
|
|
111
|
+
trackingKey: firstDefined(overrides?.trackingKey, fromEnv.trackingKey),
|
|
112
|
+
requireConsent: overrides?.requireConsent ?? fromEnv.requireConsent,
|
|
113
|
+
autoContactLinks: overrides?.autoContactLinks ?? fromEnv.autoContactLinks
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// src/site-config.ts
|
|
118
|
+
var registeredSite = null;
|
|
119
|
+
function getJmpSiteDefinition() {
|
|
120
|
+
return registeredSite;
|
|
121
|
+
}
|
|
122
|
+
function getJmpContentConfig() {
|
|
123
|
+
const { analyticsUrl, trackingKey } = readJmpPublicEnvFromProcess();
|
|
124
|
+
if (!analyticsUrl || !trackingKey) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
const site = getJmpSiteDefinition();
|
|
128
|
+
const contentWrappers = site?.contentWrappers ?? void 0;
|
|
129
|
+
const inferredMode = contentWrappers && contentWrappers.length > 0 ? "manual" : void 0;
|
|
130
|
+
return {
|
|
131
|
+
baseUrl: analyticsUrl,
|
|
132
|
+
trackingKey,
|
|
133
|
+
contentWrappers,
|
|
134
|
+
contentManifest: site?.contentManifest ?? void 0,
|
|
135
|
+
contentWrapperMode: site?.contentWrapperMode ?? inferredMode
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// src/landing-pages/hub.ts
|
|
140
|
+
var JMP_LANDING_HUB = {
|
|
141
|
+
location: {
|
|
142
|
+
title: "Areas we serve",
|
|
143
|
+
path: "/areas",
|
|
144
|
+
description: "Local pages for cities and regions we work in.",
|
|
145
|
+
breadcrumb: "Areas",
|
|
146
|
+
segment: "areas"
|
|
147
|
+
},
|
|
148
|
+
service: {
|
|
149
|
+
title: "Services",
|
|
150
|
+
path: "/services",
|
|
151
|
+
description: "What we offer and how we help.",
|
|
152
|
+
breadcrumb: "Services",
|
|
153
|
+
segment: "services"
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
function jmpLandingKindSegment(kind) {
|
|
157
|
+
return JMP_LANDING_HUB[kind].segment;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// src/landing-pages/utils.ts
|
|
161
|
+
function plainTextFromMarkdown(input, maxLength = 5e3) {
|
|
162
|
+
return input.replace(/[#*_`[\]]/g, "").trim().slice(0, maxLength);
|
|
163
|
+
}
|
|
164
|
+
function resolveJmpSiteUrl(override) {
|
|
165
|
+
const fromArg = override?.trim().replace(/\/$/, "");
|
|
166
|
+
if (fromArg) return fromArg;
|
|
167
|
+
const fromConfig = getJmpSiteDefinition()?.siteUrl?.trim().replace(/\/$/, "");
|
|
168
|
+
return fromConfig || null;
|
|
169
|
+
}
|
|
170
|
+
function absoluteJmpSiteUrl(path, siteUrl) {
|
|
171
|
+
const base = resolveJmpSiteUrl(siteUrl);
|
|
172
|
+
if (!base) {
|
|
173
|
+
return path.startsWith("/") ? path : `/${path}`;
|
|
174
|
+
}
|
|
175
|
+
const normalized = path.startsWith("/") ? path : `/${path}`;
|
|
176
|
+
return `${base}${normalized}`;
|
|
177
|
+
}
|
|
178
|
+
function filterJmpLandingPagesForDefaultLocale(pages, kind) {
|
|
179
|
+
const segment = jmpLandingKindSegment(kind);
|
|
180
|
+
return pages.filter((page) => {
|
|
181
|
+
const parts = page.path.split("/").filter(Boolean);
|
|
182
|
+
return parts[0] === segment;
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
function filterJmpLandingPagesForLocalizedRoutes(pages, kind) {
|
|
186
|
+
const segment = jmpLandingKindSegment(kind);
|
|
187
|
+
return pages.filter((page) => {
|
|
188
|
+
const parts = page.path.split("/").filter(Boolean);
|
|
189
|
+
return parts.length >= 3 && parts[1] === segment;
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
function jmpLocalizedLandingStaticParams(pages, kind) {
|
|
193
|
+
return filterJmpLandingPagesForLocalizedRoutes(pages, kind).map((page) => {
|
|
194
|
+
const [locale, , slug] = page.path.split("/").filter(Boolean);
|
|
195
|
+
return { locale, slug };
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// src/request-origin.ts
|
|
200
|
+
function resolveJmpRequestOrigin() {
|
|
201
|
+
const fromSite = resolveJmpSiteUrl();
|
|
202
|
+
if (fromSite) {
|
|
203
|
+
return fromSite;
|
|
204
|
+
}
|
|
205
|
+
if (typeof process === "undefined") {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
return process.env.NEXT_PUBLIC_SITE_URL?.trim().replace(/\/$/, "") || null;
|
|
209
|
+
}
|
|
210
|
+
function withJmpOriginHeader(headers) {
|
|
211
|
+
const origin = resolveJmpRequestOrigin();
|
|
212
|
+
if (!origin) {
|
|
213
|
+
return headers;
|
|
214
|
+
}
|
|
215
|
+
return { ...headers, Origin: origin };
|
|
216
|
+
}
|
|
217
|
+
|
|
72
218
|
// src/content/manifest.ts
|
|
73
219
|
var JMP_CONTENT_MANIFEST_VERSION = 1;
|
|
74
220
|
var TRUST_SECTIONS = /* @__PURE__ */ new Set([
|
|
@@ -273,6 +419,11 @@ function inferWrapperSlotsFromManifest(manifest) {
|
|
|
273
419
|
}
|
|
274
420
|
|
|
275
421
|
// src/content/fetch.ts
|
|
422
|
+
function jmpContentRequestHeaders(config) {
|
|
423
|
+
return withJmpOriginHeader({
|
|
424
|
+
"X-JMP-Tracking-Key": config.trackingKey
|
|
425
|
+
});
|
|
426
|
+
}
|
|
276
427
|
async function getContent(config, path) {
|
|
277
428
|
const text = await getContentText(config, path);
|
|
278
429
|
try {
|
|
@@ -295,9 +446,7 @@ async function getContentText(config, path) {
|
|
|
295
446
|
}
|
|
296
447
|
const res = await resolvedFetch(url, {
|
|
297
448
|
method: "GET",
|
|
298
|
-
headers:
|
|
299
|
-
"X-JMP-Tracking-Key": config.trackingKey
|
|
300
|
-
}
|
|
449
|
+
headers: jmpContentRequestHeaders(config)
|
|
301
450
|
});
|
|
302
451
|
const text = await res.text();
|
|
303
452
|
if (!res.ok) {
|
|
@@ -324,6 +473,7 @@ var WRAPPER_SLOT_ORDER = [
|
|
|
324
473
|
"blog",
|
|
325
474
|
"faq",
|
|
326
475
|
"contact",
|
|
476
|
+
"legal",
|
|
327
477
|
"trust",
|
|
328
478
|
"trust.summary",
|
|
329
479
|
"trust.testimonials",
|
|
@@ -482,7 +632,7 @@ async function registerJmpContentWrappers(config) {
|
|
|
482
632
|
method: "POST",
|
|
483
633
|
headers: {
|
|
484
634
|
"Content-Type": "application/json",
|
|
485
|
-
|
|
635
|
+
...jmpContentRequestHeaders(config)
|
|
486
636
|
},
|
|
487
637
|
body: JSON.stringify(body)
|
|
488
638
|
});
|
|
@@ -504,70 +654,6 @@ async function registerJmpContentWrappers(config) {
|
|
|
504
654
|
}
|
|
505
655
|
setContentWrapperSyncHandler(registerJmpContentWrappers);
|
|
506
656
|
|
|
507
|
-
// src/env-public.ts
|
|
508
|
-
function firstDefined(...values) {
|
|
509
|
-
for (const v of values) {
|
|
510
|
-
if (v) return v;
|
|
511
|
-
}
|
|
512
|
-
return void 0;
|
|
513
|
-
}
|
|
514
|
-
function readJmpPublicEnvFromProcessEnv() {
|
|
515
|
-
if (typeof process === "undefined" || !process.env) {
|
|
516
|
-
return {};
|
|
517
|
-
}
|
|
518
|
-
const { env } = process;
|
|
519
|
-
const analyticsUrl = firstDefined(
|
|
520
|
-
env.NEXT_PUBLIC_JMP_ANALYTICS_URL,
|
|
521
|
-
env.PUBLIC_JMP_ANALYTICS_URL
|
|
522
|
-
);
|
|
523
|
-
const trackingKey = firstDefined(
|
|
524
|
-
env.NEXT_PUBLIC_JMP_TRACKING_KEY,
|
|
525
|
-
env.PUBLIC_JMP_TRACKING_KEY
|
|
526
|
-
);
|
|
527
|
-
const requireConsentRaw = firstDefined(
|
|
528
|
-
env.NEXT_PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT,
|
|
529
|
-
env.PUBLIC_JMP_ANALYTICS_REQUIRE_CONSENT
|
|
530
|
-
);
|
|
531
|
-
const autoContactRaw = firstDefined(
|
|
532
|
-
env.NEXT_PUBLIC_JMP_AUTO_CONTACT_LINKS,
|
|
533
|
-
env.PUBLIC_JMP_AUTO_CONTACT_LINKS
|
|
534
|
-
);
|
|
535
|
-
return {
|
|
536
|
-
analyticsUrl,
|
|
537
|
-
trackingKey,
|
|
538
|
-
requireConsent: requireConsentRaw === "true",
|
|
539
|
-
autoContactLinks: autoContactRaw === "true"
|
|
540
|
-
};
|
|
541
|
-
}
|
|
542
|
-
function readJmpPublicEnvFromProcess(overrides) {
|
|
543
|
-
const fromEnv = readJmpPublicEnvFromProcessEnv();
|
|
544
|
-
return {
|
|
545
|
-
analyticsUrl: firstDefined(overrides?.analyticsUrl, fromEnv.analyticsUrl),
|
|
546
|
-
trackingKey: firstDefined(overrides?.trackingKey, fromEnv.trackingKey),
|
|
547
|
-
requireConsent: overrides?.requireConsent ?? fromEnv.requireConsent,
|
|
548
|
-
autoContactLinks: overrides?.autoContactLinks ?? fromEnv.autoContactLinks
|
|
549
|
-
};
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
// src/site-config.ts
|
|
553
|
-
var registeredSite = null;
|
|
554
|
-
function getJmpSiteDefinition() {
|
|
555
|
-
return registeredSite;
|
|
556
|
-
}
|
|
557
|
-
function getJmpContentConfig() {
|
|
558
|
-
const { analyticsUrl, trackingKey } = readJmpPublicEnvFromProcess();
|
|
559
|
-
if (!analyticsUrl || !trackingKey) {
|
|
560
|
-
return null;
|
|
561
|
-
}
|
|
562
|
-
const site = getJmpSiteDefinition();
|
|
563
|
-
return {
|
|
564
|
-
baseUrl: analyticsUrl,
|
|
565
|
-
trackingKey,
|
|
566
|
-
contentWrappers: site?.contentWrappers ?? void 0,
|
|
567
|
-
contentManifest: site?.contentManifest ?? void 0
|
|
568
|
-
};
|
|
569
|
-
}
|
|
570
|
-
|
|
571
657
|
// src/content/site-content.ts
|
|
572
658
|
async function loadLandingPages(filters) {
|
|
573
659
|
const c = getJmpContentConfig();
|
|
@@ -592,66 +678,6 @@ async function loadLandingPageDetail(kind, slug, locale) {
|
|
|
592
678
|
}
|
|
593
679
|
}
|
|
594
680
|
|
|
595
|
-
// src/landing-pages/hub.ts
|
|
596
|
-
var JMP_LANDING_HUB = {
|
|
597
|
-
location: {
|
|
598
|
-
title: "Areas we serve",
|
|
599
|
-
path: "/areas",
|
|
600
|
-
description: "Local pages for cities and regions we work in.",
|
|
601
|
-
breadcrumb: "Areas",
|
|
602
|
-
segment: "areas"
|
|
603
|
-
},
|
|
604
|
-
service: {
|
|
605
|
-
title: "Services",
|
|
606
|
-
path: "/services",
|
|
607
|
-
description: "What we offer and how we help.",
|
|
608
|
-
breadcrumb: "Services",
|
|
609
|
-
segment: "services"
|
|
610
|
-
}
|
|
611
|
-
};
|
|
612
|
-
function jmpLandingKindSegment(kind) {
|
|
613
|
-
return JMP_LANDING_HUB[kind].segment;
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
// src/landing-pages/utils.ts
|
|
617
|
-
function plainTextFromMarkdown(input, maxLength = 5e3) {
|
|
618
|
-
return input.replace(/[#*_`[\]]/g, "").trim().slice(0, maxLength);
|
|
619
|
-
}
|
|
620
|
-
function resolveJmpSiteUrl(override) {
|
|
621
|
-
const fromArg = override?.trim().replace(/\/$/, "");
|
|
622
|
-
if (fromArg) return fromArg;
|
|
623
|
-
const fromConfig = getJmpSiteDefinition()?.siteUrl?.trim().replace(/\/$/, "");
|
|
624
|
-
return fromConfig || null;
|
|
625
|
-
}
|
|
626
|
-
function absoluteJmpSiteUrl(path, siteUrl) {
|
|
627
|
-
const base = resolveJmpSiteUrl(siteUrl);
|
|
628
|
-
if (!base) {
|
|
629
|
-
return path.startsWith("/") ? path : `/${path}`;
|
|
630
|
-
}
|
|
631
|
-
const normalized = path.startsWith("/") ? path : `/${path}`;
|
|
632
|
-
return `${base}${normalized}`;
|
|
633
|
-
}
|
|
634
|
-
function filterJmpLandingPagesForDefaultLocale(pages, kind) {
|
|
635
|
-
const segment = jmpLandingKindSegment(kind);
|
|
636
|
-
return pages.filter((page) => {
|
|
637
|
-
const parts = page.path.split("/").filter(Boolean);
|
|
638
|
-
return parts[0] === segment;
|
|
639
|
-
});
|
|
640
|
-
}
|
|
641
|
-
function filterJmpLandingPagesForLocalizedRoutes(pages, kind) {
|
|
642
|
-
const segment = jmpLandingKindSegment(kind);
|
|
643
|
-
return pages.filter((page) => {
|
|
644
|
-
const parts = page.path.split("/").filter(Boolean);
|
|
645
|
-
return parts.length >= 3 && parts[1] === segment;
|
|
646
|
-
});
|
|
647
|
-
}
|
|
648
|
-
function jmpLocalizedLandingStaticParams(pages, kind) {
|
|
649
|
-
return filterJmpLandingPagesForLocalizedRoutes(pages, kind).map((page) => {
|
|
650
|
-
const [locale, , slug] = page.path.split("/").filter(Boolean);
|
|
651
|
-
return { locale, slug };
|
|
652
|
-
});
|
|
653
|
-
}
|
|
654
|
-
|
|
655
681
|
// src/landing-pages/json-ld.ts
|
|
656
682
|
function jmpBreadcrumbListJsonLd(items, siteUrl) {
|
|
657
683
|
return {
|