@rankcli/agent-runtime 0.0.8 → 0.0.9
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/dist/index.d.mts +912 -1
- package/dist/index.d.ts +912 -1
- package/dist/index.js +587 -3
- package/dist/index.mjs +586 -3
- package/package.json +1 -1
- package/src/fixer/index.ts +1 -0
- package/src/fixer/schemas.ts +971 -0
- package/src/index.ts +3 -0
package/dist/index.js
CHANGED
|
@@ -809,6 +809,7 @@ __export(index_exports, {
|
|
|
809
809
|
PRIORITY_WEIGHTS: () => PRIORITY_WEIGHTS,
|
|
810
810
|
SEO_SCOPES: () => SEO_SCOPES,
|
|
811
811
|
SITE_PROFILE_QUESTIONS: () => SITE_PROFILE_QUESTIONS,
|
|
812
|
+
Schemas: () => Schemas,
|
|
812
813
|
addTrackingResult: () => addTrackingResult,
|
|
813
814
|
analyzeAnchorText: () => analyzeAnchorText,
|
|
814
815
|
analyzeCanonicalAdvanced: () => analyzeCanonicalAdvanced,
|
|
@@ -954,7 +955,7 @@ __export(index_exports, {
|
|
|
954
955
|
generateComparisonTable: () => generateComparisonTable,
|
|
955
956
|
generateCompleteSocialMetaSetup: () => generateCompleteSocialMetaSetup,
|
|
956
957
|
generateDuplicateIssues: () => generateDuplicateIssues,
|
|
957
|
-
generateFAQSchema: () =>
|
|
958
|
+
generateFAQSchema: () => generateFAQSchema2,
|
|
958
959
|
generateFixes: () => generateFixes,
|
|
959
960
|
generateGA4EnvTemplate: () => generateGA4EnvTemplate,
|
|
960
961
|
generateGA4ReactComponent: () => generateGA4ReactComponent,
|
|
@@ -29042,6 +29043,588 @@ async function applyFixes(fixes, options) {
|
|
|
29042
29043
|
return { applied, skipped };
|
|
29043
29044
|
}
|
|
29044
29045
|
|
|
29046
|
+
// src/fixer/schemas.ts
|
|
29047
|
+
function generateOrganizationSchema(data) {
|
|
29048
|
+
return {
|
|
29049
|
+
"@context": "https://schema.org",
|
|
29050
|
+
"@type": "Organization",
|
|
29051
|
+
name: data.name,
|
|
29052
|
+
url: data.url,
|
|
29053
|
+
logo: data.logo,
|
|
29054
|
+
description: data.description,
|
|
29055
|
+
foundingDate: data.foundingDate,
|
|
29056
|
+
founder: data.founders?.map((f) => ({
|
|
29057
|
+
"@type": "Person",
|
|
29058
|
+
name: f.name,
|
|
29059
|
+
url: f.url
|
|
29060
|
+
})),
|
|
29061
|
+
address: data.address ? {
|
|
29062
|
+
"@type": "PostalAddress",
|
|
29063
|
+
streetAddress: data.address.streetAddress,
|
|
29064
|
+
addressLocality: data.address.addressLocality,
|
|
29065
|
+
addressRegion: data.address.addressRegion,
|
|
29066
|
+
postalCode: data.address.postalCode,
|
|
29067
|
+
addressCountry: data.address.addressCountry
|
|
29068
|
+
} : void 0,
|
|
29069
|
+
contactPoint: data.contactPoint?.map((cp) => ({
|
|
29070
|
+
"@type": "ContactPoint",
|
|
29071
|
+
telephone: cp.telephone,
|
|
29072
|
+
contactType: cp.contactType,
|
|
29073
|
+
availableLanguage: cp.availableLanguage,
|
|
29074
|
+
areaServed: cp.areaServed
|
|
29075
|
+
})),
|
|
29076
|
+
sameAs: data.sameAs
|
|
29077
|
+
};
|
|
29078
|
+
}
|
|
29079
|
+
function generateWebSiteSchema(data) {
|
|
29080
|
+
return {
|
|
29081
|
+
"@context": "https://schema.org",
|
|
29082
|
+
"@type": "WebSite",
|
|
29083
|
+
name: data.name,
|
|
29084
|
+
url: data.url,
|
|
29085
|
+
description: data.description,
|
|
29086
|
+
publisher: data.publisher ? {
|
|
29087
|
+
"@type": "Organization",
|
|
29088
|
+
name: data.publisher
|
|
29089
|
+
} : void 0,
|
|
29090
|
+
potentialAction: data.potentialAction ? {
|
|
29091
|
+
"@type": "SearchAction",
|
|
29092
|
+
target: {
|
|
29093
|
+
"@type": "EntryPoint",
|
|
29094
|
+
urlTemplate: data.potentialAction.target
|
|
29095
|
+
},
|
|
29096
|
+
"query-input": data.potentialAction.queryInput
|
|
29097
|
+
} : void 0
|
|
29098
|
+
};
|
|
29099
|
+
}
|
|
29100
|
+
function generateArticleSchema(data) {
|
|
29101
|
+
const authors = Array.isArray(data.author) ? data.author : [data.author];
|
|
29102
|
+
return {
|
|
29103
|
+
"@context": "https://schema.org",
|
|
29104
|
+
"@type": "Article",
|
|
29105
|
+
headline: data.headline,
|
|
29106
|
+
description: data.description,
|
|
29107
|
+
image: data.image,
|
|
29108
|
+
datePublished: data.datePublished,
|
|
29109
|
+
dateModified: data.dateModified || data.datePublished,
|
|
29110
|
+
author: authors.map((a) => ({
|
|
29111
|
+
"@type": "Person",
|
|
29112
|
+
name: a.name,
|
|
29113
|
+
url: a.url,
|
|
29114
|
+
image: a.image,
|
|
29115
|
+
jobTitle: a.jobTitle,
|
|
29116
|
+
sameAs: a.sameAs
|
|
29117
|
+
})),
|
|
29118
|
+
publisher: {
|
|
29119
|
+
"@type": "Organization",
|
|
29120
|
+
name: data.publisher.name,
|
|
29121
|
+
logo: {
|
|
29122
|
+
"@type": "ImageObject",
|
|
29123
|
+
url: data.publisher.logo
|
|
29124
|
+
}
|
|
29125
|
+
},
|
|
29126
|
+
mainEntityOfPage: data.mainEntityOfPage ? {
|
|
29127
|
+
"@type": "WebPage",
|
|
29128
|
+
"@id": data.mainEntityOfPage
|
|
29129
|
+
} : void 0,
|
|
29130
|
+
wordCount: data.wordCount,
|
|
29131
|
+
articleSection: data.articleSection,
|
|
29132
|
+
keywords: data.keywords?.join(", ")
|
|
29133
|
+
};
|
|
29134
|
+
}
|
|
29135
|
+
function generateBlogPostingSchema(data) {
|
|
29136
|
+
const schema = generateArticleSchema(data);
|
|
29137
|
+
return { ...schema, "@type": "BlogPosting" };
|
|
29138
|
+
}
|
|
29139
|
+
function generateNewsArticleSchema(data) {
|
|
29140
|
+
const schema = generateArticleSchema(data);
|
|
29141
|
+
return { ...schema, "@type": "NewsArticle", dateline: data.dateline };
|
|
29142
|
+
}
|
|
29143
|
+
function generateProductSchema(data) {
|
|
29144
|
+
const offers = Array.isArray(data.offers) ? data.offers : [data.offers];
|
|
29145
|
+
return {
|
|
29146
|
+
"@context": "https://schema.org",
|
|
29147
|
+
"@type": "Product",
|
|
29148
|
+
name: data.name,
|
|
29149
|
+
description: data.description,
|
|
29150
|
+
image: data.image,
|
|
29151
|
+
sku: data.sku,
|
|
29152
|
+
mpn: data.mpn,
|
|
29153
|
+
gtin: data.gtin,
|
|
29154
|
+
brand: data.brand ? {
|
|
29155
|
+
"@type": "Brand",
|
|
29156
|
+
name: data.brand
|
|
29157
|
+
} : void 0,
|
|
29158
|
+
category: data.category,
|
|
29159
|
+
offers: offers.map((o) => ({
|
|
29160
|
+
"@type": "Offer",
|
|
29161
|
+
price: o.price,
|
|
29162
|
+
priceCurrency: o.priceCurrency || "USD",
|
|
29163
|
+
availability: `https://schema.org/${o.availability || "InStock"}`,
|
|
29164
|
+
priceValidUntil: o.priceValidUntil,
|
|
29165
|
+
url: o.url,
|
|
29166
|
+
seller: o.seller ? {
|
|
29167
|
+
"@type": "Organization",
|
|
29168
|
+
name: o.seller
|
|
29169
|
+
} : void 0,
|
|
29170
|
+
itemCondition: o.itemCondition ? `https://schema.org/${o.itemCondition}` : void 0
|
|
29171
|
+
})),
|
|
29172
|
+
aggregateRating: data.aggregateRating ? {
|
|
29173
|
+
"@type": "AggregateRating",
|
|
29174
|
+
ratingValue: data.aggregateRating.ratingValue,
|
|
29175
|
+
reviewCount: data.aggregateRating.reviewCount,
|
|
29176
|
+
ratingCount: data.aggregateRating.ratingCount,
|
|
29177
|
+
bestRating: data.aggregateRating.bestRating || 5,
|
|
29178
|
+
worstRating: data.aggregateRating.worstRating || 1
|
|
29179
|
+
} : void 0,
|
|
29180
|
+
review: data.review?.map((r) => ({
|
|
29181
|
+
"@type": "Review",
|
|
29182
|
+
author: {
|
|
29183
|
+
"@type": "Person",
|
|
29184
|
+
name: r.author
|
|
29185
|
+
},
|
|
29186
|
+
datePublished: r.datePublished,
|
|
29187
|
+
reviewBody: r.reviewBody,
|
|
29188
|
+
reviewRating: {
|
|
29189
|
+
"@type": "Rating",
|
|
29190
|
+
ratingValue: r.reviewRating.ratingValue,
|
|
29191
|
+
bestRating: r.reviewRating.bestRating || 5
|
|
29192
|
+
}
|
|
29193
|
+
}))
|
|
29194
|
+
};
|
|
29195
|
+
}
|
|
29196
|
+
function generateSoftwareApplicationSchema(data) {
|
|
29197
|
+
const offers = Array.isArray(data.offers) ? data.offers : [data.offers];
|
|
29198
|
+
return {
|
|
29199
|
+
"@context": "https://schema.org",
|
|
29200
|
+
"@type": "SoftwareApplication",
|
|
29201
|
+
name: data.name,
|
|
29202
|
+
description: data.description,
|
|
29203
|
+
applicationCategory: data.applicationCategory,
|
|
29204
|
+
operatingSystem: data.operatingSystem || "Web",
|
|
29205
|
+
offers: offers.map((o) => ({
|
|
29206
|
+
"@type": "Offer",
|
|
29207
|
+
price: o.price,
|
|
29208
|
+
priceCurrency: o.priceCurrency || "USD"
|
|
29209
|
+
})),
|
|
29210
|
+
aggregateRating: data.aggregateRating ? {
|
|
29211
|
+
"@type": "AggregateRating",
|
|
29212
|
+
ratingValue: data.aggregateRating.ratingValue,
|
|
29213
|
+
reviewCount: data.aggregateRating.reviewCount,
|
|
29214
|
+
bestRating: data.aggregateRating.bestRating || 5
|
|
29215
|
+
} : void 0,
|
|
29216
|
+
screenshot: data.screenshot,
|
|
29217
|
+
featureList: data.featureList
|
|
29218
|
+
};
|
|
29219
|
+
}
|
|
29220
|
+
function generateFAQSchema(data) {
|
|
29221
|
+
return {
|
|
29222
|
+
"@context": "https://schema.org",
|
|
29223
|
+
"@type": "FAQPage",
|
|
29224
|
+
mainEntity: data.questions.map((q) => ({
|
|
29225
|
+
"@type": "Question",
|
|
29226
|
+
name: q.question,
|
|
29227
|
+
acceptedAnswer: {
|
|
29228
|
+
"@type": "Answer",
|
|
29229
|
+
text: q.answer
|
|
29230
|
+
}
|
|
29231
|
+
}))
|
|
29232
|
+
};
|
|
29233
|
+
}
|
|
29234
|
+
function generateHowToSchema(data) {
|
|
29235
|
+
return {
|
|
29236
|
+
"@context": "https://schema.org",
|
|
29237
|
+
"@type": "HowTo",
|
|
29238
|
+
name: data.name,
|
|
29239
|
+
description: data.description,
|
|
29240
|
+
image: data.image,
|
|
29241
|
+
totalTime: data.totalTime,
|
|
29242
|
+
estimatedCost: data.estimatedCost ? {
|
|
29243
|
+
"@type": "MonetaryAmount",
|
|
29244
|
+
currency: data.estimatedCost.currency,
|
|
29245
|
+
value: data.estimatedCost.value
|
|
29246
|
+
} : void 0,
|
|
29247
|
+
supply: data.supply?.map((s) => ({
|
|
29248
|
+
"@type": "HowToSupply",
|
|
29249
|
+
name: s
|
|
29250
|
+
})),
|
|
29251
|
+
tool: data.tool?.map((t) => ({
|
|
29252
|
+
"@type": "HowToTool",
|
|
29253
|
+
name: t
|
|
29254
|
+
})),
|
|
29255
|
+
step: data.steps.map((step, i) => ({
|
|
29256
|
+
"@type": "HowToStep",
|
|
29257
|
+
position: i + 1,
|
|
29258
|
+
name: step.name,
|
|
29259
|
+
text: step.text,
|
|
29260
|
+
image: step.image,
|
|
29261
|
+
url: step.url
|
|
29262
|
+
}))
|
|
29263
|
+
};
|
|
29264
|
+
}
|
|
29265
|
+
function generateVideoSchema(data) {
|
|
29266
|
+
const stats = data.interactionStatistic;
|
|
29267
|
+
return {
|
|
29268
|
+
"@context": "https://schema.org",
|
|
29269
|
+
"@type": "VideoObject",
|
|
29270
|
+
name: data.name,
|
|
29271
|
+
description: data.description,
|
|
29272
|
+
thumbnailUrl: data.thumbnailUrl,
|
|
29273
|
+
uploadDate: data.uploadDate,
|
|
29274
|
+
duration: data.duration,
|
|
29275
|
+
contentUrl: data.contentUrl,
|
|
29276
|
+
embedUrl: data.embedUrl,
|
|
29277
|
+
interactionStatistic: stats ? [
|
|
29278
|
+
stats.watchCount ? {
|
|
29279
|
+
"@type": "InteractionCounter",
|
|
29280
|
+
interactionType: { "@type": "WatchAction" },
|
|
29281
|
+
userInteractionCount: stats.watchCount
|
|
29282
|
+
} : null,
|
|
29283
|
+
stats.likeCount ? {
|
|
29284
|
+
"@type": "InteractionCounter",
|
|
29285
|
+
interactionType: { "@type": "LikeAction" },
|
|
29286
|
+
userInteractionCount: stats.likeCount
|
|
29287
|
+
} : null,
|
|
29288
|
+
stats.commentCount ? {
|
|
29289
|
+
"@type": "InteractionCounter",
|
|
29290
|
+
interactionType: { "@type": "CommentAction" },
|
|
29291
|
+
userInteractionCount: stats.commentCount
|
|
29292
|
+
} : null
|
|
29293
|
+
].filter(Boolean) : void 0,
|
|
29294
|
+
publication: data.publication ? {
|
|
29295
|
+
"@type": "BroadcastEvent",
|
|
29296
|
+
isLiveBroadcast: data.publication.isLiveBroadcast,
|
|
29297
|
+
startDate: data.publication.startDate,
|
|
29298
|
+
endDate: data.publication.endDate
|
|
29299
|
+
} : void 0
|
|
29300
|
+
};
|
|
29301
|
+
}
|
|
29302
|
+
function generateEventSchema(data) {
|
|
29303
|
+
return {
|
|
29304
|
+
"@context": "https://schema.org",
|
|
29305
|
+
"@type": "Event",
|
|
29306
|
+
name: data.name,
|
|
29307
|
+
description: data.description,
|
|
29308
|
+
startDate: data.startDate,
|
|
29309
|
+
endDate: data.endDate,
|
|
29310
|
+
image: data.image,
|
|
29311
|
+
eventStatus: data.eventStatus ? `https://schema.org/${data.eventStatus}` : void 0,
|
|
29312
|
+
eventAttendanceMode: data.eventAttendanceMode ? `https://schema.org/${data.eventAttendanceMode}` : void 0,
|
|
29313
|
+
location: data.location.type === "VirtualLocation" ? {
|
|
29314
|
+
"@type": "VirtualLocation",
|
|
29315
|
+
url: data.location.url
|
|
29316
|
+
} : {
|
|
29317
|
+
"@type": "Place",
|
|
29318
|
+
name: data.location.name,
|
|
29319
|
+
address: data.location.address ? {
|
|
29320
|
+
"@type": "PostalAddress",
|
|
29321
|
+
...data.location.address
|
|
29322
|
+
} : void 0
|
|
29323
|
+
},
|
|
29324
|
+
performer: data.performer?.map((p) => ({
|
|
29325
|
+
"@type": "Person",
|
|
29326
|
+
name: p.name,
|
|
29327
|
+
url: p.url
|
|
29328
|
+
})),
|
|
29329
|
+
organizer: data.organizer ? {
|
|
29330
|
+
"@type": "Organization",
|
|
29331
|
+
name: data.organizer.name,
|
|
29332
|
+
url: data.organizer.url
|
|
29333
|
+
} : void 0,
|
|
29334
|
+
offers: data.offers?.map((o) => ({
|
|
29335
|
+
"@type": "Offer",
|
|
29336
|
+
price: o.price,
|
|
29337
|
+
priceCurrency: o.priceCurrency || "USD",
|
|
29338
|
+
availability: `https://schema.org/${o.availability || "InStock"}`,
|
|
29339
|
+
url: o.url,
|
|
29340
|
+
validFrom: o.priceValidUntil
|
|
29341
|
+
}))
|
|
29342
|
+
};
|
|
29343
|
+
}
|
|
29344
|
+
function generateLocalBusinessSchema(data) {
|
|
29345
|
+
return {
|
|
29346
|
+
"@context": "https://schema.org",
|
|
29347
|
+
"@type": "LocalBusiness",
|
|
29348
|
+
name: data.name,
|
|
29349
|
+
description: data.description,
|
|
29350
|
+
url: data.url,
|
|
29351
|
+
telephone: data.telephone,
|
|
29352
|
+
image: data.image,
|
|
29353
|
+
priceRange: data.priceRange,
|
|
29354
|
+
servesCuisine: data.servesCuisine,
|
|
29355
|
+
menu: data.menu,
|
|
29356
|
+
address: {
|
|
29357
|
+
"@type": "PostalAddress",
|
|
29358
|
+
streetAddress: data.address.streetAddress,
|
|
29359
|
+
addressLocality: data.address.addressLocality,
|
|
29360
|
+
addressRegion: data.address.addressRegion,
|
|
29361
|
+
postalCode: data.address.postalCode,
|
|
29362
|
+
addressCountry: data.address.addressCountry
|
|
29363
|
+
},
|
|
29364
|
+
geo: data.geo ? {
|
|
29365
|
+
"@type": "GeoCoordinates",
|
|
29366
|
+
latitude: data.geo.latitude,
|
|
29367
|
+
longitude: data.geo.longitude
|
|
29368
|
+
} : void 0,
|
|
29369
|
+
openingHoursSpecification: data.openingHours?.map(parseOpeningHours).filter(Boolean),
|
|
29370
|
+
aggregateRating: data.aggregateRating ? {
|
|
29371
|
+
"@type": "AggregateRating",
|
|
29372
|
+
ratingValue: data.aggregateRating.ratingValue,
|
|
29373
|
+
reviewCount: data.aggregateRating.reviewCount,
|
|
29374
|
+
bestRating: data.aggregateRating.bestRating || 5
|
|
29375
|
+
} : void 0,
|
|
29376
|
+
review: data.review?.map((r) => ({
|
|
29377
|
+
"@type": "Review",
|
|
29378
|
+
author: { "@type": "Person", name: r.author },
|
|
29379
|
+
datePublished: r.datePublished,
|
|
29380
|
+
reviewBody: r.reviewBody,
|
|
29381
|
+
reviewRating: {
|
|
29382
|
+
"@type": "Rating",
|
|
29383
|
+
ratingValue: r.reviewRating.ratingValue
|
|
29384
|
+
}
|
|
29385
|
+
}))
|
|
29386
|
+
};
|
|
29387
|
+
}
|
|
29388
|
+
function parseOpeningHours(hours) {
|
|
29389
|
+
const match = hours.match(/^([A-Za-z,-]+)\s+(\d{2}:\d{2})-(\d{2}:\d{2})$/);
|
|
29390
|
+
if (!match) return null;
|
|
29391
|
+
const dayMap = {
|
|
29392
|
+
"Mo": "Monday",
|
|
29393
|
+
"Tu": "Tuesday",
|
|
29394
|
+
"We": "Wednesday",
|
|
29395
|
+
"Th": "Thursday",
|
|
29396
|
+
"Fr": "Friday",
|
|
29397
|
+
"Sa": "Saturday",
|
|
29398
|
+
"Su": "Sunday"
|
|
29399
|
+
};
|
|
29400
|
+
const dayPart = match[1];
|
|
29401
|
+
const opens = match[2];
|
|
29402
|
+
const closes = match[3];
|
|
29403
|
+
if (dayPart.includes("-")) {
|
|
29404
|
+
const [start, end] = dayPart.split("-");
|
|
29405
|
+
const days = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"];
|
|
29406
|
+
const startIdx = days.indexOf(start);
|
|
29407
|
+
const endIdx = days.indexOf(end);
|
|
29408
|
+
const dayOfWeek = days.slice(startIdx, endIdx + 1).map((d) => dayMap[d]);
|
|
29409
|
+
return { "@type": "OpeningHoursSpecification", dayOfWeek, opens, closes };
|
|
29410
|
+
}
|
|
29411
|
+
return {
|
|
29412
|
+
"@type": "OpeningHoursSpecification",
|
|
29413
|
+
dayOfWeek: dayPart.split(",").map((d) => dayMap[d.trim()]),
|
|
29414
|
+
opens,
|
|
29415
|
+
closes
|
|
29416
|
+
};
|
|
29417
|
+
}
|
|
29418
|
+
function generateBreadcrumbSchema(data) {
|
|
29419
|
+
return {
|
|
29420
|
+
"@context": "https://schema.org",
|
|
29421
|
+
"@type": "BreadcrumbList",
|
|
29422
|
+
itemListElement: data.items.map((item, index) => ({
|
|
29423
|
+
"@type": "ListItem",
|
|
29424
|
+
position: index + 1,
|
|
29425
|
+
name: item.name,
|
|
29426
|
+
item: item.url
|
|
29427
|
+
}))
|
|
29428
|
+
};
|
|
29429
|
+
}
|
|
29430
|
+
function generateJobPostingSchema(data) {
|
|
29431
|
+
return {
|
|
29432
|
+
"@context": "https://schema.org",
|
|
29433
|
+
"@type": "JobPosting",
|
|
29434
|
+
title: data.title,
|
|
29435
|
+
description: data.description,
|
|
29436
|
+
datePosted: data.datePosted,
|
|
29437
|
+
validThrough: data.validThrough,
|
|
29438
|
+
employmentType: data.employmentType,
|
|
29439
|
+
hiringOrganization: {
|
|
29440
|
+
"@type": "Organization",
|
|
29441
|
+
name: data.hiringOrganization.name,
|
|
29442
|
+
sameAs: data.hiringOrganization.url,
|
|
29443
|
+
logo: data.hiringOrganization.logo
|
|
29444
|
+
},
|
|
29445
|
+
jobLocation: data.jobLocation ? {
|
|
29446
|
+
"@type": "Place",
|
|
29447
|
+
address: {
|
|
29448
|
+
"@type": "PostalAddress",
|
|
29449
|
+
...data.jobLocation.address
|
|
29450
|
+
}
|
|
29451
|
+
} : void 0,
|
|
29452
|
+
jobLocationType: data.jobLocationType,
|
|
29453
|
+
baseSalary: data.baseSalary ? {
|
|
29454
|
+
"@type": "MonetaryAmount",
|
|
29455
|
+
currency: data.baseSalary.currency,
|
|
29456
|
+
value: typeof data.baseSalary.value === "number" ? {
|
|
29457
|
+
"@type": "QuantitativeValue",
|
|
29458
|
+
value: data.baseSalary.value,
|
|
29459
|
+
unitText: data.baseSalary.unitText
|
|
29460
|
+
} : {
|
|
29461
|
+
"@type": "QuantitativeValue",
|
|
29462
|
+
minValue: data.baseSalary.value.minValue,
|
|
29463
|
+
maxValue: data.baseSalary.value.maxValue,
|
|
29464
|
+
unitText: data.baseSalary.unitText
|
|
29465
|
+
}
|
|
29466
|
+
} : void 0,
|
|
29467
|
+
experienceRequirements: data.experienceRequirements,
|
|
29468
|
+
educationRequirements: data.educationRequirements ? {
|
|
29469
|
+
"@type": "EducationalOccupationalCredential",
|
|
29470
|
+
credentialCategory: data.educationRequirements
|
|
29471
|
+
} : void 0,
|
|
29472
|
+
skills: data.skills
|
|
29473
|
+
};
|
|
29474
|
+
}
|
|
29475
|
+
function generateCourseSchema(data) {
|
|
29476
|
+
return {
|
|
29477
|
+
"@context": "https://schema.org",
|
|
29478
|
+
"@type": "Course",
|
|
29479
|
+
name: data.name,
|
|
29480
|
+
description: data.description,
|
|
29481
|
+
provider: {
|
|
29482
|
+
"@type": "Organization",
|
|
29483
|
+
name: data.provider.name,
|
|
29484
|
+
sameAs: data.provider.url
|
|
29485
|
+
},
|
|
29486
|
+
offers: data.offers ? {
|
|
29487
|
+
"@type": "Offer",
|
|
29488
|
+
price: data.offers.price,
|
|
29489
|
+
priceCurrency: data.offers.priceCurrency || "USD",
|
|
29490
|
+
availability: `https://schema.org/${data.offers.availability || "InStock"}`
|
|
29491
|
+
} : void 0,
|
|
29492
|
+
coursePrerequisites: data.coursePrerequisites,
|
|
29493
|
+
educationalLevel: data.educationalLevel,
|
|
29494
|
+
timeRequired: data.timeRequired,
|
|
29495
|
+
image: data.image,
|
|
29496
|
+
aggregateRating: data.aggregateRating ? {
|
|
29497
|
+
"@type": "AggregateRating",
|
|
29498
|
+
ratingValue: data.aggregateRating.ratingValue,
|
|
29499
|
+
reviewCount: data.aggregateRating.reviewCount
|
|
29500
|
+
} : void 0
|
|
29501
|
+
};
|
|
29502
|
+
}
|
|
29503
|
+
function generateRecipeSchema(data) {
|
|
29504
|
+
return {
|
|
29505
|
+
"@context": "https://schema.org",
|
|
29506
|
+
"@type": "Recipe",
|
|
29507
|
+
name: data.name,
|
|
29508
|
+
description: data.description,
|
|
29509
|
+
image: data.image,
|
|
29510
|
+
author: {
|
|
29511
|
+
"@type": "Person",
|
|
29512
|
+
name: data.author.name,
|
|
29513
|
+
url: data.author.url
|
|
29514
|
+
},
|
|
29515
|
+
datePublished: data.datePublished,
|
|
29516
|
+
prepTime: data.prepTime,
|
|
29517
|
+
cookTime: data.cookTime,
|
|
29518
|
+
totalTime: data.totalTime,
|
|
29519
|
+
recipeYield: data.recipeYield,
|
|
29520
|
+
recipeCategory: data.recipeCategory,
|
|
29521
|
+
recipeCuisine: data.recipeCuisine,
|
|
29522
|
+
recipeIngredient: data.recipeIngredient,
|
|
29523
|
+
recipeInstructions: data.recipeInstructions.map((step, i) => ({
|
|
29524
|
+
"@type": "HowToStep",
|
|
29525
|
+
position: i + 1,
|
|
29526
|
+
name: step.name,
|
|
29527
|
+
text: step.text
|
|
29528
|
+
})),
|
|
29529
|
+
nutrition: data.nutrition ? {
|
|
29530
|
+
"@type": "NutritionInformation",
|
|
29531
|
+
calories: data.nutrition.calories,
|
|
29532
|
+
fatContent: data.nutrition.fatContent,
|
|
29533
|
+
proteinContent: data.nutrition.proteinContent,
|
|
29534
|
+
carbohydrateContent: data.nutrition.carbohydrateContent
|
|
29535
|
+
} : void 0,
|
|
29536
|
+
aggregateRating: data.aggregateRating ? {
|
|
29537
|
+
"@type": "AggregateRating",
|
|
29538
|
+
ratingValue: data.aggregateRating.ratingValue,
|
|
29539
|
+
reviewCount: data.aggregateRating.reviewCount
|
|
29540
|
+
} : void 0,
|
|
29541
|
+
video: data.video ? generateVideoSchema(data.video) : void 0
|
|
29542
|
+
};
|
|
29543
|
+
}
|
|
29544
|
+
function generateBookSchema(data) {
|
|
29545
|
+
const authors = Array.isArray(data.author) ? data.author : [data.author];
|
|
29546
|
+
return {
|
|
29547
|
+
"@context": "https://schema.org",
|
|
29548
|
+
"@type": "Book",
|
|
29549
|
+
name: data.name,
|
|
29550
|
+
description: data.description,
|
|
29551
|
+
author: authors.map((a) => ({
|
|
29552
|
+
"@type": "Person",
|
|
29553
|
+
name: a.name,
|
|
29554
|
+
url: a.url
|
|
29555
|
+
})),
|
|
29556
|
+
isbn: data.isbn,
|
|
29557
|
+
numberOfPages: data.numberOfPages,
|
|
29558
|
+
bookFormat: data.bookFormat ? `https://schema.org/${data.bookFormat}` : void 0,
|
|
29559
|
+
publisher: data.publisher ? {
|
|
29560
|
+
"@type": "Organization",
|
|
29561
|
+
name: data.publisher
|
|
29562
|
+
} : void 0,
|
|
29563
|
+
datePublished: data.datePublished,
|
|
29564
|
+
image: data.image,
|
|
29565
|
+
inLanguage: data.inLanguage,
|
|
29566
|
+
aggregateRating: data.aggregateRating ? {
|
|
29567
|
+
"@type": "AggregateRating",
|
|
29568
|
+
ratingValue: data.aggregateRating.ratingValue,
|
|
29569
|
+
reviewCount: data.aggregateRating.reviewCount
|
|
29570
|
+
} : void 0,
|
|
29571
|
+
offers: data.offers ? {
|
|
29572
|
+
"@type": "Offer",
|
|
29573
|
+
price: data.offers.price,
|
|
29574
|
+
priceCurrency: data.offers.priceCurrency || "USD",
|
|
29575
|
+
availability: `https://schema.org/${data.offers.availability || "InStock"}`
|
|
29576
|
+
} : void 0
|
|
29577
|
+
};
|
|
29578
|
+
}
|
|
29579
|
+
function generateSpeakableSchema(data) {
|
|
29580
|
+
return {
|
|
29581
|
+
"@context": "https://schema.org",
|
|
29582
|
+
"@type": "WebPage",
|
|
29583
|
+
speakable: {
|
|
29584
|
+
"@type": "SpeakableSpecification",
|
|
29585
|
+
cssSelector: data.cssSelector,
|
|
29586
|
+
xpath: data.xpath
|
|
29587
|
+
},
|
|
29588
|
+
url: data.url
|
|
29589
|
+
};
|
|
29590
|
+
}
|
|
29591
|
+
function generateSitelinksSearchboxSchema(data) {
|
|
29592
|
+
return {
|
|
29593
|
+
"@context": "https://schema.org",
|
|
29594
|
+
"@type": "WebSite",
|
|
29595
|
+
url: data.url,
|
|
29596
|
+
potentialAction: {
|
|
29597
|
+
"@type": "SearchAction",
|
|
29598
|
+
target: {
|
|
29599
|
+
"@type": "EntryPoint",
|
|
29600
|
+
urlTemplate: data.searchUrl
|
|
29601
|
+
},
|
|
29602
|
+
"query-input": data.queryInput || "required name=search_term_string"
|
|
29603
|
+
}
|
|
29604
|
+
};
|
|
29605
|
+
}
|
|
29606
|
+
var Schemas = {
|
|
29607
|
+
organization: generateOrganizationSchema,
|
|
29608
|
+
webSite: generateWebSiteSchema,
|
|
29609
|
+
article: generateArticleSchema,
|
|
29610
|
+
blogPosting: generateBlogPostingSchema,
|
|
29611
|
+
newsArticle: generateNewsArticleSchema,
|
|
29612
|
+
product: generateProductSchema,
|
|
29613
|
+
softwareApplication: generateSoftwareApplicationSchema,
|
|
29614
|
+
faq: generateFAQSchema,
|
|
29615
|
+
howTo: generateHowToSchema,
|
|
29616
|
+
video: generateVideoSchema,
|
|
29617
|
+
event: generateEventSchema,
|
|
29618
|
+
localBusiness: generateLocalBusinessSchema,
|
|
29619
|
+
breadcrumb: generateBreadcrumbSchema,
|
|
29620
|
+
jobPosting: generateJobPostingSchema,
|
|
29621
|
+
course: generateCourseSchema,
|
|
29622
|
+
recipe: generateRecipeSchema,
|
|
29623
|
+
book: generateBookSchema,
|
|
29624
|
+
speakable: generateSpeakableSchema,
|
|
29625
|
+
sitelinksSearchbox: generateSitelinksSearchboxSchema
|
|
29626
|
+
};
|
|
29627
|
+
|
|
29045
29628
|
// src/git/commit-helper.ts
|
|
29046
29629
|
var import_child_process2 = require("child_process");
|
|
29047
29630
|
var import_util2 = require("util");
|
|
@@ -30679,7 +31262,7 @@ function generateKeyFacts(facts, options = {}) {
|
|
|
30679
31262
|
return formatted.join("\n");
|
|
30680
31263
|
}
|
|
30681
31264
|
}
|
|
30682
|
-
function
|
|
31265
|
+
function generateFAQSchema2(faqs, options = {}) {
|
|
30683
31266
|
const format = options.format || "json-ld";
|
|
30684
31267
|
if (format === "markdown") {
|
|
30685
31268
|
const lines = ["## FAQ", ""];
|
|
@@ -30762,7 +31345,7 @@ function generateAICitableContent(config) {
|
|
|
30762
31345
|
sections.push("");
|
|
30763
31346
|
}
|
|
30764
31347
|
if (config.faqs && config.faqs.length > 0) {
|
|
30765
|
-
sections.push(
|
|
31348
|
+
sections.push(generateFAQSchema2(config.faqs, { format: "markdown" }));
|
|
30766
31349
|
sections.push("");
|
|
30767
31350
|
}
|
|
30768
31351
|
return sections.join("\n").trim();
|
|
@@ -31605,6 +32188,7 @@ if (typeof globalThis !== "undefined") {
|
|
|
31605
32188
|
PRIORITY_WEIGHTS,
|
|
31606
32189
|
SEO_SCOPES,
|
|
31607
32190
|
SITE_PROFILE_QUESTIONS,
|
|
32191
|
+
Schemas,
|
|
31608
32192
|
addTrackingResult,
|
|
31609
32193
|
analyzeAnchorText,
|
|
31610
32194
|
analyzeCanonicalAdvanced,
|