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