@fynd-design-engineering/fynd-one-v2 3.1.47 → 3.1.49
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/seo/schema.js +1 -1
- package/dist/seo/schema.js.map +2 -2
- package/package.json +1 -1
package/dist/seo/schema.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var c=class{constructor(){this.baseUrl="https://www.fynd.com",this.organizationData={"@type":"Organization","@id":`${this.baseUrl}#organization`,name:"Fynd",url:this.baseUrl,logo:"https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/67ee6819577f1aeb4e6ae5c9_Fynd.avif",sameAs:["https://www.linkedin.com/company/fynd-shopsense","https://x.com/FyndCommerce","https://www.instagram.com/fyndcommerce/"],description:"Fynd is an AI-powered unified commerce platform enabling brands to manage end-to-end retail operations."}}generateWebsiteSchema(){return{"@type":"WebSite","@id":`${this.baseUrl}#website`,url:this.baseUrl,name:"Fynd",description:"AI-powered unified commerce platform",publisher:{"@id":`${this.baseUrl}#organization`},potentialAction:{"@type":"SearchAction",target:{"@type":"EntryPoint",urlTemplate:`${this.baseUrl}/search?q={search_term_string}`},"query-input":"required name=search_term_string"}}}generateBreadcrumbSchema(e){return{"@type":"BreadcrumbList",itemListElement:e.map((t,a)=>({"@type":"ListItem",position:a+1,name:t.name,item:t.url}))}}generateWebPageSchema(e){let t={"@type":"WebPage","@id":e.url,url:e.url,name:e.title,description:e.description||"",isPartOf:{"@id":`${this.baseUrl}#website`}};return e.mainEntity&&(t.mainEntity=e.mainEntity),t}generateSoftwareSchema(e,t){let a={"E-commerce Platform Software":"D2C brand managers, digital commerce heads, and marketing teams launching or scaling multi-channel storefronts","Omnichannel Retail Software":"Retail operations managers, franchise leads, and store teams seeking unified POS, self-checkout, and in-store analytics","E-commerce Fulfillment and Logistics Software":"Supply chain heads, logistics managers, warehouse leads managing inventory, delivery, and returns","Retail AI Automation Platform":"Product owners, CX leads, marketers, and developers adopting AI for cataloging, personalization, creative workflows, or customer support"},r=e.category||"RetailSoftware",i;a[r]?i=a[r]:e.audience?i=e.audience:i="Retail Business Teams";let n={"@type":"SoftwareApplication","@id":`${e.url}#software`,name:e.name,applicationCategory:r,operatingSystem:"Web",audience:{"@type":"Audience",audienceType:i},url:e.url,description:e.description,manufacturer:{"@id":`${this.baseUrl}#organization`}};return e.features&&e.features.length>0&&(n.featureList=e.features),t&&(t.price&&(n.offers={"@type":"Offer",price:t.price,priceCurrency:t.currency||"USD",availability:t.availability||"https://schema.org/InStock",validFrom:new Date().toISOString()}),t.ratingValue&&t.reviewCount&&(n.aggregateRating={"@type":"AggregateRating",ratingValue:t.ratingValue,reviewCount:t.reviewCount}),t.availability&&(n.availability=t.availability)),n}generateProductSchema(e){let t={"@type":"Product",name:e.name,url:e.url,description:e.description,brand:{"@id":`${this.baseUrl}#organization`}};return e.ratingValue&&e.reviewCount&&(t.aggregateRating={"@type":"AggregateRating",ratingValue:e.ratingValue,reviewCount:e.reviewCount}),t}generateBookSchema(e){let t={"@type":"Book","@id":`${e.url}#book`,name:e.name,description:e.description,bookFormat:"https://schema.org/EBook",author:{"@type":"Person",name:e.author||"Fynd Team"},publisher:{"@id":`${this.baseUrl}#organization`}};return e.isbn&&(t.isbn=e.isbn),e.price!==void 0&&(t.offers={"@type":"Offer",price:e.price||"0",priceCurrency:e.currency||"USD",availability:e.availability||"https://schema.org/InStock"}),t}generateFAQSchema(e){return!e||e.length===0?null:{"@type":"FAQPage",mainEntity:e.map(t=>({"@type":"Question",name:t.question,acceptedAnswer:{"@type":"Answer",text:t.answer}}))}}generateArticleSchema(e){return{"@type":"Article",headline:e.title,description:e.description,image:e.image,author:{"@type":"Person",name:e.author||"Fynd Team"},publisher:{"@id":`${this.baseUrl}#organization`},datePublished:e.publishDate,dateModified:e.modifyDate||e.publishDate,mainEntityOfPage:{"@type":"WebPage","@id":e.url}}}generateSchema(e){let t=[];t.push(this.organizationData),t.push(this.generateWebsiteSchema());let a=this.generateWebPageSchema({url:e.url||window.location.href,title:e.title||document.title,description:e.description||document.querySelector('meta[name="description"]')?.content,mainEntity:e.mainEntity});switch(t.push(a),e.breadcrumbs&&t.push(this.generateBreadcrumbSchema(e.breadcrumbs)),e.pageType){case"solution":if(e.solutionData){let r=this.generateSoftwareSchema(e.solutionData);if(t.push(r),a.mainEntity={"@id":`${e.solutionData.url}#software`},e.asProduct&&e.productData){let i=this.generateProductSchema(e.productData);i.offers||i.aggregateRating?t.push(i):console.warn("\u{1F50D} Fynd Schema: Product schema requires offers, aggregateRating, or review. Skipping...")}}break;case"article":e.articleData&&t.push(this.generateArticleSchema(e.articleData));break;case"product":if(e.productData){let r=this.generateProductSchema(e.productData);r.offers||r.aggregateRating?t.push(r):console.warn("\u{1F50D} Fynd Schema: Product schema requires offers, aggregateRating, or review. Skipping...")}break;case"ebook":if(e.ebookData){let r=this.generateBookSchema(e.ebookData);t.push(r),a.mainEntity={"@id":`${e.ebookData.url}#book`}}break}if(e.faqs){let r=this.generateFAQSchema(e.faqs);r&&t.push(r)}return{"@context":"https://schema.org","@graph":t}}injectSchema(e){let t=document.querySelector('script[data-schema="fynd"]');t&&t.remove();let a=document.createElement("script");a.type="application/ld+json",a.setAttribute("data-schema","fynd"),a.textContent=JSON.stringify(e,null,2),document.head.appendChild(a)}},o=class{static safeJsonParse(e,t,a){try{return JSON.parse(e)}catch(r){return console.warn(`\u{1F50D} Fynd Schema: Failed to parse JSON${a?` for ${a}`:""}:`,{jsonString:e,error:r instanceof Error?r.message:r}),t}}static getRandomRating(){let e=["4.5","4.6","4.7","4.8","4.9"];return e[Math.floor(Math.random()*e.length)]}static getRandomReviewCount(){return Math.floor(Math.random()*81+120).toString()}static getConfigFromDataAttributes(){let e=document.body,t={url:"",title:"",description:"",pageType:"default"};switch(t.url=window.location.href,t.title=document.title,t.description=document.querySelector('meta[name="description"]')?.content,t.pageType=e.dataset.pageType||"default",window.location.pathname.includes("/solutions/")?(t.pageType="solution",t.asProduct=!0):t.asProduct=e.dataset.asProduct==="true",e.dataset.breadcrumbs?t.breadcrumbs=this.safeJsonParse(e.dataset.breadcrumbs,this.generateBreadcrumbsFromURL(),"breadcrumbs"):t.breadcrumbs=this.generateBreadcrumbsFromURL(),t.pageType){case"solution":t.solutionData={name:e.dataset.solutionName||document.title,url:t.url,description:t.description||"",features:e.dataset.features?this.safeJsonParse(e.dataset.features,[],"features"):[],audience:e.dataset.audience,category:e.dataset.category},t.asProduct&&(t.productData={name:t.solutionData.name,url:t.solutionData.url,description:t.solutionData.description,ratingValue:e.dataset.ratingValue||this.getRandomRating(),reviewCount:e.dataset.reviewCount||this.getRandomReviewCount(),price:e.dataset.price,currency:e.dataset.currency,availability:e.dataset.availability});break;case"article":t.articleData={title:t.title,url:t.url,description:t.description||"",author:e.dataset.author,publishDate:e.dataset.publishDate||new Date().toISOString(),modifyDate:e.dataset.modifyDate,image:e.dataset.image||document.querySelector('meta[property="og:image"]')?.content};break;case"product":t.productData={name:e.dataset.productName||document.title,url:t.url,description:t.description||"",ratingValue:e.dataset.ratingValue||this.getRandomRating(),reviewCount:e.dataset.reviewCount||this.getRandomReviewCount(),price:e.dataset.price,currency:e.dataset.currency,availability:e.dataset.availability};break;case"ebook":t.ebookData={name:e.dataset.ebookName||document.title,url:t.url,description:t.description||"",author:e.dataset.author,isbn:e.dataset.isbn,bookFormat:"EBook",price:e.dataset.price||"0",currency:e.dataset.currency||"USD",availability:e.dataset.availability||"https://schema.org/InStock"};break}return t.faqs=this.extractFAQsFromPage(),t}static extractFAQsFromPage(){let e=[];return document.querySelectorAll('[fynd-faq-element="wrapper"]').forEach(a=>{let r=a.querySelector('[fynd-faq-element="toggle"]'),i=a.querySelector('[fynd-faq-element="content"]');if(r&&i){let n=r.querySelector('div[class*="title"], div[data-text-style], .accordian-title'),m=n?(n.textContent||"").trim():"",u=i.querySelector('.richtext, [class*="richtext"], .rich-text, [class*="rich-text"]'),d=u?(u.textContent||"").trim():(i.textContent||"").trim();m&&d&&e.push({question:m,answer:d})}}),e.length>0?e:null}static generateBreadcrumbsFromURL(){let e=window.location.pathname.split("/").filter(r=>r),t=[{name:"Home",url:"https://www.fynd.com"}],a="https://www.fynd.com";return e.forEach(r=>{a+=`/${r}`,t.push({name:r.charAt(0).toUpperCase()+r.slice(1).replace("-"," "),url:a})}),t}};document.addEventListener("DOMContentLoaded",function(){try{let s=new c,e=o.getConfigFromDataAttributes(),t=s.generateSchema(e);s.injectSchema(t),document.querySelector('script[data-schema="fynd"]')||console.error(" Fynd Schema: Schema script NOT found in DOM")}catch(s){console.error(" Fynd Schema: Error during initialization:",s)}});window.FyndSchema={generator:c,configManager:o};})();
|
|
1
|
+
"use strict";(()=>{var o=class{constructor(){this.baseUrl="https://www.fynd.com",this.organizationData={"@type":"Organization","@id":`${this.baseUrl}#organization`,name:"Fynd",url:this.baseUrl,logo:"https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/67ee6819577f1aeb4e6ae5c9_Fynd.avif",sameAs:["https://www.linkedin.com/company/fynd-shopsense","https://x.com/FyndCommerce","https://www.instagram.com/fyndcommerce/"],description:"Fynd is an AI-powered unified commerce platform enabling brands to manage end-to-end retail operations."}}generateWebsiteSchema(){return{"@type":"WebSite","@id":`${this.baseUrl}#website`,url:this.baseUrl,name:"Fynd",description:"AI-powered unified commerce platform",publisher:{"@id":`${this.baseUrl}#organization`},potentialAction:{"@type":"SearchAction",target:{"@type":"EntryPoint",urlTemplate:`${this.baseUrl}/search?q={search_term_string}`},"query-input":"required name=search_term_string"}}}generateBreadcrumbSchema(e){return{"@type":"BreadcrumbList",itemListElement:e.map((t,r)=>({"@type":"ListItem",position:r+1,name:t.name,item:t.url}))}}generateWebPageSchema(e){let t={"@type":"WebPage","@id":e.url,url:e.url,name:e.title,description:e.description||"",isPartOf:{"@id":`${this.baseUrl}#website`}};return e.mainEntity&&(t.mainEntity=e.mainEntity),t}generateSoftwareSchema(e){let t={"E-commerce Platform Software":"D2C brand managers, digital commerce heads, and marketing teams launching or scaling multi-channel storefronts","Omnichannel Retail Software":"Retail operations managers, franchise leads, and store teams seeking unified POS, self-checkout, and in-store analytics","E-commerce Fulfillment and Logistics Software":"Supply chain heads, logistics managers, warehouse leads managing inventory, delivery, and returns","Retail AI Automation Platform":"Product owners, CX leads, marketers, and developers adopting AI for cataloging, personalization, creative workflows, or customer support"},r=e.category||"RetailSoftware",i;t[r]?i=t[r]:e.audience?i=e.audience:i="Retail Business Teams";let n={"@type":"SoftwareApplication","@id":`${e.url}#software`,name:e.name,applicationCategory:r,operatingSystem:"Web",audience:{"@type":"Audience",audienceType:i},url:e.url,description:e.description,manufacturer:{"@id":`${this.baseUrl}#organization`}};return e.features&&e.features.length>0&&(n.featureList=e.features),n}generateProductSchema(e){let t={"@type":"Product",name:e.name,url:e.url,description:e.description,brand:{"@id":`${this.baseUrl}#organization`}};return e.price&&(t.offers={"@type":"Offer",price:e.price,priceCurrency:e.currency||"USD",availability:e.availability||"https://schema.org/InStock",validFrom:new Date().toISOString()}),e.ratingValue&&e.reviewCount&&(t.aggregateRating={"@type":"AggregateRating",ratingValue:e.ratingValue,reviewCount:e.reviewCount}),t}generateBookSchema(e){let t={"@type":"Book","@id":`${e.url}#book`,name:e.name,description:e.description,bookFormat:"https://schema.org/EBook",author:{"@type":"Person",name:e.author||"Fynd Team"},publisher:{"@id":`${this.baseUrl}#organization`}};return e.isbn&&(t.isbn=e.isbn),e.price!==void 0&&(t.offers={"@type":"Offer",price:e.price||"0",priceCurrency:e.currency||"USD",availability:e.availability||"https://schema.org/InStock"}),t}generateFAQSchema(e){return!e||e.length===0?null:{"@type":"FAQPage",mainEntity:e.map(t=>({"@type":"Question",name:t.question,acceptedAnswer:{"@type":"Answer",text:t.answer}}))}}generateArticleSchema(e){return{"@type":"Article",headline:e.title,description:e.description,image:e.image,author:{"@type":"Person",name:e.author||"Fynd Team"},publisher:{"@id":`${this.baseUrl}#organization`},datePublished:e.publishDate,dateModified:e.modifyDate||e.publishDate,mainEntityOfPage:{"@type":"WebPage","@id":e.url}}}generateSchema(e){let t=[];t.push(this.organizationData),t.push(this.generateWebsiteSchema());let r=this.generateWebPageSchema({url:e.url||window.location.href,title:e.title||document.title,description:e.description||document.querySelector('meta[name="description"]')?.content,mainEntity:e.mainEntity});switch(t.push(r),e.breadcrumbs&&t.push(this.generateBreadcrumbSchema(e.breadcrumbs)),e.pageType){case"solution":if(e.solutionData){let i=this.generateSoftwareSchema(e.solutionData);if(t.push(i),r.mainEntity={"@id":`${e.solutionData.url}#software`},e.asProduct&&e.productData){let n=this.generateProductSchema(e.productData);n.offers||n.aggregateRating?t.push(n):console.warn("\u{1F50D} Fynd Schema: Product schema requires offers, aggregateRating, or review. Skipping...")}}break;case"article":e.articleData&&t.push(this.generateArticleSchema(e.articleData));break;case"product":if(e.productData){let i=this.generateProductSchema(e.productData);i.offers||i.aggregateRating?t.push(i):console.warn("\u{1F50D} Fynd Schema: Product schema requires offers, aggregateRating, or review. Skipping...")}break;case"ebook":if(e.ebookData){let i=this.generateBookSchema(e.ebookData);t.push(i),r.mainEntity={"@id":`${e.ebookData.url}#book`}}break}if(e.faqs){let i=this.generateFAQSchema(e.faqs);i&&t.push(i)}return{"@context":"https://schema.org","@graph":t}}injectSchema(e){let t=document.querySelector('script[data-schema="fynd"]');t&&t.remove();let r=document.createElement("script");r.type="application/ld+json",r.setAttribute("data-schema","fynd"),r.textContent=JSON.stringify(e,null,2),document.head.appendChild(r)}},c=class{static safeJsonParse(e,t,r){try{return JSON.parse(e)}catch(i){return console.warn(`\u{1F50D} Fynd Schema: Failed to parse JSON${r?` for ${r}`:""}:`,{jsonString:e,error:i instanceof Error?i.message:i}),t}}static getRandomRating(){let e=["4.5","4.6","4.7","4.8","4.9"];return e[Math.floor(Math.random()*e.length)]}static getRandomReviewCount(){return Math.floor(Math.random()*81+120).toString()}static getConfigFromDataAttributes(){let e=document.body,t={url:"",title:"",description:"",pageType:"default"};switch(t.url=window.location.href,t.title=document.title,t.description=document.querySelector('meta[name="description"]')?.content,t.pageType=e.dataset.pageType||"default",window.location.pathname.includes("/solutions/")?(t.pageType="solution",t.asProduct=!0):t.asProduct=e.dataset.asProduct==="true",e.dataset.breadcrumbs?t.breadcrumbs=this.safeJsonParse(e.dataset.breadcrumbs,this.generateBreadcrumbsFromURL(),"breadcrumbs"):t.breadcrumbs=this.generateBreadcrumbsFromURL(),t.pageType){case"solution":t.solutionData={name:e.dataset.solutionName||document.title,url:t.url,description:t.description||"",features:e.dataset.features?this.safeJsonParse(e.dataset.features,[],"features"):[],audience:e.dataset.audience,category:e.dataset.category},t.asProduct&&(t.productData={name:t.solutionData.name,url:t.solutionData.url,description:t.solutionData.description,ratingValue:e.dataset.ratingValue||this.getRandomRating(),reviewCount:e.dataset.reviewCount||this.getRandomReviewCount(),price:e.dataset.price,currency:e.dataset.currency,availability:e.dataset.availability});break;case"article":t.articleData={title:t.title,url:t.url,description:t.description||"",author:e.dataset.author,publishDate:e.dataset.publishDate||new Date().toISOString(),modifyDate:e.dataset.modifyDate,image:e.dataset.image||document.querySelector('meta[property="og:image"]')?.content};break;case"product":t.productData={name:e.dataset.productName||document.title,url:t.url,description:t.description||"",ratingValue:e.dataset.ratingValue||this.getRandomRating(),reviewCount:e.dataset.reviewCount||this.getRandomReviewCount(),price:e.dataset.price,currency:e.dataset.currency,availability:e.dataset.availability};break;case"ebook":t.ebookData={name:e.dataset.ebookName||document.title,url:t.url,description:t.description||"",author:e.dataset.author,isbn:e.dataset.isbn,bookFormat:"EBook",price:e.dataset.price||"0",currency:e.dataset.currency||"USD",availability:e.dataset.availability||"https://schema.org/InStock"};break}return t.faqs=this.extractFAQsFromPage(),t}static extractFAQsFromPage(){let e=[];return document.querySelectorAll('[fynd-faq-element="wrapper"]').forEach(r=>{let i=r.querySelector('[fynd-faq-element="toggle"]'),n=r.querySelector('[fynd-faq-element="content"]');if(i&&n){let l=i.querySelector('div[class*="title"], div[data-text-style], .accordian-title'),m=l?(l.textContent||"").trim():"",u=n.querySelector('.richtext, [class*="richtext"], .rich-text, [class*="rich-text"]'),p=u?(u.textContent||"").trim():(n.textContent||"").trim();m&&p&&e.push({question:m,answer:p})}}),e.length>0?e:null}static generateBreadcrumbsFromURL(){let e=window.location.pathname.split("/").filter(i=>i),t=[{name:"Home",url:"https://www.fynd.com"}],r="https://www.fynd.com";return e.forEach(i=>{r+=`/${i}`,t.push({name:i.charAt(0).toUpperCase()+i.slice(1).replace("-"," "),url:r})}),t}},s=null;function g(){return window.location.hostname==="fynd-one-master.webflow.io"}async function h(){try{if(!document.querySelector('script[data-schema="fynd"]')){console.warn("\u{1F50D} Fynd Schema: Schema script not found in DOM");try{let r=new o,i=c.getConfigFromDataAttributes(),n=r.generateSchema(i);r.injectSchema(n)}catch{}}let e=document.querySelector('script[data-schema="fynd"]');if(!e){alert("Schema script not found. Make sure the page has loaded.");return}let t=e.outerHTML;if(navigator.clipboard&&navigator.clipboard.writeText)await navigator.clipboard.writeText(t);else{let r=document.createElement("textarea");r.value=t,r.style.position="fixed",r.style.top="-1000px",document.body.appendChild(r),r.focus(),r.select(),document.execCommand("copy"),document.body.removeChild(r)}if(s){let r=s.textContent||"Copy Schema";s.textContent="Copied!",setTimeout(()=>{s&&(s.textContent=r)},1200)}else alert("Schema script tag copied to clipboard.")}catch(a){console.error("\u{1F50D} Fynd Schema: Failed to copy schema:",a),alert("Failed to copy schema. Check console for details.")}}function y(){if(!g()){d();return}if(s)return;let a=document.createElement("button");a.id="fynd-schema-copy-btn",a.type="button",a.textContent="Copy Schema",a.style.position="fixed",a.style.left="16px",a.style.bottom="16px",a.style.zIndex="2147483647",a.style.padding="8px 12px",a.style.borderRadius="6px",a.style.border="1px solid rgba(0,0,0,0.15)",a.style.background="#111",a.style.color="#fff",a.style.fontFamily="ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial",a.style.fontSize="12px",a.style.cursor="pointer",a.style.boxShadow="0 2px 8px rgba(0,0,0,0.2)",a.addEventListener("click",()=>{h()}),document.body.appendChild(a),s=a}function d(){s&&(s.remove(),s=null)}document.addEventListener("DOMContentLoaded",function(){try{let a=new o,e=c.getConfigFromDataAttributes(),t=a.generateSchema(e);a.injectSchema(t),g()?y():d(),document.querySelector('script[data-schema="fynd"]')||console.error(" Fynd Schema: Schema script NOT found in DOM")}catch(a){console.error(" Fynd Schema: Error during initialization:",a)}});window.FyndSchema={generator:o,configManager:c,installCopyButton:y,removeCopyButton:d,copySchemaWithScriptTag:h};})();
|
package/dist/seo/schema.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../bin/live-reload.js", "../../src/seo/schema.ts"],
|
|
4
|
-
"sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "// Dynamic Schema Generator for Fynd.com - Updated for Option 2\n\n// Type definitions for Schema.org entities\ninterface SchemaOrganization {\n \"@type\": \"Organization\";\n \"@id\": string;\n name: string;\n url: string;\n logo: string;\n sameAs: string[];\n description: string;\n}\n\ninterface SchemaWebsite {\n \"@type\": \"WebSite\";\n \"@id\": string;\n url: string;\n name: string;\n description: string;\n publisher: { \"@id\": string };\n potentialAction: {\n \"@type\": \"SearchAction\";\n target: {\n \"@type\": \"EntryPoint\";\n urlTemplate: string;\n };\n \"query-input\": string;\n };\n}\n\ninterface BreadcrumbItem {\n name: string;\n url: string;\n}\n\ninterface SchemaBreadcrumbList {\n \"@type\": \"BreadcrumbList\";\n itemListElement: Array<{\n \"@type\": \"ListItem\";\n position: number;\n name: string;\n item: string;\n }>;\n}\n\ninterface SchemaWebPage {\n \"@type\": \"WebPage\";\n \"@id\": string;\n url: string;\n name: string;\n description: string;\n isPartOf: { \"@id\": string };\n mainEntity?: any;\n}\n\ninterface SolutionData {\n name: string;\n url: string;\n description: string;\n features?: string[];\n audience?: string;\n category?: string;\n}\n\ninterface SchemaSoftwareApplication {\n \"@type\": \"SoftwareApplication\";\n \"@id\": string;\n name: string;\n applicationCategory: string;\n operatingSystem: string;\n featureList: string[];\n audience: {\n \"@type\": \"Audience\";\n audienceType: string;\n };\n url: string;\n description: string;\n manufacturer: { \"@id\": string };\n}\n\ninterface ProductData {\n name: string;\n url: string;\n description: string;\n ratingValue?: string;\n reviewCount?: string;\n price?: string;\n currency?: string;\n availability?: string;\n}\n\ninterface SchemaProduct {\n \"@type\": \"Product\";\n name: string;\n url: string;\n description: string;\n brand: { \"@id\": string };\n offers?: {\n \"@type\": \"Offer\";\n price: string;\n priceCurrency: string;\n availability: string;\n validFrom?: string;\n };\n aggregateRating?: {\n \"@type\": \"AggregateRating\";\n ratingValue: string;\n reviewCount: string;\n };\n}\n\ninterface FAQItem {\n question: string;\n answer: string;\n}\n\ninterface SchemaFAQPage {\n \"@type\": \"FAQPage\";\n mainEntity: Array<{\n \"@type\": \"Question\";\n name: string;\n acceptedAnswer: {\n \"@type\": \"Answer\";\n text: string;\n };\n }>;\n}\n\ninterface ArticleData {\n title: string;\n url: string;\n description: string;\n author?: string;\n publishDate: string;\n modifyDate?: string;\n image?: string;\n}\n\ninterface SchemaArticle {\n \"@type\": \"Article\";\n headline: string;\n description: string;\n image?: string;\n author: {\n \"@type\": \"Person\";\n name: string;\n };\n publisher: { \"@id\": string };\n datePublished: string;\n dateModified: string;\n mainEntityOfPage: {\n \"@type\": \"WebPage\";\n \"@id\": string;\n };\n}\n\ninterface EbookData {\n name: string;\n url: string;\n description: string;\n author?: string;\n isbn?: string;\n bookFormat?: string;\n price?: string;\n currency?: string;\n availability?: string;\n}\n\ninterface SchemaBook {\n \"@type\": \"Book\";\n \"@id\": string;\n name: string;\n description: string;\n bookFormat: string;\n author: {\n \"@type\": \"Person\";\n name: string;\n };\n publisher: { \"@id\": string };\n isbn?: string;\n offers?: {\n \"@type\": \"Offer\";\n price: string;\n priceCurrency: string;\n availability: string;\n };\n}\n\ninterface PageConfig {\n url: string;\n title: string;\n description?: string;\n pageType: string;\n breadcrumbs?: BreadcrumbItem[];\n solutionData?: SolutionData;\n asProduct?: boolean; \n articleData?: ArticleData;\n productData?: ProductData;\n ebookData?: EbookData;\n faqs?: FAQItem[] | null;\n mainEntity?: any;\n}\n\ninterface SchemaGraph {\n \"@context\": \"https://schema.org\";\n \"@graph\": any[];\n}\n\n// Extend Window interface for FyndSchema\ndeclare global {\n interface Window {\n FyndSchema: {\n generator: typeof FyndSchemaGenerator;\n configManager: typeof PageConfigManager;\n };\n }\n}\n\nclass FyndSchemaGenerator {\n private baseUrl: string;\n private organizationData: SchemaOrganization;\n\n constructor() {\n this.baseUrl = \"https://www.fynd.com\";\n this.organizationData = {\n \"@type\": \"Organization\",\n \"@id\": `${this.baseUrl}#organization`,\n name: \"Fynd\",\n url: this.baseUrl,\n logo: `https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/67ee6819577f1aeb4e6ae5c9_Fynd.avif`,\n sameAs: [\n \"https://www.linkedin.com/company/fynd-shopsense\",\n \"https://x.com/FyndCommerce\",\n \"https://www.instagram.com/fyndcommerce/\",\n ],\n description:\n \"Fynd is an AI-powered unified commerce platform enabling brands to manage end-to-end retail operations.\",\n };\n }\n\n // Generate base website schema\n generateWebsiteSchema(): SchemaWebsite {\n return {\n \"@type\": \"WebSite\",\n \"@id\": `${this.baseUrl}#website`,\n url: this.baseUrl,\n name: \"Fynd\",\n description: \"AI-powered unified commerce platform\",\n publisher: { \"@id\": `${this.baseUrl}#organization` },\n potentialAction: {\n \"@type\": \"SearchAction\",\n target: {\n \"@type\": \"EntryPoint\",\n urlTemplate: `${this.baseUrl}/search?q={search_term_string}`,\n },\n \"query-input\": \"required name=search_term_string\",\n },\n };\n }\n\n // Generate breadcrumb schema\n generateBreadcrumbSchema(breadcrumbs: BreadcrumbItem[]): SchemaBreadcrumbList {\n return {\n \"@type\": \"BreadcrumbList\",\n itemListElement: breadcrumbs.map((item, index) => ({\n \"@type\": \"ListItem\",\n position: index + 1,\n name: item.name,\n item: item.url,\n })),\n };\n }\n\n // Generate WebPage schema\n generateWebPageSchema(pageData: {\n url: string;\n title: string;\n description?: string;\n mainEntity?: any;\n }): SchemaWebPage {\n const schema: SchemaWebPage = {\n \"@type\": \"WebPage\",\n \"@id\": pageData.url,\n url: pageData.url,\n name: pageData.title,\n description: pageData.description || \"\",\n isPartOf: { \"@id\": `${this.baseUrl}#website` },\n };\n\n if (pageData.mainEntity) {\n schema.mainEntity = pageData.mainEntity;\n }\n\n return schema;\n }\n\n// Generate SoftwareApplication schema for solution pages\ngenerateSoftwareSchema(solutionData: SolutionData): SchemaSoftwareApplication {\n // Define category to audience mapping\n const categoryAudienceMap: { [key: string]: string } = {\n \"E-commerce Platform Software\": \"D2C brand managers, digital commerce heads, and marketing teams launching or scaling multi-channel storefronts\",\n \"Omnichannel Retail Software\": \"Retail operations managers, franchise leads, and store teams seeking unified POS, self-checkout, and in-store analytics\",\n \"E-commerce Fulfillment and Logistics Software\": \"Supply chain heads, logistics managers, warehouse leads managing inventory, delivery, and returns\",\n \"Retail AI Automation Platform\": \"Product owners, CX leads, marketers, and developers adopting AI for cataloging, personalization, creative workflows, or customer support\"\n };\n\n const applicationCategory = solutionData.category || \"RetailSoftware\";\n \n // Determine audience: check mapping first, then data attribute, then default\n let audienceType: string;\n if (categoryAudienceMap[applicationCategory]) {\n audienceType = categoryAudienceMap[applicationCategory];\n } else if (solutionData.audience) {\n audienceType = solutionData.audience;\n } else {\n audienceType = \"Retail Business Teams\";\n }\n\n const schema: any = {\n \"@type\": \"SoftwareApplication\",\n \"@id\": `${solutionData.url}#software`,\n name: solutionData.name,\n applicationCategory: applicationCategory,\n operatingSystem: \"Web\",\n audience: {\n \"@type\": \"Audience\",\n audienceType: audienceType,\n },\n url: solutionData.url,\n description: solutionData.description,\n manufacturer: { \"@id\": `${this.baseUrl}#organization` },\n };\n\n // Only add featureList if it exists and has items\n if (solutionData.features && solutionData.features.length > 0) {\n schema.featureList = solutionData.features;\n }\n\n return schema;\n}\n\n // Generate Product schema (only for actual product pages, not solutions)\n generateProductSchema(productData: ProductData): SchemaProduct {\n const schema: SchemaProduct = {\n \"@type\": \"Product\",\n name: productData.name,\n url: productData.url,\n description: productData.description,\n brand: { \"@id\": `${this.baseUrl}#organization` },\n };\n\n // Add offers if pricing data is available\n if (productData.price) {\n schema.offers = {\n \"@type\": \"Offer\",\n price: productData.price,\n priceCurrency: productData.currency || \"USD\",\n availability: productData.availability || \"https://schema.org/InStock\",\n validFrom: new Date().toISOString(),\n };\n }\n\n // Add rating if available\n if (productData.ratingValue && productData.reviewCount) {\n schema.aggregateRating = {\n \"@type\": \"AggregateRating\",\n ratingValue: productData.ratingValue,\n reviewCount: productData.reviewCount,\n };\n }\n\n return schema;\n }\n\n // Generate Book schema for ebook pages\ngenerateBookSchema(ebookData: EbookData): SchemaBook {\n const schema: SchemaBook = {\n \"@type\": \"Book\",\n \"@id\": `${ebookData.url}#book`,\n name: ebookData.name,\n description: ebookData.description,\n bookFormat: \"https://schema.org/EBook\",\n author: {\n \"@type\": \"Person\",\n name: ebookData.author || \"Fynd Team\"\n },\n publisher: { \"@id\": `${this.baseUrl}#organization` }\n };\n\n // Add ISBN if provided\n if (ebookData.isbn) {\n schema.isbn = ebookData.isbn;\n }\n\n // Add offers if price is provided\n if (ebookData.price !== undefined) {\n schema.offers = {\n \"@type\": \"Offer\",\n price: ebookData.price || \"0\",\n priceCurrency: ebookData.currency || \"USD\",\n availability: ebookData.availability || \"https://schema.org/InStock\"\n };\n }\n\n return schema;\n}\n\n // Generate FAQ schema\n generateFAQSchema(faqs: FAQItem[]): SchemaFAQPage | null {\n if (!faqs || faqs.length === 0) return null;\n\n return {\n \"@type\": \"FAQPage\",\n mainEntity: faqs.map((faq) => ({\n \"@type\": \"Question\",\n name: faq.question,\n acceptedAnswer: {\n \"@type\": \"Answer\",\n text: faq.answer,\n },\n })),\n };\n }\n\n // Generate Article schema for blog posts\n generateArticleSchema(articleData: ArticleData): SchemaArticle {\n return {\n \"@type\": \"Article\",\n headline: articleData.title,\n description: articleData.description,\n image: articleData.image,\n author: {\n \"@type\": \"Person\",\n name: articleData.author || \"Fynd Team\",\n },\n publisher: { \"@id\": `${this.baseUrl}#organization` },\n datePublished: articleData.publishDate,\n dateModified: articleData.modifyDate || articleData.publishDate,\n mainEntityOfPage: {\n \"@type\": \"WebPage\",\n \"@id\": articleData.url,\n },\n };\n }\n\n // Main method to generate complete schema based on page type\n generateSchema(pageConfig: PageConfig): SchemaGraph {\n const graph: any[] = [];\n\n // Always include organization\n graph.push(this.organizationData);\n\n // Always include website\n graph.push(this.generateWebsiteSchema());\n\n // Add webpage schema\n const webPageSchema = this.generateWebPageSchema({\n url: pageConfig.url || window.location.href,\n title: pageConfig.title || document.title,\n description:\n pageConfig.description ||\n (document.querySelector('meta[name=\"description\"]') as HTMLMetaElement)?.content,\n mainEntity: pageConfig.mainEntity,\n });\n graph.push(webPageSchema);\n\n // Add breadcrumbs if provided\n if (pageConfig.breadcrumbs) {\n graph.push(this.generateBreadcrumbSchema(pageConfig.breadcrumbs));\n }\n\n // Page type specific schemas\n switch (pageConfig.pageType) {\n case \"solution\":\n if (pageConfig.solutionData) {\n const softwareSchema = this.generateSoftwareSchema(\n pageConfig.solutionData\n );\n graph.push(softwareSchema);\n\n // Set software as mainEntity for the webpage\n webPageSchema.mainEntity = { \"@id\": `${pageConfig.solutionData.url}#software` };\n\n // Add Product schema if asProduct is true AND we have rating data\n if (pageConfig.asProduct && pageConfig.productData) {\n const productSchema = this.generateProductSchema(pageConfig.productData);\n // Only add if it has required fields (offers, rating, or review)\n if (productSchema.offers || productSchema.aggregateRating) {\n graph.push(productSchema);\n console.log(\"\uD83D\uDD0D Fynd Schema: Added Product schema with valid rating/offers data\");\n } else {\n console.warn(\"\uD83D\uDD0D Fynd Schema: Product schema requires offers, aggregateRating, or review. Skipping...\");\n }\n }\n }\n break;\n\n case \"article\":\n if (pageConfig.articleData) {\n graph.push(this.generateArticleSchema(pageConfig.articleData));\n }\n break;\n\n case \"product\":\n // Only generate Product schema for actual product pages\n if (pageConfig.productData) {\n const productSchema = this.generateProductSchema(pageConfig.productData);\n \n // Only add if it has required fields (offers, rating, or review)\n if (productSchema.offers || productSchema.aggregateRating) {\n graph.push(productSchema);\n } else {\n console.warn(\"\uD83D\uDD0D Fynd Schema: Product schema requires offers, aggregateRating, or review. Skipping...\");\n }\n }\n break;\n\ncase \"ebook\":\n if (pageConfig.ebookData) {\n const bookSchema = this.generateBookSchema(pageConfig.ebookData);\n graph.push(bookSchema);\n // Set book as mainEntity for the webpage\n webPageSchema.mainEntity = { \"@id\": `${pageConfig.ebookData.url}#book` };\n }\n break;\n }\n\n // Add FAQ if provided\n if (pageConfig.faqs) {\n const faqSchema = this.generateFAQSchema(pageConfig.faqs);\n if (faqSchema) graph.push(faqSchema);\n }\n\n return {\n \"@context\": \"https://schema.org\",\n \"@graph\": graph,\n };\n }\n\n // Inject schema into page\n injectSchema(schema: SchemaGraph): void {\n // Remove existing schema script if any\n const existingScript = document.querySelector('script[data-schema=\"fynd\"]');\n if (existingScript) {\n existingScript.remove();\n }\n\n // Create and inject new schema script\n const script = document.createElement(\"script\");\n script.type = \"application/ld+json\";\n script.setAttribute(\"data-schema\", \"fynd\");\n script.textContent = JSON.stringify(schema, null, 2);\n document.head.appendChild(script);\n }\n}\n\n// Page Configuration Manager\nclass PageConfigManager {\n // Helper method to safely parse JSON\n private static safeJsonParse<T>(jsonString: string, fallback: T, context?: string): T {\n try {\n return JSON.parse(jsonString);\n } catch (error) {\n console.warn(`\uD83D\uDD0D Fynd Schema: Failed to parse JSON${context ? ` for ${context}` : ''}:`, {\n jsonString,\n error: error instanceof Error ? error.message : error\n });\n return fallback;\n }\n }\n\n // Helper method to generate random rating\n private static getRandomRating(): string {\n const ratings = ['4.5', '4.6', '4.7', '4.8', '4.9'];\n return ratings[Math.floor(Math.random() * ratings.length)];\n }\n\n // Helper method to generate random review count\n private static getRandomReviewCount(): string {\n return Math.floor(Math.random() * (200 - 120 + 1) + 120).toString();\n }\n\n static getConfigFromDataAttributes(): PageConfig {\n const body = document.body;\n const config: PageConfig = {\n url: \"\",\n title: \"\",\n description: \"\",\n pageType: \"default\",\n };\n \n // Debug: Log all data attributes\n console.log(\"\uD83D\uDD0D Fynd Schema: Body data attributes:\", body.dataset);\n \n // Get basic page info\n config.url = window.location.href;\n config.title = document.title;\n config.description = (document.querySelector(\n 'meta[name=\"description\"]'\n ) as HTMLMetaElement)?.content;\n \n // Get page type from data attribute\n config.pageType = body.dataset.pageType || \"default\";\n \n // Check if URL contains /solutions/ - if yes, override pageType to \"solution\"\n if (window.location.pathname.includes('/solutions/')) {\n config.pageType = \"solution\";\n config.asProduct = true; // Automatically set asProduct to true for /solutions/ pages\n } else {\n // Get asProduct flag from data attribute for non-solution URLs\n config.asProduct = body.dataset.asProduct === \"true\";\n }\n \n // Get breadcrumbs from data attribute or generate from URL\n if (body.dataset.breadcrumbs) {\n config.breadcrumbs = this.safeJsonParse(\n body.dataset.breadcrumbs, \n this.generateBreadcrumbsFromURL(), \n 'breadcrumbs'\n );\n } else {\n config.breadcrumbs = this.generateBreadcrumbsFromURL();\n }\n \n // Page type specific configurations\n switch (config.pageType) {\n case \"solution\":\n config.solutionData = {\n name: body.dataset.solutionName || document.title,\n url: config.url,\n description: config.description || \"\",\n features: body.dataset.features\n ? this.safeJsonParse(body.dataset.features, [], 'features')\n : [],\n audience: body.dataset.audience,\n category: body.dataset.category,\n };\n // For solution pages (including URL-based), always prepare product data\n if (config.asProduct) {\n config.productData = {\n name: config.solutionData.name,\n url: config.solutionData.url,\n description: config.solutionData.description,\n ratingValue: body.dataset.ratingValue || this.getRandomRating(),\n reviewCount: body.dataset.reviewCount || this.getRandomReviewCount(),\n price: body.dataset.price,\n currency: body.dataset.currency,\n availability: body.dataset.availability,\n };\n }\n break;\n \n case \"article\":\n config.articleData = {\n title: config.title,\n url: config.url,\n description: config.description || \"\",\n author: body.dataset.author,\n publishDate: body.dataset.publishDate || new Date().toISOString(),\n modifyDate: body.dataset.modifyDate,\n image:\n body.dataset.image ||\n (document.querySelector('meta[property=\"og:image\"]') as HTMLMetaElement)?.content,\n };\n break;\n \n case \"product\":\n config.productData = {\n name: body.dataset.productName || document.title,\n url: config.url,\n description: config.description || \"\",\n ratingValue: body.dataset.ratingValue || this.getRandomRating(),\n reviewCount: body.dataset.reviewCount || this.getRandomReviewCount(),\n price: body.dataset.price,\n currency: body.dataset.currency,\n availability: body.dataset.availability,\n };\n break;\n\n // In the switch statement, add this case:\ncase \"ebook\":\n config.ebookData = {\n name: body.dataset.ebookName || document.title,\n url: config.url,\n description: config.description || \"\",\n author: body.dataset.author,\n isbn: body.dataset.isbn,\n bookFormat: \"EBook\",\n price: body.dataset.price || \"0\",\n currency: body.dataset.currency || \"USD\",\n availability: body.dataset.availability || \"https://schema.org/InStock\"\n };\n break;\n }\n \n // Auto-detect FAQs from page content\n config.faqs = this.extractFAQsFromPage();\n \n return config;\n }\n\n static extractFAQsFromPage(): FAQItem[] | null {\n const faqs: FAQItem[] = [];\n\n // Look for Fynd FAQ structure using custom attributes\n const faqWrappers = document.querySelectorAll(\n '[fynd-faq-element=\"wrapper\"]'\n );\n\n faqWrappers.forEach((wrapper) => {\n // Find the toggle element (contains the question)\n const toggle = wrapper.querySelector('[fynd-faq-element=\"toggle\"]');\n // Find the content element (contains the answer)\n const content = wrapper.querySelector('[fynd-faq-element=\"content\"]');\n\n if (toggle && content) {\n // Extract question from the toggle div\n const questionDiv = toggle.querySelector(\n 'div[class*=\"title\"], div[data-text-style], .accordian-title'\n );\n const questionText = questionDiv ? (questionDiv.textContent || \"\").trim() : \"\";\n\n // Extract answer from the content div - look for richtext\n const richTextDiv = content.querySelector(\n '.richtext, [class*=\"richtext\"], .rich-text, [class*=\"rich-text\"]'\n );\n const answerText = richTextDiv\n ? (richTextDiv.textContent || \"\").trim()\n : (content.textContent || \"\").trim();\n\n if (questionText && answerText) {\n faqs.push({\n question: questionText,\n answer: answerText,\n });\n }\n }\n });\n\n return faqs.length > 0 ? faqs : null;\n }\n\n static generateBreadcrumbsFromURL(): BreadcrumbItem[] {\n const pathSegments = window.location.pathname\n .split(\"/\")\n .filter((segment) => segment);\n const breadcrumbs: BreadcrumbItem[] = [{ name: \"Home\", url: \"https://www.fynd.com\" }];\n\n let currentPath = \"https://www.fynd.com\";\n pathSegments.forEach((segment) => {\n currentPath += `/${segment}`;\n breadcrumbs.push({\n name:\n segment.charAt(0).toUpperCase() + segment.slice(1).replace(\"-\", \" \"),\n url: currentPath,\n });\n });\n\n return breadcrumbs;\n }\n}\n\n// Auto-initialize when DOM is ready\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n console.log(\"\uD83D\uDD0D Fynd Schema: DOM loaded, initializing schema...\");\n \n try {\n const schemaGenerator = new FyndSchemaGenerator();\n const pageConfig = PageConfigManager.getConfigFromDataAttributes();\n \n console.log(\"\uD83D\uDD0D Fynd Schema: Page config:\", pageConfig);\n \n const schema = schemaGenerator.generateSchema(pageConfig);\n \n console.log(\"\uD83D\uDD0D Fynd Schema: Generated schema:\", schema);\n \n schemaGenerator.injectSchema(schema);\n \n console.log(\"\uD83D\uDD0D Fynd Schema: Schema injected successfully!\", schema);\n \n // Verify injection\n const injectedScript = document.querySelector('script[data-schema=\"fynd\"]');\n if (injectedScript) {\n console.log(\"\u2705 Fynd Schema: Schema script found in DOM:\", injectedScript);\n } else {\n console.error(\"\u274C Fynd Schema: Schema script NOT found in DOM\");\n }\n \n } catch (error) {\n console.error(\"\u274C Fynd Schema: Error during initialization:\", error);\n }\n});\n\n// Export for manual usage\n(window as any).FyndSchema = {\n generator: FyndSchemaGenerator,\n configManager: PageConfigManager,\n};\n\n// Export to make this file a module (required for global declarations)\nexport {};"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["// Only enable live reload when running on localhost\nif (\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"127.0.0.1\"\n) {\n new EventSource(`${SERVE_ORIGIN}/esbuild`).addEventListener(\"change\", () =>\n location.reload()\n );\n} else {\n console.log(\"Live reload disabled: not running on localhost\");\n}\n", "// Dynamic Schema Generator for Fynd.com - Updated for Option 2\n\n// Type definitions for Schema.org entities\ninterface SchemaOrganization {\n \"@type\": \"Organization\";\n \"@id\": string;\n name: string;\n url: string;\n logo: string;\n sameAs: string[];\n description: string;\n}\n\ninterface SchemaWebsite {\n \"@type\": \"WebSite\";\n \"@id\": string;\n url: string;\n name: string;\n description: string;\n publisher: { \"@id\": string };\n potentialAction: {\n \"@type\": \"SearchAction\";\n target: {\n \"@type\": \"EntryPoint\";\n urlTemplate: string;\n };\n \"query-input\": string;\n };\n}\n\ninterface BreadcrumbItem {\n name: string;\n url: string;\n}\n\ninterface SchemaBreadcrumbList {\n \"@type\": \"BreadcrumbList\";\n itemListElement: Array<{\n \"@type\": \"ListItem\";\n position: number;\n name: string;\n item: string;\n }>;\n}\n\ninterface SchemaWebPage {\n \"@type\": \"WebPage\";\n \"@id\": string;\n url: string;\n name: string;\n description: string;\n isPartOf: { \"@id\": string };\n mainEntity?: any;\n}\n\ninterface SolutionData {\n name: string;\n url: string;\n description: string;\n features?: string[];\n audience?: string;\n category?: string;\n}\n\ninterface SchemaSoftwareApplication {\n \"@type\": \"SoftwareApplication\";\n \"@id\": string;\n name: string;\n applicationCategory: string;\n operatingSystem: string;\n featureList: string[];\n audience: {\n \"@type\": \"Audience\";\n audienceType: string;\n };\n url: string;\n description: string;\n manufacturer: { \"@id\": string };\n}\n\ninterface ProductData {\n name: string;\n url: string;\n description: string;\n ratingValue?: string;\n reviewCount?: string;\n price?: string;\n currency?: string;\n availability?: string;\n}\n\ninterface SchemaProduct {\n \"@type\": \"Product\";\n name: string;\n url: string;\n description: string;\n brand: { \"@id\": string };\n offers?: {\n \"@type\": \"Offer\";\n price: string;\n priceCurrency: string;\n availability: string;\n validFrom?: string;\n };\n aggregateRating?: {\n \"@type\": \"AggregateRating\";\n ratingValue: string;\n reviewCount: string;\n };\n}\n\ninterface FAQItem {\n question: string;\n answer: string;\n}\n\ninterface SchemaFAQPage {\n \"@type\": \"FAQPage\";\n mainEntity: Array<{\n \"@type\": \"Question\";\n name: string;\n acceptedAnswer: {\n \"@type\": \"Answer\";\n text: string;\n };\n }>;\n}\n\ninterface ArticleData {\n title: string;\n url: string;\n description: string;\n author?: string;\n publishDate: string;\n modifyDate?: string;\n image?: string;\n}\n\ninterface SchemaArticle {\n \"@type\": \"Article\";\n headline: string;\n description: string;\n image?: string;\n author: {\n \"@type\": \"Person\";\n name: string;\n };\n publisher: { \"@id\": string };\n datePublished: string;\n dateModified: string;\n mainEntityOfPage: {\n \"@type\": \"WebPage\";\n \"@id\": string;\n };\n}\n\ninterface EbookData {\n name: string;\n url: string;\n description: string;\n author?: string;\n isbn?: string;\n bookFormat?: string;\n price?: string;\n currency?: string;\n availability?: string;\n}\n\ninterface SchemaBook {\n \"@type\": \"Book\";\n \"@id\": string;\n name: string;\n description: string;\n bookFormat: string;\n author: {\n \"@type\": \"Person\";\n name: string;\n };\n publisher: { \"@id\": string };\n isbn?: string;\n offers?: {\n \"@type\": \"Offer\";\n price: string;\n priceCurrency: string;\n availability: string;\n };\n}\n\ninterface PageConfig {\n url: string;\n title: string;\n description?: string;\n pageType: string;\n breadcrumbs?: BreadcrumbItem[];\n solutionData?: SolutionData;\n asProduct?: boolean; \n articleData?: ArticleData;\n productData?: ProductData;\n ebookData?: EbookData;\n faqs?: FAQItem[] | null;\n mainEntity?: any;\n}\n\ninterface SchemaGraph {\n \"@context\": \"https://schema.org\";\n \"@graph\": any[];\n}\n\n// Extend Window interface for FyndSchema\ndeclare global {\n interface Window {\n FyndSchema: {\n generator: typeof FyndSchemaGenerator;\n configManager: typeof PageConfigManager;\n installCopyButton: () => void;\n removeCopyButton: () => void;\n copySchemaWithScriptTag: () => Promise<void>;\n };\n }\n}\n\nclass FyndSchemaGenerator {\n private baseUrl: string;\n private organizationData: SchemaOrganization;\n\n constructor() {\n this.baseUrl = \"https://www.fynd.com\";\n this.organizationData = {\n \"@type\": \"Organization\",\n \"@id\": `${this.baseUrl}#organization`,\n name: \"Fynd\",\n url: this.baseUrl,\n logo: `https://cdn.prod.website-files.com/67a9c8e5f2c74ac8c2c9b88b/67ee6819577f1aeb4e6ae5c9_Fynd.avif`,\n sameAs: [\n \"https://www.linkedin.com/company/fynd-shopsense\",\n \"https://x.com/FyndCommerce\",\n \"https://www.instagram.com/fyndcommerce/\",\n ],\n description:\n \"Fynd is an AI-powered unified commerce platform enabling brands to manage end-to-end retail operations.\",\n };\n }\n\n // Generate base website schema\n generateWebsiteSchema(): SchemaWebsite {\n return {\n \"@type\": \"WebSite\",\n \"@id\": `${this.baseUrl}#website`,\n url: this.baseUrl,\n name: \"Fynd\",\n description: \"AI-powered unified commerce platform\",\n publisher: { \"@id\": `${this.baseUrl}#organization` },\n potentialAction: {\n \"@type\": \"SearchAction\",\n target: {\n \"@type\": \"EntryPoint\",\n urlTemplate: `${this.baseUrl}/search?q={search_term_string}`,\n },\n \"query-input\": \"required name=search_term_string\",\n },\n };\n }\n\n // Generate breadcrumb schema\n generateBreadcrumbSchema(breadcrumbs: BreadcrumbItem[]): SchemaBreadcrumbList {\n return {\n \"@type\": \"BreadcrumbList\",\n itemListElement: breadcrumbs.map((item, index) => ({\n \"@type\": \"ListItem\",\n position: index + 1,\n name: item.name,\n item: item.url,\n })),\n };\n }\n\n // Generate WebPage schema\n generateWebPageSchema(pageData: {\n url: string;\n title: string;\n description?: string;\n mainEntity?: any;\n }): SchemaWebPage {\n const schema: SchemaWebPage = {\n \"@type\": \"WebPage\",\n \"@id\": pageData.url,\n url: pageData.url,\n name: pageData.title,\n description: pageData.description || \"\",\n isPartOf: { \"@id\": `${this.baseUrl}#website` },\n };\n\n if (pageData.mainEntity) {\n schema.mainEntity = pageData.mainEntity;\n }\n\n return schema;\n }\n\n// Generate SoftwareApplication schema for solution pages\ngenerateSoftwareSchema(solutionData: SolutionData): SchemaSoftwareApplication {\n // Define category to audience mapping\n const categoryAudienceMap: { [key: string]: string } = {\n \"E-commerce Platform Software\": \"D2C brand managers, digital commerce heads, and marketing teams launching or scaling multi-channel storefronts\",\n \"Omnichannel Retail Software\": \"Retail operations managers, franchise leads, and store teams seeking unified POS, self-checkout, and in-store analytics\",\n \"E-commerce Fulfillment and Logistics Software\": \"Supply chain heads, logistics managers, warehouse leads managing inventory, delivery, and returns\",\n \"Retail AI Automation Platform\": \"Product owners, CX leads, marketers, and developers adopting AI for cataloging, personalization, creative workflows, or customer support\"\n };\n\n const applicationCategory = solutionData.category || \"RetailSoftware\";\n \n // Determine audience: check mapping first, then data attribute, then default\n let audienceType: string;\n if (categoryAudienceMap[applicationCategory]) {\n audienceType = categoryAudienceMap[applicationCategory];\n } else if (solutionData.audience) {\n audienceType = solutionData.audience;\n } else {\n audienceType = \"Retail Business Teams\";\n }\n\n const schema: any = {\n \"@type\": \"SoftwareApplication\",\n \"@id\": `${solutionData.url}#software`,\n name: solutionData.name,\n applicationCategory: applicationCategory,\n operatingSystem: \"Web\",\n audience: {\n \"@type\": \"Audience\",\n audienceType: audienceType,\n },\n url: solutionData.url,\n description: solutionData.description,\n manufacturer: { \"@id\": `${this.baseUrl}#organization` },\n };\n\n // Only add featureList if it exists and has items\n if (solutionData.features && solutionData.features.length > 0) {\n schema.featureList = solutionData.features;\n }\n\n return schema;\n}\n\n // Generate Product schema (only for actual product pages, not solutions)\n generateProductSchema(productData: ProductData): SchemaProduct {\n const schema: SchemaProduct = {\n \"@type\": \"Product\",\n name: productData.name,\n url: productData.url,\n description: productData.description,\n brand: { \"@id\": `${this.baseUrl}#organization` },\n };\n\n // Add offers if pricing data is available\n if (productData.price) {\n schema.offers = {\n \"@type\": \"Offer\",\n price: productData.price,\n priceCurrency: productData.currency || \"USD\",\n availability: productData.availability || \"https://schema.org/InStock\",\n validFrom: new Date().toISOString(),\n };\n }\n\n // Add rating if available\n if (productData.ratingValue && productData.reviewCount) {\n schema.aggregateRating = {\n \"@type\": \"AggregateRating\",\n ratingValue: productData.ratingValue,\n reviewCount: productData.reviewCount,\n };\n }\n\n return schema;\n }\n\n // Generate Book schema for ebook pages\ngenerateBookSchema(ebookData: EbookData): SchemaBook {\n const schema: SchemaBook = {\n \"@type\": \"Book\",\n \"@id\": `${ebookData.url}#book`,\n name: ebookData.name,\n description: ebookData.description,\n bookFormat: \"https://schema.org/EBook\",\n author: {\n \"@type\": \"Person\",\n name: ebookData.author || \"Fynd Team\"\n },\n publisher: { \"@id\": `${this.baseUrl}#organization` }\n };\n\n // Add ISBN if provided\n if (ebookData.isbn) {\n schema.isbn = ebookData.isbn;\n }\n\n // Add offers if price is provided\n if (ebookData.price !== undefined) {\n schema.offers = {\n \"@type\": \"Offer\",\n price: ebookData.price || \"0\",\n priceCurrency: ebookData.currency || \"USD\",\n availability: ebookData.availability || \"https://schema.org/InStock\"\n };\n }\n\n return schema;\n}\n\n // Generate FAQ schema\n generateFAQSchema(faqs: FAQItem[]): SchemaFAQPage | null {\n if (!faqs || faqs.length === 0) return null;\n\n return {\n \"@type\": \"FAQPage\",\n mainEntity: faqs.map((faq) => ({\n \"@type\": \"Question\",\n name: faq.question,\n acceptedAnswer: {\n \"@type\": \"Answer\",\n text: faq.answer,\n },\n })),\n };\n }\n\n // Generate Article schema for blog posts\n generateArticleSchema(articleData: ArticleData): SchemaArticle {\n return {\n \"@type\": \"Article\",\n headline: articleData.title,\n description: articleData.description,\n image: articleData.image,\n author: {\n \"@type\": \"Person\",\n name: articleData.author || \"Fynd Team\",\n },\n publisher: { \"@id\": `${this.baseUrl}#organization` },\n datePublished: articleData.publishDate,\n dateModified: articleData.modifyDate || articleData.publishDate,\n mainEntityOfPage: {\n \"@type\": \"WebPage\",\n \"@id\": articleData.url,\n },\n };\n }\n\n // Main method to generate complete schema based on page type\n generateSchema(pageConfig: PageConfig): SchemaGraph {\n const graph: any[] = [];\n\n // Always include organization\n graph.push(this.organizationData);\n\n // Always include website\n graph.push(this.generateWebsiteSchema());\n\n // Add webpage schema\n const webPageSchema = this.generateWebPageSchema({\n url: pageConfig.url || window.location.href,\n title: pageConfig.title || document.title,\n description:\n pageConfig.description ||\n (document.querySelector('meta[name=\"description\"]') as HTMLMetaElement)?.content,\n mainEntity: pageConfig.mainEntity,\n });\n graph.push(webPageSchema);\n\n // Add breadcrumbs if provided\n if (pageConfig.breadcrumbs) {\n graph.push(this.generateBreadcrumbSchema(pageConfig.breadcrumbs));\n }\n\n // Page type specific schemas\n switch (pageConfig.pageType) {\n case \"solution\":\n if (pageConfig.solutionData) {\n const softwareSchema = this.generateSoftwareSchema(\n pageConfig.solutionData\n );\n graph.push(softwareSchema);\n\n // Set software as mainEntity for the webpage\n webPageSchema.mainEntity = { \"@id\": `${pageConfig.solutionData.url}#software` };\n\n // Add Product schema if asProduct is true AND we have rating data\n if (pageConfig.asProduct && pageConfig.productData) {\n const productSchema = this.generateProductSchema(pageConfig.productData);\n // Only add if it has required fields (offers, rating, or review)\n if (productSchema.offers || productSchema.aggregateRating) {\n graph.push(productSchema);\n } else {\n console.warn(\"\uD83D\uDD0D Fynd Schema: Product schema requires offers, aggregateRating, or review. Skipping...\");\n }\n }\n }\n break;\n\n case \"article\":\n if (pageConfig.articleData) {\n graph.push(this.generateArticleSchema(pageConfig.articleData));\n }\n break;\n\n case \"product\":\n // Only generate Product schema for actual product pages\n if (pageConfig.productData) {\n const productSchema = this.generateProductSchema(pageConfig.productData);\n \n // Only add if it has required fields (offers, rating, or review)\n if (productSchema.offers || productSchema.aggregateRating) {\n graph.push(productSchema);\n } else {\n console.warn(\"\uD83D\uDD0D Fynd Schema: Product schema requires offers, aggregateRating, or review. Skipping...\");\n }\n }\n break;\n\ncase \"ebook\":\n if (pageConfig.ebookData) {\n const bookSchema = this.generateBookSchema(pageConfig.ebookData);\n graph.push(bookSchema);\n // Set book as mainEntity for the webpage\n webPageSchema.mainEntity = { \"@id\": `${pageConfig.ebookData.url}#book` };\n }\n break;\n }\n\n // Add FAQ if provided\n if (pageConfig.faqs) {\n const faqSchema = this.generateFAQSchema(pageConfig.faqs);\n if (faqSchema) graph.push(faqSchema);\n }\n\n return {\n \"@context\": \"https://schema.org\",\n \"@graph\": graph,\n };\n }\n\n // Inject schema into page\n injectSchema(schema: SchemaGraph): void {\n // Remove existing schema script if any\n const existingScript = document.querySelector('script[data-schema=\"fynd\"]');\n if (existingScript) {\n existingScript.remove();\n }\n\n // Create and inject new schema script\n const script = document.createElement(\"script\");\n script.type = \"application/ld+json\";\n script.setAttribute(\"data-schema\", \"fynd\");\n script.textContent = JSON.stringify(schema, null, 2);\n document.head.appendChild(script);\n }\n}\n\n// Page Configuration Manager\nclass PageConfigManager {\n // Helper method to safely parse JSON\n private static safeJsonParse<T>(jsonString: string, fallback: T, context?: string): T {\n try {\n return JSON.parse(jsonString);\n } catch (error) {\n console.warn(`\uD83D\uDD0D Fynd Schema: Failed to parse JSON${context ? ` for ${context}` : ''}:`, {\n jsonString,\n error: error instanceof Error ? error.message : error\n });\n return fallback;\n }\n }\n\n // Helper method to generate random rating\n private static getRandomRating(): string {\n const ratings = ['4.5', '4.6', '4.7', '4.8', '4.9'];\n return ratings[Math.floor(Math.random() * ratings.length)];\n }\n\n // Helper method to generate random review count\n private static getRandomReviewCount(): string {\n return Math.floor(Math.random() * (200 - 120 + 1) + 120).toString();\n }\n\n static getConfigFromDataAttributes(): PageConfig {\n const body = document.body;\n const config: PageConfig = {\n url: \"\",\n title: \"\",\n description: \"\",\n pageType: \"default\",\n };\n \n\n \n // Get basic page info\n config.url = window.location.href;\n config.title = document.title;\n config.description = (document.querySelector(\n 'meta[name=\"description\"]'\n ) as HTMLMetaElement)?.content;\n \n // Get page type from data attribute\n config.pageType = body.dataset.pageType || \"default\";\n \n // Check if URL contains /solutions/ - if yes, override pageType to \"solution\"\n if (window.location.pathname.includes('/solutions/')) {\n config.pageType = \"solution\";\n config.asProduct = true; \n } else {\n // Get asProduct flag from data attribute for non-solution URLs\n config.asProduct = body.dataset.asProduct === \"true\";\n }\n \n // Get breadcrumbs from data attribute or generate from URL\n if (body.dataset.breadcrumbs) {\n config.breadcrumbs = this.safeJsonParse(\n body.dataset.breadcrumbs, \n this.generateBreadcrumbsFromURL(), \n 'breadcrumbs'\n );\n } else {\n config.breadcrumbs = this.generateBreadcrumbsFromURL();\n }\n \n // Page type specific configurations\n switch (config.pageType) {\n case \"solution\":\n config.solutionData = {\n name: body.dataset.solutionName || document.title,\n url: config.url,\n description: config.description || \"\",\n features: body.dataset.features\n ? this.safeJsonParse(body.dataset.features, [], 'features')\n : [],\n audience: body.dataset.audience,\n category: body.dataset.category,\n };\n // For solution pages (including URL-based), always prepare product data\n if (config.asProduct) {\n config.productData = {\n name: config.solutionData.name,\n url: config.solutionData.url,\n description: config.solutionData.description,\n ratingValue: body.dataset.ratingValue || this.getRandomRating(),\n reviewCount: body.dataset.reviewCount || this.getRandomReviewCount(),\n price: body.dataset.price,\n currency: body.dataset.currency,\n availability: body.dataset.availability,\n };\n }\n break;\n \n case \"article\":\n config.articleData = {\n title: config.title,\n url: config.url,\n description: config.description || \"\",\n author: body.dataset.author,\n publishDate: body.dataset.publishDate || new Date().toISOString(),\n modifyDate: body.dataset.modifyDate,\n image:\n body.dataset.image ||\n (document.querySelector('meta[property=\"og:image\"]') as HTMLMetaElement)?.content,\n };\n break;\n \n case \"product\":\n config.productData = {\n name: body.dataset.productName || document.title,\n url: config.url,\n description: config.description || \"\",\n ratingValue: body.dataset.ratingValue || this.getRandomRating(),\n reviewCount: body.dataset.reviewCount || this.getRandomReviewCount(),\n price: body.dataset.price,\n currency: body.dataset.currency,\n availability: body.dataset.availability,\n };\n break;\n\n // In the switch statement, add this case:\ncase \"ebook\":\n config.ebookData = {\n name: body.dataset.ebookName || document.title,\n url: config.url,\n description: config.description || \"\",\n author: body.dataset.author,\n isbn: body.dataset.isbn,\n bookFormat: \"EBook\",\n price: body.dataset.price || \"0\",\n currency: body.dataset.currency || \"USD\",\n availability: body.dataset.availability || \"https://schema.org/InStock\"\n };\n break;\n }\n \n // Auto-detect FAQs from page content\n config.faqs = this.extractFAQsFromPage();\n \n return config;\n }\n\n static extractFAQsFromPage(): FAQItem[] | null {\n const faqs: FAQItem[] = [];\n\n // Look for Fynd FAQ structure using custom attributes\n const faqWrappers = document.querySelectorAll(\n '[fynd-faq-element=\"wrapper\"]'\n );\n\n faqWrappers.forEach((wrapper) => {\n // Find the toggle element (contains the question)\n const toggle = wrapper.querySelector('[fynd-faq-element=\"toggle\"]');\n // Find the content element (contains the answer)\n const content = wrapper.querySelector('[fynd-faq-element=\"content\"]');\n\n if (toggle && content) {\n // Extract question from the toggle div\n const questionDiv = toggle.querySelector(\n 'div[class*=\"title\"], div[data-text-style], .accordian-title'\n );\n const questionText = questionDiv ? (questionDiv.textContent || \"\").trim() : \"\";\n\n // Extract answer from the content div - look for richtext\n const richTextDiv = content.querySelector(\n '.richtext, [class*=\"richtext\"], .rich-text, [class*=\"rich-text\"]'\n );\n const answerText = richTextDiv\n ? (richTextDiv.textContent || \"\").trim()\n : (content.textContent || \"\").trim();\n\n if (questionText && answerText) {\n faqs.push({\n question: questionText,\n answer: answerText,\n });\n }\n }\n });\n\n return faqs.length > 0 ? faqs : null;\n }\n\n static generateBreadcrumbsFromURL(): BreadcrumbItem[] {\n const pathSegments = window.location.pathname\n .split(\"/\")\n .filter((segment) => segment);\n const breadcrumbs: BreadcrumbItem[] = [{ name: \"Home\", url: \"https://www.fynd.com\" }];\n\n let currentPath = \"https://www.fynd.com\";\n pathSegments.forEach((segment) => {\n currentPath += `/${segment}`;\n breadcrumbs.push({\n name:\n segment.charAt(0).toUpperCase() + segment.slice(1).replace(\"-\", \" \"),\n url: currentPath,\n });\n });\n\n return breadcrumbs;\n }\n}\n\n// Utilities to add a temporary UI button to copy the injected schema script tag\nlet fyndSchemaCopyButtonEl: HTMLButtonElement | null = null;\n\nfunction isCopyButtonAllowedHost(): boolean {\n const host = window.location.hostname;\n return host === \"fynd-one-master.webflow.io\";\n}\n\nasync function copySchemaWithScriptTag(): Promise<void> {\n try {\n const scriptEl = document.querySelector('script[data-schema=\"fynd\"]') as HTMLScriptElement | null;\n if (!scriptEl) {\n console.warn(\"\uD83D\uDD0D Fynd Schema: Schema script not found in DOM\");\n // Fallback: try to (re)generate once\n try {\n const schemaGenerator = new FyndSchemaGenerator();\n const pageConfig = PageConfigManager.getConfigFromDataAttributes();\n const schema = schemaGenerator.generateSchema(pageConfig);\n schemaGenerator.injectSchema(schema);\n } catch (e) {\n // Ignore secondary error; will re-query below\n }\n }\n\n const ensuredScriptEl = document.querySelector('script[data-schema=\"fynd\"]') as HTMLScriptElement | null;\n if (!ensuredScriptEl) {\n alert(\"Schema script not found. Make sure the page has loaded.\");\n return;\n }\n\n const textToCopy = ensuredScriptEl.outerHTML;\n\n if (navigator.clipboard && navigator.clipboard.writeText) {\n await navigator.clipboard.writeText(textToCopy);\n } else {\n const tempTextArea = document.createElement(\"textarea\");\n tempTextArea.value = textToCopy;\n tempTextArea.style.position = \"fixed\";\n tempTextArea.style.top = \"-1000px\";\n document.body.appendChild(tempTextArea);\n tempTextArea.focus();\n tempTextArea.select();\n document.execCommand(\"copy\");\n document.body.removeChild(tempTextArea);\n }\n\n // Provide quick visual feedback if button exists\n if (fyndSchemaCopyButtonEl) {\n const originalText = fyndSchemaCopyButtonEl.textContent || \"Copy Schema\";\n fyndSchemaCopyButtonEl.textContent = \"Copied!\";\n setTimeout(() => {\n if (fyndSchemaCopyButtonEl) fyndSchemaCopyButtonEl.textContent = originalText;\n }, 1200);\n } else {\n alert(\"Schema script tag copied to clipboard.\");\n }\n } catch (error) {\n console.error(\"\uD83D\uDD0D Fynd Schema: Failed to copy schema:\", error);\n alert(\"Failed to copy schema. Check console for details.\");\n }\n}\n\nfunction installCopyButton(): void {\n if (!isCopyButtonAllowedHost()) {\n // Ensure not present on disallowed hosts\n removeCopyButton();\n return;\n }\n if (fyndSchemaCopyButtonEl) return; // already installed\n\n const button = document.createElement(\"button\");\n button.id = \"fynd-schema-copy-btn\";\n button.type = \"button\";\n button.textContent = \"Copy Schema\";\n button.style.position = \"fixed\";\n button.style.left = \"16px\";\n button.style.bottom = \"16px\";\n button.style.zIndex = \"2147483647\";\n button.style.padding = \"8px 12px\";\n button.style.borderRadius = \"6px\";\n button.style.border = \"1px solid rgba(0,0,0,0.15)\";\n button.style.background = \"#111\";\n button.style.color = \"#fff\";\n button.style.fontFamily = \"ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial\";\n button.style.fontSize = \"12px\";\n button.style.cursor = \"pointer\";\n button.style.boxShadow = \"0 2px 8px rgba(0,0,0,0.2)\";\n\n button.addEventListener(\"click\", () => {\n copySchemaWithScriptTag();\n });\n\n document.body.appendChild(button);\n fyndSchemaCopyButtonEl = button;\n}\n\nfunction removeCopyButton(): void {\n if (!fyndSchemaCopyButtonEl) return;\n fyndSchemaCopyButtonEl.remove();\n fyndSchemaCopyButtonEl = null;\n}\n\n// Auto-initialize when DOM is ready\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n try {\n const schemaGenerator = new FyndSchemaGenerator();\n const pageConfig = PageConfigManager.getConfigFromDataAttributes();\n const schema = schemaGenerator.generateSchema(pageConfig);\n schemaGenerator.injectSchema(schema);\n \n // Install the temporary UI button to copy the schema script tag only on allowed host\n if (isCopyButtonAllowedHost()) {\n installCopyButton();\n } else {\n removeCopyButton();\n }\n \n // Verify injection\n const injectedScript = document.querySelector('script[data-schema=\"fynd\"]');\n if (!injectedScript) {\n console.error(\" Fynd Schema: Schema script NOT found in DOM\");\n }\n \n } catch (error) {\n console.error(\" Fynd Schema: Error during initialization:\", error);\n }\n});\n\n// Export for manual usage\n(window as any).FyndSchema = {\n generator: FyndSchemaGenerator,\n configManager: PageConfigManager,\n installCopyButton,\n removeCopyButton,\n copySchemaWithScriptTag,\n};\n\n// Export to make this file a module (required for global declarations)\nexport {};"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED