[{"data":1,"prerenderedAt":497},["ShallowReactive",2],{"navigation_docs":3,"-packages-schema":67,"-packages-schema-surround":492},[4,20,41],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Overview",false,"\u002Fgetting-started","1.getting-started",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Adding Documentation","\u002Fgetting-started\u002Fadding-documentation","1.getting-started\u002F3.adding-documentation","i-lucide-file-plus",{"title":21,"icon":22,"path":23,"stem":24,"children":25,"page":6},"Applications","i-lucide-layout-grid","\u002Fapplications","2.applications",[26,31,36],{"title":27,"path":28,"stem":29,"icon":30},"Web","\u002Fapplications\u002Fweb","2.applications\u002F1.web","i-lucide-globe-code",{"title":32,"path":33,"stem":34,"icon":35},"Coordinator","\u002Fapplications\u002Fcoordinator","2.applications\u002F2.coordinator","i-lucide-clock",{"title":37,"path":38,"stem":39,"icon":40},"Profile Chrome Extension","\u002Fapplications\u002Fprofile-recorder","2.applications\u002F3.profile-recorder","i-lucide-mouse-pointer-click",{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":6},"Packages","i-lucide-package","\u002Fpackages","3.packages",[47,52,57,62],{"title":48,"path":49,"stem":50,"icon":51},"Profile Runner","\u002Fpackages\u002Fprofile-runner","3.packages\u002F1.profile-runner","i-lucide-scan-search",{"title":53,"path":54,"stem":55,"icon":56},"Schema","\u002Fpackages\u002Fschema","3.packages\u002F2.schema","i-lucide-file-json",{"title":58,"path":59,"stem":60,"icon":61},"UI","\u002Fpackages\u002Fui","3.packages\u002F2.ui","i-lucide-layout-dashboard",{"title":63,"path":64,"stem":65,"icon":66},"Coordinator SDK","\u002Fpackages\u002Fcoordinator-sdk","3.packages\u002F3.coordinator-sdk","i-lucide-plug-zap",{"id":68,"title":53,"body":69,"description":485,"extension":486,"links":487,"meta":488,"navigation":489,"path":54,"seo":490,"stem":55,"__hash__":491},"docs\u002F3.packages\u002F2.schema.md",{"type":70,"value":71,"toc":480},"minimark",[72,92,97,112,301,317,321,356,456,460,476],[73,74,75,79,80,87,88,91],"p",{},[76,77,78],"code",{},"@scrape-admin\u002Fschema"," defines the ",[81,82,86],"a",{"href":83,"rel":84},"https:\u002F\u002Fzod.dev",[85],"nofollow","Zod"," schemas and inferred TypeScript types shared across the\nScrape Admin apps and packages. It has no runtime dependencies on any single app, so the web app, coordinator, and\n",[76,89,90],{},"profile-runner"," can all validate the same shapes.",[93,94,96],"h2",{"id":95},"profile-schema","Profile schema",[73,98,99,102,103,106,107,111],{},[76,100,101],{},"zProfile"," and ",[76,104,105],{},"zProfileElement"," describe a scraping profile: the URL to load, settings, and the elements to extract.\nThey are consumed by ",[81,108,109],{"href":49},[76,110,90],{}," to run profiles, and by the web app to validate\nprofiles stored on collections and entries.",[113,114,119],"pre",{"className":115,"code":116,"language":117,"meta":118,"style":118},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { zProfile } from '@scrape-admin\u002Fschema'\n\nconst profile = zProfile.parse({\n  url: 'https:\u002F\u002Fexample.com',\n  elements: [\n    { type: 'attribute', name: 'title', selector: 'h1', resultSelector: '0.text' },\n  ],\n})\n","ts","",[76,120,121,153,160,188,209,220,284,292],{"__ignoreMap":118},[122,123,126,130,134,138,141,144,147,150],"span",{"class":124,"line":125},"line",1,[122,127,129],{"class":128},"s7zQu","import",[122,131,133],{"class":132},"sMK4o"," {",[122,135,137],{"class":136},"sTEyZ"," zProfile",[122,139,140],{"class":132}," }",[122,142,143],{"class":128}," from",[122,145,146],{"class":132}," '",[122,148,78],{"class":149},"sfazB",[122,151,152],{"class":132},"'\n",[122,154,156],{"class":124,"line":155},2,[122,157,159],{"emptyLinePlaceholder":158},true,"\n",[122,161,163,167,170,173,175,178,182,185],{"class":124,"line":162},3,[122,164,166],{"class":165},"spNyl","const",[122,168,169],{"class":136}," profile ",[122,171,172],{"class":132},"=",[122,174,137],{"class":136},[122,176,177],{"class":132},".",[122,179,181],{"class":180},"s2Zo4","parse",[122,183,184],{"class":136},"(",[122,186,187],{"class":132},"{\n",[122,189,191,195,198,200,203,206],{"class":124,"line":190},4,[122,192,194],{"class":193},"swJcz","  url",[122,196,197],{"class":132},":",[122,199,146],{"class":132},[122,201,202],{"class":149},"https:\u002F\u002Fexample.com",[122,204,205],{"class":132},"'",[122,207,208],{"class":132},",\n",[122,210,212,215,217],{"class":124,"line":211},5,[122,213,214],{"class":193},"  elements",[122,216,197],{"class":132},[122,218,219],{"class":136}," [\n",[122,221,223,226,229,231,233,236,238,241,244,246,248,251,253,255,258,260,262,265,267,269,272,274,276,279,281],{"class":124,"line":222},6,[122,224,225],{"class":132},"    {",[122,227,228],{"class":193}," type",[122,230,197],{"class":132},[122,232,146],{"class":132},[122,234,235],{"class":149},"attribute",[122,237,205],{"class":132},[122,239,240],{"class":132},",",[122,242,243],{"class":193}," name",[122,245,197],{"class":132},[122,247,146],{"class":132},[122,249,250],{"class":149},"title",[122,252,205],{"class":132},[122,254,240],{"class":132},[122,256,257],{"class":193}," selector",[122,259,197],{"class":132},[122,261,146],{"class":132},[122,263,264],{"class":149},"h1",[122,266,205],{"class":132},[122,268,240],{"class":132},[122,270,271],{"class":193}," resultSelector",[122,273,197],{"class":132},[122,275,146],{"class":132},[122,277,278],{"class":149},"0.text",[122,280,205],{"class":132},[122,282,283],{"class":132}," },\n",[122,285,287,290],{"class":124,"line":286},7,[122,288,289],{"class":136},"  ]",[122,291,208],{"class":132},[122,293,295,298],{"class":124,"line":294},8,[122,296,297],{"class":132},"}",[122,299,300],{"class":136},")\n",[73,302,303,306,307,309,310,313,314,316],{},[76,304,305],{},"zAction"," describes the actions (",[76,308,76],{},", ",[76,311,312],{},"waitForElement",", and others) that can run before or after an element is\nextracted — see ",[81,315,48],{"href":49}," for the full list supported at runtime.",[93,318,320],{"id":319},"webhook-schema","Webhook schema",[73,322,323,102,326,329,330,333,334,336,337,340,341,344,345,348,349,352,353,355],{},[76,324,325],{},"zWebhook",[76,327,328],{},"zWebhookDestination"," describe a webhook call: its URL, HTTP method, headers, optional bearer token,\nretry ",[76,331,332],{},"attempts",", and body. ",[76,335,328],{}," (the schema without a ",[76,338,339],{},"body",") is reused by\n",[76,342,343],{},"@scrape-admin\u002Fweb-schema"," for a collection entry's ",[76,346,347],{},"destinations",", and by ",[76,350,351],{},"@scrape-admin\u002Fcoordinator-schema"," for a\nscheduled webhook's ",[76,354,347],{}," — so both apps validate destinations the same way.",[113,357,359],{"className":115,"code":358,"language":117,"meta":118,"style":118},"import { zWebhookDestination } from '@scrape-admin\u002Fschema'\n\nconst destination = zWebhookDestination.parse({\n  url: 'https:\u002F\u002Fexample.com\u002Fhooks\u002Fscrape-complete',\n  method: 'POST',\n  token: 'secret-token',\n})\n",[76,360,361,380,384,403,418,434,450],{"__ignoreMap":118},[122,362,363,365,367,370,372,374,376,378],{"class":124,"line":125},[122,364,129],{"class":128},[122,366,133],{"class":132},[122,368,369],{"class":136}," zWebhookDestination",[122,371,140],{"class":132},[122,373,143],{"class":128},[122,375,146],{"class":132},[122,377,78],{"class":149},[122,379,152],{"class":132},[122,381,382],{"class":124,"line":155},[122,383,159],{"emptyLinePlaceholder":158},[122,385,386,388,391,393,395,397,399,401],{"class":124,"line":162},[122,387,166],{"class":165},[122,389,390],{"class":136}," destination ",[122,392,172],{"class":132},[122,394,369],{"class":136},[122,396,177],{"class":132},[122,398,181],{"class":180},[122,400,184],{"class":136},[122,402,187],{"class":132},[122,404,405,407,409,411,414,416],{"class":124,"line":190},[122,406,194],{"class":193},[122,408,197],{"class":132},[122,410,146],{"class":132},[122,412,413],{"class":149},"https:\u002F\u002Fexample.com\u002Fhooks\u002Fscrape-complete",[122,415,205],{"class":132},[122,417,208],{"class":132},[122,419,420,423,425,427,430,432],{"class":124,"line":211},[122,421,422],{"class":193},"  method",[122,424,197],{"class":132},[122,426,146],{"class":132},[122,428,429],{"class":149},"POST",[122,431,205],{"class":132},[122,433,208],{"class":132},[122,435,436,439,441,443,446,448],{"class":124,"line":222},[122,437,438],{"class":193},"  token",[122,440,197],{"class":132},[122,442,146],{"class":132},[122,444,445],{"class":149},"secret-token",[122,447,205],{"class":132},[122,449,208],{"class":132},[122,451,452,454],{"class":124,"line":286},[122,453,297],{"class":132},[122,455,300],{"class":136},[93,457,459],{"id":458},"types","Types",[73,461,462,463,102,466,469,470,472,473,475],{},"Every schema exports an inferred type alongside it, for example ",[76,464,465],{},"Webhook",[76,467,468],{},"WebhookDestination"," for ",[76,471,325],{}," and\n",[76,474,328],{},". Prefer importing the inferred type rather than redeclaring the shape elsewhere, so schema\nchanges are caught by the type checker.",[477,478,479],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":118,"searchDepth":155,"depth":155,"links":481},[482,483,484],{"id":95,"depth":155,"text":96},{"id":319,"depth":155,"text":320},{"id":458,"depth":155,"text":459},"Shared schema for profiles, collections, entries, and webhooks.","md",null,{},{"icon":56},{"title":53,"description":485},"mK8YNnMcyPgbZzFmkosvCt9UmQDspq0NgO3ATqPqK7g",[493,495],{"title":48,"path":49,"stem":50,"description":494,"icon":51,"children":-1},"Extract website data using reusable YAML or JSON profiles.",{"title":58,"path":59,"stem":60,"description":496,"icon":61,"children":-1},"Common UI elements and components for the Scrape Admin applications.",1790864111784]